From bbbdd3d8677b28269e73adb3c06fbc5ac794b658 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20GIBERT?= Date: Mon, 16 Oct 2017 17:41:48 +0200 Subject: [PATCH] Kernel 0.9.1 : Floating point ROM hooks.... --- .Floppies/A2OSX.BUILD.po | Bin 819200 -> 819200 bytes .Floppies/A2OSX.SRC.po | Bin 819200 -> 819200 bytes INC/A2osX.I.txt | 4 +- INC/APPLESOFT.I.txt | 4 ++ INC/KERNEL.I.txt | 13 +++++- INC/MACROS.I.txt | 5 +++ SYS/KERNEL.S.GP.txt | 18 +++++++- SYS/KERNEL.S.INIT.txt | 28 ++++++++++++ SYS/KERNEL.S.JMP.txt | 4 +- SYS/KERNEL.S.STDIO.txt | 51 +++++++++++++++++----- SYS/KERNEL.S.STDLIB.txt | 13 +++++- TEST.S.txt | 90 +++++++++++++++++++++++++++++++++++++++ 12 files changed, 212 insertions(+), 18 deletions(-) create mode 100644 TEST.S.txt diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index e689cf26eb6e6a167d2a2116bc2d4384a11c06c7..d730fa9f57208d362759275fa87c26f8dba1a252 100644 GIT binary patch delta 9219 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 delta 7671 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 aah*p}=LxCvgw}beI*+u@6L!=i^ZXx4ZTfEj diff --git a/.Floppies/A2OSX.SRC.po b/.Floppies/A2OSX.SRC.po index f02da240d4c8661a5b0de79cbf4b3ed63912f652..ce78954d98fb4a0fdf7e5ecaea9535048c806152 100644 GIT binary patch delta 16861 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 p4-UkXB?h+DtuihZ16X{||WJ5hDNq delta 16103 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 Dp5YC8 diff --git a/INC/A2osX.I.txt b/INC/A2osX.I.txt index 6b771152..e6f2a531 100644 --- a/INC/A2osX.I.txt +++ b/INC/A2osX.I.txt @@ -139,8 +139,8 @@ SYS.ChGrp .EQ $6E SYS.AToF .EQ $70 SYS.AToI.YA .EQ $72 SYS.AToL .EQ $74 -* .EQ $76 -* .EQ $78 +SYS.StrToF .EQ $76 +SYS.StrToL .EQ $78 * .EQ $7A SYS.RealPath.YA .EQ $7C * .EQ $7E diff --git a/INC/APPLESOFT.I.txt b/INC/APPLESOFT.I.txt index 944dad38..824eb202 100644 --- a/INC/APPLESOFT.I.txt +++ b/INC/APPLESOFT.I.txt @@ -51,6 +51,9 @@ FMULT .EQ $E97F * FAC = (Y,A) / FAC *-------------------------------------- FDIV .EQ $EA66 + +LOAD.FAC.FROM.YA + .EQ $EAF9 *-------------------------------------- * CONVERT STRING TO FP VALUE IN FAC * STRING POINTED TO BY TXTPTR @@ -58,6 +61,7 @@ FDIV .EQ $EA66 * (A) = FIRST CHAR, C=0 IF DIGIT. *-------------------------------------- FIN .EQ $EC4A +FOUT .EQ $ED34 *-------------------------------------- SQR .EQ $EE8D *-------------------------------------- diff --git a/INC/KERNEL.I.txt b/INC/KERNEL.I.txt index 03167edd..57a8502c 100644 --- a/INC/KERNEL.I.txt +++ b/INC/KERNEL.I.txt @@ -44,10 +44,21 @@ ZPPtr4 .EQ ZPKERNEL+6 *-------------------------------------- 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 +FAC .EQ $9D ->$A1 +FAC.SIGN .EQ $A2 +FAC.EXTENSION .EQ $AC +TXTPTR .EQ $B8 +*-------------------------------------- +* ROM Entry Point +*-------------------------------------- +ROM.FIN .EQ $0 +ROM.FOUT .EQ $2 +*-------------------------------------- * Memory Map *-------------------------------------- A2osX.SaveSM .EQ $100 Aux diff --git a/INC/MACROS.I.txt b/INC/MACROS.I.txt index 71ee5ecc..5623baf3 100644 --- a/INC/MACROS.I.txt +++ b/INC/MACROS.I.txt @@ -110,6 +110,11 @@ AUTO 6 .FIN jsr A2osX.MLICALL .EM +*-------------------------------------- + .MA ROMCALL + ldx #ROM.]1 + jsr A2osX.ROMCALL + .EM *-------------------------------------- * Global DATA Segment Access *-------------------------------------- diff --git a/SYS/KERNEL.S.GP.txt b/SYS/KERNEL.S.GP.txt index a31d5906..9887ceef 100644 --- a/SYS/KERNEL.S.GP.txt +++ b/SYS/KERNEL.S.GP.txt @@ -101,7 +101,23 @@ A2osX.MLICALL1 stx .1 jsr GO.A2osX rts *-------------------------------------- -A2osX.ROMCALL1 bra * +A2osX.ROMCALL1 phx + ldx $D000 + stx .8+1 + + bit RROMBNK1 + + plx + jsr .1 + +.8 ldx #$ff + bit $C000,x + bit $C000,x + rts + +.1 jmp (.2,x) +.2 .DA $EC4A FIN + .DA $ED36 FOUT.1 *-------------------------------------- * A2osX.DIIDrv * X = DEVMGR.cmd diff --git a/SYS/KERNEL.S.INIT.txt b/SYS/KERNEL.S.INIT.txt index e0573731..b908c8e6 100644 --- a/SYS/KERNEL.S.INIT.txt +++ b/SYS/KERNEL.S.INIT.txt @@ -98,6 +98,13 @@ Kernel.Init3 sta SETALTZP bit RRAMWRAMBNK1 bit RRAMWRAMBNK1 + ldx #Kernel.ZP.S-1 + +.1 lda Kernel.ZP,x + sta CHARGET,x + dex + bpl .1 + jsr MemMgrInit jsr PS0Init bcs * @@ -153,6 +160,27 @@ Kernel.Init3 sta SETALTZP >SYSCALL PrintF.YA bra * No need to discard Expanded CMDLINE *-------------------------------------- +* Modified CHARGET/CHARGOT for ROM CALL +* CHRGET .EQ $B1 - C8 +*-------------------------------------- +Kernel.ZP .PH $B1 +CHARGET inc TXTPTR + bne CHARGOT + inc TXTPTR+1 + +CHARGOT lda $ffff + beq IsDigit.9 + +IsDigit cmp #'0' + bcc IsDigit.9 + cmp #'9'+1 + rts + +IsDigit.9 sec + rts + .EP +Kernel.ZP.S .EQ *-Kernel.ZP +*-------------------------------------- Kernel.Move ldy #0 .1 inc ZPPtr3 bne .2 diff --git a/SYS/KERNEL.S.JMP.txt b/SYS/KERNEL.S.JMP.txt index a3092f94..7dd5bbfa 100644 --- a/SYS/KERNEL.S.JMP.txt +++ b/SYS/KERNEL.S.JMP.txt @@ -74,8 +74,8 @@ K.SYSCALL.JMP .DA 0 $00 .DA K.AToF $70 .DA K.AToI.YA .DA K.AToL - .DA 0 - .DA 0 + .DA K.StrToF + .DA K.StrToL .DA 0 .DA K.RealPath.YA .DA 0 diff --git a/SYS/KERNEL.S.STDIO.txt b/SYS/KERNEL.S.STDIO.txt index 4400430e..3f0e1e6d 100644 --- a/SYS/KERNEL.S.STDIO.txt +++ b/SYS/KERNEL.S.STDIO.txt @@ -728,8 +728,8 @@ K.SScanF.IncPtr1 * %d : pull 1 byte unsigned DEC 0..255 * %D : pull 2 bytes unsigned DEC 0..65535 * %u : pull 2 bytes PTR to 4 bytes long unsigned DEC 0..4294967295 -* %e : pull 2 bytes PTR to 5 Bytes float +1.23456789e+12 -* %f : pull 2 bytes PTR to 5 Bytes float 3.1415 +* %e : pull 2 bytes PTR to 5 Bytes float (-)1.23456789e+12 +* %f : pull 2 bytes PTR to 5 Bytes float (-)3.1415 * %h : pull 1 byte to Print HEX * %H : pull 2 bytes to Print HEX * %i : pull 1 byte to Print signed DEC -128..127 @@ -933,17 +933,48 @@ PrintF.U.1 bcc .8 unsigned, nothing to check sec tell to print a "-" sign.... .8 jmp HEX2DEC -*-------------------------------------- -* .HS 9E 6E6B2800 1,000,000,000 +*-------------------------------------- * EXP(8) 1(s) 1significants(31) * http://apple2.org.za/gswv/a2zine/GS.WorldView/Resources/GS.TECH.INFO/AppleSoft/ *-------------------------------------- -PrintF.E -* >PULLW ZPPtr2 -* rts -*-------------------------------------- -PrintF.F >PULLW ZPPtr2 - rts +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 + + ldy #3 In order not to trash A2osX.SaveSM,A2osX.SaveSX + >ROMCALL FOUT + + ldx #0 + +.2 lda $102,x + beq .8 + + phx + jsr Printf.Cout + plx + inx + bne .2 + +.8 clc + +.9 rts *-------------------------------------- PrintF.HH >PULLA pha diff --git a/SYS/KERNEL.S.STDLIB.txt b/SYS/KERNEL.S.STDLIB.txt index d706ca05..2ca45880 100644 --- a/SYS/KERNEL.S.STDLIB.txt +++ b/SYS/KERNEL.S.STDLIB.txt @@ -13,9 +13,18 @@ AUTO 6 * ## Out: *\-------------------------------------- K.StrToF jsr PullPtr1Ptr2Ptr3 - jsr K.AToF.I - bcc K.StrToUL.Exit +* jsr K.AToF.I +* bcc K.StrToUL.Exit + >LDYA ZPPtr2 + >STYA TXTPTR + + jsr CHARGOT + + >ROMCALL FIN + + + .9 rts */-------------------------------------- * # AToF diff --git a/TEST.S.txt b/TEST.S.txt new file mode 100644 index 00000000..c56a45ca --- /dev/null +++ b/TEST.S.txt @@ -0,0 +1,90 @@ +PR#3 +PREFIX /A2OSX.BUILD +NEW +INC 1 +AUTO 6 + .LIST OFF + .OP 65C02 + .OR $2000 + .TF /A2OSX.BUILD/TEST +*-------------------------------------- + .INB /A2OSX.BUILD/INC/MACROS.I + .INB /A2OSX.BUILD/INC/A2OSX.I +*-------------------------------------- +* File Header (16 Bytes) +*-------------------------------------- +CS.START cld + jmp (.1,x) + .DA #$61 6502,Level 1 (65c02) + .DA #1 BIN Layout Version 1 + .DA 0 + .DA CS.END-CS.START CS + .DA DS.END-DS.START DS + .DA #64 SS + .DA #0 ZP + .DA 0 +*-------------------------------------- +* Relocation Table +*-------------------------------------- +.1 .DA CS.INIT + .DA CS.RUN + .DA CS.DOEVENT + .DA CS.QUIT +L.FLOAT1 .DA FLOAT1 +L.FLOAT2 .DA FLOAT2 +L.FLOAT3 .DA FLOAT3 +L.FLOAT4 .DA FLOAT4 +L.FLOAT5 .DA FLOAT5 +L.MSG .DA MSG +L.CONST .DA CONST + .DA 0 +*-------------------------------------- +CS.INIT clc + rts +*-------------------------------------- +CS.RUN >PUSHEA.G ENDPTR + >LDYA L.CONST + >PUSHEA.G MYFLOAT + >SYSCALL StrToF + + >PUSHEA.G MYFLOAT + >PUSHW L.FLOAT5 + >PUSHW L.FLOAT4 + >PUSHW L.FLOAT3 + >PUSHW L.FLOAT2 + >PUSHW L.FLOAT1 + + >LDYA L.MSG + + >SYSCALL PrintF.YA + + lda #0 + sec +.9 rts +*-------------------------------------- +CS.DOEVENT sec + rts +*-------------------------------------- +CS.QUIT clc + rts +*-------------------------------------- +CS.END +MSG >CSTR "TEST: %e, %e, %e\r\n %e, %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 +CONST >CSTR "3.141592653" +*-------------------------------------- + .DUMMY + .OR 0 +DS.START +MYFLOAT .BS 5 +ENDPTR .BS 2 +DS.END + .ED +*-------------------------------------- +MAN +SAVE /A2OSX.BUILD/TEST.S +ASM