mirror of
https://github.com/A2osX/A2osX.git
synced 2024-11-29 17:50:18 +00:00
Kernel version 0.8 : Fixed a nasty bug in Relocator, but another one still there in K/LoadFile
This commit is contained in:
parent
4219fe9e0d
commit
d1de493789
BIN
A2OSX.BOOT.po
BIN
A2OSX.BOOT.po
Binary file not shown.
BIN
A2OSX.SRC.po
BIN
A2OSX.SRC.po
Binary file not shown.
@ -130,11 +130,14 @@ H.BIN.JMP .EQ 2
|
|||||||
H.BIN.CODE.TYPE .EQ 4
|
H.BIN.CODE.TYPE .EQ 4
|
||||||
H.BIN.VERSION .EQ 5
|
H.BIN.VERSION .EQ 5
|
||||||
H.BIN.CODE.LEN .EQ 8
|
H.BIN.CODE.LEN .EQ 8
|
||||||
H.BIN.BIN.DS.SIZE .EQ 10
|
*
|
||||||
H.BIN.DEV.HEADER.O .EQ 10
|
H.BIN.EXE.DS.SIZE .EQ 10
|
||||||
|
H.BIN.EXE.REL.TABLE .EQ 16
|
||||||
|
*
|
||||||
|
H.BIN.DRV.DEVCTRLBLK.O .EQ 10
|
||||||
H.BIN.DRV.CODE.O .EQ 12
|
H.BIN.DRV.CODE.O .EQ 12
|
||||||
H.BIN.DRV.CODE.LEN .EQ 14
|
H.BIN.DRV.CODE.LEN .EQ 14
|
||||||
H.BIN.RELOC.TABLE .EQ 16
|
H.BIN.DRV.REL.TABLE .EQ 0
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* A2osX.SYSCALL Functions Indexes
|
* A2osX.SYSCALL Functions Indexes
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
|
@ -41,53 +41,53 @@ K.LoadEXEYA.1 >PUSHWI KrnBuf256
|
|||||||
jsr K.LoadFile
|
jsr K.LoadFile
|
||||||
.9 bcs .99 Error Loading file
|
.9 bcs .99 Error Loading file
|
||||||
|
|
||||||
>STYA BIN.Relocate.SegLen
|
>DEBUG
|
||||||
|
|
||||||
stx K.LoadEXEYA.hMem save hMem
|
stx K.LoadEXEYA.hMem save hMem
|
||||||
txa
|
|
||||||
jsr K.GetMemPtrA
|
|
||||||
>STYA ZPQuickPtr1
|
|
||||||
|
|
||||||
ldy #H.BIN.CODE.LEN+1 get Code Len
|
pha YA=CODE+DATA size
|
||||||
lda (ZPQuickPtr1),y
|
tya
|
||||||
tax
|
* clc CC from bcs .99
|
||||||
dey
|
|
||||||
lda (ZPQuickPtr1),y
|
|
||||||
jsr BIN.Relocate.SetCodeLenAX
|
|
||||||
|
|
||||||
lda BIN.Relocate.Start Get AUXTYPE for actual Base Address
|
adc BIN.Relocate.Start Get AUXTYPE for actual Base Address
|
||||||
clc
|
|
||||||
adc BIN.Relocate.SegLen
|
|
||||||
sta BIN.Relocate.End compute Range End=AUXTYPE+FILELEN
|
sta BIN.Relocate.End compute Range End=AUXTYPE+FILELEN
|
||||||
|
pla
|
||||||
lda BIN.Relocate.Start+1
|
adc BIN.Relocate.Start+1
|
||||||
adc BIN.Relocate.SegLen+1
|
|
||||||
sta BIN.Relocate.End+1
|
sta BIN.Relocate.End+1
|
||||||
|
|
||||||
lda ZPQuickPtr1
|
txa
|
||||||
|
jsr K.GetMemPtrA
|
||||||
|
>STYA ZPQuickPtr1 set ZPQuickPtr1 -> Code start
|
||||||
|
|
||||||
|
>DEBUG
|
||||||
|
|
||||||
|
pha YA = actual load address
|
||||||
|
tya
|
||||||
sec
|
sec
|
||||||
sbc BIN.Relocate.Start
|
sbc BIN.Relocate.Start
|
||||||
sta BIN.Relocate.Offset Offset=ZPQuickPtr1-AUXTYPE
|
sta BIN.Relocate.Offset Offset=ZPQuickPtr1-AUXTYPE
|
||||||
|
pla
|
||||||
lda ZPQuickPtr1+1
|
|
||||||
sbc BIN.Relocate.Start+1
|
sbc BIN.Relocate.Start+1
|
||||||
sta BIN.Relocate.Offset+1
|
sta BIN.Relocate.Offset+1
|
||||||
|
|
||||||
jsr Bin.RelocateEXE
|
ldy #H.BIN.CODE.LEN get Code Len
|
||||||
|
jsr BIN.SetupCodeEndPtr2
|
||||||
|
|
||||||
|
jsr BIN.RelocateEXE
|
||||||
|
|
||||||
>LDYA K.LoadEXEYA.Filename get back bin path
|
>LDYA K.LoadEXEYA.Filename get back bin path
|
||||||
>SYSCALL SYS.NewPStrYA make a copy of this string
|
>SYSCALL SYS.NewPStrYA make a copy of this string
|
||||||
bcs .98
|
bcs .98
|
||||||
phx save copy
|
|
||||||
|
|
||||||
lda K.LoadEXEYA.hMem
|
lda K.LoadEXEYA.hMem Keep X=hMem
|
||||||
jsr K.GetMemByIDA
|
jsr K.GetMemByIDA X unmodified
|
||||||
>STYA ZPQuickPtr1
|
>STYA ZPQuickPtr1
|
||||||
|
|
||||||
lda (ZPQuickPtr1)
|
lda (ZPQuickPtr1)
|
||||||
ora #S.MEM.F.CODE This is a code segment
|
ora #S.MEM.F.CODE This is a code segment
|
||||||
sta (ZPQuickPtr1)
|
sta (ZPQuickPtr1)
|
||||||
|
|
||||||
pla
|
txa Get Back hMem
|
||||||
ldy #S.MEM.BIN
|
ldy #S.MEM.BIN
|
||||||
sta (ZPQuickPtr1),y
|
sta (ZPQuickPtr1),y
|
||||||
|
|
||||||
@ -111,14 +111,7 @@ K.LoadEXEYA.hMem .BS 1
|
|||||||
* BIN.InstallDRV
|
* BIN.InstallDRV
|
||||||
* pDrv = .DRV File Loaded Address
|
* pDrv = .DRV File Loaded Address
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
BIN.InstallDRV ldy #H.BIN.DRV.CODE.LEN+1
|
BIN.InstallDRV ldy #H.BIN.DRV.CODE.O
|
||||||
lda (pDrv),y
|
|
||||||
tax
|
|
||||||
dey
|
|
||||||
lda (pDrv),y
|
|
||||||
jsr BIN.Relocate.SetCodeLenAX
|
|
||||||
|
|
||||||
ldy #H.BIN.DRV.CODE.O
|
|
||||||
lda (pDrv),y
|
lda (pDrv),y
|
||||||
clc
|
clc
|
||||||
adc BIN.Relocate.Start Advance start From Bin code to DRV code
|
adc BIN.Relocate.Start Advance start From Bin code to DRV code
|
||||||
@ -128,29 +121,28 @@ BIN.InstallDRV ldy #H.BIN.DRV.CODE.LEN+1
|
|||||||
adc BIN.Relocate.Start+1
|
adc BIN.Relocate.Start+1
|
||||||
sta BIN.Relocate.Start+1
|
sta BIN.Relocate.Start+1
|
||||||
|
|
||||||
ldy #H.BIN.DRV.CODE.O
|
lda BIN.Relocate.End Compute DRVLen=End-start
|
||||||
lda BIN.Relocate.SegLen
|
|
||||||
sec
|
sec
|
||||||
sbc (pDrv),y
|
sbc BIN.Relocate.Start
|
||||||
sta BIN.InstallDRV.DRVLen
|
sta BIN.InstallDRV.DRVLen
|
||||||
iny
|
|
||||||
lda BIN.Relocate.SegLen+1
|
lda BIN.Relocate.End+1
|
||||||
sbc (pDrv),y
|
sbc BIN.Relocate.Start+1
|
||||||
sta BIN.InstallDRV.DRVLen+1 Compute DRV Len
|
sta BIN.InstallDRV.DRVLen+1
|
||||||
|
|
||||||
lda DevMgr.Free
|
lda DevMgr.Free
|
||||||
clc
|
clc
|
||||||
adc BIN.InstallDRV.DRVLen
|
adc BIN.InstallDRV.DRVLen
|
||||||
sta BIN.InstallDRV.DRVEnd
|
sta BIN.InstallDRV.DRVEnd
|
||||||
|
tay Save DRVEnd LO
|
||||||
lda DevMgr.Free+1
|
lda DevMgr.Free+1
|
||||||
adc BIN.InstallDRV.DRVLen+1
|
sta ZPQuickPtr3+1 save it for DrvMove
|
||||||
|
adc BIN.InstallDRV.DRVLen+1 A = DRVEnd HI
|
||||||
sta BIN.InstallDRV.DRVEnd+1
|
sta BIN.InstallDRV.DRVEnd+1
|
||||||
|
|
||||||
bcs .98 we crossed $FFFF, out of mem
|
bcs .98 we crossed $FFFF, out of mem
|
||||||
|
|
||||||
lda BIN.InstallDRV.DRVEnd
|
cpy #DevMgr.HiMem
|
||||||
cmp #DevMgr.HiMem
|
|
||||||
lda BIN.InstallDRV.DRVEnd+1
|
|
||||||
sbc /DevMgr.HiMem
|
sbc /DevMgr.HiMem
|
||||||
bcs .98 No More Room to load Driver....
|
bcs .98 No More Room to load Driver....
|
||||||
|
|
||||||
@ -161,7 +153,7 @@ BIN.InstallDRV ldy #H.BIN.DRV.CODE.LEN+1
|
|||||||
|
|
||||||
sta DevMgr.LastDevID
|
sta DevMgr.LastDevID
|
||||||
|
|
||||||
ldy #H.BIN.DEV.HEADER.O
|
ldy #H.BIN.DRV.DEVCTRLBLK.O
|
||||||
lda (pDrv),y
|
lda (pDrv),y
|
||||||
clc
|
clc
|
||||||
adc pDrv
|
adc pDrv
|
||||||
@ -193,6 +185,9 @@ BIN.InstallDRV ldy #H.BIN.DRV.CODE.LEN+1
|
|||||||
adc pDrv+1
|
adc pDrv+1
|
||||||
sta ZPQuickPtr1+1
|
sta ZPQuickPtr1+1
|
||||||
|
|
||||||
|
ldy #H.BIN.DRV.CODE.LEN
|
||||||
|
jsr BIN.SetupCodeEndPtr2
|
||||||
|
|
||||||
jsr BIN.RelocateDRV
|
jsr BIN.RelocateDRV
|
||||||
|
|
||||||
jsr BIN.MoveDRV
|
jsr BIN.MoveDRV
|
||||||
@ -210,7 +205,7 @@ BIN.InstallDRV ldy #H.BIN.DRV.CODE.LEN+1
|
|||||||
sec
|
sec
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
BIN.MoveDRV ldy #H.BIN.DEV.HEADER.O
|
BIN.MoveDRV ldy #H.BIN.DRV.DEVCTRLBLK.O
|
||||||
lda (pDrv),y
|
lda (pDrv),y
|
||||||
clc
|
clc
|
||||||
adc pDrv
|
adc pDrv
|
||||||
@ -259,10 +254,8 @@ BIN.MoveDRV ldy #H.BIN.DEV.HEADER.O
|
|||||||
adc pDrv+1
|
adc pDrv+1
|
||||||
sta ZPQuickPtr1+1 Make ZPQuickPtr1=DRV.CODE
|
sta ZPQuickPtr1+1 Make ZPQuickPtr1=DRV.CODE
|
||||||
|
|
||||||
lda DevMgr.Free
|
>LDYA DevMgr.Free
|
||||||
sta ZPQuickPtr2
|
>STYA ZPQuickPtr2 Make ZPQuickPtr1=Dest location in LC
|
||||||
lda DevMgr.Free+1
|
|
||||||
sta ZPQuickPtr2+1 Make ZPQuickPtr2=Dest Ram Location
|
|
||||||
|
|
||||||
lda BIN.InstallDRV.DrvLen+1
|
lda BIN.InstallDRV.DrvLen+1
|
||||||
eor #$ff
|
eor #$ff
|
||||||
@ -276,7 +269,7 @@ BIN.MoveDRV ldy #H.BIN.DEV.HEADER.O
|
|||||||
.2 inx
|
.2 inx
|
||||||
bne .3
|
bne .3
|
||||||
pla
|
pla
|
||||||
inc
|
dec
|
||||||
beq .8
|
beq .8
|
||||||
pha
|
pha
|
||||||
|
|
||||||
@ -284,35 +277,41 @@ BIN.MoveDRV ldy #H.BIN.DEV.HEADER.O
|
|||||||
sta (ZPQuickPtr2),y
|
sta (ZPQuickPtr2),y
|
||||||
iny
|
iny
|
||||||
bne .2
|
bne .2
|
||||||
|
|
||||||
inc ZPQuickPtr1+1
|
inc ZPQuickPtr1+1
|
||||||
inc ZPQuickPtr2+1
|
inc ZPQuickPtr2+1
|
||||||
bra .2
|
bra .2
|
||||||
|
|
||||||
.8 rts CC from last ADC
|
.8 rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
BIN.InstallDRV.DrvLen .BS 2
|
BIN.InstallDRV.DrvLen .BS 2
|
||||||
BIN.InstallDRV.DrvEnd .BS 2
|
BIN.InstallDRV.DrvEnd .BS 2
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
BIN.Relocate.SetCodeLenAX
|
BIN.SetupCodeEndPtr2
|
||||||
eor #$ff
|
lda (ZPQuickPtr1),y
|
||||||
sta BIN.Relocate.nCodeLen
|
clc
|
||||||
txa
|
adc ZPQuickPtr1
|
||||||
eor #$ff
|
sta ZPQuickPtr2 Make ZPQuickPtr2 = ZPQuickPtr1 + CodeLen
|
||||||
sta BIN.Relocate.nCodeLen+1
|
iny
|
||||||
|
lda (ZPQuickPtr1),y
|
||||||
|
adc ZPQuickPtr1+1
|
||||||
|
sta ZPQuickPtr2+1
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* BIN.Relocate___ :
|
* BIN.Relocate___ :
|
||||||
* In :
|
* In :
|
||||||
* ZPQuickPtr1 = Ptr to Code
|
* ZPQuickPtr1 = Ptr to Code
|
||||||
|
* ZPQuickPtr2 = End Of Code
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
BIN.Relocate.SegLen .BS 2 Code+Data Len
|
|
||||||
BIN.Relocate.Start .BS 2
|
BIN.Relocate.Start .BS 2
|
||||||
BIN.Relocate.End .BS 2
|
BIN.Relocate.End .BS 2
|
||||||
BIN.Relocate.Offset .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.HEADER+1
|
||||||
|
lda (ZPQuickPtr1),y
|
||||||
|
cmp /H.BIN.HEADER.BIN65
|
||||||
|
bne *
|
||||||
|
|
||||||
|
ldy #H.BIN.JMP relocate Main JMP
|
||||||
lda (ZPQuickPtr1),y
|
lda (ZPQuickPtr1),y
|
||||||
clc
|
clc
|
||||||
adc BIN.Relocate.Offset
|
adc BIN.Relocate.Offset
|
||||||
@ -323,14 +322,11 @@ BIN.RelocateEXE ldy #H.BIN.JMP relocate Main JMP
|
|||||||
adc BIN.Relocate.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.EXE.REL.TABLE skip Header, CS.SIZE & DS.SIZE... (16 bytes)
|
||||||
|
|
||||||
|
|
||||||
>DEBUG
|
|
||||||
|
|
||||||
.HS 2C bit abs
|
.HS 2C bit abs
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
BIN.RelocateDRV ldy #0
|
BIN.RelocateDRV ldy #H.BIN.DRV.REL.TABLE
|
||||||
|
|
||||||
.1 lda (ZPQuickPtr1),y Start Relocate JMP table
|
.1 lda (ZPQuickPtr1),y Start Relocate JMP table
|
||||||
tax LO in X
|
tax LO in X
|
||||||
@ -362,24 +358,19 @@ BIN.RelocateDRV ldy #0
|
|||||||
bcc .3
|
bcc .3
|
||||||
inc ZPQuickPtr1+1 ZPQuickPtr1=Current Code PTR
|
inc ZPQuickPtr1+1 ZPQuickPtr1=Current Code PTR
|
||||||
|
|
||||||
.3 inc BIN.Relocate.nCodeLen
|
.3 lda (ZPQuickPtr1) get OPCODE
|
||||||
bne .4 nCodeLen reached 0 ?
|
|
||||||
inc BIN.Relocate.nCodeLen+1
|
|
||||||
beq .8 no, continue relocating
|
|
||||||
|
|
||||||
.4 lda (ZPQuickPtr1) get OPCODE
|
|
||||||
lsr /2
|
lsr /2
|
||||||
tax
|
tax
|
||||||
lda BIN.OPCODES,x get OPCODE definition
|
lda BIN.OPCODES,x get OPCODE definition
|
||||||
bcs .5 go get LO nibble
|
bcs .4 go get LO nibble
|
||||||
lsr
|
lsr
|
||||||
lsr move HI -> LO
|
lsr move HI -> LO
|
||||||
lsr
|
lsr
|
||||||
lsr
|
lsr
|
||||||
.5 and #$0f
|
.4 and #$0f
|
||||||
|
|
||||||
bit #$8 abs addressing?
|
bit #$8 abs addressing?
|
||||||
beq .7 no....
|
beq .6 no....
|
||||||
|
|
||||||
and #7 save Opcode length...
|
and #7 save Opcode length...
|
||||||
pha
|
pha
|
||||||
@ -393,13 +384,13 @@ BIN.RelocateDRV ldy #0
|
|||||||
cpx BIN.Relocate.Start
|
cpx BIN.Relocate.Start
|
||||||
lda (ZPQuickPtr1),y Get HI
|
lda (ZPQuickPtr1),y Get HI
|
||||||
sbc BIN.Relocate.Start+1
|
sbc BIN.Relocate.Start+1
|
||||||
bcc .6 addr < BIN.Relocate.Start, out of range
|
bcc .5 addr < BIN.Relocate.Start, out of range
|
||||||
|
|
||||||
txa Get back LO
|
txa Get back LO
|
||||||
cpx BIN.Relocate.End
|
cpx BIN.Relocate.End
|
||||||
lda (ZPQuickPtr1),y Get HI
|
lda (ZPQuickPtr1),y Get HI
|
||||||
sbc BIN.Relocate.End+1
|
sbc BIN.Relocate.End+1
|
||||||
bcs .6 addr > BIN.Relocate.End, out of range
|
bcs .5 addr > BIN.Relocate.End, out of range
|
||||||
|
|
||||||
txa Get back LO
|
txa Get back LO
|
||||||
* clc CC from bcs .6
|
* clc CC from bcs .6
|
||||||
@ -411,14 +402,19 @@ BIN.RelocateDRV ldy #0
|
|||||||
adc BIN.Relocate.Offset+1
|
adc BIN.Relocate.Offset+1
|
||||||
sta (ZPQuickPtr1),y store relocated addr HI
|
sta (ZPQuickPtr1),y store relocated addr HI
|
||||||
|
|
||||||
.6 pla get back Opcode length...
|
.5 pla get back Opcode length...
|
||||||
|
|
||||||
.7 clc A = OPCODE length
|
.6 clc A = OPCODE length
|
||||||
adc ZPQuickPtr1
|
adc ZPQuickPtr1
|
||||||
sta ZPQuickPtr1
|
sta ZPQuickPtr1
|
||||||
bcc .3
|
bcc .7
|
||||||
inc ZPQuickPtr1+1
|
inc ZPQuickPtr1+1
|
||||||
bra .3 next opcode....
|
|
||||||
|
.7 eor ZPQuickPtr2 A = ZPQuickPtr1
|
||||||
|
bne .3
|
||||||
|
lda ZPQuickPtr1+1
|
||||||
|
eor ZPQuickPtr2+1
|
||||||
|
bne .3 next opcode....
|
||||||
|
|
||||||
.8 rts
|
.8 rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
|
@ -145,13 +145,13 @@ K.LoadFile jsr K.FOPEN
|
|||||||
|
|
||||||
ldx #SYS.FSEEK.SET
|
ldx #SYS.FSEEK.SET
|
||||||
jsr K.LoadFile.Seek
|
jsr K.LoadFile.Seek
|
||||||
bcs .99
|
bcs .97
|
||||||
|
|
||||||
>PUSHW K.LoadFile.Mem
|
>PUSHW K.LoadFile.Mem
|
||||||
>PUSHW K.LoadFile.Len
|
>PUSHW K.LoadFile.Len
|
||||||
>PUSHB K.LoadFile.hFile
|
>PUSHB K.LoadFile.hFile
|
||||||
jsr K.FREAD
|
jsr K.FREAD
|
||||||
bcs .99
|
bcs .97
|
||||||
|
|
||||||
jsr .99
|
jsr .99
|
||||||
|
|
||||||
@ -160,6 +160,12 @@ K.LoadFile jsr K.FOPEN
|
|||||||
clc
|
clc
|
||||||
.9 rts
|
.9 rts
|
||||||
|
|
||||||
|
.97 pha
|
||||||
|
lda K.LoadFile.hMem
|
||||||
|
jsr K.FreeMemA
|
||||||
|
pla
|
||||||
|
.HS 2C
|
||||||
|
|
||||||
.98 lda #SYSMGR.ERRFTB
|
.98 lda #SYSMGR.ERRFTB
|
||||||
|
|
||||||
.99 pha
|
.99 pha
|
||||||
|
@ -265,7 +265,7 @@ PS.Init >LDYA K.CreateProcess.CmdLine
|
|||||||
ldy #S.PS.hCS
|
ldy #S.PS.hCS
|
||||||
sta (ZPQuickPtr3),y save CS hMem in TSKSLOT
|
sta (ZPQuickPtr3),y save CS hMem in TSKSLOT
|
||||||
|
|
||||||
ldy #H.BIN.BIN.DS.SIZE+1
|
ldy #H.BIN.EXE.DS.SIZE+1
|
||||||
lda (ZPQuickPtr4),y Load DS.SIZE HI
|
lda (ZPQuickPtr4),y Load DS.SIZE HI
|
||||||
tax
|
tax
|
||||||
dey
|
dey
|
||||||
|
Loading…
Reference in New Issue
Block a user