mirror of
https://github.com/dschmenk/apple2pi.git
synced 2024-06-06 15:29:31 +00:00
Compare commits
6 Commits
92909f2bb7
...
75afd59dcc
Author | SHA1 | Date | |
---|---|---|---|
|
75afd59dcc | ||
|
ff96778044 | ||
|
1c045eac93 | ||
|
08380799eb | ||
|
9d20183e98 | ||
|
01bd0d884d |
|
@ -258,31 +258,38 @@ SENDMOD LDA $C062
|
|||
*
|
||||
* ACIA SEND BYTE IN ACCUMULATOR
|
||||
*
|
||||
SENDACC PHP
|
||||
SEI ; Disable interrupts
|
||||
SENDACC ;PHP
|
||||
;SEI ; Disable interrupts
|
||||
PHA
|
||||
LDA SSCSLOT
|
||||
ORA #$88+1
|
||||
ORA #$88+2
|
||||
TAY
|
||||
LDA #$07
|
||||
STA $C002-1,Y ; Enable transmit IRQ
|
||||
LDA $C001-1,Y ; Clear any oustanding interrupts
|
||||
;LDA #$07
|
||||
;STA $C002-2,Y ; Enable transmit IRQ
|
||||
;LDA $C001-2,Y ; Clear any oustanding interrupts
|
||||
PLA
|
||||
STA $C000-1,Y ; AVOID PHANTOM READ FROM $C0XX
|
||||
SENDWT LDA $C001-1,Y
|
||||
; AND #$80 ; Check IRQ status
|
||||
BPL SENDWT
|
||||
LDA #$0B ; Disable transmit IRQ
|
||||
STA $C002-1,Y
|
||||
PLP ; Restore interrupts
|
||||
STA $C000-2,Y ; AVOID PHANTOM READ FROM $C0XX
|
||||
PHA
|
||||
LDA #$10
|
||||
JSR WAIT
|
||||
;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
|
||||
*
|
||||
* ACIA RECEIVE BYTE IN ACCUMULATOR
|
||||
*
|
||||
RECVACC LDA SSCSLOT
|
||||
ORA #$89+1
|
||||
ORA #$88+2
|
||||
TAY
|
||||
RECVWT LDA $C000-1,Y
|
||||
RECVWT LDA $C001-2,Y
|
||||
AND #$08
|
||||
BEQ RECVWT
|
||||
LDA $C000-2,Y
|
||||
|
@ -294,9 +301,9 @@ CHKEVENT LDA ANYKEY ; CHECK FOR KEY PRESS/RELEASE
|
|||
CMP KEYSTAT
|
||||
BNE SENDKEY
|
||||
LDA SSCSLOT ; CHECK FOR INPUT TO ACIA
|
||||
ORA #$89+1
|
||||
ORA #$88+2
|
||||
TAY
|
||||
LDA $C000-1,Y
|
||||
LDA $C001-2,Y
|
||||
AND #$08
|
||||
BEQ CHKMOU
|
||||
LDA $C000-2,Y
|
||||
|
|
|
@ -227,47 +227,59 @@ SENDMOD LDA $C062
|
|||
*
|
||||
* ACIA SEND BYTE IN ACCUMULATOR
|
||||
*
|
||||
SENDACC PHP
|
||||
SEI ; Disable interrupts
|
||||
SENDACC ;PHP
|
||||
;SEI ; Disable interrupts
|
||||
PHA
|
||||
LDA SSCSLOT
|
||||
ORA #$88+1
|
||||
ORA #$88+2
|
||||
TAY
|
||||
LDA #$07
|
||||
STA $C002-1,Y ; Enable transmit IRQ
|
||||
LDA $C001-1,Y ; Clear any oustanding interrupts
|
||||
;LDA #$07
|
||||
;STA $C002-2,Y ; Enable transmit IRQ
|
||||
;LDA $C001-2,Y ; Clear any oustanding interrupts
|
||||
PLA
|
||||
STA $C000-1,Y ; AVOID PHANTOM READ FROM $C0XX
|
||||
SENDWT LDA $C001-1,Y
|
||||
; AND #$80 ; Check IRQ status
|
||||
BPL SENDWT
|
||||
LDA #$0B ; Disable transmit IRQ
|
||||
STA $C002-1,Y
|
||||
PLP ; Restore interrupts
|
||||
STA $C000-2,Y ; AVOID PHANTOM READ FROM $C0XX
|
||||
PHA
|
||||
LDA #$10
|
||||
JSR WAIT
|
||||
;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
|
||||
*
|
||||
* ACIA RECEIVE BYTE IN ACCUMULATOR
|
||||
*
|
||||
RECVACC LDA SSCSLOT
|
||||
ORA #$89+1
|
||||
TAY
|
||||
RECVWT LDA $C000-1,Y
|
||||
RECVACC ;LDA SSCSLOT
|
||||
;ORA #$88+2
|
||||
;TAY
|
||||
LDY SSCSLOT
|
||||
RECVWT ;LDA $C001-2,Y
|
||||
LDA $C089,Y
|
||||
AND #$08
|
||||
BEQ RECVWT
|
||||
LDA $C000-2,Y
|
||||
;LDA $C000-2,Y
|
||||
LDA $C088,Y
|
||||
RTS
|
||||
*
|
||||
* CHECK INPUT STATE FOR CHANGE
|
||||
*
|
||||
CHKEVENT LDA KEYBD ; CHECK FOR KEY PRESS
|
||||
BMI SENDKEY
|
||||
LDA SSCSLOT ; CHECK FOR INPUT TO ACIA
|
||||
ORA #$89+1
|
||||
TAY
|
||||
LDA $C000-1,Y
|
||||
LDY SSCSLOT
|
||||
;LDA SSCSLOT ; CHECK FOR INPUT TO ACIA
|
||||
;ORA #$88+2
|
||||
;TAY
|
||||
;LDA $C001-2,Y
|
||||
LDA $C089,Y
|
||||
AND #$08
|
||||
BEQ CHKMOU
|
||||
LDA $C000-2,Y
|
||||
LDA $C088,Y
|
||||
JMP HOSTREQ
|
||||
CHKMOU DEC WAITEV ; CHECK FOR MOUSE UPDATE
|
||||
BEQ UPDTMOU
|
||||
|
|
|
@ -1,9 +1,10 @@
|
|||
.SUFFIXES =
|
||||
AFLAGS = -o $@
|
||||
SIROM = SIROM\#062000
|
||||
PIROM = PIROM\#062000
|
||||
VDRV = PIDRIVE\#062000
|
||||
VCLK = PICLOCK\#062000
|
||||
SIROM = SIROM\#062000
|
||||
PIROM = PIROM\#062000
|
||||
VDRV = PIDRIVE\#062000
|
||||
VDRV.WDC = PIDRIVE.WDC\#062000
|
||||
VCLK = PICLOCK\#062000
|
||||
#
|
||||
# Image filetypes for CiderPress
|
||||
#
|
||||
|
@ -12,7 +13,7 @@ BINTYPE = \#060000
|
|||
SYSTYPE = \#ff0000
|
||||
TXTTYPE = \#040000
|
||||
|
||||
all: $(SIROM) $(PIROM) $(VDRV) $(VCLK)
|
||||
all: $(SIROM) $(PIROM) $(VDRV) $(VDRV.WDC) $(VCLK)
|
||||
|
||||
clean:
|
||||
-rm $(SIROM) $(PIROM) $(VDRV) $(VCLK) *.o *~
|
||||
|
@ -29,6 +30,10 @@ $(VDRV): pidrive.s
|
|||
ca65 pidrive.s -o 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
|
||||
ca65 piclock.s -o piclock.o
|
||||
ld65 -o $(VCLK) -C drvr.cfg piclock.o
|
||||
|
|
308
pidrive/pidrive.wdc.s
Executable file
308
pidrive/pidrive.wdc.s
Executable file
|
@ -0,0 +1,308 @@
|
|||
.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 FIXUP2+1
|
||||
DW FIXUP3+1
|
||||
DW FIXUP4+1
|
||||
SFIXUPTBL:
|
||||
DW FIXUP5+1
|
||||
DW FIXUP6+1
|
||||
DRVRELOC:
|
||||
;*
|
||||
;* PRODOS INTELLIGENT DEVICE ENTRYPOINT (OVERWRITE CLOCK DRIVER)
|
||||
;*
|
||||
.ORG DRVRDST
|
||||
DOCMD: LDA PDUNIT
|
||||
ASL
|
||||
LDA PDCMD
|
||||
ROL
|
||||
ASL
|
||||
ORA #$A0
|
||||
PHP
|
||||
FIXUP5: STA PAD0
|
||||
SEI
|
||||
JSR SENDACC
|
||||
LDA PDBLKL
|
||||
JSR SENDACC
|
||||
LDA PDBLKH
|
||||
JSR SENDACC
|
||||
CHKACK: JSR RECVACC
|
||||
TAX
|
||||
DEX
|
||||
FIXUP6: 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:
|
||||
FIXUP2: STA ACIADR
|
||||
LDA #$FF
|
||||
SEC
|
||||
;SNDWT1: PHA
|
||||
SNDWT2: SBC #$01
|
||||
BNE SNDWT2
|
||||
; PLA
|
||||
; SBC #$01
|
||||
; BNE SNDWT1
|
||||
RTS
|
||||
RECVACC:
|
||||
FIXUP3:
|
||||
RECVWT: LDA ACIASR
|
||||
AND #$08
|
||||
BEQ RECVWT
|
||||
FIXUP4: 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
Block a user