; ******** Source: suite-a.asm 1 !cpu 65816 2 3 ; 2017-12-13 J.E. Klasek j+816 AT klasek DOT at 4 5 6 7 videoram = $0400 8 colorram = $d800 9 10 ;------------------------------------------------------------------------------- 11 *=$07ff 12 07ff 0108 !word $0801 13 0801 0b08 !word bend 14 0803 0a00 !word 10 15 0805 9e !byte $9e 16 0806 3230363100 !text "2061", 0 17 080b 0000 bend: !word 0 18 ;------------------------------------------------------------------------------- 19 20 080d 78 sei 21 080e a917 lda #$17 22 0810 8d18d0 sta $d018 23 0813 a935 lda #$35 24 0815 8501 sta $01 25 0817 a97f lda #$7f 26 0819 8d0ddc sta $dc0d 27 081c 8d0ddd sta $dd0d 28 081f ad0ddc lda $dc0d 29 0822 ad0ddd lda $dd0d 30 0825 a200 ldx #0 31 - 32 0827 a920 lda #$20 33 0829 9d0004 sta videoram,x 34 082c 9d0005 sta videoram+$0100,x 35 082f 9d0006 sta videoram+$0200,x 36 0832 9d0007 sta videoram+$0300,x 37 0835 a901 lda #1 38 0837 9d00d8 sta colorram,x 39 083a 9d00d9 sta colorram+$0100,x 40 083d 9d00da sta colorram+$0200,x 41 0840 9d00db sta colorram+$0300,x 42 0843 e8 inx 43 0844 d0e1 bne - 44 45 0846 4c0010 jmp start 46 theend: 47 0849 e230 sep #$30 ; 8-bit for X/Y and A/M 48 !as 49 !rs 50 084b af100204 lda $040210 51 084f c9ff cmp #$ff 52 0851 d00d bne error 53 54 0853 a905 lda #5 55 0855 8d20d0 sta $d020 56 0858 a200 ldx #0 ; success 57 085a 8effd7 stx $d7ff 58 085d 4c5d08 jmp * 59 error 60 0860 8d0004 sta $0400 61 0863 af110204 lda $040211 ; failure map (which test failed) 62 0867 8d0104 sta $0401 63 086a a90a lda #10 64 086c 8d20d0 sta $d020 65 086f a2ff ldx #$ff ; failure 66 0871 8effd7 stx $d7ff 67 0874 4c7408 jmp * 68 69 ;------------------------------------------------------------------------------- 70 71 * = $1000 72 start: 73 ; EXPECTED FINAL RESULTS: $0210 = FF 74 ; (any other number will be the 75 ; test that failed) 76 77 ; initialize: 78 1000 a900 lda #$00 79 1002 8f100204 sta $040210 80 1006 8f110204 sta $040211 81 82 83 test00: 84 85 ; setup cpu 86 100a 18 clc 87 100b fb xce ; native mode 88 100c c230 rep #$30 ; 16-bit for X/Y and A/M 89 !al 90 !rl 91 92 ; setup registers 93 100e a90404 lda #$0404 ; Data Bank Register register 94 1011 48 pha ; akku in 16 bit 95 1012 ab plb ; pull DBR twice 96 1013 ab plb 97 1014 a08888 ldy #$8888 ; change marker 98 1017 bb tyx 99 1018 98 tya 100 101 ; setup memory 102 1019 a95555 lda #$5555 ; wrap marker 103 101c 8f878804 sta $048887 ; into bank 4, for LDX/LDY 104 1020 a97777 lda #$7777 ; no-wrap marker 105 1023 8f878805 sta $058887 ; into bank 5, for LDX/LDY 106 107 ;--------------------------------------------------------------------- 108 109 1027 9c0000 stz $0000 ; init wrap marker 110 102a a97777 lda #$7777 ; no-wrap marker 111 102d 8f000005 sta $050000 ; to start of bank 5 112 113 1031 8cffff sty $ffff ; high byte of Y is where? 114 1034 ad0000 lda $0000 115 1037 d011 bne + 116 1039 adffff lda $ffff ; fetch, does not wrap 117 103c c98888 cmp #$8888 118 103f d009 bne + 119 1041 af000005 lda $050000 120 1045 c98877 cmp #$7788 ; write to bank 5 121 1048 f004 beq ++ 122 104a ee1002 + inc $0210 ; fail counter 123 104d 18 clc 124 ++ 125 104e 2e1102 rol $0211 ; update failure map 126 ;--------------------------------------------------------------------- 127 128 1051 9c0000 stz $0000 ; init wrap marker 129 1054 a97777 lda #$7777 ; no-wrap marker 130 1057 8f000005 sta $050000 ; to start of bank 5 131 132 105b bb tyx ; change marker 133 105c 8effff stx $ffff ; high byte of Y is where? 134 105f ad0000 lda $0000 135 1062 d011 bne + 136 1064 adffff lda $ffff ; fetch, does not wrap 137 1067 c98888 cmp #$8888 138 106a d009 bne + 139 106c af000005 lda $050000 140 1070 c98877 cmp #$7788 ; write to bank 5 141 1073 f004 beq ++ 142 1075 ee1002 + inc $0210 ; fail counter 143 1078 18 clc 144 ++ 145 1079 2e1102 rol $0211 ; update failure map 146 ;--------------------------------------------------------------------- 147 148 107c bcffff ldy $ffff,x ; Y=5555 Y=7777 value for Y comes from which bank? 149 107f c07777 cpy #$7777 150 1082 f004 beq + 151 1084 ee1002 inc $0210 ; fail counter 152 1087 18 clc 153 + 154 1088 2e1102 rol $0211 ; update failure map 155 ;--------------------------------------------------------------------- 156 157 108b 9b txy ; reinitialize y 158 108c beffff ldx $ffff,y ; X=5555 X=7777 value for X comes from which bank? 159 108f e07777 cpx #$7777 160 1092 f004 beq + 161 1094 ee1002 inc $0210 ; fail counter 162 1097 18 clc 163 + 164 1098 2e1102 rol $0211 ; update failure map 165 ;--------------------------------------------------------------------- 166 167 109b 9c0000 stz $0000 ; init wrap marker 168 109e a97777 lda #$7777 ; no-wrap marker 169 10a1 8f000005 sta $050000 ; to start of bank 5 170 171 10a5 a98877 lda #$7788 172 10a8 ee0000 inc $0000 ; $0000 = 1 173 10ab 1cffff trb $ffff ; 88 77 & ^(88 77) -> 00 00 174 10ae ad0000 lda $0000 175 10b1 c90100 cmp #$0001 ; $0000 not reset by trb (does not wrap) 176 10b4 d009 bne + 177 10b6 af000005 lda $050000 178 10ba c90077 cmp #$7700 ; $050001 reset by trb 179 10bd f004 beq ++ 180 10bf ee1002 + inc $0210 ; fail counter 181 10c2 18 clc 182 ++ 183 10c3 2e1102 rol $0211 ; update failure map 184 ;--------------------------------------------------------------------- 185 186 10c6 a98877 lda #$7788 187 10c9 8f000005 sta $050000 ; 00 88 | 88 77 -> 88 ff 188 10cd 0cffff tsb $ffff ; set bits (which are already cleared) 189 10d0 ad0000 lda $0000 190 10d3 c90100 cmp #$0001 ; $0000 not set by tsb (does not wrap!) 191 10d6 d009 bne + 192 10d8 af000005 lda $050000 193 10dc c9ff77 cmp #$77ff ; $050001 all bits set by tsb 194 10df f004 beq ++ 195 10e1 ee1002 + inc $0210 ; fail counter 196 10e4 18 clc 197 ++ 198 10e5 2e1102 rol $0211 ; update failure map 199 ;--------------------------------------------------------------------- 200 201 202 test00pass: 203 10e8 ad1002 lda $0210 204 10eb 49003f eor #%0011111100000000 ; invert failure map 205 10ee 8d1002 sta $0210 206 10f1 d003 bne + 207 10f3 ce1002 dec $0210 ; 0 -> FF 208 + 209 210 10f6 a90000 lda #$0000 211 10f9 48 pha 212 10fa ab plb 213 10fb ab plb ; program bank = 0 214 10fc 38 sec 215 10fd fb xce ; emulation mode 216 10fe e230 sep #$30 ; a/m, x/y 8 bit 217 218 1100 4c4908 jmp theend