mirror of
https://github.com/dschmenk/apple2pi.git
synced 2025-02-17 05:30:59 +00:00
Working PiDrive
Apple 3 PiDrive driver. Apple2 PiDrive driver can mount under Linux
This commit is contained in:
parent
bf07a8c365
commit
f683d6a051
1
client/BUILD/PIDRIVE.TEXT#040000
Executable file
1
client/BUILD/PIDRIVE.TEXT#040000
Executable file
File diff suppressed because one or more lines are too long
@ -1,2 +0,0 @@
|
||||
LIST
|
||||
]
|
BIN
client/PICLOCK#062000
Executable file
BIN
client/PICLOCK#062000
Executable file
Binary file not shown.
BIN
client/PIDRIVE.A3DRVR#050000
Executable file
BIN
client/PIDRIVE.A3DRVR#050000
Executable file
Binary file not shown.
@ -1,32 +0,0 @@
|
||||
NEW
|
||||
|
||||
REM LOAD PIDRIVE AND APPLY FIXUPS
|
||||
|
||||
300 PRINT CHR$ (4);"BLOAD PIDRIVE.A2DRVR"
|
||||
310 VE = 816 : FX = VE + 4 : SI = PEEK(768) : SN = SI / 8
|
||||
|
||||
REM CHECK IF PRODOS DEVICE VECTOR SET
|
||||
|
||||
320 IF PEEK(48913 + SN) = 222 THEN POKE 48912 + SN, PEEK(VE) : POKE 48913 + SN, PEEK (VE + 1)
|
||||
330 IF PEEK(48929 + SN) = 222 THEN POKE 48928 + SN, PEEK(VE) : POKE 48929 + SN, PEEK (VE + 1)
|
||||
340 FOR D = 48946 TO 48959
|
||||
350 IF PEEK (D) = 0 THEN POKE D, SI + 1 : POKE 48945, PEEK (48945) + 1 : D = 48960
|
||||
360 NEXT
|
||||
370 FOR D = 48946 TO 48959
|
||||
380 IF PEEK (D) = 0 THEN POKE D, SI + 1 : POKE 48945, PEEK (48945) + 129 : D = 48960
|
||||
390 NEXT
|
||||
395 PRINT "PIDRIVE CONNECTED ON SLOT #"; SN / 2
|
||||
|
||||
REM INSERT CLOCK DRIVER
|
||||
|
||||
400 POKE 48903, PEEK (VE + 2) : POKE 48904, PEEK (VE + 3)
|
||||
405 PRINT "PICLOCK CONNECTED"
|
||||
|
||||
REM RUN THROUGH FIXUP TABLE
|
||||
|
||||
410 AA = PEEK (FX) : IF AA = 0 THEN NEW : END
|
||||
420 AA = AA + PEEK (FX + 1) * 256 : FX = FX + 2
|
||||
430 POKE AA, PEEK (AA) + SI
|
||||
440 GOTO 410
|
||||
|
||||
]
|
@ -1,66 +0,0 @@
|
||||
NEW
|
||||
|
||||
10 PRINT
|
||||
11 PRINT "STARTING APPLE II PI CLIENT."
|
||||
12 PRINT "PRESS ANY KEY TO CANCEL..."
|
||||
|
||||
REM ALLOCATE BASIC BUFFER SPACE
|
||||
|
||||
20 PRINT CHR$ (4);"BLOAD DEFSLOT"
|
||||
30 CALL 769
|
||||
|
||||
REM LOAD APPROPRIATE CLIENT
|
||||
|
||||
40 A2$ = "A2PI" : IF PEEK (64435) < > 6 THEN A2$ = "A2PLUSPI"
|
||||
50 PRINT CHR$ (4);"BLOAD ";A2$
|
||||
|
||||
REM IF DEFAULT SLOT NOT SET, SEARCH FOR SSC
|
||||
|
||||
60 IF PEEK (768) = 0 THEN GOSUB 100
|
||||
65 POKE 769,0
|
||||
|
||||
REM INIT A2PI DRIVER
|
||||
|
||||
70 PRINT CHR$ (4);"PR# A$9600"
|
||||
80 IF PEEK (769) < > 0 THEN PRINT "APPLE II PI CONNECTED." : PRINT "KEYBOARD ROUTED TO LINUX" : GOSUB 300
|
||||
90 NEW : END
|
||||
|
||||
REM SEARCH FOR SSC
|
||||
|
||||
100 SC = 0 : PI = 0
|
||||
110 FOR S = 1 TO 7
|
||||
120 FW = 49152 + 256 * S
|
||||
130 IF PEEK (FW + 5) = 56 AND PEEK (FW + 7) = 24 AND PEEK (FW + 12) = 49 THEN SC = S : PRINT "FOUND SERIAL CARD: SLOT #";S
|
||||
150 NEXT
|
||||
160 IF SC < > 0 THEN POKE 768,SC * 16: RETURN
|
||||
|
||||
REM NOTHING FOUND. LOW BUZZ TO SIGNIFY CONFIG NEEDED
|
||||
|
||||
200 FOR S = 1 TO 100 : SP = PEEK (49200): NEXT
|
||||
210 POP : PRINT CHR$ (4);"RUN CONFIG"
|
||||
220 END
|
||||
|
||||
REM LOAD PIDRIVE AND APPLY FIXUPS
|
||||
|
||||
300 PRINT CHR$ (4);"BLOAD PIDRIVE"
|
||||
310 VE = 816 : FX = VE + 4 : SI = PEEK(768) : SN = SI / 8
|
||||
|
||||
REM CHECK IF PRODOS DEVICE VECTOR SET
|
||||
|
||||
320 IF PEEK(48913 + SN) = 222 THEN POKE 48912 + SN, PEEK(VE) : POKE 48913 + SN, PEEK (VE + 1)
|
||||
330 IF PEEK(48929 + SN) = 222 THEN POKE 48928 + SN, PEEK(VE) : POKE 48929 + SN, PEEK (VE + 1)
|
||||
335 PRINT "PIDRIVE CONNECTED ON SLOT #"; SN / 2
|
||||
|
||||
REM INSERT CLOCK DRIVER
|
||||
|
||||
340 POKE 48903 + SN, PEEK (VE + 2) : POKE 48904 + SN, PEEK (VE + 3)
|
||||
345 PRINT "PICLOCK CONNECTED"
|
||||
|
||||
REM RUN THROUGH FIXUP TABLE
|
||||
|
||||
350 AA = PEEK (FX) + PEEK (FX + 1) * 256 : FX = FX + 2
|
||||
360 IF AA = 0 THEN RETURN
|
||||
370 POKE AA, PEEK (AA) + SI
|
||||
380 GOTO 350
|
||||
|
||||
]
|
Binary file not shown.
2
debian/changelog
vendored
2
debian/changelog
vendored
@ -2,6 +2,8 @@ a2pi (0.1.8-2) unstable; urgency=low
|
||||
|
||||
* Fix FUSE create file function
|
||||
* Add VSDRIVE functionality
|
||||
* Fix recursive call request (FUSE mount w/ pidrive active)
|
||||
* Fix symlinks for A2VDx.PO updating
|
||||
|
||||
-- David Schmenk <dschmenk@gmail.com> Tue, 04 Feb 2014 13:43:53 -0800
|
||||
|
||||
|
12
debian/postinst
vendored
12
debian/postinst
vendored
@ -58,12 +58,18 @@ case "$1" in
|
||||
sed 's/^#user_allow_other/user_allow_other/' /etc/fuse.conf.bak > /etc/fuse.conf
|
||||
fi
|
||||
#
|
||||
# Set up VSDRIVEs
|
||||
# Set up PIDRIVEs
|
||||
#
|
||||
if [ ! -e /usr/share/a2pi/A2VD1.PO ] ; then
|
||||
if [ ! -s /usr/share/a2pi/A2VD1.PO ] ; then
|
||||
if [ -e /usr/share/a2pi/A2VD1.PO ] || [ -L /usr/share/a2pi/A2VD1.PO ] ;then
|
||||
rm /usr/share/a2pi/A2VD1.PO
|
||||
fi
|
||||
ln -s /usr/share/a2pi/A2PI-1.4.PO /usr/share/a2pi/A2VD1.PO
|
||||
fi
|
||||
if [ ! -e /usr/share/a2pi/A2VD2.PO ] ; then
|
||||
if [ ! -s /usr/share/a2pi/A2VD2.PO ] ; then
|
||||
if [ -e /usr/share/a2pi/A2VD2.PO ] || [ -L /usrshare/a2pi/A2VD2.PO ] ; then
|
||||
rm /usr/share/a2pi/A2VD2.PO
|
||||
fi
|
||||
ln -s /usr/share/a2pi/BLANK.PO /usr/share/a2pi/A2VD2.PO
|
||||
fi
|
||||
#
|
||||
|
Binary file not shown.
Binary file not shown.
@ -1,7 +1,8 @@
|
||||
.SUFFIXES =
|
||||
AFLAGS = -o $@
|
||||
ROM = ROM\#062000
|
||||
DRVR = PIDRIVE\#062000
|
||||
VDRV = PIDRIVE\#062000
|
||||
VCLK = PICLOCK\#062000
|
||||
#
|
||||
# Image filetypes for CiderPress
|
||||
#
|
||||
@ -10,12 +11,16 @@ BINTYPE = \#060000
|
||||
SYSTYPE = \#ff0000
|
||||
TXTTYPE = \#040000
|
||||
|
||||
all: $(ROM) $(DRVR)
|
||||
all: $(ROM) $(VDRV) $(VCLK)
|
||||
|
||||
$(ROM): rom.s
|
||||
ca65 rom.s -o rom.o
|
||||
ld65 -o $(ROM) -C rom.cfg rom.o
|
||||
|
||||
$(DRVR): pidrive.s
|
||||
$(VDRV): pidrive.s
|
||||
ca65 pidrive.s -o pidrive.o
|
||||
ld65 -o $(DRVR) -C drvr.cfg pidrive.o
|
||||
ld65 -o $(VDRV) -C drvr.cfg pidrive.o
|
||||
|
||||
$(VCLK): piclock.s
|
||||
ca65 piclock.s -o piclock.o
|
||||
ld65 -o $(VCLK) -C drvr.cfg piclock.o
|
||||
|
248
pidrive/piclock.s
Executable file
248
pidrive/piclock.s
Executable file
@ -0,0 +1,248 @@
|
||||
.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 #$4C
|
||||
STA CLKJMP ; HOOK CLOCK DRIVER (WITH JMP)
|
||||
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 SLOTIDX
|
||||
LSR
|
||||
LSR
|
||||
LSR
|
||||
LSR
|
||||
CLC
|
||||
ADC (DSTPTR),Y
|
||||
STA (DSTPTR),Y
|
||||
DEX
|
||||
BPL SFIXLP
|
||||
BIT $C08A ; EBABLE ROM
|
||||
LDA SLOTIDX
|
||||
LSR
|
||||
LSR
|
||||
LSR
|
||||
TAX
|
||||
LDA DEV1H,X
|
||||
CMP #$DE ; GNODEV
|
||||
BNE INSDEV2
|
||||
LDA #<DRVRDST
|
||||
STA DEV1L,X
|
||||
LDA #>DRVRDST
|
||||
STA DEV1H,X
|
||||
INY
|
||||
INSDEV2:
|
||||
LDA DEV2H,X
|
||||
CMP #$DE
|
||||
BNE INCDEV1
|
||||
LDA #<DRVRDST
|
||||
STA DEV2L,X
|
||||
LDA #>DRVRDST
|
||||
STA DEV2H,X
|
||||
INY
|
||||
INCDEV1:
|
||||
CPY #$00
|
||||
BEQ EXIT ; NOTHING TO BE DONE HERE
|
||||
LDX #$00
|
||||
DEV1LP: LDA DEVLST,X
|
||||
BNE NXTDEV1
|
||||
LDA SLOTIDX
|
||||
ORA #$01
|
||||
STA DEVLST,X
|
||||
INC DEVCNT
|
||||
BNE INCDEV2
|
||||
NXTDEV1:
|
||||
INX
|
||||
CPX #14
|
||||
BNE DEV1LP
|
||||
INCDEV2:
|
||||
LDX #$00
|
||||
DEV2LP: LDA DEVLST,X
|
||||
BNE NXTDEV2
|
||||
LDA SLOTIDX
|
||||
ORA #$81
|
||||
STA DEVLST,X
|
||||
INC DEVCNT
|
||||
BNE EXIT
|
||||
NXTDEV2:
|
||||
INX
|
||||
CPX #14
|
||||
BNE DEV2LP
|
||||
EXIT: RTS
|
||||
;*
|
||||
;* FIXUP TABLE
|
||||
;*
|
||||
IFIXUPTBL:
|
||||
DW FIXUP1+1
|
||||
DW FIXUP2+1
|
||||
DW FIXUP3+1
|
||||
DW FIXUP4+1
|
||||
SFIXUPTBL:
|
||||
DW FIXUP5+1
|
||||
DW FIXUP6+1
|
||||
DRVRELOC:
|
||||
;*
|
||||
;* PRODOS CLOCK ROUTINE
|
||||
;*
|
||||
.ORG DRVRDST
|
||||
DOCLK: LDA #$AC
|
||||
PHP
|
||||
FIXUP5: STA PAD0
|
||||
SEI
|
||||
JSR SENDACC
|
||||
TXA
|
||||
JSR SENDACC
|
||||
TYA
|
||||
JSR SENDACC
|
||||
CHKACK: JSR RECVACC
|
||||
TAX
|
||||
DEX
|
||||
FIXUP6: CPX PAD0
|
||||
BNE CHKACK
|
||||
LDY #$00
|
||||
CLKLP: JSR RECVACC
|
||||
STA PDTIME,Y
|
||||
INY
|
||||
CPY #$04
|
||||
BNE CLKLP
|
||||
PLP
|
||||
RTS
|
||||
;*
|
||||
;* ACIA I/O ROUTINES
|
||||
;*
|
||||
SENDACC:
|
||||
PHA
|
||||
FIXUP1:
|
||||
SENDWT: LDA ACIASR
|
||||
AND #$10
|
||||
BEQ SENDWT
|
||||
PLA
|
||||
FIXUP2: STA ACIADR
|
||||
RTS
|
||||
RECVACC:
|
||||
FIXUP3:
|
||||
RECVWT: LDA ACIASR
|
||||
AND #$08
|
||||
BEQ RECVWT
|
||||
FIXUP4: LDA ACIADR
|
||||
RTS
|
@ -70,7 +70,7 @@ PDWRPRT EQU $2B
|
||||
;*
|
||||
;* PRODOS GLOBAL PAGE LOCATIONS
|
||||
;*
|
||||
CLKJSR EQU $BF06
|
||||
CLKJMP EQU $BF06
|
||||
DEV1L EQU $BF10
|
||||
DEV1H EQU $BF11
|
||||
DEV2L EQU $BF20
|
||||
@ -93,7 +93,7 @@ SRCH EQU $09
|
||||
DRVRDST EQU $D742
|
||||
DRVRLEN EQU 125
|
||||
LDA #$60
|
||||
STA CLKJSR ; UNHOOK CLOCK DRIVER (WITH RTS)
|
||||
STA CLKJMP ; UNHOOK CLOCK DRIVER (WITH RTS)
|
||||
LDA #<DRVRELOC
|
||||
STA SRCL
|
||||
LDA #>DRVRELOC
|
||||
|
@ -1,172 +0,0 @@
|
||||
.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
|
||||
;*
|
||||
;* 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
|
||||
;*
|
||||
PDTIME EQU $BF90
|
||||
;*
|
||||
;* VECTORS
|
||||
;*
|
||||
;VECTBL: DB >DOCMD
|
||||
; DB >DOCLK
|
||||
; DB >FIXUP1+1
|
||||
; DB >FIXUP2+1
|
||||
; DB >FIXUP3+1
|
||||
; DB >FIXUP4+1
|
||||
;TMP: DB 0
|
||||
;*
|
||||
;* PRODOS INTELLIGENT DEVICE ENTRYPOINT
|
||||
;*
|
||||
DOCMD: LDA PDUNIT
|
||||
ASL
|
||||
LDA PDCMD
|
||||
ROL
|
||||
ASL
|
||||
ORA #$A0
|
||||
LDX PDBLKL
|
||||
LDY PDBLKH
|
||||
PHP
|
||||
JSR SENDCMD
|
||||
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
|
||||
RTS
|
||||
RDBLK: JSR RECVACC
|
||||
STA (PDBUFF),Y
|
||||
INY
|
||||
BNE RDBLK
|
||||
INC PDBUFH
|
||||
DEX
|
||||
BNE RDBLK
|
||||
STATUS: LDX #$FF
|
||||
DEY ; LDY #$FF
|
||||
CMDEX: JSR RECVACC
|
||||
BNE CMDERR
|
||||
PLP
|
||||
CLC
|
||||
RTS
|
||||
WRBLK: LDA (PDBUFF),Y
|
||||
JSR SENDACC
|
||||
INY
|
||||
BNE WRBLK
|
||||
INC PDBUFH
|
||||
DEX
|
||||
BNE WRBLK
|
||||
BEQ CMDEX
|
||||
;*
|
||||
;* PRODOS CLOCK ROUTINE
|
||||
;*
|
||||
;DOCLK: LDA #$AC
|
||||
; PHP
|
||||
; JSR SENDCMD
|
||||
; LDY #$00
|
||||
;CLKLP: JSR RECVACC
|
||||
; STA PDTIME,Y
|
||||
; INY
|
||||
; CPY #$04
|
||||
; BNE CLKLP
|
||||
; PLP
|
||||
; RTS
|
||||
;*
|
||||
;* ACIA I/O ROUTINES
|
||||
;*
|
||||
SENDCMD:
|
||||
STA TMP
|
||||
SEI
|
||||
JSR SENDACC
|
||||
TXA
|
||||
JSR SENDACC
|
||||
TYA
|
||||
JSR SENDACC
|
||||
CHKACK: JSR RECVACC
|
||||
TAX
|
||||
DEX
|
||||
CPX TMP
|
||||
BNE CHKACK
|
||||
GOTACK: RTS
|
||||
SENDACC:
|
||||
PHA
|
||||
FIXUP1:
|
||||
SENDWT: LDA ACIASR
|
||||
AND #$10
|
||||
BEQ SENDWT
|
||||
PLA
|
||||
FIXUP2: STA ACIADR
|
||||
RTS
|
||||
RECVACC:
|
||||
FIXUP3:
|
||||
RECVWT: LDA ACIASR
|
||||
AND #$08
|
||||
BEQ RECVWT
|
||||
FIXUP4: LDA ACIADR
|
||||
RTS
|
Binary file not shown.
13
src/a2pid.c
13
src/a2pid.c
@ -33,7 +33,7 @@
|
||||
* Apple II request entry
|
||||
*/
|
||||
#define MAX_XFER 64
|
||||
|
||||
#define AWAIT_COMPLETE 0x100
|
||||
struct a2request {
|
||||
int idx;
|
||||
int type;
|
||||
@ -1037,6 +1037,7 @@ reset:
|
||||
state = RESET;
|
||||
newtio.c_cc[VMIN] = 3; /* blocking read until 3 chars received */
|
||||
tcsetattr(a2fd, TCSANOW, &newtio);
|
||||
a2reqlist->type |= AWAIT_COMPLETE;
|
||||
}
|
||||
else
|
||||
state = RESET;
|
||||
@ -1088,7 +1089,7 @@ reset:
|
||||
write(a2fd, &iopkt[3], 1);
|
||||
iopkt[0] = vdrvstatus((iopkt[0] >> 1) & 0x01);
|
||||
write(a2fd, iopkt, 1);
|
||||
if (a2reqlist) /* resend last request */
|
||||
if (a2reqlist && !(a2reqlist->type & AWAIT_COMPLETE)) /* resend last request */
|
||||
write(a2fd, &(a2reqlist->type), 1);
|
||||
break;
|
||||
case 0xA4: /* virtual drive 1 READ call */
|
||||
@ -1097,8 +1098,8 @@ reset:
|
||||
iopkt[3] = iopkt[0] + 1; /* ack */
|
||||
write(a2fd, &iopkt[3], 1);
|
||||
iopkt[0] = vdrvread(a2fd, (iopkt[0] >> 1) & 0x01, iopkt[1] | (iopkt[2] << 8));
|
||||
write(a2fd, iopkt, 1);
|
||||
if (a2reqlist) /* resend last request */
|
||||
write(a2fd, iopkt, 1);
|
||||
if (a2reqlist && !(a2reqlist->type & AWAIT_COMPLETE)) /* resend last request */
|
||||
write(a2fd, &(a2reqlist->type), 1);
|
||||
break;
|
||||
case 0xA8: /* virtual drive 1 WRITE call */
|
||||
@ -1112,7 +1113,7 @@ reset:
|
||||
write(a2fd, iopkt, 1);
|
||||
newtio.c_cc[VMIN] = 3; /* blocking read until 3 chars received */
|
||||
tcsetattr(a2fd, TCSANOW, &newtio);
|
||||
if (a2reqlist) /* resend last request */
|
||||
if (a2reqlist && !(a2reqlist->type & AWAIT_COMPLETE)) /* resend last request */
|
||||
write(a2fd, &(a2reqlist->type), 1);
|
||||
break;
|
||||
case 0xAC: /* virtual clock TIME call */
|
||||
@ -1120,7 +1121,7 @@ reset:
|
||||
iopkt[3] = 0xAD; /* ack */
|
||||
write(a2fd, &iopkt[3], 1);
|
||||
write(a2fd, prodos_time(), 4);
|
||||
if (a2reqlist) /* resend last request */
|
||||
if (a2reqlist && !(a2reqlist->type & AWAIT_COMPLETE)) /* resend last request */
|
||||
write(a2fd, &(a2reqlist->type), 1);
|
||||
break;
|
||||
default:
|
||||
|
Loading…
x
Reference in New Issue
Block a user