mirror of
https://github.com/zellyn/a2audit.git
synced 2024-12-28 02:31:13 +00:00
copied langcard to auxmem tests, other rearranging
This commit is contained in:
parent
5ae6c9cea7
commit
26e75c13b8
@ -5,8 +5,12 @@
|
||||
!to "audit.o", plain
|
||||
* = $6000
|
||||
|
||||
CSW = $36
|
||||
KSW = $38
|
||||
HOME = $FC58
|
||||
COUT = $FDED
|
||||
COUT1 = $FDF0
|
||||
KEYIN = $FD1B
|
||||
CROUT = $FD8E
|
||||
PRBYTE = $FDDA
|
||||
PRNTYX = $F940
|
||||
@ -16,8 +20,10 @@
|
||||
|
||||
;; Printing and error macros.
|
||||
!src "macros.asm"
|
||||
|
||||
|
||||
main:
|
||||
jsr standard_fixup
|
||||
|
||||
jsr HOME
|
||||
+print
|
||||
!text "APPLE II AUDIT",$8D,$8D
|
||||
@ -28,10 +34,17 @@ main:
|
||||
|
||||
;; Language card tests.
|
||||
jsr LANGCARDTESTS
|
||||
|
||||
|
||||
;; Auxiliary memory card tests.
|
||||
jsr AUXMEMTESTS
|
||||
|
||||
;; ROM SHA-1 checks.
|
||||
;; jsr SHASUMTESTS - do this later, because it's SLOW!
|
||||
|
||||
end: jmp *
|
||||
|
||||
!src "langcard.asm"
|
||||
!src "auxmem.asm"
|
||||
!src "shasumtests.asm"
|
||||
|
||||
print
|
||||
@ -50,6 +63,21 @@ getch lda $FEED ; FEED gets modified
|
||||
jmp -
|
||||
+ rts
|
||||
|
||||
;;; Print a string of bytes, as hex.
|
||||
;;; Address in SRC, count in A.
|
||||
;;; Burns A,Y.
|
||||
prbytes:
|
||||
ldy #0
|
||||
- pha
|
||||
lda (SRC),y
|
||||
jsr PRBYTE
|
||||
iny
|
||||
pla
|
||||
adc #$ff
|
||||
bne -
|
||||
rts
|
||||
|
||||
|
||||
errora
|
||||
pha
|
||||
lda $C082
|
||||
@ -73,15 +101,17 @@ getche lda $FEED ; FEED gets modified
|
||||
beq +
|
||||
jsr COUT
|
||||
jmp -
|
||||
+
|
||||
+
|
||||
+print
|
||||
!text "ZELLYN.COM/A2AUDIT/V0#E",0
|
||||
+printed
|
||||
jsr PRNTYX
|
||||
lda #$8D
|
||||
jsr COUT
|
||||
rts
|
||||
!src "technote2.asm"
|
||||
!src "../shasum/shasum.asm"
|
||||
|
||||
|
||||
; !if * != STRINGS {
|
||||
; !error "Expected STRINGS to be ", *
|
||||
; }
|
||||
@ -90,3 +120,31 @@ rts
|
||||
!error "End of compilation passed STRINGS:", *
|
||||
}
|
||||
|
||||
;;; If we loaded via standard delivery, turn the motor off and fix up
|
||||
;;; CSW and KSW (in case the user typed PR#6 or IN#6 to boot).
|
||||
standard_fixup:
|
||||
;; TODO(zellyn): actually check for standard delivery.
|
||||
;; Turn drive motor off - do this regardless, since it doesn't hurt.
|
||||
ldx $2B
|
||||
lda $C088,X
|
||||
|
||||
;; If we typed PR#6 or IN#6 or something similar, the low byte
|
||||
;; of CSW or KSW will be 0.
|
||||
|
||||
;; Fixup CSW
|
||||
lda CSW
|
||||
bne +
|
||||
;; Point COUT at COUT1
|
||||
lda #<COUT1
|
||||
sta CSW
|
||||
lda #>COUT1
|
||||
sta CSW+1
|
||||
|
||||
;; Fixup KSW
|
||||
+ lda KSW
|
||||
bne +
|
||||
lda #<KEYIN
|
||||
sta KSW
|
||||
lda #>KEYIN
|
||||
sta KSW+1
|
||||
+ rts
|
||||
|
BIN
audit/audit.dsk
BIN
audit/audit.dsk
Binary file not shown.
303
audit/auxmem.asm
Normal file
303
audit/auxmem.asm
Normal file
@ -0,0 +1,303 @@
|
||||
;;; Apple IIe Auxiliary memory audit routines
|
||||
;;; Copyright © 2017 Zellyn Hunter <zellyn@gmail.com>
|
||||
|
||||
!zone auxmem {
|
||||
AUXMEMTESTS
|
||||
lda MEMORY
|
||||
cmp #65
|
||||
bcs +
|
||||
+print
|
||||
!text "64K OR LESS:SKIPPING AUXMEM TEST",$8D
|
||||
+printed
|
||||
rts
|
||||
;; Setup - store differing values in bank first and second banked areas.
|
||||
+ lda $C08B ; Read and write bank 1
|
||||
lda $C08B
|
||||
lda #$11
|
||||
sta $D17B ; $D17B is $53 in Apple II/plus/e/enhanced
|
||||
cmp $D17B
|
||||
beq +
|
||||
+prerr $0007 ;; E0007: We tried to put the language card into read bank 1, write bank 1, but failed to write.
|
||||
!text "CANNOT WRITE TO LC BANK 1 RAM"
|
||||
+prerred
|
||||
rts
|
||||
lda #$33
|
||||
+ sta $FE1F ; FE1F is $60 in Apple II/plus/e/enhanced
|
||||
cmp $FE1F
|
||||
beq .dotest
|
||||
+prerr $0008 ;; E0008: We tried to put the language card into read RAM, write RAM, but failed to write.
|
||||
!text "CANNOT WRITE TO LC RAM"
|
||||
+prerred
|
||||
rts
|
||||
+ lda $C083 ; Read and write bank 2
|
||||
lda $C083
|
||||
lda #$22
|
||||
sta $D17B
|
||||
cmp $D17B
|
||||
beq +
|
||||
+prerr $0009 ;; E0009: We tried to put the language card into read bank 2, write bank 2, but failed to write.
|
||||
!text "CANNOT WRITE TO LC BANK 2 RAM"
|
||||
+prerred
|
||||
rts
|
||||
|
||||
;; Parameterized tests
|
||||
|
||||
.dotest lda #<.tests
|
||||
sta 0
|
||||
lda #>.tests
|
||||
sta 1
|
||||
.outer
|
||||
;; Initialize to known state:
|
||||
;; - $11 in $D17B bank 1 (ROM: $53)
|
||||
;; - $22 in $D17B bank 2 (ROM: $53)
|
||||
;; - $33 in $FE1F (ROM: $60)
|
||||
lda $C08B ; Read and write bank 1
|
||||
lda $C08B
|
||||
lda #$11
|
||||
sta $D17B
|
||||
lda #$33
|
||||
sta $FE1F
|
||||
lda $C083 ; Read and write bank 2
|
||||
lda $C083
|
||||
lda #$22
|
||||
sta $D17B
|
||||
lda $C080
|
||||
|
||||
ldy #0
|
||||
|
||||
.inner
|
||||
lda ($0),y
|
||||
cmp #$ff
|
||||
beq .test
|
||||
tax
|
||||
bmi +
|
||||
ora #$80
|
||||
sta .lda+1
|
||||
.lda lda $C000
|
||||
jmp ++
|
||||
+ sta .sta+1
|
||||
.sta sta $C000
|
||||
++ iny
|
||||
bne .inner
|
||||
|
||||
.test ;; ... test the triple
|
||||
inc $D17B
|
||||
inc $FE1F
|
||||
iny
|
||||
|
||||
;; y now points to d17b-current,fe1f-current,bank1,bank2,fe1f-ram test quintiple
|
||||
|
||||
;; Test current $D17B
|
||||
lda (0),y
|
||||
cmp $D17B
|
||||
beq +
|
||||
lda $D17B
|
||||
pha
|
||||
jsr .printseq
|
||||
+print
|
||||
!text "$D17B TO CONTAIN $"
|
||||
+printed
|
||||
lda (0),y
|
||||
jsr PRBYTE
|
||||
+print
|
||||
!text ", GOT $"
|
||||
+printed
|
||||
pla
|
||||
jsr PRBYTE
|
||||
lda #$8D
|
||||
jsr COUT
|
||||
jmp .datatesturl
|
||||
|
||||
+ iny
|
||||
;; Test current $FE1F
|
||||
lda (0),y
|
||||
cmp $FE1F
|
||||
beq +
|
||||
lda $FE1F
|
||||
pha
|
||||
jsr .printseq
|
||||
+print
|
||||
!text "$FE1F=$"
|
||||
+printed
|
||||
lda (0),y
|
||||
jsr PRBYTE
|
||||
+print
|
||||
!text ", GOT $"
|
||||
+printed
|
||||
pla
|
||||
jsr PRBYTE
|
||||
lda #$8D
|
||||
jsr COUT
|
||||
jmp .datatesturl
|
||||
|
||||
+ iny
|
||||
|
||||
;; Test bank 1 $D17B
|
||||
lda $C088
|
||||
lda (0),y
|
||||
cmp $D17B
|
||||
beq +
|
||||
lda $D17B
|
||||
pha
|
||||
jsr .printseq
|
||||
+print
|
||||
!text "$D17B IN RAM BANK 1 TO CONTAIN $"
|
||||
+printed
|
||||
lda (0),y
|
||||
jsr PRBYTE
|
||||
+print
|
||||
!text ", GOT $"
|
||||
+printed
|
||||
pla
|
||||
jsr PRBYTE
|
||||
lda #$8D
|
||||
jsr COUT
|
||||
jmp .datatesturl
|
||||
|
||||
+ iny
|
||||
|
||||
;; Test bank 2 $D17B
|
||||
lda $C080
|
||||
lda (0),y
|
||||
cmp $D17B
|
||||
beq +
|
||||
lda $D17B
|
||||
pha
|
||||
jsr .printseq
|
||||
+print
|
||||
!text "$D17B IN RAM BANK 2 TO CONTAIN $"
|
||||
+printed
|
||||
lda (0),y
|
||||
jsr PRBYTE
|
||||
+print
|
||||
!text ", GOT $"
|
||||
+printed
|
||||
pla
|
||||
jsr PRBYTE
|
||||
lda #$8D
|
||||
jsr COUT
|
||||
jmp .datatesturl
|
||||
|
||||
+ iny
|
||||
|
||||
;; Test RAM $FE1F
|
||||
lda $C080
|
||||
lda (0),y
|
||||
cmp $FE1F
|
||||
beq +
|
||||
lda $FE1F
|
||||
pha
|
||||
jsr .printseq
|
||||
+print
|
||||
!text "RAM $FE1F=$"
|
||||
+printed
|
||||
lda (0),y
|
||||
jsr PRBYTE
|
||||
+print
|
||||
!text ", GOT $"
|
||||
+printed
|
||||
pla
|
||||
jsr PRBYTE
|
||||
lda #$8D
|
||||
jsr COUT
|
||||
jmp .datatesturl
|
||||
|
||||
+ iny
|
||||
|
||||
lda ($0),y ; Done with the parameterized tests?
|
||||
cmp #$ff
|
||||
bne +
|
||||
jmp .over
|
||||
+ clc
|
||||
tya
|
||||
adc $0
|
||||
sta $0
|
||||
bcc +
|
||||
inc $1
|
||||
+ jmp .outer
|
||||
|
||||
.datatesturl
|
||||
+prerr $000A ;; E000A: This is a data-driven test of Language Card operation. We initialize $D17B in RAM bank 1 to $11, $D17B in RAM bank 2 to $22, and $FE1F in RAM to $33. Then, we perform a testdata-driven sequence of LDA and STA to the $C08X range. Finally we (try to) increment $D17B and $FE1F. Then we test (a) the current live value in $D17B, (b) the current live value in $FE1F, (c) the RAM bank 1 value of $D17B, (d) the RAM bank 2 value of $D17B, and (e) the RAM value of $FE1F, to see whether they match expected values. $D17B is usually $53 in ROM, and $FE1F is usally $60. For more information on the operation of the language card soft-switches, see Understanding the Apple IIe, by James Fielding Sather, Pg 5-24.
|
||||
!text "DATA-DRIVEN TEST FAILED"
|
||||
+prerred
|
||||
rts
|
||||
|
||||
.printseq
|
||||
tya
|
||||
pha
|
||||
+print
|
||||
!text "AFTER SEQUENCE OF:",$8D,"LDA $C080",$8D
|
||||
+printed
|
||||
ldy #$0
|
||||
- lda ($0),y
|
||||
cmp #$ff
|
||||
beq +++
|
||||
tax
|
||||
bmi +
|
||||
lda #'L'
|
||||
jsr COUT
|
||||
lda #'D'
|
||||
bne ++
|
||||
+ lda #'S'
|
||||
jsr COUT
|
||||
lda #'T'
|
||||
++ jsr COUT
|
||||
+print
|
||||
!text "A $C0"
|
||||
+printed
|
||||
txa
|
||||
ora #$80
|
||||
jsr PRBYTE
|
||||
lda #$8D
|
||||
jsr COUT
|
||||
iny
|
||||
bne -
|
||||
+++
|
||||
+print
|
||||
!text "INC $D17B",$8D,"INC $FE1F",$8D,"EXPECTED "
|
||||
+printed
|
||||
pla
|
||||
tay
|
||||
rts
|
||||
|
||||
.tests
|
||||
;; Format:
|
||||
;; - $ff-terminated list of C0XX addresses (0-F to read C08X, 80-8F to write C0XX).
|
||||
;; - quint: expected current $d17b and fe1f, then d17b in bank1, d17b in bank 2, and fe1f
|
||||
;; (All sequences start with lda $C080, just to reset things to a known state.)
|
||||
!byte $08, $ff ; Read $C088 (RAM read, write protected)
|
||||
!byte $11, $33, $11, $22, $33 ;
|
||||
!byte $00, $ff ; Read $C080 (read bank 2, write disabled)
|
||||
!byte $22, $33, $11, $22, $33 ;
|
||||
!byte $01, $ff ; Read $C081 (ROM read, write disabled)
|
||||
!byte $53, $60, $11, $22, $33 ;
|
||||
!byte $01, $09, $ff ; Read $C081, $C089 (ROM read, bank 1 write)
|
||||
!byte $53, $60, $54, $22, $61 ;
|
||||
!byte $01, $01, $ff ; Read $C081, $C081 (read ROM, write RAM bank 2)
|
||||
!byte $53, $60, $11, $54, $61 ;
|
||||
!byte $0b, $ff ; Read $C08B (read RAM bank 1, no write)
|
||||
!byte $11, $33, $11, $22, $33 ;
|
||||
!byte $03, $ff ; Read $C083 (read RAM bank 2, no write)
|
||||
!byte $22, $33, $11, $22, $33 ;
|
||||
!byte $0b, $0b, $ff ; Read $C08B, $C08B (read/write RAM bank 1)
|
||||
!byte $12, $34, $12, $22, $34 ;
|
||||
!byte $0f, $07, $ff ; Read $C08F, $C087 (read/write RAM bank 2)
|
||||
!byte $23, $34, $11, $23, $34 ;
|
||||
!byte $07, $0D, $ff ; Read $C087, read $C08D (read ROM, write bank 1)
|
||||
!byte $53, $60, $54, $22, $61 ;
|
||||
!byte $0b, $8b, $0b, $ff ; Read $C08B, write $C08B, read $C08B (read RAM bank 1, no write)
|
||||
!byte $11, $33, $11, $22, $33 ; (this one is tricky: reset WRTCOUNT by writing halfway)
|
||||
!byte $ff
|
||||
|
||||
nop ; Provide clean break after data when viewing disassembly
|
||||
nop
|
||||
nop
|
||||
.over
|
||||
|
||||
;; Success
|
||||
+print
|
||||
!text "LANGUAGE CARD TESTS SUCCEEDED",$8D
|
||||
+printed
|
||||
.done
|
||||
rts
|
||||
} ;auxmem
|
@ -85,7 +85,7 @@
|
||||
!text "PLAIN APPLE II",$8D
|
||||
+printed
|
||||
beq .done
|
||||
.iiplus
|
||||
.iiplus
|
||||
+print
|
||||
!text "APPLE II PLUS",$8D
|
||||
+printed
|
||||
|
@ -107,7 +107,7 @@ LANGCARDTESTS
|
||||
lda #$8D
|
||||
jsr COUT
|
||||
jmp .datatesturl
|
||||
|
||||
|
||||
+ iny
|
||||
;; Test current $FE1F
|
||||
lda (0),y
|
||||
@ -129,7 +129,7 @@ LANGCARDTESTS
|
||||
lda #$8D
|
||||
jsr COUT
|
||||
jmp .datatesturl
|
||||
|
||||
|
||||
+ iny
|
||||
|
||||
;; Test bank 1 $D17B
|
||||
@ -153,7 +153,7 @@ LANGCARDTESTS
|
||||
lda #$8D
|
||||
jsr COUT
|
||||
jmp .datatesturl
|
||||
|
||||
|
||||
+ iny
|
||||
|
||||
;; Test bank 2 $D17B
|
||||
@ -221,7 +221,7 @@ LANGCARDTESTS
|
||||
!text "DATA-DRIVEN TEST FAILED"
|
||||
+prerred
|
||||
rts
|
||||
|
||||
|
||||
.printseq
|
||||
tya
|
||||
pha
|
||||
|
@ -2,7 +2,50 @@
|
||||
;;; Copyright © 2016 Zellyn Hunter <zellyn@gmail.com>
|
||||
|
||||
!zone shasumtests {
|
||||
|
||||
!addr SRC = $06
|
||||
!addr DST = $08
|
||||
!addr SHAINPUT = $eb
|
||||
!addr SHALENGTH = $ee
|
||||
|
||||
SHASUMTESTS
|
||||
|
||||
+print
|
||||
!text "COMPUTING ROM SHASUM",$8D
|
||||
+printed
|
||||
|
||||
lda #0
|
||||
sta SHAINPUT
|
||||
lda #$E0
|
||||
sta SHAINPUT+1
|
||||
lda #0
|
||||
sta SHALENGTH
|
||||
lda #$20
|
||||
sta SHALENGTH+1
|
||||
jsr SHASUM
|
||||
|
||||
+print
|
||||
!text "SHASUM:",$8D
|
||||
+printed
|
||||
|
||||
lda #<SHA
|
||||
sta SRC
|
||||
lda #>SHA
|
||||
sta SRC+1
|
||||
lda #SHALEN
|
||||
jsr prbytes
|
||||
|
||||
.done
|
||||
|
||||
rts
|
||||
} ;shasumtests
|
||||
|
||||
!eof
|
||||
|
||||
2744ebe53a13578f318fe017d01ea6a975083250
|
||||
|
||||
Apple II: 102FBF7DEA8B8D6DE5DE1C484FF45E7B5DFB28D5 (oe, vii)
|
||||
Apple II Plus: 5a23616dca14e59b4aca8ff6cfa0d98592a78a79 (oe, mame)
|
||||
2744ebe53a13578f318fe017d01ea6a975083250 (vii)
|
||||
Apple IIe: 8895a4b703f2184b673078f411f4089889b61c54 (mame)
|
||||
Apple IIe (enhanced): afb09bb96038232dc757d40c0605623cae38088e (vii, mame)
|
||||
|
16
v0/index.md
16
v0/index.md
@ -23,3 +23,19 @@ We tried to put the language card into read bank 2, write bank 2, but failed to
|
||||
## E0006
|
||||
|
||||
This is a data-driven test of Language Card operation. We initialize $D17B in RAM bank 1 to $11, $D17B in RAM bank 2 to $22, and $FE1F in RAM to $33. Then, we perform a testdata-driven sequence of LDA and STA to the $C08X range. Finally we (try to) increment $D17B and $FE1F. Then we test (a) the current live value in $D17B, (b) the current live value in $FE1F, (c) the RAM bank 1 value of $D17B, (d) the RAM bank 2 value of $D17B, and (e) the RAM value of $FE1F, to see whether they match expected values. $D17B is usually $53 in ROM, and $FE1F is usally $60. For more information on the operation of the language card soft-switches, see Understanding the Apple IIe, by James Fielding Sather, Pg 5-24.
|
||||
|
||||
## E0007
|
||||
|
||||
We tried to put the language card into read bank 1, write bank 1, but failed to write.
|
||||
|
||||
## E0008
|
||||
|
||||
We tried to put the language card into read RAM, write RAM, but failed to write.
|
||||
|
||||
## E0009
|
||||
|
||||
We tried to put the language card into read bank 2, write bank 2, but failed to write.
|
||||
|
||||
## E000A
|
||||
|
||||
This is a data-driven test of Language Card operation. We initialize $D17B in RAM bank 1 to $11, $D17B in RAM bank 2 to $22, and $FE1F in RAM to $33. Then, we perform a testdata-driven sequence of LDA and STA to the $C08X range. Finally we (try to) increment $D17B and $FE1F. Then we test (a) the current live value in $D17B, (b) the current live value in $FE1F, (c) the RAM bank 1 value of $D17B, (d) the RAM bank 2 value of $D17B, and (e) the RAM value of $FE1F, to see whether they match expected values. $D17B is usually $53 in ROM, and $FE1F is usally $60. For more information on the operation of the language card soft-switches, see Understanding the Apple IIe, by James Fielding Sather, Pg 5-24.
|
||||
|
Loading…
Reference in New Issue
Block a user