1
0
mirror of https://github.com/TomHarte/CLK.git synced 2024-12-27 01:31:42 +00:00
CLK/OSBindings/Mac/Clock SignalTests/jeek816/suite-a.asm

219 lines
4.6 KiB
NASM

!cpu 65816
; 2017-12-13 J.E. Klasek j+816 AT klasek DOT at
videoram = $0400
colorram = $d800
;-------------------------------------------------------------------------------
*=$07ff
!word $0801
!word bend
!word 10
!byte $9e
!text "2061", 0
bend: !word 0
;-------------------------------------------------------------------------------
sei
lda #$17
sta $d018
lda #$35
sta $01
lda #$7f
sta $dc0d
sta $dd0d
lda $dc0d
lda $dd0d
ldx #0
-
lda #$20
sta videoram,x
sta videoram+$0100,x
sta videoram+$0200,x
sta videoram+$0300,x
lda #1
sta colorram,x
sta colorram+$0100,x
sta colorram+$0200,x
sta colorram+$0300,x
inx
bne -
jmp start
theend:
sep #$30 ; 8-bit for X/Y and A/M
!as
!rs
lda $040210
cmp #$ff
bne error
lda #5
sta $d020
ldx #0 ; success
stx $d7ff
jmp *
error
sta $0400
lda $040211 ; failure map (which test failed)
sta $0401
lda #10
sta $d020
ldx #$ff ; failure
stx $d7ff
jmp *
;-------------------------------------------------------------------------------
* = $1000
start:
; EXPECTED FINAL RESULTS: $0210 = FF
; (any other number will be the
; test that failed)
; initialize:
lda #$00
sta $040210
sta $040211
test00:
; setup cpu
clc
xce ; native mode
rep #$30 ; 16-bit for X/Y and A/M
!al
!rl
; setup registers
lda #$0404 ; Data Bank Register register
pha ; akku in 16 bit
plb ; pull DBR twice
plb
ldy #$8888 ; change marker
tyx
tya
; setup memory
lda #$5555 ; wrap marker
sta $048887 ; into bank 4, for LDX/LDY
lda #$7777 ; no-wrap marker
sta $058887 ; into bank 5, for LDX/LDY
;---------------------------------------------------------------------
stz $0000 ; init wrap marker
lda #$7777 ; no-wrap marker
sta $050000 ; to start of bank 5
sty $ffff ; high byte of Y is where?
lda $0000
bne +
lda $ffff ; fetch, does not wrap
cmp #$8888
bne +
lda $050000
cmp #$7788 ; write to bank 5
beq ++
+ inc $0210 ; fail counter
clc
++
rol $0211 ; update failure map
;---------------------------------------------------------------------
stz $0000 ; init wrap marker
lda #$7777 ; no-wrap marker
sta $050000 ; to start of bank 5
tyx ; change marker
stx $ffff ; high byte of Y is where?
lda $0000
bne +
lda $ffff ; fetch, does not wrap
cmp #$8888
bne +
lda $050000
cmp #$7788 ; write to bank 5
beq ++
+ inc $0210 ; fail counter
clc
++
rol $0211 ; update failure map
;---------------------------------------------------------------------
ldy $ffff,x ; Y=5555 Y=7777 value for Y comes from which bank?
cpy #$7777
beq +
inc $0210 ; fail counter
clc
+
rol $0211 ; update failure map
;---------------------------------------------------------------------
txy ; reinitialize y
ldx $ffff,y ; X=5555 X=7777 value for X comes from which bank?
cpx #$7777
beq +
inc $0210 ; fail counter
clc
+
rol $0211 ; update failure map
;---------------------------------------------------------------------
stz $0000 ; init wrap marker
lda #$7777 ; no-wrap marker
sta $050000 ; to start of bank 5
lda #$7788
inc $0000 ; $0000 = 1
trb $ffff ; 88 77 & ^(88 77) -> 00 00
lda $0000
cmp #$0001 ; $0000 not reset by trb (does not wrap)
bne +
lda $050000
cmp #$7700 ; $050001 reset by trb
beq ++
+ inc $0210 ; fail counter
clc
++
rol $0211 ; update failure map
;---------------------------------------------------------------------
lda #$7788
sta $050000 ; 00 88 | 88 77 -> 88 ff
tsb $ffff ; set bits (which are already cleared)
lda $0000
cmp #$0001 ; $0000 not set by tsb (does not wrap!)
bne +
lda $050000
cmp #$77ff ; $050001 all bits set by tsb
beq ++
+ inc $0210 ; fail counter
clc
++
rol $0211 ; update failure map
;---------------------------------------------------------------------
test00pass:
lda $0210
eor #%0011111100000000 ; invert failure map
sta $0210
bne +
dec $0210 ; 0 -> FF
+
lda #$0000
pha
plb
plb ; program bank = 0
sec
xce ; emulation mode
sep #$30 ; a/m, x/y 8 bit
jmp theend