mirror of
https://github.com/zellyn/a2audit.git
synced 2025-01-03 10:29:32 +00:00
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.
303
audit/monitor-routines.asm
Normal file
303
audit/monitor-routines.asm
Normal file
@ -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
Block a user