MiniMemoryTester/src/mt.s

703 lines
14 KiB
ArmAsm
Raw Normal View History

****************************************
2015-02-24 21:05:03 +00:00
* MemoryTester *
* *
* Dagen Brock <dagenbrock@gmail.com> *
2015-02-24 21:05:03 +00:00
* 2015-02-23 *
****************************************
org $2000 ; start at $2000 (all ProDOS8 system files)
typ $ff ; set P8 type ($ff = "SYS") for output file
2015-02-24 21:05:03 +00:00
dsk mtsystem ; tell compiler what name for output file
put applerom
MLI equ $bf00
2015-03-04 20:21:36 +00:00
Init
2015-09-25 20:31:13 +00:00
sei ; disable interrupts
2015-03-04 20:21:36 +00:00
LDA #$A0 ;USE A BLANK SPACE TO
JSR $C300 ;TURN ON THE VIDEO FIRMWARE
2015-03-04 20:21:36 +00:00
lda $C034 ; save border color
sta BorderColor
2015-03-11 04:56:30 +00:00
lda #MainMenuDefs
ldx #>MainMenuDefs
jsr Menu_InitMenu
2015-03-04 20:21:36 +00:00
Main
2015-03-11 04:56:30 +00:00
:menuLoop jsr DrawMenuBackground
jsr DrawConsole
jsr DrawRomMessage
2015-03-04 20:21:36 +00:00
:menuNoDrawLoop jsr Menu_UndrawSelected
2015-03-02 15:01:02 +00:00
jsr Menu_DrawSelected
2015-02-24 21:05:03 +00:00
jsr WaitKey
2015-03-02 15:01:02 +00:00
cmp #$8D ; ENTER
bne :check1
:enter jsr Menu_HandleSelection
bra :menuLoop
:check1 cmp #$8B ; UP
bne :check2
jsr Menu_PrevItem
2015-03-04 20:21:36 +00:00
bra :menuNoDrawLoop
2015-03-02 15:01:02 +00:00
:check2 cmp #$8A ; DOWN
bne :noKey
jsr Menu_NextItem
2015-03-04 20:21:36 +00:00
bra :menuNoDrawLoop
2015-03-02 15:01:02 +00:00
:noKey bra :menuLoop
* LOOOOOOOOOP ^^^^^^
2015-09-25 20:31:13 +00:00
ColorizeMenu
:loop
lda #$07
jsr WaitSCB
lda #$c0 ; green
sta $c022
lda #$09
jsr WaitSCB
lda #$d0 ; yello
sta $c022
lda #$0A
jsr WaitSCB
lda #$90 ; orange
sta $c022
lda #$0B
jsr WaitSCB
lda #$10 ; red
sta $c022
lda #$0C
jsr WaitSCB
lda #$30 ; purple
sta $c022
lda #$0D
jsr WaitSCB
lda #$60 ; bblue
sta $c022
lda #$0E
jsr WaitSCB
lda #$f0 ; white
sta $c022
bra :loop
rts
WaitSCB
sta :val+1
ldx #2 ; to check twice
:waitloop lda $c02f
asl
lda $c02e
rol
:val cmp #$00
bne :waitloop
dex
bne :waitloop
; the problem is we can get the LAST
; horizcnt even/odd right as it changes
; and start early or something?
rts
MAXSCB db 0
2015-03-02 15:01:02 +00:00
2015-03-11 04:56:30 +00:00
DrawMenuBackground jsr HOME
lda #MainMenuStrs
ldy #>MainMenuStrs
ldx #00 ; horiz pos
jsr PrintStringsX
lda #MainMenuDefs
ldy #>MainMenuDefs
jsr Menu_DrawOptions
rts
DrawConsole
ldx #30
ldy #12
lda #8
jsr PrintConsole
rts
DrawRomMessage LOG #Mesg_Rom
jsr WinConsole
lda GSROM
jsr PRBYTE
lda #$8D ; scroll it up a bit
jsr COUT
jsr COUT
jsr COUT
jsr COUT
jsr COUT
jsr COUT
jsr WinFull
rts
LOG MAC
lda #]1
ldy #>]1
jsr ConsoleLog
<<<
* Write out to console window
ConsoleLog pha
phy
jsr WinConsole
lda #0 ;settings to bottom-left of window
sta $24
lda #20
sta $25
jsr VTAB
lda #$8D ;pre-fix CR
jsr COUT
ply
pla
jsr PrintString
jsr WinFull
rts
* Set console windowing
WinConsole lda #32
sta $20 ;left edge
lda #43
sta $21 ;width
lda #13
sta $22 ;top edge
lda #21
sta $23 ;bottom edge
rts
* Restore full screen windowing
WinFull stz $20
stz $22
lda #80
sta $21
lda #24
sta $23
rts
2015-03-02 15:01:02 +00:00
2015-03-02 05:09:20 +00:00
Quit jsr MLI ; first actual command, call ProDOS vector
dfb $65 ; with "quit" request ($65)
da QuitParm
bcs Error
brk $00 ; shouldn't ever here!
QuitParm dfb 4 ; number of parameters
dfb 0 ; standard quit type
da $0000 ; not needed when using standard quit
dfb 0 ; not used
da $0000 ; not used
Error brk $00 ; shouldn't be here either
2015-02-26 16:04:10 +00:00
2015-02-24 21:05:03 +00:00
2015-03-11 04:56:30 +00:00
BeginTest LOG Mesg_Starting
2015-03-11 18:28:45 +00:00
stz _errorCounter
2015-03-11 04:56:30 +00:00
stz _testIteration
2015-03-03 00:27:37 +00:00
stz _testIteration+1
2015-03-11 04:56:30 +00:00
ldx #36
ldy #04
2015-03-04 20:21:36 +00:00
lda #5
jsr PrintBox30
2015-03-11 04:56:30 +00:00
BeginTestPass PRINTXY #38;#05;Mesg_TestPass
2015-03-04 20:21:36 +00:00
inc _testIteration
bne :noroll
inc _testIteration+1
:noroll lda _testIteration+1
2015-03-11 04:56:30 +00:00
ldx _testIteration
jsr PRNTAX
PRINTXY #38;#7;Mesg_Writing
2015-03-03 00:27:37 +00:00
clc ; WRITE START
xce
rep $10 ; long x, short a
lda StartBank
sta CurBank
ldy #0 ; update interval counter
:bankloop lda CurBank
sta :bankstore+3
ldx StartAddr
lda TestValue
:bankstore stal $000000,x
cpx EndAddr
beq :donebank
inx
iny
cpy #UpdateScanInterval
bcc :bankstore
jsr PrintTestCurrent
2015-03-11 18:28:45 +00:00
bcc :noquit1
jmp :escpressed
:noquit1 ldy #0
2015-03-03 00:27:37 +00:00
bra :bankstore
:donebank
ldy #0 ; because i'm anal.. this makes counter align
inc CurBank
lda EndBank
cmp CurBank
bcs :bankloop
2015-03-04 20:21:36 +00:00
dec CurBank ; so many bad hacks
2015-03-03 00:27:37 +00:00
jsr PrintTestCurrent ; print final score ;)
2015-03-11 18:28:45 +00:00
bcc :noquit2
jmp :escpressed
:noquit2 sep $10
2015-03-03 00:27:37 +00:00
sec
xce ; WRITE END
2015-03-04 20:21:36 +00:00
jsr Pauser ; PAUSE
2015-03-11 04:56:30 +00:00
PRINTXY #38;#7;Mesg_Reading ; READ PREP
2015-03-04 20:21:36 +00:00
clc ; READ START
xce
rep $10 ; long x, short a
lda StartBank
sta CurBank
ldy #0 ; update interval counter
:bankrloop lda CurBank
sta :bankread+3
ldx StartAddr
:bankread ldal $000000,x
cmp TestValue
beq :testpass
phx
sta _stash ; = read value
lda TestValue
sta _stash+1 ; = expected value
stx _stash+2
jsr PrintTestError ; addr in X
plx
:testpass cpx EndAddr
beq :donerbank
inx
iny
cpy #UpdateScanInterval
bcc :bankread
jsr PrintTestCurrent
ldy #0
bra :bankread
:donerbank
ldy #0 ; because i'm anal.. this makes counter align
inc CurBank
lda EndBank
cmp CurBank
bcs :bankrloop
dec CurBank ; so many bad hacks
jsr PrintTestCurrent ; print final score ;)
sep $10
sec
xce ; WRITE END
jsr Pauser ; PAUSE
lda BorderColor
sta $C034
2015-03-07 04:46:12 +00:00
jmp BeginTestPass
2015-03-11 18:28:45 +00:00
:escpressed sep $10
sec
xce
2015-03-03 00:27:37 +00:00
rts
2015-03-04 20:21:36 +00:00
2015-03-03 00:27:37 +00:00
_testIteration ds 8
2015-03-11 18:28:45 +00:00
_errorCounter ds 8
UpdateScanInterval equ #$1000
2015-03-11 04:56:30 +00:00
Mesg_Rom asc "Apple IIgs ROM ",00
Mesg_UserManual asc "USE ARROW KEYS TO MOVE - USE ENTER TO SELECT/EDIT",00
2015-03-11 18:28:45 +00:00
Mesg_Starting asc $8D,"Starting Test",$8D,"Press P to pause, ESC to stop.",$8D,$8D,00
2015-03-04 20:21:36 +00:00
Mesg_Waiting asc "Waiting: ",00
2015-03-03 00:27:37 +00:00
Mesg_Writing asc "Writing: ",00
2015-03-04 20:21:36 +00:00
Mesg_Reading asc "Reading: ",00
2015-03-11 18:28:45 +00:00
Mesg_Errors asc " Errors: ",$00
2015-03-04 20:21:36 +00:00
Mesg_TestPass asc " Pass: ",00
Mesg_Blank asc " ",00
Mesg_BoxTop30 asc $1B,'ZLLLLLLLLLLLLLLLLLLLLLLLLLLLL_',$18,$8D,00
Mesg_BoxMid30 asc $1B,'Z'," ",'_',$18,$8D,$00
Mesg_BoxBot30 asc $1B,'Z',"____________________________",'_',$18,$8D,$00
2015-03-11 04:56:30 +00:00
*Mesg_ConsoleTop asc $1B,'ZLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL_',$18,$8D,00
Mesg_ConsoleTop asc $1B,'ZLLLLLLLLLLLLLLL',$18,' Console Log ',$1B,'LLLLLLLLLLLLLLLLL_',$18,$8D,00
Mesg_ConsoleMid asc $1B,'Z'," ",'_',$18,$8D,00
Mesg_ConsoleBot asc $1B,'Z',"_____________________________________________",'_',$18,$8D,00
2015-03-04 20:21:36 +00:00
* x, y, a=height
PrintBox30 stx _prbox_x
sta _prbox_height
jsr GoXY
lda #Mesg_BoxTop30
ldy #>Mesg_BoxTop30
jsr PrintString
:midloop ldx _prbox_x
stx $24
lda #Mesg_BoxMid30
ldy #>Mesg_BoxMid30
jsr PrintString
dec _prbox_height
bne :midloop
ldx _prbox_x
stx $24
lda #Mesg_BoxBot30
ldy #>Mesg_BoxBot30
jsr PrintString
rts
2015-03-11 04:56:30 +00:00
* x, y, a=height
PrintConsole stx _prbox_x
sta _prbox_height
jsr GoXY
lda #Mesg_ConsoleTop
ldy #>Mesg_ConsoleTop
jsr PrintString
:midloop ldx _prbox_x
stx $24
lda #Mesg_ConsoleMid
ldy #>Mesg_ConsoleMid
jsr PrintString
dec _prbox_height
bne :midloop
ldx _prbox_x
stx $24
lda #Mesg_ConsoleBot
ldy #>Mesg_ConsoleBot
jsr PrintString
rts
2015-03-04 20:21:36 +00:00
_prbox_x db 0
_prbox_height db 0
2015-03-11 04:56:30 +00:00
* called with short M, long X
2015-03-04 20:21:36 +00:00
PrintTestError
2015-03-11 04:56:30 +00:00
sec
xce
sep $30
2015-03-11 18:28:45 +00:00
inc _errorCounter
bne :noRoll
inc _errorCounter+1
:noRoll PRINTXY #38;#6;Mesg_Errors
ldx _errorCounter
lda _errorCounter+1
jsr PRNTAX
2015-03-11 04:56:30 +00:00
jsr WinConsole
2015-03-11 18:28:45 +00:00
LOG Mesg_E1
ldx _testIteration
lda _testIteration+1
jsr PRNTAX
PRINTSTRING Mesg_E2
2015-03-11 04:56:30 +00:00
2015-03-04 20:21:36 +00:00
lda CurBank
jsr PRBYTE
lda #"/"
jsr COUT
lda _stash+3
2015-03-11 04:56:30 +00:00
ldx _stash+2
jsr PRNTAX
2015-03-11 18:28:45 +00:00
lda #$8D
jsr COUT
jsr WinFull
LOG Mesg_E3
2015-03-04 20:21:36 +00:00
lda _stash+1
jsr PRBYTE
2015-03-11 18:28:45 +00:00
lda #" "
jsr COUT
lda #"%"
jsr COUT
2015-03-04 20:21:36 +00:00
lda _stash+1
jsr PRBIN
2015-03-11 18:28:45 +00:00
PRINTSTRING Mesg_E4
2015-03-04 20:21:36 +00:00
lda _stash
jsr PRBYTE
2015-03-11 18:28:45 +00:00
lda #" "
jsr COUT
lda #"%"
jsr COUT
2015-03-04 20:21:36 +00:00
lda _stash
jsr PRBIN
clc
xce
rep $10
rts
2015-03-11 18:28:45 +00:00
Mesg_E1 asc "Bad Read - Pass ",00
Mesg_E2 asc " Location: ",00
Mesg_E3 asc "Wrote: $",00
Mesg_E4 asc " ",$1B,'SU',$18," Read: $",00
Mesg_Arrow asc $1B,'SU',$18,00
*Mesg_Error0 asc "Error: Bad Read Pass 0000 Location: 00/1234"
*Mesg_Error0 asc "Wrote: $00 %12345678 Read: $00 %12345678"
2015-03-03 00:27:37 +00:00
mx %01
PrintTestCurrent pha
phy
stx _stash ; save real X
sec
xce
2015-03-11 04:56:30 +00:00
GOXY #48;#7
2015-03-03 00:27:37 +00:00
lda CurBank
2015-03-04 20:21:36 +00:00
sta :corruptme+3
2015-03-03 00:27:37 +00:00
jsr PRBYTE
lda #"/"
jsr COUT
lda _stash+1
2015-03-04 20:21:36 +00:00
sta :corruptme+2
2015-03-03 00:27:37 +00:00
jsr PRBYTE
lda _stash
2015-03-04 20:21:36 +00:00
sta :corruptme+1
2015-03-03 00:27:37 +00:00
jsr PRBYTE
2015-03-04 20:21:36 +00:00
* CORRUPTOR!
:kloop lda KEY
cmp #"c" ; REMOVE DEBUG
2015-03-11 18:28:45 +00:00
beq :corruptor
cmp #"C"
beq :corruptor
bra :nocorrupt
:corruptor jsr GetRandTrash
:corruptme stal $060000 ; addr gets overwritten
2015-03-04 20:21:36 +00:00
inc $c034
sta STROBE ; we only clear if 'c' is hit
inc _stash ; \
beq :noroll ; |- INX
inc _stash+1 ; /
:nocorrupt cmp #"p" ; check lower p
2015-03-07 04:46:12 +00:00
* @TODO make tolower for the comparisons
2015-03-11 18:28:45 +00:00
beq :pause
cmp #"P"
beq :pause
bra :nopause
:pause sta STROBE
jsr WaitKey
2015-03-07 04:46:12 +00:00
:nopause
2015-03-11 18:28:45 +00:00
cmp #$9B
bne :noquit
clc
xce
rep $10
ldx _stash
ply
pla
sec
rts
:noquit
2015-03-04 20:21:36 +00:00
:noroll
2015-03-03 00:27:37 +00:00
clc
xce
rep $10
ldx _stash
ply
pla
2015-03-11 18:28:45 +00:00
clc
2015-03-03 00:27:37 +00:00
rts
2015-03-11 18:28:45 +00:00
2015-03-03 00:27:37 +00:00
mx %11
2015-03-04 20:21:36 +00:00
PRBIN pha
phx
ldx #8
:loop asl
pha
bcc :zero
:one lda #"1"
jsr COUT
bra :ok
:zero lda #"0"
jsr COUT
:ok pla
dex
bne :loop
plx
pla
rts
2015-03-03 00:27:37 +00:00
2015-03-04 20:21:36 +00:00
Pauser
2015-03-11 04:56:30 +00:00
PRINTXY #38;#8;Mesg_Waiting
2015-03-04 20:21:36 +00:00
ldy #60
ldx TestDelay
2015-03-11 18:28:45 +00:00
beq :donepause
2015-03-04 20:21:36 +00:00
jsr PrintTimerVal ; inaugural print before waiting 1 sec
:secondloop
:wait ldal $e1c019
bpl :wait
:wait2 ldal $e1c019
bmi :wait2
dey
bne :secondloop
dex
beq :donepause
jsr PrintTimerVal
ldy #60
bra :secondloop
:donepause
2015-03-11 04:56:30 +00:00
PRINTXY #38;#8;Mesg_Blank
2015-03-04 20:21:36 +00:00
rts
PrintTimerVal
phx
phy
txa
2015-03-11 04:56:30 +00:00
GOXY #48;#8
2015-03-04 20:21:36 +00:00
ply
plx
txa
jsr PRBYTE
rts
2015-02-24 21:05:03 +00:00
2015-03-04 20:21:36 +00:00
**************************************************
* Awesome PRNG thx to White Flame (aka David Holz)
**************************************************
GetRandTrash ; USE ONLY WITH CORRUPTOR
lda _randomTrashByte
beq :doEor
asl
bcc :noEor
:doEor eor #$1d
:noEor sta _randomTrashByte
rts
_randomTrashByte db 0
2015-02-24 21:05:03 +00:00
2015-03-01 19:44:56 +00:00
* DEFAULTS
2015-03-03 00:27:37 +00:00
StartBank db #$06
2015-03-04 20:21:36 +00:00
EndBank db #$1F
2015-03-03 00:27:37 +00:00
CurBank db #0
2015-03-01 19:44:56 +00:00
StartAddr dw #$0000
EndAddr dw #$FFFF
TestValue dw #$00
2015-03-11 18:28:45 +00:00
TestDelay dw #$01
2015-03-01 19:44:56 +00:00
2015-03-02 16:42:07 +00:00
2015-03-02 15:01:02 +00:00
2015-03-03 00:27:37 +00:00
2015-03-02 15:01:02 +00:00
2015-03-02 05:09:20 +00:00
2015-03-01 19:44:56 +00:00
MainMenuDefs
:StartBank hex 13,06 ; x,y
db MenuOption_Hex ; 1=hex input
db 01 ; memory size (bytes)
2015-03-01 21:52:40 +00:00
da StartBank ; variable storage
:EndBank hex 13,07 ; x,y
db MenuOption_Hex ; 1=hex input
db 01 ; memory size (bytes)
2015-03-01 21:52:40 +00:00
da EndBank ; variable storage
:StartAddr hex 13,09 ; x,y
db MenuOption_Hex ; 1=hex input
db 02 ; memory size (bytes)
2015-03-01 21:52:40 +00:00
da StartAddr ; variable storage
:EndAddr hex 13,0A ; x,y
db MenuOption_Hex ; 1=hex input
db 02 ; memory size (bytes)
2015-03-01 21:52:40 +00:00
da EndAddr ; variable storage
2015-09-25 20:31:13 +00:00
:TestSize hex 13,0C ; x,y
db MenuOption_List ; 3=list input
db 08 ; max len size (bytes), 3=option list
da TestSize ; params definition & storage
:TestType hex 13,0D ; x,y
db MenuOption_List ; 3=list input
db 08 ; max len size (bytes), 3=option list
da TestType ; params definition & storage
2015-09-25 20:31:13 +00:00
:TestValue hex 13,0E ; x,y
db MenuOption_Hex ; 1=hex input
db 01 ; memory size (bytes)
2015-03-03 00:27:37 +00:00
da TestValue ; variable storage
2015-09-25 20:31:13 +00:00
:TestDelay hex 13,0F ; x,y
db MenuOption_Hex ; 1=hex input
db 01 ; memory size (bytes)
2015-03-03 00:27:37 +00:00
da TestDelay ; variable storage
2015-09-25 20:31:13 +00:00
:BeginTest hex 0B,14 ; x,y
db MenuOption_Action ; 2=action
2015-03-01 19:44:56 +00:00
db MenuStr_BeginTestL ; menu string length
da MenuStr_BeginTest ; string storage
2015-03-03 00:27:37 +00:00
MainMenuLen equ *-MainMenuDefs
2015-03-02 15:01:02 +00:00
MainMenuItems equ MainMenuLen/6
2015-03-01 21:52:40 +00:00
MainMenuEnd dw 0000
2015-03-03 00:27:37 +00:00
Menu_ItemSelected db 0
2015-02-24 21:05:03 +00:00
2015-03-10 04:08:22 +00:00
* 00 - Byte : Selected Value
* 01 - Byte : Number of values
* 02... - Words : Table of Addresses of possible values
TestType db 00 ; actual CONST val
2015-03-10 04:08:22 +00:00
db 06 ; number of possible values
da _TestType_0,_TestType_1,_TestType_2,_TestType_3,_TestType_4,_TestType_5,00,00
_TestType_0 asc "BYTE",$00
_TestType_1 asc "WORD",$00
_TestType_2 asc "RANDBYTE",$00
_TestType_3 asc "RANDWORD",$00
_TestType_4 asc "CHECKERS",$00
_TestType_5 asc "BANK",$00
2015-03-02 05:09:20 +00:00
2015-09-25 20:31:13 +00:00
TestSize db 00
db 02
da _TestSize_0,_TestSize_1
_TestSize_0 asc "BYTE",$00
_TestSize_1 asc "WORD",$00
2015-03-01 19:44:56 +00:00
MenuStr_JSR da BeginTest ; MUST PRECEDE MENU STRING! Yes, it's magicly inferred. (-2)
2015-03-02 15:01:02 +00:00
MenuStr_BeginTest asc "BEGIN TEST"
2015-03-01 19:44:56 +00:00
MenuStr_BeginTestL equ #*-MenuStr_BeginTest
2015-03-02 15:01:02 +00:00
MenuStr_BeginTestE db 00
2015-03-04 20:21:36 +00:00
MainMenuStrs
2015-09-25 20:31:13 +00:00
asc " ______________________________________________________________________________",$8D,$00
asc $1B,'ZG', " ",'@'," ",'GGGGGGGGGGGGGGGGGG\'," Mini Memory Tester v0.2 ",'\GGGGGGGGGGG\'," UltimateMicro ",'\G_',$18,$00
asc $1B,'ZLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL_',$18,00
asc $1B,'Z',"",'Z \GGG_',"Test Settings",'ZGGG\ _'," ",'_',$18,00
asc $1B,'Z'," ",'Z'," ",'_'," ",'_',$18,$8D,00
2015-03-11 04:56:30 +00:00
asc " ",$1B,'Z'," ",'Z'," Start BANK: ",'_'," ",'_',$18,$8D,00
asc " ",$1B,'Z'," ",'Z'," End BANK: ",'_'," ",'_',$18,$8D,00
asc " ",$1B,'Z'," ",'Z'," ",'_'," ",'_',$18,$8D,00
asc " ",$1B,'Z'," ",'Z'," Start ADDR: ",'_'," ",'_',$18,$8D,00
asc " ",$1B,'Z'," ",'Z'," End ADDR: ",'_'," ",'_',$18,$8D,00
asc " ",$1B,'Z'," ",'Z'," ",'_'," ",'_',$18,$8D,00
2015-09-25 20:31:13 +00:00
asc " ",$1B,'Z'," ",'Z'," Test Size: ",'_'," ",'_',$18,$8D,00
2015-03-11 04:56:30 +00:00
asc " ",$1B,'Z'," ",'Z'," Test Type: ",'_'," ",'_',$18,$8D,00
asc " ",$1B,'Z'," ",'Z'," Test Byte: ",'_'," ",'_',$18,$8D,00
asc " ",$1B,'Z'," ",'Z'," Test Delay: ",'_'," ",'_',$18,$8D,00
asc " ",$1B,'Z'," ",'Z'," ",'_'," ",'_',$18,$8D,00
asc " ",$1B,'Z'," ",'Z'," ",'_'," ",'_',$18,$8D,00
asc " ",$1B,'Z'," ",'Z'," ",'_'," ",'_',$18,$8D,00
asc " ",$1B,'Z'," ",'Z'," ",'_'," ",'_',$18,$8D,00
asc " ",$1B,'Z'," ",'Z'," ",'_'," ",'_',$18,$8D,00
asc " ",$1B,'Z'," ",'Z',"_________________________",'_'," ",'_',$18,$8D,00
2015-03-04 20:21:36 +00:00
asc " ",$1B,'Z',"____________________________________________________________________________",'_',$18,$8D,00
* asc " ABCDEFGHIZKLMNOPQRSTUVWXYZ ",$8D,$00
* asc $1B,' ABCDEFGHIZKLMNOPQRSTUVWXYZ ',$1B,$8D,$00
2015-03-01 19:44:56 +00:00
2015-02-24 21:05:03 +00:00
hex 00,00
WaitKey
2015-09-25 20:31:13 +00:00
:kloop
;jsr ColorizeMenu
lda KEY
2015-02-24 21:05:03 +00:00
bpl :kloop
sta STROBE
2015-03-02 05:09:20 +00:00
cmp #"b" ; REMOVE DEBUG
bne :nobreak
brk $75
:nobreak
2015-02-24 21:05:03 +00:00
rts
2015-03-01 19:44:56 +00:00
put strings.s
2015-03-11 04:56:30 +00:00
put menu.s
2015-03-04 20:21:36 +00:00
BorderColor db 0
2015-03-02 15:01:02 +00:00
ds \
_stash ds 255
ds \
2015-02-24 21:05:03 +00:00