From e6441b6b266d1e0a25569e6085bb58e684fe4600 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20GIBERT?= Date: Sun, 19 Feb 2017 21:11:44 +0100 Subject: [PATCH] Kernel version 0.9 : Changed timeout loop causing freeze with MAC Apple IIE Card --- INC/COM.6551.I.txt | 2 +- SYS/KM.VSDRIVE.S.txt | 122 +++++++++++++++++++++++-------------------- 2 files changed, 65 insertions(+), 59 deletions(-) diff --git a/INC/COM.6551.I.txt b/INC/COM.6551.I.txt index 162b0973..014db194 100644 --- a/INC/COM.6551.I.txt +++ b/INC/COM.6551.I.txt @@ -57,7 +57,7 @@ SSC.CTL.B4800 .EQ %00001100 SSC.CTL.B7200 .EQ %00001101 SSC.CTL.B9600 .EQ %00001110 SSC.CTL.B19200 .EQ %00001111 -SSC.CTL.B115200 .EQ %00010000 +SSC.CTL.B115200 .EQ %00000000 *-------------------------------------- MAN diff --git a/SYS/KM.VSDRIVE.S.txt b/SYS/KM.VSDRIVE.S.txt index 5e14b0ec..980044f7 100644 --- a/SYS/KM.VSDRIVE.S.txt +++ b/SYS/KM.VSDRIVE.S.txt @@ -23,59 +23,32 @@ VSDRIVE.Init >LDAXI VSDRIVE.MSG0 jsr PrintCStrAX jsr VSDRIVE.Check - bcc .1 + bcs .90 - >LDAXI VSDRIVE.DRVKO - jsr PrintCStrAX - rts - - lda #$C1 - -.1 jsr SSC.Detect - bcc .2 +.1 lda #$C1 Self Modified - >LDAXI VSDRIVE.SSCKO - jsr PrintCStrAX - rts +.2 jsr SSC.Detect + bcs .99 -.2 sta DRV+2 DRV.Slotn0 - lsr - lsr - lsr - lsr - pha + stx DRV+2 DRV.Slotn0 + sta .1+1 SlotCn + + and #$0F + pha slot n + >LDAXI VSDRIVE.SSCOK jsr PrintCStrAX jsr VSDRIVE.Ping - bcc .3 - - >LDAXI VSDRIVE.SRVKO - jsr PrintCStrAX - - lda DRV+2 DRV.Slotn0 - lsr - lsr - lsr - lsr - ora #$C0 - inc - cmp #$C8 - bne .1 Go try next SSC.... - - rts + bcs .92 -.3 >LDAXI VSDRIVE.SRVOK + >LDAXI VSDRIVE.SRVOK jsr PrintCStrAX jsr VSDRIVE.SetSlot - bcc .4 + bcs .91 - >LDAXI VSDRIVE.NOSLOT - jsr PrintCStrAX - rts - -.4 pha save slot + pha save slot pha 2 times >LDAXI VSDRIVE.DEVOK jsr PrintCStrAX @@ -84,7 +57,26 @@ VSDRIVE.Init >LDAXI VSDRIVE.MSG0 >LDAXI VSDRIVE.OK jsr PrintCStrAX + rts +.90 >LDAXI VSDRIVE.DRVKO + jsr PrintCStrAX + rts + +.91 >LDAXI VSDRIVE.NOSLOT + jsr PrintCStrAX + rts + +.92 >LDAXI VSDRIVE.SRVKO + jsr PrintCStrAX + + inc .1+1 + lda .1+1 + cmp #$C8 + bne .2 Go try next SSC.... + +.99 >LDAXI VSDRIVE.SSCKO + jsr PrintCStrAX rts *-------------------------------------- VSDRIVE.Check bit RRAMWRAMBNK2 @@ -111,26 +103,31 @@ SSC.Detect stz TmpPtr1 lda (TmpPtr1),y cmp DEVSIG.Value,x bne .3 + dex bpl .2 - lda TmpPtr1+1 + + lda TmpPtr1+1 A=SlotCN asl asl asl asl - tax + tax X=SlotN0 stz SSC.RESET,x - lda #SSC.CTL.B115200+SSC.CTL.8D+SSC.CTL.1S+SSC.CMD.NOP + pha zzzzzzz... + pla + + lda #SSC.CTL.CLKINT+SSC.CTL.B115200+SSC.CTL.8D+SSC.CTL.1S+SSC.CMD.NOP sta SSC.CTL,x lda #SSC.CMD.RIRQDIS sta SSC.CMD,x - txa + lda TmpPtr1+1 clc - rts + rts X=SlotN0, A=SlotCN .3 inc TmpPtr1+1 no match, try next slot.... lda TmpPtr1+1 @@ -142,23 +139,28 @@ SSC.Detect stz TmpPtr1 *-------------------------------------- VSDRIVE.Ping ldx DRV+2 DRV.Slotn0 -.1 lda SSC.STATUS,x - bit #SSC.STATUS.TDRE Ready for transmit? - beq .1 - stz VSDRIVE.Ping.TO stz VSDRIVE.Ping.TO+1 ldy #10 -.2 inc VSDRIVE.Ping.TO Wait....... +.1 lda SSC.STATUS,x + bit #SSC.STATUS.TDRE Ready for transmit? bne .2 + + inc VSDRIVE.Ping.TO Wait....... + bne .1 inc VSDRIVE.Ping.TO+1 - bne .2 + bne .1 dey - bne .2 + bne .1 - lda #$C4 Send "D" (DIR) + sec + rts + + ldy #10 10 retries... + +.2 lda #$C4 Send "D" (DIR) sta SSC.DATA,x stz VSDRIVE.Ping.TO @@ -167,7 +169,13 @@ VSDRIVE.Ping ldx DRV+2 DRV.Slotn0 .3 inc VSDRIVE.Ping.TO bne .4 inc VSDRIVE.Ping.TO+1 - beq .9 Time Out..... + bne .4 + + dey + bne .2 + + sec + rts Time Out..... .4 lda SSC.STATUS,x and #SSC.STATUS.RDRF incoming char? @@ -186,9 +194,7 @@ VSDRIVE.Ping ldx DRV+2 DRV.Slotn0 clc rts -.9 sec - rts - + VSDRIVE.Ping.TO .BS 2 *-------------------------------------- * Find 2 free slots in DEVPTRS (D1 & D2)