MSX 컴퓨터에서 “Hello, world!”라는 바이너리 프로그램을 MSX BASIC에서 실행하는 용도를 가정하고 어셈블리어로 코딩해 봅시다.
CHPUT: equ 0x00a2 ; 문자 출력을 위한 BIOS 코드 ; 올바른 BIN이 되도록 설정 org 0xD000 ; BIN 기준 주소 ; 시작 Execute: ld hl, HelloWorld ; hl에 HelloWorld 싣기 Print: ld a,(hl) ; 문자열 하나 읽기 cp 0 ; Null 값 체크 ret z ; Null이면 나간다, 아니면 다음 call CHPUT ; 문자 출력 inc hl ; 피연산자 hl 값 +1 jr Print ; 반복 HelloWorld: db "Hello, world!",0 ; HelloWorld 정의 end Execute ; 끝
MSX 어셈블리어로 Hello, world! 롬 만들기 예제 편에 나왔던 것보다 코드가 단순해졌습니다. 시작 기준점이 0x4000에서 0xD000으로 바뀌었고 ROM 시그니처가 없어졌습니다. 그리고 마지막 줄에 끝나는 지점을 표시했습니다.
그리고 잘 보시면 di(인터럽트 해제)와 halt(시스템 정지)가 없어졌습니다. 만약 넣게 되면 프로그램이 종료되면서 시스템 자체가 정지하므로 BASIC도 같이 먹통이 되어버립니다. halt가 없으므로, 프로그램을 종료하는 즉시 본래의 BASIC으로 복귀하게 됩니다.
이 어셈블리어 코드를 program.bin 파일로 어셈블한 뒤 AUTOEXEC.BAS 파일은
10 BLOAD "PROGRAM.BIN",R
이렇게 저장한 후 부팅하게 되면 다음과 같은 화면이 나오게 됩니다.
이 코드는 MSXPen(https://msxpen.com/)에서 직접 실습해 보실 수 있습니다. 사이트 자체에 어셈블러가 내장되어 있으므로 그냥 Basic 탭과 Asm 탭에 저 코드를 넣은 후 Run 버튼을 눌러 실행하시면 결과를 알 수 있습니다.