mirror of
https://github.com/A2osX/A2osX.git
synced 2024-12-01 14:50:10 +00:00
Kernel version 0.8 : API finalized and dispatched in LCBNK1/2, now fits in BNK1/BNK2
This commit is contained in:
parent
127f89cedc
commit
270098e108
BIN
A2OSX.BOOT.po
BIN
A2OSX.BOOT.po
Binary file not shown.
BIN
A2OSX.SRC.po
BIN
A2OSX.SRC.po
Binary file not shown.
@ -13,11 +13,9 @@ AUTO 6
|
|||||||
* X = hMem of Code Segment
|
* X = hMem of Code Segment
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
BIN.LoadEXEYA >STYA BIN.LoadExe.Filename
|
BIN.LoadEXEYA >STYA BIN.LoadExe.Filename
|
||||||
jsr K.PStrUprYA
|
jsr K.PStrUprYA Y,A unmodified
|
||||||
|
|
||||||
>LDYA BIN.LoadExe.Filename
|
|
||||||
jsr K.GetMemByNameYA
|
jsr K.GetMemByNameYA
|
||||||
bcs .1 not already loaded
|
bcs BIN.LoadEXEYA.1 not already loaded
|
||||||
|
|
||||||
>STYA ZPQuickPtr1 Save base address
|
>STYA ZPQuickPtr1 Save base address
|
||||||
ldy #S.MEM.REFCNT
|
ldy #S.MEM.REFCNT
|
||||||
@ -25,38 +23,56 @@ BIN.LoadEXEYA >STYA BIN.LoadExe.Filename
|
|||||||
inc
|
inc
|
||||||
sta (ZPQuickPtr1),y
|
sta (ZPQuickPtr1),y
|
||||||
|
|
||||||
ldy #S.MEM.PTR
|
txa
|
||||||
lda (ZPQuickPtr1),y
|
jmp K.GetMemPtrA X=hMem from K.GetMemByNameA
|
||||||
pha Y,A = MEM PTR...
|
*--------------------------------------
|
||||||
iny
|
BIN.LoadEXEYA.1 >PUSHWI KrnBuf256
|
||||||
lda (ZPQuickPtr1),y
|
|
||||||
ply X=hMem from K.GetMemByNameA
|
|
||||||
clc
|
|
||||||
rts
|
|
||||||
|
|
||||||
.1 >PUSHWI KrnBuf256
|
|
||||||
>PUSHW BIN.LoadExe.Filename
|
>PUSHW BIN.LoadExe.Filename
|
||||||
jsr K.STAT Look for AUXTYPE
|
jsr K.STAT Look for AUXTYPE
|
||||||
bcs .99
|
bcs .9
|
||||||
|
|
||||||
>LDYA KrnBuf256+S.STAT.AUXTYPE
|
>LDYA KrnBuf256+S.STAT.AUXTYPE
|
||||||
>STYA BIN.LoadExe.OldBase
|
>STYA BIN.Relocate.Start
|
||||||
|
|
||||||
>PUSHYA
|
>PUSHYA Push AUXTYPE
|
||||||
>PUSHBI 6 S.FILEINFO.TYPE.BIN
|
>PUSHBI 6 S.FILEINFO.TYPE.BIN
|
||||||
>PUSHBI SYS.FOPEN.R
|
>PUSHBI SYS.FOPEN.R
|
||||||
>PUSHW BIN.LoadExe.Filename
|
>PUSHW BIN.LoadExe.Filename
|
||||||
jsr K.LoadFile
|
jsr K.LoadFile
|
||||||
bcs .99 Error Loading file
|
.9 bcs .99 Error Loading file
|
||||||
|
|
||||||
>STYA BIN.LoadExe.SegLen
|
>STYA BIN.Relocate.SegLen
|
||||||
stx BIN.LoadExe.hMem save hMem
|
stx BIN.LoadExe.hMem save hMem
|
||||||
txa
|
txa
|
||||||
jsr K.GetMemPtrA
|
jsr K.GetMemPtrA
|
||||||
>STYA BIN.LoadExe.NewBase
|
>STYA ZPQuickPtr1
|
||||||
|
|
||||||
jsr BIN.InstallEXE
|
ldy #H.BIN.CODE.LEN+1 get Code Len
|
||||||
|
lda (ZPQuickPtr1),y
|
||||||
|
tax
|
||||||
|
dey
|
||||||
|
lda (ZPQuickPtr1),y
|
||||||
|
jsr BIN.Relocate.SetCodeLenAX
|
||||||
|
|
||||||
|
lda BIN.Relocate.Start Get AUXTYPE for actual Base Address
|
||||||
|
clc
|
||||||
|
adc BIN.Relocate.SegLen
|
||||||
|
sta BIN.Relocate.End compute Range End=AUXTYPE+FILELEN
|
||||||
|
|
||||||
|
lda BIN.Relocate.Start+1
|
||||||
|
adc BIN.Relocate.SegLen+1
|
||||||
|
sta BIN.Relocate.End+1
|
||||||
|
|
||||||
|
lda ZPQuickPtr1
|
||||||
|
sec
|
||||||
|
sbc BIN.Relocate.Start
|
||||||
|
sta BIN.Relocate.Offset Offset=ZPQuickPtr1-AUXTYPE
|
||||||
|
|
||||||
|
lda ZPQuickPtr1+1
|
||||||
|
sbc BIN.Relocate.Start+1
|
||||||
|
sta BIN.Relocate.Offset+1
|
||||||
|
|
||||||
|
jsr Bin.RelocateEXE
|
||||||
bcs .98 relocation error, dicard Code segment
|
bcs .98 relocation error, dicard Code segment
|
||||||
|
|
||||||
>LDYA BIN.LoadExe.Filename get back bin path
|
>LDYA BIN.LoadExe.Filename get back bin path
|
||||||
@ -92,78 +108,34 @@ BIN.LoadEXEYA >STYA BIN.LoadExe.Filename
|
|||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
BIN.LoadExe.Filename .BS 2
|
BIN.LoadExe.Filename .BS 2
|
||||||
BIN.LoadExe.hMem .BS 1
|
BIN.LoadExe.hMem .BS 1
|
||||||
BIN.LoadExe.OldBase .BS 2
|
|
||||||
BIN.LoadExe.NewBase .BS 2
|
|
||||||
BIN.LoadExe.SegLen .BS 2
|
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* BIN.InstallEXE
|
* BIN.InstallDRV
|
||||||
*--------------------------------------
|
|
||||||
BIN.InstallEXE >LDYA BIN.LoadExe.NewBase
|
|
||||||
>STYA ZPQuickPtr1
|
|
||||||
|
|
||||||
ldy #H.BIN.CODE.LEN get Code Len
|
|
||||||
lda (ZPQuickPtr1),y
|
|
||||||
sta Rel.CodeLen
|
|
||||||
iny
|
|
||||||
lda (ZPQuickPtr1),y
|
|
||||||
sta Rel.CodeLen+1
|
|
||||||
|
|
||||||
lda BIN.LoadExe.OldBase
|
|
||||||
sta Rel.Start Get AUXTYPE for actual Base Address
|
|
||||||
clc
|
|
||||||
adc BIN.LoadExe.SegLen
|
|
||||||
sta Rel.End compute Range End=AUXTYPE+FILELEN
|
|
||||||
|
|
||||||
lda BIN.LoadExe.OldBase+1
|
|
||||||
sta Rel.Start+1
|
|
||||||
adc BIN.LoadExe.SegLen+1
|
|
||||||
sta Rel.End+1
|
|
||||||
|
|
||||||
lda ZPQuickPtr1
|
|
||||||
sec
|
|
||||||
sbc BIN.LoadExe.OldBase
|
|
||||||
sta Rel.Offset Offset=ZPQuickPtr1-AUXTYPE
|
|
||||||
lda ZPQuickPtr1+1
|
|
||||||
sbc BIN.LoadExe.OldBase+1
|
|
||||||
sta Rel.Offset+1
|
|
||||||
|
|
||||||
jmp Bin.RelocateEXE
|
|
||||||
*--------------------------------------
|
|
||||||
* K.InsDrv
|
|
||||||
* pDrv = .DRV File Loaded Address
|
* pDrv = .DRV File Loaded Address
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
BIN.InstallDRV ldy #H.BIN.DRV.CODE.LEN
|
BIN.InstallDRV ldy #H.BIN.DRV.CODE.LEN+1
|
||||||
lda (pDrv),y
|
lda (pDrv),y
|
||||||
sta Rel.CodeLen
|
tax
|
||||||
iny
|
dey
|
||||||
lda (pDrv),y
|
lda (pDrv),y
|
||||||
sta Rel.CodeLen+1
|
jsr BIN.Relocate.SetCodeLenAX
|
||||||
|
|
||||||
ldy #H.BIN.DRV.CODE.O
|
ldy #H.BIN.DRV.CODE.O
|
||||||
lda (pDrv),y
|
lda (pDrv),y
|
||||||
clc
|
clc
|
||||||
adc BIN.LoadExe.OldBase
|
adc BIN.Relocate.Start Advance start From Bin code to DRV code
|
||||||
sta Rel.Start
|
sta BIN.Relocate.Start
|
||||||
iny
|
iny
|
||||||
lda (pDrv),y
|
lda (pDrv),y
|
||||||
adc BIN.LoadExe.OldBase+1
|
adc BIN.Relocate.Start+1
|
||||||
sta Rel.Start+1
|
sta BIN.Relocate.Start+1
|
||||||
|
|
||||||
lda BIN.LoadExe.OldBase
|
|
||||||
clc
|
|
||||||
adc BIN.LoadExe.SegLen
|
|
||||||
sta Rel.End
|
|
||||||
lda BIN.LoadExe.OldBase+1
|
|
||||||
adc BIN.LoadExe.SegLen+1
|
|
||||||
sta Rel.End+1
|
|
||||||
|
|
||||||
ldy #H.BIN.DRV.CODE.O
|
ldy #H.BIN.DRV.CODE.O
|
||||||
lda BIN.LoadExe.SegLen
|
lda BIN.Relocate.SegLen
|
||||||
sec
|
sec
|
||||||
sbc (pDrv),y
|
sbc (pDrv),y
|
||||||
sta K.InsDrv.DRVLen
|
sta K.InsDrv.DRVLen
|
||||||
iny
|
iny
|
||||||
lda BIN.LoadExe.SegLen+1
|
lda BIN.Relocate.SegLen+1
|
||||||
sbc (pDrv),y
|
sbc (pDrv),y
|
||||||
sta K.InsDrv.DRVLen+1 Compute DRV Len
|
sta K.InsDrv.DRVLen+1 Compute DRV Len
|
||||||
|
|
||||||
@ -178,8 +150,7 @@ BIN.InstallDRV ldy #H.BIN.DRV.CODE.LEN
|
|||||||
bcs .98 we crossed $FFFF, out of mem
|
bcs .98 we crossed $FFFF, out of mem
|
||||||
|
|
||||||
lda K.InsDrv.DRVEnd
|
lda K.InsDrv.DRVEnd
|
||||||
sec
|
cmp #DevMgr.HiMem
|
||||||
sbc #DevMgr.HiMem
|
|
||||||
lda K.InsDrv.DRVEnd+1
|
lda K.InsDrv.DRVEnd+1
|
||||||
sbc /DevMgr.HiMem
|
sbc /DevMgr.HiMem
|
||||||
bcs .98 No More Room to load Driver....
|
bcs .98 No More Room to load Driver....
|
||||||
@ -206,11 +177,11 @@ BIN.InstallDRV ldy #H.BIN.DRV.CODE.LEN
|
|||||||
lda DevMgr.Free
|
lda DevMgr.Free
|
||||||
sec
|
sec
|
||||||
sbc (ZPQuickPtr1),y
|
sbc (ZPQuickPtr1),y
|
||||||
sta Rel.Offset
|
sta BIN.Relocate.Offset
|
||||||
lda DevMgr.Free+1
|
lda DevMgr.Free+1
|
||||||
iny
|
iny
|
||||||
sbc (ZPQuickPtr1),y
|
sbc (ZPQuickPtr1),y
|
||||||
sta Rel.Offset+1
|
sta BIN.Relocate.Offset+1
|
||||||
|
|
||||||
ldy #H.BIN.DRV.CODE.O
|
ldy #H.BIN.DRV.CODE.O
|
||||||
lda (pDrv),y
|
lda (pDrv),y
|
||||||
@ -253,11 +224,11 @@ BIN.MoveDRV ldy #H.BIN.DEV.HEADER.O
|
|||||||
ldy #S.DEV.JMP Relocate Main JMP
|
ldy #S.DEV.JMP Relocate Main JMP
|
||||||
lda (ZPQuickPtr1),y
|
lda (ZPQuickPtr1),y
|
||||||
clc
|
clc
|
||||||
adc Rel.Offset
|
adc BIN.Relocate.Offset
|
||||||
sta (ZPQuickPtr1),y
|
sta (ZPQuickPtr1),y
|
||||||
iny
|
iny
|
||||||
lda (ZPQuickPtr1),y
|
lda (ZPQuickPtr1),y
|
||||||
adc Rel.Offset+1
|
adc BIN.Relocate.Offset+1
|
||||||
sta (ZPQuickPtr1),y
|
sta (ZPQuickPtr1),y
|
||||||
|
|
||||||
lda DevMgr.LastDevID
|
lda DevMgr.LastDevID
|
||||||
@ -267,6 +238,7 @@ BIN.MoveDRV ldy #H.BIN.DEV.HEADER.O
|
|||||||
ldy #S.DEV.SIZE Make sure DevMgr.Table Ends with 0
|
ldy #S.DEV.SIZE Make sure DevMgr.Table Ends with 0
|
||||||
lda #0
|
lda #0
|
||||||
sta (pDev),y
|
sta (pDev),y
|
||||||
|
|
||||||
dey
|
dey
|
||||||
|
|
||||||
.1 lda (ZPQuickPtr1),y Copy DRV.Header
|
.1 lda (ZPQuickPtr1),y Copy DRV.Header
|
||||||
@ -293,171 +265,183 @@ BIN.MoveDRV ldy #H.BIN.DEV.HEADER.O
|
|||||||
lda DevMgr.Free+1
|
lda DevMgr.Free+1
|
||||||
sta ZPQuickPtr2+1 Make ZPQuickPtr2=Dest Ram Location
|
sta ZPQuickPtr2+1 Make ZPQuickPtr2=Dest Ram Location
|
||||||
|
|
||||||
ldy K.InsDrv.DrvLen
|
lda K.InsDrv.DrvLen+1
|
||||||
ldx K.InsDrv.DrvLen+1
|
eor #$ff
|
||||||
|
pha
|
||||||
|
lda K.InsDrv.DrvLen
|
||||||
|
eor #$ff
|
||||||
|
tax
|
||||||
|
|
||||||
.2 lda (ZPQuickPtr1)
|
ldy #0
|
||||||
sta (ZPQuickPtr2)
|
|
||||||
|
|
||||||
inc ZPQuickPtr1
|
.2 inx
|
||||||
bne .3
|
bne .3
|
||||||
inc ZPQuickPtr1+1
|
pla
|
||||||
|
inc
|
||||||
.3 inc ZPQuickPtr2
|
|
||||||
bne .4
|
|
||||||
inc ZPQuickPtr2+1
|
|
||||||
|
|
||||||
.4 tya
|
|
||||||
bne .5
|
|
||||||
txa
|
|
||||||
beq .8
|
beq .8
|
||||||
dex
|
pha
|
||||||
|
|
||||||
.5 dey
|
.3 lda (ZPQuickPtr1),y
|
||||||
|
sta (ZPQuickPtr2),y
|
||||||
|
iny
|
||||||
|
bne .2
|
||||||
|
|
||||||
|
inc ZPQuickPtr1+1
|
||||||
|
inc ZPQuickPtr2+1
|
||||||
bra .2
|
bra .2
|
||||||
.8 rts
|
|
||||||
|
.8 rts CC from last ADC
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
K.InsDrv.DrvLen .BS 2
|
K.InsDrv.DrvLen .BS 2
|
||||||
K.InsDrv.DrvEnd .BS 2
|
K.InsDrv.DrvEnd .BS 2
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
|
BIN.Relocate.SetCodeLenAX
|
||||||
|
eor #$ff
|
||||||
|
sta BIN.Relocate.nCodeLen
|
||||||
|
txa
|
||||||
|
eor #$ff
|
||||||
|
sta BIN.Relocate.nCodeLen+1
|
||||||
|
rts
|
||||||
|
*--------------------------------------
|
||||||
* BIN.Relocate___ :
|
* BIN.Relocate___ :
|
||||||
|
* In :
|
||||||
* ZPQuickPtr1 = Ptr to Code
|
* ZPQuickPtr1 = Ptr to Code
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
|
BIN.Relocate.SegLen .BS 2 Code+Data Len
|
||||||
|
BIN.Relocate.Start .BS 2
|
||||||
|
BIN.Relocate.End .BS 2
|
||||||
|
BIN.Relocate.Offset .BS 2
|
||||||
|
BIN.Relocate.nCodeLen .BS 2 !Code length
|
||||||
|
*--------------------------------------
|
||||||
BIN.RelocateEXE ldy #H.BIN.JMP relocate Main JMP
|
BIN.RelocateEXE ldy #H.BIN.JMP relocate Main JMP
|
||||||
lda (ZPQuickPtr1),y
|
lda (ZPQuickPtr1),y
|
||||||
clc
|
clc
|
||||||
adc Rel.Offset
|
adc BIN.Relocate.Offset
|
||||||
sta (ZPQuickPtr1),y
|
sta (ZPQuickPtr1),y
|
||||||
|
|
||||||
iny
|
iny
|
||||||
lda (ZPQuickPtr1),y
|
lda (ZPQuickPtr1),y
|
||||||
adc Rel.Offset+1
|
adc BIN.Relocate.Offset+1
|
||||||
sta (ZPQuickPtr1),y
|
sta (ZPQuickPtr1),y
|
||||||
|
|
||||||
ldy #H.BIN.RELOC.TABLE skip Header, CS.SIZE & DS.SIZE... (16 bytes)
|
ldy #H.BIN.RELOC.TABLE skip Header, CS.SIZE & DS.SIZE... (16 bytes)
|
||||||
|
|
||||||
.HS 2C bit abs
|
.HS 2C bit abs
|
||||||
|
*--------------------------------------
|
||||||
BIN.RelocateDRV ldy #0
|
BIN.RelocateDRV ldy #0
|
||||||
|
|
||||||
.1 lda (ZPQuickPtr1),y Start Relocate JMP table
|
.1 lda (ZPQuickPtr1),y Start Relocate JMP table
|
||||||
tax
|
tax LO in X
|
||||||
iny
|
iny
|
||||||
ora (ZPQuickPtr1),y
|
ora (ZPQuickPtr1),y ORA with HI
|
||||||
beq .2 $0000 = end of table
|
beq .2 $0000 = end of table
|
||||||
|
|
||||||
dey
|
dey
|
||||||
txa
|
txa get back LO
|
||||||
clc
|
clc
|
||||||
adc Rel.Offset
|
adc BIN.Relocate.Offset
|
||||||
sta (ZPQuickPtr1),y
|
sta (ZPQuickPtr1),y
|
||||||
|
|
||||||
iny
|
iny
|
||||||
lda (ZPQuickPtr1),y
|
lda (ZPQuickPtr1),y
|
||||||
adc Rel.Offset+1
|
adc BIN.Relocate.Offset+1
|
||||||
sta (ZPQuickPtr1),y
|
sta (ZPQuickPtr1),y
|
||||||
|
|
||||||
iny
|
iny
|
||||||
|
|
||||||
bra .1
|
bra .1
|
||||||
|
*--------------------------------------
|
||||||
|
.2 tya add current offset in Y to Ptr
|
||||||
|
|
||||||
.2 lda ZPQuickPtr1
|
sec + 1 to skip last 00 from beq .2
|
||||||
clc
|
|
||||||
adc Rel.CodeLen Make ZPQuickPtr2=End of code
|
|
||||||
sta ZPQuickPtr2 =ZPQuickPtr1+AX (code len)
|
|
||||||
lda ZPQuickPtr1+1
|
|
||||||
adc Rel.CodeLen+1
|
|
||||||
sta ZPQuickPtr2+1
|
|
||||||
|
|
||||||
iny
|
|
||||||
tya add current offset in Y to Ptr
|
|
||||||
clc
|
|
||||||
adc ZPQuickPtr1
|
adc ZPQuickPtr1
|
||||||
sta ZPQuickPtr1
|
sta ZPQuickPtr1
|
||||||
bcc .5
|
bcc .3
|
||||||
inc ZPQuickPtr1+1 ZPQuickPtr1=Current Code PTR
|
inc ZPQuickPtr1+1 ZPQuickPtr1=Current Code PTR
|
||||||
clc
|
|
||||||
|
|
||||||
.5 lda (ZPQuickPtr1) get OPCODE
|
.3 inc BIN.Relocate.nCodeLen
|
||||||
|
bne .4 nCodeLen reached 0 ?
|
||||||
|
inc BIN.Relocate.nCodeLen+1
|
||||||
|
beq .8 no, continue relocating
|
||||||
|
|
||||||
|
.4 lda (ZPQuickPtr1) get OPCODE
|
||||||
|
lsr /2
|
||||||
tax
|
tax
|
||||||
lda BIN.OPCODES,x get OPCODE definition
|
lda BIN.OPCODES,x get OPCODE definition
|
||||||
bpl .7 abs addressing?
|
bcs .5 go get LO nibble
|
||||||
|
lsr
|
||||||
|
lsr move HI -> LO
|
||||||
|
lsr
|
||||||
|
lsr
|
||||||
|
.5 and #$0f
|
||||||
|
|
||||||
and #3 save Opcode length...
|
bit #$8 abs addressing?
|
||||||
|
beq .7 no....
|
||||||
|
|
||||||
|
and #7 save Opcode length...
|
||||||
pha
|
pha
|
||||||
|
|
||||||
ldy #1
|
ldy #1
|
||||||
lda (ZPQuickPtr1),y Get LO
|
lda (ZPQuickPtr1),y Get LO
|
||||||
sec
|
tax save LO in X
|
||||||
sbc Rel.Start
|
|
||||||
iny
|
|
||||||
lda (ZPQuickPtr1),y Get HI
|
|
||||||
sbc Rel.Start+1
|
|
||||||
bcc .6 addr < AX, out of range
|
|
||||||
|
|
||||||
dey
|
iny make Y point to HI
|
||||||
lda (ZPQuickPtr1),y Get LO
|
|
||||||
sec
|
|
||||||
sbc Rel.End
|
|
||||||
iny
|
|
||||||
lda (ZPQuickPtr1),y Get HI
|
|
||||||
sbc Rel.End+1
|
|
||||||
bcs .6 addr > CX, out of range
|
|
||||||
|
|
||||||
|
cpx BIN.Relocate.Start
|
||||||
|
lda (ZPQuickPtr1),y Get HI
|
||||||
|
sbc BIN.Relocate.Start+1
|
||||||
|
bcc .6 addr < BIN.Relocate.Start, out of range
|
||||||
|
|
||||||
|
txa Get back LO
|
||||||
|
cpx BIN.Relocate.End
|
||||||
|
lda (ZPQuickPtr1),y Get HI
|
||||||
|
sbc BIN.Relocate.End+1
|
||||||
|
bcs .6 addr > BIN.Relocate.End, out of range
|
||||||
|
|
||||||
|
txa Get back LO
|
||||||
|
* clc CC from bcs .6
|
||||||
|
adc BIN.Relocate.Offset add Offset to abs address
|
||||||
dey
|
dey
|
||||||
lda (ZPQuickPtr1),y Get LO
|
|
||||||
clc
|
|
||||||
adc Rel.Offset add DX to abs address
|
|
||||||
sta (ZPQuickPtr1),y store relocated addr LO
|
sta (ZPQuickPtr1),y store relocated addr LO
|
||||||
iny
|
iny
|
||||||
lda (ZPQuickPtr1),y Get HI
|
lda (ZPQuickPtr1),y Get HI
|
||||||
adc Rel.Offset+1
|
adc BIN.Relocate.Offset+1
|
||||||
sta (ZPQuickPtr1),y store relocated addr HI
|
sta (ZPQuickPtr1),y store relocated addr HI
|
||||||
|
|
||||||
.6 pla
|
.6 pla get back Opcode length...
|
||||||
|
|
||||||
.7 clc A = OPCODE length
|
.7 clc A = OPCODE length
|
||||||
adc ZPQuickPtr1
|
adc ZPQuickPtr1
|
||||||
sta ZPQuickPtr1
|
sta ZPQuickPtr1
|
||||||
bcc .8
|
bcc .3
|
||||||
inc ZPQuickPtr1+1
|
inc ZPQuickPtr1+1
|
||||||
|
bra .3 next opcode....
|
||||||
|
|
||||||
.8 lda ZPQuickPtr1 is Current PTR < Code Limit ?
|
.8 clc
|
||||||
sec
|
|
||||||
sbc ZPQuickPtr2
|
|
||||||
lda ZPQuickPtr1+1
|
|
||||||
sbc ZPQuickPtr2+1
|
|
||||||
bcc .5 yes, continue relocating
|
|
||||||
|
|
||||||
clc
|
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* 65C02 OPCODES
|
* 65C02 OPCODES
|
||||||
* Bit 7 : 1 absolute addressing
|
* Bit 3 : 1 = absolute addressing
|
||||||
* Bit 1-0 : opcode + @ length
|
* Bit 2-1-0 : opcode + @ length
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* x0.x1.x2.x3.x4.x5.x6.x7.x8.x9.xA.xB.xC.xD.xE.xF
|
* 0.1.2.3.4.5.6.7.8.9.A.B.C.D.E.F
|
||||||
BIN.OPCODES .HS 01.02.02.01.02.02.02.02.01.02.01.01.83.83.83.03
|
BIN.OPCODES .HS 1.2.2.1.2.2.2.2.1.2.1.1.B.B.B.3
|
||||||
.HS 02.02.02.01.02.02.02.02.01.83.01.01.83.83.83.03
|
.HS 2.2.2.1.2.2.2.2.1.B.1.1.B.B.B.3
|
||||||
.HS 83.02.02.01.02.02.02.02.01.02.01.01.83.83.83.03
|
.HS B.2.2.1.2.2.2.2.1.2.1.1.B.B.B.3
|
||||||
.HS 02.02.02.01.02.02.02.02.01.83.01.01.83.83.83.03
|
.HS 2.2.2.1.2.2.2.2.1.B.1.1.B.B.B.3
|
||||||
.HS 01.02.02.01.02.02.02.02.01.02.01.01.83.83.83.03
|
.HS 1.2.2.1.2.2.2.2.1.2.1.1.B.B.B.3
|
||||||
.HS 02.02.02.01.02.02.02.02.01.83.01.01.01.83.83.03
|
.HS 2.2.2.1.2.2.2.2.1.B.1.1.1.B.B.3
|
||||||
.HS 01.02.02.01.02.02.02.02.01.02.01.01.83.83.83.03
|
.HS 1.2.2.1.2.2.2.2.1.2.1.1.B.B.B.3
|
||||||
.HS 02.02.02.01.02.02.02.02.01.83.01.01.83.83.83.03
|
.HS 2.2.2.1.2.2.2.2.1.B.1.1.B.B.B.3
|
||||||
.HS 02.02.02.01.02.02.02.02.01.02.01.01.83.83.83.03
|
.HS 2.2.2.1.2.2.2.2.1.2.1.1.B.B.B.3
|
||||||
.HS 02.02.02.01.02.02.02.02.01.83.01.01.83.83.83.03
|
.HS 2.2.2.1.2.2.2.2.1.B.1.1.B.B.B.3
|
||||||
.HS 02.02.02.01.02.02.02.02.01.02.01.01.83.83.83.03
|
.HS 2.2.2.1.2.2.2.2.1.2.1.1.B.B.B.3
|
||||||
.HS 02.02.02.01.02.02.02.02.01.83.01.01.83.83.83.03
|
.HS 2.2.2.1.2.2.2.2.1.B.1.1.B.B.B.3
|
||||||
.HS 02.02.02.01.02.02.02.02.01.02.01.01.83.83.83.03
|
.HS 2.2.2.1.2.2.2.2.1.2.1.1.B.B.B.3
|
||||||
.HS 02.02.02.01.02.02.02.02.01.83.01.01.01.83.83.03
|
.HS 2.2.2.1.2.2.2.2.1.B.1.1.1.B.B.3
|
||||||
.HS 02.02.02.01.02.02.02.02.01.02.01.01.83.83.83.03
|
.HS 2.2.2.1.2.2.2.2.1.2.1.1.B.B.B.3
|
||||||
.HS 02.02.02.01.02.02.02.02.01.83.01.01.01.83.83.03
|
.HS 2.2.2.1.2.2.2.2.1.B.1.1.1.B.B.3
|
||||||
*--------------------------------------
|
|
||||||
Rel.CodeLen .BS 2
|
|
||||||
Rel.Start .BS 2
|
|
||||||
Rel.End .BS 2
|
|
||||||
Rel.Offset .BS 2
|
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
MAN
|
MAN
|
||||||
SAVE SYS/KERNEL.S.BIN
|
SAVE SYS/KERNEL.S.BIN
|
||||||
|
@ -211,13 +211,10 @@ K.SaveFile >PULLW K.LoadFile.Mem
|
|||||||
|
|
||||||
.9 rts
|
.9 rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
K.LoadFile.Filename .BS 2
|
|
||||||
K.LoadFile.hFile .BS 1
|
K.LoadFile.hFile .BS 1
|
||||||
K.LoadFile.hMem .BS 1
|
K.LoadFile.hMem .BS 1
|
||||||
K.LoadFile.Mem .BS 2
|
K.LoadFile.Mem .BS 2
|
||||||
K.LoadFile.Len .BS 2
|
K.LoadFile.Len .BS 2
|
||||||
K.LoadFile.hRef .BS 1
|
|
||||||
K.LoadFile.hBuf .BS 1
|
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
MAN
|
MAN
|
||||||
SAVE SYS/KERNEL.S.FIO
|
SAVE SYS/KERNEL.S.FIO
|
||||||
|
@ -131,7 +131,7 @@ GO.A2osX php
|
|||||||
sta CLRALTZP
|
sta CLRALTZP
|
||||||
bra GO.EXIT
|
bra GO.EXIT
|
||||||
|
|
||||||
GO.A2osX.BNK ldx #$FF Self Modified
|
GO.A2osX.BNK ldx #RRAMWRAMBNK1 Self Modified, initialized to BNK1 for INIT3
|
||||||
|
|
||||||
bit $C000,x
|
bit $C000,x
|
||||||
bit $C000,x
|
bit $C000,x
|
||||||
|
@ -56,7 +56,7 @@ Kernel.Init2 >LDAXI MSG.Init2
|
|||||||
>STYA pStack init Soft Stack
|
>STYA pStack init Soft Stack
|
||||||
|
|
||||||
sta CLRALTZP Make MAIN ZP is enabled for X.PRINT.F
|
sta CLRALTZP Make MAIN ZP is enabled for X.PRINT.F
|
||||||
lda RROMBNK1 Make sure ROM is enabled for X.PRINT.F
|
bit RROMBNK1 Make sure ROM is enabled for X.PRINT.F
|
||||||
cli
|
cli
|
||||||
|
|
||||||
lda #6
|
lda #6
|
||||||
@ -71,7 +71,9 @@ Kernel.Init2 >LDAXI MSG.Init2
|
|||||||
>LDAXI MSG.Setup
|
>LDAXI MSG.Setup
|
||||||
jsr PrintCStrAX
|
jsr PrintCStrAX
|
||||||
|
|
||||||
jsr GO.A2osX
|
sta SETALTZP
|
||||||
|
lda RRAMWRAMBNK1
|
||||||
|
lda RRAMWRAMBNK1
|
||||||
|
|
||||||
jsr K.IrqMgrInit
|
jsr K.IrqMgrInit
|
||||||
bcs *
|
bcs *
|
||||||
@ -86,8 +88,8 @@ Kernel.Init2 >LDAXI MSG.Init2
|
|||||||
jsr K.TskMgrInit
|
jsr K.TskMgrInit
|
||||||
bcs *
|
bcs *
|
||||||
|
|
||||||
jsr GO.ProDOS Make sure MAIN ZP...
|
sta CLRALTZP Make MAIN ZP is enabled for X.PRINT.F
|
||||||
lda RROMBNK1 ... & ROM is enabled for X.PRINT.F
|
bit RROMBNK1 Make sure ROM is enabled for X.PRINT.F
|
||||||
|
|
||||||
>LDAXI MSG.Init2.OK
|
>LDAXI MSG.Init2.OK
|
||||||
jsr PrintCStrAX
|
jsr PrintCStrAX
|
||||||
@ -391,6 +393,12 @@ K.EvtMgrInit lda #10
|
|||||||
clc
|
clc
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
|
* K.FltMgrInit
|
||||||
|
*--------------------------------------
|
||||||
|
K.FltMgrInit stz FltMgr.Table
|
||||||
|
clc
|
||||||
|
rts
|
||||||
|
*--------------------------------------
|
||||||
* K.TskMgrInit
|
* K.TskMgrInit
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
K.TskMgrInit stz TSKMGR.LASTID
|
K.TskMgrInit stz TSKMGR.LASTID
|
||||||
@ -430,6 +438,8 @@ K.TskMgrInit stz TSKMGR.LASTID
|
|||||||
ldy #S.PS.hERRDEV
|
ldy #S.PS.hERRDEV
|
||||||
sta (pPs),y Make ERR DEV = SYS
|
sta (pPs),y Make ERR DEV = SYS
|
||||||
|
|
||||||
|
>DEBUG
|
||||||
|
|
||||||
>SYSCALL SYS.GetDevByIDA
|
>SYSCALL SYS.GetDevByIDA
|
||||||
>STYA pDev
|
>STYA pDev
|
||||||
ldx #DEVMGR.OPEN
|
ldx #DEVMGR.OPEN
|
||||||
@ -474,10 +484,6 @@ K.TskMgrInit stz TSKMGR.LASTID
|
|||||||
>SYSCALL SYS.PutEnvYA
|
>SYSCALL SYS.PutEnvYA
|
||||||
.9 rts
|
.9 rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
K.FltMgrInit stz FltMgr.Table
|
|
||||||
clc
|
|
||||||
rts
|
|
||||||
*--------------------------------------
|
|
||||||
I.ENV.A2osX >PSTRING "A2OSX"
|
I.ENV.A2osX >PSTRING "A2OSX"
|
||||||
I.ENV.PATH >PSTRING "PATH=${A2OSX}SBIN/;${A2OSX}BIN/"
|
I.ENV.PATH >PSTRING "PATH=${A2OSX}SBIN/;${A2OSX}BIN/"
|
||||||
I.ENV.LIB >PSTRING "LIB=${A2OSX}LIB/"
|
I.ENV.LIB >PSTRING "LIB=${A2OSX}LIB/"
|
||||||
|
@ -26,7 +26,7 @@ KERNEL.SYSCALL
|
|||||||
.DA K.PStrMatch
|
.DA K.PStrMatch
|
||||||
.DA K.PStrUprYA
|
.DA K.PStrUprYA
|
||||||
.DA K.PStrLwrYA
|
.DA K.PStrLwrYA
|
||||||
.DA 0
|
.DA K.PStrFTime
|
||||||
.DA K.PStr2StrArrayYA
|
.DA K.PStr2StrArrayYA
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
.DA K.ExecProcessNewEnvYA $20
|
.DA K.ExecProcessNewEnvYA $20
|
||||||
@ -65,7 +65,7 @@ KERNEL.SYSCALL
|
|||||||
.DA K.TimeYA
|
.DA K.TimeYA
|
||||||
.DA K.CTime2Time
|
.DA K.CTime2Time
|
||||||
.DA K.PTime2Time
|
.DA K.PTime2Time
|
||||||
.DA K.StrFTime
|
.DA 0
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
.DA K.FOPEN $60
|
.DA K.FOPEN $60
|
||||||
.DA K.FCLOSEA
|
.DA K.FCLOSEA
|
||||||
|
@ -78,11 +78,11 @@ K.UnloadLibA pha
|
|||||||
|
|
||||||
.1 ldy #S.MEM.PTR
|
.1 ldy #S.MEM.PTR
|
||||||
lda (ZPQuickPtr1),y
|
lda (ZPQuickPtr1),y
|
||||||
pha
|
sta pLib
|
||||||
|
|
||||||
iny
|
iny
|
||||||
lda (ZPQuickPtr1),y
|
lda (ZPQuickPtr1),y
|
||||||
ply
|
sta pLib+1
|
||||||
>STYA pLib
|
|
||||||
|
|
||||||
ldx #LIBMGR.UNLOAD
|
ldx #LIBMGR.UNLOAD
|
||||||
jsr pLibJmp Call LIB.UNLOAD function
|
jsr pLibJmp Call LIB.UNLOAD function
|
||||||
|
@ -179,6 +179,9 @@ K.PStrUprYA ldx #0
|
|||||||
K.PStrLwrYA ldx #2
|
K.PStrLwrYA ldx #2
|
||||||
>STYA ZPQuickPtr1
|
>STYA ZPQuickPtr1
|
||||||
|
|
||||||
|
pha save Y,A to restore them at exit
|
||||||
|
phy
|
||||||
|
|
||||||
lda (ZPQuickPtr1)
|
lda (ZPQuickPtr1)
|
||||||
tay
|
tay
|
||||||
|
|
||||||
@ -192,11 +195,255 @@ K.PStrLwrYA ldx #2
|
|||||||
.2 dey
|
.2 dey
|
||||||
bne .1
|
bne .1
|
||||||
|
|
||||||
|
ply
|
||||||
|
pla
|
||||||
clc
|
clc
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
K.PStrUprLwr .AS "azAZ"
|
K.PStrUprLwr .AS "azAZ"
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
|
* K.PStrFTime
|
||||||
|
* In :
|
||||||
|
* PULLW = Src PTR To S.Time
|
||||||
|
* PULLW = Src PTR To Format String
|
||||||
|
* PULLW = Dst PTR To PSTR Buf
|
||||||
|
* %a Abbreviated weekday name : Thu
|
||||||
|
* %A Full weekday name : Thursday
|
||||||
|
* %b Abbreviated month name : Aug
|
||||||
|
* %B Full month name : August
|
||||||
|
* %d Day of the month, zero-padded (01-31)
|
||||||
|
* %H Hour in 24h format (00-23) 14
|
||||||
|
* %I Hour in 12h format (01-12) 02
|
||||||
|
* %m Month as a decimal number (01-12) 08
|
||||||
|
* %M Minute (00-59) 55
|
||||||
|
* %p AM or PM designation PM
|
||||||
|
* %S Second (00-61) 02
|
||||||
|
* %w Weekday as a decimal number with Sunday as 0 (0-6)
|
||||||
|
* %y Year, last two digits (00-99)
|
||||||
|
* %Y Year four digits 2001
|
||||||
|
* PULLW = Dst PSTR Buffer
|
||||||
|
*--------------------------------------
|
||||||
|
K.PStrFTime >PULLW ZPQuickPtr1
|
||||||
|
>PULLW ZPQuickPtr2
|
||||||
|
>PULLW ZPQuickPtr3
|
||||||
|
|
||||||
|
lda #0
|
||||||
|
sta (ZPQuickPtr3) Reset target PSTR length
|
||||||
|
|
||||||
|
tay
|
||||||
|
|
||||||
|
.1 iny
|
||||||
|
lda (ZPQuickPtr2),y
|
||||||
|
cmp #'%'
|
||||||
|
beq .2
|
||||||
|
|
||||||
|
phy
|
||||||
|
jsr K.PStrFTime.addChar
|
||||||
|
ply
|
||||||
|
.10 tya
|
||||||
|
cmp (ZPQuickPtr2)
|
||||||
|
bne .1
|
||||||
|
rts
|
||||||
|
|
||||||
|
.2 tya
|
||||||
|
cmp (ZPQuickPtr2)
|
||||||
|
beq .8
|
||||||
|
|
||||||
|
iny
|
||||||
|
ldx #K.PStrFTime.JMPL-K.PStrFTime.Tbl-1
|
||||||
|
|
||||||
|
.3 lda (ZPQuickPtr2),y
|
||||||
|
cmp K.PStrFTime.Tbl,x
|
||||||
|
beq .4
|
||||||
|
dex
|
||||||
|
bpl .3
|
||||||
|
beq .10
|
||||||
|
|
||||||
|
.4 lda K.PStrFTime.JMPL,x
|
||||||
|
sta .5+1
|
||||||
|
lda K.PStrFTime.JMPH,x
|
||||||
|
sta .5+2
|
||||||
|
phy
|
||||||
|
.5 jsr $ffff
|
||||||
|
ply
|
||||||
|
bra .10
|
||||||
|
|
||||||
|
.8 rts
|
||||||
|
*--------------------------------------
|
||||||
|
K.PStrFTime.TBL .AS "aAbBdHImMpSwyY"
|
||||||
|
K.PStrFTime.JMPL .DA #K.PStrFTime.A
|
||||||
|
.DA #K.PStrFTime.AA
|
||||||
|
.DA #K.PStrFTime.B
|
||||||
|
.DA #K.PStrFTime.BB
|
||||||
|
.DA #K.PStrFTime.D
|
||||||
|
.DA #K.PStrFTime.HH
|
||||||
|
.DA #K.PStrFTime.II
|
||||||
|
.DA #K.PStrFTime.M
|
||||||
|
.DA #K.PStrFTime.MM
|
||||||
|
.DA #K.PStrFTime.P
|
||||||
|
.DA #K.PStrFTime.SS
|
||||||
|
.DA #K.PStrFTime.W
|
||||||
|
.DA #K.PStrFTime.Y
|
||||||
|
.DA #K.PStrFTime.YY
|
||||||
|
*--------------------------------------
|
||||||
|
K.PStrFTime.JMPH .DA /K.PStrFTime.A
|
||||||
|
.DA /K.PStrFTime.AA
|
||||||
|
.DA /K.PStrFTime.B
|
||||||
|
.DA /K.PStrFTime.BB
|
||||||
|
.DA /K.PStrFTime.D
|
||||||
|
.DA /K.PStrFTime.HH
|
||||||
|
.DA /K.PStrFTime.II
|
||||||
|
.DA /K.PStrFTime.M
|
||||||
|
.DA /K.PStrFTime.MM
|
||||||
|
.DA /K.PStrFTime.P
|
||||||
|
.DA /K.PStrFTime.SS
|
||||||
|
.DA /K.PStrFTime.W
|
||||||
|
.DA /K.PStrFTime.Y
|
||||||
|
.DA /K.PStrFTime.YY
|
||||||
|
*--------------------------------------
|
||||||
|
K.PStrFTime.A ldx #3 Max Len
|
||||||
|
.HS 2C Bit abs
|
||||||
|
|
||||||
|
K.PStrFTime.AA ldx #15
|
||||||
|
>LDYAI K.PStrFTime.DAY
|
||||||
|
>STYA ZPQuickPtr4
|
||||||
|
ldy #S.Time.WDAY
|
||||||
|
bra K.PStrFTime.STR
|
||||||
|
|
||||||
|
K.PStrFTime.B ldx #3
|
||||||
|
.HS 2C Bit abs
|
||||||
|
|
||||||
|
K.PStrFTime.BB ldx #15
|
||||||
|
>LDYAI K.PStrFTime.MON
|
||||||
|
>STYA ZPQuickPtr4
|
||||||
|
ldy #S.Time.MONTH
|
||||||
|
|
||||||
|
K.PStrFTime.STR lda (ZPQuickPtr1),y get required S.Time field value
|
||||||
|
tay
|
||||||
|
beq .8 Illegal value
|
||||||
|
|
||||||
|
.1 dey range 0..x
|
||||||
|
beq .2
|
||||||
|
lda (ZPQuickPtr4)
|
||||||
|
sec
|
||||||
|
adc ZPQuickPtr4
|
||||||
|
sta ZPQuickPtr4
|
||||||
|
bcc .1
|
||||||
|
inc ZPQuickPtr4+1
|
||||||
|
bra .1
|
||||||
|
|
||||||
|
.2 ldy #0
|
||||||
|
|
||||||
|
.3 iny
|
||||||
|
lda (ZPQuickPtr4),y
|
||||||
|
phy
|
||||||
|
jsr K.PStrFTime.addChar
|
||||||
|
pla
|
||||||
|
cmp (ZPQuickPtr4)
|
||||||
|
beq .8
|
||||||
|
|
||||||
|
tay
|
||||||
|
dex
|
||||||
|
bne .3
|
||||||
|
|
||||||
|
.8 rts
|
||||||
|
|
||||||
|
K.PStrFTime.D ldy #S.Time.DAY
|
||||||
|
bra K.PStrFTime.addDecPtr1Y
|
||||||
|
K.PStrFTime.HH ldy #S.Time.HOUR
|
||||||
|
bra K.PStrFTime.addDecPtr1Y
|
||||||
|
K.PStrFTime.II ldy #S.Time.HOUR
|
||||||
|
lda (ZPQuickPtr1),y
|
||||||
|
cmp #12
|
||||||
|
bcc .1
|
||||||
|
sbc #12
|
||||||
|
.1 bra K.PStrFTime.addDecA
|
||||||
|
K.PStrFTime.M ldy #S.Time.MONTH
|
||||||
|
bra K.PStrFTime.addDecPtr1Y
|
||||||
|
K.PStrFTime.MM ldy #S.Time.MINUTE
|
||||||
|
bra K.PStrFTime.addDecPtr1Y
|
||||||
|
K.PStrFTime.P ldy #S.Time.HOUR
|
||||||
|
lda (ZPQuickPtr1),y
|
||||||
|
cmp #12
|
||||||
|
bcc .1
|
||||||
|
lda #'p'
|
||||||
|
.HS 2C bit abs
|
||||||
|
.1 lda #'a'
|
||||||
|
jsr K.PStrFTime.addChar
|
||||||
|
lda #'m'
|
||||||
|
bra K.PStrFTime.addChar
|
||||||
|
K.PStrFTime.SS ldy #S.Time.SECOND
|
||||||
|
bra K.PStrFTime.addDecPtr1Y
|
||||||
|
K.PStrFTime.W ldy #S.Time.WDAY
|
||||||
|
bra K.PStrFTime.addDecPtr1Y
|
||||||
|
K.PStrFTime.YY ldy #S.Time.CENTURY
|
||||||
|
jsr K.PStrFTime.addDecPtr1Y
|
||||||
|
K.PStrFTime.Y ldy #S.Time.YEAR
|
||||||
|
*--------------------------------------
|
||||||
|
K.PStrFTime.addDecPtr1Y
|
||||||
|
lda (ZPQuickPtr1),y
|
||||||
|
K.PStrFTime.addDecA
|
||||||
|
sta K.PStrFTime.BIN
|
||||||
|
stz K.PStrFTime.DEC
|
||||||
|
sed
|
||||||
|
ldx #8
|
||||||
|
|
||||||
|
.1 asl K.PStrFTime.BIN
|
||||||
|
|
||||||
|
lda K.PStrFTime.DEC
|
||||||
|
adc K.PStrFTime.DEC
|
||||||
|
sta K.PStrFTime.DEC
|
||||||
|
|
||||||
|
dex
|
||||||
|
bne .1
|
||||||
|
cld
|
||||||
|
|
||||||
|
* lda K.PStrFTime.DEC already in A
|
||||||
|
|
||||||
|
lsr
|
||||||
|
lsr
|
||||||
|
lsr
|
||||||
|
lsr
|
||||||
|
ora #$30
|
||||||
|
jsr K.PStrFTime.addChar
|
||||||
|
lda K.PStrFTime.DEC
|
||||||
|
and #$0f
|
||||||
|
ora #$30
|
||||||
|
*--------------------------------------
|
||||||
|
K.PStrFTime.addChar
|
||||||
|
pha
|
||||||
|
lda (ZPQuickPtr3)
|
||||||
|
inc
|
||||||
|
sta (ZPQuickPtr3)
|
||||||
|
tay
|
||||||
|
pla
|
||||||
|
sta (ZPQuickPtr3),y
|
||||||
|
rts
|
||||||
|
*--------------------------------------
|
||||||
|
K.PStrFTime.DAY >PSTRING "Monday"
|
||||||
|
>PSTRING "Tuesday"
|
||||||
|
>PSTRING "Wednesday"
|
||||||
|
>PSTRING "Thursday"
|
||||||
|
>PSTRING "Friday"
|
||||||
|
>PSTRING "Saturday"
|
||||||
|
>PSTRING "Sunday"
|
||||||
|
*--------------------------------------
|
||||||
|
K.PStrFTime.MON >PSTRING "January"
|
||||||
|
>PSTRING "February"
|
||||||
|
>PSTRING "March"
|
||||||
|
>PSTRING "April"
|
||||||
|
>PSTRING "May"
|
||||||
|
>PSTRING "June"
|
||||||
|
>PSTRING "July"
|
||||||
|
>PSTRING "August"
|
||||||
|
>PSTRING "September"
|
||||||
|
>PSTRING "October"
|
||||||
|
>PSTRING "November"
|
||||||
|
>PSTRING "December"
|
||||||
|
*--------------------------------------
|
||||||
|
K.PStrFTime.BIN .BS 1
|
||||||
|
K.PStrFTime.DEC .BS 1 always < 100
|
||||||
|
*--------------------------------------
|
||||||
* K.PStr2StrArrayYA
|
* K.PStr2StrArrayYA
|
||||||
* In :
|
* In :
|
||||||
* Y,A = PTR to String
|
* Y,A = PTR to String
|
||||||
|
@ -95,7 +95,7 @@ K.ComputeWDAY lda #3 Thursday : 4 (-1 for mod 7)
|
|||||||
cmp K.CTime.Year
|
cmp K.CTime.Year
|
||||||
beq .4
|
beq .4
|
||||||
|
|
||||||
.2 jsr K.IsLeapYearYA CC = Leap
|
.2 jsr TIME.IsLeapYearYA CC = Leap
|
||||||
lda #0
|
lda #0
|
||||||
rol
|
rol
|
||||||
eor #1
|
eor #1
|
||||||
@ -126,7 +126,7 @@ K.ComputeWDAY lda #3 Thursday : 4 (-1 for mod 7)
|
|||||||
|
|
||||||
ldy K.CTime.Century
|
ldy K.CTime.Century
|
||||||
lda K.CTime.Year
|
lda K.CTime.Year
|
||||||
jsr K.IsLeapYearYA CC = Leap
|
jsr TIME.IsLeapYearYA CC = Leap
|
||||||
lda #0
|
lda #0
|
||||||
rol
|
rol
|
||||||
eor #1
|
eor #1
|
||||||
@ -309,7 +309,7 @@ K.CTime2Time >PULLW ZPQuickPtr1
|
|||||||
K.CTime2Time.Year
|
K.CTime2Time.Year
|
||||||
.1 ldy K.CTime.Century
|
.1 ldy K.CTime.Century
|
||||||
lda K.CTime.Year
|
lda K.CTime.Year
|
||||||
jsr K.IsLeapYearYA if Leap year CC
|
jsr TIME.IsLeapYearYA if Leap year CC
|
||||||
lda K.CTime.DivDay
|
lda K.CTime.DivDay
|
||||||
sbc #365
|
sbc #365
|
||||||
pha
|
pha
|
||||||
@ -340,245 +340,6 @@ K.CTime2Time.Year
|
|||||||
clc
|
clc
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* K.StrFTime
|
|
||||||
* In :
|
|
||||||
* PULLW = Src PTR To K.Time
|
|
||||||
* PULLW = Src PTR To Format String
|
|
||||||
* PULLW = Dst PTR To PSTR Buf
|
|
||||||
* %a Abbreviated weekday name : Thu
|
|
||||||
* %A Full weekday name : Thursday
|
|
||||||
* %b Abbreviated month name : Aug
|
|
||||||
* %B Full month name : August
|
|
||||||
* %d Day of the month, zero-padded (01-31)
|
|
||||||
* %H Hour in 24h format (00-23) 14
|
|
||||||
* %I Hour in 12h format (01-12) 02
|
|
||||||
* %m Month as a decimal number (01-12) 08
|
|
||||||
* %M Minute (00-59) 55
|
|
||||||
* %p AM or PM designation PM
|
|
||||||
* %S Second (00-61) 02
|
|
||||||
* %w Weekday as a decimal number with Sunday as 0 (0-6)
|
|
||||||
* %y Year, last two digits (00-99)
|
|
||||||
* %Y Year four digits 2001
|
|
||||||
* PULLW = Dst PSTR Buffer
|
|
||||||
*--------------------------------------
|
|
||||||
K.StrFTime >PULLW ZPQuickPtr1
|
|
||||||
>PULLW ZPQuickPtr2
|
|
||||||
>PULLW ZPQuickPtr3
|
|
||||||
|
|
||||||
lda #0
|
|
||||||
sta (ZPQuickPtr3) Reset target PSTR length
|
|
||||||
|
|
||||||
tay
|
|
||||||
|
|
||||||
.1 iny
|
|
||||||
lda (ZPQuickPtr2),y
|
|
||||||
cmp #'%'
|
|
||||||
beq .2
|
|
||||||
|
|
||||||
phy
|
|
||||||
jsr K.StrFTime.addChar
|
|
||||||
ply
|
|
||||||
.10 tya
|
|
||||||
cmp (ZPQuickPtr2)
|
|
||||||
bne .1
|
|
||||||
rts
|
|
||||||
|
|
||||||
.2 tya
|
|
||||||
cmp (ZPQuickPtr2)
|
|
||||||
beq .8
|
|
||||||
|
|
||||||
iny
|
|
||||||
ldx #K.StrFTime.JMPL-K.StrFTime.Tbl-1
|
|
||||||
|
|
||||||
.3 lda (ZPQuickPtr2),y
|
|
||||||
cmp K.StrFTime.Tbl,x
|
|
||||||
beq .4
|
|
||||||
dex
|
|
||||||
bpl .3
|
|
||||||
beq .10
|
|
||||||
|
|
||||||
.4 lda K.StrFTime.JMPL,x
|
|
||||||
sta .5+1
|
|
||||||
lda K.StrFTime.JMPH,x
|
|
||||||
sta .5+2
|
|
||||||
phy
|
|
||||||
.5 jsr $ffff
|
|
||||||
ply
|
|
||||||
bra .10
|
|
||||||
|
|
||||||
.8 rts
|
|
||||||
*--------------------------------------
|
|
||||||
K.StrFTime.A ldx #3 Max Len
|
|
||||||
.HS 2C Bit abs
|
|
||||||
|
|
||||||
K.StrFTime.AA ldx #15
|
|
||||||
>LDYAI K.StrFTime.DAY
|
|
||||||
>STYA ZPQuickPtr4
|
|
||||||
ldy #S.Time.WDAY
|
|
||||||
bra K.StrFTime.STR
|
|
||||||
|
|
||||||
K.StrFTime.B ldx #3
|
|
||||||
.HS 2C Bit abs
|
|
||||||
|
|
||||||
K.StrFTime.BB ldx #15
|
|
||||||
>LDYAI K.StrFTime.MON
|
|
||||||
>STYA ZPQuickPtr4
|
|
||||||
ldy #S.Time.MONTH
|
|
||||||
|
|
||||||
K.StrFTime.STR lda (ZPQuickPtr1),y get required S.Time field value
|
|
||||||
tay
|
|
||||||
beq .8 Illegal value
|
|
||||||
|
|
||||||
.1 dey range 0..x
|
|
||||||
beq .2
|
|
||||||
lda (ZPQuickPtr4)
|
|
||||||
sec
|
|
||||||
adc ZPQuickPtr4
|
|
||||||
sta ZPQuickPtr4
|
|
||||||
bcc .1
|
|
||||||
inc ZPQuickPtr4+1
|
|
||||||
bra .1
|
|
||||||
|
|
||||||
.2 ldy #0
|
|
||||||
|
|
||||||
.3 iny
|
|
||||||
lda (ZPQuickPtr4),y
|
|
||||||
phy
|
|
||||||
jsr K.StrFTime.addChar
|
|
||||||
pla
|
|
||||||
cmp (ZPQuickPtr4)
|
|
||||||
beq .8
|
|
||||||
|
|
||||||
tay
|
|
||||||
dex
|
|
||||||
bne .3
|
|
||||||
|
|
||||||
.8 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 (ZPQuickPtr1),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 (ZPQuickPtr1),y
|
|
||||||
cmp #12
|
|
||||||
bcc .1
|
|
||||||
lda #'p'
|
|
||||||
.HS 2C bit abs
|
|
||||||
.1 lda #'a'
|
|
||||||
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
|
|
||||||
*--------------------------------------
|
|
||||||
K.StrFTime.addDecPtr1Y
|
|
||||||
lda (ZPQuickPtr1),y
|
|
||||||
K.StrFTime.addDecA
|
|
||||||
sta K.StrFTime.BIN
|
|
||||||
stz K.StrFTime.DEC
|
|
||||||
sed
|
|
||||||
ldx #8
|
|
||||||
|
|
||||||
.1 asl K.StrFTime.BIN
|
|
||||||
|
|
||||||
lda K.StrFTime.DEC
|
|
||||||
adc K.StrFTime.DEC
|
|
||||||
sta K.StrFTime.DEC
|
|
||||||
|
|
||||||
dex
|
|
||||||
bne .1
|
|
||||||
cld
|
|
||||||
|
|
||||||
* lda K.StrFTime.DEC already in A
|
|
||||||
|
|
||||||
lsr
|
|
||||||
lsr
|
|
||||||
lsr
|
|
||||||
lsr
|
|
||||||
ora #$30
|
|
||||||
jsr K.StrFTime.addChar
|
|
||||||
lda K.StrFTime.DEC
|
|
||||||
and #$0f
|
|
||||||
ora #$30
|
|
||||||
*--------------------------------------
|
|
||||||
K.StrFTime.addChar
|
|
||||||
pha
|
|
||||||
lda (ZPQuickPtr3)
|
|
||||||
inc
|
|
||||||
sta (ZPQuickPtr3)
|
|
||||||
tay
|
|
||||||
pla
|
|
||||||
sta (ZPQuickPtr3),y
|
|
||||||
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.DAY >PSTRING "Monday"
|
|
||||||
>PSTRING "Tuesday"
|
|
||||||
>PSTRING "Wednesday"
|
|
||||||
>PSTRING "Thursday"
|
|
||||||
>PSTRING "Friday"
|
|
||||||
>PSTRING "Saturday"
|
|
||||||
>PSTRING "Sunday"
|
|
||||||
*--------------------------------------
|
|
||||||
K.StrFTime.MON >PSTRING "January"
|
|
||||||
>PSTRING "February"
|
|
||||||
>PSTRING "March"
|
|
||||||
>PSTRING "April"
|
|
||||||
>PSTRING "May"
|
|
||||||
>PSTRING "June"
|
|
||||||
>PSTRING "July"
|
|
||||||
>PSTRING "August"
|
|
||||||
>PSTRING "September"
|
|
||||||
>PSTRING "October"
|
|
||||||
>PSTRING "November"
|
|
||||||
>PSTRING "December"
|
|
||||||
*--------------------------------------
|
|
||||||
* In :
|
* In :
|
||||||
* Y = Century
|
* Y = Century
|
||||||
* A = Year (0..99)
|
* A = Year (0..99)
|
||||||
@ -589,7 +350,8 @@ K.StrFTime.MON >PSTRING "January"
|
|||||||
* CC = Leap
|
* CC = Leap
|
||||||
* CS = Not Leap
|
* CS = Not Leap
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
K.IsLeapYearYA cmp #0 Year = 00 ?
|
TIME.IsLeapYearYA
|
||||||
|
cmp #0 Year = 00 ?
|
||||||
bne .1 no
|
bne .1 no
|
||||||
|
|
||||||
tya year = 00, get century in a
|
tya year = 00, get century in a
|
||||||
@ -605,6 +367,7 @@ K.IsLeapYearYA cmp #0 Year = 00 ?
|
|||||||
.9 clc Leap
|
.9 clc Leap
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
|
K.StrFTime.MDAY .DA #3,#0,#3,#2,#3,#2,#3,#3,#2,#3,#2,#3
|
||||||
K.CTime.DWORD .BS 4
|
K.CTime.DWORD .BS 4
|
||||||
K.CTime.DivDay .BS 2
|
K.CTime.DivDay .BS 2
|
||||||
K.CTime.ModDay .BS 3
|
K.CTime.ModDay .BS 3
|
||||||
@ -613,11 +376,6 @@ K.CTime.Div3600 .BS 1
|
|||||||
K.CTime.Mod .BS 1
|
K.CTime.Mod .BS 1
|
||||||
K.CTime.Century .BS 1
|
K.CTime.Century .BS 1
|
||||||
K.CTime.Year .BS 1
|
K.CTime.Year .BS 1
|
||||||
*--------------------------------------
|
|
||||||
K.StrFTime.BIN .BS 1
|
|
||||||
K.StrFTime.DEC .BS 1 always < 100
|
|
||||||
*--------------------------------------
|
|
||||||
K.StrFTime.MDAY .DA #3,#0,#3,#2,#3,#2,#3,#3,#2,#3,#2,#3
|
|
||||||
MAN
|
MAN
|
||||||
SAVE SYS/KERNEL.S.Time
|
SAVE SYS/KERNEL.S.Time
|
||||||
LOAD SYS/KERNEL.S
|
LOAD SYS/KERNEL.S
|
||||||
|
@ -38,8 +38,9 @@ ZPQuickPtr4 .EQ ZPKERNEL+6
|
|||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* Kernel Init Stage 3
|
* Kernel Init Stage 3
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
jsr GO.A2osX
|
sta SETALTZP
|
||||||
|
bit RRAMWRAMBNK1
|
||||||
|
bit RRAMWRAMBNK1
|
||||||
jsr Kernel.Init3
|
jsr Kernel.Init3
|
||||||
>DEBUGOA
|
>DEBUGOA
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
|
Loading…
Reference in New Issue
Block a user