레이블이 부트벡터인 게시물을 표시합니다. 모든 게시물 표시
레이블이 부트벡터인 게시물을 표시합니다. 모든 게시물 표시

2013년 1월 27일 일요일

FC-100 에뮬레이션을 위한 PHC-25 부트벡터 분석

이전에 PC-6001과 FC-100과의 연관성을 분석하기위한 자료를 올렸었습니다.(여기)

여기에서는 PHC-25의 부트스트래퍼를 약간 분석해 보도록 하겠습니다.

PHC-25의 에뮬레이션 환경은 아래에서 다운로드 받습니다.
http://homepage3.nifty.com/takeda-toshiya/

롬 파일은 어둠의 경로를 통하셔야 합니다.


일단 FC-100과 비슷해 보이지만 PC-6001과 비교해 보면 PC-6001에 좀더 닮아 있음을 알 수 있습니다.

PHC-25의 부트벡터는 아래와 같습니다.

0000 C3AF0B    JP      0BAFH

부트스트래퍼 0BAFH의 내용은 아래와 같습니다.


0baf F3        DI    
0bb0 31FFF8    LD      SP,0F8FFH    <- 스택 상위 주소
0bb3 AF        XOR     A
0bb4 2100F9    LD      HL,0F900H
0bb7 010007    LD      BC,0700H
0bba CD9A05    CALL    059AH
0bbd 210060    LD      HL,6000H
0bc0 3E20      LD      A,20H
0bc2 01FF07    LD      BC,07FFH
0bc5 CD9A05    CALL    059AH
0bc8 210068    LD      HL,6800H
0bcb AF        XOR     A
0bcc 010010    LD      BC,1000H
0bcf CD9A05    CALL    059AH
0bd2 2100E0    LD      HL,0E000H
0bd5 3E20      LD      A,20H
0bd7 01FF07    LD      BC,07FFH
0bda CD9A05    CALL    059AH
0bdd 2100E8    LD      HL,0E800H
0be0 AF        XOR     A
0be1 010010    LD      BC,1000H
0be4 CD9A05    CALL    059AH
0be7 215DFD    LD      HL,0FD5DH
0bea 225BFD    LD      (0FD5BH),HL
0bed 3E01      LD      A,01H
0bef 324CF9    LD      (0F94CH),A
0bf2 3259F9    LD      (0F959H),A
0bf5 3E04      LD      A,04H
0bf7 321FF9    LD      (0F91FH),A
0bfa D340      OUT     (40H),A
0bfc 3E14      LD      A,14H
0bfe 3221F9    LD      (0F921H),A
0c01 325AF9    LD      (0F95AH),A
0c04 21540B    LD      HL,0B54H
0c07 1150FE    LD      DE,0FE50H
0c0a 014B00    LD      BC,004BH
0c0d EDB0      LDIR  
0c0f 219F0B    LD      HL,0B9FH
0c12 1173F9    LD      DE,0F973H
0c15 011000    LD      BC,0010H
0c18 EDB0      LDIR  
0c1a 218FF9    LD      HL,0F98FH
0c1d 2248F9    LD      (0F948H),HL
0c20 ED56      IM      1              <- 인터럽트 모드 1 설정
0c22 CD3747    CALL    4737H
0c25 FB        EI    
0c26 CD500D    CALL    0D50H
0c29 3E2C      LD      A,2CH
0c2b CD480D    CALL    0D48H
0c2e CD5545    CALL    4555H
0c31 31FFF8    LD      SP,0F8FFH
0c34 3E20      LD      A,20H
0c36 322EF9    LD      (0F92EH),A
0c39 CDDF10    CALL    10DFH
0c3c 3EFF      LD      A,0FFH
0c3e 325AF9    LD      (0F95AH),A
0c41 215100    LD      HL,0051H
0c44 CDFB1D    CALL    1DFBH
0c47 CDBF0C    CALL    0CBFH
0c4a FE31      CP      31H
0c4c 280D      JR      Z,0C5BH          ; (+0dH)
0c4e FE32      CP      32H
0c50 2809      JR      Z,0C5BH          ; (+09H)
0c52 FE14      CP      14H
0c54 20DB      JR      NZ,0C31H         ; (-25H)
0c56 CDBF0C    CALL    0CBFH
0c59 18D6      JR      0C31H            ; (-2aH)


인터럽트 모드 1을 쓰는것은 FC-100과 유사하지만 제가 개인적으로 느낄때는
프로그래밍 스타일은 PC-6001과 비슷하다고 생각합니다.

FC-100 에뮬레이션을 위한 PC-6001 부트벡터 분석

PHC-25에뮬레이션 작동이 미궁에 빠지고 나서(여기참고)
그 비슷하다는 PC-6001을 다시 파기 시작했습니다.

결론부터 말씀드리자면 FC-100은 PHC-25변형판이 맞는듯 합니다.
그렇다고 딱 PHC-25와 같은것은 아니고 PC-6001의 특성을 많이 가지고 있다고 봐야합니다.

우선 하드웨어에서 PC-6001은 RS-232가 있고 페이지 제어를 위한 8255를 가지고 있습니다.
그러나 PHC-25는 RS-232가 없고 페이지를 제어하지 않습니다.

FC-100은 RS-232가 있는것으로 확인되었으나 8255를 가지고 있지 않습니다.
대신 다른 IO포트를 통해 페이지를 제어하는것으로 생각됩니다.

PC-6001의 에뮬레이터는 아래의 홈페이지에서 받을 수 있습니다.
http://papicom.net/p6v/index.html
순 일본어라서 잘 모를수도 있는데 최신버젼의 XP 32비트용은 아래에 링크되어 있습니다.
PC-6001V 에뮬레이터 Windows 32Bit

이런종류의 에뮬레이터는 항상ROM을 어둠의 경로를 통해 받아야 합니다.
제가 받은 링크를 올립니다.
PC-6001 ROM(1981)

받은 롬파일은 에뮬레이터의 하위디랙토리중에 "\rom"에 넣고 실행하면됩니다.



뜨는 화면을 보면 알 수 있듯이 FC-100과 상당히 흡사합니다.
아마도 FC-100에서도 MS의 흔적이 있듯이 PC-6001도 MS에서 작업한 모양입니다.

이것을 가지고 디스어셈블을 한다음 분석을 합니다.(디스어셈블러)

PC-6001의 부트스트래퍼는 아래와 같습니다.

0000 C3100E    JP      0E10H

이에 따라 0E10H의 주소의 내용을 보면 아래와 같습니다.


0e10 F3        DI    
0e11 213401    LD      HL,0134H
0e14 1100FA    LD      DE,0FA00H
0e17 01B700    LD      BC,00B7H
0e1a EDB0      LDIR  
0e1c 11E5FA    LD      DE,0FAE5H
0e1f 0E58      LD      C,58H
0e21 EDB0      LDIR  
0e23 218AFF    LD      HL,0FF8AH
0e26 061E      LD      B,1EH
0e28 36C9      LD      (HL),0C9H
0e2a 23        INC     HL
0e2b 23        INC     HL
0e2c 23        INC     HL
0e2d 10F9      DJNZ    0E28H            ; (-07H)
0e2f 3100F9    LD      SP,0F900H   <- 스택상위주소
0e32 ED5E      IM      2                 <- 인터럽트 모드 2 설정
0e34 3EFA      LD      A,0FAH
0e36 ED47      LD      I,A
0e38 3A27FA    LD      A,(0FA27H)
0e3b D3B0      OUT     (0B0H),A
0e3d 3EC0      LD      A,0C0H
0e3f D393      OUT     (93H),A
0e41 3E0D      LD      A,0DH
0e43 D393      OUT     (93H),A
0e45 3E09      LD      A,09H
0e47 D393      OUT     (93H),A
0e49 DB90      IN      A,(90H)
0e4b AF        XOR     A
0e4c D391      OUT     (91H),A
0e4e 3E03      LD      A,03H
0e50 D393      OUT     (93H),A
0e52 3E05      LD      A,05H
0e54 D393      OUT     (93H),A
0e56 064F      LD      B,4FH
0e58 CDBF19    CALL    19BFH
0e5b CDDE10    CALL    10DEH
0e5e 3E0C      LD      A,0CH
0e60 CD8F0E    CALL    0E8FH
0e63 FB        EI    
0e64 CD5C1A    CALL    1A5CH
0e67 3E2C      LD      A,2CH
0e69 CD8F0E    CALL    0E8FH
0e6c CD5810    CALL    1058H
0e6f CD511B    CALL    1B51H
0e72 CDB31B    CALL    1BB3H
0e75 C34000    JP      0040H

이것을 보면 소프트웨어적으로는 FC-100과 상당히 닮아 있음을 알 수 있습니다.
그렇지만 인터럽트 모드를 보면 꼭 그렇지도 않습니다.

FC-100과 PHC-25는 인터럽트 모드 1을 사용하는것으로 확인됩니다.
그러나 PC-6001은 인터럽트 모드 2를 사용합니다.
인터럽트 모드 2는 인터럽트 벡터가 데이터 버스에 올라오는 형태로서
인터럽트 모드 1과는 완전히 다르며 하드웨어적인 구성에서 차이가 크다고 할 수 있습니다.

결과적으로보면 에뮬레이터를 수정해서 작업하는 관점에서보면
PHC-25를 수정하는 편이 좀더 낫다고 볼 수 있습니다.

그러나 PHC-25 자료만으로는 불충분하고 RS-232(8251)쪽 자료와
메모리 페이지 처리에 대해서는 PC-6001의 자료를 참고해야 할듯합니다.