ㅜ_ㅜ... 한시간 내내 여자친구랑 디자인했습니다. 어찌 될지는 모르겠지만 좀더 손 본 다음에 올리겠습니다. ㅜ_ㅜ)/~

 화면 구성만 한시간 내내 했네요. ㅜ_ㅜ... 천지 이런... 흑흑... ㅜ_ㅜ

 왠지 허무한듯한... ㅠ_ㅠ 아우...

사용자 삽입 이미지



 드디어 새로 만든 에디트 박스를 한글 입력 메모장 홈브루에 적용했습니다. 기본적인 기능은 1.1 버전과 거의 동일하니 기본 기능에 대한 내용은 http://kkamagui.tistory.com/410 을 참고하시면 됩니다.

 아래 화면에서 붉은 색으로 표시된 것이 커서이고, NDS의 왼쪽 방향키를 이용해서 움직일 수 있습니다. 물론 스크롤 또한 가능합니다. ^^)/~
사용자 삽입 이미지


 
주의해야 할 것은 삭제 단위가 한글 단위가 아닌 영어 단위라서 한글을 삭제할 때는 2번 Backspace를 눌러줘야 한다는 것입니다. 한번만 누르실 경우, 이상한 글자가 표시되는데 당황하지 마시고 한번 더 누르시면 깨끗하게 지워집니다.

 지울 부분의 데이터를 분석해서 한글이면 2자를 지우게 하는 것도 가능하지만 커서의 위치와 밀접한 관련이 있어서 손보기가 쉽지 않더군요. ㅜ_ㅜ 일단 어느 정도 안정화된 뒤에 처리할 생각입니다. ^^;;;

 현재 테스트 버전에서는 입력 한계가 없으나 저장할 때 잘려서 저장되니 너무 많이 입력하시면... 잘려서 나올지도... ㅜ_ㅜ;;;;

 혹시 버그가 있으면 덧글로 제보 부탁드립니다. ^^)/~
 그럼 좋은 하루 되세요 ;)



 원래 계획은 오늘 NDS로 포팅을 시작하는 것이었는데, 시험을 치다보니 시간이 늦어서 결국 포기했습니다. ㅜ_ㅜ 요즘 잠도 잘 못자서 얼굴이 뒤집어졌는데, 포팅을 시작하게 되면 끝날 때까지 안잘 것 같아서... ^^;;;

 대신 어느 정도 완성된 에디트 박스(Edit Box)를 올립니다. Version은 아직 버그가 좀 있을 수 있기 때문에 0.9로 했습니다. ^^ 아래는 직접 키보드를 이용해서 메모를 변경하고 추가한 화면입니다.
사용자 삽입 이미지 사용자 삽입 이미지

 방향키로 커서 이동이 가능하고 키보드로 알파벳, 스페이스, 엔터 그리고 백스페이스를 사용할 수 있습니다.

 내일까지 테스트 해본 후에 큰 버그가 없으면 함수 좀 정리해서 NDS에 포팅해야겠습니다. ^^)/~ 별 문제 없이 끝났으면 좋겠네요. ㅎㅎ 이제 커서 이동까지 가능해지면 그동안 빗발쳤던(??) 요구사항을 어느정도 수렴한듯 하니까요. ^^;;;;

 엇~ 벌써 시간이 이렇게나... 이만 자야겠습니다. ^^)/~
 다들 좋은 밤 되세요 >ㅁ<)/~


 오늘 후배가 꽤나 괜찮은 링크를 보내주더군요. ^^)/~ 후배의 블로그( http://www.filewiki.net/tc/entry/PSP-%EA%B0%9C%EB%B0%9C%EC%97%90-%EB%8C%80%ED%95%9C-%EC%9E%90%EB%A3%8C ) 에서 찾았습니다. ㅎㅎ

 한글로 된 자료를 찾으시는 분들이 많으시던데, 희소식이 되겠군요. ^^)/~


 그럼 좋은 하루 되세요 ;)
 휴가를 틈타 NDS 메모장 홈브루를 손보려고 집에 PC 뒤졌는데, 옛날 소스 밖에는 없더군요. ㅜ_ㅜ 그래서 제 스프링노트(http://kkamagui.springnote.com)와 블로그(http://kkamagui.tistory.com)를 검색했더니 역시나... ㅜ_ㅜ

 다른 소스는 다 올려놨으면서 이 소스는 왜 안올려 놓은건지... 하는 수 없이 윈도우 환경에서 구현하기로 했습니다. NDS를 하다말고 갑자기 왠 윈도우냐 하시는 분이 계실지 모르겠습니다. ^^;;;
 
 NDS용 메모장 홈브루는 제가 틈틈이 만든 NDS 윈도우 라이브러리(http://kkamagui.tistory.com/37)를 기반으로 작성되었기 때문에, 윈도우 환경(MFC)과 매우 유사하기 때문에 가능한 것이지요. 개발을 편하게 진행하기 위해서 필요한 부분만 최대한 비슷하게 구현했습니다.

 현재 커서와 데이터 출력, 스크롤 부분까지 처리가 끝났고 이제 남은 것은 커서가 있는 부분을 위주로 추가/수정/삭제하는 부분만 추가하면 되는데... NDS의 한정된 메모리를 사용해야 하기 때문에, 어떻게 하는 것이 좋을지 상당히 고민스럽습니다. 일단은 좀 더 생각해봐야겠습니다. ^^;;;;

 아래는 실제 구현된 에디트 박스의 모습입니다. 글자 사이에 있는 빨간 선이 커서를 나타내고 제일 바깥쪽에 있는 붉은 색 선은 NDS의 LCD 영역을 나타냅니다.

사용자 삽입 이미지
사용자 삽입 이미지
사용자 삽입 이미지
사용자 삽입 이미지


 


























 아래에 첨부된 압축파일을 풀어서 실행하면 간단한 테스트 해볼 수 있으니, 심심하시면 한번... ^^)/~ 키보드의 화살표 키로 커서를 이동할 수 있으며, 그에 따른 커서 위치 처리와 스크롤에 관한 처리를 테스트 할 수 있습니다. ^^


 아아~ 생각보다 진도가 안나가는 군요. ㅜ_ㅜ)/~
 그럼 다들 좋은 밤 되시길~



 학교 후배에게 뽐뿌를 해서 PSP를 지르게 만들었습니다. 그런데 이녀석이 홈브루를 개발한답시고 VS.net 2008용 App Wizard를 만들더군요.

 AppWizard는 후배의 블로그(http://www.filewiki.net/tc/entry/PSP-%EA%B0%9C%EB%B0%9C-AppWizard)에서 다운받을 수 있습니다.
 
사용자 삽입 이미지

 VS.net 환경에 익숙한 분이시라면 더욱 편리하게 사용하실 수 있을 것 같습니다. ^^)/~


 대박 연휴를 맞아 집에 내려오게됬습니다. 집에서 인터넷으로 열차시간을 확인한 뒤, 역으로 왔더니 고새 매진이더군요. ㅡ_ㅡa... 어쩔 수 없어 한시간 뒤 기차를 예매하고 서점으로 갔습니다. 역에 갈때마다 한번씩 들리는 버릇이 생겼거든요. ^^;;;;

 제일 먼저 마이크로소프트웨어 5월호를 들었습니다. 하는 일이 응용 프로그램과 거리가 멀다보니, 위쪽(?) 소식이 많이 궁금합니다(좋은 소식 덧글로 많이 전해주세요 ㅜ_ㅜ...). 마소 기사 목록을 죽 훓어보다보니 블로그 관리를 위한 툴에 대한 기사가 있던데, 갑자기 뭔가 번득하더군요. @0@)/~

 블로그에 수시로 들러서 글쓰고 답글을 달지만, "블로그"에서 그 일을 해야한다는 고정관념 같은게 있었습니다. ㅡ_ㅡa. 그런데 저 기사 제목을 보고 나니 당장 툴을 만들어야겠다는 생각이 들더군요. 일일이 덧글 목록을 살펴서 답글을 달다보면 보지 못하고 넘어가는 덧글이 종종있거든요. ^^;;;;(혹시 제가 덧글에 답글을 달지 않았다면, 이 자리를 빌어 죄송하다는 말씀을 드립니다. (__) 일부러 안단게 아니니 용서해주세요 ㅜ_ㅜ)

 연휴 기간에 덧글을 검색하는 테스트 프로그램부터 간단히 만들어볼까 생각중입니다. Python으로 만들면 간단히 할 수 있을 듯도 한데, 원체 오래되서 기억이 가물가물하네요. ^^;;; 이번에는 OpenAPI를 사용해서 덧글 리스트를 뽑아봐야겠습니다. ^^)/~

 그리고 이전에 만들었던 NDS용 한글 메모장(http://kkamagui.tistory.com/410)PSP에 포팅할까 생각중인데, 그 이전에 한글 메모장부터 손볼 생각입니다. 메모장의 가장 큰 문제였던 커서 이동이 안되는 부분을 방향키를 이용해서 이동할 수 있도록 할까 합니다. 물론 커서도 추가해야겠지요. ^^)/~

 연휴에 푹 쉬나 했더니 이번 연휴도 바쁘겠군요. ^^)/~ 역시 천성이 개발자인듯 합니다. ㅎㅎ
 그럼 다들 좋은밤 되시길~ ^^

 PSP의 비디오 모드를 뒤지다 보니, 4BYTE RGB를 사용하는 FrameBuffer모드가 기본인 것 같았습니다. DebugPrint류의 함수를 곰곰히 살펴본 결과 U32의 값으로 비디오 주소에 계속 출력하고 있더군요. 이걸로 바로 확신이 섰습니다. ^0^)/~

 그래서 NDS에 만들어뒀던 한글 출력 라이브러리를 포팅할려고, 뚝딱 소스를 갖다 부었더니 뭔가 잘 안되더군요. ㅜ_ㅜ)/~ 한글이 출력되는 게 아니라 뭔 점같은게 출력됬습니다. 한참 소스를 뒤진 결과, 간단한 연산 버그가 있어서 그랬습니다. 교육 때 들었던 unsigned char과 int의 연산 문제를 제 소스에서 딱 마주치니 웃음이 실실... ㅜ_ㅜ...

 결국 그 문제를 해결하고 나니 화면에 한글이 나왔습니다. ㅜ_ㅜ)-b 아아~ 이 감명깊은 순간을 캡쳐로 저장했어야하는데 RemoteJoy라는 프로그램을 깔지 않아서.... 내일 집에 오는대로 RemoteJoy를 설치해서 캡쳐해 올리겠습니다. 물론 소스와 함께 말이지요 >ㅁ<)/~!!!

 그럼 다들 좋은밤 되세요 ^^)/~~


 블로그를 돌다가 헐랭이님(http://swbae.egloos.com/1747493) 블로그에서 보안관련 무료 잡지를 찾았습니다. @0@)/~ 이런 잡지가 있다니 깜짝 놀랄일이군요. ;)

 http://www.net-security.org/insecuremag.php에서 받아 보실 수 있습니다. 시간이 나면 한번 읽어봐야겠군요. 득탬해서 너무 기분이 좋습니다. ㅎㅎ
 
 다들 좋은 주말 보내세요 ;)


 어제 한 2시간을 시도했었는데, 결국 실패했습니다. ㅜ_ㅜ... 소니 정품 메모리만 되는 것인가요? ㅜ_ㅜ 메직 메모리로 설정하고 판도라 배터리를 만들었는데, 샌디스크 메모리라서 그런지 인식이 안되더군요. 흑흑...

 그래서 그냥 펌웨어 버전만 업데이트하고 말았습니다. ㅜ_ㅜ)/~ 쓰던 3.80 버전에 문제가 있는지 가끔 느려지는 경우가 있더군요. 3.90버전으로 올라갔는데 아직은 그런 문제가 안보이네요. 좀 더 테스트를 해보고 글 남기겠습니다. ^^)/~

 주말을 맞아 하루종일 PSP와 NDS를 가지고 놀아야겠네요.
 다들 좋은 주말 보내세요. ;)


 얼마전에 제 블로그에 태용님께서 조그만 선물을 해주시겠다는 댓글을 남기셨습니다. 재미있는 장난감이라고 하시길래, 게임 시디나 괜찮은 셈플 어플리케이션이겠거니 생각하고 있었는데.... NDS용 닥터를... 그것도 무려 3종류나 기부해 주셨습니다. 태용님께서 홈브루 개발자를 지원하는 프로젝트를 진행하시는데, 제가 거기에 포함된 모양입니다. ㅜ_ㅜ... 이런 영광이.... ㅜ_ㅜ

 아래는 기부해주신 닥터의 사진입니다. DSTT, Acekard2, Acekard R.P.G 3종류입니다.
사용자 삽입 이미지
사용자 삽입 이미지
사용자 삽입 이미지

 제가 쓴 글이 다른 분에게 도움이 되고, 그걸로 인해 제가 다시 도움을 받게 될 줄은 몰랐습니다. 왠지 얼떨떨한 기분이군요. ^^;;;; 뭐랄까... 마치 외국에서만 가능할꺼라고 생각했던 일이 저한테 닥치니... 기분이 굉장히 좋습니다. 안그래도 가지고 있는 구형 NDS에 오래된 M3 SD가 달려있어서 동생이 고생하곤했는데, 이제는 그럴 일이 없겠군요. ^^)/~

 태용님께서 기부해주신 닥터는 더 열심히 개발하고, 홈브루 릴리즈할 때 테스트를 열심히 하라는 뜻인 것 같습니다(맞는가요? ㅎㅎ ^^;;;;). 열심히 하겠습니다. >ㅁ<)/~ 그리고 나중에 시간나면 제가 갖고있는 닥터와 비교해서 리뷰도 하나 쓰겠습니다.

 마지막으로 얼굴도 모르는 저에게 이런 멋진 선물을 주신 태용님께 다시 한번 깊은 감사를 드립니다. ^ㅡ^)/~

 그럼 다들 좋은밤 되세요~


 제 PSP의 커스텀펌웨어 버전은 3.80입니다. 그런데 이 놈이 뭔가 좀 불안한 구석도 있고 동작이 이상하게 될 때도 있어서 펌웨어 업데이트를 찾아보고 있었습니다. 한참을 찾다보니 다크 알렉스(Dark Alex)의 홈페이지가 나오더군요. 정말 여러 버전의 커스텀펌웨어(커펌)를 개발했던데, 완전 킹왕짱입니다. ㅎㅎ 다크 알렉스의 사이트는 http://www.dark-alex.org 이니 관심있으신 분은 한번 들어가보세요. ^^)/~

 다크 알렉스의 사이트에 1.5 Custom Firmware 코드가 있길래 뭔가해서 살펴봤더니 1.5 펌웨어에 패치를 수행하는 코드인 것 같더군요. 그중에서 recovery 소스를 열어봤는데, USB를 사용하는 코드가 있었습니다. 딱봐도 한눈에 알수있던데, USB 제어하는 코드가 flash:0 영역에 모듈형태로 들어있더군요.

  정말 한눈에 딱 봐도 알 수 있지 않습니까? LoadStartModule()함수가 flash:0에서 커널로 로드해주고 있습니다. ^^)/~ PSP 커널은 정말 괴물이군요. 이정도까지 지원해 주다니... 이거 원 홈브루에서는 따로 손댈것도 없을 것 같습니다. 정말 NDS 홈브루를 개발할 때와 너무 비교되는군요.

 어쩌면 이런 지원때문에 NDS보다 PSP가 하드웨어적으로 분석된 자료가 적은 건지도 모르겠습니다. 다들 스펙 정도만 적혀있을 뿐이지 실제 구성도나 포트 I/O 같은 자료는 없더라구요(혹시나 PSP에 대한 자료를 갖고 계신분은 제보 부탁드립니다. ^^;;;).

 그나저나 커펌 버전을 높여야할지 고민입니다. 3.90 M33 버전이 안정적인지도 모르겠고... 아아~ 진짜 고민됩니다. ㅜ_ㅜ... 이걸 어찌해야할까요?


 윈도우즈 업데이트 파일에서 실제 패치 파일을 추출할 수 있다고 합니다. 지금까지 윈도우즈 업데이트 파일은 파일을 직접 덮어쓰거나 수정해주는 통짜 덩어리인줄 알았더니, 그 안에 세부파일이 나누어져 있나보군요. ;)

 원문은 http://fullc0de.egloos.com/3645611 에서 보실 수 있으며, 중요한 내용만 인용하면 아래와 같습니다.
1. MS 보안업데이트 사이트를 방문해서 패치 인스톨러(보통 실행파일 형태죠)를 다운로드 합니다.
2. 커멘드 라인에서 /x:output 파라메터를 주고 실행합니다. 그럼 패치가 실행되지 않고 압축이 풀립니다.
3. 크게 두 개의 디렉토리가 있는데 SP2GDR 디렉토리로 들어가시면 됩니다. 아.. 물론 제 컴이 SP2라서 -_-;;;
   (GDR은 retail이나 OEM버전을 뜻하고 QFE는 checked/debug 버전을 뜻합니다.)
4. GDR 디렉토리에 들어가시면 패치되는 파일의 목록을 만나실 수 있습니다. ㅋㅋㅋ
5. 그다음 분석 고고씽~
 
 패치 파일을 잘 분석하면 역으로 패치 이후 취약해진 점을 빨리 찾을 수 있을지도 모르겠군요. ^^  이미 다른 분들은 다 아시는 내용인데, 왠지 뒷북성 포스트일지도... ㅎㅎ

 그럼 다들 좋은 밤 되시길~ ;)



 요즘 회사에서 계속 스터디를 하고 있는지라 머리가 터질 듯 합니다. 거의 매주 세미나를 하고 있기 때문에 세미나 자료 준비도 해야되고... ^^;;;; 생계형 야근(??)은 아니지만 스터디때문에 본의 아니게 야근을 하고 있습니다. ;)
 
 Flash Memory 관련쪽 일을 하다보니, NAND Flash Spec, Card Spec 그리고 드디어 Flash Translation Layer(FTL)까지 왔습니다. FTL은 NAND Flash Memory를 효율적으로 사용하기위한 Software Layer라고 정의할 수 있습니다. NAND 특성이 별로 좋지 않은지라 Page 단위인 NAND를 Sector 단위로 Mapping하기위해 많은 일을 하더군요.

 수명이 제한되있는 NAND이다 보니 Wear Leveling에 대한 작업도 좀 하고... 어떻게 하면 더 빨리 쓸 수 있을까하는 생각으로 만들어진 것 같습니다. FTL도 여러종류가 있고, 특허도 여럿있다더군요.ㅎㅎ FTL에 대해 괜찮은 알고리즘하나 개발하면 이름 꽤 날릴 수 있겠는 걸요~ ;)

 나름 흥미로운 파트에서 일하게 되서 열심히 하고 있습니다. 너무 Low Level로 내려가서 눈물이 좀 날때도(??) 있지만 아직은 견딜만 합니다. ㅜ_ㅜ

 내일은 좀 일찍외서 2시간을 투자해야겠습니다. ;)
 그럼 다들 좋은 밤 되시길~


 헛... 이런 마이크로소프트웨어 4월호가 온지 좀 됬는데 이제서야 봤습니다. ^^;;; 다른 것 하느라 정신이 없어서 미처 보질 못했네요. ;)

 이번호를 마지막으로 OS Framework에 대한 내용이 끝났습니다. >ㅁ<)/~ 사실 입사 한달 전에 4개월 연재가 결정이 나서 급하게 3개월분을 미리 썼기 때문에 내용이나 예제가 좀 미흡한 면이 있었습니다. 마지막 4월호 역시 급하게 정리해서 역시나 안타까움이 남습니다. ㅜ_ㅜ

 글을 정리하면서 꼭 해보고 싶었던 일이었기에 나름 최선을 다했는데,  다시 읽어보니 좀 부끄럽군요. 내용이 영 부실한게... ㅡ_ㅜ... 기회가 된다면 지금 보고있는 내용들(Dual Core)도 기고를 해봐야겠습니다. 뭐 실리게 될지는 알 수 없지만... 그냥 묵혀두는 것 보다는 좋겠지요 ;)

 아래는 마이크로소프트웨어 4월호의 목차입니다.

=====================================================
STEP BY STEP

VS 2008을 이용한 블로그 프로그래밍│최지훈  290
실전 블로그 프로그래밍 2

3D 소프트웨어 플러그인 개발기│조영락  298
가지각색 3ds Max 플러그인

리눅스 시스템 프로그래밍│서상원 306
고급 파일 입출력

프레임워크로 다시 보는 운영체제 개발│한승훈 314
스케줄러 및 동기화 객체 구현하기

오픈소스 검색 엔진의 세계│이성호 322
컴파스 프레임워크

=====================================================

ps) 끝으로 아무것도 아닌 제 글을 실어주신 마이크로소프트웨어의 문경수 기자님께 감사를 드립니다.
 
 몇시간 전부터 본격적으로 PSP 스펙을 보고 있습니다. 상당히 흥미롭더군요. MIPS CPU 1개가 있고, Media 처리를 위한 MIPS가 또 하나있으며, GPU도 있더군요. @0@.... 이런 괴물머신을 봤나....

 SDK를 보니 sce어쩌구로 시작하는 함수가 많던데, 혹시 SDK에 다 구현되어있나 싶어서 확인했더니 Stub만 있었습니다. 아직 본지 얼마 안되서 확실치는 않지만, 프로그램 로딩할때 PSP Firmware의 함수와 Link 시켜주는 것 처럼 보이는데... 다시말하면 Firmware에서 지원하는 함수일지 모른다는 것이지요.

 별별 함수가 다 있던데, NDS 홈브루를 개발할 때와는 천지 차입니다. NDS에서는 전부 일일이 구현해야 했거든요. 물론 NDS에도 개발을 편리하게 해주는 PALib가 있긴 합니다만, PSP SDK 처럼 많은 기능을 제공하지는 않습니다. ^^;;;;

 아아~ 신납니다. ;) 글을 정리하던지 홈브루를 하나 만들던지 해야겠네요 ^^
 그럼 다들 좋은 밤 되시길~


ps) 기념으로 PSP 홈브루 개발에 도움이 되는 유용한 사이트 링크를 올립니다.
http://www.ps2dev.org

 RSS를 돌다가 재미있는 글을 발견했습니다. 외국 사이트인데 언패킹(Unpacking)을 쉽게하는 방법에 대해서 적어놨더군요. 원문은 http://www.websense.com/securitylabs/blog/blog.php?BlogID=176에서 볼 수 있습니다.

 위 링크의 내용을 간단히 요약하자면 다음과 같습니다.
1. 패커(Packer)들은 실행파일이 시작되었을 때 실행파일의 내용을 복원해야하므로 복원 함수를 호출합니다. 단 복원 후에 정상적인 실행을 위해서는 레지스터의 상태가 그대로 보존되어야 하기 때문에 레지스터의 값을 우선 스택에 보관합니다. 이때 PUSH 명령을 사용합니다.
2. 복원 함수를 호출해서 실행 파일을 복원합니다.
3. 복원이 끝난 뒤에 레지스터의 값을 복원 함수를 호출하기 전의 레지스터 값으로 복원합니다. 이때 POP 명령을 사용합니다.

 위의 과정을 보면 PUSH와 POP이 쌍을 이룬다는 것을 알 수 있고, POP이 되어 모든 레지스터의 복원이 끝난 상태는 실행파일 복원이 끝난 상태라고 볼 수 있습니다. 이러한 약간의 팁을 이용해서 스택 포인터(ESP)에 브레이크 포인터를 걸고 계속 체크해 나가는 방법입니다.
사용자 삽입 이미지

사용자 삽입 이미지

 하지만 레지스터를 보관하기 위해서 꼭 PUSH/POP을 써야하는 것은 아니기 때문에 한계는 있지만, 괜찮은 아이디어 같습니다. ;)  또 이렇게 잡 지식이 하나 늘었군요. ^^)/~

 
 아아~ 요즘 집에오면 틈틈이 Multiple Processor에 대한 내용을 파고 있습니다. 스펙을 볼때마다 느끼는 것이지만, 스펙을 분석하는 과정은 퍼즐 맞추기와 굉장히 비슷하다는 생각이 듭니다. 퍼즐을 맞추기를 시작할때는 퍼즐 조각만 보입니다. 그러다 이제 퍼즐 맞추기에 힌트가 되는 면을 찾게되고 하나, 둘 끼워맞추다보면 어느새 전체적인 그림이 눈에 들어오고 얼마 남지않은 조각을 이용해서 쉽게 맞출 수 있습니다.

 지금 제가 하고있는 과정을 퍼즐 맞추기 과정에 대응시킨다면, 면을 찾는 과정쯤 되겠군요. 면을 찾아 퍼즐을 놓는 과정은 놓은 조각을 주위에 힌트로 쓸 수 있어 좋은 반면, 놓을 자리가 많아졌으니 고민할 것도 많아지는 단점이 있습니다. 지금 제 상황이 딱 그 상황인데, 조각이 맞춰져 가면 갈수록 궁금한 점이 생기더군요.

 현재 프레임워크를 사용해서 듀얼 코어 중에 나머지 하나의 코어를 동작시켰습니다. 물론 Real Mode지요. 이제 보호모드로 전환시키고 인터럽트 처리를 수행해야하는데, Symmetric Interrupt Mode로 동작하려하니 문제가 몇가지 생겼습니다.
 첫번째는 두 CPU에 Interrupt가 동시에 발생할텐데, 한쪽이 처리했을 때 나머지 한쪽은 어떻게 할 것인가 하는 문제입니다.
 두번째는 동일한 Interrupt가 계속해서 발생할 때, 두 CPU가 Interrupt를 처리하는 타이밍이 다르다면 언젠가는 한쪽에서 Interrupt가 밀리게 되는 일도 있을텐데 이를 어떻게 판단할 것인가 하는 것입니다.

 지금은 별로 퍼즐을 모은 게 없어서, 큰 그림이 보이지는 않지만 조만간 결판을 내고 구현에 들어갈 생각입니다. 하지만 그 전에 잠부터 좀 자야겠군요. 요즘은 12시만 넘으면 죽을 것 같습니다. ㅎㅎ

 그럼 다들 좋은밤 되세요 >ㅁ<)/~
 
 ps) TV에서 데이 브레이크를 봤는데, 상당히 흥미롭더군요. 잘못하면 드라마에 빠져서 작업을 안할 위험도... ^^;;


 고군분투 끝에 드디어 살짝(?) 동작시키는데 성공했습니다. '파랑새를 찾아서'란 고전에서 보면 그토록 찾아 다니던 파랑새가 자기 집에 있다는 내용이 나옵니다. 답이 먼곳에 있는 것이 아니더군요. 역시 처음에 보던 INTEL 메뉴얼에 있었습니다. ㅠ_ㅠ

 여기저기 다니긴 했지만 비슷한 내용만 반복해 언급되어있고, 실질적인 코드는 없었습니다. 프로그래머라면 백마디 말보다 한줄의 코드가 더 중요한법~!!! 한참을 뒤지다 문득 INTEL 메뉴얼에 나와있는 어셈코드가 떠올랐는데, 바로 그 코드가 핵심이었습니다. 물론 아무것도 모르는 상태로 그 코드를 봐봤자 평범한 어셈블리어 코드일 뿐입니다만, 여기저기를 뒤진 탓인지 다시보니 딱 알겠더군요. ^^;;;;

 일단 Real Mode에서 Halt 상태로 되어있는 Application Processor를 활성화시켜서 콘솔화면의 좌측 상단에 색깔을 바꿔가면서 문자를 찍도록 수정했습니다. 테스트를 하는 과정에 약간 문제가 있었지만, 그래도 잘 동작하네요. ^^)/~

사용자 삽입 이미지

 이제 Application Processor를 32bit 보호 모드로 바꾸고 실제 태스크를 할당해서 실행해볼 생각입니다. 조금만 더하면 어느정도 마무리가 되겠네요. 정리되면 또 올리겠습니다.

 다들 좋은밤 되세요 ^^)/~~



 3월호 원고도 무사히 넘어갔습니다. ^^)/~ 사실 글이 너무 넘친다는 기자님의 말씀이 있었습니다만, 제가 그때 PC에 아무것도 안깔린 상황이라... ^^;;; 결국 페이지가 2페이지나 늘었더군요. ㅎㅎㅎ 페이지가 늘어난다는 것은 쓰는 사람의 입장에서는 좋은 일인 것 같습니다.
 
 4월호 원고도 미리 보냈는데, 별 이야기가 없는 것을 보면 잘된 듯 합니다. 4월호가 마지막인데, 왠지 시원 섭섭하네요. ^^)/~ 다음에는 Multiple Processor Control 에 대해 다루어 볼까 합니다. 상용 OS를 제외하고 INTEL이나 AMD의 Multiple Processor를 완전히 다루고 있는 OS를 아직 못봤고, Multiple Processor에 대한 자료가 너무 없기 때문에 의미가 있을 듯 합니다. ^^)/~

 그럼 마이크로소프트웨어 3월호 목차 나갑니다.

=====================================================
STEP BY STEP

VS 2008을 이용한 블로그 프로그래밍│최지훈  290
실전 블로그 프로그래밍 1

3D 소프트웨어 플러그인 개발기│조영락  298
3ds Max SDK 레퍼런스

리눅스 시스템 프로그래밍│서상원 306
시스템 프로그래밍의 이해

프레임워크로 다시 보는 운영체제 개발│한승훈 312
스케줄러 및 동기화 객체 구현하기

오픈소스 검색 엔진의 세계│이성호 322
텍스트 검색 엔진, 루씬(Lucene)

=====================================================


 요즘 몸이 좀 허해져서 그런지 오늘 아침에 코피가 났습니다. 어의가 없더군요. ㅡ_ㅡa 뭐 그래도 요즘 잠을 별로 안자고 있기 때문에 그럴수도 있겠다는 생각을 했습니다. ^^;;; 설마 몸에 이상이 있을라구요 ㅎㅎ

 Multiple Processor 분석 쪽은 일단 문서를 정리하고 정리된 문서를 바탕으로 실제 테스트를 해보는 방식으로 진행하고 있습니다. 문서만 주구장창 읽으니 눈에 보이는 것이 없어서 더욱 깜깜하더군요. 그래서 가상머신을 이용해서 직접 테스트를 해봤는데, 의외로 결과가 잘나옵니다. 신기하네요 @0@)/~ 물론 지금은 아주 약소한 단계의 테스트만 진행하고 있습니다. ^^;;;;

 내일 일하러 가면 이틀동안 쉬는군요. 집에 내려갈까 가지말까 심하고 고민하고 있습니다. 내려가는데 걸리는 시간도 문제지만 몸이 피곤해서... ㅜ_ㅜ... 만약 안내려간다면 주말에 MP쪽 문서에 All in할 생각입니다. 이게 빨리 끝나야 본래의 목적인 Virtualization을 볼 수 있어서 ㅎㅎㅎ

 아우~ 오늘은 좀 일찍 자야겠군요. 자기 전에 오늘 테스트한 스샷 하나 올립니다.
사용자 삽입 이미지

 그럼 좋은 밤 되세요 ^^)/~


 Multiprocessor에 대한 INTEL의 문서를 읽다가, 뭔가 부족한 느낌이 들어서 웹검색을 했습니다. 여기저기를 뒤지다가 우연히 OS 개발 관련 링크에 들어갔는데, 월척(!!!!)을 낚았습니다. ㅜ_ㅜ)/~

 사이트 주소는 http://www.osdever.net/cottontail/#SMP%20(IA32)이고 가보시면 INTEL의 Multiprocessor Specification 문서와 Multiprocessing Support for Hobby OSes Explained 문서를 보실 수 있는데, Multiprocessor와 BIOS, 그리고 OS 간의 관계를 잘 설명해 주고 있습니다. 문서를 읽자마자 궁금했던 점이 바로 이해되더군요. 문서가 아주 깔끔히 정리되어있습니다.

 그런데 놀라운 사실은 Multirprocessor Specification 문서가 1997년도에 1.4 버전이 됬다는 겁니다. 좀 읽어보니 CPU가 486 정도 일때 부터 Multiprocessor에 대한 내용이 나오기 시작한 것 같던데, 역시 대단하다는 생각밖에는 안듭니다. 이렇게나 일찍부터 Multiprocessor에 대한 준비를 하고 있었다니... ㅜ_ㅜ...

 덕분에 진도를 꽤 빨리 나갈 수 있게 됬습니다. 회사 일 끝나고 틈틈이 정리해서 나중에 한꺼번에 올리겠습니다. 오늘은 잠이 잘 올 것 같군요. ;)

 그럼 다들 좋은 밤 되세요~ >ㅁ<)/~

ps) 잘하면 OS 프레임워크의 Multiprocessor 버전이 나올지도 모르겠습니다. ;)~


 테스트용으로 만든 한글 입력 메모장에 대해서 많은 분들의 문의가 있으셔서, 오늘 드디어 구석에 박아두었던 소스를 꺼냈습니다. 일단 전체적인 수정을 하기 보다는 많은 분이 필요로 하셨던 TXT 저장 기능과 리셋기능을 먼저 추가했습니다. ^^

 대부분의 기능은 기존의 1.0 버전(http://kkamagui.tistory.com/238)과 크게 차이가 없습니다. 특별히 이번에 추가된 기능만 나열하면 아래와 같습니다.
1. 소프트웨어 리셋 기능 : "START" 버튼을 클릭하여 펌웨어 시작화면으로 돌아가는 기능 추가. 파워를 껏다가 켜야했던 기존의 불편함을 줄임
2. TXT 추가 기능 : 메모 페이지에서 "A"버튼을 누르면 루트 디렉토리에 DATA + 페이지번호 +.txt 형식으로 txt 파일을 생성. PC에서 데이터 파일 공유 가능
사용자 삽입 이미지
3. 메모 페이지 확장 : 메모장의 페이지를 40 페이지를 확장. 기존의 20 페이지용 데이터 파일의 경우, 안전한 사용을 위해 모든 데이터를 백업해 놓고 루트 디렉토리에 있는 NOTEDATA.DAT 파일을 삭제하길 권장

 아래는 실행 화면을 캡쳐한 것입니다.
사용자 삽입 이미지

 추가 요구사항이나 기타 건의사항은 http://kkamagui.tistory.com으로 부탁드립니다. ^^
 그럼 좋은 하루 되세요 >ㅁ<)/~



 휴일을 맞아 방청소를 해놓고 오후 느즈막한 시간부터 인텔 문서를 붙잡고 읽기 시작했습니다. 워낙 영어가 부족한지라 이해가 잘 안되서 테스트 코드 위주로 볼려고 이곳 저곳 뒤졌습니다. Pseudo 코드는 발견했지만 전체적인 흐름의 일부분만 되어있어서 크게 도움이 안되더군요. 결국 차분히(??) 읽었습니다. ㅜ_ㅜ

 문서를 읽어가면서 여기저기 줄치고, 제가 만든 OS 프레임워크(http://kkamagui.tistory.com/category/OS%20Kernel(Intel,%20ARM) 참고)를 이용해서 테스트를 진행하다가 재미있는 사실을 알아냈습니다. VMware(코어 2개로 설정)를 사용해서 테스트했기 때문에 실제 PC와 동일할지는 알 수 없습니다만, 전원이 켜지고 BIOS가 시스템을 초기화하는 동안 BIOS가 CPU에 있는 모든 코어를 초기화 하고 ID를 할당해준다는 것입니다.
 
 인텔 문서에 의하면 CPU는 BIOS 코드에 의해 BSP(Bootstrap Processor)와 AP(Application Processor)로 나누어 설정된다고 합니다. 그리고 BSP는 초기화된 후 OS 코드를 실행하며, AP는 초기화된 후 인터럽트를 대기하면서 HLT 루프를 돈다고 되어있습니다. 실제로 테스트 코드를 넣어서 플래그를 확인해보니 APIC가 활성화되어 있었습니다. @0@)/~!!! 사실 간단히 코드를 작성해서 플래그만 확인해본 것이라 확실한 것은 아닙니다만, 일단 알아낸 것이니 포스팅합니다. ^^;;;
사용자 삽입 이미지

CPUID, APIC ID 및 APIC Enable 정보


 만약 진짜로 AP가  인터럽트를 대기하며 HLT 루프를 돈다면, BSP가 어떤 방식으로 AP가 태스크를 실행하도록 할 수 있을까요? 지금 추측하기로는 AP쪽의 인터럽트 백터를 조작하고 인터럽트를 발생시켜서 인터럽트 서비스 루틴(ISR)을 통해 태스크 또는 커널 코드를 실행하도록 하는 것이 아닐까 합니다. 이부분은 나중에 좀 더 시간을 내서 확인해 봐야할 것 같습니다.

 어이쿠, 또 밤이 깊었네요~ 이만 자야겠습니다. 다들 좋은 밤 되세요 ^^)/~

ps) 인텔 문서를 분석한다고, NDS 프로그램을 수정하지 못했군요.
죄송합니다. ㅜ_ㅜ 일단 내일이라도 짬을 내서 수정하도록 하겠습니다. (_ _)


 요 며칠간 시간을 좀 내서 틈틈히 플러그인 프레임워크를 만드는 글(http://www.ddj.com/cpp/204202899)을 읽어 보았습니다. 짧은 영어에 피곤까지 겹쳐서 집중이 잘 되지 않아 읽는데 한참 걸리더군요(그렇다고 다 읽은 것은... ㅜ_ㅜ).

 점점 읽기 귀찮아 질 때쯤 되어서 결론이 어떻게 되는가 확인할 요량으로 스킵하면서 중간 중간을 읽고 있었습니다. 그러던 중 제가 관심있는 Cross-Platform에 대한 부분을 Apache Portable Runtime(APR)를 사용해서 해결한 것을 발견했습니다. 맥이 빠지는... ㅜ_ㅜ...

 사실 플러그인 보다는 저런 Cross-Platform에 대한 처리에 더 관심이 있었는데, 저런 부분을 보고 나니 별로 읽고 싶지 않더군요. 차라리 APR에 대한 글을 읽어보는게 더 나을 듯 합니다. 일단 스프링노트에 대충 정리해 놓긴 했는데, 내일 맑은 정신으로 다시 한번 보고 마무리를 해야겠습니다.

 Virtualization Technology에 대한 내용이나 볼껄 그랬습니다. ㅜ_ㅜ 흑흑...
 심하게 낚인 듯한 기분이군요. 밤늦게 이게 뭐람... ㅜ_ㅜ


 다들 설은 잘 보내셨는지요? 저는 할머니댁에서 실컷 NDS만 하고 왔답니다. 이틀만에 게임 소프트를 하나 깨고 왔을 정도니... 얼마나 했는지는 굳이 설명을 안드려도 될 듯합니다(NDS 충전만 중간에 2번 했습니다). 시간이 아주~ 안가더군요. ㅜ_ㅜ

 게임을 하는 중간 중간에 지쳐서 올해는 무엇을 해야할지 고민해 봤습니다. 목표를 정하고 달리는 스타일은 아니지만, 너무 지겨워서... ㅡ_ㅡa;;;;

 일단 크게 64bit CPU 분석과 VT(Virtualization Technology) 분석을 목표로 잡았습니다. 64bit 쪽은 예전부터 관심이 있던 부분이었고, VT 기술쪽은 제가 잘 모르고 있는 부분이라 공부를 위해 잡았습니다.

 아직은 32bit가 대세인듯 하지만, 언젠가는 64bit의 시대로 가겠지요 ^^;;; 그전에 미리 대비해 놓는 것도 나쁘지 않을 것 같습니다. VT 기술쪽은 제가 따로 생각한 부분이 있어서, 실제 CPU의 명령을 사용해서 제어를 해보는 단계까지 진행할 생각입니다. VT는 아주 유용하게 써먹을 수 있을 것 같거든요. ^^)/~!!!

 가장 이상적인 것은 64bit OS를 만들어서 VT 기술을 이용해 32bit OS를 돌리는 것이 아닐까 생각합니다. 지금 32bit용 OS 프레임워크를 가지고 있으니 64bit용 OS 프레임워크를 만들고 VT 기술을 넣으면 딱이겠네요. 하핫~

 올해도 마구 달려보렵니다.
 여러분들도 새해 복 많이 받으시고 목표 다 이루시길 바랍니다. ^^)/~

 화이팅~!!!!
 지난 번 위모트(Wii Remote)를 이용해서 멀티 터치 화이트 보드를 만드는 동영상( http://kkamagui.tistory.com/266 )을 만드신 분께서 새로운 동영상을 찍으셨습니다. 상당한 충격이었는데, 이분이 이번에는 헤드 트래킹(Head Tracking)을 이용해서 VR 디스플레이를 만드셨군요. 대단합니다. ㅜ_ㅜ=b

 이 분의 펜클럽이라도 만들어야겠습니다. 아주 그냥 신선한 아이디어가 흘러 넘치시는군요. ㅜ_ㅜ 게임 같은 것에 응용하면 상당히 괜찮겠네요. 저도 나중에 한번 시도해 봐야겠습니다. ^^;;;
 



 드디어 위모트(Wii Remote)가 왔습니다. ^ㅡ^)/~!!! 잠시 일이 있어서 나갔다 왔더니만, 택배가 왔더라구요. 그래서 밥도 안먹고 4시간 정도를 후배와 작업한 끝에, 위모트와 적외선 펜으로 시연 동영상을 찍는데 성공했습니다. ^^

 펜은 매직펜을 개조해서 만든 것인데, 후배의 아이디어였습니다. 매직펜을 개조해서 위모트용 펜을 만드는 자료는 grampus.tistory.com에서 보실 수 있습니다. 정말 섬세한(?) 손놀림을 요구하기때문에, 한번씩 도전해 보시는 것도 좋을 것 같습니다(재료비는 걱정 안하셔도 될듯... ^^;;;).

 자리가 영 깨끗하지 않아서 동영상을 찍고나니 좀 부끄럽군요. 그래도 사용가능하다는 것을 보여주기에는 충분할 것 같습니다. 일단 테스트 해본 결과 아주 잘 동작하고, 약간의 튜닝만 아주 유용할 듯~ ^ㅡ^

 시간나면 다른 프로그램 한번 만들어봐야겠습니다. 좋은 아이디어 있으시면 덧글 부탁드립니다. >ㅁ<)/~



 멀티 터치 화이트 보드를 만드는 동영상(http://kkamagui.tistory.com/266)을 보고 뽐뿌를 이기지 못해 질러버렸습니다. ㅜ_ㅜ... 아아 정말 이번 것은 굉장히 강력하더군요.

 PSP의 뽐뿌를 물리치고 바로 지르게 만드는 위모트... 개발 욕구가 불타서 이건 뭐.... 어쩔 수 없었습니다. 흑흑... 오늘 질렀으니 수요일이나 목요일쯤 되면 택배가 오겠네요. 나중에 CRT 모니터에 터치스크린을 구축할껀데, 잘되면 동영상이라도 하나 올리겠습니다.

 재미있는 장난감이 많아서 큰일났습니다. ㅜ_ㅜ... 살려주세요... ㅜ_ㅜ...
 유튜브에서 굉장한 동영상을 발견했습니다. 닌텐도 위(Wii)에서 사용할 수 있는 조정기인 위 리모트(일명 위모트)를 이용해서 애플 아이터치나 아이폰에서나 가능한 멀티터치 화이트 보드를 만들었습니다.
 
 아래의 동영상을 보시면 아시겠지만, 싼 볼펜을 개조해서 만든 LED 펜으로 화이트보드를 클릭하면 마우스가 따라 움직입니다. 더 놀라운 것은 2개의 팬으로 클릭하면 멀티 터치가 되는군요. ^^;;;


 카네기 멜론 대학에서 공부하는 학생인 것 같던데... 대단하다는 생각이 듭니다. 아래의 동영상은 다른 방식으로 위모트를 이용해서 TV를 제어하는 동영상인데, 이것 또한 아주 멋지군요. @0@)/~!!!!

 이 분의 사이트( http://www.cs.cmu.edu/~johnny/projects/wii/ )에서 더 자세한 내용을 볼 수 있습니다. ^^

 위모트를 위한 개발 툴킷도 공개되어있는 것 같던데, 위모트를 하나 사면 유용하게 사용할 수 있을 것 같습니다. 이런 것이라면 방 구석에 위모트를 연결해 놓고 누워서 재미있는 일들을 할 수 있겠군요. ^^;;;;
 
 PSP를 살까 했었는데, 위모트를 사는게 더 좋을지도 모르겠습니다. 개발자에게 불을 당기는 이런 동영상을 봐버리다니... ㅜ_ㅜ... 다시 개발 의욕이 불타는 군요. ㅜ_ㅜ...

 마이크로 소프트웨어 3월호 원고도 써야하는데, 이런 이런.... 개발자가 천직인가 봅니다. ㅜ_ㅜ...


+ Recent posts