hello.s
.segment "HEADER"
.byte $01, $08, $01, $00, $00, $00, $00, $00 ; Apple DOS binary header
.segment "CODE"
.org $0800 ; Load address in memory
LDX #$00
loop: LDA message,X ; Load character from message
BEQ done ; If null terminator, end program
JSR $FDED ; Call CHROUT to print character
INX ; Move to next character
BNE loop ; Loop until null terminator
done: RTS
message:
.asciiz "HELLO, APPLE II!" ; Null-terminated string
.segment "TRAILER"
.byte $00, $00
Using ca65 6502 compiler
apple2.cfg
MEMORY {
HEADER: start = $0800, size = $0008, type = ro;
RAM: start = $0808, size = $F7F8, type = rw;
TRAILER: start = $FFF8, size = $0008, type = ro;
}
SEGMENTS {
HEADER: load = HEADER, type = ro;
CODE: load = RAM, type = rw;
TRAILER: load = TRAILER, type = ro;
}
ca65 hello.s -o hello.o
ld65 -C apple2.cfg -o hello.bin hello.o
Using Apple Commander
java -XstartOnFirstThread -jar AppleCommander.jar
With Virtual ][ Apple 2 emulator.