작년에 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로 출력 및 콘솔 리다이렉션을 해본 모습입니다.
아래는 윈도 쪽의 터미널에 출력된 모습입니다.
완전한건 아니지만, 이정도만으로도 꽤 쓸만한거 같네용.
그럼, 또 여유가 생기면 노닥거리는 걸로 하고, 여기서 마무리~ 합니다. ㅎ.ㅎ;