2011년 8월 1일 월요일

ASO remake #2 - 플레이어 기본 구현

제작중인 ASO 리메이크 판의 테스트 용 프로그램입니다.



파일은 파라동에서 다운받으실 수 있습니다.


실기에서 실행하시려면, 터보알 GT가 필요합니다.

내장램 512KB로 확장된 터보알 ST에서도 구동됩니다.

직접 돌려보실 수 있는 분이 별로 없겠네용~ ㅎ.ㅎㅋ


조작법은 아래와 같습니다.

 전투기 이동: 커서키

 레이져: C 키

 미사일: X 키

 종료: ESC 키


에뮬레이터에서 구동하려면,

blueMSX 등에서는 시스템을 turboR 로 선택하시면 되겠고요,

paraMSX의 경우는 MSX2+ 를 선택한 후, CPU 속도를 400%에 맞추시면 됩니다.

참고로 blueMSX의 turboR 동작 타이밍이 실기와는 약간 차이가 나는데용, 신경 쓸 수준은 아닙니다요.


아래는 제 터보알에서 돌려본 모습입니다.

약간의 지상 오브젝트와 아군 전투기의 모습을 감상하실 수 있습니다. ㅋ




아래는 ASO 레벨 에디터를 구동해본 모습입니다.

아직 별다른 기능은 없습니다. ㅎ.ㅎ

그냥 구경만 하셔요~





2011년 7월 5일 화요일

RS-232C를 이용한 파일 전송 (PC -> MSX)

MSX용 프로그램을 개발할때는 저는 주로 윈도우에서 작업을 합니다.

CP/M 에뮬을 쓰고 있습지용~

 

최종 결과물을 실제 MSX(제 터보알~)에서 테스트 하려면 아래의 시퀀스를 따르게 되는데요.

 

1. MSX에서 XCHGMMC.COM으로 SD카드 교체 상태 진입

2. MMC/SD 드라이브에서 노트북으로 해당 SD카드를 옮김

3. 원하는 파일들을 SD카드로 복사

4. SD카드를 MSX의 MMC/SD 드라이브로 옮김

 

반복 작업을 하다보면 쬐금 귀찮죠.

다행히 터보알 바로 옆에 노트북을 놓고 쓰느라, SD카드 옮길때 별로 시간이 안걸리긴 합니다...ㅎ

 

요걸 MSX와 노트북의 시리얼 포트를 이용해서, 파일을 전송하도록 해보았는데요.

 

아래 사진을 보시면 되겠습니다




윈도에서 MSX_FX를 실행시키면, MSX가 RS-232C로 연결되는 걸 기다리게 되는데요.

MSX에서는 아래처럼 FXR 프로그램을 실행하면,

파일들을 전송받아 현재 디렉토리에 생성해줍니다.



 

이제 SD카드 바꿔끼는 불편함을 좀 줄일 수 있겠습니다요..ㅋ

 

물론 115200BPS로 전송하면 거의 FDD 속도가 나오지만,

배치 파일로 한방에 전송이 되니, 실행해놓고 딴짓하고 있으면 되겠습니다. ㅎ.ㅎ

2011년 6월 23일 목요일

RS-232C 카트리지 - 오실레이터 업데이트

작년에 CPLD인 EPM3064로 만들었던 232C 카트리지가 있었는데요,

만들다 보니, 로직셀의 부족으로 원래 계획했던 사양은 되지 못했었지용...


클럭 소스를 MSX의 3.58MHz 출력을 사용하느라,

31 분주해서 state machine 만드는데 로직의 낭비가 좀 있었습니다.

계산해보면 3579545 / 31 = 115469Hz 가 나옵니다. 115200에서 약간의 오차도 있었고요.


좀 늦었지만 ㅡ.ㅡ 마무리를 해야될 것 같아서,

쇼핑몰에서 1.8432MHz 오실레이터를 질렀습니다.

1450원짜리 가격이 ㄷㄷㄷ

EPM3064가 4200원인데, 걍 CPLD 하나 더 쓰고 기능을 늘리는게 좋았으려나요~ ㅋ


이거 하나만 택배로 받으려면 민망하니깐 하나를 더 질렀습니다.


ALTERA JTAG 다운로더인 USB-BLASTER입니다.

29,000원의 위용~ 두둥~~




그 동안, 노트북 윈7에서 LPT포트용 BYTE-BLASTER 쓰느라 무지 귀찮았었는데, USB로 바꾸니 좋군요.


참고로 LPT 포트없는 윈7깔린 노트북에서 BYTE-BLASTER 쓰려면,

PCMCIA용 LPT 어댑터랑 VMware에 윈2000에 Quartus 깔아서 쓰는 방법뿐이었습니다.


이제 VMware 없어도 되니 너무 좋네요. ㅋ


음... 이야기가 옆으로 좀 샜습니다만,

클럭을 외부 오실레이터로 바꾸니, CPLD에서 사용되는 로직이 좀 줄어드네요.

16분주 하면 딱 115200Hz가 나옵니다.


사실 내부적으로는 UART의 4배수 클럭을 쓰고 있어서, 실제로는 4분주만 해서 사용합니다.

57600bps용으로는 8분주하고요.


어쨋거나 로직 여유 생긴 걸로,

UART TX, RX LED 두개 컨트롤과 RX FULL 됐을 때 INT(인터럽트) 넣도록 추가했습니다.

이제 CPLD의 남은 I/O 핀이 0개가 됐습니다. ㅎ.ㅎ


아래 사진에서 추가된 오실레이터를 볼수 있습니다.

LED랑 인터럽트 라인도 연결했고요.





아래는 최종 HW 스펙입니다.


- RS-232C TX, RX, GND 3핀 사용

- TX, RX 동작 표시 LED

- Start 1BIT, Data 8BIT, No Parity, Stop 1BIT 전용

- 115200 및 57600 BPS 지원

- RX Full 시 interrupt 지원


아래는 사용된 I/O 포트입니다.


- 30H (Control 레지스터)

  BIT7 = RX Full (Read only)

  BIT6 = TX Full (Read only)

  BIT5,4,3,2 = 사용 안함

  BIT1 = RX Full 인터럽트 1: ON, 0: OFF (R/W)

  BIT0 = Baud rate 1: 57600, 0: 115200 (R/W)


- 31H (8BIT TX, RX 버퍼 레지스터)

  BIT7~0 = TX data (Write시), RX data (Read 시)



일단 RX 시 인터럽트가 되니까, 터미널 프로그램 코딩에 여유가 생겨서 좋네요.

코드 정리해서 돌려보니 안정적이네요.

기존엔 status 폴링하느라 코드가 좀 난잡하기도 하고,

 가끔 화면 스크롤 하다 보면 1바이트 깨지는 경우도 나왔었지요.


내친김에 기능하나 더 넣어봤습니다.


MSX-DOS에서는 AUX 디바이스를 지원하는데요.

예전엔 이걸 어떻게 구현하는지 몰라서 보류 중이었는데...

그냥 AUX IN/OUT 훅에 UART 1바이트 전송 루틴 추가하면 일단 동작이 되더군요. *_*


아래는 간단하게 DOS2에서 AUX로 출력 및 콘솔 리다이렉션을 해본 모습입니다.




아래는 윈도 쪽의 터미널에 출력된 모습입니다.




완전한건 아니지만, 이정도만으로도 꽤 쓸만한거 같네용.

그럼, 또 여유가 생기면 노닥거리는 걸로 하고, 여기서 마무리~ 합니다. ㅎ.ㅎ;