cleanup pre-menu

This commit is contained in:
Dagen Brock 2015-03-01 13:44:56 -06:00
parent 64992ae08d
commit 0fa69cf098
2 changed files with 179 additions and 58 deletions

190
src/mt.s
View File

@ -34,20 +34,23 @@ QuitParm dfb 4 ; number of parameters
Error brk $00 ; shouldn't be here either
GetStartBank
lda #13
sta $24
lda #10
sta $25
jsr VTAB
lda #"$"
sta $33
ldx #13
ldy #10
jsr GoXY
lda #2
ldx #>StartBank
ldy #StartBank
jsr GetHex
jsr RDKEY
jsr PRBYTE
brk $99
lda StartBank
rts
* Pass desired length in A
GetHex sta _gethex_maxlen
stx _gethex_resultptr
sty _gethex_resultptr+1
stz _gethex_current
:input jsr RDKEY
cmp #"9"+1
bcs :notNum ;bge > 9
@ -55,7 +58,7 @@ GetHex sta _gethex_maxlen
bcc :badChar ;
sec
sbc #"0"
bra :gotHex
bra :storeInput
:notNum cmp #"a"
bcc :notLower
sec
@ -64,73 +67,147 @@ GetHex sta _gethex_maxlen
bcc :badChar
cmp #"F"+1
bcs :badChar
:gotHex jsr PRHEX
:gotHex
sec
sbc #"A"-10
:storeInput
jsr PRHEX
ldy _gethex_current
sta _gethex_buffer,y
iny
cpy #_gethex_internalmax
bge :internalmax
cpy _gethex_maxlen
bge :passedmax
sty _gethex_current
bra :input
:internalmax
:passedmax
lda _gethex_resultptr
sta $0
lda _gethex_resultptr+1
sta $1
ldx #0
ldy #0
:copyBuffer lda _gethex_buffer,x
asl ; move to upper nibble
asl
asl
asl
sta ($0),y ; store
inx
lda _gethex_buffer,x
ora ($0),y
sta ($0),y
iny
inx
cpx _gethex_maxlen
bcc :copyBuffer
rts
:badChar bra :input
_gethex_internalmax equ 8
_gethex_resultptr da 0000
_gethex_maxlen db 1
_gethex_current db 0
_gethex_buffer ds _gethex_internalmax
PrHexChar jsr HexCharForByte
GetThing lda #13
sta $24
lda #10
sta $25
jsr VTAB
HexCharForByte
cmp #9
bcs :alpha
:number clc
adc #"0"
rts
:alpha clc
adc #"A"
rts
GetThing ldx #13
ldy #10
jsr GoXY
lda #"$"
sta $33
jsr GETLN
rts
DrawMenu jsr HOME
lda #MenuStrs
ldy #>MenuStrs
lda #MainMenuStrs
ldy #>MainMenuStrs
ldx #05 ; horiz pos
jsr PrintStringsX
lda #MainMenuDefs
ldy #>MainMenuDefs
jsr DrawMenuOptions
rts
; lda #MenuStr1
; ldy #>MenuStr1
; jsr PrintString
BeginTest brk $ff
PrintStringsX stx _printstringsx_horiz ; IGNORED! 4 NOW!
* x=x y=y a=len
MenuHighlight
sta $0
* DEFAULTS
StartBank db #$02
EndBank db #$7F
StartAddr dw #$0000
EndAddr dw #$FFFF
TestValue dw #$00
DrawMenuOptions sta $0
sty $1
:loop lda $0 ; slower, but allows API reuse
ldy $1
jsr PrintString ; y is last val
stz _menuOptionPtr
:drawOption
ldy _menuOptionPtr
lda ($0),y
tax
lda ($0),y
tay
jsr GoXY
ldy _menuOptionPtr
iny
iny
iny
lda ($0),y
beq :done
tya ; not done so add strlen to source ptr
clc
adc $0
sta $0
bcc :nocarry
inc $1
:nocarry bra :loop
:done rts
beq :charItem
cmp #1
beq :hexItem
cmp #2
beq :jsrItem
:charItem
:hexItem
:jsrItem
rts
_printstringsx_horiz db 00
_menuOptionPtr dw 00
MainMenuDefs
Menu_StartBank hex 10,10 ; x,y
hex 01,01 ; memory size (bytes), 0=char/1=hex input
da StartBank ; variable storage
* PrintString (A=Low Byte, Y=High Byte)
PrintString sta $0
sty $1
Menu_EndBank hex 10,11 ; x,y
hex 01,01 ; memory size (bytes), 0=char/1=hex input
da EndBank ; variable storage
Menu_StartAddr hex 10,13 ; x,y
hex 02,01 ; memory size (bytes), 0=char/1=hex input
da StartAddr ; variable storage
Menu_EndAddr hex 10,14 ; x,y
hex 02,01 ; memory size (bytes), 0=char/1=hex input
da EndAddr ; variable storage
Menu_BeginTest hex 12,15 ; x,y
db MenuStr_BeginTestL ; menu string length
db 02 ; memory size (bytes), 2=Menu JSR
da MenuStr_BeginTest ; string storage
ldy #0
:loop lda ($0),y
beq :done
jsr COUT
iny
bra :loop
:done rts
MenuStrs
MenuStr_JSR da BeginTest ; MUST PRECEDE MENU STRING! Yes, it's magicly inferred. (-2)
MenuStr_BeginTest asc "BEGIN TEST"
MenuStr_BeginTestL equ #*-MenuStr_BeginTest
MainMenuStrs
asc " *********************** ",$8D,$00
asc " ** **",$8D,$00
asc " ** Mini Memory Tester **",$8D,$00
@ -143,8 +220,10 @@ MenuStrs
asc " End BANK: ",$8D,$8D,$00
asc " Start ADDR: ",$8D,$00
asc " End ADDR: ",$8D,$8D,$8D,$00
asc " Test Byte: (Leave empty = random)",$8D,00
asc " Test Byte: (Leave empty = random)",$8D,$8D,$8D,$00
asc " USE ARROW KEYS TO MOVE",8D,$00
asc " USE ENTER TO SELECT/EDIT",$8D,$00
hex 00,00
@ -156,10 +235,5 @@ WaitKey
sta STROBE
rts
* DEFAULTS
StartBank db #$02
EndBank db #$7F
StartAddr dw #$0000
EndAddr dw #$FFFF
TestValue dw #$00
put strings.s

47
src/strings.s Normal file
View File

@ -0,0 +1,47 @@
* GoXY
* PrintStringsX
* PrintString
GoXY stx $24
sty $25
jsr VTAB
rts
PrintStringsX stx _printstringsx_horiz ; IGNORED! 4 NOW!
sta $0
sty $1
:loop lda $0 ; slower, but allows API reuse
ldy $1
jsr PrintString ; y is last val
iny
lda ($0),y
beq :done
tya ; not done so add strlen to source ptr
clc
adc $0
sta $0
bcc :nocarry
inc $1
:nocarry bra :loop
:done rts
_printstringsx_horiz db 00
* PrintString (A=Low Byte, Y=High Byte)
PrintString sta $0
sty $1
ldy #0
:loop lda ($0),y
beq :done
jsr COUT
iny
bra :loop
:done rts