66 lines
1.3 KiB
NASM
66 lines
1.3 KiB
NASM
; 8K of onboard RAM
|
|
.equ RAMSTART 0xc000
|
|
; Memory register at the end of RAM. Must not overwrite
|
|
.equ RAMEND 0xfdd0
|
|
|
|
jp init
|
|
|
|
.fill 0x66-$
|
|
retn
|
|
|
|
.equ PAD_RAMSTART RAMSTART
|
|
#include "sms/pad.asm"
|
|
|
|
.equ VDP_RAMSTART PAD_RAMEND
|
|
#include "sms/vdp.asm"
|
|
|
|
init:
|
|
di
|
|
im 1
|
|
|
|
ld sp, RAMEND
|
|
|
|
call vdpInit
|
|
|
|
|
|
mainloop:
|
|
; What we do here is simple. We go though all bits of port A controller
|
|
; increasing B each time. As soon as we get a hit, we display that
|
|
; letter. Pressed buttons go low.
|
|
call padStatusA
|
|
jr z, mainloop ; unchanged since last poll
|
|
ld b, 'A'
|
|
bit 5, a ; Port A Button C pressed
|
|
jr z, updateLetter
|
|
inc b ; b
|
|
bit 4, a ; Port A Button B pressed
|
|
jr z, updateLetter
|
|
inc b ; c
|
|
bit 3, a ; Port A Right pressed
|
|
jr z, updateLetter
|
|
inc b ; d
|
|
bit 2, a ; Port A Left pressed
|
|
jr z, updateLetter
|
|
inc b ; e
|
|
bit 1, a ; Port A Down pressed
|
|
jr z, updateLetter
|
|
inc b ; f
|
|
bit 0, a ; Port A Up pressed
|
|
jr z, updateLetter
|
|
inc b ; g
|
|
bit 6, a ; Port A Button A pressed
|
|
jr z, updateLetter
|
|
inc b ; h
|
|
bit 7, a ; Port A Start pressed
|
|
jr z, updateLetter ; when start is pressed, print all letters
|
|
jr mainloop
|
|
|
|
; Prints letter in B
|
|
updateLetter:
|
|
ld a, b
|
|
call vdpPutC
|
|
jr mainloop
|
|
|
|
.fill 0x7ff0-$
|
|
.db "TMR SEGA", 0x00, 0x00, 0xfb, 0x68, 0x00, 0x00, 0x00, 0x4c
|