From 08380799eba43f23b4a60938f5e096dc53790a65 Mon Sep 17 00:00:00 2001 From: David Schmenk Date: Sun, 2 Apr 2023 17:29:08 -0700 Subject: [PATCH] Switch to simple delay. Don't forget pidrive! --- client/BUILD/a2pi.wdc.s | 33 ++-- client/BUILD/a2pluspi.wdc.s | 40 +++-- pidrive/Makefile | 15 +- pidrive/pidrive.wdc.s | 306 ++++++++++++++++++++++++++++++++++++ share/A2PI-WDC.1.7.PO | Bin 143360 -> 143360 bytes 5 files changed, 359 insertions(+), 35 deletions(-) create mode 100755 pidrive/pidrive.wdc.s diff --git a/client/BUILD/a2pi.wdc.s b/client/BUILD/a2pi.wdc.s index 7e2bc20..3475d3f 100755 --- a/client/BUILD/a2pi.wdc.s +++ b/client/BUILD/a2pi.wdc.s @@ -258,27 +258,34 @@ SENDMOD LDA $C062 * * ACIA SEND BYTE IN ACCUMULATOR * -SENDACC PHP - SEI ; Disable interrupts +SENDACC ;PHP + ;SEI ; Disable interrupts PHA LDA SSCSLOT ORA #$88+2 TAY - LDA #$07 - STA $C002-2,Y ; Enable transmit IRQ - LDA $C001-2,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-2,Y ; AVOID PHANTOM READ FROM $C0XX 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 + TXA + PHA + LDA #$10 + JSR WAIT 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 * * ACIA RECEIVE BYTE IN ACCUMULATOR diff --git a/client/BUILD/a2pluspi.wdc.s b/client/BUILD/a2pluspi.wdc.s index 9622f54..f9f92c8 100755 --- a/client/BUILD/a2pluspi.wdc.s +++ b/client/BUILD/a2pluspi.wdc.s @@ -227,27 +227,34 @@ SENDMOD LDA $C062 * * ACIA SEND BYTE IN ACCUMULATOR * -SENDACC PHP - SEI ; Disable interrupts +SENDACC ;PHP + ;SEI ; Disable interrupts PHA LDA SSCSLOT ORA #$88+2 TAY - LDA #$07 - STA $C002-2,Y ; Enable transmit IRQ - LDA $C001-2,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-2,Y ; AVOID PHANTOM READ FROM $C0XX -; 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 + PHA + TXA + PHA + LDA #$10 + JSR WAIT + PLA + 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 * * ACIA RECEIVE BYTE IN ACCUMULATOR @@ -257,7 +264,7 @@ RECVACC ;LDA SSCSLOT ;TAY LDY SSCSLOT RECVWT ;LDA $C001-2,Y - LDA $C088,Y + LDA $C089,Y AND #$08 BEQ RECVWT ;LDA $C000-2,Y @@ -276,7 +283,6 @@ CHKEVENT LDA KEYBD ; CHECK FOR KEY PRESS LDA $C089,Y AND #$08 BEQ CHKMOU - ;LDA $C000-2,Y LDA $C088,Y JMP HOSTREQ CHKMOU DEC WAITEV ; CHECK FOR MOUSE UPDATE diff --git a/pidrive/Makefile b/pidrive/Makefile index 54e01b4..4abe14a 100755 --- a/pidrive/Makefile +++ b/pidrive/Makefile @@ -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 diff --git a/pidrive/pidrive.wdc.s b/pidrive/pidrive.wdc.s new file mode 100755 index 0000000..5ca592a --- /dev/null +++ b/pidrive/pidrive.wdc.s @@ -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 SRCH + 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 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 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) diff --git a/share/A2PI-WDC.1.7.PO b/share/A2PI-WDC.1.7.PO index a6a2b3a79da942099023ca125abf01e7fb8d8e83..afeef2115523eefdd235a2c74dd29f957d588238 100644 GIT binary patch delta 2393 zcmd6n{ZmtC7RT=;;od-r-YBgR6faa~U2q=r2v*ru1do=}%=k zor2V4Y{tt755vuIce|JwqH(yil^>Sab&a#TBheBrz9LFR(V&3z_HCveTkUynK&0&- z&^yn4=G=3>&v~Al=X}yUZfYJkee$$XXwPC=3apk#nF&TWh|9P_7!!Zte8-r#F4I-H zsiyKTn+xhTRWSH)uP`k04;Gax^yLCI$p4KlmLZQMi-wkhOtK;QDPd0%<5-oQW@08- zQ%k{W3)!9gvhbw=*R3(rZ97{ER$9nU$*U|k7CAF4NqrX6dG@f$XlzeS=`*L@-oHFvzn9_}1sdArNu zGK+Rn+W%yl-MOh;d~~g?ggTo0*Rgg|?tk?$aa(=4S#&vYN(c&VX0fWaMyxBZ+=c-s z2DX*g<07iDlcnK@lQ6+?|LP_7jV`BHySaK(9SZGaYdBl5*KR8p*H+kUMeB?5x1;?1 z@cL!;jn7nyl{L>&nV!#1{vEC+Cx+9>8~rJL$01obeCQ8Le$S`fN1UH6C$Ap4O9uDx zeeZv^V_AEZz-ALm)fzUL6joXJ)!82YQ?Y-5neOXHA=kMsq^`EEWspq@||gLDN{)?ME-4qATKO3~-< zS{7nOA9-`e`VfAspdbF8E2Jr&Wjp|A?2l(Iy#?wj zFTN!=IB>$D%z|oFm`L;k%@QS=ImAjgK_2jQC^6oD$hq= z%ZoUaE0E$l*Z_BrIqp}b!QFEO!ima+u`+lr+lKot4qeVK{jnS5$Yk-F>mXeRt2_EP zl@|{{NGf%YeIjegCx!2A=|_*tftyK2b!pFavV5wb$>-l&gT)Is8l|fc{@y5ELz{PW zJsfJr!YNn5d<`^9Xcw)=RiN`VI^&WCXyo&n2PZHrO+d(tUh!pFnV?~-yLSw<9~|AB zGzHzfGz}rf!+H5nISp`I_m)F_TZZj&+v9!{AC4`1r084|-QdpIAp(cpbf-H_ri z=aMF2b`q#N$hA&EkZ+xa=w3BD&?X-BizEI3v!BDoaSrRu$Ks%Bu}M&;wc=>In$s8{ z^D4~Vw3GXlOo(=9#^^qE-JzRQISPS~>P-&1cf;JfaA>S@r4MYAjotAwIv?bCvhRSZ~TZ3{Fq^}Lw z#0++)bPJq5{~H`)u(my(zws2MAeNxu^FJ;=w?xrUjJ#7pBIEbel}cbXsp*A?kdBB7OT_^8vveM$3lK7wx?4{} zsD=LUzso+WGbneZ<5CX=E2e`rq=Tg{faUQkLts`DU}3d}fYwZhH=gHDfzKASrTI|yYn8KTyV@kg>rzgSG@(*Ue`q%7N?6N1x H)12jJeI_wx delta 2205 zcmajee@qis902fFdRz-yIh0KlhbNm!S&$S|Kuk6j=V0j=iUu^<)-9T`A93y<$A2J7 zqsC+4xn959;;;*i$9il+=EP;8%eKtAjop@InTZIBE5Gpoe}Dzt_g#yKE?IMZ{oZ@u z_r2G5?^D@juIw^@xq;zIlSx%N!#zp52?o)eSi~&mzT)+Gw)1@^btT!DSyYf-vNF}_MA>GE~+Ko{FkBG%rN2x)@(4eSmqBMGVBmTwI$gp2M)t?-B?pStjPJ6^k(hF_r9@q`E@N%xh0L{C7mLZCqEPpO zAzl2t&dO{lxsd5O9wjm-RxMu>>mpUe9$Qb8;=JE~v;EMTot2YToOdxJEB6d}Lo7P6 zG^H~34{|E^e2;Za>iU#zI|}){mkPHOJfA|Gv6o3DZb(#123u}ucKv1$SF7vAedo;L zelm{yw4D}lE3D!+y;#5(Y};D0 z-NF~yH(L0XTG+?oAJ1)WT)p5wD(+5P&llxywER!q_}RLcPYa8+P$+IXZ#U$$d~lvK zi1PU-T72JZU)VfqjcQiY9=8obs!6y3vG@^&AZThZ1um#RDa0rYgKBV;`fh-hR=_H_OlHmk2B(5aapRyaQ$~%#9Z<%M!npWzFsUL0$0k8` z^Y2P!`Pks4Oo5uH5P#sH79S8bi);{X0{@v*YZRuS%r^;5A+QRQz-v=AA@E#tW_euB zY)`H;$0Iq{;h>|=N^2zJsQfC=OY&iC%%#CXH7fWLEp*F@S@q=D6gYM$ulr+_*Zgm# z`pxC}$}q$nJuRDn_*?I_mBDly{%|3AUbw>+vO0Xj(0bUPYSt$3$AQbVt)pE>XcvoJ z_Gx$fP4V-dEN%>hF-UX-K2}ZqS&#)!Z`7h3M@O5aMPKB`Z3*A1k{ah56Pf<>3UJqM z!@X=RX9Nve#~EP+V^eolEVtJyLf@(qExobLl`g)#xvta2BsO*sx) zA$)x(RkKHFjDhK>T@Qp?5a|+b!|-jO-Cnk40=%Z0yAY^VS9t39U)+3;+e1#VI627T zwwu~-fvUCN26aHo3LIBc%01#t7FMq~z&?`31x{#8;3IWqV=v9@1JB7)b3T1`S>!vr zXxwF&n(UD)tP?t0So+Y>w5=we6B56REgf)_D2B@SGDyd{v5*9*9160xwICjsKbmd`5`43Sl zvpN(#3Hx`7pN2T?LrRi^p zmTA|eg#(nP2f{xnEgS`5IEd1`R9ZzJrPe<~E#T&_hpBmIsQp8!1?NzUWZ`q}OPkGl zP#Pv)nvsSF37=2Dvx`o2yb_@npwzsSS|6p>PpRQ*y))GGmCvDurx*|J1IX}AMUd(5 U%