[yummyHitOS] Rest 1
아닛 야미가 하루에 2개의 포스팅을!?
놀라지말아여~ 잡아먹지 않아요!! 사실 저번에도 2개 포스팅을 올린적이 있다능...☆
생각하다 보니까 제가 실행화면을 하나도 올리지 않아서 여러분이 저를 믿지 못할 것 같아서 걱정이 됐어여...T^T
우리가 64bit 모드로 전환한 10장까지의 실행화면을 보여드리기 위해서 이로케 포스팅을 적게 되었답니다~! 개그콘서트의 코너인 사마귀유치원이 생각나네여!! 살았답니다~~!
이런 헛소리는 그만하고 포스팅이나 하라구여? ㅜㅠㅜ마상... 하지만 여러분이 공부를 재밌게 하길 바라는 마음에... 눙물...
아니져!! 포스팅은 정보를 주기 위한 작업이니까요!! 자 그럼 이제 부트로더부터 시작해서 64bit 모드 전환까지의 실행 화면을 올려드릴게여!!
실행화면이 나오기 전에!! 이 글은 실행화면을 아주 맘편~~히 보면서 쉬어가는 챕터이니 심각크하게 보실 필요는 없어영!!
Captures
bootloader
어멋... 우리 처음에 시작할 때 나온 부트로더가 아닌가여!? 저 알록달록한 YummyHitOS를 보세여!! 넘나 이쁜것~☆
저렇게 알록달록 알콩달콩 주니어발록한 색깔내는법은 제가 가르쳐드렸지여!? BootLoader.asm 소스파일에서 PRINTMESSAGE 함수부분입니다!!
야미의 Github Page를 보시면(매일 홍보하면 욕먹을까바... 헤헿 제 깃헙은 이전 포스팅에 올려두었어요!!) Y좌표와 X좌표까지는 같지만 그 다음 한 줄이 다른 것을 느끼실거예요! 출력 문자열 주소에서 BX 레지스터의 하위 비트인 BL 비트에 3번째 파라미터인 "색깔"을 넣는 명령이지요!
(참고로 어셈블리어에서는 먼저 push하는 것부터 마지막 파라미터로 이동해요. 만약 함수가 test(int a, int b, int c, ..., int i, int j)로 파라미터가 10개이고 push가 순서대로 push 1 / push 2 / push 3 / ... / push 9 / push 10 이 된다면 j = 1 / i = 2 / ... / c = 8 / b = 9 / a = 10 이렇게 저장이 된답니다!! 이 점 숙지하셔야해요!!)
그렇게 우리는 [bp + 4]에 X좌표를, [bp + 6]에 Y좌표를, [bp + 8]에 색깔을 넣게 되었어요!
그리고 MESSAGELOOP 부분 함수에서 ES:DI 부분에 글자(CX 레지스터의 하위 비트인 CL 비트)를, ES:DI + 1 부분에 색깔을 지정하는 BL 비트를 넣어주어 루프를 돌게 해주었어요. 이렇게하면 저렇게 크림슨발록같은 글자를 출력시킬 수 있어요~! 얏호우! 가랏 크림슨발록!!
참 늠름하고 믿음직하게 생기지 않았나여? 귀요미 마블리만큼이나 우락부락하네여 헿헤헿
이렇게 OS 이미지 로딩을 끝낸 우리는 각 리얼모드에서의 세그먼트 디스크립터, GDT 테이블, 그리고 보호 모드를 지나 32bit로 전환하게 되었었었었었어요. 야미의 대과거분사는 "~했었었었었습니다" 와 같이 '었' 의 개수로 표현한다고 전해지더라구요!
과연 32bit의 모습은 어떻게 생겼을까요!? 궁금하시죠!? 궁금하실거라 믿고 스크린샷을 뙇 드릴게여!
32bit
어멋... 이렇게 깔끔하게 하다니 넘나 군대스러운걸요? 오와 열이 확실히 잡힌 각잡이같아서 기부니가 묘하네여! 제가 쫌 완벽주의라서.. 핳하
그 다음으로 우리는 32bit 모드 전환 기념 jmp 명령어를 통해 C언어로 짜여진 Main함수로 들어가려했었어요.
제가 넘나 좋아하는 C언어로 점프라니! 언제든지 무한루프 뫼비우스의 띠마냥 쩜프쩜프 하고싶네여!
역시 쩜프하면 요새 잘 안보이고 문희준의 아내가 속했었다가 탈퇴하였다는 슬픈소식이 들린 그 그룹이 생각나기 마련이져!
쩜핑잇겟! 쩜핑잇겟! 에블바리~.. 어라 가사가 쩜핑 예 라고하네영 재미없게... 난 잇겟이좋다능 ㅜㅠㅜ
네넹 그래서 우리는 32bit도 완벽하게! C언어로도 완벽하게! 전환을 완료하였어요~ 박수쨖쨖~
참 제가 매번 박수 쨖쨖하는 이유가 있지요! 혹시 방탄소년단이라고 아시나여!? 방탄소년단의 "둘! 셋!" 이라는 노래가 있어요!!
이걸 또 생각하다보니.. 김감미라는 더빙하시는 분께서 "레미레미 도레미" 애니메이션 더빙한 박수 짝짝! 동영상이 생각나네영... 이런 의식의 흐름 톸톸 넘나 정신분열같은것...ㅠㅜㅠ 이상한사람 아니랍니다 ㅜㅠㅜ 박수 짝짝! 짤을 보여드릴게여 헿헤헿헤헤
자! 이제 이런 잡담은 그만해야겠죠!? 우리가 어디까지했ㄷ..
32bit에 도달한 우리는 64bit로 전환할 수 있는지 메모리를 체크해봐야 했었었었어요. 그와 함께 64bit로 가기 위한 준비중 하나인 커널 초기화!
mem check
짜란!! 넘나 깔끔하지여? 하.. 마음이 정화되는 느낌이다.. 이런 변태적인 마인드는 컴공에게 꼭 필요한 요소가 아닐까요? 헿헤헤헿
참.. 여담인데(뭔놈의 포스팅 글에서 여담이 반을 넘는지 참 이해가 안가네여.. 이번 포스팅은 쉬어가는 타임이니까 좀만 봐주세여!! 담엔 꼭 열씸히 하는 모습 보여드릴게여+___+) 저의 모든 gif 짤들은 제가 직접 동영상을 짜르고 붙이고 자막달고 1개당 1시간정도의 공을 들여 만드는 거예여!! 만들고 나면 스스로 뿌듯뿌듯ㅎㅎㅎㅎ
본론으루 넘어와서 현재 저의 배치파일은 1024MB만큼의 메모리를 주어지게 되어있어요. 그렇기 때문에 위와 같이 64bit로 넘어갈 때 메모리가 적합한지 체크가 되고 넘어가게 되는거죠!
만약 이를 32bit 메모리에 맞게 바꾼다면!? 에러가 나겠죠?! 확인해봅씨다!!
(너무 -m 32 로 단정지으면 재미없어서... 64MB 바로 직전인 63MB만큼을 주어봐써영 ㅎㅎㅎ)
크~ 설정한 대로 에러가 나고 에러문구가 나오네여! 그래서 커널 초기화로 넘어가지도 않아요.
이렇게 하나 하나 체크해보며 호기심을 풀어가야해요. 그래야 좀 더 머릿속에 쏙!쏙! 들어가니깐요.
이 다음으로 우리는 페이징 기법을 통한 소스코드를 만들어 보았어요. 페이징 기법을 설마 까먹으신 것은 아니겠죠!? 그 넘나 웃긴 유해진느님의 영화쏙 애드리브 짤이 있던 포스팅이요!! 그건 상상만해도 웃겨여 ㅜㅠㅜㅋㅋㅋㅋㅋ
4단계 페이징 기법은 2MB 크기의 페이지로 이것 저것 여러가지를 하는 친구였어요. 이 친구를 통해 페이지 테이블을 초기화 시켜주었죠.
paging
언제봐도 이 각잡이의 이쁜 오와 열! 스스로 감동... 사실 저기 YummyHitOS 구문이 흠이긴 하지만, 이거슨 나즁에 인터럽트를 통해 이쁘게 만들었어요! 아직은 왼쪽으로 치우쳤으니.. 색안경을 끼시고 봐주세영 ㅎㅎㅎ헿
그리고 프로세서에서 제공해주는 명령어를 이용한 CPU 제조사 알아보기! 그 때 cpuid 라는 어셈블리 명렁어를 사용했었죠.
cpu check
제 맥뿍은 AMD를 사용하는 것 같아여! 사실 저는 CPU의 ' 자도 몰라영. 먼지만큼도 모른다는 거죠 핳하핳 이건 자랑이 아닌데 웨저뤱..
이 바로 전 포스팅에서도 언급했었지만, Intel로 바꾸는 방법! 말씀드렸죠?! 네할렘~~ Nehalem을 기본 CPU로 설정해주면 Intel로 뜬다는 사실!!
참!! 여러분 이 배치파일이 여러분의 배치파일과 다르진 않으신가요?
사실 이 배치파일도 이 전 포스팅에서 제가 막 한풀이했던 그 때 찾아낸 한 가지 방법이었어여.. 하지만 이거슨 절대 도움이 1도 되지 않았다능..
REM <주석문> : 주석과 같이 설명을 적기 위한 방법인데, 이 외에도 2가지 방법이 더있다는 사실!!
: <주석문> 방법 / :: <주석문> 방법이 있답니다!
@ECHO OFF : 배치파일이 쓸데없는 명령을 복창하지 않도록 하기 위한 명령이라고하는데, 복창이라는 단어를 쓰니 넘나 어려워보이네요.
만약 dir 명령이 배치파일에 있다고 했을 때, @ECHO OFF가 붙으면 배치파일만 실행시키면 결과값만 출력시켜주고, @ECHO OFF가 붙지 않으면 배치파일을 실행시켰을 때 dir 명령을 출력해준 후 결과값을 출력시켜준다는 의미예여!
SET <환경변수> : 환경변수를 설정하는 명령어라고 합니다. 뭐 SET 이라는 단어만 봐도 뭔가 느낌이 딱 설정하게 생기지 않았나요?
이렇게 이루어진 저 배치파일은 전혀 하나~도 쓸모가 없는 것 같으니 그냥 맨 밑줄의 Qemu 실행 명령만 있으시면 돼요!!
자 그러면 CPU 설정을 Intel로 한 결과를 볼까요?
크~ 이 전 포스팅에서 본 것과 같은 문구가 떡~하니 나왔네요. 얘는 각이 잡히질 않더라구요 ㅜㅠ 포기해버렸어요.. 혹시 12글자가 넘는 프로세서가 있을까봐 걱정도 되더라구요... 저는 프알못이니까요ㅜㅠ 없기를 바라며 저렇게 그냥 둘래요 헿ㅎ헤헿
그리고 64bit 모드를 지원하는가도 체크해주어야 했어요.
64bit check
짜란!! 넘나 잘 되는군요!! 저는 64bit 모드가 지원이 잘 되나봅디다 ㅎㅎ헿 이 때 쓰였던 MSR 레지스터를 잘 기억해두세요! 언.젠.가 쓸 일이 있지 않을까요..? 아닌가..? 아니면 죄송..ㅜㅠ
오늘도 굉장히 스압을 드리는 것 같네여.. 다시 한 번 오늘은 쉬어가며 보는 곳이니까 그냥 편히 스크롤을...퍽ㅍ겊ㄱ퍽퍽퍼겊ㄱ
죄송해여 너무 길게써서 ㅜㅠ 글쓰다보면 즐거워서 괜히 혼자 씽나서 막 짤만들고 제정신이 아닌 것 같아요ㅋㅋㅋ 제목에 약빨고 적는 야미의 OS 개발일지라고 바꿔버릴까요? 오 이거 제목 괜츈한 것 같지 않아요? 혼자만의 착각쏙에 사는 야미...☆
마지막으로 64bit로의 전환이 따란! 하고 끝나면 한 가지 재밌는걸 보여드릴게요 ㅎㅎㅎ싱기한게 많은 쏘프트웨어 세상~_~
64bit
요거슨 제 맥뿍이니까 되는게 아니냐구여? 혹씨나 그러실까봐 네할렘버젼으로도 한 번 실행시켜드려보겠숩니다!!
네할렘친구도 참 잘 돌아가는 이모습~ 이쁘네요 이쁘다이뻐 우리 YummyHitOS 우쮸쮸~
그럼.. 이게 안 돌아가는 CPU도 있기는 있나 궁금하시지요!? 그걸 위해 제가 Qemu에서 -cpu 옵션으로 들어가는 프로세서 목록을 보여드릴게요!
크 뭐가 이렇게 많아요... 처음듣는거 투성이... 다른 분의 포스팅에서는 n270이라는 싱기방기한 프로세서를 쓰셨더라구요! 이 프로세서도 64bit를 지원해주지 않지만, 이 야미는 호기심이 만땅만땅 개성파를 보여주는 이 개성야미!! 이기 때문에 새로운 프로세서를 찾아 나섰어요.
보이시죠?! athlon 이라는 프로세서를 써보았어요! 아쓸론이라고읽나요? 무쓸모론.. 모기지론.. 현대캐피탈 프라임론..? 죄송해여ㅜㅠ 죄송한 짓을 알면서 왜 할까여... 나란녀석 참...핳하☆
그렇다면 이 아쓸론이라는 프로세서는 과연 어떻게 결과값이 출력될까요!? 둒흔둒흔!!
따란!! 아까부터 짜란 따란 거리면서 짤을 너무너무 쓰고싶었으니 이 포스팅을 접으면서 따란 짤을 올려야겠어요!! 못참게따 끄아아앙!!
저렇게 64bit 모드 전환이 안되는 프로세서라고 친절히 알려주는 이쁜 YummyHitOS예요!!
우리가 여태 진행했던 10장까지의 실행결과를 보여드렸어요! 사실.. 제 Github Page에는 64비트의 디스크립터 이후부터 커밋을 해가지고..
이 전의 이 실행결과들을 궁금해하신다면 제가 소스파일을 직접 메일로.. 발송할 수 있도록 노력해볼게요! 제 일은 열심히하면서 다른건 귀찮아서 잘 안ㅎ 아녜여 전 친절한 야미니까 모두 만사 OK라능!!
자 이제 우리 그러면 인사를 하며 따란 짤을 만나볼까여!? 헿헤헤헿 다음장인 11장에서 키보드 입력이 가능하게 만들러 꾜꾜!!
Check out the yummyhit’s website for more info on who am i. If you have questions, you can ask them on E-mail.
댓글남기기