2015년 6월 7일 일요일

FontPack 제작 #1 - 폰트 가속기

제가 주로 사용하는 MSX 본체가 일제 기기이다보니,

 한글이라던가 특수문자 등 KSC5601 셋을 활용하려면 뭔가 다른 방법이 필요한데요.


이제까지 DOS2의 메모리를 활용해서 폰트를 램상주 시키고, 프로그램에서 import하는 식으로 사용했습니다.

아래 글 참고하셔요~

http://sharksym.egloos.com/5250995

http://sharksym.egloos.com/5250996

http://sharksym.egloos.com/5251004


램상주 폰트를 사용하면, 응용 프로그램에서 폰트 공유를 할수 있어 좋지만...

메모리를 많이 점유한다는 점과 부팅할때마다 램에 로딩하는 시간때문에 답답하더군요.

실사용 시, DOS2 세그먼트 액세스하는 것도 코딩에 부담이 좀 되구요.

물론 제가 쓰는 HI-TECH C 환경으로는, LIB로 구현해놔서 쉽게 쓸 수 있지만...

아마 다른분들은 힘들겠...죠? ㅋ


결론은 "HW 폰트 메모리를 만들자!"가 되겠습니다.

일단 시작하려면 이름부터 지어야겠지요? ㅋ

그래서... 이름이 "FontPack" -_- 한참 고민해봤는데, 딱히 떠오르는게 없네요 ㅎ.ㅎ


기본적인 요구사항을 대충 적어보면,

 - KSC5601 완성형 한글/특수문자/한자 set (문자 코드 영역: A000H ~ FFFFH)

 - 조합형 한글/특수문자/한자 set (문자 코드 영역: 8400H ~ FFFFH)

 - ASCII 문자 set (문자 코드 영역: 00H ~ FFH)

 - 폰트 사이즈: 16 x 16, 1BPP 타입 문자 한개당 32bytes 사용

 - Z80 Port I/O 사용

정도가 되겠습니다.


그냥 이렇게 만들면, 기존 일제 MSX의 JIS KANJI롬 또는 X-II의 한글/한자롬의 디럭스 버전 정도가 되려나요?

그래서 기능을 좀 추가합니다.

 - MSX 스크린5,6,7 에서 픽셀 데이터를 바이트 단위로 뿌릴수 있는 2BPP/4BPP data 변환 기능

   IO port에서 읽은 data를 그대로 VRAM에 write하면 됩니다.

 - 한글 확장 BIOS: 조합 to 완성, 완성 to 조합 코드 변환, 844 조합형 한글처리 등

 - SRAM을 이용, 사용자 문자set 지원 (BIOS 또는 응용 프로그램 내에서 폰트 가속처리)

 - 12 x 12 폰트 지원. MSX에서 80컬럼 쓰려면 12픽셀폭 폰트가 필수입니다.


HW는,

 - ALTERA EPM3128 (CPLD)

 - 2MBytes 플래쉬메모리, 32KB SRAM

로 구성합니다.

CPLD 한개에 구겨넣을 수 있을지가 문제네요. 음...


폰트 data는,

 - 16 x 16 사이즈: 완성형 및 조합형 한글/특수문자/한자 set, ASCII set

 - 12 x 12 사이즈: 완성형 한글/특수문자/한자 set, ASCII set

                    (조합형 코드는 용량문제로 포기ㅋ, 조합 to 한글 코드 변환으로 때워야...)


플래쉬 메모리는 16KB 매퍼가 필요하니, 별도 매퍼 만들기보다는...

그냥 ASCII 16KB 매퍼를 구현하도록 합니다.

(CPLD 용량 딸리면...바뀔지도 몰겠네요 ㅋ)


대충 스펙을 정했으니, 제작에 돌입합니다~~ ㅎ.ㅎ


만능기판을 한장 준비해서 CPLD를 붙입니다.

EPM3128 TQFP 타입이라 DIP 변환기판 썼습니다. (한장에 7000원짜리 변환기판 ㄷㄷㄷ)

JTAG 핀헤더도 붙여주고요.




뒷면입니다.

CPLD 그라운드 배선을 했네요.

심시티 도로 깔때처럼 이쁘게~ 이쁘게~ 고가다리도 하나 보이네요.ㅋ




정신줄 놓고 바느질 하다보면, 어느새 플래쉬롬이 나타납니다.

만능기판에 붙이려고 SOP 500mil 타입을 찾았습니다.

1MBytes라서 두개를 포개서 납땜해야됩니다.

아래처럼 다리를 위/아래/위위/아래/ 벌리면 기판에 착~ 달라붙어요~




바느질이 끝난 모습입니다.

SLTSL(슬롯 선택) 신호에 스위치 하나 달았구요. 동작 표시(또는 디버깅) 용으로 LED하나 붙였습니다.




보면 귀신나올 것 같지만, 이쁘게 하려면 시간이 많이 걸리는 작업이라 ㅡ.ㅡ

걍 대충 납땜합니다.




터보알에 꽂아본 모습이네요.

이...이런... JTAG 핀헤더가 슬롯에 묻히네요 ㅡ.ㅡ

대충 붙였더니 이런 참사가...ㅋ 슬롯에 꽂은 상태로 CPLD 다운로드는 불가능하겠습니다.




ASCII 16KB 매퍼는 간단한거니, 대충 VHDL 코드를 만들었어요.

FontPack 툴도 대충 만들어서~ 바로 테스트 들어갑니다.


뱅킹 필요없는 일반 16KB 롬(킹스밸리) 먼저 확인!




잘되네요~




1메가겜인 갈포스도 돌려봅니다.



ASCII 16KB 매퍼는 잘 동작하네요.




마지막으로 2메가바이트 전체용량을 채워봅니다.




음... 잘 되는군요.

근데 테스트해보니, Pointless Fighting 롬을 1메가바이트만 넣어도 실행은 되더라구요. ㅎ.ㅎ

참고만 하셔요.




이거 실기로 처음 돌려봤는데, 문사운드 효과음도 깨끗하고 좋습니다.

캐릭터 움직임도 오락실 스파2랑 비슷하구요. 나이스하네요.


오늘은 여기까지구요, 다음 편에는 폰트 처리가 이어집니다~

그럼, 즐거운 하루 되셔요...



 

2015년 5월 25일 월요일

DOS2 램디스크 간단 활용 및 버그(?) 소개

일단 서론 나갑니다. ㅎ.ㅎㅋ


DOS2부터 커널에서 메모리 매퍼를 지원합니다.

근데, 대부분의 DOS프로그램들은 TPA(기본 메모리 64K 이하 영역) 만으로 구동되기 때문에,

메모리를 많이 확장하더라도 그다지 활용되지 않습니다.


20여년 전 국내 상황에서는 turboR 기종이 아니면, DOS2 사용하기가 힘들었던 것도 이유가 되겠구요.

DOS2 용 프로그램 만들어봐야 구동 가능한 사용자가 별로 없으니,

차라리 재미나 램카드를 활용하는 프로그램이 더 유용했을 것 같기도 하네요. ㅎ.ㅎ


어쨌거나 20여년이 지난 지금, 많은 분들이 DOS2 를 사용하고 계시지요. (맞나요? ㅋ)

DOS2는 자체적으로 램디스크를 지원합니다.

메모리 매퍼 일부분을 가상의 디스크로 만들어주는 것이지요.


기본적인 사용법은 DOS2 프롬프트에서 HELP RAMDISK 라고 입력하면, 도움말을 볼 수 있으니 참고하시구요.

그럼, 본론 나갑니다~


1) 램디스크 설정

   RAMDISK 숫자

   숫자는 KB단위로 인식됩니다. 128KB 램디스크를 만드려면, RAMDISK 128 입력하면 되겠습니다.

   램디스크는 항상 H: 드라이브로 생성이 됩니다.

   만약 H: 드라이브가 이미 존재한다면, 램디스크 추가가 불가능합니다.


2) 램디스크 해제

   RAMDISK /D

   입력하면 할당된 메모리가 해제되며, H: 드라이브는 더이상 사용 불가능합니다.

   임시로 저장했던 파일이 있다면, 미리 다른 물리 디스크로 복사해야 되겠지요.


3) 주의 사항

   FAT16 드라이버(Okei 씨 프로그램)를 함께 사용하려면,

     먼저 RAMDISK 설정 후 FAT16 드라이버를 실행해야합니다.

   FAT16 드라이버가 실행된 상태에서는 RAMDISK 설정/해제가 불가능합니다.


4) 실제 활용

   램디스크가 FDD보다는 훨 빠르지만,

     MMC/SD 드라이브, 선라이즈 IDE, OCM MEGA-SD 등의 기기보다는 느립니다.

   이 경우는 CPU, 메모리가 고속인 turboR에서만 램디스크 효과가 있겠습니다.


   DOS2에서 응용 프로그램 실행/종료가 되면 항상 COMMAND2 쉘 프로그램이 재로딩됩니다.

   이 때, COMMAND2가 램디스크에서 로딩되면 조금 더 쾌적한 환경이 됩니다.

   제 경우는 아래처럼 AUTOEXEC.BAT 및 REBOOT.BAT 설정하고 있습니다.

   SET SHELL 설정 참고하셔요.


[AUTOEXEC.BAT]

SET EXPERT=ON

SET SHELL=A:\COMMAND2.COM

SET PATH=B:\UTILS\;B:\M\;C:\

SET HELP=B:\HELP

MODE 80

VER

RAMDISK /D

RAMDISK 64

COPY COMMAND2.COM H:\

VOL H:RAM_Disk

FAT16

KS_SPE

KS_HANJA

REBOOT %1


[REBOOT.BAT]

SET SHELL=H:\COMMAND2.COM

SET PATH=H:\;B:\UTILS\;B:\M\;C:\

SET TEMP=H:\

C:

cd \

MODE 80

M



마지막으로, 램디스크의 버그로 보이는 동작 하나 소개합니다.

RAMDISK는 항상 H: 드라이브로 할당되도록 만들어져있는데요.

근데 램디스크 해제 명령인 RAMDISK /D는

 H: 드라이브가 실제 물리적인 디스크인 상태에서 실행하면, H: 드라이브를 날려버립니다.

H: 드라이브가 없어지면 접근이 불가능해집니다. 흐흠...


저는 요걸 터보알에서 유용하게 쓰고 있는데요.

부팅 시 MMC/SD 두대가 A: B: C: D: E: F: 로 할당되고,

G: H: 가 본체 내장 FDD로 할당됩니다. (FDD는 물리적인 디스크는 한개지만 가상으로 2개를 지원합니다.)


이 상태에서는 DOS2의 드라이브 문자가 모두 할당되어서 더이상 RAMDISK 설정이 불가능합니다.

근데 RAMDISK /D 를 실행하면, FDD인 H: 가 삭제됩니다. ㄷ ㄷ ㄷ

그러면 RAMDISK 설정 시, 에러나지않고 정상 할당이 됩니다.

저~~~기 위의 AUTOEXEC.BAT 내용에 RAMDISK /D가 포함된게 그 이유 때문이에요.


그럼, 줄입니다.

궁금한 점 있으시면, 덧글 달아주세요~ ㅎ.ㅎ


2015년 5월 7일 목요일

[MS-DOS] MS-DOS 용 FEEDBACK 출시(?) 20주년

20년 전에 하이텔 파라동에 올렸던 "IBM PC용 피드백"에 관한 추억을 더듬어보려구요. ㅎ.ㅎㅋ


일단 타이틀 스샷 한장 올라갑니다~

참고로 DOSBox로 구동한 상태입니다. (잘 돌아가네요!)




1994년 꼬꼬마 대학생이던 시절, 486 PC를 샀었습니다.

그 전까지는 대우 IQ-2000으로 버티고 있었지요.

(가끔 이스3, 퀸플 정도만 돌리는 정도였..ㅋ)


486 PC의 엄청난 속도에 감동은 잠시였고,

그 다음 드는 생각이 뙇!! 뙇!! 이거욤 ㅡ.ㅡㅋ

"나의 486이라면, BASIC으로도 MSX 수준의 겜 만들수 있겠구나!"

그래... MSX에서 이루지못한 꿈(?)을 486으로 한번 해보자.ㅋㅋ


근데 막상 Quick BASIC 공부하면서 이리저리 돌려보니,

키입력이라던가 그래픽/사운드 처리를 하려면 C로 만든 LIB를 붙여야하더군요.

문득 중딩 시절 MSX에서 BASIC + 어셈블리로 프로그램 만들던 생각도 나긴했지만...

아무래도 이건 좀 아닌 것 같았습니다.


혹시 MSX팬 잡지에 있던 "수도관" 게임 아시나요?

그걸 Quick BASIC으로 포팅(?)해서 돌려본적이 있어요.

어쨌거나 BASIC은 답이 아니었습니다. 결국 포기하고 걍 C를 공부하는 걸로 방향을 바꿨습니다.


서점에 뛰어가서 "안녕하세요 터보C" 책을 사왔죠. 으흐흐... 재밌더군요.

근데 이걸로는 겜 만들려니, 할수 있는게 없네요.

다시 서점으로...ㅋ 다른 책을 하나 삽니다.

아래책인데, 아마 아시는 분 있으시죠? ㅎ.ㅎ




제목부터 "게임 만들기"입니다. 목적에 딱 맞는 책이죠ㅋ

사실 SF-2는 별로 관심도 없었고, 저자분(정영덕님)의 PGK LIB 사용법만 알 수 있으면 충분했습니다.

얘기나온김에 책사진 한장 더 올려보아요~




두어달 열심히 공부를 하다보니, 뭔가 알수없는 자신감이 생기더군요.

전격 결정~ 두둥...

MSX의 FEEDBACK 게임을 흉내내보자.


그림 실력은 없으니, 그래픽은 원본 2DD에서 뽑아쓰고,

사운드는 IQ2000 출력을 옥소리 PCM으로 녹음해서 쓰면 되겠구나...

FEEDBACK은 게임 자체에 MUSIC 모드가 있어서, 효과음 등을 쉽게 녹음할수가 있었습니다.

근데 배경음악은 PCM으로 하려니 용량 문제로 안되겠더군요.

결국 IMS 파일 몇개 받아서 때우는걸로 합의(?)했습니다.


시간은 흘러 94년 겨울방학이 됩니다.

대학 첫 겨울방학 두달내내... FEEDBACK 만드느라 다 보냈어요.

(아.. 운전면허도 따긴했네요 ㅋ)


아래는 당시 디럭스페인트2로 작업했던 그래픽데이터입니다.





대부분 원본 겜디스크 이미지에서 뽑은 데이터구요.

아이템, 총알은 따로 그린거라 MSX꺼랑은 좀 달라요.

팔레트 설정은 제가 눈으로 대충 맞춘거라... 요것도 좀 다르긴합니다.

스크린8로 나오는 타이틀 화면은 팔레트 값이 정해져있어서 제대로 나오는게 맞아요. ㅎ.ㅎ


근데 겨울 방학이 끝나도록 완성을 못했습니다.ㅋ

스테이지 6개 구현하는데 시간이 넘 많이 걸리더군요.

결국 두달이 더 지나서야 완성이 되었습니다. (물론 학교도 열심히 다녔어요ㅋ)


첨부된 파일의 문서를 보시면, 1995년 5월 6일이라고 써놨던데, 아마 그때쯤 업로드되었을꺼에요.

오래되서 기억이 가물하지만, 친구가 천리안에 업로드를 했었구요. (친구 아버님 ID로 ㅎㅎ)

하이텔 파라동엔 오산희님이 올려주신걸로 나오네요.




그 후, 96년 군입대하기전에 FEEDBACK 소스파일을 하이텔 게제동(게임제작 동호회)에 업로드했었습니다.

HDD 날려먹으면서 대학 1,2년때 만든 프로그램들 몽땅 날려먹었는데,

FEEDBACK은 다행히 게제동 소스가 남아있어요. 아마 이 소스 보신 분 있으시죠? ㅎ.ㅎ

소스가 넘 부끄러운 코딩 수준이라 안올릴꺼에요ㅋ


암튼 이런 아름다운(?) 추억이 있어, 20년 지난 지금 관련글도 써보고... 즐겁습니다~

흐...



마지막으로 DOSBox에서 찍은 스샷 몇개 올려보아요.

즐거운 밤 되셔요...


FEEDBACK 파일도 첨부합니다.

Download: FEEDBACK.zip


스샷도 몇장 넣어보아요~ ㅎ.ㅎ