diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index 17294fd0..57074449 100644 Binary files a/.Floppies/A2OSX.BUILD.po and b/.Floppies/A2OSX.BUILD.po differ diff --git a/INC/A2osX.I.txt b/INC/A2osX.I.txt index 969f3b20..23bb099c 100644 --- a/INC/A2osX.I.txt +++ b/INC/A2osX.I.txt @@ -278,8 +278,8 @@ SYS.UnsetEnv .EQ $BE * .EQ $C8 * .EQ $CA -SYS.LRIntF .EQ $CC -SYS.Float .EQ $CE +* .EQ $CC +* .EQ $CE SYS.GetPWUID .EQ $D0 SYS.GetPWName .EQ $D2 diff --git a/INC/MACROS.I.txt b/INC/MACROS.I.txt index 5ec0d47e..ff38a512 100644 --- a/INC/MACROS.I.txt +++ b/INC/MACROS.I.txt @@ -127,32 +127,34 @@ FPU.DIV32 .EQ 8 FPU.IDIV32 .EQ 10 FPU.MOD32 .EQ 12 FPU.IMOD32 .EQ 14 +FPU.CMP32 .EQ 16 +FPU.ICMP32 .EQ 18 -FPU.FSUB .EQ 16 -FPU.FADD .EQ 18 -FPU.FMULT .EQ 20 -FPU.FDIV .EQ 22 -FPU.PWR .EQ 24 +FPU.FADD .EQ 20 +FPU.FSUB .EQ 22 +FPU.FMULT .EQ 24 +FPU.FDIV .EQ 26 +FPU.PWR .EQ 28 -FPU.LOG .EQ 26 -FPU.SQR .EQ 28 -FPU.EXP .EQ 30 -FPU.COS .EQ 32 -FPU.SIN .EQ 34 -FPU.TAN .EQ 36 -FPU.ATAN .EQ 38 +FPU.LOG .EQ 30 +FPU.SQR .EQ 32 +FPU.EXP .EQ 34 +FPU.COS .EQ 36 +FPU.SIN .EQ 38 +FPU.TAN .EQ 40 +FPU.ATAN .EQ 42 -FPU.SETARG .EQ 40 -FPU.SETFAC .EQ 42 PrintF +FPU.SETARG .EQ 44 fadd..... +FPU.SETFAC .EQ 46 log...., PrintF -FPU.GETFAC .EQ 44 Copy FAC to (FORPNT) -FPU.FCOMP .EQ 46 +FPU.GETFAC .EQ 48 Copy FAC to (FORPNT) +FPU.FCOMP .EQ 50 FPU.LTOF .EQ 48 Float FPU.QINT .EQ 50 lrintf -FPU.FIN .EQ 52 -FPU.FOUT .EQ 54 PrintF +FPU.FIN .EQ 56 sscanf +FPU.FOUT .EQ 58 PrintF *-------------------------------------- .MA FPU ldx #FPU.]1 diff --git a/SYS/KERNEL.S.DEF.txt b/SYS/KERNEL.S.DEF.txt index 3fc06a36..6bfe3894 100644 --- a/SYS/KERNEL.S.DEF.txt +++ b/SYS/KERNEL.S.DEF.txt @@ -40,13 +40,14 @@ DRV.BLK.BlkNum .EQ $46 * $5E-$C8 RESERVED APPLESOFT Main/Aux (ROM Call, no need to switch back MainZP) *-------------------------------------- *INDEX .EQ $5E ->$5F LOAD.FAC.FROM.YA +*DEST .EQ $60 ->$61 used in FCOMP RESULT .EQ $62 ->$66 used in FMULT FDIV TMP32.Sign .EQ RESULT TMP32 .EQ RESULT+1 *-------------------------------------- ZPTMP .EQ $67 ->$84 29 bytes *-------------------------------------- -FORPNT .EQ $85 ->$86 +FORPNT .EQ $85 ->$86 Used in GETFAC FAC .EQ $9D ->$A1 FAC.SIGN .EQ $A2 * FAC.EXTENSION .EQ $AC diff --git a/SYS/KERNEL.S.GP.txt b/SYS/KERNEL.S.GP.txt index 207efa06..70cc0813 100644 --- a/SYS/KERNEL.S.GP.txt +++ b/SYS/KERNEL.S.GP.txt @@ -169,25 +169,33 @@ GP.AtkCall dec IRQ.InKernel .1 .DA * jsr GO.A2osX - inc IRQ.InKernel +GP.AtkCall.INC inc IRQ.InKernel rts -*-------------------------------------- +*/-------------------------------------- +* # Add32,Sub32,Mul32,IMul32,Div32,IDiv32,Mod32,IMod32,Cmp32,ICmp32 +* Return X+Y, X-Y, X*Y, X/Y, X mod Y.... +* ## ASM +* **In:** +* `>PUSHF X (long)` +* `>PUSHF Y (long)` +* `>FPU add32` +* `...` +* ## RETURN VALUE +* On stack (long) +*\-------------------------------------- GP.FpuCall dec IRQ.InKernel jsr .1 - inc IRQ.InKernel - - clc - rts + bra GP.AtkCall.INC -.1 cpx #FPU.IMOD32+1 - bcc GP.RomCall.JmpX INT32 +.1 cpx #FPU.FADD + bcc GP.RomCall.JmpX INT32, direct JMP phx jsr GP.SetFAC Get float from stack plx cpx #FPU.PWR+1 - bcs .2 + bcs GP.RomCallGetFacOnStack */-------------------------------------- * # FAdd,FSub,FMult,FDiv,FPwr * Return X+Y, X-Y, X*Y, X/Y, X^Y @@ -229,9 +237,9 @@ GP.FpuCall dec IRQ.InKernel * ## RETURN VALUE * On stack (Float) *\-------------------------------------- -.2 jsr GP.ROMCALL +GP.RomCallGetFacOnStack + jsr GP.ROMCALL -GP.GETFAC.ON.STACK lda pStack ldy pStack+1 @@ -255,6 +263,68 @@ GP.RomCall phx rts *-------------------------------------- +GP.SetARG ldx #FPU.SETARG + .HS 2C BIT ABS +GP.SetFAC ldx #FPU.SETFAC + + >LDYA pStack + bra GP.RomCall +*/-------------------------------------- +* # float +* Return 'floated' long +* ## C +* `float f = (float)l; +* ## ASM +* **In:** +* `>PUSHL l` (long) +* `>FPU float` +* ## RETURN VALUE +* On stack (float) +*\-------------------------------------- +GP.Float ldy #3 + +.1 lda (pStack),y + sta FAC+1,y Reverse Order + dey + bpl .1 + + dec pStack keep 5 bytes on stack + + stz FAC.SIGN + lda #$80+32 + sta FAC Positive + Exp=32 + + ldx #FPU.LTOF + + bra GP.RomCallGetFacOnStack +*/-------------------------------------- +* # lrintf +* Return float rounded into a long +* ## C +* `long int lrintf (float x);` +* ## ASM +* **In:** +* `>PUSHF x` +* `>FPU lrintf` +* ## RETURN VALUE +* On stack (long) +*\-------------------------------------- +GP.lrintf jsr GP.SetFAC + + inc pStack keep 4 bytes on stack + + ldx #FPU.QINT + jsr GP.ROMCALL + + ldy #3 + +.1 lda FAC+1,y + sta (pStack),y + dey + bpl .1 + + rts +*-------------------------------------- GP.RomCall.JmpX jmp (.1,x) .1 .DA GP.ADD32 @@ -265,6 +335,8 @@ GP.RomCall.JmpX jmp (.1,x) .DA GP.IDIV32 .DA GP.UMOD32 .DA GP.IMOD32 + .DA GP.UCMP32 + .DA GP.ICMP32 * http://www.txbobsc.com/scsc/scdocumentor/E7A0.html @@ -281,12 +353,12 @@ GP.RomCall.JmpX jmp (.1,x) .DA $EFF1 SIN .DA $F03A TAN .DA $F09E ATN - +*-------------------------------------- .DA $E9E3 LOAD.ARG.FROM.YA .DA $EAF9 LOAD.FAC.FROM.YA .DA $EB27 SETFOR (GETFAC) - .DA $EBB2 FCOMP + .DA $EBB2 FCOMP (Y,A with FAC) .DA $E82E NORMALIZE.FAC.2 (L->F) .DA $EBF2 QINT (F->L) @@ -294,13 +366,6 @@ GP.RomCall.JmpX jmp (.1,x) .DA $EC4A FIN AToF .DA $ED36 FOUT.1 PrintF *-------------------------------------- -GP.SetARG ldx #FPU.SETARG - .HS 2C BIT ABS -GP.SetFAC ldx #FPU.SETFAC - - >LDYA pStack - bra GP.ROMCALL -*-------------------------------------- GP.ADD32 clc .HS B0 BCS GP.SUB32 sec @@ -313,19 +378,15 @@ GP.SUB32 sec ldx #3 plp - bcs .2 + bcs .1 + lda #$79 ADC Absolute,Y + .HS 2C BIT ABS +.1 lda #$F9 SBC Absolute,Y -.1 lda (pStack),y - adc ACC32,y - sta (pStack),y - iny - dex - bpl .1 - - rts + sta .3 .2 lda (pStack),y - sbc ACC32,y +.3 adc ACC32,y SELF MODIFIED sta (pStack),y iny dex @@ -333,6 +394,30 @@ GP.SUB32 sec GP.SUB32.RTS rts *-------------------------------------- +* Returns: +* ff X < Y +* 0 X = Y +* 1 X > Y +*-------------------------------------- +GP.UCMP32 +GP.ICMP32 jsr GP.SUB32 + + jsr GP.PopACC32 A = ACC32+3 (sign) + + tay + bmi .2 + +.1 ora ACC32+2 + ora ACC32+1 + ora ACC32 + beq .8 + + lda #1 + rts + +.2 lda #$ff +.8 rts +*-------------------------------------- GP.UMUL32 clc .HS B0 BCS GP.IMUL32 sec @@ -412,21 +497,17 @@ GP.PutNotARG32 lda #ARG32 rts *-------------------------------------- -GP.PopACC32 ldy #$ff +GP.PopACC32 ldy #0 -.1 iny - lda (pStack),y +.1 lda (pStack) + inc pStack sta ACC32,y - cpy #3 + iny + cpy #4 bne .1 sta ACC32.Sign - tya -* sec Add 3+CS=4 - adc pStack - sta pStack - rts *-------------------------------------- GP.GetARG32 ldy #0 @@ -439,7 +520,7 @@ GP.GetARG32 ldy #0 sta ARG32.Sign - rts +GP.GetARG32.RTS rts *-------------------------------------- GP.MULDIVMOD.COMMON php @@ -448,69 +529,12 @@ GP.MULDIVMOD.COMMON jsr GP.GetARG32 plp - bcc .1 + bcc GP.GetARG32.RTS jsr MATH.ACC32ABS - jsr MATH.ARG32ABS - -.1 rts -*/-------------------------------------- -* # float -* Return 'floated' long -* ## C -* `float f = (float)12345678; -* ## ASM -* **In:** -* `>PUSHL X` (long) -* ## RETURN VALUE -* On stack (float) -*\-------------------------------------- -K.Float ldy #3 - -.1 lda (pStack),y - sta FAC,y Reverse Order - dey - bpl .1 - - dec pStack keep 5 bytes on stack - - stz FAC.SIGN - lda #$80+32 - sta FAC Positive + Exp=32 - - ldx #FPU.LTOF - -GP.RomCallPushFAC - jsr GP.ROMCALL - jmp GP.GETFAC.ON.STACK -*/-------------------------------------- -* # lrintf -* Return float rounded into a long -* ## C -* `long int lrintf (float x);` -* ## ASM -* **In:** -* `>PUSHF x` -* `>SYSCALL lrintf` -* ## RETURN VALUE -* On stack (long) -*\-------------------------------------- -K.lrintf jsr GP.SetFAC - - inc pStack keep 4 bytes on stack - - ldx #FPU.QINT - jsr GP.ROMCALL - - ldy #3 - -.1 lda FAC+1,y - sta (pStack),y - dey - bpl .1 - - clc - rts + jmp MATH.ARG32ABS +*-------------------------------------- +* MLI : From Kernel Aux LC to Main LC *-------------------------------------- GP.MLICall stx .1 sta K.MLI.PARAMS @@ -620,11 +644,6 @@ CORE.Tick10t .BS 1 CORE.CPUStatCnt .DA #100 CORE.LastPSID .DA #0 *-------------------------------------- -DevMgr.Stat .DA DevMgr.FreeMem -DevMgr.Free .DA DevMgr.FreeMem - .DA DevMgr.HiMem -DevMgr.DevIdx .DA #1 -*-------------------------------------- IRQ.InKernel .BS 1 IRQ.InLib .BS 1 IRQ.SkipA2osX .BS 1 @@ -635,8 +654,6 @@ IRQ.VBL.0n .BS 1 IRQ.Mode .BS 1 IRQ.Tick .BS 1 *-------------------------------------- -IRQ.Vectors .BS K.IRQDEV.MAX*2 -*-------------------------------------- *GO.Reset jsr GO.A2osX * jmp CORE.Run *-------------------------------------- diff --git a/SYS/KERNEL.S.GPX.txt b/SYS/KERNEL.S.GPX.txt index af670403..007e0398 100644 --- a/SYS/KERNEL.S.GPX.txt +++ b/SYS/KERNEL.S.GPX.txt @@ -2,7 +2,7 @@ NEW AUTO 3,1 *-------------------------------------- * SYSCALL (AUXLC to AUXLC) -* Used by user & kernel for inter bank Calls +* Used by kernel for inter bank Calls from AUX * In: * X = SYSfnc.Index * Y,A = free for Inline param diff --git a/SYS/KERNEL.S.IRQ.txt b/SYS/KERNEL.S.IRQ.txt index 7861fb67..e8ce8323 100644 --- a/SYS/KERNEL.S.IRQ.txt +++ b/SYS/KERNEL.S.IRQ.txt @@ -227,6 +227,8 @@ K.IrqH.DEV ldx #0 .8 clv clear V (no task switching) rts *-------------------------------------- +IRQ.Vectors .BS K.IRQDEV.MAX*2 +*-------------------------------------- MAN SAVE USR/SRC/SYS/KERNEL.S.IRQ LOAD USR/SRC/SYS/KERNEL.S diff --git a/SYS/KERNEL.S.JMP.txt b/SYS/KERNEL.S.JMP.txt index d8576952..b516bb07 100644 --- a/SYS/KERNEL.S.JMP.txt +++ b/SYS/KERNEL.S.JMP.txt @@ -121,8 +121,8 @@ K.SYSCALL .DA 0 $00 .DA 0 .DA 0 .DA 0 - .DA K.LRIntF - .DA K.Float + .DA 0 + .DA 0 .DA K.GetPWUID $D0 .DA K.GetPWName diff --git a/SYS/KERNEL.S.STDLIB.txt b/SYS/KERNEL.S.STDLIB.txt index f4edc432..66fce144 100644 --- a/SYS/KERNEL.S.STDLIB.txt +++ b/SYS/KERNEL.S.STDLIB.txt @@ -41,7 +41,7 @@ K.AToF >STYA TXTPTR Ptr to source string jsr CHARGOT ldx #FPU.FIN - jmp GP.RomCallPushFAC + jmp GP.RomCallGetFacOnStack */-------------------------------------- * # StrToL/StrToUL * Convert String to 32 bits (unsigned) int diff --git a/SYS/KERNEL.S.txt b/SYS/KERNEL.S.txt index 29da74a0..5e8c85ba 100644 --- a/SYS/KERNEL.S.txt +++ b/SYS/KERNEL.S.txt @@ -79,6 +79,11 @@ PWD.hDB .BS 1 PWD.DBPtr .BS 2 PWD.DBSize .BS 2 PWD.FILE .AZ "${ROOT}ETC/PASSWD" +*-------------------------------------- +DevMgr.Stat .DA DevMgr.FreeMem +DevMgr.Free .DA DevMgr.FreeMem + .DA DevMgr.HiMem +DevMgr.DevIdx .DA #1 *-------------------------------------- .LIST ON DevMgr.FreeMem .EQ *