레이블이 금성 패미콤인 게시물을 표시합니다. 모든 게시물 표시
레이블이 금성 패미콤인 게시물을 표시합니다. 모든 게시물 표시

2013년 2월 16일 토요일

금성사 교육용 다관절 로봇

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

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

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

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

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

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


2013년 2월 13일 수요일

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

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

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

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

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

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

2013년 1월 27일 일요일

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 롬파일

금성 패미컴 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크기입니다.
이것은 원본롬은 아닙니다.
제가 가지고 있을때 한글확장팩이라는것을 쓰기 위해서 롬파일이 수정되어 있습니다.
롬파일은 여기를 참고하십시요