mirror of
https://github.com/A2osX/A2osX.git
synced 2025-03-21 20:35:07 +00:00
Kernel 0.92
This commit is contained in:
parent
3c534a25fd
commit
145217f291
Binary file not shown.
12
A2osX.S.txt
12
A2osX.S.txt
@ -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
|
||||
*--------------------------------------
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
||||
|
@ -13,7 +13,7 @@ MOU.Init
|
||||
bne .1
|
||||
|
||||
clc
|
||||
.9 rts
|
||||
rts
|
||||
|
||||
.2 stx hDevMouse
|
||||
txa
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
@ -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)
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
*--------------------------------------
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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"
|
||||
*--------------------------------------
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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"
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user