diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index 727664f8..dd9ff584 100644 Binary files a/.Floppies/A2OSX.BUILD.po and b/.Floppies/A2OSX.BUILD.po differ diff --git a/.Floppies/A2OSX.SRC.po b/.Floppies/A2OSX.SRC.po index 2a1463e5..1fc4f4d0 100644 Binary files a/.Floppies/A2OSX.SRC.po and b/.Floppies/A2OSX.SRC.po differ diff --git a/BIN/LSDEV.S.txt b/BIN/LSDEV.S.txt index 344757db..403f671a 100644 --- a/BIN/LSDEV.S.txt +++ b/BIN/LSDEV.S.txt @@ -11,6 +11,7 @@ AUTO 6 .INB /A2OSX.BUILD/INC/MACROS.I .INB /A2OSX.BUILD/INC/PRODOS.I .INB /A2OSX.BUILD/INC/A2OSX.I + .INB /A2OSX.BUILD/INC/KERNEL.I *-------------------------------------- ZPPTR1 .EQ ZPBIN ZPPTR2 .EQ ZPBIN+2 diff --git a/INC/A2osX.I.txt b/INC/A2osX.I.txt index c3408a7c..f0042ffc 100644 --- a/INC/A2osX.I.txt +++ b/INC/A2osX.I.txt @@ -31,10 +31,7 @@ A2osX.MLICALL .EQ $BD06 A2osX.ROMCALL .EQ $BD09 A2osX.BADCALL .EQ $BD0C *-------------------------------------- -pCodeJmp .EQ $BD10 -*pLibJmp .EQ $BD13 -pDrvJmp .EQ $BD16 -pDevJmp .EQ $BD19 +pDevJmp .EQ $BD10 *-------------------------------------- * $BEE0->$BEEF : Public Variables *-------------------------------------- diff --git a/INC/KERNEL.I.txt b/INC/KERNEL.I.txt index 0e9dda7f..33a268a0 100644 --- a/INC/KERNEL.I.txt +++ b/INC/KERNEL.I.txt @@ -34,20 +34,14 @@ H.BIN.DRV.CODE.O .EQ 12 H.BIN.DRV.CODE.LEN .EQ 14 H.BIN.DRV.REL.TABLE .EQ 0 *-------------------------------------- -* Kernel ZP Aux -*-------------------------------------- -ZPPtr1 .EQ $0 -ZPPtr2 .EQ ZPPtr1+2 -ZPPtr3 .EQ ZPPtr1+4 -ZPPtr4 .EQ ZPPtr1+6 -*-------------------------------------- +ZPKERNEL .EQ $0 ZPMEMMGR .EQ $8 *-------------------------------------- * $42-$47 ProDOS Block Device Drivers Main *-------------------------------------- * $5E-$C8 RESERVED APPLESOFT Main/Aux (ROM Call, no need to switch back MainZP) *-------------------------------------- -*INDEX .EQ $5E ->$5F +INDEX .EQ $5E ->$5F FORPNT .EQ $85 ->$86 FAC .EQ $9D ->$A1 FAC.SIGN .EQ $A2 @@ -56,9 +50,10 @@ TXTPTR .EQ $B8 *-------------------------------------- * ROM Entry Point *-------------------------------------- -ROM.GETFAC .EQ $0 Get FAC at FORPNT -ROM.FIN .EQ $2 -ROM.FOUT .EQ $4 +ROM.SETFAC .EQ 10 Set FAC from INDEX +ROM.GETFAC .EQ 12 Get FAC at FORPNT +ROM.FIN .EQ 14 +ROM.FOUT .EQ 16 *-------------------------------------- * Memory Map *-------------------------------------- diff --git a/LIB/LIBMATH.S.txt b/LIB/LIBMATH.S.txt index 8f9fca16..e7eed196 100644 --- a/LIB/LIBMATH.S.txt +++ b/LIB/LIBMATH.S.txt @@ -36,12 +36,20 @@ CS.START cld .DA TAN .DA 0 *-------------------------------------- -COS +COS >PULLW INDEX + >ROMCALL SETFAC + >ROMCALL COS *-------------------------------------- SIN *-------------------------------------- TAN *-------------------------------------- +ACOS +*-------------------------------------- +ASIN +*-------------------------------------- +ATAN +*-------------------------------------- LIB.LOAD LIB.UNLOAD clc rts diff --git a/SYS/KERNEL.S.BIN.txt b/SYS/KERNEL.S.BIN.txt index 0731f20e..27891ff1 100644 --- a/SYS/KERNEL.S.BIN.txt +++ b/SYS/KERNEL.S.BIN.txt @@ -96,7 +96,7 @@ K.LoadDrv.YA jsr BIN.FindDRV >LDYA ZPPtr1 - jsr pDrvJmp call Dev.Detect + jsr .88 call Dev.Detect bcs .96 jsr BIN.InstallDRV @@ -113,6 +113,8 @@ K.LoadDrv.YA jsr BIN.FindDRV jsr K.FreeMem.A pla rts + +.88 jmp (pDrv) */-------------------------------------- * # FileSearch * Search a file in the provided PATH list diff --git a/SYS/KERNEL.S.CORE.txt b/SYS/KERNEL.S.CORE.txt index 9505bd22..647aeac9 100644 --- a/SYS/KERNEL.S.CORE.txt +++ b/SYS/KERNEL.S.CORE.txt @@ -289,6 +289,8 @@ CORE.DispatchEvents .8 clc rts +*-------------------------------------- +pCodeJmp jmp (pCode) *-------------------------------------- CORE.Quit clc rts diff --git a/SYS/KERNEL.S.D01.txt b/SYS/KERNEL.S.D01.txt index e5f2cb5c..f103cd61 100644 --- a/SYS/KERNEL.S.D01.txt +++ b/SYS/KERNEL.S.D01.txt @@ -4,6 +4,137 @@ LOMEM $A00 INC 1 AUTO 6 *-------------------------------------- +* A2osX.DIIDrv +* X = DEVMGR.cmd +* Y,A = PTR to Params +* pDev -> Dev Header AUX!!! +* $42 Command Number +* $43 Unit Number +* $44-$45 Buffer Pointer +* $46-$47 Block Number +*-------------------------------------- +A2osX.DIIDrv .DA A2osX.DIIDrv.S status + .DA A2osX.DIIDrv.RW Read + .DA A2osX.DIIDrv.RW Write + .DA A2osX.BadCall Format + .DA A2osX.BadCall + .DA A2osX.BadCall + .DA A2osX.BadCall + .DA A2osX.BadCall + .DA A2osX.BadCall + .DA A2osX.BadCall + .DA A2osX.BadCall +*-------------------------------------- +A2osX.DIIDrv.S >LDYAI A2osx.DIIStat + clc + rts +*-------------------------------------- +A2osX.DIIDrv.RW >STYA GO.DiskII.RW.1+1 + jsr A2osX.Blk.GetCmdAndDevAX + jmp GO.DiskII.RW +*-------------------------------------- +A2osx.DIIStat .DA #S.DEVSTAT.S.BLOCK+S.DEVSTAT.S.WRITE+S.DEVSTAT.S.READ + .DA 280 + .DA #0 + >PSTR "Disk II 5.25" + .BS 4 + .DA #S.DEVSTAT.T.DISKII + .DA #0 + .DA #0,#9 +*-------------------------------------- +* A2osX.BlkDrv +* X = DEVMGR.cmd +* Y,A = PTR to Params +* pDev -> Dev Header +* $42 Command Number +* $43 Unit Number +* $44-$45 Buffer Pointer +* $46-$47 Block Number +*-------------------------------------- +A2osX.BlkDrv .DA A2osX.BlkDrv.S status + .DA A2osX.BlkDrv.RW + .DA A2osX.BlkDrv.RW + .DA A2osX.BlkDrv.F + .DA A2osX.BadCall + .DA A2osX.BadCall + .DA A2osX.BadCall + .DA A2osX.BadCall + .DA A2osX.BadCall + .DA A2osX.BadCall + .DA A2osX.BadCall +*-------------------------------------- +A2osX.BlkDrv.S jsr A2osX.Blk.GetCmdAndDev + + jsr A2osX.BlkDrv.Go + bcs .9 + stx A2osx.BlkStat+S.DEVSTAT.SIZE + sty A2osx.BlkStat+S.DEVSTAT.SIZE+1 + + >LDYAI A2osX.BlkStat + clc +.9 rts +*-------------------------------------- +A2osX.BlkDrv.RW >STYA A2osX.Blk.GetParam.1+1 + + jsr A2osX.Blk.GetCmdAndDev + + jsr A2osX.Blk.GetParam + bra A2osX.BlkDrv.Go +*-------------------------------------- +A2osX.BlkDrv.F jsr A2osX.Blk.GetCmdAndDev + +A2osX.BlkDrv.Go ldy #S.DEV.ROM.JMP + lda (pDev),y + sta .8+1 + iny + lda (pDev),y + sta .8+2 +.8 jmp $ffff +*-------------------------------------- +A2osX.Blk.GetParam + ldy #3 +A2osX.Blk.GetParam.1 + lda $ffff,y Self Modified + sta $44,y + dey + bpl A2osX.Blk.GetParam.1 + rts +*-------------------------------------- +A2osX.Blk.GetCmdAndDev + jsr A2osX.Blk.GetCmdAndDevAX + stx $42 + sta $43 + rts +A2osX.Blk.GetCmdAndDevAX + txa + lsr + tax CMD + + ldy #S.DEV.DEVID Drive 1, or 2 + lda (pDev),y + dec O or 1 + lsr in Carry + php + + ldy #S.DEV.BUSID + lda (pDev),y + asl + asl + asl + asl + asl + plp + ror DSSS0000 + + rts +*-------------------------------------- +A2osX.BlkStat .DA #S.DEVSTAT.S.BLOCK+S.DEVSTAT.S.WRITE+S.DEVSTAT.S.READ + .BS 3 + >PSTR "ProDOS Block Dev" + .DA #S.DEVSTAT.T.PRODOS + .DA #0 + .DA #0,#9 +*-------------------------------------- * Smartport Driver *-------------------------------------- A2osX.PrtDrv .DA A2osX.PrtDrv.S STATUS diff --git a/SYS/KERNEL.S.GP.txt b/SYS/KERNEL.S.GP.txt index a622204f..a5ca3a23 100644 --- a/SYS/KERNEL.S.GP.txt +++ b/SYS/KERNEL.S.GP.txt @@ -43,14 +43,7 @@ AUTO 6 sec rts *-------------------------------------- - jmp (pCode) pCodeJmp - jmp (*) pLibJmp - jmp (pDrv) pDrvJmp jmp (pDev) pDevJmp - .BS $BD20-* -*-------------------------------------- -GO.Reset jsr GO.A2osX - jmp CORE.Run *-------------------------------------- * *** MUST BE REINTRANT *** *-------------------------------------- @@ -116,149 +109,39 @@ A2osX.ROMCALL1 phx rts .1 jmp (.2,x) -.2 .DA $EB27 SETFOR +.2 .DA $E7A7 FSUB + .DA $E7BE FADD + .DA $E941 LOG + .DA $E97F FMULT + .DA $EA66 FDIV + .DA $EAFD LOAD.FAC.FROM.INDEX + .DA $EB27 SETFOR .DA $EC4A FIN .DA $ED36 FOUT.1 + .DA $EE8D SQR + .DA $EE97 FPWRT + .DA $EF09 EXP + .DA $EFEA COS + .DA $EFF1 SIN + .DA $F03A TAN + .DA $F09E ATN *-------------------------------------- -* A2osX.DIIDrv -* X = DEVMGR.cmd -* Y,A = PTR to Params -* pDev -> Dev Header AUX!!! -* $42 Command Number -* $43 Unit Number -* $44-$45 Buffer Pointer -* $46-$47 Block Number -*-------------------------------------- -A2osX.DIIDrv .DA A2osX.DIIDrv.S status - .DA A2osX.DIIDrv.RW Read - .DA A2osX.DIIDrv.RW Write - .DA A2osX.BadCall Format -* .DA A2osX.DRV.BadCall -* .DA A2osX.DRV.BadCall -* .DA A2osX.DRV.BadCall -* .DA A2osX.DRV.BadCall -* .DA A2osX.DRV.BadCall -* .DA A2osX.DRV.BadCall -* .DA A2osX.DRV.BadCall -*-------------------------------------- -A2osX.DIIDrv.S >LDYAI A2osx.DIIStat - clc - rts -*-------------------------------------- -A2osX.DIIDrv.RW >STYA A2osX.Blk.GetParam.1+1 - jsr A2osX.Blk.GetCmdAndDevAX - jsr GO.ProDOS +GO.DiskII.RW jsr GO.ProDOS stx $42 sta $43 - jsr A2osX.Blk.GetParam + ldy #3 + +GO.DiskII.RW.1 lda $ffff,y Self Modified + sta $44,y + dey + bpl GO.DiskII.RW.1 + jsr $D000 cli jsr GO.A2osX rts *-------------------------------------- -A2osx.DIIStat .DA #S.DEVSTAT.S.BLOCK+S.DEVSTAT.S.WRITE+S.DEVSTAT.S.READ - .DA 280 - .DA #0 - >PSTR "Disk II 5.25" - .BS 4 - .DA #S.DEVSTAT.T.DISKII - .DA #0 - .DA #0,#9 -*-------------------------------------- -* A2osX.BlkDrv -* X = DEVMGR.cmd -* Y,A = PTR to Params -* pDev -> Dev Header -* $42 Command Number -* $43 Unit Number -* $44-$45 Buffer Pointer -* $46-$47 Block Number -*-------------------------------------- -A2osX.BlkDrv .DA A2osX.BlkDrv.S status - .DA A2osX.BlkDrv.RW - .DA A2osX.BlkDrv.RW - .DA A2osX.BlkDrv.F -* .DA A2osX.DRV.BadCall -* .DA A2osX.DRV.BadCall -* .DA A2osX.DRV.BadCall -* .DA A2osX.DRV.BadCall -* .DA A2osX.DRV.BadCall -* .DA A2osX.DRV.BadCall -* .DA A2osX.DRV.BadCall -*-------------------------------------- -A2osX.BlkDrv.S jsr A2osX.Blk.GetCmdAndDev - - jsr A2osX.BlkDrv.Go - bcs .9 - stx A2osx.BlkStat+S.DEVSTAT.SIZE - sty A2osx.BlkStat+S.DEVSTAT.SIZE+1 - - >LDYAI A2osX.BlkStat - clc -.9 rts -*-------------------------------------- -A2osX.BlkDrv.RW >STYA A2osX.Blk.GetParam.1+1 - - jsr A2osX.Blk.GetCmdAndDev - - jsr A2osX.Blk.GetParam - bra A2osX.BlkDrv.Go -*-------------------------------------- -A2osX.BlkDrv.F jsr A2osX.Blk.GetCmdAndDev - -A2osX.BlkDrv.Go ldy #S.DEV.ROM.JMP - lda (pDev),y - sta .8+1 - iny - lda (pDev),y - sta .8+2 -.8 jmp $ffff -*-------------------------------------- -A2osX.BlkStat .DA #S.DEVSTAT.S.BLOCK+S.DEVSTAT.S.WRITE+S.DEVSTAT.S.READ - .BS 3 - >PSTR "ProDOS Block Dev" - .DA #S.DEVSTAT.T.PRODOS - .DA #0 - .DA #0,#9 -*-------------------------------------- -A2osX.Blk.GetParam - ldy #3 -A2osX.Blk.GetParam.1 - lda $ffff,y Self Modified - sta $44,y - dey - bpl A2osX.Blk.GetParam.1 - rts -*-------------------------------------- -A2osX.Blk.GetCmdAndDev - jsr A2osX.Blk.GetCmdAndDevAX - stx $42 - sta $43 - rts -A2osX.Blk.GetCmdAndDevAX - txa - lsr - tax CMD - - ldy #S.DEV.DEVID Drive 1, or 2 - lda (pDev),y - dec O or 1 - lsr in Carry - php - - ldy #S.DEV.BUSID - lda (pDev),y - asl - asl - asl - asl - asl - plp - ror DSSS0000 - - rts -*-------------------------------------- GO.ProDOS pha lda $D000 We re coming from AUXLC, saving bank... sta GO.A2osX.BNK+1 @@ -324,8 +207,6 @@ GO.EXIT.JMP jmp $FFFF Self Modified * must exit with RTS * - CC if IRQ cleared, CS if NOT *-------------------------------------- -ProDOS.INTNUM .BS 1 -*-------------------------------------- IrqHandler cld lda RDALTZP sta .2+1 @@ -351,9 +232,15 @@ IrqHandler cld .3 rts *-------------------------------------- -BrkHandler bra * +*GO.Reset jsr GO.A2osX +* jmp CORE.Run *-------------------------------------- - .BS A2osX.HZ-* fill to $BEF0 +*BrkHandler bra * +*-------------------------------------- + .LIST ON +A2osX.GP.S .EQ *-A2osX.SYSCALL + .LIST OFF + .BS $BEE0-* *-------------------------------------- .DA #6 60hz .BS 7 diff --git a/SYS/KERNEL.S.INIT.txt b/SYS/KERNEL.S.INIT.txt index b908c8e6..d0ab6bb5 100644 --- a/SYS/KERNEL.S.INIT.txt +++ b/SYS/KERNEL.S.INIT.txt @@ -4,6 +4,13 @@ LOMEM $A00 INC 1 AUTO 6 *-------------------------------------- +* Kernel ZP Aux +*-------------------------------------- +ZPPtr1 .EQ ZPKERNEL +ZPPtr2 .EQ ZPKERNEL+2 +ZPPtr3 .EQ ZPKERNEL+4 +ZPPtr4 .EQ ZPKERNEL+6 +*-------------------------------------- Kernel.Init sei ldx #$FF txs @@ -481,7 +488,7 @@ IrqMgrInit >LDYAI MSG.IRQ php sei >LDYA $FFFE - >STYA K.IrqMgrOldFFFE + >STYA IRQ.OldFFFE >LDYAI K.IrqHandlerAuxLC >STYA $FFFE @@ -491,7 +498,7 @@ IrqMgrInit >LDYAI MSG.IRQ bcs .9 lda K.MLI.PARAMS+1 - sta ProDOS.INTNUM + sta IRQ.INTNUM plp diff --git a/SYS/KERNEL.S.IRQ.txt b/SYS/KERNEL.S.IRQ.txt index 2a60062d..156b3e68 100644 --- a/SYS/KERNEL.S.IRQ.txt +++ b/SYS/KERNEL.S.IRQ.txt @@ -52,9 +52,7 @@ K.IrqHandlerAuxLC lda .12+1 -.8 jmp (K.IrqMgrOldFFFE) -*-------------------------------------- -K.IrqMgrOldFFFE .BS 2 +.8 jmp (IRQ.OldFFFE) *-------------------------------------- * Called by : * Kernel IrqHandlerAuxLC @@ -133,6 +131,10 @@ K.IrqHandler.DEV .8 rts *-------------------------------------- +IRQ.IntNum .BS 1 +*-------------------------------------- +IRQ.OldFFFE .BS 2 +*-------------------------------------- K.IrqMgrVBL.n0 .BS 1 K.IrqMgrVBL.0n .BS 1 K.IrqMgrVBL.MSM jmp $0000 diff --git a/SYS/KERNEL.S.STDIO.txt b/SYS/KERNEL.S.STDIO.txt index 3f0e1e6d..736c9a8b 100644 --- a/SYS/KERNEL.S.STDIO.txt +++ b/SYS/KERNEL.S.STDIO.txt @@ -940,23 +940,8 @@ PrintF.U.1 bcc .8 unsigned, nothing to check PrintF.E sec Force "E+12" .HS 90 BCC PrintF.F clc - >PULLW ZPPtr2 - - ldy #4 - -.1 lda (ZPPtr2),y - sta FAC,y - dey - bne .1 - - sta FAC.SIGN - ora #$80 - sta FAC+1 - - lda (ZPPtr2) - sta FAC - - stz FAC.EXTENSION + >PULLW INDEX + >ROMCALL SETFAC ldy #3 In order not to trash A2osX.SaveSM,A2osX.SaveSX >ROMCALL FOUT diff --git a/TEST.S.txt b/TEST.S.txt index 526d3a08..afcd7c1b 100644 --- a/TEST.S.txt +++ b/TEST.S.txt @@ -80,14 +80,14 @@ CS.QUIT clc rts *-------------------------------------- CS.END -MSG >CSTR "TEST: %e, %e, %e, %e, %e\r\n%e, %e\r\n" +MSG >CSTR "PrintF:%e,%e,%e,%e,%e\r\nStrToF:%e,%e\r\n" FLOAT1 .HS 9B3EBC1FFD 99,999,999.9 FLOAT2 .HS 9E6E6B27FD 999,999,999 FLOAT3 .HS 9E6E6B2800 1,000,000,000 FLOAT4 .HS 8100000000 1 FLOAT5 .HS 9080000000 -32768 CONST1 >CSTR "3.141592653" -CONST2 >CSTR "-45.567E-17" +CONST2 >CSTR "-12.345678E-17" *-------------------------------------- .DUMMY .OR 0