LINEARTESTDBG1=0 LINEARTESTDBG2=0 LINEARTESTDBG=0 dolineartest: lda #0 sta testbankhi lda #firstrandombank sta testbanklo ldx #0 - txa pha ldx testbankhi ; upper 3 bits of the bank number lda testbanklo ; lower 8 bits of the bank number jsr testbanklinear !if LINEARTESTDBG1 = 1 { jsr testbanklinearfail } else { bcc + jsr testbanklinearfail + } asl testbanklo ; bank lo * 2 ldx testbankhi ; upper 3 bits of the bank number lda testbanklo ; lower 8 bits of the bank number jsr testbanklinear !if LINEARTESTDBG2 = 1 { jsr testbanklinearfail } else { bcc + jsr testbanklinearfail + } sec rol testbanklo inc testbankhi pla tax lda testbankhi cmp #>numbanks ; inx ; cpx #$10 bne - inc $0402 ;----------------------------------------------------------------------- ; second loop, test all banks 0,1,2,.... jsr initsprites lda #0 sta testbankhi lda #firstrandombank sta testbanklo - ldx testbankhi ; upper 3 bits of the bank number lda testbanklo ; lower 8 bits of the bank number jsr testbanklinear !if LINEARTESTDBG = 1 { jsr testbanklinearfail } else { bcc + jsr testbanklinearfail + } inc testbanklo bne + inc testbankhi + +movesprites lda testbankhi cmp #>numbanks bne - rts dolineartestupper: jsr initsprites ldx #0 -- txa pha lda #0 sta testbankhi lda #$f0 sta testbanklo - ldx testbankhi ; upper 3 bits of the bank number lda testbanklo ; lower 8 bits of the bank number jsr testbanklinear !if LINEARTESTDBG = 1 { jsr testbanklinearfail } else { bcc + jsr testbanklinearfail + } inc testbanklo bne + inc testbankhi + +movesprites lda testbankhi cmp #>numbanks bne - pla tax inx bne -- rts ;------------------------------------------------------------------------------- testbanklinear: stx bankhi sta banklo sta $de00,x lda statusbits eor #STATUSBIT_BANK_CHANGED sta statusbits sta UPDATA lda #>$8000 sta ptr1+1 lda #<$8000 sta ptr1+0 lda #>onetimepad sta ptr2+1 lda #($0400 + (23 * 40) + 11) sta scrptr+1 lda #<($0400 + (23 * 40) + 11) sta scrptr lda bankhi jsr printhex lda banklo jsr printhex jsr printright lda ptr1+1 jsr printhex lda ptr1 jsr printhex lda #>($0400 + (23 * 40) + 26) sta scrptr+1 lda #<($0400 + (23 * 40) + 26) sta scrptr lda gotvalue jsr printhex jsr printright lda gotvalue ldy #0 eor (ptr2),y jsr printhex ; expected values lda #>($0400 + (24 * 40) + 26) sta scrptr+1 lda #<($0400 + (24 * 40) + 26) sta scrptr lda ptr2 and #1 eor #1 tax lda banklo,x ; odd: banklo, even: bankhi ldy #0 eor (ptr2),y jsr printhex ; lda banklo ; and #1 ; eor #1 ; tax jsr printright lda banklo,x ; odd: banklo, even: bankhi ; ldy #0 ; eor (ptr2),y jsr printhex lda #0 sta $d015 lda #2 sta $d020 jsr waitforspace lda #$ff sta $d015 lda #0 sta $d020 rts testbanklineartxt: ;0123456789012345678901234567890123456789 !scr "read addr: ....:.... got: ..(..) linear " !scr "expected: val: ..(..) failed "