a2audit/audit/audit.asm

270 lines
4.0 KiB
NASM
Raw Normal View History

2016-12-07 03:18:33 +00:00
;;; Apple II audit routines
;;; Copyright © 2016 Zellyn Hunter <zellyn@gmail.com>
!convtab <apple ii/convtab.bin>
!to "audit.o", plain
* = $6000
START = *
2016-12-07 03:18:33 +00:00
;; Zero-page locations.
2017-01-23 02:26:47 +00:00
SCRATCH = $1
2017-01-27 02:46:38 +00:00
SCRATCH2 = $2
SCRATCH3 = $3
LCRESULT = $10
LCRESULT1 = $11
AUXRESULT = $12
2017-01-25 05:28:19 +00:00
SOFTSWITCHRESULT = $13
2017-01-23 02:26:47 +00:00
CSW = $36
KSW = $38
PCL=$3A
PCH=$3B
;; SHASUM locations
!addr SRC = $06
!addr DST = $08
!addr SHAINPUT = $eb
!addr SHALENGTH = $ee
2017-01-25 05:28:19 +00:00
!addr tmp0 = $f9
2017-01-23 02:26:47 +00:00
!addr tmp1 = $fa
!addr tmp2 = $fb
!addr tmp3 = $fc
!addr tmp4 = $fd
!addr tmp5 = $fe
2017-01-25 05:28:19 +00:00
!addr tmp6 = $ff
2017-01-23 02:26:47 +00:00
;; Softswitch locations.
2017-01-23 02:26:47 +00:00
RESET_80STORE = $C000
SET_80STORE = $C001
READ_80STORE = $C018
RESET_RAMRD = $C002
SET_RAMRD = $C003
READ_RAMRD = $C013
RESET_RAMWRT = $C004
SET_RAMWRT = $C005
READ_RAMWRT = $C014
RESET_INTCXROM = $C006
SET_INTCXROM = $C007
READ_INTCXROM = $C015
RESET_ALTZP = $C008
SET_ALTZP = $C009
READ_ALTZP = $C016
RESET_SLOTC3ROM = $C00A
SET_SLOTC3ROM = $C00B
READ_SLOTC3ROM = $C017
2017-01-25 05:28:19 +00:00
RESET_80COL = $C00C
SET_80COL = $C00D
READ_80COL = $C01F
RESET_ALTCHRSET = $C00E
SET_ALTCHRSET = $C00F
READ_ALTCHRSET = $C01E
2017-01-23 02:26:47 +00:00
RESET_TEXT = $C050
SET_TEXT = $C051
READ_TEXT = $C01A
RESET_MIXED = $C052
SET_MIXED = $C053
READ_MIXED = $C01B
RESET_PAGE2 = $C054
SET_PAGE2 = $C055
READ_PAGE2 = $C01C
RESET_HIRES = $C056
SET_HIRES = $C057
READ_HIRES = $C01D
2017-01-25 05:28:19 +00:00
2017-01-23 02:26:47 +00:00
RESET_INTC8ROM = $CFFF
2017-01-25 05:28:19 +00:00
;; Readable things without corresponding set/reset pairs.
READ_HRAM_BANK2 = $C011
READ_HRAMRD = $C012
READ_VBL = $C019
;; Monitor locations.
;HOME = $FC58
;COUT = $FDED
;COUT1 = $FDF0
;KEYIN = $FD1B
;CROUT = $FD8E
;PRBYTE = $FDDA
;PRNTYX = $F940
2016-12-07 03:18:33 +00:00
STRINGS = $7000
!set LASTSTRING = $7000
2016-12-15 01:16:55 +00:00
;; Printing and error macros.
!src "macros.asm"
2016-12-07 03:18:33 +00:00
main:
;; Initialize stack to the top.
2017-01-23 02:26:47 +00:00
ldx #$ff
txs
jsr standard_fixup
jsr RESET
2016-12-07 03:18:33 +00:00
jsr HOME
+print
!text "APPLE II AUDIT",$8D,$8D
+printed
2016-12-15 01:16:55 +00:00
;; Detection and reporting of model and memory.
!src "detect.asm"
2016-12-15 01:16:55 +00:00
;; Language card tests.
2017-01-06 02:47:49 +00:00
jsr LANGCARDTESTS
;; Auxiliary memory card tests.
jsr AUXMEMTESTS
2017-01-25 05:28:19 +00:00
;; Tests of softswitch-reading
jsr SOFTSWITCHTESTS
;; ROM SHA-1 checks.
;; jsr SHASUMTESTS - do this later, because it's SLOW!
end:
+print
!text "END"
+printed
jsr RESETALL
jmp *
2016-12-07 03:18:33 +00:00
2017-01-06 02:47:49 +00:00
!src "langcard.asm"
!src "auxmem.asm"
2017-01-25 05:28:19 +00:00
!src "softswitch.asm"
!src "resetall.asm"
!src "monitor-routines.asm"
2017-01-25 05:28:19 +00:00
;!src "shasumtests.asm"
2017-01-06 02:47:49 +00:00
print
lda $C081
lda $C081
pla
sta getch+1
pla
sta getch+2
- inc getch+1
bne getch
inc getch+2
getch lda $FEED ; FEED gets modified
2016-12-07 03:18:33 +00:00
beq +
jsr COUT
jmp -
+ rts
2016-12-17 03:32:35 +00:00
;;; 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
2016-12-17 03:32:35 +00:00
errora
pha
lda $C082
lda #'A'
jsr COUT
lda #':'
jsr COUT
pla
jsr PRBYTE
jsr CROUT
error
lda $C082
pla
sta getche+1
pla
sta getche+2
- inc getche+1
bne getche
inc getche+2
getche lda $FEED ; FEED gets modified
beq +
jsr COUT
jmp -
+
2016-12-17 03:32:35 +00:00
+print
!text "ZELLYN.COM/A2AUDIT/V0#E",0
+printed
jsr PRNTYX
lda #$8D
jsr COUT
2016-12-17 03:32:35 +00:00
rts
!src "technote2.asm"
;!src "../shasum/shasum.asm"
;;; 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
;; Point COUT at COUT1
lda #<COUT1
sta CSW
lda #>COUT1
sta CSW+1
;; Fixup KSW
lda #<KEYIN
sta KSW
lda #>KEYIN
sta KSW+1
rts
COPYTOAUX
;; Use AUXMOVE routine to copy the whole program to AUX memory.
jsr RESETALL
lda #<START
sta SRC
lda #>START
sta SRC+1
sta SET_RAMWRT
ldy #0
- lda (SRC),y
sta (SRC),y
inc SRC
bne +
inc SRC+1
+ lda SRC
cmp #<(LASTSTRING)
bne -
lda SRC+1
cmp #>(LASTSTRING)
bne -
sta RESET_RAMWRT
rts
; !if * != STRINGS {
; !error "Expected STRINGS to be ", *
; }
!if * > STRINGS {
!error "End of compilation passed STRINGS:", *
}