Switch to simple delay. Don't forget pidrive!
This commit is contained in:
parent
9d20183e98
commit
08380799eb
|
@ -258,27 +258,34 @@ SENDMOD LDA $C062
|
||||||
*
|
*
|
||||||
* ACIA SEND BYTE IN ACCUMULATOR
|
* ACIA SEND BYTE IN ACCUMULATOR
|
||||||
*
|
*
|
||||||
SENDACC PHP
|
SENDACC ;PHP
|
||||||
SEI ; Disable interrupts
|
;SEI ; Disable interrupts
|
||||||
PHA
|
PHA
|
||||||
LDA SSCSLOT
|
LDA SSCSLOT
|
||||||
ORA #$88+2
|
ORA #$88+2
|
||||||
TAY
|
TAY
|
||||||
LDA #$07
|
;LDA #$07
|
||||||
STA $C002-2,Y ; Enable transmit IRQ
|
;STA $C002-2,Y ; Enable transmit IRQ
|
||||||
LDA $C001-2,Y ; Clear any oustanding interrupts
|
;LDA $C001-2,Y ; Clear any oustanding interrupts
|
||||||
PLA
|
PLA
|
||||||
STA $C000-2,Y ; AVOID PHANTOM READ FROM $C0XX
|
STA $C000-2,Y ; AVOID PHANTOM READ FROM $C0XX
|
||||||
PHA
|
PHA
|
||||||
SENDWT LDA $C001-2,Y
|
TXA
|
||||||
; AND #$80 ; Check IRQ status
|
PHA
|
||||||
BPL SENDWT
|
LDA #$10
|
||||||
LDA #$0B ; Disable transmit IRQ
|
JSR WAIT
|
||||||
STA $C002-2,Y
|
|
||||||
IRQWT LDA $C001-2,Y ; Wait for IRQ to clear
|
|
||||||
BMI IRQWT
|
|
||||||
PLA
|
PLA
|
||||||
PLP ; Restore interrupts
|
TAX
|
||||||
|
;PHA
|
||||||
|
;SENDWT LDA $C001-2,Y
|
||||||
|
;AND #$80 ; Check IRQ status
|
||||||
|
;BPL SENDWT
|
||||||
|
;LDA #$0B ; Disable transmit IRQ
|
||||||
|
;STA $C002-2,Y
|
||||||
|
;IRQWT LDA $C001-2,Y ; Wait for IRQ to clear
|
||||||
|
;BMI IRQWT
|
||||||
|
PLA
|
||||||
|
;PLP ; Restore interrupts
|
||||||
RTS
|
RTS
|
||||||
*
|
*
|
||||||
* ACIA RECEIVE BYTE IN ACCUMULATOR
|
* ACIA RECEIVE BYTE IN ACCUMULATOR
|
||||||
|
|
|
@ -227,27 +227,34 @@ SENDMOD LDA $C062
|
||||||
*
|
*
|
||||||
* ACIA SEND BYTE IN ACCUMULATOR
|
* ACIA SEND BYTE IN ACCUMULATOR
|
||||||
*
|
*
|
||||||
SENDACC PHP
|
SENDACC ;PHP
|
||||||
SEI ; Disable interrupts
|
;SEI ; Disable interrupts
|
||||||
PHA
|
PHA
|
||||||
LDA SSCSLOT
|
LDA SSCSLOT
|
||||||
ORA #$88+2
|
ORA #$88+2
|
||||||
TAY
|
TAY
|
||||||
LDA #$07
|
;LDA #$07
|
||||||
STA $C002-2,Y ; Enable transmit IRQ
|
;STA $C002-2,Y ; Enable transmit IRQ
|
||||||
LDA $C001-2,Y ; Clear any oustanding interrupts
|
;LDA $C001-2,Y ; Clear any oustanding interrupts
|
||||||
PLA
|
PLA
|
||||||
STA $C000-2,Y ; AVOID PHANTOM READ FROM $C0XX
|
STA $C000-2,Y ; AVOID PHANTOM READ FROM $C0XX
|
||||||
; PHA
|
PHA
|
||||||
SENDWT LDA $C001-2,Y
|
TXA
|
||||||
; AND #$80 ; Check IRQ status
|
PHA
|
||||||
BPL SENDWT
|
LDA #$10
|
||||||
LDA #$0B ; Disable transmit IRQ
|
JSR WAIT
|
||||||
STA $C002-2,Y
|
PLA
|
||||||
IRQWT LDA $C001-2,Y ; Wait for IRQ to clear
|
TAX
|
||||||
BMI IRQWT
|
;PHA
|
||||||
; PLA
|
;SENDWT LDA $C001-2,Y
|
||||||
PLP ; Restore interrupts
|
;AND #$80 ; Check IRQ status
|
||||||
|
;BPL SENDWT
|
||||||
|
;LDA #$0B ; Disable transmit IRQ
|
||||||
|
;STA $C002-2,Y
|
||||||
|
;IRQWT LDA $C001-2,Y ; Wait for IRQ to clear
|
||||||
|
;BMI IRQWT
|
||||||
|
PLA
|
||||||
|
;PLP ; Restore interrupts
|
||||||
RTS
|
RTS
|
||||||
*
|
*
|
||||||
* ACIA RECEIVE BYTE IN ACCUMULATOR
|
* ACIA RECEIVE BYTE IN ACCUMULATOR
|
||||||
|
@ -257,7 +264,7 @@ RECVACC ;LDA SSCSLOT
|
||||||
;TAY
|
;TAY
|
||||||
LDY SSCSLOT
|
LDY SSCSLOT
|
||||||
RECVWT ;LDA $C001-2,Y
|
RECVWT ;LDA $C001-2,Y
|
||||||
LDA $C088,Y
|
LDA $C089,Y
|
||||||
AND #$08
|
AND #$08
|
||||||
BEQ RECVWT
|
BEQ RECVWT
|
||||||
;LDA $C000-2,Y
|
;LDA $C000-2,Y
|
||||||
|
@ -276,7 +283,6 @@ CHKEVENT LDA KEYBD ; CHECK FOR KEY PRESS
|
||||||
LDA $C089,Y
|
LDA $C089,Y
|
||||||
AND #$08
|
AND #$08
|
||||||
BEQ CHKMOU
|
BEQ CHKMOU
|
||||||
;LDA $C000-2,Y
|
|
||||||
LDA $C088,Y
|
LDA $C088,Y
|
||||||
JMP HOSTREQ
|
JMP HOSTREQ
|
||||||
CHKMOU DEC WAITEV ; CHECK FOR MOUSE UPDATE
|
CHKMOU DEC WAITEV ; CHECK FOR MOUSE UPDATE
|
||||||
|
|
|
@ -1,9 +1,10 @@
|
||||||
.SUFFIXES =
|
.SUFFIXES =
|
||||||
AFLAGS = -o $@
|
AFLAGS = -o $@
|
||||||
SIROM = SIROM\#062000
|
SIROM = SIROM\#062000
|
||||||
PIROM = PIROM\#062000
|
PIROM = PIROM\#062000
|
||||||
VDRV = PIDRIVE\#062000
|
VDRV = PIDRIVE\#062000
|
||||||
VCLK = PICLOCK\#062000
|
VDRV.WDC = PIDRIVE.WDC\#062000
|
||||||
|
VCLK = PICLOCK\#062000
|
||||||
#
|
#
|
||||||
# Image filetypes for CiderPress
|
# Image filetypes for CiderPress
|
||||||
#
|
#
|
||||||
|
@ -12,7 +13,7 @@ BINTYPE = \#060000
|
||||||
SYSTYPE = \#ff0000
|
SYSTYPE = \#ff0000
|
||||||
TXTTYPE = \#040000
|
TXTTYPE = \#040000
|
||||||
|
|
||||||
all: $(SIROM) $(PIROM) $(VDRV) $(VCLK)
|
all: $(SIROM) $(PIROM) $(VDRV) $(VDRV.WDC) $(VCLK)
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
-rm $(SIROM) $(PIROM) $(VDRV) $(VCLK) *.o *~
|
-rm $(SIROM) $(PIROM) $(VDRV) $(VCLK) *.o *~
|
||||||
|
@ -29,6 +30,10 @@ $(VDRV): pidrive.s
|
||||||
ca65 pidrive.s -o pidrive.o
|
ca65 pidrive.s -o pidrive.o
|
||||||
ld65 -o $(VDRV) -C drvr.cfg pidrive.o
|
ld65 -o $(VDRV) -C drvr.cfg pidrive.o
|
||||||
|
|
||||||
|
$(VDRV.WDC): pidrive.wdc.s
|
||||||
|
ca65 pidrive.wdc.s -o pidrive.wdc.o
|
||||||
|
ld65 -o $(VDRV.WDC) -C drvr.cfg pidrive.wdc.o
|
||||||
|
|
||||||
$(VCLK): piclock.s
|
$(VCLK): piclock.s
|
||||||
ca65 piclock.s -o piclock.o
|
ca65 piclock.s -o piclock.o
|
||||||
ld65 -o $(VCLK) -C drvr.cfg piclock.o
|
ld65 -o $(VCLK) -C drvr.cfg piclock.o
|
||||||
|
|
|
@ -0,0 +1,306 @@
|
||||||
|
.DEFINE EQU =
|
||||||
|
.DEFINE DB .BYTE
|
||||||
|
.DEFINE DW .WORD
|
||||||
|
.CODE
|
||||||
|
PISLOT EQU $00
|
||||||
|
;*
|
||||||
|
;* ACIA REGISTERS
|
||||||
|
;*
|
||||||
|
ACIADR EQU $C088+PISLOT*16
|
||||||
|
ACIASR EQU $C089+PISLOT*16
|
||||||
|
ACIACR EQU $C08A+PISLOT*16
|
||||||
|
ACIAMR EQU $C08B+PISLOT*16
|
||||||
|
;*
|
||||||
|
;* APPLE I/O LOCATIONS
|
||||||
|
;*
|
||||||
|
KEYBD EQU $C000
|
||||||
|
STROBE EQU $C010
|
||||||
|
;*
|
||||||
|
;* UTIL ROUTINES
|
||||||
|
;*
|
||||||
|
WAIT EQU $FCA8
|
||||||
|
COUT EQU $FDED
|
||||||
|
CROUT EQU $FD8E
|
||||||
|
PRBYTE EQU $FDDA
|
||||||
|
PRHEX EQU $FDE3
|
||||||
|
PRNTAX EQU $F941
|
||||||
|
RDKEY EQU $FD0C
|
||||||
|
RDCHAR EQU $FD35
|
||||||
|
GETLN EQU $FD6A
|
||||||
|
;*
|
||||||
|
;* ZERO PAGE PARAMETERS
|
||||||
|
;*
|
||||||
|
PDCMD EQU $42
|
||||||
|
PDUNIT EQU $43
|
||||||
|
PDBUFF EQU $44
|
||||||
|
PDBUFL EQU $44
|
||||||
|
PDBUFH EQU $45
|
||||||
|
PDBLKL EQU $46
|
||||||
|
PDBLKH EQU $47
|
||||||
|
;*
|
||||||
|
;* SLOT INDEX = SLOT # * 16
|
||||||
|
;*
|
||||||
|
SLOTIDX EQU $0300
|
||||||
|
;*
|
||||||
|
;* DRIVER SCRATCHPAD
|
||||||
|
;*
|
||||||
|
TMP EQU $0478+PISLOT
|
||||||
|
PAD0 EQU $0478+PISLOT
|
||||||
|
PAD1 EQU $04F8+PISLOT
|
||||||
|
PAD2 EQU $0578+PISLOT
|
||||||
|
PAD3 EQU $05F8+PISLOT
|
||||||
|
PAD4 EQU $0678+PISLOT
|
||||||
|
PAD5 EQU $06F8+PISLOT
|
||||||
|
PAD6 EQU $0778+PISLOT
|
||||||
|
PAD7 EQU $07F8+PISLOT
|
||||||
|
;*
|
||||||
|
;* PRODOS COMMANDS
|
||||||
|
;*
|
||||||
|
PDSTAT EQU 0
|
||||||
|
PDREAD EQU 1
|
||||||
|
PDWRITE EQU 2
|
||||||
|
PDFORMT EQU 3
|
||||||
|
;*
|
||||||
|
;* PRODOS ERRORS
|
||||||
|
;*
|
||||||
|
PDNOERR EQU $00
|
||||||
|
PDIOERR EQU $27
|
||||||
|
PDNODEV EQU $28
|
||||||
|
PDWRPRT EQU $2B
|
||||||
|
;*
|
||||||
|
;* PRODOS GLOBAL PAGE LOCATIONS
|
||||||
|
;*
|
||||||
|
CLKJMP EQU $BF06
|
||||||
|
DEV1L EQU $BF10
|
||||||
|
DEV1H EQU $BF11
|
||||||
|
DEV2L EQU $BF20
|
||||||
|
DEV2H EQU $BF21
|
||||||
|
DEVCNT EQU $BF31
|
||||||
|
DEVLST EQU $BF32
|
||||||
|
PDTIME EQU $BF90
|
||||||
|
;*
|
||||||
|
;* ZERO PAGE LOCATIONS FOR LOADER
|
||||||
|
;*
|
||||||
|
DSTPTR EQU $06
|
||||||
|
DSTL EQU $06
|
||||||
|
DSTH EQU $07
|
||||||
|
SRCPTR EQU $08
|
||||||
|
SRCL EQU $08
|
||||||
|
SRCH EQU $09
|
||||||
|
;*
|
||||||
|
;* DRIVER LOADER
|
||||||
|
;*
|
||||||
|
DRVRDST EQU $D742
|
||||||
|
DRVRLEN EQU 125
|
||||||
|
LDA SLOTIDX
|
||||||
|
LSR
|
||||||
|
LSR
|
||||||
|
LSR
|
||||||
|
LSR
|
||||||
|
STA SLOTNUM
|
||||||
|
LDA #$60
|
||||||
|
STA CLKJMP ; UNHOOK CLOCK DRIVER (WITH RTS)
|
||||||
|
LDA #<DRVRELOC
|
||||||
|
STA SRCL
|
||||||
|
LDA #>DRVRELOC
|
||||||
|
STA SRCH
|
||||||
|
LDA #<DRVRDST
|
||||||
|
STA DSTL
|
||||||
|
LDA #>DRVRDST
|
||||||
|
STA DSTH
|
||||||
|
LDY #DRVRLEN-1
|
||||||
|
BIT $C08B ; ENABLE LCRAM & WRITE
|
||||||
|
BIT $C08B
|
||||||
|
CPYLP: LDA (SRCPTR),Y
|
||||||
|
STA (DSTPTR),Y
|
||||||
|
DEY
|
||||||
|
BPL CPYLP
|
||||||
|
INY
|
||||||
|
LDX #SFIXUPTBL-IFIXUPTBL-1
|
||||||
|
IFIXLP: LDA IFIXUPTBL,X
|
||||||
|
STA DSTH
|
||||||
|
DEX
|
||||||
|
LDA IFIXUPTBL,X
|
||||||
|
STA DSTL
|
||||||
|
LDA (DSTPTR),Y
|
||||||
|
ORA SLOTIDX
|
||||||
|
STA (DSTPTR),Y
|
||||||
|
DEX
|
||||||
|
BPL IFIXLP
|
||||||
|
LDX #DRVRELOC-SFIXUPTBL-1
|
||||||
|
SFIXLP: LDA SFIXUPTBL,X
|
||||||
|
STA DSTH
|
||||||
|
DEX
|
||||||
|
LDA SFIXUPTBL,X
|
||||||
|
STA DSTL
|
||||||
|
LDA SLOTNUM
|
||||||
|
CLC
|
||||||
|
ADC (DSTPTR),Y
|
||||||
|
STA (DSTPTR),Y
|
||||||
|
DEX
|
||||||
|
BPL SFIXLP
|
||||||
|
BIT $C08A ; EBABLE ROM
|
||||||
|
LDA SLOTNUM
|
||||||
|
ASL
|
||||||
|
TAX
|
||||||
|
LDA DEV1H,X
|
||||||
|
CMP #$DE ; GNODEV
|
||||||
|
BNE INSDEV2
|
||||||
|
LDA #<DRVRDST
|
||||||
|
STA DEV1L,X
|
||||||
|
LDA #>DRVRDST
|
||||||
|
STA DEV1H,X
|
||||||
|
LDY #$00
|
||||||
|
DEV1LP: LDA DEVLST,Y
|
||||||
|
BNE NXTDEV1
|
||||||
|
LDA SLOTIDX
|
||||||
|
ORA #$01
|
||||||
|
STA DEVLST,Y
|
||||||
|
INC DEVCNT
|
||||||
|
INC PIVDCNT
|
||||||
|
BNE INSDEV2
|
||||||
|
NXTDEV1:
|
||||||
|
INY
|
||||||
|
CPY #14
|
||||||
|
BNE DEV1LP
|
||||||
|
BEQ EXIT
|
||||||
|
INSDEV2:
|
||||||
|
LDA DEV2H,X
|
||||||
|
CMP #$DE
|
||||||
|
BNE PRSLOT
|
||||||
|
LDA #<DRVRDST
|
||||||
|
STA DEV2L,X
|
||||||
|
LDA #>DRVRDST
|
||||||
|
STA DEV2H,X
|
||||||
|
INY
|
||||||
|
INCDEV2:
|
||||||
|
LDY #$00
|
||||||
|
DEV2LP: LDA DEVLST,Y
|
||||||
|
BNE NXTDEV2
|
||||||
|
LDA SLOTIDX
|
||||||
|
ORA #$81
|
||||||
|
STA DEVLST,Y
|
||||||
|
INC DEVCNT
|
||||||
|
INC PIVDCNT
|
||||||
|
BNE PRSLOT
|
||||||
|
NXTDEV2:
|
||||||
|
INY
|
||||||
|
CPY #14
|
||||||
|
BNE DEV2LP
|
||||||
|
PRSLOT: LDY PIVDCNT
|
||||||
|
BEQ EXIT ; NOTHING TO BE DONE HERE
|
||||||
|
LDA SLOTNUM
|
||||||
|
ORA #'0'
|
||||||
|
STA DR1
|
||||||
|
STA DR2
|
||||||
|
LDY #$00
|
||||||
|
JSR PRMSG
|
||||||
|
DEC PIVDCNT
|
||||||
|
BEQ EXIT
|
||||||
|
INY
|
||||||
|
PRMSG: LDA MSG,Y
|
||||||
|
BEQ EXIT
|
||||||
|
ORA #$80
|
||||||
|
JSR COUT
|
||||||
|
INY
|
||||||
|
BNE PRMSG
|
||||||
|
EXIT: RTS
|
||||||
|
MSG: DB "PIDRIVES AVAILABLE AT ,S"
|
||||||
|
DR1: DB "0,D1"
|
||||||
|
DB 0
|
||||||
|
DB " AND ,S"
|
||||||
|
DR2: DB "0,D2"
|
||||||
|
DB 0
|
||||||
|
SLOTNUM: DB 0
|
||||||
|
PIVDCNT: DB 0
|
||||||
|
;*
|
||||||
|
;* FIXUP TABLE
|
||||||
|
;*
|
||||||
|
IFIXUPTBL:
|
||||||
|
DW FIXUP1+1
|
||||||
|
DW FIXUP2+1
|
||||||
|
DW FIXUP3+1
|
||||||
|
SFIXUPTBL:
|
||||||
|
DW FIXUP4+1
|
||||||
|
DW FIXUP5+1
|
||||||
|
DRVRELOC:
|
||||||
|
;*
|
||||||
|
;* PRODOS INTELLIGENT DEVICE ENTRYPOINT (OVERWRITE CLOCK DRIVER)
|
||||||
|
;*
|
||||||
|
.ORG DRVRDST
|
||||||
|
DOCMD: LDA PDUNIT
|
||||||
|
ASL
|
||||||
|
LDA PDCMD
|
||||||
|
ROL
|
||||||
|
ASL
|
||||||
|
ORA #$A0
|
||||||
|
PHP
|
||||||
|
FIXUP4: STA PAD0
|
||||||
|
SEI
|
||||||
|
JSR SENDACC
|
||||||
|
LDA PDBLKL
|
||||||
|
JSR SENDACC
|
||||||
|
LDA PDBLKH
|
||||||
|
JSR SENDACC
|
||||||
|
CHKACK: JSR RECVACC
|
||||||
|
TAX
|
||||||
|
DEX
|
||||||
|
FIXUP5: CPX PAD0
|
||||||
|
BNE CHKACK
|
||||||
|
LDY PDCMD
|
||||||
|
BEQ STATUS
|
||||||
|
LDX #$02 ; # OF PAGES TO XFER
|
||||||
|
DEY ; CPY #PDREAD
|
||||||
|
BEQ RDBLK
|
||||||
|
DEY ; CMP #PDWRITE
|
||||||
|
BEQ WRBLK
|
||||||
|
IOERR: LDA #PDIOERR
|
||||||
|
CMDERR: PLP
|
||||||
|
SEC
|
||||||
|
DOCLK: RTS ; NO OP CLOCK ROUTINE
|
||||||
|
STATUS: JSR RECVACC
|
||||||
|
TAX
|
||||||
|
JSR RECVACC
|
||||||
|
TAY
|
||||||
|
CMDEX: JSR RECVACC
|
||||||
|
BNE CMDERR
|
||||||
|
PLP
|
||||||
|
CLC
|
||||||
|
RTS
|
||||||
|
RDBLK: JSR RECVACC
|
||||||
|
STA (PDBUFF),Y
|
||||||
|
INY
|
||||||
|
BNE RDBLK
|
||||||
|
INC PDBUFH
|
||||||
|
DEX
|
||||||
|
BNE RDBLK
|
||||||
|
BEQ CMDEX
|
||||||
|
WRBLK: LDA (PDBUFF),Y
|
||||||
|
JSR SENDACC
|
||||||
|
INY
|
||||||
|
BNE WRBLK
|
||||||
|
INC PDBUFH
|
||||||
|
DEX
|
||||||
|
BNE WRBLK
|
||||||
|
BEQ CMDEX
|
||||||
|
;*
|
||||||
|
;* ACIA I/O ROUTINES
|
||||||
|
;*
|
||||||
|
SENDACC:
|
||||||
|
FIXUP1: STA ACIADR
|
||||||
|
TXA
|
||||||
|
PHA
|
||||||
|
LDA #$10
|
||||||
|
JSR WAIT
|
||||||
|
PLA
|
||||||
|
TAX
|
||||||
|
RTS
|
||||||
|
RECVACC:
|
||||||
|
FIXUP2:
|
||||||
|
RECVWT: LDA ACIASR
|
||||||
|
AND #$08
|
||||||
|
BEQ RECVWT
|
||||||
|
FIXUP3: LDA ACIADR
|
||||||
|
RTS
|
||||||
|
.ASSERT * - DOCMD <= DRVRLEN, error, "Driver too big"
|
||||||
|
.OUT .SPRINTF("Driver size %i", * - DOCMD)
|
Binary file not shown.
Loading…
Reference in New Issue