Kernel 0.9.1 : More room in GP to more ROM Calls!

This commit is contained in:
Rémy GIBERT 2017-10-18 17:32:56 +02:00
parent f3d06059ae
commit f29ad437fa
14 changed files with 201 additions and 184 deletions

Binary file not shown.

Binary file not shown.

View File

@ -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

View File

@ -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
*--------------------------------------

View File

@ -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
*--------------------------------------

View File

@ -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

View File

@ -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

View File

@ -289,6 +289,8 @@ CORE.DispatchEvents
.8 clc
rts
*--------------------------------------
pCodeJmp jmp (pCode)
*--------------------------------------
CORE.Quit clc
rts

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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