From b7c718036bc747ddfb23e265978977b318e432ce Mon Sep 17 00:00:00 2001 From: burniouf Date: Sun, 23 Apr 2023 17:20:27 +0200 Subject: [PATCH] Improved DevMgr (BDEV) --- .Floppies/A2OSX.BUILD.po | Bin 33553920 -> 33553920 bytes .Floppies/ProDOSFX.BOOT.po | Bin 143360 -> 143360 bytes BIN/FORMAT.S.txt | 2 +- BIN/KCONFIG.S.txt | 6 +- BIN/LSDEV.S.txt | 2 +- INC/A2osX.I.txt | 14 ++- SYS/KERNEL.S.DRV.txt | 233 ++++++++++++++++--------------------- SYS/KERNEL.S.INIT.txt | 153 +++++++++++++----------- SYS/KERNEL.S.TERM.txt | 3 +- 9 files changed, 202 insertions(+), 211 deletions(-) diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index 7a89a39b7481c7f5d27f1906bf6c996be988ac3f..b40dc41d75947bdf20b282f382940bd6b3bf8a93 100644 GIT binary patch delta 24656 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 diff --git a/.Floppies/ProDOSFX.BOOT.po b/.Floppies/ProDOSFX.BOOT.po index 1285da6a8c1d8c638c84d29369078aa230989b0e..278a03aee2ccc145aa0ab9ea6018778b71875def 100644 GIT binary patch delta 3710 zcmeHI`&ScZ8lEI11O##+gd~7|atQ;00A4DhRRK}4pfN!ai#B)!FFjQ`w(2UDpbWZ4 zM}p%PJQ#>0unr{{pjNQ3iB&=HHdeyO`r@QI973O;At&f&FEVbLJ%P_k8dB zyw5Y=UP4XvcGZ{YDQACcckArDqQM|#emq`oMWhHB~7HXIj=6c?GTaP&QDDg49sb1I9FrNu&n3UW42i zq=!i!#O^W}UE_SyN53NZ=4#3XYKg^yxam7khYEK&sg3v>C-oY4I;qs=i>jteDzGn% zRDgs~ODRfwmUkid!1+i6pOire%nb!W;ox|fWew3Si1jT+9Ud{;?RtRN&a7?~2C^r9 zfm#J%?;8?p=yPAr4}vpu}o%ymT&V zl-`+#8rigWz8 z;{1dB`&3Qm7!UO#JhLCy^y`PpiKYJWqtC0FE~v^Rr2+UJEo#Zmru}fPo%Df1*-)rqtUH8Oh)4btiq}O#yRc~wZ0ZS{HkYF{Mihi9tqaVq z79lOh#1w+#C`IFY(L|t*Fih@sIVPGt;T{)sgd3vG&K6-5rCM${qcsziG^M&GGMRLBMS5e5#hzD>TPhomDs z_^;uz)f`-|bQ9tVCH|PWAPJew1p!J5fgctOb+qF~#)8v`4i%z6rnHWNsF24%mFPty zN)N&iwsTA|RT5zV;l((5Kxi{^4gi~FFM2@4gkx>`q$J1#JA(|R^<%rx$OH3~#$mn1 zh$cCLtGt9qI)t{~gY>T*B3tiW`aURBf3URe=Eaz~7T2W~;SC*1i+1f2K9}(s(>bWm0UN4MScQ7Sm(kE6YGZ(Y|RO_DsOLZuGlorroYL&siFMM_$WKc>C8hr zkW+W^i5b!u!8uGqMPUIeq?FnH4sMmk3YsGEh4u>NDu%4F>mYGlIwqhg5|VjCT%`Qd z&Tmo`92$XvJK5t=!W>v6!cauY6SE~AGQPq)*k`mKagQ4;EtO({UF|AN($%5D0zgYt zBOL;^6Q9W@6>pD%%LYlAupyvKB+Hjz5+nQP0Lp+VfGNuAN%BEOlp$&)<}k4v_ad3t zi*N8@c0{BHvl1R@5rPv@^yEZ+Ll6YgU5WWpOk5xA;PD&b8clcQ2V(vWAuv`b6pd!2 zMXX{9xP9~mnf`1a?WmVU$Q5*%Obhnf3f=6;yD|I3-HzN!jRcc^nGglTqZd>5S7rs(Xt8Cmu$#lqX! z)NVHL28a+h&~~=jVx=UNMipyp@r2T)9|u?a2Nk^pN9D7_G$giJKJllb^^Ynwi?FJ& zQJUG(d%vXAuPV^=tnFGjXK(D*l5JZWC5JTh=WWYoo!&I~=*ekU9Y>`2vLJ4E<>7?s z>T@~!rWCw-zMy-%Ee7|>IT0Lut*EeS-L$VKFI#tF-t!e(>Hpk!o$;*m99=YPT5-{= zWd(_s`VYN&7I!=Em|(bJxbA2QKB(3oeAe^htZ^&UpYJR!%U|Di<>m<7!{j)**CbLc zd03XRv^VaRR_@ga4x9C}!v;zR9(z^qi!a`!l|I=NW=f@n6hJZ7eET zIVoUs@a?(F)E73ad__L{uC;bUZr;r(&nxZGNk1QG=I@@CP@8+>$cvnU)`5b4pMM@) zEt_AWX>J~Mb6~*$Mr=D$ZbBYavJd|@d)Iz#=%w7$t_@Yyy{S8D<3B5_7H6cCF}G}aE#KE)GG6$w0Nc?a&%0jxkaH_{ zkI_24yJvNceE7wTf-mhS4=rA=kFMUM49oi_a$Z$+QieL^@AEU#%ls=$=d>OxFJ0K_ zBM|PdkMkJq_b9egzB!?Pr{5UQ;M?Q&5Kk)w0@`>iOgH?08)P*sW6}Qw D0q3?T delta 3521 zcmeHIi&qm@9=@48h`jP3Bq0I43Lz5{f*?wG)D{5|3a42@L9lj%8$GhS?&1s4MUqvc zR*j;p;YobQ0FVGfd6qLMI_^tr}z^MXkFgL(Yd^V9r zJbFd+OduFg)5PNJtis&lY{UZ`GYAF0MEHrX(}+~IEQGdN?HdICDWaSmUOpMzP4SPU z6E&gr=4KdjGqw7RceAtT^?Yq00#wHP(`Hy+`;{1qG75{{*V8HVHFgOwKp(@O2EZVL zORHgofTKFWk#ZP}&WPYS*d#4JqQ#ptZ6d-L8pDVntf7Bd5{Eky$WBXuLjog|l-C+e z!r(v{90Z{{*1>ZvRW^E3qO-WT8?lUd^U1bR)PI!Q_YyP|h7)=r+PMB3~%S9w~_m;SBLF$~y6#XUaN^ z;`LBJ-z2lzD%Gtkh~vWPbjEP5g!s2GTDDT%x=L-Sf@#Y3Y!jb6XBChPTM7`}+tQ&U9oa%VN6xj1$v&$DmJr9n zqM~wfC!>T4wXwS#!N@Fz%vz@ULsSm&udpO@gc6mEM88F%0Z6nh1#e2l;S)u>!S3te zQ$nkd1h!2dLnub-p0vgcLLDBnAQ`XcyX%Ne7Q@!G|R z0-2kTK(?o(rXm@VY4c0a0&LizXy+nHBtbniIzrA)A@pLA8J*CfycVY%Z*25BhZT*j zUgwCS@oO(SgOLPxTY~!#DvT{`Omvf-$Obuv3`mXiy68KU;YK@0V`n>k*E{&P#+8&{ z+cy4xq+GfHCLUbx#*I3z1N8E#CqvY8%Mg7qFAv1{1O0AI&qouu{%oQiKHed9tUC}CSpms9Abl1DOjwwid=tCTf^Z(RSOjbHN;72GE1X^3ki=@ zV$M;u2ROJeO=VF*f6Sy~868h@(D5X$C72!w94vao|Ga|_O)4ryXFMuLK(0@>L~Io{ zM|wEi7Bt3leM=Ef8lz#fG z5k?ZsM?%Y{_fSub(i0+u%)`)e=gI2WOJ#6TXIn%dCa+ZoYkBd)*`nf_Vnzv8YAN-W z)|Pq87A#yyd@qk>h&o@$TV`R4)u=hPpC~N3`v2Ay4?sp#r+_oa*ejI0>5gx@|1a zW=u8D+Pvtk$c8X^&2xA>A}5Y5Qg>ZG`t{&e&6$l~XwFH?HtJ6CQp44miCfav47Fsf zsJI>Uuvgz4xMkC#!z*V;yK~}emE%U~w(mbpsQJJZ@zL|Dva5UkncUa1D=GZBX<6Pi zs{elH;LZ!{Mj!W#Zn&}bSoGbkA4|OWTSndJK*FebAaOL|Qmu>E_et$w$meEPvP-dE z^w+uj2jVw;6YJfs7#Cjf)Z=3}6OWYNEdKJgePmAQx|_D&U+L9MiVELx^2Jb6!GpFr z!USUKst?j*W~!}C`^|rHmx#~aF?8p+1a;lHE8^-uLU_ z!O-6MbM~M6U0>3*%B<4IJ73(tmUI5ftb@$irsu>E< zoDQE-mY(I8o_go{13Muat{m=MJ;QkE zO#e>pdF#(7TQ~kVQ}pbeWrsdFv^6?O6V-hs^r8<={=sCj{@pt}E#Gt9eV#ezZ?}`|*ne=^ diff --git a/BIN/FORMAT.S.txt b/BIN/FORMAT.S.txt index 4c62f8f4..6a01f77e 100644 --- a/BIN/FORMAT.S.txt +++ b/BIN/FORMAT.S.txt @@ -424,7 +424,7 @@ CS.RUN.LL >PUSHW L.MSG.LL bcs .9 >LDA.G DIB+S.DIB.T - cmp #S.DIB.T.DISKII + cmp #S.DIB.T.D2 beq CS.RUN.LL.DISKII >PUSHB hDevID diff --git a/BIN/KCONFIG.S.txt b/BIN/KCONFIG.S.txt index b007f087..25b1b2ec 100644 --- a/BIN/KCONFIG.S.txt +++ b/BIN/KCONFIG.S.txt @@ -358,9 +358,9 @@ CS.QUIT lda hFileBuf CS.END SLOTS .DA #0 .DA #A2osX.S.Z80 - .DA #A2osX.S.VXDRIVE - .DA #A2osX.S.ATCARD - .DA #A2osX.S.DII + .DA #A2osX.S.VXD + .DA #A2osX.S.ATK + .DA #A2osX.S.D2 .DA #A2osX.S.BLK .DA #A2osX.S.SP .DA #A2osX.S.COM diff --git a/BIN/LSDEV.S.txt b/BIN/LSDEV.S.txt index 4f09d8ab..bd0f42cb 100644 --- a/BIN/LSDEV.S.txt +++ b/BIN/LSDEV.S.txt @@ -280,7 +280,7 @@ FD.T.PIPE .AZ "PIPE" BLANK.DIB .DA #0 #S.DIB.S.BLOCK+S.DIB.S.WRITE+S.DIB.S.READ .BS 3 .PS "(No IDS String!)" - .DA #0 #S.DIB.T.PRODOS + .DA #0 .DA #0 .DA 0 K.VER *-------------------------------------- diff --git a/INC/A2osX.I.txt b/INC/A2osX.I.txt index 6b760362..cdc29dca 100644 --- a/INC/A2osX.I.txt +++ b/INC/A2osX.I.txt @@ -70,9 +70,9 @@ A2osX.F.CHROOT .EQ %10000000 ChRooting to /RAMx A2osX.F.PMODE .EQ %01000000 Pre-emptive Mode A2osX.S .EQ $BEF8 $BEF9->$BEFF, 7 slots A2osX.S.Z80 .EQ $80 -A2osX.S.VXDRIVE .EQ $81 -A2osX.S.ATCARD .EQ $82 -A2osX.S.DII .EQ $C0 +A2osX.S.VXD .EQ $81 +A2osX.S.ATK .EQ $82 +A2osX.S.D2 .EQ $C0 A2osX.S.BLK .EQ $C1 A2osX.S.SP .EQ $C2 A2osX.S.COM .EQ $E0 @@ -436,8 +436,8 @@ S.DIB.T.5.25 .EQ $0A 5-1/4" disk *S.DIB.T.PRINTER .EQ $0D Printer *S.DIB.T.CLOCK .EQ $0E Clock *S.DIB.T.MODEM .EQ $0F Modem -S.DIB.T.DISKII .EQ $10 -S.DIB.T.PRODOS .EQ $11 +S.DIB.T.D2 .EQ $10 +S.DIB.T.BLK .EQ $11 S.DIB.T.NIC .EQ $12 Network Interface Card S.DIB.T.XY .EQ $13 X,Y Pointing Device S.DIB.T.CHAR .EQ $14 @@ -486,8 +486,10 @@ S.FD.DEV.BUSPTR .EQ 4 word S.FD.DEV.DRVPTR .EQ 6 word S.FD.DEV.DCBPTR .EQ 8 word S.FD.DEV.BUFPTR .EQ 10 word +S.FD.DEV.TYPE .EQ 12 Byte +S.FD.DEV.SIZE .EQ 13 3 Bytes * -S.FD.DEV .EQ 12 +S.FD.DEV .EQ 16 *-------------------------------------- * S.FD.LNK *-------------------------------------- diff --git a/SYS/KERNEL.S.DRV.txt b/SYS/KERNEL.S.DRV.txt index 9d239fc4..fe2fcd87 100644 --- a/SYS/KERNEL.S.DRV.txt +++ b/SYS/KERNEL.S.DRV.txt @@ -1,135 +1,106 @@ NEW AUTO 3,1 *-------------------------------------- -* DRV.DiskII +* DRV.Disk][ * X = IOCTL * Y,A = PTR to S.IOCTL *-------------------------------------- -DRV.DiskII cld - cpx #IOCTL.FORMAT - bcs DRV.BadCall - - >STYA pIOCTL - jmp (.1,x) - -.1 .DA DRV.DiskII.S - .DA DRV.BLK READ - .DA DRV.BLK WRITE -*-------------------------------------- -DRV.DiskII.S >LDYAI DRV.DiskII.DIB - jmp DRV.STATUS.YA -*-------------------------------------- -DRV.DiskII.DIB .DA #S.DIB.S.BLOCK+S.DIB.S.WRITE+S.DIB.S.READ - .DA 280 - .DA #0 - .PS "Disk ][ 5.25" - .BS 4 - .DA #S.DIB.T.DISKII - .DA #0 - .DA K.VER -*-------------------------------------- -* DRV.RAM -* X = IOCTL -* Y,A = PTR to S.IOCTL -*-------------------------------------- -DRV.RAM cld - cpx #IOCTL.CONTROL - bcs DRV.BadCall - - >STYA pIOCTL - jmp (.1,x) - -.1 .DA DRV.RAM.S - .DA DRV.BLK READ - .DA DRV.BLK WRITE - .DA DRV.BLK FORMAT - -DRV.BadCall jmp A2osX.BadCall -*-------------------------------------- -DRV.RAM.S jsr DRV.Blk +DRV.D2 cpx #IOCTL.FORMAT + .HS 2C BIT ABS +DRV.BLK cpx #IOCTL.CONTROL bcs .9 - stx DRV.RAM.DIB+S.DIB.SIZE - sty DRV.RAM.DIB+S.DIB.SIZE+1 - >LDYAI DRV.RAM.DIB - jmp DRV.STATUS.YA - -.9 rts -*-------------------------------------- -DRV.RAM.DIB .DA #S.DIB.S.BLOCK+S.DIB.S.WRITE+S.DIB.S.READ - .BS 3 - .PS "ProDOS /RAM Disk" - .DA #S.DIB.T.RAM - .DA #0 - .DA K.VER -*-------------------------------------- -* DRV.BlkDev -* X = IOCTL -* Y,A = PTR to S.IOCTL -*-------------------------------------- -DRV.BlkDev cld - cpx #IOCTL.CONTROL - bcs DRV.BadCall - >STYA pIOCTL jmp (.1,x) -.1 .DA DRV.BlkDev.S - .DA DRV.BLK READ - .DA DRV.BLK WRITE - .DA DRV.BLK FORMAT +.1 .DA DRV.BLK.S + .DA DRV.GBLK READ + .DA DRV.GBLK WRITE + .DA DRV.GBLK FORMAT + +.9 lda #MLI.E.BADCALL +* sec +DRV.RTS rts *-------------------------------------- -DRV.RSP cld - cpx #IOCTL.CONTROL - bcs DRV.BadCall +DRV.BLK.S ldy #S.FD.DEV.SIZE + lda (pFD),y + tax + + iny + lda (pFD),y + tay + bne .8 + + txa + bne .8 - >STYA pIOCTL - jmp (.1,x) +* ldx #IOCTL.STATUS -.1 .DA DRV.RSP.S - .DA DRV.BLK READ - .DA DRV.BLK WRITE - .DA DRV.BLK FORMAT -*-------------------------------------- -DRV.BlkDev.S jsr DRV.Blk - bcs .9 + jsr DRV.GBLK + bcs DRV.RTS - stx DRV.BlkDev.DIB+S.DIB.SIZE - sty DRV.BlkDev.DIB+S.DIB.SIZE+1 +.8 stx DRV.BLK.DIB+S.DIB.SIZE + sty DRV.BLK.DIB+S.DIB.SIZE+1 - >LDYAI DRV.BlkDev.DIB + ldy #S.FD.DEV.TYPE + lda (pFD),y + tay + + lda DRV.IDS,y + tax + lda DRV.IDS+1,y + sta DRV.BLK.DIB+S.DIB.T + + ldy #0 + +.1 lda DRV.D2.IDS,x + beq .2 + + sta DRV.BLK.DIB+S.DIB.IDS+1,y + inx + iny + bra .1 + +.2 sty DRV.BLK.DIB+S.DIB.IDS + + lda #C.SPACE + +.3 cpy #16 + beq .4 + + sta DRV.BLK.DIB+S.DIB.IDS+1,y + iny + bra .2 + +.4 >LDYAI DRV.BLK.DIB jmp DRV.STATUS.YA -.9 rts *-------------------------------------- -DRV.BlkDev.DIB .DA #S.DIB.S.BLOCK+S.DIB.S.WRITE+S.DIB.S.READ +DRV.BLK.DIB .DA #S.DIB.S.BLOCK+S.DIB.S.WRITE+S.DIB.S.READ .BS 3 - .PS "ProDOS Block Dev" - .DA #S.DIB.T.PRODOS + .BS 17 IDString + .DA #S.DIB.T.BLK .DA #0 .DA K.VER *-------------------------------------- -DRV.RSP.S jsr DRV.Blk - bcs .9 - - stx DRV.RSP.DIB+S.DIB.SIZE - sty DRV.RSP.DIB+S.DIB.SIZE+1 - - >LDYAI DRV.RSP.DIB - jmp DRV.STATUS.YA - -.9 rts +DRV.IDS .DA #0,#S.DIB.T.D2 + .DA #DRV.RAM.IDS-DRV.D2.IDS,#S.DIB.T.BLK + .DA #DRV.USER.IDS-DRV.D2.IDS,#S.DIB.T.BLK + .DA #DRV.BLK.IDS-DRV.D2.IDS,#S.DIB.T.BLK + .DA #DRV.RBLK.IDS-DRV.D2.IDS,#S.DIB.T.BLK + .DA #0,#0 Smartport + .DA #DRV.RSP.IDS-DRV.D2.IDS,#S.DIB.T.BLK *-------------------------------------- -DRV.RSP.DIB .DA #S.DIB.S.BLOCK+S.DIB.S.WRITE+S.DIB.S.READ - .BS 3 - .PS "Remapped SP Dev " - .DA #S.DIB.T.PRODOS - .DA #0 - .DA K.VER +DRV.D2.IDS .CZ "Disk ][ 5.25" +DRV.RAM.IDS .CZ "ProDOS /RAM Disk" +DRV.USER.IDS .CZ "User Block Dev" +DRV.BLK.IDS .CZ "ProDOS Block Dev" +DRV.RBLK.IDS .CZ "Remapped BLK Dev" +DRV.RSP.IDS .CZ "Remapped SP Dev" *-------------------------------------- * IOCTL to BLK protocol converter * in : pIOCTL *-------------------------------------- -DRV.BLK txa +DRV.GBLK txa lsr sta DRV.BLK.P CMD @@ -183,8 +154,7 @@ DRV.BLK.P .BS 6 *-------------------------------------- * Smartport Driver *-------------------------------------- -DRV.SP cld - >STYA pIOCTL +DRV.SP >STYA pIOCTL >STYA .3 smartport Params txa @@ -221,31 +191,22 @@ DRV.SP.Cnt .HS 03030301030101010404 * - OPEN,WRITE,CLOSE always succeed. * - READ returns EOF. *-------------------------------------- -DRV.NULL cld - >STYA pIOCTL +DRV.NULL >STYA pIOCTL txa beq DRV.NULL.S - jmp (.1-12,x) -*-------------------------------------- -.1 -* .DA DRV.NULL.STATUS -* .DA A2osX.BADCALL READBLOCK -* .DA A2osX.BADCALL WRITEBLOCK -* .DA A2osX.BADCALL FORMAT -* .DA A2osX.BADCALL CONTROL -* .DA A2osX.BADCALL INIT - .DA DRV.CLCRTS OPEN - .DA DRV.CLCRTS CLOSE - .DA DRV.NULL.R - .DA DRV.CLCRTS WRITE -*-------------------------------------- -DRV.NULL.DIB .DA #S.DIB.S.WRITE+S.DIB.S.READ+S.DIB.S.OPENED - .DA #0,#0,#0 - .PS "NULL Device" - .BS 5 - .DA #S.DIB.T.CHAR - .DA #0 - .DA K.VER + + cmp #IOCTL.READ + beq DRV.NULL.R + + cmp #IOCTL.OPEN + bcc .9 + + cmp #IOCTL.IRQ + bcs .9 + + rts + +.9 jmp A2osX.BADCALL *-------------------------------------- DRV.NULL.S >LDYAI DRV.NULL.DIB *-------------------------------------- @@ -297,10 +258,18 @@ DRV.NULL.R ldx #C.EOF lda (pIOCTL),y sta .1+2 .1 stx $ffff SELF MODIFIED -*-------------------------------------- -DRV.CLCRTS clc + + clc rts *-------------------------------------- +DRV.NULL.DIB .DA #S.DIB.S.WRITE+S.DIB.S.READ+S.DIB.S.OPENED + .DA #0,#0,#0 + .PS "NULL Device" + .BS 5 + .DA #S.DIB.T.CHAR + .DA #0 + .DA K.VER +*-------------------------------------- MAN SAVE usr/src/sys/kernel.s.drv LOAD usr/src/sys/kernel.s diff --git a/SYS/KERNEL.S.INIT.txt b/SYS/KERNEL.S.INIT.txt index 2cd02e3f..fbc77793 100644 --- a/SYS/KERNEL.S.INIT.txt +++ b/SYS/KERNEL.S.INIT.txt @@ -474,7 +474,7 @@ CPU.Init >PUSHWI MSG.CPU cmp #A2osX.HWType.IIc beq CPU.Init2c *-------------------------------------- -* VBL = 20.000us 50hz, 16.666 60hz +* VBL = 20.000us 50hz, 16.666 60hz *-------------------------------------- ldx A2osX.HZ @@ -502,7 +502,7 @@ CPU.Init >PUSHWI MSG.CPU eor VBL bpl .3 - + lda VBL bmi .3 @@ -524,7 +524,7 @@ CPU.Init2c lda RDIOUDIS bit IO.IIC.CLRVBLIRQ clear //c IRQ .3 ldx A2osX.HZ - + .4 pha (3) pla (4) pha (3) @@ -706,14 +706,21 @@ DevMgrInit >LDYAI MSG.DEV cmp #$FF /RAM is always $FF00 bne .2 - jsr DevMgr.RAM + ldx #2 + jsr DevMgr.AddBDev bra .8 keep slot free .2 cmp #$D0 Disk II Driver is $D000 bne .3 - jsr DevMgr.DII - lda #A2osX.S.DII + lda #280 + sta FD.BDEV+S.FD.DEV.SIZE + lda /280 + sta FD.BDEV+S.FD.DEV.SIZE+1 + + ldx #0 + jsr DevMgr.AddBDev + lda #A2osX.S.D2 bra .7 Go mark slot as USED .3 bcs .53 > $D0, Some SP remapped DRV @@ -721,14 +728,15 @@ DevMgrInit >LDYAI MSG.DEV cmp #$C0 bcs .4 $C0 .. $CF, in slot ROM - jsr DevMgr.USR Outside ROM/LC space, User loaded BLK dev + ldx #4 + jsr DevMgr.AddBDev Outside ROM/LC space, User loaded BLK dev bra .8 keep slot free -.4 ldx #SmartPort.SIG-SmartPort.OFS-1 +.4 ldx #BDEV.SIG-BDEV.OFS-1 -.5 ldy SmartPort.OFS,x Check if there is a smartport firmware +.5 ldy BDEV.OFS,x Check if there is a smartport firmware lda (ZPPtr1),y - cmp SmartPort.SIG,x + cmp BDEV.SIG,x bne .8 not a Disk Controller... dex @@ -738,14 +746,39 @@ DevMgrInit >LDYAI MSG.DEV lda (ZPPtr1),y bne .6 $Cn07=00 : SmartPort - jsr DevMgr.SP + ldy #$ff + lda (ZPPtr1),y + clc + adc #3 Compute smartport entry point + sta FD.BDEV+S.FD.DEV.BUSPTR + + ldx #10 + jsr DevMgr.AddBDev lda #A2osX.S.SP bra .7 -.53 jsr DevMgr.RSP Remapped SP devices.... +.53 ldx #12 + jsr DevMgr.AddBDev Remapped SP devices.... bra .8 don't mark slot as busy -.6 jsr DevMgr.BLK +.6 ldy #$FC Size in Blk + lda (ZPPtr1),y + sta FD.BDEV+S.FD.DEV.SIZE + iny + lda (ZPPtr1),y + sta FD.BDEV+S.FD.DEV.SIZE+1 + + lda FD.BDEV+S.FD.DEV.BUSID 00000SSS + eor FD.BDEV+S.FD.DEV.BUSPTR+1 Cn + cmp #$C0 + beq .70 + + ldx #8 + jsr DevMgr.AddBDev Remapped BLK devices.... + bra .8 don't mark slot as busy + +.70 ldx #6 + jsr DevMgr.AddBDev lda #A2osX.S.BLK .7 ldx FD.BDEV+S.FD.DEV.BUSID @@ -759,36 +792,17 @@ DevMgrInit >LDYAI MSG.DEV .80 clc rts *-------------------------------------- -DevMgr.RAM ldx #0 - .HS 2C BIT ABS -*-------------------------------------- -DevMgr.DII ldx #2 - .HS 2C BIT ABS -*-------------------------------------- -DevMgr.USR ldx #4 - .HS 2C BIT ABS -*-------------------------------------- -DevMgr.BLK ldx #6 - .HS 2C BIT ABS -*-------------------------------------- -DevMgr.RSP ldx #10 - bra DevMgr.AddBDev -*-------------------------------------- -DevMgr.SP ldy #$ff - lda (ZPPtr1),y - clc - adc #3 Compute smartport entry point - sta FD.BDEV+S.FD.DEV.BUSPTR +DevMgr.AddBDev stx FD.BDEV+S.FD.DEV.TYPE - ldx #8 -*-------------------------------------- -DevMgr.AddBDev >LDYA DRV.BLKDEVX,x - >STYA FD.BDEV+S.FD.DEV.DRVPTR + lda DRV.BDEVs,x + sta FD.BDEV+S.FD.DEV.DRVPTR + lda DRV.BDEVs+1,x + sta FD.BDEV+S.FD.DEV.DRVPTR+1 - >PUSHWI MSG.BLKDEV + >PUSHWI MSG.BDEV >PUSHWI FD.BDEV.NAME >PUSHW FD.BDEV+S.FD.DEV.BUSPTR - >PUSHW MSG.BLKDEV.TBL,x + >PUSHW MSG.BDEVs,x >PUSHBI 6 >SYSCALL2 printf @@ -829,7 +843,7 @@ DevMgr.VXD >LDYAI VSD.PATCH bit RRAMWRAMBNK1 bit RRAMWRAMBNK1 - lda #A2osX.S.VXDRIVE + lda #A2osX.S.VXD sta A2osX.S,x plp @@ -899,22 +913,22 @@ IrqMgrInit >LDYAI MSG.IRQ pea $0000 pea $0000 >TKCALL GetVector - bcs * +* bcs * pla sta IRQ.GSVect+2 - + pla sta IRQ.GSVect - + pea $000C Vertical blanking interrupt handler pea $0000 pea CORE.IRQGS >TKCALL SetVector - bcs * - +* bcs * + pea $0002 Enable vertical blanking interrupts >TKCALL IntSource - bcs * +* bcs * sep #$30 short M,X sec @@ -1276,8 +1290,8 @@ Mouse.SIG .HS 38180120D6 TClock.OFS .HS 00020406 TClock.SIG .HS 08285870 *-------------------------------------- -SmartPort.OFS .HS 010305 -SmartPort.SIG .HS 200003 +BDEV.OFS .HS 010305 +BDEV.SIG .HS 200003 *-------------------------------------- MSG.Init2 .CZ "A2osX[Stage2]:Init\rRelocating Kernel...\r" MSG.KCREAD .CZ "Reading Kernel Config File..." @@ -1289,25 +1303,28 @@ MSG.Init2.OK .CZ "A2osX[Stage2]:Complete." *-------------------------------------- MSG.Init3 .CZ "A2osX[Stage3]:Init *** Press Ctrl-R for entering ROOT Mode ***\r\n" MSG.DEV .AZ "Device Manager..." -MSG.BLKDEV .CZ " Adding Device: /dev/%s, Addr:%H, Type: %s\r\n" -MSG.BLKDEV.TBL .DA MSG.BLKDEV.RAM - .DA MSG.BLKDEV.DII - .DA MSG.BLKDEV.USR - .DA MSG.BLKDEV.BLK - .DA MSG.BLKDEV.SP - .DA MSG.BLKDEV.RSP -MSG.BLKDEV.RAM .AZ "/RAM Disk" -MSG.BLKDEV.DII .AZ "Disk ][" -MSG.BLKDEV.USR .AZ "User" -MSG.BLKDEV.BLK .AZ "Generic Block" -MSG.BLKDEV.SP .AZ "SmartPort" -MSG.BLKDEV.RSP .AZ "SmartPort (Remapped)" -DRV.BLKDEVX .DA DRV.RAM - .DA DRV.DiskII - .DA DRV.BlkDev - .DA DRV.BlkDev +MSG.BDEV .CZ " Adding Device: /dev/%s, Addr:%H, Type: %s\r\n" +MSG.BDEVs .DA MSG.BDEV.D2 + .DA MSG.BDEV.RAM + .DA MSG.BDEV.USR + .DA MSG.BDEV.BLK + .DA MSG.BDEV.RBLK + .DA MSG.BDEV.SP + .DA MSG.BDEV.RSP +MSG.BDEV.D2 .AZ "Disk ][" +MSG.BDEV.RAM .AZ "/RAM Disk" +MSG.BDEV.USR .AZ "User Block" +MSG.BDEV.BLK .AZ "Generic Block" +MSG.BDEV.RBLK .AZ "Generic Block (Remapped)" +MSG.BDEV.SP .AZ "SmartPort" +MSG.BDEV.RSP .AZ "SmartPort (Remapped)" +DRV.BDEVs .DA DRV.BLK D2 + .DA DRV.BLK RAM + .DA DRV.BLK USR + .DA DRV.BLK + .DA DRV.BLK RBLK .DA DRV.SP - .DA DRV.RSP + .DA DRV.BLK RSP *-------------------------------------- MSG.IRQ .AZ "Interrupt Manager..." MSG.IRQGS .AZ " Apple IIgs VBL IRQ Activated." @@ -1375,6 +1392,7 @@ FD.NULL .DA #S.FD.T.CDEV .DA DRV.NULL .DA 0 DCBPTR .DA 0 BUFPTR + .BS 4 *-------------------------------------- FD.NULL.NAME .AZ "null" NAME *-------------------------------------- @@ -1386,6 +1404,7 @@ FD.TTY .DA #S.FD.T.CDEV .DA DRV.TERM .BS 2 DCBPTR .BS 2 BUFPTR + .BS 4 *-------------------------------------- FD.CONSOLE.NAME .AZ "console" FD.TTY.NAME .AZ "tty0" @@ -1398,6 +1417,8 @@ FD.BDEV .DA #S.FD.T.BDEV .BS 2 DRVPTR .DA 0 DCBPTR .DA 0 BUFPTR + .DA 0 SIZE + .DA 0 *-------------------------------------- FD.BDEV.NAME .AZ "s1d1" *-------------------------------------- diff --git a/SYS/KERNEL.S.TERM.txt b/SYS/KERNEL.S.TERM.txt index 9ddd4030..5f497c22 100644 --- a/SYS/KERNEL.S.TERM.txt +++ b/SYS/KERNEL.S.TERM.txt @@ -1,8 +1,7 @@ NEW AUTO 3,1 *-------------------------------------- -DRV.TERM cld - jmp (.1,x) +DRV.TERM jmp (.1,x) .1 .DA TERM.STATUS .DA A2osX.BADCALL