2013년 2월 26일 화요일

Jiwoo OS 만들기 - 커널 #1

틈틈히 작업 중인 OS 얘기입니다~ 첫글이군요!


HI-TECH C 를 주로 쓰다 이번엔 SDCC를 쓰고 있는데, 삽질 좀 많이 하네요.

그나마 컴파일러가 c99 를 일부분 지원해줘서 감사하게 생각하고 있습니다. ㅎ.ㅎ


소스는 GPL이구요.

전체적으로 리눅스 모양을 많이 따왔습니다. 

MSX가 아닌 Z80 베이스의 다른 컴퓨터(SPC-1000 등)에서도 쓸수 있도록 만드는게 목표인데, 잘 될지 모르겠네요. ㅋ


아직 스케쥴러, 파일 시스템은 구현이 안되어있구요. (문서만 대충...ㅋ)

driver만 조금 만들어보고 있습니다.

MSX는 time tick용 인터럽트가 따로 없어서, 그냥 VDP의 v-blk 인터럽트 쓰도록 했습니다.


메모리 쪽은 아래 처럼 가상의 32bit 주소로 배치되어있고, 메모리 간 전송은 virtual dma driver로 구현됩니다.

I/O 포트는 일반 Z80의 16bit 주소를 쓸수 있습니다.


  DDDD PP SS : xx HHHHHH : LLLLLLLL : LLLLLLLL

  |    |  |       |        |

  |    |  |       |        `16bits low addr

  |    |  |       `6bits high addr

  |    |  `sec-slot no

  |    `pri-slot no

  `device type

   b0000: RAM MAIN       (MAX 4096KB / slot)

   b0001: RAM DISK       (MAX 4096KB)

   b0010: VRAM MAIN      (MAX  128KB)

   b0011: VRAM EXT       (MAX   64KB)

   b1000: I/O PORT       (MAX   64KB)



아래는 코드 맛보기(?) 용 스크린샷입니다.

device, driver 구조는 리눅스랑 비슷합니다. 놀라지마세요~ ㅋ



start_kernel() 두둥~ ㅎ




machine 설정입니다.




vdp platform_device 네요.




vdp driver 일부분입니다.




에뮬에서 구동한 모습입니다.