ROMCODETESTDBG = 0 romcode = $8000 !macro ROMCODETEST .USERANDOM { jsr initrand jsr romcodetestinit ldx #0 ; upper 3 bits of the bank number lda #romcodebank ; lower 8 bits of the bank number sta $de00,x lda statusbits eor #STATUSBIT_BANK_CHANGED sta statusbits sta UPDATA lda #$00 sta romaddr sta romaddr+1 sta mhztoggle sta testcount sta testcount+1 sta mhzenable .romtestlp: lda romaddr and #$f8 sta cmpaddr sta .romcodejsr lda romaddr+1 and #$1f sta cmpaddr+1 ora #$80 sta .romcodejsr+1 lda cmpaddr+1 sta cmpa asl cmpaddr rol sta cmpx asl cmpaddr rol sta cmpy !if ROMCODETESTDBG = 1 { lda romaddr+1 cmp #$1f bne + inc cmpa + } lda statusbits eor #STATUSBIT_READ_START sta statusbits sta UPDATA .romcodejsr=*+1 jsr romcode cmp cmpa beq + jsr romcfail jmp .romcfailcontinue + cpx cmpx beq + jsr romcfail jmp .romcfailcontinue + cpy cmpy beq + jsr romcfail jmp .romcfailcontinue + .romcfailcontinue: inc $d020 !if .USERANDOM = 1 { +UPDATEPRNG16 ; lda romaddr ; clc ; adc rand ; sta romaddr ; lda romaddr+1 ; adc rand+1 ; sta romaddr+1 lda rand sta romaddr+1 lda rand+1 sta romaddr dec testcount beq + jmp .romtestlp + } else { lda romaddr clc adc #8 sta romaddr bcs + jmp .romtestlp + } ;------------------------------- end innerloop +movesprites ldx romaddr+1 inc $d800,x inx stx romaddr+1 cpx #$20 beq + jmp .romtestlp + ldx testcount+1 inc $d900,x inx stx testcount+1 beq ++ lda mhzenable beq + inc mhztoggle lda mhztoggle lsr lsr and #1 ora #%11111100 sta $d030 + jmp .romtestlp ++ lda #%11111100 sta $d030 lda #$15 sta $d018 lda #$00 sta $d015 jmp clrscr ; rts } doromcodetestrandom: !zone { +ROMCODETEST 1 } doromcodetest: !zone { +ROMCODETEST 0 } ;------------------------------------------------------------------------------ romcfail: sta gotvalue stx gotx sty goty lda statusbits ora #STATUSBIT_ERROR sta UPDATA ; 2Mhz off lda #%11111100 sta $d030 lda #0 sta $d015 lda #$15 sta $d018 lda #$02 sta $d020 jsr clrscr ldx #(6*40) - lda romtesttxt-1,x sta $0400-1,x dex bne - lda #>($0400 + (1 * 40) + 10) sta scrptr+1 lda #<($0400 + (1 * 40) + 10) sta scrptr inc romaddr+0 bne + inc romaddr+1 + lda romaddr+1 jsr printhex lda romaddr+0 jsr printhex lda #>($0400 + (3 * 40) + 10) sta scrptr+1 lda #<($0400 + (3 * 40) + 10) sta scrptr lda romaddr+0 clc adc #2 sta romaddr+0 bne + inc romaddr+1 + lda romaddr+1 jsr printhex lda romaddr+0 jsr printhex lda #>($0400 + (5 * 40) + 10) sta scrptr+1 lda #<($0400 + (5 * 40) + 10) sta scrptr lda romaddr+0 clc adc #2 sta romaddr+0 bne + inc romaddr+1 + lda romaddr+1 jsr printhex lda romaddr+0 jsr printhex lda #>($0400 + (0 * 40) + 10) sta scrptr+1 lda #<($0400 + (0 * 40) + 10) sta scrptr lda gotvalue jsr printhex lda #>($0400 + (2 * 40) + 10) sta scrptr+1 lda #<($0400 + (2 * 40) + 10) sta scrptr lda gotx asl jsr printhex lda #>($0400 + (4 * 40) + 10) sta scrptr+1 lda #<($0400 + (4 * 40) + 10) sta scrptr lda goty asl asl jsr printhex lda #>($0400 + (1 * 40) + 20) sta scrptr+1 lda #<($0400 + (1 * 40) + 20) sta scrptr lda cmpa jsr printhex lda #>($0400 + (3 * 40) + 20) sta scrptr+1 lda #<($0400 + (3 * 40) + 20) sta scrptr lda cmpx jsr printhex lda #>($0400 + (5 * 40) + 20) sta scrptr+1 lda #<($0400 + (5 * 40) + 20) sta scrptr lda cmpy jsr printhex lda #>($0400 + (0 * 40) + 20) sta scrptr+1 lda #<($0400 + (0 * 40) + 20) sta scrptr lda gotvalue jsr printhex lda #>($0400 + (2 * 40) + 20) sta scrptr+1 lda #<($0400 + (2 * 40) + 20) sta scrptr lda gotx jsr printhex lda #>($0400 + (4 * 40) + 20) sta scrptr+1 lda #<($0400 + (4 * 40) + 20) sta scrptr lda goty jsr printhex jsr waitforspace jmp romcodetestinit ;rts romtesttxt: ;0123456789012345678901234567890123456789 !scr "read addr ..xx got: .. romread" !scr "exp. addr .... .. failed" !scr "read addr ..xx got: .. " !scr "exp. addr .... .. " !scr "read addr ..xx got: .. " !scr "exp. addr .... .. " romcodetestinit: lda #1 ldx #0 - sta $0400,x sta $0500,x sta $0600,x sta $0700,x inx bne - ; screen at $0400, charset at $0000 lda #$10 sta $d018 ldx #7 lda #$a5 - sta zeropagecharset,x dex bpl - jmp initsprites