mirror of https://github.com/zellyn/a2audit.git
Duplicated the redbook monitor routines we use
IIe machines jump to Cxxx ROM for initialization and HOME (and probably other things too). This change makes the audit tests more self-contained, for when you're trying to test an emulator that's not really working yet.
This commit is contained in:
parent
06755ae704
commit
2a0b0da1b2
|
@ -26,9 +26,14 @@ Error messages can be viewed at
|
|||
- [x] softswitch reading tests
|
||||
- [x] Incorporate Cxxx testing into data-driven test
|
||||
- [x] Add testcases for Cxxx testing
|
||||
- [x] duplicate HOME and COUT routines from AppleII, so IIe tests
|
||||
don't depend on Cxxx ROM working
|
||||
|
||||
### TODO
|
||||
|
||||
- [ ] IIe: check that we really have 128K (aux switching actually does
|
||||
anything)
|
||||
- [ ] IIe: don't test auxmem softswitches if we only have 64k
|
||||
- [ ] weirder softswitch behavior corner cases
|
||||
- [ ] floating-bus tests
|
||||
|
||||
|
|
|
@ -91,13 +91,13 @@
|
|||
READ_VBL = $C019
|
||||
|
||||
;; Monitor locations.
|
||||
HOME = $FC58
|
||||
COUT = $FDED
|
||||
COUT1 = $FDF0
|
||||
KEYIN = $FD1B
|
||||
CROUT = $FD8E
|
||||
PRBYTE = $FDDA
|
||||
PRNTYX = $F940
|
||||
;HOME = $FC58
|
||||
;COUT = $FDED
|
||||
;COUT1 = $FDF0
|
||||
;KEYIN = $FD1B
|
||||
;CROUT = $FD8E
|
||||
;PRBYTE = $FDDA
|
||||
;PRNTYX = $F940
|
||||
|
||||
STRINGS = $7000
|
||||
!set LASTSTRING = $7000
|
||||
|
@ -111,6 +111,7 @@ main:
|
|||
txs
|
||||
|
||||
jsr standard_fixup
|
||||
jsr RESET
|
||||
|
||||
jsr HOME
|
||||
+print
|
||||
|
@ -136,12 +137,14 @@ end:
|
|||
+print
|
||||
!text "END"
|
||||
+printed
|
||||
jsr RESETALL
|
||||
jmp *
|
||||
|
||||
!src "langcard.asm"
|
||||
!src "auxmem.asm"
|
||||
!src "softswitch.asm"
|
||||
!src "resetall.asm"
|
||||
!src "monitor-routines.asm"
|
||||
;!src "shasumtests.asm"
|
||||
|
||||
print
|
||||
|
@ -221,8 +224,6 @@ standard_fixup:
|
|||
;; of CSW or KSW will be 0.
|
||||
|
||||
;; Fixup CSW
|
||||
lda CSW
|
||||
bne +
|
||||
;; Point COUT at COUT1
|
||||
lda #<COUT1
|
||||
sta CSW
|
||||
|
@ -230,13 +231,11 @@ standard_fixup:
|
|||
sta CSW+1
|
||||
|
||||
;; Fixup KSW
|
||||
+ lda KSW
|
||||
bne +
|
||||
lda #<KEYIN
|
||||
sta KSW
|
||||
lda #>KEYIN
|
||||
sta KSW+1
|
||||
+ rts
|
||||
rts
|
||||
|
||||
COPYTOAUX
|
||||
;; Use AUXMOVE routine to copy the whole program to AUX memory.
|
||||
|
|
BIN
audit/audit.dsk
BIN
audit/audit.dsk
Binary file not shown.
|
@ -0,0 +1,303 @@
|
|||
!zone monitor {
|
||||
|
||||
.LOC0 = $00
|
||||
.LOC1 = $01
|
||||
.WNDLFT = $20
|
||||
.WNDWDTH = $21
|
||||
.WNDTOP = $22
|
||||
.WNDBTM = $23
|
||||
.CH = $24
|
||||
.CV = $25
|
||||
.GBASL = $26
|
||||
.GBASH = $27
|
||||
.BASL = $28
|
||||
.BASH = $29
|
||||
.BAS2L = $2A
|
||||
.BAS2H = $2B
|
||||
.V2 = $2D
|
||||
.MASK = $2E
|
||||
.COLOR = $30
|
||||
.INVFLG = $32
|
||||
.YSAV1 = $35
|
||||
.CSWL = $36
|
||||
.CSWH = $37
|
||||
.KSWL = $38
|
||||
.KSWH = $39
|
||||
.A2L = $3E
|
||||
.STATUS = $48
|
||||
.RNDL = $4E
|
||||
.RNDH = $4F
|
||||
|
||||
|
||||
.IOADR = $C000
|
||||
.KBD = $C000
|
||||
.KBDSTRB = $C010
|
||||
.SPKR = $C030
|
||||
.LORES = $C056
|
||||
.LOWSCR = $C054
|
||||
.TXTSET = $C051
|
||||
.TXTCLR = $C050
|
||||
.MIXSET = $C053
|
||||
|
||||
.PLOT LSR ;Y-COORD/2
|
||||
PHP ;SAVE LSB IN CARRY
|
||||
JSR .GBASCALC ;CALC BASE ADR IN GBASL,H
|
||||
PLP ;RESTORE LSB FROM CARRY
|
||||
LDA #$0F ;MASK $0F IF EVEN
|
||||
BCC .RTMASK
|
||||
ADC #$E0 ;MASK $F0 IF ODD
|
||||
.RTMASK STA .MASK
|
||||
.PLOT1 LDA (.GBASL),Y ;DATA
|
||||
EOR .COLOR ; EOR COLOR
|
||||
AND .MASK ; AND MASK
|
||||
EOR (.GBASL),Y ; EOR DATA
|
||||
STA (.GBASL),Y ; TO DATA
|
||||
RTS
|
||||
|
||||
.VLINEZ ADC #$01 ;NEXT Y-COORD
|
||||
.VLINE PHA ; SAVE ON STACK
|
||||
JSR .PLOT ; PLOT SQUARE
|
||||
PLA
|
||||
CMP .V2 ;DONE?
|
||||
BCC .VLINEZ ; NO, LOOP
|
||||
.RTS1 RTS
|
||||
.CLRSCR LDY #$2F ;MAX Y, FULL SCRN CLR
|
||||
BNE .CLRSC2 ;ALWAYS TAKEN
|
||||
.CLRTOP LDY #$27 ;MAX Y, TOP SCREEN CLR
|
||||
.CLRSC2 STY .V2 ;STORE AS BOTTOM COORD
|
||||
; FOR VLINE CALLS
|
||||
LDY #$27 ;RIGHTMOST X-COORD (COLUMN)
|
||||
.CLRSC3 LDA #$00 ;TOP COORD FOR VLINE CALLS
|
||||
STA .COLOR ;CLEAR COLOR (BLACK)
|
||||
JSR .VLINE ;DRAW VLINE
|
||||
DEY ;NEXT LEFTMOST X-COORD
|
||||
BPL .CLRSC3 ;LOOP UNTIL DONE
|
||||
RTS
|
||||
.GBASCALC PHA ;FOR INPUT 000DEFGH
|
||||
LSR
|
||||
AND #$03
|
||||
ORA #$04 ; GENERATE GBASH=000001FG
|
||||
STA .GBASH
|
||||
PLA ; AND GBASL=HDEDE000
|
||||
AND #$18
|
||||
BCC .GBCALC
|
||||
ADC #$7F
|
||||
.GBCALC STA .GBASL
|
||||
ASL
|
||||
ASL
|
||||
ORA .GBASL
|
||||
STA .GBASL
|
||||
RTS
|
||||
|
||||
PRNTYX TYA
|
||||
.PRNTAX JSR PRBYTE ;OUTPUT TARGET ADR
|
||||
.PRNTX TXA ; OF BRANCH AND RETURN
|
||||
JMP PRBYTE
|
||||
|
||||
.INIT LDA #$00 ;CLR STATUS FOR DEBUG
|
||||
STA .STATUS ; SOFTWARE
|
||||
LDA .LORES
|
||||
LDA .LOWSCR ;INIT VIDEO MODE
|
||||
.SETTXT LDA .TXTSET ;SET FOR TEXT MODE
|
||||
LDA #$00 ; FULL SCREEN WINDOW
|
||||
BEQ .SETWND
|
||||
.SETGR LDA .TXTCLR ;SET FOR GRAPHICS MODE
|
||||
LDA .MIXSET ; LOWER 4 LINES AS
|
||||
JSR .CLRTOP ; TEXT WINDOW
|
||||
LDA #$14
|
||||
.SETWND STA .WNDTOP ;SET FOR 40 COL WINDOW
|
||||
LDA #$00 ; TOP IN A-REG,
|
||||
STA .WNDLFT ; BTTM AT LINE 24
|
||||
LDA #$28
|
||||
STA .WNDWDTH
|
||||
LDA #$18
|
||||
STA .WNDBTM ; VTAB TO ROW 23
|
||||
LDA #$17
|
||||
.TABV STA .CV ;VTABS TO ROW IN A-REG
|
||||
JMP .VTAB
|
||||
|
||||
.BASCALC PHA ;CALC BASE ADR IN BASL,H
|
||||
LSR ; FOR GIVEN LINE NO
|
||||
AND #$03 ; 0<=LINE NO.<=$17
|
||||
ORA #$04 ;ARG=000ABCDE, GENERATE
|
||||
STA .BASH ; BASH=000001CD
|
||||
PLA ; AND
|
||||
AND #$18 ; BASL=EABAB000
|
||||
BCC .BSCLC2
|
||||
ADC #$7F
|
||||
.BSCLC2 STA .BASL
|
||||
ASL
|
||||
ASL
|
||||
ORA .BASL
|
||||
STA .BASL
|
||||
RTS
|
||||
.BELL1 CMP #$87 ;BELL CHAR? (CNTRL-G)
|
||||
BNE .RTS2B ; NO, RETURN
|
||||
LDA #$40 ;DELAY .01 SECONDS
|
||||
JSR .WAIT
|
||||
LDY #$C0
|
||||
.BELL2 LDA #$0C ;TOGGLE SPEAKER AT
|
||||
JSR .WAIT ; 1 KHZ FOR .1 SEC.
|
||||
LDA .SPKR
|
||||
DEY
|
||||
BNE .BELL2
|
||||
.RTS2B RTS
|
||||
.STOADV LDY .CH ;CURSOR H INDEX TO Y-REG
|
||||
STA (.BASL),Y ;STORE CHAR IN LINE
|
||||
.ADVANCE INC .CH ;INCREMENT CURSOR H INDEX
|
||||
LDA .CH ; (MOVE RIGHT)
|
||||
CMP .WNDWDTH ;BEYOND WINDOW WIDTH?
|
||||
BCS .CR ; YES CR TO NEXT LINE
|
||||
.RTS3 RTS ; NO,RETURN
|
||||
.VIDOUT CMP #$A0 ;CONTROL CHAR?
|
||||
BCS .STOADV ; NO,OUTPUT IT.
|
||||
TAY ;INVERSE VIDEO?
|
||||
BPL .STOADV ; YES, OUTPUT IT.
|
||||
CMP #$8D ;CR?
|
||||
BEQ .CR ; YES.
|
||||
CMP #$8A ;LINE FEED?
|
||||
BEQ .LF ; IF SO, DO IT.
|
||||
CMP #$88 ;BACK SPACE? (CNTRL-H)
|
||||
BNE .BELL1 ; NO, CHECK FOR BELL.
|
||||
.BS DEC .CH ;DECREMENT CURSOR H INDEX
|
||||
BPL .RTS3 ;IF POS, OK. ELSE MOVE UP
|
||||
LDA .WNDWDTH ;SET CH TO WNDWDTH-1
|
||||
STA .CH
|
||||
DEC .CH ;(RIGHTMOST SCREEN POS)
|
||||
.UP LDA .WNDTOP ;CURSOR V INDEX
|
||||
CMP .CV
|
||||
BCS .RTS4 ;IF TOP LINE THEN RETURN
|
||||
DEC .CV ;DEC CURSOR V-INDEX
|
||||
.VTAB LDA .CV ;GET CURSOR V-INDEX
|
||||
.VTABZ JSR .BASCALC ;GENERATE BASE ADR
|
||||
ADC .WNDLFT ;ADD WINDOW LEFT INDEX
|
||||
STA .BASL ;TO BASL
|
||||
.RTS4 RTS
|
||||
|
||||
.CLEOP1 PHA ;SAVE CURRENT LINE ON STK
|
||||
JSR .VTABZ ;CALC BASE ADDRESS
|
||||
JSR .CLEOLZ ;CLEAR TO EOL, SET CARRY
|
||||
LDY #$00 ;CLEAR FROM H INDEX=0 FOR REST
|
||||
PLA ;INCREMENT CURRENT LINE
|
||||
ADC #$00 ;(CARRY IS SET)
|
||||
CMP .WNDBTM ;DONE TO BOTTOM OF WINDOW?
|
||||
BCC .CLEOP1 ; NO, KEEP CLEARING LINES
|
||||
BCS .VTAB ; YES, TAB TO CURRENT LINE
|
||||
HOME LDA .WNDTOP ;INIT CURSOR V
|
||||
STA .CV ; AND H-INDICES
|
||||
LDY #$00
|
||||
STY .CH ;THEN CLEAR TO END OF PAGE
|
||||
BEQ .CLEOP1
|
||||
.CR LDA #$00 ;CURSOR TO LEFT OF INDEX
|
||||
STA .CH ;(RET CURSOR H=0)
|
||||
.LF INC .CV ;INCR CURSOR V(DOWN 1 LINE)
|
||||
LDA .CV
|
||||
CMP .WNDBTM ;OFF SCREEN?
|
||||
BCC .VTABZ ; NO, SET BASE ADDR
|
||||
DEC .CV ;DECR CURSOR V (BACK TO BOTTOM)
|
||||
.SCROLL LDA .WNDTOP ;START AT TOP OF SCRL WNDW
|
||||
PHA
|
||||
JSR .VTABZ ;GENERATE BASE ADR
|
||||
.SCRL1 LDA .BASL ;COPY BASL,H
|
||||
STA .BAS2L ; TO BAS2L,H
|
||||
LDA .BASH
|
||||
STA .BAS2H
|
||||
LDY .WNDWDTH ;INIT Y TO RIGHTMOST INDEX
|
||||
DEY ; OF SCROLLING WINDOW
|
||||
PLA
|
||||
ADC #$01 ;INCR LINE NUMBER
|
||||
CMP .WNDBTM ;DONE?
|
||||
BCS .SCRL3 ; YES, FINISH
|
||||
PHA
|
||||
JSR .VTABZ ;FORM BASL,H (BASE ADDR)
|
||||
.SCRL2 LDA (.BASL),Y ;MOVE A CHR UP ON LINE
|
||||
STA (.BAS2L),Y
|
||||
DEY ;NEXT CHAR OF LINE
|
||||
BPL .SCRL2
|
||||
BMI .SCRL1 ;NEXT LINE (ALWAYS TAKEN)
|
||||
.SCRL3 LDY #$00 ;CLEAR BOTTOM LINE
|
||||
JSR .CLEOLZ ;GET BASE ADDR FOR BOTTOM LINE
|
||||
BCS .VTAB ;CARRY IS SET
|
||||
.CLREOL LDY .CH ;CURSOR H INDEX
|
||||
.CLEOLZ LDA #$A0
|
||||
.CLEOL2 STA (.BASL),Y ;STORE BLANKS FROM 'HERE'
|
||||
INY ; TO END OF LINES (WNDWDTH)
|
||||
CPY .WNDWDTH
|
||||
BCC .CLEOL2
|
||||
RTS
|
||||
.WAIT SEC
|
||||
.WAIT2 PHA
|
||||
.WAIT3 SBC #$01
|
||||
BNE .WAIT3 ;1.0204 USEC
|
||||
PLA ;(13+27/2*A+5/2*A*A)
|
||||
SBC #$01
|
||||
BNE .WAIT2
|
||||
RTS
|
||||
|
||||
KEYIN INC .RNDL
|
||||
BNE .KEYIN2 ;INCR RND NUMBER
|
||||
INC .RNDH
|
||||
.KEYIN2 BIT .KBD ;KEY DOWN?
|
||||
BPL KEYIN ; LOOP
|
||||
STA (.BASL),Y ;REPLACE FLASHING SCREEN
|
||||
LDA .KBD ;GET KEYCODE
|
||||
BIT .KBDSTRB ;CLR KEY STROBE
|
||||
RTS
|
||||
|
||||
CROUT LDA #$8D
|
||||
BNE COUT
|
||||
|
||||
PRBYTE PHA ;PRINT BYTE AS 2 HEX
|
||||
LSR ; DIGITS, DESTROYS A-REG
|
||||
LSR
|
||||
LSR
|
||||
LSR
|
||||
JSR .PRHEXZ
|
||||
PLA
|
||||
.PRHEX AND #$0F ;PRINT HEX DIG IN A-REG
|
||||
.PRHEXZ ORA #$B0 ; LSB'S
|
||||
CMP #$BA
|
||||
BCC COUT
|
||||
ADC #$06
|
||||
COUT JMP (.CSWL) ;VECTOR TO USER OUTPUT ROUTINE
|
||||
COUT1 CMP #$A0
|
||||
BCC .COUTZ ;DON'T OUTPUT CTRL'S INVERSE
|
||||
AND .INVFLG ;MASK WITH INVERSE FLAG
|
||||
.COUTZ STY .YSAV1 ;SAV Y-REG
|
||||
PHA ;SAV A-REG
|
||||
JSR .VIDOUT ;OUTPUT A-REG AS ASCII
|
||||
PLA ;RESTORE A-REG
|
||||
LDY .YSAV1 ; AND Y-REG
|
||||
RTS ; THEN RETURN
|
||||
|
||||
.SETNORM LDY #$FF ;SET FOR NORMAL VID
|
||||
.SETIFLG STY .INVFLG
|
||||
RTS
|
||||
.SETKBD LDA #$00 ;SIMULATE PORT #0 INPUT
|
||||
.INPORT STA .A2L ; SPECIFIED (KEYIN ROUTINE)
|
||||
.INPRT LDX #.KSWL
|
||||
LDY #<KEYIN
|
||||
BNE .IOPRT
|
||||
.SETVID LDA #$00 ;SIMULATE PORT #0 OUTPUT
|
||||
.OUTPORT STA .A2L ; SPECIFIED (COUT1 ROUTINE)
|
||||
.OUTPRT LDX #.CSWL
|
||||
LDY #<COUT1
|
||||
.IOPRT LDA .A2L ;SET RAM IN/OUT VECTORS
|
||||
AND #$0F
|
||||
BEQ .IOPRT1
|
||||
ORA #>.IOADR
|
||||
LDY #$00
|
||||
BEQ .IOPRT2
|
||||
.IOPRT1 LDA #>COUT1
|
||||
.IOPRT2 STY .LOC0,X
|
||||
STA .LOC1,X
|
||||
RTS
|
||||
|
||||
RESET JSR .SETNORM ;SET SCREEN MODE
|
||||
JSR .INIT ; AND INIT KBD/SCREEN
|
||||
JSR .SETVID ; AS I/O DEV'S
|
||||
JSR .SETKBD
|
||||
CLD ;MUST SET HEX MODE!
|
||||
RTS
|
||||
|
||||
} ; monitor
|
Loading…
Reference in New Issue