.import serial_setup, serial_print_char, serial_recv_char .import copy_data ; --------------- ; ZP ; --------------- .zeropage ; Zero-page variables ($0000 - $00ff) ; --------------- ; BSS ; --------------- .bss ; RAM variables ($0200 - $7fff) ; --------------- ; DATA ; --------------- .data ; Initialized RAM variables ($0200 - $7fff) ; --------------- ; CODE ; --------------- .code ; Actual program code ($c000 - $fff9) reset: ; Program starts here ; System setup sei ; disable interrupts while setting things up cld ; clear BCD mode flag (undefined on NMOS 6502, auto cleared on 65C02) ldx #$ff txs ; Reset stack pointer jsr copy_data ; copy data variables from ROM to RAM jsr serial_setup ; setup serial interface (65C51N). 19200 baud set as default print_hello_world: ldx #0 @loop: lda str_hello_world,x ; get char beq @end ; IF char is 0, done jsr serial_print_char ; send char to console inx ; increment x (next char) jmp @loop @end: jmp @end irq_handler: ; IRQ Handler rti ; Do nothing nmi_handler: ; NMI handler rti ; Do nothing ; --------------- ; RODATA ; --------------- .rodata ; Constants str_hello_world: .asciiz "Hello, World!" ; --------------- ; VECTORS ; --------------- .segment "VECTORS" ; NMI, RESET and IRQ vectors .word nmi_handler .word reset .word irq_handler