[yummyHitOS] 9 day (2017.07.20)
안녕하세여? 패닉상태에 질려있는 야미예여! 이건 외않되 저건 또 외않되 ㅠㅜㅠㅜ(마춤뻡그켬ㅋㅋㅋㅋㅋㅋㅋㅋ재미땨)
사실 요새 물론 OS 개발에서도 막히는 부분이 없을 쑤가 없지만...(야미는 오타를 거의내지않는 프로타자왕이랍니다!! 뜬금 자화자찬 헿ㅎ헿)
개발중이던 해킹 툴은 더더욱 건들지 못하여 답이 없는 상태입니다 ㅜㅠㅜㅠ이 더운 여름에 모락모락 피어나는 아지랑이같이 날아가는 내멘탈아~~
진심 요새 더위 실화인가여? 잘 쑤가 없어여!! 작년엔 모기가 판을쳐서 못자게하더니 이번엔 더위가 판을치네요... 저의 불면증은 극에 달하고 있어요ㅜㅠㅜ 곧 팬더가 되게꾼(이건 송아진가.. 아님 달마시안 점박이 강아진가..)
그냥 모든 사람이 원하는 삶으로 살아가고싶네여.. 밥잠밥잠밥밥잠...
이렇게만 살 수 있다면 얼마나 좋을까여.. 저 체크 하나 하는데에만 한시간 걸릴 것 같아여! 라면주세여 현기증난단말이예여ㅜㅠㅜ
제가 너무 궁시렁궁시렁 말이 많았죠?! 오랜만에 글을 쓰다보니ㅜㅠ 사실 요새 OS 개발 시간이 적어서 다른걸 포스팅 하려했는데 이게 환경구축도 해야하고... 아닛 지금보니 포인터부분에서 세그먼테이션 핵폭발퐝퐝터짐이 생기더라구여?!
역시 개발전용 OS와 함께 테스트전용 OS도 여러 환경으로 준비해두어야 하는 것이 개발자의 기본기인 것 같아요!!
그리고 한 가지 더!! 포스팅을 열씸히 하루 하루 쓰다보니... 걱정이 뙇 오는거있져!?
포스팅은 하루에 책 한 챕터씩 나가는데... 저의 개발은 며칠에 걸쳐 한 챕터를 나가니... 나중엔 막 개발하면서 막 글쓰다보면 여기에 욕이 난무하면서 막 으아라ㅜㅇ흐ㅏㅇㅎ왜안도맹82ㅇ19(*!@ㅇㅆㅃ(!@ㅕㄸ 막 이러고 있을까봐 천천~히 쓰려구요....헿헤헿 ㅜㅠㅜ
Keyboard device
우리는 오늘 키보드 디바이스 드라이버를 추가한다고 해요!!(급전개 빵긋)
키보드 컨트롤러를 이용해 포트와 연결하여 키보드를 치는 것이었따니...!!! 포트라니!!! 네트워크의 포트가아닌 하드웨어의 그 PIN번호같은 그!!
네.. 그렇습니다.. 사실 컴공을 나왔다는 야미는 공부를 하나도 안했기에 이런 것도 모르고 그냥 키보드를 본체에 꽂으면 알아서 인식해서 타자치는건쥴 알았다능...ㅜㅠㅜ
지금 1시간동안 11장의 첫페이지를 펴두고 있네요.. 이해가 넘나 안되는 것 ㅜㅠㅜ
controller
키보드 컨트롤러는 PC 내부 버스(BUS)와 포트 I/O 방식으로 연결되어 있으며, 포트 어드레스는 0x60과 0x64를 사용합니다.
암기일까여? 이해하고싶어여! 내부 버스 방식과 포트 입출력 방식은 뭐... 하드웨어 제작자분들께서 그렇게 만드셨을테니... 조용히할게요ㅜㅠㅜ
그런데 왜 왜 포트 주소가 꼭 저것인가요!! 그 많은 1바이트의 숫자중에 왜 하필!! 넘나 궁금하지 않으세여?!
T^T 이렇게 궁금증이 많아도 병인 것 같아요... 키보드에 대해 찾다보니 PS/2 방식? 전 또 플레이스테이션인쥴!!
인텔 8042(i8042라고도 한다네여!!)/호환 마이크로 컨트롤러는 PC에서 키보드 컨트롤러로 사용되어진다구 해요. 무슨 마더보드의 칩셋으로 포함이 되어있다고하는데... 양파같은 우리의 키보드...☆ 마더보드의 칩셋까지 이해하기엔 뇌가 쭈굴쭈굴해서 모르게써영 ㅜㅠㅜ 게다가 하드웨어는 노잼..
이제는 폐지된 SBS의 웃찾사를 기억하시나여!? 거기에서 남자끼리 라는 코너가 있었는뎅 잠깐 핫핫 핫이슈였지여!! ㅜㅠ재밌었는데 사라지다닛...
그 i8042 키보드 컨트롤러에는 책의 표 11-1과 같이 4가지 레지스터를 가지고 있다고 해여!! 그 레지스터들은 각자 1바이트의 크기이고, 책과 상이한 레지스터가 하나 있네여!? 컨트롤 레지스터는 읽기/쓰기 둘 다 가능하다구 합니다!!
register
입력 버퍼 / 출력 버퍼 / 상태 레지스터 : 포트 0x60 / 포트 0x64를 통해 직접 접근이 가능. 순서대로 읽기 / 쓰기 / 읽기 가능
컨트롤 레지스터 : 읽기 전용 바이트 명령어를 통해 읽고 / 쓰기 전용 바이트 명령어를 통해 쓴다.
포트 0x64의 쓰기 부분은 레지스터에 쓰지 않고 8042 컨트롤러가 번역하도록 명령어를 전송한다.
정리하면 이렇게 되는 것 같아여!! 물리적 입출력 핀번호와 같이 설명하기엔... 저도 이해를 못했어여 ㅜㅠ넘나 복잡한 하드웨어느님들...
그 외 상태 레지스터의 비트 구성(상태 레지스터는 8개의 상태 플래그, 컨트롤 레지스터는 7개의 컨트롤 플래그로 이루어져 있다구 해여!!)과 키보드 컨트롤러 커맨드는 책과 동일하니 책을 열씸히 읽어주시면 됩니다!!
당분간 우리는 알지못하는 커맨드와 포트에 의해 무슨 작업들을 많이많이 할거예요.. 다 암기겠져? 술을 마니먹어서 그런지 암기가 넘나 안되는 저에겐 치☆명☆적☆인 부분이네여 ㅜㅠㅜ얼른 shell 에서 명령어나 치고싶따...
참 여러분은 플레이스테이션같이 생긴 이름인 PS/2 포트를 아시나여? 요새는 USB형식의 마우스와 키보드가 많이나오지만, 불과 8년전까지만 해도 보.편.적.으.로 PS/2 단자의 컴퓨터를 이용했어요!!(물론 아직 저도 옛날 보편사람이어서 PS/2 단자 컴퓨터입니다! 아재로 만드는 것 같다고 정색하시지 마셔요ㅜㅠㅜ...)
동그랗게 생긴 단자에 세상에서 제일 아름다운 색깔인 보라색과 봄처럼 상콤상콤한 초록색으로 알록달록하게 칠해져있는 그것이 바로 마우스와 키보드의 수단자입니다!(본체가 암단자 / 접속단자 / 입력단자, 외부 장치가 수단자.. 왜 출력단자라는 말은 없고 얘두 입력단자래... 입력쟁이들)
역씨 말로만 하기엔 이해가 되지 않겠죠!? 가랏 단자친구들!!
그리우신가여!? 저희집으로 오세여! 야미의 데스크탑은 아직... 이 친구들과 함께... 또르륵☆
책의 코드를 보다보면 우리가 만드는 kInPortByte와 kOutPortByte 함수 즉, 입력 버퍼용 함수와 출력 버퍼용 함수가 엄청 자주 쓰여요!! 복잡하지도 않은 어셈블리어 코드니까 어떤 레지스터에 어떤 값이 들어가는지, 어떤 매개변수를 필요로 하는지 알아두고 가세여!
하고 다음 페이지로 넘어가니.. 제가 패닉상태에 있는 이유의 XMM 레지스터가 나오네영... FPU... 태스크... 아~~ 망했어요~~
예전에 스타1 리그 임요환선수와 박정욱선수의 경기에서 해설을 맡은 해설진의 레전드 영상 아세영!? ㅜㅠㅜ브금으로쓰이면 넘 우껴영 아~~망해써여~~
그리고 이제 스캔코드를 불러와서 우리가 a를 누르면 a를 인식하고 a를 출력해주는 코드를 작성한대여!! 우와!!
하기 전에 A20 게이트부터 활성화 시켜주는군녀! 기억이 안나시나요? 그 막 AND 게이트 사용해가지고 1이나 0 뽑아먹는 그..
A20 gate
네.. 이상 말로 설명을 못하는 야미였습니다. 헿헤헿 바로 6일차에있는 그것이예영!!
어머낫 저 주소로 가보니 키보드 컨트롤러에 대해서 저 때 언급했었네영!! 그럼 이번엔 넘어가는걸로.. 야미야 너 앵애취뉘? 당연히 그럴리가 없져!!
이렇게 A20 게이트를 활성화 시켜서 메모리에 문제가 생기지 않게 해주면 됩니다!
그런데 갑자기 그 다음 절에서는 키보드 LED를 제어해 준다고 해여.. 왜 LED가 필요할까여?
Caps Lock(소문자/대문자전환 혹은 맥뿍에서는 한영전환)
Num Lock(숫자 패드가 있는 키보드라면 숫자로 인식할지, 키패드에 적힌 기능으로 인식할지 정하는 넘버락앤롤!)
Scroll Lock(On 되어있으면 방향키가 커서가 아닌 스크롤처럼 움직인다능~)
확실히 다른 키보다는 기능이 싱기방기 하긴 하네여!! 그래도,,, 특별하긴 하지만... 왜때문에 이 세 가지만 LED를 주는건지.. 너무 불공평하지 않나여!?
이런 문제때문에 요새 키보드는 다 LED가 무지개색으루 번쩍빤짝 하나봐여! 아닌가? 헿헤
이제 11장의 3절로 넘어오면 오오오오오 스캔코드가 아주 길쭉길쭉하게 나와있어여!! 이거 언제 다외우나여.. Down Code / Up Code로 구분되어 있는 것은 Shift 기능을 이용안했는지 / 했는지를 판단해주고 그에 따라 어떻게 될 것인가 이 모든 것을 스캔 코드 테이블로 보여주고있네여!!!
이 테이블을 외우는 것은 꼭 화학 주기율표를 외우는 것만 같아여!! 키보드 자판을 아무리 달달 외우고있는 야미지만, 이 테이블은 조심스레 사진찍어두고 필요할때만 꺼내봐야겠어여!!
scan code
야미는 시력이 2.0이라고 전해지는데, 그 시력으로도 안보인다면 여러분도 안보이시는거겠져? 뭐라고 적혀있져 도대체?(오오 클릭하면 커지네여!! 요새 기술은 참 싱기방기~ 꼭 인터넷 처음 써 본 사람처럼 코스프레해야징 와 싱기하다!!)
http://www.ee.bgu.ac.il/~microlab/MicroLab/Labs/ScanCodes.htm 요기에 적혀있답니다!!(그냥 심심해서 저 학교는 어느 학교인가 궁금해져서 홈페이지를 방문해보니 Ben-Gurion University of the Negev 라는 대학교래여... 벤-구리온..? 네게브..? 이스라엘의 한 대학교라고 하네여... 전혀 관계없이 이런건 왜 찾아보는지... 참 정신세계 독특톡톡하져? 데헷-☆)
저 표에는 Shift 기능에 대한 것은 안나와있어여!! 그래서 저는 책과 비교를 해보니 0x80만큼 차이나길래 갓승훈선생님께서 그만큼 추가하셨나보다~ 생각했더니 그게 또 아니네여?! 책에 적힌 Down Code와 이스라엘의 대학교에서 알려주는 Down Code도 전부 같은게 아니었어요!! 대학교를 믿어야할까요~ 갓승훈선생님을 믿어야할까요!?
이렇게 누굴 믿고 비교한다거나 그러시면 안대여! 키 스캔 코드는 정해진 것도 있지만, 정하는 것도 있답니다! 한 번 구글링해서 찾아보세여!
(전 MSDN의 Visual Basic 6.0에서 사용하는 Scan Code Table을 보자마자 아~ 갓승훈선생님이 MS보다 조으다... 라고 생각했어영ㅎㅎ)
이러한 스캔코드를 이제 ASCII 문자로 변환하여 우리가 카톡 / 페북 / 문자 / 편지 / 포스팅 등의 글자를 쓸 때 사용하는 '문자'를 쓸 수 있게 된답니다!!
여태까지 우리는 소스코드에 print("Initialize..."); 요런거나 적으면서 "[ Pass ]" 하면 기분좋고 "[ Fail ]" 하면 기분나쁜 2차원적인 세계에 살고있었는데.. 드디어 현실세계에 오는 기분이예여!! 내가 치는 자판이 그대로 출력되다니 소름돋는것...
이번 포스팅은 생각보다 쓸게 없네여!? 그냥 갓승훈선생님이 적어주신 글자 몇마디 읽으면 토르의 망치로 건물짓듯 뚝딱뚝딱 지어지는걸요? 왜 토르의 망치냐구여? 요샌 아무말 대잔치가 유행이잖아여~ 그냥 아~~무말이나 하는거죠!! 헿헿헤헤헿 죄송함댜..
책에 적힌 코드를 열씸히 따라다니면서(이번엔 포스팅이 스압이 아닌 대신 책의 코드가 스압 아닌가여? 하... 저 정말 이거 적으면서 갓승훈님의 깃헙에서 소스코드 그냥 다 가져와버릴까 생각하다가... 한땀 한땀 적었어요 ㅜㅠ 혹시 아직 갓승훈선생님의 깃헙 페이지를 모르시는 분이 계시다면... 오타찾기를 위해 페이지를 알려드리는게 인.지.상.정!! https://github.com/kkamagui/mint64os 까마구이가 까마귀구이같아서 배고파오는 시간이네여 헿) 오타가 나지않도록 조심해주세여!!
헤더파일의 함수명과 소스파일의 함수명이 다르면 빌드와 실행에는 문제가 없지만 실질적인 함수의 코드가 실행되지 않는다는 것!! 명심해주세여 ㅜㅠㅜ 이런 문제로 오랜 시간을 잡아먹은 적도 있었어여... 제 깃헙 페이지에서 소스코드를 보시면 함수명 및 변수명 등을 전부 제 맘대로 썼기때문에... 저 조차도 찾기 어려워지는 것☆
그럼 이제 다음 GDT, IDT 테이블, TSS 세그먼트를 추가해보러 가여!! 이놈의 GDT는 참 자주 등장하는 것 같네여!? 내용이 비슷하면 이 전 포스팅을 링크로 확 넘겨버려야지... 이러면 인성논란 생기겠죠?! 열씸히 하겠습니당ㅎㅎ 다음포스팅에서 뵈어여!!
Check out the yummyhit’s website for more info on who am i. If you have questions, you can ask them on E-mail.
댓글남기기