Kernel 0.92

This commit is contained in:
Rémy GIBERT 2019-01-04 13:17:31 +00:00
parent 3c534a25fd
commit 145217f291
25 changed files with 331 additions and 319 deletions

Binary file not shown.

View File

@ -17,12 +17,12 @@ TmpPtr1 .EQ $0 main & aux ZP
TmpPtr2 .EQ $2 main & aux ZP
*--------------------------------------
A2osX.KMLOAD .EQ $2000
A2osX.KMMAXLEN .EQ $4000
A2osX.OpenBuff1 .EQ $6000 1024 Buffer for MLIOPEN01
A2osX.OpenBuff2 .EQ $6400 1024 Buffer for MLIOPEN02
A2osX.ReadBuff .EQ $6800 512 Buffer for MLIREAD01
Boot.Prefix .EQ $6A00 MLI.MAXPATH
KM.Filename .EQ $6A80 MLI.MAXPATH
A2osX.KMMAXLEN .EQ $6000
A2osX.OpenBuff1 .EQ $8000 1024 Buffer for MLIOPEN01
A2osX.OpenBuff2 .EQ $8400 1024 Buffer for MLIOPEN02
A2osX.ReadBuff .EQ $8800 512 Buffer for MLIREAD01
Boot.Prefix .EQ $8A00 MLI.MAXPATH
KM.Filename .EQ $8A80 MLI.MAXPATH
*--------------------------------------
* Kernel Stage 0
*--------------------------------------

View File

@ -11,7 +11,12 @@ AUTO 4,1
.INB INC/A2OSX.I
.INB INC/KERNEL.I
*--------------------------------------
ZPFDPtr .EQ ZPBIN
.DUMMY
.OR ZPBIN
ZS.START
ZPFDPtr .BS 2
ZS.END
.ED
*--------------------------------------
* File Header (16 Bytes)
*--------------------------------------
@ -19,11 +24,12 @@ 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 #16 SS
.DA #4 ZP
.DA #0 S.PS.F.EVENT
.DA #0
.DA CS.END-CS.START Code Size (without Constants)
.DA DS.END-DS.START Data SegmentSize
.DA #16 Stack Size
.DA #ZS.END-ZS.START Zero Page Size
.DA 0
*--------------------------------------
* Relocation Table

View File

@ -483,7 +483,6 @@ DIB .DA #0
.BS 3
.DA #S.DIB.T.GFX
.DA #0
.DA #0
.DA K.VER
*--------------------------------------
DCB .DA #S.DCB.T.GFX

View File

@ -51,7 +51,7 @@ Dev.Detect >STYA ARGS
ldx #$70
ldy #7
.1 lda A2osX.S,y IO based detection, avoid scanning in Disk Controller IO!!!!
bne .2

View File

@ -13,7 +13,7 @@ MOU.Init
bne .1
clc
.9 rts
rts
.2 stx hDevMouse
txa

View File

@ -39,7 +39,7 @@ L.MouseData .DA MouseData
*--------------------------------------
CS.INIT >LDYA L.LIBGUI
>SYSCALL LoadLib
bcs .98
bcs CS.INIT.RTS
sta hLIBGUI
lda (pPs)
@ -103,18 +103,18 @@ CS.QUIT clc
*--------------------------------------
Destop.Paint >LIBCALL hLIBGUI,LIBGUI.HideCursor
>LIBCALL hLIBGUI,LIBGUI.GetScreenGC
>PUSHYA
>PUSHW L.CB.Paint
>LIBCALL hLIBGUI,LIBGUI.Draw
* >LIBCALL hLIBGUI,LIBGUI.GetScreenGC
* >PUSHYA
* >PUSHW L.CB.Paint
* >LIBCALL hLIBGUI,LIBGUI.Draw
* >LIBCALL hLIBGUI,LIBGUI.GetScreenGC
* >PUSHYA
>PUSHW L.GC.Clip
* >PUSHW L.GC.Clip
>PUSHW L.CB.Marylin
>LIBCALL hLIBGUI,LIBGUI.Draw
* >PUSHW L.CB.Marylin
* >LIBCALL hLIBGUI,LIBGUI.Draw
>LIBCALL hLIBGUI,LIBGUI.ShowCursor
rts

View File

@ -69,6 +69,7 @@ CS.RUN >LDYA L.FILENAME
>SYSCALL ExpandStr
txa
>STA.G hFileName
>PUSHBI 0
>LDYA L.MSG.TOPBAR
>SYSCALL printf
@ -78,6 +79,7 @@ CS.RUN >LDYA L.FILENAME
>PUSHBI 0
>LDYA L.MSG.TOPBAR.OK
bra .2
.1 >PUSHBI 0
>LDYA L.MSG.TOPBAR.KO
@ -168,22 +170,21 @@ CS.RUN.Loop >SLEEP
CS.RUN.Load >PUSHEA.G StatBuf
>LDA.G hFileName
>SYSCALL GetMemPtr
>PUSHYA
>SYSCALL Stat
bcs .99
sec
>LDA.G StatBuf+S.STAT.SIZE
eor #16
bne .99
* >LDA.G StatBuf+S.STAT.SIZE
* eor #16
* bne .99
iny
lda (pData),y
iny
ora (pData),y
iny
ora (pData),y
bne .99
* iny
* lda (pData),y
* iny
* ora (pData),y
* iny
* ora (pData),y
* bne .99
>LDA.G StatBuf+S.STAT.P.TYPE
eor #S.FI.T.SYS
@ -212,8 +213,12 @@ CS.RUN.Load >PUSHEA.G StatBuf
txa
>STA.G hFileBuf
lda #6
lda #6 60 Hz
sta (ZPCfgPtr)
ldy #1
lda #4 4 TTYs
sta (ZPCfgPtr),y
sec
rts
@ -224,7 +229,6 @@ CS.RUN.Save >PUSHWI A2osX.KCONFIG
>LDA.G hFileName
>SYSCALL GetMemPtr
>SYSCALL FOpen
bcs .9

View File

@ -1,6 +1,17 @@
NEW
PREFIX
AUTO 4,1
*--------------------------------------
.DUMMY
.OR FAC 15 Bytes
BIN.CmdLine .BS 2
BIN.hMem .BS 1
BIN.Move.Len .BS 2
BIN.R.CS.Start .BS 2
BIN.R.CS.End .BS 2
BIN.R.End .BS 2
BIN.R.Offset .BS 2
.ED
*--------------------------------------
* LoadLib
* in :
@ -117,7 +128,7 @@ BIN.FindDRV sec
.1 jsr K.GetEnv get value for Search Path
bcs .9
>STYA K.FileSearch.SearchPath
>STYA ENV.SearchPath
>LDYA BIN.CmdLine
@ -139,7 +150,6 @@ BIN.Find.ENV.LIB .AZ "LIB"
* X = hMem of Code Segment
*--------------------------------------
BIN.Load >STYA BIN.CmdLine
>STYA .2+1
ldx #0
@ -163,7 +173,7 @@ BIN.Load >STYA BIN.CmdLine
ldy #0
.2 lda $ffff,y SELF MODIFIED
.2 lda (BIN.CmdLine),y
.3 cmp $ffff,y SELF MODIFIED
bne .1
iny
@ -261,9 +271,6 @@ BIN.Load.1
sec
.99 rts
*--------------------------------------
BIN.CmdLine .BS 2
BIN.hMem .BS 1
*/--------------------------------------
* # InsDrv
* ## C
@ -340,8 +347,6 @@ K.InsDrv >STYA ZPPtr1
sec
rts
*--------------------------------------
BIN.Move.Len .BS 2
*--------------------------------------
BIN.MoveToYA >STYA ZPPtr2
lda BIN.Move.Len+1
@ -371,13 +376,6 @@ BIN.MoveToYA >STYA ZPPtr2
.3 rts
*--------------------------------------
* BIN.Rel___ :
*--------------------------------------
BIN.R.CS.Start .BS 2
BIN.R.CS.End .BS 2
BIN.R.End .BS 2
BIN.R.Offset .BS 2
*--------------------------------------
BIN.RelExe ldy #H.BIN.T+1
lda (ZPPtr1),y
cmp /H.BIN.T.BIN65
@ -510,6 +508,35 @@ BIN.RelDrv ldy #H.BIN.DRV.REL.TABLE
.8 rts
*--------------------------------------
* 6502/65C02/65816 OPCODES
* Bit 3 : 1 = absolute addressing
* Bit 2-1-0 : opcode + @ length
*--------------------------------------
* 0.1.2.3.4.5.6.7.8.9.A.B.C.D.E.F
BIN.65816
* TO DO : Make 2 different tables
* http://axis.llx.com/~nparker/a2/opcodes.html
*--------------------------------------
* 65R02 OPCODES
*--------------------------------------
* 0.1.2.3.4.5.6.7.8.9.A.B.C.D.E.F
BIN.65R02 .HS 1.2.2.1.2.2.2.2.1.2.1.1.B.B.B.3
.HS 2.2.2.1.2.2.2.2.1.B.1.1.B.B.B.3
.HS B.2.2.1.2.2.2.2.1.2.1.1.B.B.B.3
.HS 2.2.2.1.2.2.2.2.1.B.1.1.B.B.B.3
.HS 1.2.2.1.2.2.2.2.1.2.1.1.B.B.B.3
.HS 2.2.2.1.2.2.2.2.1.B.1.1.1.B.B.3
.HS 1.2.2.1.2.2.2.2.1.2.1.1.B.B.B.3
.HS 2.2.2.1.2.2.2.2.1.B.1.1.B.B.B.3
.HS 2.2.2.1.2.2.2.2.1.2.1.1.B.B.B.3
.HS 2.2.2.1.2.2.2.2.1.B.1.1.B.B.B.3
.HS 2.2.2.1.2.2.2.2.1.2.1.1.B.B.B.3
.HS 2.2.2.1.2.2.2.2.1.B.1.1.B.B.B.3
.HS 2.2.2.1.2.2.2.2.1.2.1.1.B.B.B.3
.HS 2.2.2.1.2.2.2.2.1.B.1.1.1.B.B.3
.HS 2.2.2.1.2.2.2.2.1.2.1.1.B.B.B.3
.HS 2.2.2.1.2.2.2.2.1.B.1.1.1.B.B.3
*--------------------------------------
MAN
SAVE USR/SRC/SYS/KERNEL.S.BIN
LOAD USR/SRC/SYS/KERNEL.S

View File

@ -3,7 +3,6 @@ PREFIX
AUTO 4,1
*--------------------------------------
ZPKERNEL .EQ $0
ZPMEMMGR .EQ $10
*--------------------------------------
ZPPtr1 .EQ ZPKERNEL
ZPPtr2 .EQ ZPKERNEL+2
@ -15,7 +14,9 @@ pDRV .EQ ZPKERNEL+10
pIOCTL .EQ ZPKERNEL+12
pIOBuf .EQ ZPKERNEL+14
*--------------------------------------
SYS.BASL0 .EQ $400
ZPMEMMGR .EQ $10
*--------------------------------------
SIGNFLG .EQ $16 COS,SIN,TAN
*--------------------------------------
* AuxMove / XFer
*--------------------------------------
@ -37,14 +38,19 @@ DRV.BLK.BlkNum .EQ $47
*--------------------------------------
* $5E-$C8 RESERVED APPLESOFT Main/Aux (ROM Call, no need to switch back MainZP)
*--------------------------------------
SIGNFLG .EQ $16 COS,SIN,TAN
INDEX .EQ $5E ->$5F
RESULT .EQ $62 ->$66 used in FMULT FDIV
*--------------------------------------
ZPTMP .EQ $67 ->$84 29 bytes
*--------------------------------------
FORPNT .EQ $85 ->$86
FAC .EQ $9D ->$A1
FAC.SIGN .EQ $A2
ARG .EQ $A5 -> $A9 (5 bytes)
ARG.SIGN .EQ $AA
*FAC.EXTENSION .EQ $AC
* FAC.EXTENSION .EQ $AC
* CHARGET .EQ $B1
* CHARGOT .EQ $B7
TXTPTR .EQ $B8
*--------------------------------------
* ROM Entry Point
@ -93,6 +99,8 @@ K.STACKTOP .EQ $03ED XFer !!! down to $3E0
*--------------------------------------
*** $3F0-$3FF IRQ Handler.... ***
*--------------------------------------
SYS.BASL0 .EQ $400
*--------------------------------------
* Main/Aux $400 -> $7FF : TXT PAGE1 Screens
*--------------------------------------
* MemMgr : $0800->$0FFF MAIN/AUX (2 kBytes)

View File

@ -79,7 +79,7 @@ K.GetDevStatus.I
K.MKDev jsr MEM.SPtr1PPtr2 ptr1=fd, ptr2=name
ldx DevMgr.DevCnt
cmp #K.DEV.MAX
cpx #K.DEV.MAX
beq .9
>LDYAI S.FD.DEV

View File

@ -77,13 +77,15 @@ K.OpenDir jsr PFT.CheckPathYA
* A = EC
* note : A = 0 means no more entry
*\--------------------------------------
.DUMMY
.OR ZPTMP+15 conflict with PTime2Time
K.ReadDir.hMem .BS 1
K.ReadDir.BufSize .BS 2
K.ReadDir.ECIB .BS 1
*--S.DIR Cache ------------------------
K.ReadDir.EL .BS 1
K.ReadDir.EPB .BS 1
K.ReadDir.EC .BS 2
.ED
*--------------------------------------
K.ReadDir jsr PFT.CheckNodeA
bcs K.ReadDir.RTS
@ -520,7 +522,8 @@ K.ReadDir.AddStat
.8 rts
*--------------------------------------
ADDF.SRC .HS 1013141516171f20
ADDF.DST .DA #S.STAT.P.TYPE,#S.STAT.BLOCKS,#S.STAT.BLOCKS+1
ADDF.DST .DA #S.STAT.P.TYPE
.DA #S.STAT.BLOCKS,#S.STAT.BLOCKS+1
.DA #S.STAT.SIZE,#S.STAT.SIZE+1,#S.STAT.SIZE+2
.DA #S.STAT.P.AUXTYPE,#S.STAT.P.AUXTYPE+1
*--------------------------------------

View File

@ -9,6 +9,16 @@ AUTO 4,1
* X = hMem to Expanded String (C-String)
* Y,A = PTR to Expanded String
*\--------------------------------------
.DUMMY
.OR ZPDRV
ENV.SearchPath .BS 2
ENV.BufLen .BS 1
ENV.bNoExp .BS 1
ENV.VarLen .BS 1
ENV.VarName .BS 16
ENV.ZPSIZE .EQ *
.ED
*--------------------------------------
K.ExpandStr stz .88+1 Reset Intermediate string...
.1 >STYA ZPPtr2
@ -140,7 +150,7 @@ K.ExpandStr stz .88+1 Reset Intermediate string...
* CS : not found
*\--------------------------------------
K.FileSearch pha
>PULLW K.FileSearch.SearchPath
>PULLW ENV.SearchPath
>PULLW .2+1 DstBuf
>PULLW .4+1 DstStat
@ -166,7 +176,7 @@ K.FileSearch pha
K.FileSearch.YA >STYA .4+1
>LDYA K.FileSearch.SearchPath
>LDYA ENV.SearchPath
jsr K.ExpandStr Y,A = Search Path, Expand it
bcs .99
@ -221,8 +231,6 @@ K.FileSearch.YA >STYA .4+1
lda #MLI.E.FNOTFND
sec
rts
*--------------------------------------
K.FileSearch.SearchPath .BS 2
*/--------------------------------------
* # PutEnv
* Change or add an environment variable, string is 'NAME=VALUE'
@ -703,11 +711,6 @@ ENV.AddAToBuf ldx ENV.BufLen
inc ENV.BufLen
rts
*--------------------------------------
ENV.BufLen .BS 1
ENV.bNoExp .BS 1
ENV.VarLen .BS 1
ENV.VarName .BS 16
*--------------------------------------
MAN
SAVE USR/SRC/SYS/KERNEL.S.ENV
LOAD USR/SRC/SYS/KERNEL.S

View File

@ -17,6 +17,16 @@ AUTO 4,1
* Y,A = File Length (without ending 0)
* X = hMem of Loaded File
*\--------------------------------------
.DUMMY
.OR ZPTMP
FIO.bTXT .BS 1
FIO.hFILE .BS 1
FIO.MemPtr .BS 2
FIO.hMem .BS 1
FIO.BytesRead .BS 2
FIO.ZPSIZE .EQ *
.ED
*--------------------------------------
K.LoadTxtFile sec
.HS 90 BCC
*/--------------------------------------
@ -41,7 +51,7 @@ K.LoadFile clc
jsr K.FOpen
bcs .9
.12 sta .99+2 hFILE
.12 sta FIO.hFILE
pha
>PUSHWI K.S.Stat
@ -67,29 +77,28 @@ K.LoadFile clc
.1 jsr K.GetMem
bcs .99
>STYA FIO.Mem
stx .8+1
>STYA FIO.MemPtr
stx FIO.hMem
>PUSHW K.S.Stat+S.STAT.SIZE
>PUSHW FIO.Mem
lda .99+2
>PUSHW FIO.MemPtr
lda FIO.hFILE
jsr K.FRead
bcc .2
pha
lda .8+1
lda FIO.hMem
jsr K.FreeMem
pla
.99 pha
lda #$ff SELF MODIFIED
lda FIO.hFILE
jsr K.FClose
pla
sec
.9 rts
.2 sty .6+1
sta .7+1 Save Bytes read
.2 >STYA FIO.BytesRead
bit FIO.bTXT
bpl .5
@ -99,25 +108,21 @@ K.LoadFile clc
* clc
adc FIO.Mem
adc FIO.MemPtr
sta .4+1
pla
adc FIO.Mem+1
adc FIO.MemPtr+1
sta .4+2
.4 stz $ffff Self Modified
.5 jsr .99 close file
.6 ldy #$ff Self Modified
.7 lda #$ff Self Modified
.8 ldx #$ff Self Modified
>LDYA FIO.BytesRead
ldx FIO.hMem
clc
rts
*--------------------------------------
FIO.bTXT .BS 1
FIO.Mem .BS 2
*/--------------------------------------
* # ChTyp
* Change The type of a ProDOS File

View File

@ -43,7 +43,6 @@ GP.CodeStart jmp GP.SysCall
* SLEEP
*--------------------------------------
php
sei
phy
@ -78,13 +77,14 @@ GP.CodeStart jmp GP.SysCall
tsx
inx skip P
inx skip PC HI,LO
inx
inx
inx keep PC HI,LO from KERNEL jsr PSExec/PSResume
inx Stack Ptr is $1ff if empty
txa
beq .8
beq .3
tay Save !Byte count for later
@ -95,9 +95,13 @@ GP.CodeStart jmp GP.SysCall
tya
.8 >PUSHA push CPU Stack BC to restore on top of Soft Stack
.3 >PUSHA push CPU Stack BC to restore on top of Soft Stack
lda (pPs)
inc $1fe PC=PC+1
bne .4
inc $1ff because of RTI
.4 lda (pPs)
ora #S.PS.F.SLEEP
sta (pPs)
@ -156,10 +160,10 @@ GP.LibCall dec IRQ.InKernel
pha No need to save X, K.GetMemPtr will leave it unmodified
tya Get LIB hMem in A
jsr K.GetMemPtr Get LIB Code Segment (MemMgr in $E000, no BNK change)
jsr K.GetMemPtr Get LIB Code Segment (MemMgr in $E000, no BNK change)
>STYA .1+1
pla
.1 jsr * SELF MODIFIED
.1 jsr $FFFF SELF MODIFIED
inc IRQ.InKernel
@ -177,6 +181,23 @@ GP.AtkCall dec IRQ.InKernel
inc IRQ.InKernel
rts
*--------------------------------------
GP.RomCallPushFAC
jsr GP.ROMCALL
lda pStack
sec
sbc #5
sta pStack
sta FORPNT Ptr to dst buffer
lda pStack+1
sta FORPNT+1
ldx #ROM.GETFAC
jsr GP.ROMCALL
clc
rts
*--------------------------------------
GP.RomCall dec IRQ.InKernel
phx
@ -329,6 +350,7 @@ IRQ.InKernel .BS 1
IRQ.IntNum .BS 1
IRQ.VBL.n0 .BS 1
IRQ.VBL.0n .BS 1
IRQ.Vectors .BS K.IRQDEV.MAX*2
*--------------------------------------
*GO.Reset jsr GO.A2osX
* jmp CORE.Run

View File

@ -154,7 +154,7 @@ Kernel.Init3 sta SETALTZP
lda KBD
bpl .1
sta KBDSTROBE
cmp #146 CTRL-R for Maintenance mode
cmp #146 CTRL-R for ROOT mode
bne .1
>PUSHBI 0
@ -636,7 +636,7 @@ IrqMgrInit >LDYAI MSG.IRQ
rts
*--------------------------------------
IrqMgrInit.TClock
stz ZPPtr1 Try finding a Mouse Card...
stz ZPPtr1 Try finding a TClock Card...
lda #$C1
sta ZPPtr1+1
@ -1073,7 +1073,7 @@ MSG.EVT .AZ "Event Manager..."
MSG.TSK .AZ "Task Manager..."
MSG.Prefix .AZ "Root:%s\r\n"
MSG.CTRLR .AZ "Ctrl-R Pressed, entering ROOT mode..."
MSG.ETCINIT .AZ "Executing ETC/INIT Script:%s "
MSG.ETCINIT .AZ "Executing %s..."
MSG.StartupErr .AZ "Failed : [$%h]\r\n"
MSG.Init3.OK .AZ "OK\r\nA2osX[Stage3]:Complete.\r\n"
*--------------------------------------

View File

@ -17,6 +17,7 @@ AUTO 4,1
K.Open.FLAGS .BS 1
K.Open.TYPE .BS 1
K.Open.AUXTYPE .BS 2
IO.hFD .BS 1
*--------------------------------------
K.Open jsr PFT.YAToMLIPATH
>PULLB K.Open.FLAGS
@ -474,7 +475,6 @@ K.Pipe
rts
*--------------------------------------
IO.DEVDIR >PSTR "/DEV/"
IO.hFD .BS 1
*--------------------------------------
MAN
SAVE USR/SRC/SYS/KERNEL.S.IO

View File

@ -236,8 +236,6 @@ 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

View File

@ -92,21 +92,7 @@ K.Float ldx #4
ldx #ROM.LTOF
MATH.Go jsr GP.ROMCALL
lda pStack
sec
sbc #5
sta pStack
sta FORPNT
lda pStack+1
sta FORPNT+1
ldx #ROM.GETFAC
jsr GP.ROMCALL
clc
rts
MATH.Go jmp GP.RomCallPushFAC
*/--------------------------------------
* # lrintf
* Return float rounded into a long

View File

@ -707,40 +707,12 @@ MEM.AddYToPtr1 clc
.8 rts
*--------------------------------------
MEM.PutCharPtr2 sta (ZPPtr2)
MEM.NextCharPtr2
inc ZPPtr2
bne .8
inc ZPPtr2+1
.8 rts
*--------------------------------------
* 6502/65C02/65816 OPCODES
* Bit 3 : 1 = absolute addressing
* Bit 2-1-0 : opcode + @ length
*--------------------------------------
* 0.1.2.3.4.5.6.7.8.9.A.B.C.D.E.F
BIN.65816
* TO DO : Make 2 different tables
* http://axis.llx.com/~nparker/a2/opcodes.html
*--------------------------------------
* 65R02 OPCODES
*--------------------------------------
* 0.1.2.3.4.5.6.7.8.9.A.B.C.D.E.F
BIN.65R02 .HS 1.2.2.1.2.2.2.2.1.2.1.1.B.B.B.3
.HS 2.2.2.1.2.2.2.2.1.B.1.1.B.B.B.3
.HS B.2.2.1.2.2.2.2.1.2.1.1.B.B.B.3
.HS 2.2.2.1.2.2.2.2.1.B.1.1.B.B.B.3
.HS 1.2.2.1.2.2.2.2.1.2.1.1.B.B.B.3
.HS 2.2.2.1.2.2.2.2.1.B.1.1.1.B.B.3
.HS 1.2.2.1.2.2.2.2.1.2.1.1.B.B.B.3
.HS 2.2.2.1.2.2.2.2.1.B.1.1.B.B.B.3
.HS 2.2.2.1.2.2.2.2.1.2.1.1.B.B.B.3
.HS 2.2.2.1.2.2.2.2.1.B.1.1.B.B.B.3
.HS 2.2.2.1.2.2.2.2.1.2.1.1.B.B.B.3
.HS 2.2.2.1.2.2.2.2.1.B.1.1.B.B.B.3
.HS 2.2.2.1.2.2.2.2.1.2.1.1.B.B.B.3
.HS 2.2.2.1.2.2.2.2.1.B.1.1.1.B.B.3
.HS 2.2.2.1.2.2.2.2.1.2.1.1.B.B.B.3
.HS 2.2.2.1.2.2.2.2.1.B.1.1.1.B.B.3
*--------------------------------------
MAN
SAVE USR/SRC/SYS/KERNEL.S.MEM
LOAD USR/SRC/SYS/KERNEL.S

View File

@ -2,8 +2,13 @@ NEW
PREFIX
AUTO 4,1
*--------------------------------------
.DUMMY
.OR ZPTMP+21
PS.Flags .BS 1
PS.ArgV .BS 2
PS.ArgSize .BS 2
PS.hMem .BS 1
.ED
*/--------------------------------------
* # ExecL
* ## C
@ -126,7 +131,7 @@ PS.CreateChild ldx CORE.PSCount
bcs .99
>STYA ZPPtr3
stx PS.Load.hMem
stx PS.hMem
txa
plx
sta PS.Table.hPS,x
@ -255,7 +260,7 @@ PS.Load >PUSHWI K.S.STAT
>SYSCALL stat BANK 1
bcs .99
lda PS.Load.hMem Restore ZPPtr3 trashed by GetEnv
lda PS.hMem Restore ZPPtr3 trashed by GetEnv
jsr K.GetMemPtr
>STYA ZPPtr3
@ -386,8 +391,6 @@ PS.LoadGetHeader.RTS
*--------------------------------------
PS.Load.ROOT .AZ "ROOT"
PS.Load.HEADER .AZ "#!/"
PS.Load.ArgSize .BS 2
PS.Load.hMem .BS 1
*--------------------------------------
* PS.DupEnv
* In:
@ -418,8 +421,8 @@ PS.DupEnv jsr K.GetMemPtr
*--------------------------------------
* hBIN + PS.ArgV -> #S.PS.hARGV
*--------------------------------------
PS.AddArgV stz PS.Load.ArgSize
stz PS.Load.ArgSize+1
PS.AddArgV stz PS.ArgSize
stz PS.ArgSize+1
lda K.IOBuf
beq .10
@ -427,7 +430,7 @@ PS.AddArgV stz PS.Load.ArgSize
>LDYAI K.IOBuf
jsr K.strlen
iny +1 for \0
>STYA PS.Load.ArgSize
>STYA PS.ArgSize
ldx #0 ARGC-1
.HS 2C
@ -448,11 +451,11 @@ PS.AddArgV stz PS.Load.ArgSize
tya
sec
adc PS.Load.ArgSize
sta PS.Load.ArgSize
adc PS.ArgSize
sta PS.ArgSize
bcc .3
inc PS.Load.ArgSize+1
inc PS.ArgSize+1
.3 jsr MEM.AddYp1ToPtr1
bra .1
@ -461,7 +464,7 @@ PS.AddArgV stz PS.Load.ArgSize
ldy #S.PS.ARGC
sta (ZPPtr3),y
>LDYA PS.Load.ArgSize Add 1 for ending 0
>LDYA PS.ArgSize Add 1 for ending 0
iny
bne .5
inc

View File

@ -170,6 +170,11 @@ K.FPutS jsr PFT.CheckNodeA set IO.hFD
* + %011s : 'ABCDEFGH000'
* + %2f : '3.14'
*\--------------------------------------
.DUMMY
.OR ZPTMP
PrintF.Cnt .BS 2
.ED
*--------------------------------------
K.SPrintF >STYA pIOBuf Out Buffer
>PULLW ZPPtr1 format
bra K.PrintF.1
@ -184,7 +189,7 @@ K.PrintF >STYA ZPPtr1 format
ldy #S.PS.hStdOut
lda (pPs),y
K.PrintF.0 sta PrintF.hFILE
K.PrintF.0 sta PrintF.Flush.hFILE+1
>LDYAI K.IOBuf
>STYA pIOBuf
@ -673,15 +678,13 @@ PrintF.COut phy
PrintF.Flush >PUSHW PrintF.Cnt
>PUSHWI K.IOBuf
lda PrintF.hFILE
PrintF.Flush.hFILE
lda #$ff SELF MODIFIED
jsr PFT.CheckNodeA
bcs .9
jmp IO.Write.I
.9 >RET 4
*--------------------------------------
PrintF.hFILE .BS 1
PrintF.Cnt .BS 2
*/--------------------------------------
* # FGetS
* read bytes from stream into the array
@ -1161,6 +1164,11 @@ K.FSeek jsr PFT.CheckNodeA
* A !=0 NOT EOF
* CS :
*\--------------------------------------
.DUMMY
.OR ZPTMP
K.FEOF.MARK .BS 3
.ED
*--------------------------------------
K.FEOF jsr PFT.CheckNodeA
bcs .9
@ -1185,10 +1193,9 @@ K.FEOF jsr PFT.CheckNodeA
dey
bpl .2
.8 clc
.8
* clc
.9 rts
K.FEOF.MARK .BS 3
*/--------------------------------------
* # FTell
* Return the current value of the file-position indicator

View File

@ -42,22 +42,7 @@ K.AToF >STYA TXTPTR Ptr to source string
K.AToF.I jsr CHARGOT
ldx #ROM.FIN
**** DUP code in MATH.Go ****
jsr GP.ROMCALL
lda pStack
sec
sbc #5
sta pStack
sta FORPNT Ptr to dst buffer
lda pStack+1
sta FORPNT+1
ldx #ROM.GETFAC
jsr GP.ROMCALL
clc
rts
jmp GP.RomCallPushFAC
*/--------------------------------------
* # StrToL/StrToUL
* Convert String to 32 bits (unsigned) int

View File

@ -8,6 +8,18 @@ SECSDAY .EQ 86400 60*60*24
CENTURY0 .EQ 19
YEAR0 .EQ 70
DAY0 .EQ 4 day 0 was a thursday
*--------------------------------------
.DUMMY
.OR ZPTMP
TIME.DWORD .BS 4
TIME.DivDay .BS 2
TIME.ModDay .BS 3
TIME.Div60 .BS 2
TIME.Mod .BS 1
TIME.Div3600 .BS 1
TIME.Century .BS 1
TIME.Year .BS 1
.ED
*/--------------------------------------
* # Time
* Get System Time in Buffer
@ -42,7 +54,7 @@ TIME.PTime2TimeP1P2
lsr C is high bit of month
ldy #S.Time.YEAR
sta (ZPPtr2),y set year
sta K.CTime.Year for conputing Century/WDAY later
sta TIME.Year for conputing Century/WDAY later
lda (ZPPtr1) Get Month/day
pha save Day
@ -59,7 +71,7 @@ TIME.PTime2TimeP1P2
iny
sta (ZPPtr2),y set day
lda K.CTime.Year get back year
lda TIME.Year get back year
cmp #69 if before 70 CC,if > 70, CS
lda #0
@ -67,7 +79,7 @@ TIME.PTime2TimeP1P2
eor #1 toggle C
adc #19 set date before 1970 -> 20xx
sta (ZPPtr2) set Century
sta K.CTime.Century for conputing WDAY later
sta TIME.Century for conputing WDAY later
ldy #2
lda (ZPPtr1),y Get Min
@ -89,16 +101,16 @@ TIME.PTime2TimeP1P2
K.ComputeWDAY lda #3 Thursday : 4 (-1 for mod 7)
pha
lda #19
sta K.CTime.DWORD
sta TIME.DWORD
lda #70
sta K.CTime.DWORD+1
sta TIME.DWORD+1
.1 ldy K.CTime.DWORD
lda K.CTime.DWORD+1
.1 ldy TIME.DWORD
lda TIME.DWORD+1
cpy K.CTime.Century
cpy TIME.Century
bne .2
cmp K.CTime.Year
cmp TIME.Year
beq .4
.2 jsr TIME.IsLeapYearYA CS = Leap
@ -110,13 +122,13 @@ K.ComputeWDAY lda #3 Thursday : 4 (-1 for mod 7)
sbc #7 MOD 7
.3 pha
inc K.CTime.DWORD+1
lda K.CTime.DWORD+1
inc TIME.DWORD+1
lda TIME.DWORD+1
cmp #100
bne .1
lda #0
sta K.CTime.DWORD+1
inc K.CTime.DWORD
sta TIME.DWORD+1
inc TIME.DWORD
bra .1
.4 ldy #S.Time.MONTH
@ -126,8 +138,8 @@ K.ComputeWDAY lda #3 Thursday : 4 (-1 for mod 7)
.5 lda K.StrFTime.MDAY-1,x get day count in this month
bne .6 february ?
ldy K.CTime.Century
lda K.CTime.Year
ldy TIME.Century
lda TIME.Year
jsr TIME.IsLeapYearYA CS = Leap
.6 pla
@ -173,145 +185,145 @@ K.CTime2Time jsr MEM.SPtr1PPtr2
ldy #3
.1 lda (ZPPtr1),y
sta K.CTime.DWORD,y
sta TIME.DWORD,y
dey
bpl .1
stz K.CTime.DivDay
stz K.CTime.DivDay+1
stz TIME.DivDay
stz TIME.DivDay+1
.2 lda K.CTime.DWORD
sta K.CTime.ModDay
.2 lda TIME.DWORD
sta TIME.ModDay
sec
sbc #SECSDAY
pha
lda K.CTime.DWORD+1
sta K.CTime.ModDay+1
lda TIME.DWORD+1
sta TIME.ModDay+1
sbc /SECSDAY
pha
lda K.CTime.DWORD+2
sta K.CTime.ModDay+2
sbc #0
lda TIME.DWORD+2
sta TIME.ModDay+2
sbc ^SECSDAY
pha
lda K.CTime.DWORD+3
lda TIME.DWORD+3
sbc #0
bcc .3 end of DIV/MOD ?
sta K.CTime.DWORD+3
sta TIME.DWORD+3
ldx #2
.21 pla
sta K.CTime.DWORD,x
sta TIME.DWORD,x
dex
bpl .21
inc K.CTime.DivDay
inc TIME.DivDay
bne .2
inc K.CTime.DivDay+1
inc TIME.DivDay+1
bne .2
.3 pla
pla
pla
stz K.CTime.Div60
stz K.CTime.Div60+1
stz TIME.Div60
stz TIME.Div60+1
.4 lda K.CTime.ModDay
sta K.CTime.Mod
.4 lda TIME.ModDay
sta TIME.Mod
sec
sbc #60
pha
lda K.CTime.ModDay+1
lda TIME.ModDay+1
sbc #0
pha
lda K.CTime.ModDay+2
lda TIME.ModDay+2
sbc #0
bcc .5
sta K.CTime.ModDay+2
sta TIME.ModDay+2
pla
sta K.CTime.ModDay+1
sta TIME.ModDay+1
pla
sta K.CTime.ModDay
sta TIME.ModDay
inc K.CTime.Div60
inc TIME.Div60
bne .4
inc K.CTime.Div60+1
inc TIME.Div60+1
bne .4
.5 pla
pla
lda K.CTime.Mod
lda TIME.Mod
ldy #S.Time.SECOND
sta (ZPPtr2),y
stz K.CTime.Div3600
stz TIME.Div3600
.6 lda K.CTime.Div60
sta K.CTime.Mod
.6 lda TIME.Div60
sta TIME.Mod
sec
sbc #60
pha
lda K.CTime.Div60+1
lda TIME.Div60+1
sbc #0
pha
bcc .7
sta K.CTime.Div60+1
sta TIME.Div60+1
pla
sta K.CTime.Div60
sta TIME.Div60
inc K.CTime.Div3600
inc TIME.Div3600
bne .6
.7 pla
lda K.CTime.Mod
lda TIME.Mod
dey ldy #S.Time.MINUTE
sta (ZPPtr2),y
lda K.CTime.Div3600
lda TIME.Div3600
dey ldy #S.Time.HOUR
sta (ZPPtr2),y
lda K.CTime.DivDay WDAY computation : (DivDay + DAY0) mod 7
lda TIME.DivDay WDAY computation : (DivDay + DAY0) mod 7
clc
adc #DAY0
pha
lda K.CTime.DivDay+1
lda TIME.DivDay+1
adc /DAY0
eor #$ff
tax
pla
.8 sta K.CTime.Mod
.8 sta TIME.Mod
sec
sbc #7
bcs .8
inx
bne .8
lda K.CTime.Mod
lda TIME.Mod
ldy #S.Time.WDAY
sta (ZPPtr2),y
lda #CENTURY0
sta K.CTime.Century
sta TIME.Century
lda #YEAR0
sta K.CTime.Year
sta TIME.Year
K.CTime2Time.Year
.1 ldy K.CTime.Century
lda K.CTime.Year
.1 ldy TIME.Century
lda TIME.Year
jsr TIME.IsLeapYearYA if Leap year CS
lda #0 Toggle Carry
@ -319,31 +331,31 @@ K.CTime2Time.Year
eor #1
lsr
lda K.CTime.DivDay
lda TIME.DivDay
sbc #365
pha
lda K.CTime.DivDay+1
lda TIME.DivDay+1
sbc /365
bcc .2
sta K.CTime.DivDay+1
sta TIME.DivDay+1
pla
sta K.CTime.DivDay
sta TIME.DivDay
inc K.CTime.Year
lda K.CTime.Year
inc TIME.Year
lda TIME.Year
cmp #100
bne .1
stz K.CTime.Year
inc K.CTime.Century
stz TIME.Year
inc TIME.Century
bne .1
.2 pla
lda K.CTime.Century
lda TIME.Century
* ldy #S.Time.CENTURY
sta (ZPPtr2)
ldy #S.Time.YEAR
lda K.CTime.Year
lda TIME.Year
sta (ZPPtr2),y
clc
@ -377,19 +389,11 @@ TIME.IsLeapYearYA
rts
*--------------------------------------
K.StrFTime.MDAY .DA #3,#0,#3,#2,#3,#2,#3,#3,#2,#3,#2,#3
K.CTime.DWORD .BS 4
K.CTime.DivDay .BS 2
K.CTime.ModDay .BS 3
K.CTime.Div60 .BS 2
K.CTime.Div3600 .BS 1
K.CTime.Mod .BS 1
K.CTime.Century .BS 1
K.CTime.Year .BS 1
*/--------------------------------------
* # StrFTime
* ## C
* Convert S.TIME struct to CSTR
* `size_t strftime (char* ptr, const char* format, const struct S.TIME* timeptr );`
* `void strftime (char* ptr, const char* format, const struct S.TIME* timeptr );`
* ## ASM
* `PUSHW timeptr`
* `PUSHW format`
@ -415,12 +419,10 @@ K.CTime.Year .BS 1
K.StrFTime jsr MEM.SPtr1PPtr2
>PULLW ZPPtr3 timeptr
ldy #0
.1 lda (ZPPtr2),y
.1 lda (ZPPtr2)
beq .8
iny
jsr MEM.NextCharPtr2
cmp #'%'
beq .2
@ -428,11 +430,12 @@ K.StrFTime jsr MEM.SPtr1PPtr2
jsr K.StrFTime.addChar
bra .1
.2 ldx #K.StrFTime.JMPL-K.StrFTime.Tbl-1
.2 ldx #K.StrFTime.JMP-K.StrFTime.Tbl-1
lda (ZPPtr2),y
lda (ZPPtr2)
beq .8
iny
jsr MEM.NextCharPtr2
.3 cmp K.StrFTime.Tbl,x
beq .4
@ -440,49 +443,33 @@ K.StrFTime jsr MEM.SPtr1PPtr2
bpl .3
bra .1
.4 lda K.StrFTime.JMPL,x
sta .5+1
lda K.StrFTime.JMPH,x
sta .5+2
phy
.5 jsr $ffff
ply
bra .1
.4 txa
asl
tax
jsr .5
bra .1
.5 jmp (K.StrFTime.JMP,x)
.8 lda #0 Terminate C string
sta (ZPPtr1)
rts
*--------------------------------------
K.StrFTime.TBL .AS "aAbBdHImMpSwyY"
K.StrFTime.JMPL .DA #K.StrFTime.A
.DA #K.StrFTime.AA
.DA #K.StrFTime.B
.DA #K.StrFTime.BB
.DA #K.StrFTime.D
.DA #K.StrFTime.HH
.DA #K.StrFTime.II
.DA #K.StrFTime.M
.DA #K.StrFTime.MM
.DA #K.StrFTime.P
.DA #K.StrFTime.SS
.DA #K.StrFTime.W
.DA #K.StrFTime.Y
.DA #K.StrFTime.YY
*--------------------------------------
K.StrFTime.JMPH .DA /K.StrFTime.A
.DA /K.StrFTime.AA
.DA /K.StrFTime.B
.DA /K.StrFTime.BB
.DA /K.StrFTime.D
.DA /K.StrFTime.HH
.DA /K.StrFTime.II
.DA /K.StrFTime.M
.DA /K.StrFTime.MM
.DA /K.StrFTime.P
.DA /K.StrFTime.SS
.DA /K.StrFTime.W
.DA /K.StrFTime.Y
.DA /K.StrFTime.YY
K.StrFTime.JMP .DA K.StrFTime.A
.DA K.StrFTime.AA
.DA K.StrFTime.B
.DA K.StrFTime.BB
.DA K.StrFTime.D
.DA K.StrFTime.HH
.DA K.StrFTime.II
.DA K.StrFTime.M
.DA K.StrFTime.MM
.DA K.StrFTime.P
.DA K.StrFTime.SS
.DA K.StrFTime.W
.DA K.StrFTime.Y
.DA K.StrFTime.YY
*--------------------------------------
K.StrFTime.A ldx #3 Short day of week, 3 chars...
.HS 2C Bit abs
@ -536,20 +523,12 @@ K.StrFTime.STR lda (ZPPtr3),y get required S.Time field value
bne .99
rts
*--------------------------------------
K.StrFTime.D ldy #S.Time.DAY
bra K.StrFTime.addDecPtr1Y
K.StrFTime.HH ldy #S.Time.HOUR
bra K.StrFTime.addDecPtr1Y
K.StrFTime.II ldy #S.Time.HOUR
lda (ZPPtr3),y
cmp #12
bcc .1
sbc #12
.1 bra K.StrFTime.addDecA
K.StrFTime.M ldy #S.Time.MONTH
bra K.StrFTime.addDecPtr1Y
K.StrFTime.MM ldy #S.Time.MINUTE
bra K.StrFTime.addDecPtr1Y
K.StrFTime.P ldy #S.Time.HOUR
lda (ZPPtr3),y
cmp #12
@ -560,13 +539,21 @@ K.StrFTime.P ldy #S.Time.HOUR
jsr K.StrFTime.addChar
lda #'m'
bra K.StrFTime.addChar
K.StrFTime.SS ldy #S.Time.SECOND
bra K.StrFTime.addDecPtr1Y
K.StrFTime.W ldy #S.Time.WDAY
bra K.StrFTime.addDecPtr1Y
K.StrFTime.YY ldy #S.Time.CENTURY
jsr K.StrFTime.addDecPtr1Y
K.StrFTime.Y ldy #S.Time.YEAR
.HS 2C bit abs
K.StrFTime.D ldy #S.Time.DAY
.HS 2C bit abs
K.StrFTime.HH ldy #S.Time.HOUR
.HS 2C bit abs
K.StrFTime.SS ldy #S.Time.SECOND
.HS 2C bit abs
K.StrFTime.W ldy #S.Time.WDAY
.HS 2C bit abs
K.StrFTime.M ldy #S.Time.MONTH
.HS 2C bit abs
K.StrFTime.MM ldy #S.Time.MINUTE
*--------------------------------------
K.StrFTime.addDecPtr1Y
lda (ZPPtr3),y
@ -604,10 +591,7 @@ K.StrFTime.addDecA
*--------------------------------------
K.StrFTime.addChar
sta (ZPPtr1)
inc ZPPtr1
bne .8
inc ZPPtr1+1
.8 rts
jmp MEM.NextCharPtr1
*--------------------------------------
K.StrFTime.DAY >PSTR "Monday"
>PSTR "Tuesday"

View File

@ -47,6 +47,7 @@ A2osX.D1 .PH $D000
.INB USR/SRC/SYS/KERNEL.S.STDLIB
.INB USR/SRC/SYS/KERNEL.S.DEV
.INB USR/SRC/SYS/KERNEL.S.FIO
.INB USR/SRC/SYS/KERNEL.S.PFT
.EP
A2osX.D2 .PH $D000
.DA #RRAMWRAMBNK2
@ -56,6 +57,7 @@ A2osX.D2 .PH $D000
.INB USR/SRC/SYS/KERNEL.S.PS
.INB USR/SRC/SYS/KERNEL.S.ARG
.INB USR/SRC/SYS/KERNEL.S.ENV
.INB USR/SRC/SYS/KERNEL.S.MATH
.EP
A2osX.E0 .PH $E000
.INB USR/SRC/SYS/KERNEL.S.JMP
@ -63,10 +65,8 @@ A2osX.E0 .PH $E000
.INB USR/SRC/SYS/KERNEL.S.MEM
.INB USR/SRC/SYS/KERNEL.S.TERMLC
********* TMP ***** go to A2osX.D1
.INB USR/SRC/SYS/KERNEL.S.PFT
.INB USR/SRC/SYS/KERNEL.S.IO
********* TMP ***** go to A2osX.D2
.INB USR/SRC/SYS/KERNEL.S.MATH
.LIST ON
DevMgr.FreeMem .EQ *
.LIST OFF