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로 출력 및 콘솔 리다이렉션을 해본 모습입니다.




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




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

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


2011년 6월 5일 일요일

간이 터미널 프로그램으로 리눅스 우분투 로그인

작년에 간단한 RS232C 카트리지를 만들었는데... 아마 기억하시는 분 있으시죠? ㅎ.ㅎ;

그 때, 제 노트북(OS는 윈도) VMware에 깔린 리눅스에, 시리얼포트로 로그인 해보려다 실패했었지요.

VMware에서 시리얼 포트 I/O가 충돌하면서 포트가 끊어지는 현상이었는데요.


오늘 다시 테스트를 해봤습니다.

제 노트북엔 시리얼 포트가 없어서 USB to 232C 어댑터를 쓰고 있습니다.

VMware에서는 이 포트의 리소스를 공유해서 시리얼 포트로 에뮬레이션이 가능한데요.

이러면, VMware 내의 리눅스에서는 제대로 동작이 안되었습니다.

참고로 VMware player 3.1.4 버전을 쓰고 있는데요, 암튼 정확한 원인은 모르겠지만... 아무리해도 안되더군요. ㅋ


근데 시리얼 포트 에뮬을 끄고, 대신 USB 에뮬쪽을 켜면 이게 리눅스 쪽에서 정상적으로 쓸수가 있었습니다. ㅎ.ㅎ;

해당 어댑터는 우분투 11.04에서 ttyUSB0 로 자동 인식 되네요.


암튼 문제없이 연결이 되서, 제 터보알로 로그인을 해봤습니다.

아래 인증샷 나갑니다.




ls 실행했을때, 디렉토리 앞에 이상한 글자가 마구 찍히는데요.

이건 MSX쪽 터미널 프로그램이 ANSI 컬러코드를 처리 못해서 그런거니 이해해주세요. ㅎ.ㅎㅋ

원래는 아래 터미널처럼 나와야하는 것이죵~ ㅋ




PS. 2011.06.05

눈에 거슬리는 터미널 컬러코드를 무시하도록 해봤습니다. 아래처럼 나오는군요.

나중에 시간나면 컬러 처리 가능한 터미널을 하나 만들어봐야겠군요. 스크린7을 써야겠죠. 아마도...