From 4b106846110797ac5d4f535ddbf969e4a799d73c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20GIBERT?= Date: Sun, 13 Dec 2015 13:51:05 +0100 Subject: [PATCH] SSC.I.DRV.S.txt : problems with IRQ in Applewin (see #308 issue in Applewin) --- A2OSX.BOOT.DSK | Bin 143360 -> 143360 bytes A2OSX.SRC.po | Bin 819200 -> 819200 bytes DRV/SSC.I.DRV.S.txt | 141 ++++++++++++++++++++++---------------------- 3 files changed, 69 insertions(+), 72 deletions(-) diff --git a/A2OSX.BOOT.DSK b/A2OSX.BOOT.DSK index 4f6865f5f5b82875ff0bb8a0c395a2851df73646..a7aa1d41fa0fdac41aa2b2272e490d4bf9eef032 100644 GIT binary patch delta 607 zcmXYu&ui0Q7{}i?OKURh>=3sY;*vbJUD6CG=%EN+WR9X0^q_ch83NMzkvKOCavSY3jv3#hM^UQatPk{ z_YO2j@v4{(1E*VTF=cZ)r$_ToFW^}7$ydCNbAF0`*T!Smmp|3U@zX(IBk6H@lvsKi zxJO1hlwWS+^2%-bxopedBIcUpPYJyJ9Y6RFI-SWI delta 906 zcmZp8z|ru4W5X;KmL7R4uF3OQW-+mFPqt$9Vri6D6Pw%tWc0|haBsfG>c+;%zFC%s z*ITfNiJ?(mLQI+AF@r*vynv|oWJacwn^__h*%&!CtHs$ePG(|S*vyi!oh5AI&Fs##7 zn%8+?rQF=^19Nng=IAQT(NmhEuQW$PiKAjA>)fsbdpi&8?Kq$zk-$;0R#)kR@;V)* zy#`7Pm?lb{SjjL^Y9-?&sTU6vE-)=(=+jXGx(KLJVddm z7i`D_h4c^N>-3an%neY2Y131Brw`T!(gbl2(2%vNifdF9B@%!FKqq);a(vL=({bR| zIt`^6Clw|zaW>3lVtLV}Dc`H1^b6>)lL{aBqa<>5K%tZ|(?IFnVn!yWWhWS!>WvLd z3``Bo3=9km4U7z+JO))4#+iB^!HuZGs5}N$S7H>o;Z;-*ww*!M9j_{=A`fB|c@m*W z(hH`j9@*Ol1`M*^jK2OZ=6a@vMm^vFKnWEem^M^h$UFvBUt$#bK@}OIggaUQbNDlA z9Z=I{Pz_*oatwC$=?A)~X}aMVMiCx8pj#CJA%;vB1dCVzMS`FrAT`^W&M^K<1^{Cm B`S}0< diff --git a/A2OSX.SRC.po b/A2OSX.SRC.po index 6833931b1c4327b050d201c4421ae1dab799db75..4510b1aec3731473d4d22cec32e9417bbbc6544f 100644 GIT binary patch delta 5781 zcmeHJT~Hg>6+SDpa4pG3NJwB~S0>;eK;B5$#9%viKw3ZsB#;&Y#s)9a0y09DC4oiy zAl9vuOyeeP$gojon(32g`qD{D8>XFU>ddrh68Go5)0s3)o3u&Wr0L%z{XKVg1;X)L zU&YKK>D+VAJ?A^$e&?>Pwy&`_WS6e0WJ>>C#^9MAbxD^nc-8o?IV4$O~+#6`f&k4LTI7!?F&kvQaPZG}X;E$BYCdsjJ z)2mRJS&YlAKz=bD*a33pgT3M$uHAU)}Pn6{;(pdRVbZ-8a^3^Hwz_jzFwwh#j zo9Qn~hW}FNfYG|jFj`j)jM`PUf_VZQMuzix)}yJM)|E)$0uOsxrE!|n=c^c%jtCZQ z80`)rS`7OxrXa?mvc5!HZZn~2M{|jpK~OOZ3m!yv>bD4(Ar z?!4`!hQ>BAZJh|lVyXnVgI#)<&YLq!v$IlKo?S{L+;S|QiHhkMu&1yja$3XCc1FXn zg!>PF3c|A*gwAt$6~4#kq^vw6Mi=Cmm=(eLh*q{50l236x5!nm13rwqS z^CiEa+3FI?3s;CUzgYB6dUS7llG);I(R5Wep&ArprkHJz^_aESiZ=AqZO*i|^%;6B z)f!cX>N2{g_30h<=B#pN$#_7yyg(`~OH2XDAUC1lFDt9RWDea<5W{++(pQDW&})J+ z>}F3WtNp~RJegx^HlKgTFw5Ld8JP7$#Hctvu6lpXYN#;;g!T6f$9I{UL5=58gkKoC zc2m-$Ot+wnx>^@z_)BXE3|IY-d zzdyt)?|!SIHV^jm#oYL1DVe1>IR@?r<{;h!P(UKF#@I>dM%C%RGj{W1G zawQXZd6^es?*-+V7c1)bOllrYM~)tWx{HeUWuvq4620GuuzO0YtEssiZwk}2aZ#K~ zPy@4SAq#r+gx8C>V_GrRfC7zr`>_MNNceEr>FFkjz(nRCph_j{E;XEv;c ikIMhb7?gQXehtb}P*%dS5|)*)tb}DH{C}0u%=`}l5FGaa delta 4637 zcmeHHTW=Fr5T0Ya;ncCgS;rTGqL3y-I5gO@1w?4L(m3 zTzzEdRD;t^=ZWR=qE&3HBDTf#zSCshV(EL>Qa5L*BX}%$R^YMX5%5&uS-E7Xqm!Eh z_3aRi2BrS+HYpg}AqB%jvEx#>Prd0Pm7#HKxwAVGJHGT(4}Hc~?^%SN-f-kxI+0gH z;lb#Ro>)c(;aSjO&2!pA!_@2XKM#63p{Pw|01G43Te}2$Hm9i9IsAETewg+)+h1g^ z2i5M-5C|_}H2N~=Qxj7_FQOxvf(@^Lc4aSJr}d4{Cd)0aYS&f?8!hr{+K~||b<<0D zJB_z5gC0-EfxZFybS?|@O=!8eej_;Ff^FegcrYA^oiU=m&7+F%@LaniodaD`FcQ-? z?4~aiQkgu6?_;Q`yxPP((eB|eR9^voER$5F091d#-k}q@e~8(-uYwfNvbnsMzYY%0Rzj=_0MKOSE^z$_EsvM0R`-)(D(Ml8b;Jgu z{(Ke4Kch=~cMol;1^X}fKbAbCO6?$A!yFrb)qJD0VYU6YVm)M#eg{n*r*7@gDD{#* zv`0s2W7VH{x%n^c!YI9QO#GWytkg7KAZ6VU>WFpt^B@p{HL?({=L*90v=T#4K_GMB zt|C%EUMLr5%}On>m--4f5JMQO3eydB0BR$8ZbpHcYL3TU49U)r97H$dUWG{Ia<3-K zayxlcCU*@!@`#v$A$JMq7`R+Sccn6M)ifH4*AiW;-%mH6-$$#K`u9^Gk=+u(f=;Ee zpeHg1{c19w%7ITt#uEyc4TmImIIBvM1pWZgt~dp^wt&?YTQMc3MBoGnw_+mFChgKV z^%v-E>~$XOTX>>ujA$F@?Py142d31f=2jW(TQNdBjuB*V+)ng^(>SQjZ8C^=7)52{ z*}O?^#q!WQd1dHb7$>iQ<8GoWnFL-BbbEE0j4&?6h=wpd2wc~@mI+z*p4T4g`*_{OSg0RIzu(Nd4K~EI zh7`TIP&-gGl|&Q<8Jqh#3)c{5QECwocm0RPFsC7mU}JlBbMC^ zHT!lKI7g9OfeFR@tdaL3tYhDGYC06oAEgX{Fote1PX4`&5@@z1iPWYUD|5d&V&lv_ zL8NxgSUD+frVkKfldhU1q5eTBScppDNC+Hhf-SHhbwd`L3XXgaL#-^ReYV1&DX9&WO<(!P1D@8nQiMLNS2g}Y=YG0iZ;Aw+B}D~!X$P3 zj+m~q40yRSn~!QwPtqoPp6HkxTkUj4n|+U*J)fqQMW^KlQu$PBQ0arp7*tk4WfN95 SVPz9mHeqEG{;!*`ll%j>Hq!_I diff --git a/DRV/SSC.I.DRV.S.txt b/DRV/SSC.I.DRV.S.txt index b64af15f..5d533737 100644 --- a/DRV/SSC.I.DRV.S.txt +++ b/DRV/SSC.I.DRV.S.txt @@ -54,8 +54,8 @@ SSC.REG.CTL.8D .EQ %00000000 SSC.REG.CTL.7D .EQ %00100000 SSC.REG.CTL.6D .EQ %01000000 SSC.REG.CTL.5D .EQ %01100000 -SSC.REG.CTL.CEXT .EQ %00000000 -SSC.REG.CTL.CINT .EQ %00010000 +SSC.REG.CTL.CLKEXT .EQ %00000000 +SSC.REG.CTL.CLKINT .EQ %00010000 SSC.REG.CTL.B16EXT .EQ %00000000 SSC.REG.CTL.B50 .EQ %00000001 SSC.REG.CTL.B75 .EQ %00000010 @@ -176,34 +176,34 @@ DRV.CS.START .DA OPEN L.DEVINFO .DA DEVINFO .DA 0 end or relocation *-------------------------------------- -OPEN ldx DEVSLOTn0 +OPEN php + sei + ldx DEVSLOTn0 stz SSC.REG.RESET,x - lda #SSC.REG.CTL.CINT+SSC.REG.CTL.B9600 - sta SSC.REG.CTL,x stz INBUF.PTR stz INBUF.CNT stz OUTBUF.PTR stz OUTBUF.CNT - stz IDX - php - sei - lda #SSC.REG.CMD.TEIRQ+SSC.REG.CMD.DTR + lda #SSC.REG.CTL.CLKINT+SSC.REG.CTL.B9600 + sta SSC.REG.CTL,x + + lda #SSC.REG.CMD.TE+SSC.REG.CMD.DTR sta SSC.REG.CMD,x - lda SSC.REG.STATUS,x clear any IRQ pending lda SSC.REG.DATA,x discard any garbage byte - + lda SSC.REG.STATUS,x clear any IRQ pending + bmi * plp - clc rts *-------------------------------------- GETEVENT php sei lda INBUF.CNT + beq .9 ldx INBUF.PTR @@ -219,12 +219,10 @@ GETEVENT php lda #S.EVT.F.KEY sta (pEvent) - inx - cpx #BUF.SIZE - bne .1 - ldx #0 - -.1 stx INBUF.PTR + txa + inc + and #BUF.MASK + sta INBUF.PTR dec INBUF.CNT plp @@ -240,20 +238,20 @@ COUT php sei tay save char in Y -* ldx DEVSLOTn0 -* lda SSC.REG.STATUS,x -* bit #SSC.REG.STATUS.DCD+SSC.REG.STATUS.DSR -* beq .9 + ldx DEVSLOTn0 + lda SSC.REG.STATUS,x + bit #SSC.REG.STATUS.DCD+SSC.REG.STATUS.DSR true when 0 + bne .9 ldx OUTBUF.CNT Buffer Empty? - bne .10 + bne .10 not empty, queue char - bit #SSC.REG.STATUS.TDRE Register Empty ? + and #SSC.REG.STATUS.TDRE Register Empty ? beq .10 not empty, queue char tya yes, write directly to ACIA - ldx DEVSLOTn0 - sta SSC.REG.DATA,x + ldx DEV.DATA.BFFF + sta $BFFF,x plp clc @@ -262,18 +260,20 @@ COUT php .10 cpx #BUF.SIZE beq .9 Buffer Full!! - ldx OUTBUF.PTR + lda OUTBUF.PTR + clc + adc OUTBUF.CNT + and #BUF.MASK + tax + tya sta OUTBUF,x - inx - cpx #BUF.SIZE - bne .1 - ldx #0 - -.1 stx OUTBUF.PTR inc OUTBUF.CNT + ldx DEVSLOTn0 + lda #SSC.REG.CMD.TEIRQ+SSC.REG.CMD.DTR + sta SSC.REG.CMD,x plp clc rts @@ -299,61 +299,59 @@ GETINFO >LDYA L.DEVINFO *-------------------------------------- IRQ ldx DEVSLOTn0 lda SSC.REG.STATUS,x IRQ from this device ? -* bpl .9 no, exit + bpl .9 no, exit - pha save status ... - and #SSC.REG.STATUS.RDRF incoming char? + bit #SSC.REG.STATUS.RDRF incoming char? beq .1 - - ldy SSC.REG.DATA,x read data to clear IRQ - phx - ldx IDX - tya - cmp #$20 - bcc .10 - ora #$80 -.10 sta $402,x - inx - txa - and #$1F - sta IDX - plx +*------------ IRQ In + + ldy SSC.REG.DATA,x read data to clear IRQ lda INBUF.CNT cmp #BUF.SIZE - beq .1 buffer full, discard + beq .8 buffer full, discard - phy clc adc INBUF.PTR and #BUF.MASK - tay - pla get back data - sta INBUF,y + tax + tya get back data + sta INBUF,x inc INBUF.CNT + clc + rts -.1 pla get back status - and #SSC.REG.STATUS.TDRE - beq .8 +*------------ IRQ Out + +.1 bit #SSC.REG.STATUS.TDRE + beq .2 no transmit, no recieve, CTS changed! lda OUTBUF.CNT something to transmit ? - beq .8 no, exit + beq .11 no, disable IRQ and exit - clc - adc OUTBUF.PTR + ldx OUTBUF.PTR + lda OUTBUF,x + ldy DEV.DATA.BFFF + sta $BFFF,y + + dec OUTBUF.CNT + txa get back OUTBUF.PTR + inc and #BUF.MASK - tay - - ldx DEV.DATA.BFFF - lda OUTBUF,Y - sta $BFFF,x - - ora #$80 - sta $401 - - dec INBUF.CNT + sta OUTBUF.PTR + clc + rts +.11 lda #SSC.REG.CMD.TE+SSC.REG.CMD.DTR + sta SSC.REG.CMD,x + clc + rts + +*------------ IRQ CTS High + +.2 + .8 clc rts @@ -361,7 +359,6 @@ IRQ ldx DEVSLOTn0 rts *-------------------------------------- DRV.CS.END -IDX .BS 1 DEVSLOT0n .BS 1 *DEVSLOTCn .BS 1 DEV.DATA.BFFF .BS 1