diff --git a/src/mt.s b/src/mt.s index 1fc22d9..0a36d4c 100644 --- a/src/mt.s +++ b/src/mt.s @@ -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 diff --git a/src/strings.s b/src/strings.s new file mode 100644 index 0000000..58e43ee --- /dev/null +++ b/src/strings.s @@ -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 +