제목:

MSX 어셈블리어로 Hello, world! 바이너리 만들기 예제

날짜: Posted on

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 버튼을 눌러 실행하시면 결과를 알 수 있습니다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다