2025년 1월 11일 토요일

WAU 제작 #10 - Serial BIOS

일반적으로 MSX에서 처리속도와 멀티 I/O가 필요한 곳은 Memory mapped I/O를 주로 쓰고,

I/O 접근 편의성이 더 중요한 곳은 I/O Port를 씁니다.


WAU는 SPI, UART 등 모든 I/O에서 Port mapped I/O를 사용합니다.

MP3 모듈, Wi-Fi, UART를 동시에 활용하는 등의 여러가지 상황에서 편하게 쓰기 위함이 목적이죠.

뭐, 조금 아쉬운 거라면 Z80에는 port to port 전송명령어가 없다는 것 정도네요.

port to mem, mem to port 명령어 두개로 처리해야되지만, 어차피 주변장치(SPI, UART)가 느려서 딱히 손해는 없습니다요! ㅎ.ㅎ


WAU의 Serial BIOS는 ASCII MSX-SERIAL232 BIOS v1.0과 호환됩니다.

참고로 BIOS v1.0은 I/O Port를 사용하구요. v2.0은 Memory mapped I/O를 사용하니까 시리얼 카트리지를 여러개 꽂을 수 있어요.


오리지널 BIOS의 Baudrate는 19200 이하에서 설정하도록 되어있는데요.

WAU는 921600bps로 고정되어 있습니다.

프로토콜도 START 1bit + DATA 8bits + NO PARITY(0bit) + STOP 1bit 으로 고정되어있어요 ㅎ.ㅎ

참고로, COMINI 등의 초기화 명령으로 파라미터를 바꾸더라도 무시됩니다~~ 유후~~


PC와 MSX를 연결 시, 921600bps 및 H/W Flow control (RTS/CTS)을 사용해야합니다.

아래는 제가 주로쓰는 테라텀의 포트 설정입니다.




그럼, 테라텀으로 간단한 BASIC 로딩을 해보아요~

MSX쪽에서는 LOAD"COM:" 명령으로 로딩을 해줍니다.

참고로 COM:은 시리얼 디바이스 이름이구요. 여러개 있을 때에는 COM1, COM2 이런식으로 할당됩니다.

WAU는 멀티 카트리지를 지원하지 않으니까, 그냥 COM만 쓰시면 되겠어요!



PC쪽 터미널에서는 원하는 파일(TUTOR_F.BAS)을 바이너리 전송모드로 전달합니다.

테라텀에서는 파일을 드래그 & 드랍해주면 아래처럼 전송 메뉴가 뜹니다.



전송이 완료되면, LIST 명령으로 소스를 확인해보아요.



실행해보니 아래처럼 잘 나오네요 ㅎ.ㅎ



그 외 COM 디바이스의 OPEN, READ, WRITE 루틴으로 BASIC 프로그램에서 활용할 수도 있겠습니다.

(쓰실 분은 거의 없겠지만요... 저도 물론이구요ㅋㅋ)



Serial BIOS에는 간이 터미널도 내장되어있습니다.

BASIC에서 CALL COMTERM 명령으로 실행합니다.


아래는 윈도의 터미널에서 'Hello MSX!'를 입력하고,

MSX의 COMTERM에서 'Hello Windows!'를 입력한 모습입니다.



여담이지만, COMTERM 프로그램은 KANJI 스크린 및 폰트팩의 한글 ANSI 스크린에서는 오동작합니다.

이게 초기 MSX1 시절에 나온 구닥다리 프로그램이라서 그런지, 호환성이 안좋은 것 같더라구요.

음, 그러니까 COMTERM으로 한글 채팅이라도 해보실 분들은 미리 포기하시는 편이... ㅎ.ㅎ;


제가 언젠가는 한글 터미널을 만들게(?) 되겠지만,

아직까지는 쓸 곳이 없어서 개발 우선순위에서는 한참 밑에 뒀습니다. 흐흐...



그럼, 다음편에서 이어집니다...


댓글 없음:

댓글 쓰기