2013년 2월 16일 토요일

금성사 교육용 다관절 로봇

아주 어렷을 적에 FC-100으로 로봇을 제어하는 것을 잡지책에서 본적이 있습니다.

FC-100에는 로봇도 붙여서 조종하다니.. 이럴수가~~~
당시 로보트 태권브이를 만들고 싶은 꼬마한테는 이것은 "드림" 그 자체였습니다.
잡지책에서 이 로봇을 본뒤에 무척 갖고싶어 해서 아버지께 컴퓨터 대전에 있는 대리점에 문의를 해달라고 졸랐던적이 있습니다.

대전 대리점도 무척 큰 곳이었는데 그런거 모른다고 하더군요.
ㅎㅎ 당연히 몰랐겠죠.. 이건 파는 물건이 아니었던것 같더라구요.
홍보용 제품이었던것 같습니다.

세월이 흘러흘러 대학원에 들어가고나서 연구실 창고를 정리하다 깜짝 놀랐죠.
연구실 구석에 이 로봇이 있었거든요..
그 이후로 대학원 연구실 짐정리가 있을 때마다 폐기처분 대상이 되던것을 교수님의 반대로(저도 버리는것을 반대했음) 이제껏 보관하고 있는 로봇입니다.
듣기로는 금성사에 입사한 선배가 회사창고 정리할때 의견을 내어서 기부를 받은것이라고 합니다.
먼지가 자욱하긴 하지만 상당히 깨끗하게 보관되어 있습니다.
아마 제어선을 조정하면 움직일 수 있을겁니다.

연구실을 자주 못가기 때문에 가끔들르는 편입니다.
사진찍은때가 작년 이맘때 인것 같은데, 아마 아직도 보관중일겁니다.
나중에 기회가 되면 자세한 사진을 찍어올리겠습니다.
지금은 이 사진 한장뿐입니다.

관절 자유도가 몇인지는 잘 모르겠어요..
기억에는 6축이었던것 같은데, 사진상으로 보면 5축인것 같기도 하구요.


2013년 2월 13일 수요일

금성 "컴퓨터 패밀리" 월간지

아주 오랫적 자료입니다.
패미컴 관련자료가 거의 그렇듯이 29년전 자료입니다.
허~~ 세월이 흐르는 물과 같네요.금성사에서 발간한 월간지 입니다.

표지는 전자박람회사진인데 한복입은 부스걸이 묘한 향수를 자극하여 클로우즈업 해봤습니다.

약 50페이지 정도의 얇은 잡지 입니다.

설날때 고향집에가서 찾아낸겁니다
이것 말고도 몇개가 더 있어요
제가 관심있는 부분은 "금성 패미콤 FC-100의 모든것"이라는 기사입니다.
소개에서도 나온 바와같이 "컴퓨터 패밀리 6호"부터 3개월간 연재되었다고 나옵니다.
제가 가지고 있는 부분은 8호로서 연재 기사의 마지막 부분입니다.

네이버 카페검색을 해보니 마소(잡지)의 해당 기사 전체를 사진찍어서 올려두신 분이 계시더군요.
사진문서가 읽기에 충분한 해상도이기 때문에 자료로서는 만족할 만하지만, 웬지 "컴퓨터 패밀리"에 올라온 자료를 완성해 보고 싶네요.

2013년 2월 6일 수요일

FC-100 CPU(Z80) 관련 정보

FC-100은 Z80이라는 CPU를 쓰고 있습니다.

저한테는 이 CPU가 매우 친숙한데요.
한때 이 CPU는 개인 PC에서 오락실의 게임기판, 산업용 제어기에 이르기까지 쓰이지 않은데가 없었습니다.

IBM PC 등장이전에는 애플II의 6502(모스테크놀러지,8비트)와 68000(모토롤라,16비트)와 함께 세상을 호령하던 CPU였습니다.

CPU제조사는 자일로그(Zilog)입니다.
제가 기억하기로(확실하지 않습니다.) 자일로그사가 Z80의 아키텍쳐를 개방하여 Z80의 호환칩과 에뮬레이터를 만드는것에 라이센스를 지불하지 않아도 된다고 들었습니다.
참고로 산업용으로 많이 쓴는 8051은 인텔이 아키텍처를 개방하지 않았다네요.

제가 자료를 참고한 싸이트를 링크해 드립니다.

http://z80.info/index.html


링크해드린 Z80싸이트의 서브페이지인데요.
Z80관련한 소프트웨어 개발도구가 링크되어 있는 페이지 입니다.
http://z80.info/z80sdt.htm
디스어셈블러와 어셈블러를 받으실 수 있어요.


Z80 CPU의 데이터 쉬트예요..
이거 구하기 진짜 힘든겁니다.
http://www.zilog.com/docs/z80/ps0178.pdf

Z80의 사용자 메뉴얼이예요.
니모닉에 대한 자세한 설명을 볼 수 있어요.
http://www.zilog.com/docs/z80/um0080.pdf

이건 자일로그사의 Z80관련 자료를 모아둔것인데요.
위의 링크이외에도 다양한 자료를 받아보실 수 있으세요.
http://www.zilog.com/index.php?option=com_doc&Itemid=99
왼쪽탭에 "Microcontrollers/Classic Products/Z80"을 확장하시면 볼 수 있습니다.



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의 자료를 참고해야 할듯합니다.

FC-100 에뮬레이터 작업

FC-100은 PHC-25와 유사하다고 합니다.

그래서 PHC-25용 에뮬레이터를 만드는 일본사람의 소스를 수정해서 작업을 시작했습니다.

저도 몇년전에 한번 해볼까 말까 하다가 우연히 국내에서도 저와 관심이 비슷한 분을 발견하고 그분하고 협업을 하려고 시작했습니다.

그분의 블로그(진스맥 이라는 분이네요)는 여기를 클릭하세요
글을 쓰는 이 시점에 그분하고 연락은 안되었습니다.

우선 PHC-25용 소스를 받아야 합니다.
http://homepage3.nifty.com/takeda-toshiya/

"Common Source Code Project"를 클릭하셔서 소스를 받습니다.

그리고 PHC-25용의 설정 폴더를 복사한뒤 작업을 시작합니다.
컴파일 하려면 XP용 DirectX SDK가 있어야 합니다.
XP DirectX SDK

PHC-25의 memory.cpp의 내용을 수정합니다.
제 기억에 FC-100은 0x8000부터 RAM으로 인식하는것으로 기억합니다.
그래서 아래와 같이 수정하였습니다.

// set memory map
#ifdef _MAP1010
SET_BANK(0x0000, 0x5fff, wdmy, rom );
SET_BANK(0x6000, 0x77ff, vram, vram);
SET_BANK(0x7800, 0x7fff, wdmy, rdmy);
SET_BANK(0x8000, 0xffff, ram,  ram );
#else
SET_BANK(0x0000, 0x5fff, wdmy, rom );
SET_BANK(0x6000, 0x77ff, vram, vram);
SET_BANK(0x7800, 0x7fff, wdmy, rdmy);
SET_BANK(0x8000, 0xffff, ram,  ram );
#endif


그리고 나서 얻은 화면이 다음과 같습니다.

여기까지는 금방이라서 감격을 했습니다.

근데 실행이 안되는 이유를 찾아보려고 하다가 아래와 같은 치명적인 부분을 발견했습니다.
이후에 설명할 디스어셈블과 HEX 리스팅 파일은 여기를 참고하여 주세요

FC-100과 PHC-25는 모두 Z80 인터럽트 모드1을 사용합니다.
인터럽트 모드 1에서는 하드웨어 인터럽트가 발생하면 0038H번지로 점프합니다.
그런데 FC-100의 인터럽트 벡터의 내용은 아래와 같은것으로 채워져있습니다.

0038 CD05FB    CALL    0FB05H

아악~~~
이것의 의미는 좀 복잡합니다.
PHC-25 에뮬레이터에서 저 주소는 그냥 램의 주소입니다.

FC-100에서도 RAM번지인 저곳으로 뛰었다면 세가지 중에 하나입니다.
1. 부트스트래퍼에서 FB05H에 롬 프로그램 일부를 복사한다.
2. FxxxH 번지 일부가 하위의 롬에 중복매핑되어 있다.
3. 페이징을 사용하는 메커니즘이 있고 그래서 FB05H로 뛰었다.

FC-100의 모든것이라는 기고문을 통해서 FB05가 인터럽트 1번의 후크주소임이 밝혀졌습니다.
이에 따라 메모리 배치를 다시해볼 생각입니다.

원래 Z80같은 8비트류의 직접어드레싱 가능한 최대 메모리는 64KBytes입니다.
따라서 메모리 확장을 위해서 페이징방식을 사용하는데요.
FC-100의 부트스트래퍼를 전부 따라가 본것은 아니지만 아무래도 페이징 방식인것 같은 느낌입니다.
부트 벡터의 내용은 아래와 같은데

0000 F3        DI      
0001 C38919    JP      1989H



1989번지의 내용은 아래와 같습니다.

1989 F3        DI      
198a 3100E0    LD      SP,0E000H  <- 스택 상위 주소
198d ED56      IM      1              <- 인터럽트 모드 1 설정
198f D371      OUT     (71H),A    <- 페이징 제어를 하는 부분으로 추정
1991 D360      OUT     (60H),A   <- 페이징 제어를 하는 부분으로 추정
1993 210078    LD      HL,7800H
1996 1100E0    LD      DE,0E000H
1999 010008    LD      BC,0800H
199c D5        PUSH    DE
199d E5        PUSH    HL
199e C5        PUSH    BC
199f EDB0      LDIR    
19a1 C1        POP     BC
19a2 D1        POP     DE
19a3 E1        POP     HL
19a4 D371      OUT     (71H),A   <- 페이징 제어를 하는 부분으로 추정
19a6 D361      OUT     (61H),A   <- 페이징 제어를 하는 부분으로 추정
19a8 EDB0      LDIR    
19aa D370      OUT     (70H),A   <- 페이징 제어를 하는 부분으로 추정
19ac 2100FA    LD      HL,0FA00H  <- FB05영역을 포함하여 0으로 채우는 루틴 시작
19af 1101FA    LD      DE,0FA01H
19b2 01A201    LD      BC,01A2H
19b5 3600      LD      (HL),00H
19b7 EDB0      LDIR              <- FB05영역을 포함하여 0으로 채우는 루틴 끝
19b9 210080    LD      HL,8000H
19bc 7E        LD      A,(HL)
19bd 2F        CPL     
19be 77        LD      (HL),A
19bf BE        CP      (HL)
19c0 210080    LD      HL,8000H
19c3 2803      JR      Z,19C8H          ; (+03H)
19c5 2100C4    LD      HL,0C400H
19c8 2200C4    LD      (0C400H),HL

이 자료를 볼 때 메모리 페이징을 사용할 가능성이 높습니다.
FC-100에 대한 자료중에 페이징을 어떻게 했는지에 대한 자료를 구하지 못하면 PHC-25에뮬레이터를 조금 손보는 정도로는 FC-100 에뮬레이터를 만들지 못합니다.

앞서 FC-100 에뮬레이터를 시작하신 분께서 손수 회로도를 그리시는것 같은데
그것이 어느정도 완성되면 알수 있게될것 같습니다.

저도 예전 자료를 한번 찾아보도록 하겠습니다.
오늘은 여기까지 입니다.

2013년 1월 30일

FC-100의 모든것이라는 마소기사를 참고하여 메모리 맵을 조정하였습니다.
작동은 하는것 같긴한데 키보드 매핑을 알수가 없네요.

키보드 매핑을 알기위해 디스어셈블을 볼지 아니면 다른자료를 찾아볼지 고민중입니다.
쩝쩝....
일단 저런 화면이라도 나와서 엄청 기쁩니다.

2013년 1월 31일

키보드가 작동하는게 아니였습니다.
8251초기화를 해줘야만 키보드 스캔을 시작하더군요.
쉽지 않네요.......
일단 8251초기화를 한뒤 키보드 값은 안맞지만 대충 키보드가 먹는 상태까지입니다.

2013년 2월 15일
작업을 한것은 아니구요~~
설날에 고향집에 가서 작업하려고 했는데, 제 노트북이 고장이어서 작업을 못했습니다.
대신 금성사의 "컴퓨터 패밀리" 월간지를 들고 왔는데 한번보시죠.
컴퓨터 패밀리

2013년 2월 26일(새벽)
컴퓨터가 복구되어서 작업을 시작해봤습니다.
Win8 빠르고 좋군요...
키스캔 코드값을 알아내기 위해서 IO 0x00번지부터 0x0f 번지까지 각 1비트마다 값을 바꿔보면서 화면상에 나타나는 문자값을 얻었습니다.
0x00에서 0x0f까지의 내용중에 상위니블에는 매핑된 키값이 없는것 같습니다.
하위 니블에는 키값이 대부부니 매핑되어 있습니다.

"따~~따따따"하는 키음이 들리면 일단 키가 있는것으로 봤구요.
화면상에 문자가 표시되지 않은 키는 ??로 표시했습니다.
그렇지 않은것은 키가 매핑되지 않은것으로 봤습니다.
매핑되지 않은키는 xx로 했습니다.
현재까지는 방향키다 쉬프트키 까지는 알 수 없습니다.


7 6 5 4 3 2 1 0
00: xx xx xx xx [ ] p o
01: xx \ BS = RET
02: ?? ?? ?? xx
03: 9 ; ' ??
04: 5 6 7 8
05: 1 2 3 4
06: F5 xx RUN 0
07: F1 F2 F3 F4
08: - / . ,
09: ?? ?? xx ??
0A: b n m l
0B: z x c v
0C: g h j k
0D: a s d f
0E: t y u i
0F: q w e r

이 값을 찾는데 무려 100회 이상 컴파일/실행을 반복했습니다.
아직 확실한것은 아닙니다.
곧 키보드 입력이 가능할것 같습니다.

2013년 2월 26일(저녁)
키코드값을 넣고나서 쉬프트 키와 CAPSLOCK키 컨트롤키의 매핑을 알아냈습니다.
키스캔 IO번지내용의 상위 니블이 CAPSLOCK과 쉬프트키, CTRL 키였습니다.

나머지 하나도 어떤키는 읽혀 지는데 아마도 한글키 같습니다.

한글키는 어떤거였는지도 잘 모르겠구요..
스페이스 좌우에 있는 금성키와 아무것도 없는키중에 하나였던것 같은데..


또 ESC키가 어떤기능이었는지 생각이 안나네요.
ESC키로 생각되는 키가 어떻게 확인해야 하는지 잘모르겠어요.

어쨋든 키매핑을 하고 나니 프로그램 입력이 가능해졌습니다.
지금 상태에서는 실행속도는 엄청느립니다.

첫번째 프로그램은 변수 A,B를 읽어서 덧셈을 해주는 프로그램이고
두번째 프로그램은 1부터 1000까지 더하는 프로그램이죠
옛날생각이 새록새록.. ㅋㅋㅋ

MC6847관련해서 메모리 매핑을 좀더 신경써봐야 할것 같습니다.
커서를 나오게 해야할텐데..
현재는 커서가 안나옵니다.


다음은 CHR$(0-255)까지 찍는 프로그램이죠.

10 FOR I=0 TO 255
20 PRINT CHR$(I);
30 NEXT I
RUN




2013년 3월 2일#1
심심해서 FC-100에 대한 자료를 찾다가 네이버 카페에서 에뮬레이터를 만드신분을 찾았습니다.
그분도 제 블로그의 롬파일을 사용하셨더군요 ㅎㅎㅎ.
진스맥님, 제니님, bluemsx님도 비슷한 작업을 하십니다.
저는 공동작업을 제안하고 싶어요...

제 블로그의 롬파일은 카세트 레코더로 추출한것이 아니고
실기에서 뽑아서 롬라이터로 읽은 것입니다.
롬라이터로 읽더라도 오류가 날 수 있기 때문에 롬을 다시 빼고 끼운 다음 다시 읽는 작업을 몇번을 반복해서 내용이 같은 것을 확인한것입니다.
제 FC-100 실기는 전원쪽에 문제가 있어서 작동하지 않습니다.
그래서 롬파일의 체크섬은 실기에서 확인할 수는 없어요.

많은분 께서 작업하시니 곧 FC-100 에뮬레이터가 세상에 나올 수 있을것 같네요.
그런데.. 좀 아쉬운것은 FC-100은 소프트웨어가 거의 없다는거예요.
에뮬레이터를 만들고나서도 그위에 돌려볼 소프트웨어가 없어요.
그저 저처럼 1에서 100더하기나 짜보거나 라인그리기나 해보거나 그정도..
이걸로 뭔가 해볼게 없을까요?

2013년 3월 2일#2
bluemsx님으로부터 VDG내장 폰트에 대한 확인 요청이 있었습니다.

5 SCREEN1,1,1:CLS
10 FORI=32TO255:PRINT CHR$(I);:NEXT
20 FORI=32TO255:POKE &HC000+I-32,0:NEXT

이 프로그램의 실행결과는 아래와 같습니다.
그 의미는 bluemsx님께서 확인해주실 것입니다.

 

bluemsx님께서 쪽지를 통해 연락을 주셨습니다.
위 프로그램은 6847내장 폰트를 출력하는 프로그램이라는군요.
같은 6847을 사용한 PC-6001에서는 아래와 같이 출력된다고 합니다.


FC-100에서 6847운영은 메모리 페이지를 사용하기 때문에 관련루틴을 업데이트하면 결과가 어떨지 잘 모르겠습니다.

실기에서의 결과가 궁금합니다.

10 SCREEN 1,1,1:CLS
20 FOR I=0 TO 255
30 POKE &HC000+I,I:NEXT
40 IF INKEY$="" THEN 40

이 프로그램을 실행하면 나오는 내용인것 같습니다. 이 프로그램은 bluemsx님께서 알려주셨습니다.

2013년 3월 3일
하루 이틀사이에 갑자기 FC-100 에뮬레이터가 완성이 되어 버렸습니다.
주된 작업을 하신분은 네이버에서 활동중이신 재니님입니다.
그분의 페이지는 다음과 같습니다.
http://cafe.naver.com/myspc/259?social=1
연휴동안에 초 고속 스피드로 작업하신것 같아요.

제가 스스로 해보고 싶었던 일이었는데, 스스로 좀 아쉽기도 하고, 재니님께 고맙기도 합니다.

FC-100에 추억을 가지신 분들의 기억을 조금씩 쌓을 수 있는 기반이 마련된것 같아 매우 기쁘고요..

재니님과 bluemsx님과 제가 공동작업환경을 마련하는 중이었어요.
공동 작업환경이 구축되면 좀더 많은 자료로 찾아뵐수 있을것 같습니다.

2013년 3월 9일
다께다 토시야씨로 부터 본 프로젝트를 위해 소스코드를 사용하는것을 허락맞고나서, 공동작업을 하기위해 구글 코드에 프로젝트를 만들었습니다.

https://code.google.com/p/fc-100/

최초에는 제가 마지막 작업한 코드를 커밋해 두었습니다.
방금 컴파일을 해봤는데 컴파일은 되는군요.
제가 작업한 부분까지는 같이 시험해보실 수 있으십니다.
이번 주말을 통해서 재니님과 bluemsx님께서 참여하여 주실것입니다.
재니님은 이미 데이터레코드에 대한 작업계획을 가지고 계시더군요..
역시 재니님...
본 에뮬레이터 페이지는 그 작업환경에 대한 관리적인 측면의 내용을 다루게 될것입니다.
그 이외에 참여를 원하시는 분이 있으시면 연락을 주시면 좋겠습니다.


FC-100 베이직롬 디스어셈블리 및 HEX 리스팅

Z80의 디스어셈블러를 돌린뒤에 얻은 디스어셈블 리스팅 파일입니다.


어셈블리 리스팅
어셈블리 레퍼런스
HEX 리스팅

디스어셈블러는 dZ80을 사용하였습니다.(XP용 다운로드)
사용한 옵션은 아래와 같습니다.

HEX 에디터는 HxD를 사용하였습니다.
누군가 한글을 작업했나봅니다.(한글버젼, XP용 다운로드)
무료프로그램에다가 기능이 너무 좋습니다.

FC-100 롬파일

금성 패미컴 FC-100의 롬파일입니다.
공장출하상태의 원본롬하고는 조금 다릅니다.
메모리와 한글 확장팩을 쓰기위해서 약간 변형된것으로 알고있습니다.


이 롬파일은 카세트 레코더로 추출한것이 아니고
FC-100 실기에서 뽑아서 롬라이터로 읽은 것입니다.
롬라이터로 읽더라도 오류가 날 수 있기 때문에
롬을 다시 빼고 끼운 다음 다시 읽는 작업을 몇번을 반복해서
내용이 같은같은 것을 확인한것입니다.

제 FC-100 실기는 전원쪽에 문제가 있어서 작동하지 않습니다.
그래서 롬파일의 체크섬은 실기에서 확인할 수는 없어요.


8KBytes짜리 3개로 구성되어 있습니다.
FC-100#1.BIN
FC-100#2.BIN
FC-100#3.BIN

BASIC 롬파일을 합치는 방법은
명령창을 열고 롬이 복사되어 있는 폴더로 이동한다음 아래의 명령을 실행하면됩니다.

copy /b FC-100#1.BIN+FC-100#2.BIN+FC-100#3.BIN BASIC.ROM


폰트롬은 아래와 같습니다.
FC-100#CG.BIN


PHC-25 에뮬레이터에 쓰려면 폰트의 이름을 FONT.ROM으로 바꿔야 합니다.
명령창에서 아래의 명령을 실행하면 됩니다.

copy FC-100#CG.BIN FONT.ROM

만들어진 BASIC.ROM과 FONT.ROM을 에뮬레이터폴더에 넣고 실행하면 됩니다.

디스어셈블리 리스팅과 HEX 텍스트 리스팅을 보시려면 여기를 눌러주세요

FC-100의 내부사진

금성 패미컴 FC-100의 내부사진입니다.
PHC-25의 호환기종이라고 하네요.
PHC-25에는 8251(비동기 통신칩,UART)이 없는것으로 아는데
FC-100에는 8251이 있는것을 보면 어쩌면 NEC PC-6001과 비슷한지도 모릅니다.
사진을 클릭하시면 원본크기로 보이십니다. 그러면 칩번호를 자세히 확인하실 수 있습니다.


사진에 보이는 롬을 확대한 사진입니다.
8K*3=24K크기입니다.
이것은 원본롬은 아닙니다.
제가 가지고 있을때 한글확장팩이라는것을 쓰기 위해서 롬파일이 수정되어 있습니다.
롬파일은 여기를 참고하십시요