mirror of
https://github.com/A2osX/A2osX.git
synced 2024-06-27 00:29:29 +00:00
Kernel version 0.8 : API finalized and dispatched in LCBNK1/2
This commit is contained in:
parent
906bf8322b
commit
127f89cedc
BIN
A2OSX.BOOT.po
BIN
A2OSX.BOOT.po
Binary file not shown.
BIN
A2OSX.SRC.po
BIN
A2OSX.SRC.po
Binary file not shown.
108
INC/A2osX.I.txt
108
INC/A2osX.I.txt
|
@ -136,15 +136,14 @@ H.BIN.RELOC.TABLE .EQ 16
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* A2osX.SYSCALL Functions Indexes
|
* A2osX.SYSCALL Functions Indexes
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
SYS.GetMem .EQ $00
|
SYS.COutA .EQ $00 SYS.FPUTCA
|
||||||
SYS.FreeMemA .EQ $02
|
* .EQ $02 SYS.FGETC
|
||||||
SYS.GetMemPtrA .EQ $04
|
SYS.PStrOutYA .EQ $04 SYS.FPUTSYA
|
||||||
SYS.GetMemByIDA .EQ $06
|
* .EQ $06 SYS.FGETS
|
||||||
|
SYS.HexOutA .EQ $08
|
||||||
SYS.GetMemByNameYA .EQ $08
|
SYS.HexOutYA .EQ $0A
|
||||||
SYS.LoadStockObjectYA .EQ $0A
|
SYS.DecOutA .EQ $0C
|
||||||
SYS.GetStockObjectA .EQ $0C
|
SYS.DecOutYA .EQ $0E
|
||||||
SYS.FreeStockObject .EQ $0E
|
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
SYS.NewPStrYA .EQ $10
|
SYS.NewPStrYA .EQ $10
|
||||||
SYS.PStrCpy .EQ $12
|
SYS.PStrCpy .EQ $12
|
||||||
|
@ -153,31 +152,48 @@ SYS.PStrMatch .EQ $16
|
||||||
|
|
||||||
SYS.PStrUprYA .EQ $18
|
SYS.PStrUprYA .EQ $18
|
||||||
SYS.PStrLwrYA .EQ $1A
|
SYS.PStrLwrYA .EQ $1A
|
||||||
|
* .EQ $1C
|
||||||
SYS.PStr2StrArrayYA .EQ $1E
|
SYS.PStr2StrArrayYA .EQ $1E
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
SYS.LoadDrvYA .EQ $20
|
SYS.ExecProcessNewEnvYA .EQ $20
|
||||||
SYS.LoadLibYA .EQ $22
|
SYS.ExecProcessYA .EQ $22
|
||||||
SYS.UnloadLibA .EQ $24
|
SYS.CreateProcessNewEnvYA .EQ $24
|
||||||
|
SYS.CreateProcessYA .EQ $26
|
||||||
|
|
||||||
SYS.TimeYA .EQ $28
|
SYS.GetPSByIDA .EQ $28
|
||||||
SYS.CTime2Time .EQ $2A
|
* .EQ $2A
|
||||||
SYS.PTime2Time .EQ $2C
|
SYS.Sleep .EQ $2C
|
||||||
SYS.StrFTime .EQ $2E
|
* .EQ $2E
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
|
SYS.GetArgC .EQ $30
|
||||||
SYS.ExpandPStrYA .EQ $32
|
SYS.GetArgA .EQ $32
|
||||||
SYS.GetArgC .EQ $34
|
SYS.ExpandPStrYA .EQ $34
|
||||||
SYS.GetArgA .EQ $36
|
* .EQ $36
|
||||||
|
|
||||||
SYS.PutEnvYA .EQ $38
|
SYS.PutEnvYA .EQ $38
|
||||||
SYS.SetEnv .EQ $3A
|
SYS.SetEnv .EQ $3A
|
||||||
SYS.GetEnvYA .EQ $3C
|
SYS.GetEnvYA .EQ $3C
|
||||||
SYS.UnsetEnvYA .EQ $3E
|
SYS.UnsetEnvYA .EQ $3E
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
|
SYS.FileSearch .EQ $40
|
||||||
|
SYS.GetFullPathYA .EQ $42
|
||||||
|
SYS.LoadFile .EQ $44
|
||||||
|
SYS.SaveFile .EQ $46
|
||||||
|
|
||||||
|
* .EQ $48
|
||||||
|
* .EQ $4A
|
||||||
|
* .EQ $4C
|
||||||
|
* .EQ $4E
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
|
SYS.LoadDrvYA .EQ $50
|
||||||
|
SYS.LoadLibYA .EQ $52
|
||||||
|
SYS.UnloadLibA .EQ $54
|
||||||
|
* .EQ $56
|
||||||
|
|
||||||
|
SYS.TimeYA .EQ $58
|
||||||
|
SYS.CTime2Time .EQ $5A
|
||||||
|
SYS.PTime2Time .EQ $5C
|
||||||
|
SYS.StrFTime .EQ $5E
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
SYS.FOPEN .EQ $60
|
SYS.FOPEN .EQ $60
|
||||||
SYS.FOPEN.R .EQ $01 Open For Read
|
SYS.FOPEN.R .EQ $01 Open For Read
|
||||||
|
@ -201,51 +217,31 @@ SYS.FEOF .EQ $6E
|
||||||
SYS.REMOVE .EQ $70
|
SYS.REMOVE .EQ $70
|
||||||
SYS.RENAME .EQ $72
|
SYS.RENAME .EQ $72
|
||||||
SYS.STAT .EQ $74
|
SYS.STAT .EQ $74
|
||||||
|
* .EQ $76
|
||||||
|
|
||||||
SYS.OPENDIRYA .EQ $78
|
SYS.OPENDIRYA .EQ $78
|
||||||
SYS.READDIRA .EQ $7A
|
SYS.READDIRA .EQ $7A
|
||||||
SYS.CLOSEDIRA .EQ $7C
|
SYS.CLOSEDIRA .EQ $7C
|
||||||
SYS.MKDIRYA .EQ $7E
|
SYS.MKDIRYA .EQ $7E
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
SYS.GetDevByIDA .EQ $80
|
SYS.GetMem .EQ $80
|
||||||
|
SYS.FreeMemA .EQ $82
|
||||||
|
SYS.GetMemPtrA .EQ $84
|
||||||
|
SYS.GetMemByIDA .EQ $86
|
||||||
|
|
||||||
SYS.GetDevByNameYA .EQ $84
|
SYS.GetMemByNameYA .EQ $88
|
||||||
SYS.GetDevInfoA .EQ $86
|
SYS.LoadStockObjectYA .EQ $8A
|
||||||
|
SYS.GetStockObjectA .EQ $8C
|
||||||
SYS.GetKeyboardEvent .EQ $88
|
SYS.FreeStockObject .EQ $8E
|
||||||
SYS.MKNOD .EQ $8C
|
|
||||||
SYS.MKFIFO .EQ $8E
|
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
SYS.ExecProcessNewEnvYA .EQ $90
|
SYS.GetDevByIDA .EQ $90
|
||||||
SYS.ExecProcessYA .EQ $92
|
SYS.GetDevByNameYA .EQ $94
|
||||||
SYS.CreateProcessNewEnvYA .EQ $94
|
SYS.GetDevInfoA .EQ $96
|
||||||
SYS.CreateProcessYA .EQ $96
|
SYS.GetKeyboardEvent .EQ $98
|
||||||
|
|
||||||
SYS.GetPSByIDA .EQ $98
|
SYS.MKNOD .EQ $FF
|
||||||
|
SYS.MKFIFO .EQ $FF
|
||||||
SYS.Sleep .EQ $9C
|
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
|
|
||||||
SYS.FileSearch .EQ $A2
|
|
||||||
SYS.GetFullPathYA .EQ $A4
|
|
||||||
|
|
||||||
SYS.LoadFile .EQ $A8
|
|
||||||
SYS.SaveFile .EQ $AA
|
|
||||||
*--------------------------------------
|
|
||||||
SYS.COutA .EQ $D0
|
|
||||||
|
|
||||||
SYS.PStrOutYA .EQ $D4
|
|
||||||
|
|
||||||
SYS.HexOutA .EQ $D8
|
|
||||||
SYS.HexOutYA .EQ $DA
|
|
||||||
SYS.DecOutA .EQ $DC
|
|
||||||
SYS.DecOutYA .EQ $DE
|
|
||||||
|
|
||||||
*SYS.FGETC .EQ $F0
|
|
||||||
*SYS.FGETS .EQ $F2
|
|
||||||
*SYS.FPUTC .EQ $F4
|
|
||||||
*SYS.FPUTS .EQ $F6
|
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* ProDOS ERROR CODES : $00->$5F
|
* ProDOS ERROR CODES : $00->$5F
|
||||||
* Lib ERROR CODES : $80->$BF
|
* Lib ERROR CODES : $80->$BF
|
||||||
|
|
|
@ -5,19 +5,19 @@ INC 1
|
||||||
AUTO 6
|
AUTO 6
|
||||||
.LIST OFF
|
.LIST OFF
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* K.LoadBinYA
|
* BIN.LoadExeYA
|
||||||
* in :
|
* in :
|
||||||
* A = hMem of FilePath (PSTRING)
|
* A = hMem of FilePath (PSTRING)
|
||||||
* out :
|
* out :
|
||||||
* Y,A = MEMPTR
|
* Y,A = MEMPTR
|
||||||
* X = hMem of Code Segment
|
* X = hMem of Code Segment
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
K.LoadBinYA >STYA K.LoadBin.Filename
|
BIN.LoadEXEYA >STYA BIN.LoadExe.Filename
|
||||||
jsr K.PStrUprYA
|
jsr K.PStrUprYA
|
||||||
|
|
||||||
>LDYA K.LoadBin.Filename
|
>LDYA BIN.LoadExe.Filename
|
||||||
jsr K.GetMemByNameYA
|
jsr K.GetMemByNameYA
|
||||||
bcs .3 not already loaded
|
bcs .1 not already loaded
|
||||||
|
|
||||||
>STYA ZPQuickPtr1 Save base address
|
>STYA ZPQuickPtr1 Save base address
|
||||||
ldy #S.MEM.REFCNT
|
ldy #S.MEM.REFCNT
|
||||||
|
@ -34,37 +34,37 @@ K.LoadBinYA >STYA K.LoadBin.Filename
|
||||||
clc
|
clc
|
||||||
rts
|
rts
|
||||||
|
|
||||||
.3 >PUSHWI KrnBuf256
|
.1 >PUSHWI KrnBuf256
|
||||||
>PUSHW K.LoadBin.Filename
|
>PUSHW BIN.LoadExe.Filename
|
||||||
jsr K.STAT Look for AUXTYPE
|
jsr K.STAT Look for AUXTYPE
|
||||||
bcs .99
|
bcs .99
|
||||||
|
|
||||||
>LDYA KrnBuf256+S.STAT.AUXTYPE
|
>LDYA KrnBuf256+S.STAT.AUXTYPE
|
||||||
>STYA K.LoadBin.OldBase
|
>STYA BIN.LoadExe.OldBase
|
||||||
|
|
||||||
>PUSHYA
|
>PUSHYA
|
||||||
>PUSHBI 6 S.FILEINFO.TYPE.BIN
|
>PUSHBI 6 S.FILEINFO.TYPE.BIN
|
||||||
>PUSHBI SYS.FOPEN.R
|
>PUSHBI SYS.FOPEN.R
|
||||||
>PUSHW K.LoadBin.Filename
|
>PUSHW BIN.LoadExe.Filename
|
||||||
jsr K.LoadFile
|
jsr K.LoadFile
|
||||||
bcs .99 Error Loading file
|
bcs .99 Error Loading file
|
||||||
|
|
||||||
>STYA K.LoadBin.SegLen
|
>STYA BIN.LoadExe.SegLen
|
||||||
stx K.LoadBin.hMem save hMem
|
stx BIN.LoadExe.hMem save hMem
|
||||||
txa
|
txa
|
||||||
jsr K.GetMemPtrA
|
jsr K.GetMemPtrA
|
||||||
>STYA K.LoadBin.NewBase
|
>STYA BIN.LoadExe.NewBase
|
||||||
|
|
||||||
jsr K.InsBin
|
jsr BIN.InstallEXE
|
||||||
|
|
||||||
bcs .98 relocation error, dicard Code segment
|
bcs .98 relocation error, dicard Code segment
|
||||||
|
|
||||||
>LDYA K.LoadBin.Filename get back bin path
|
>LDYA BIN.LoadExe.Filename get back bin path
|
||||||
jsr K.NewPStrYA make a copy of this string
|
jsr K.NewPStrYA make a copy of this string
|
||||||
bcs .98
|
bcs .98
|
||||||
phx save copy
|
phx save copy
|
||||||
|
|
||||||
lda K.LoadBin.hMem
|
lda BIN.LoadExe.hMem
|
||||||
jsr K.GetMemByIDA
|
jsr K.GetMemByIDA
|
||||||
>STYA ZPQuickPtr1
|
>STYA ZPQuickPtr1
|
||||||
|
|
||||||
|
@ -76,25 +76,388 @@ K.LoadBinYA >STYA K.LoadBin.Filename
|
||||||
ldy #S.MEM.BIN
|
ldy #S.MEM.BIN
|
||||||
sta (ZPQuickPtr1),y
|
sta (ZPQuickPtr1),y
|
||||||
|
|
||||||
lda K.LoadBin.hMem
|
lda BIN.LoadExe.hMem
|
||||||
tax return hMEM to Caller...
|
tax return hMEM to Caller...
|
||||||
jsr K.GetMemPtrA
|
jsr K.GetMemPtrA
|
||||||
clc ...and Y,A=PTR to CS
|
clc ...and Y,A=PTR to CS
|
||||||
rts
|
rts
|
||||||
|
|
||||||
.98 pha
|
.98 pha
|
||||||
lda K.LoadBin.hMem
|
lda BIN.LoadExe.hMem
|
||||||
jsr K.FreeMemA Discard Loaded Code
|
jsr K.FreeMemA Discard Loaded Code
|
||||||
pla
|
pla
|
||||||
|
|
||||||
sec
|
sec
|
||||||
.99 rts
|
.99 rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
K.LoadBin.Filename .BS 2
|
BIN.LoadExe.Filename .BS 2
|
||||||
K.LoadBin.hMem .BS 1
|
BIN.LoadExe.hMem .BS 1
|
||||||
K.LoadBin.OldBase .BS 2
|
BIN.LoadExe.OldBase .BS 2
|
||||||
K.LoadBin.NewBase .BS 2
|
BIN.LoadExe.NewBase .BS 2
|
||||||
K.LoadBin.SegLen .BS 2
|
BIN.LoadExe.SegLen .BS 2
|
||||||
|
*--------------------------------------
|
||||||
|
* BIN.InstallEXE
|
||||||
|
*--------------------------------------
|
||||||
|
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
|
||||||
|
*--------------------------------------
|
||||||
|
BIN.InstallDRV ldy #H.BIN.DRV.CODE.LEN
|
||||||
|
lda (pDrv),y
|
||||||
|
sta Rel.CodeLen
|
||||||
|
iny
|
||||||
|
lda (pDrv),y
|
||||||
|
sta Rel.CodeLen+1
|
||||||
|
|
||||||
|
ldy #H.BIN.DRV.CODE.O
|
||||||
|
lda (pDrv),y
|
||||||
|
clc
|
||||||
|
adc BIN.LoadExe.OldBase
|
||||||
|
sta Rel.Start
|
||||||
|
iny
|
||||||
|
lda (pDrv),y
|
||||||
|
adc BIN.LoadExe.OldBase+1
|
||||||
|
sta Rel.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
|
||||||
|
lda BIN.LoadExe.SegLen
|
||||||
|
sec
|
||||||
|
sbc (pDrv),y
|
||||||
|
sta K.InsDrv.DRVLen
|
||||||
|
iny
|
||||||
|
lda BIN.LoadExe.SegLen+1
|
||||||
|
sbc (pDrv),y
|
||||||
|
sta K.InsDrv.DRVLen+1 Compute DRV Len
|
||||||
|
|
||||||
|
lda DevMgr.Free
|
||||||
|
clc
|
||||||
|
adc K.InsDrv.DRVLen
|
||||||
|
sta K.InsDrv.DRVEnd
|
||||||
|
lda DevMgr.Free+1
|
||||||
|
adc K.InsDrv.DRVLen+1
|
||||||
|
sta K.InsDrv.DRVEnd+1
|
||||||
|
|
||||||
|
bcs .98 we crossed $FFFF, out of mem
|
||||||
|
|
||||||
|
lda K.InsDrv.DRVEnd
|
||||||
|
sec
|
||||||
|
sbc #DevMgr.HiMem
|
||||||
|
lda K.InsDrv.DRVEnd+1
|
||||||
|
sbc /DevMgr.HiMem
|
||||||
|
bcs .98 No More Room to load Driver....
|
||||||
|
|
||||||
|
lda DevMgr.LastDevID
|
||||||
|
inc
|
||||||
|
cmp #K.DEV.MAX
|
||||||
|
beq .99 No Device Handle Left
|
||||||
|
|
||||||
|
sta DevMgr.LastDevID
|
||||||
|
|
||||||
|
ldy #H.BIN.DEV.HEADER.O
|
||||||
|
lda (pDrv),y
|
||||||
|
clc
|
||||||
|
adc pDrv
|
||||||
|
sta ZPQuickPtr1
|
||||||
|
iny
|
||||||
|
lda (pDrv),y
|
||||||
|
adc pDrv+1
|
||||||
|
sta ZPQuickPtr1+1
|
||||||
|
|
||||||
|
ldy #S.DEV.JMP
|
||||||
|
|
||||||
|
lda DevMgr.Free
|
||||||
|
sec
|
||||||
|
sbc (ZPQuickPtr1),y
|
||||||
|
sta Rel.Offset
|
||||||
|
lda DevMgr.Free+1
|
||||||
|
iny
|
||||||
|
sbc (ZPQuickPtr1),y
|
||||||
|
sta Rel.Offset+1
|
||||||
|
|
||||||
|
ldy #H.BIN.DRV.CODE.O
|
||||||
|
lda (pDrv),y
|
||||||
|
clc
|
||||||
|
adc pDrv
|
||||||
|
sta ZPQuickPtr1
|
||||||
|
|
||||||
|
iny
|
||||||
|
lda (pDrv),y
|
||||||
|
adc pDrv+1
|
||||||
|
sta ZPQuickPtr1+1
|
||||||
|
|
||||||
|
jsr BIN.RelocateDRV
|
||||||
|
|
||||||
|
jsr BIN.MoveDRV
|
||||||
|
|
||||||
|
>LDYA K.InsDrv.DrvEnd
|
||||||
|
>STYA DevMgr.Free
|
||||||
|
clc
|
||||||
|
rts
|
||||||
|
|
||||||
|
.98 lda #DEVMGR.ERROOM
|
||||||
|
sec
|
||||||
|
rts
|
||||||
|
|
||||||
|
.99 lda #DEVMGR.ERROOH
|
||||||
|
sec
|
||||||
|
rts
|
||||||
|
*--------------------------------------
|
||||||
|
BIN.MoveDRV ldy #H.BIN.DEV.HEADER.O
|
||||||
|
lda (pDrv),y
|
||||||
|
clc
|
||||||
|
adc pDrv
|
||||||
|
sta ZPQuickPtr1
|
||||||
|
iny
|
||||||
|
lda (pDrv),y
|
||||||
|
adc pDrv+1
|
||||||
|
sta ZPQuickPtr1+1
|
||||||
|
|
||||||
|
ldy #S.DEV.JMP Relocate Main JMP
|
||||||
|
lda (ZPQuickPtr1),y
|
||||||
|
clc
|
||||||
|
adc Rel.Offset
|
||||||
|
sta (ZPQuickPtr1),y
|
||||||
|
iny
|
||||||
|
lda (ZPQuickPtr1),y
|
||||||
|
adc Rel.Offset+1
|
||||||
|
sta (ZPQuickPtr1),y
|
||||||
|
|
||||||
|
lda DevMgr.LastDevID
|
||||||
|
jsr K.GetDevByIDA
|
||||||
|
>STYA pDev
|
||||||
|
|
||||||
|
ldy #S.DEV.SIZE Make sure DevMgr.Table Ends with 0
|
||||||
|
lda #0
|
||||||
|
sta (pDev),y
|
||||||
|
dey
|
||||||
|
|
||||||
|
.1 lda (ZPQuickPtr1),y Copy DRV.Header
|
||||||
|
sta (pDev),y
|
||||||
|
dey
|
||||||
|
bpl .1
|
||||||
|
|
||||||
|
lda DevMgr.LastDevID Save Dev.ID in the driver for SELECT
|
||||||
|
ldy #S.DEV.ID
|
||||||
|
sta (pDev),y
|
||||||
|
|
||||||
|
ldy #H.BIN.DRV.CODE.O
|
||||||
|
lda (pDrv),y
|
||||||
|
clc
|
||||||
|
adc pDrv
|
||||||
|
sta ZPQuickPtr1
|
||||||
|
iny
|
||||||
|
lda (pDrv),y
|
||||||
|
adc pDrv+1
|
||||||
|
sta ZPQuickPtr1+1 Make ZPQuickPtr1=DRV.CODE
|
||||||
|
|
||||||
|
lda DevMgr.Free
|
||||||
|
sta ZPQuickPtr2
|
||||||
|
lda DevMgr.Free+1
|
||||||
|
sta ZPQuickPtr2+1 Make ZPQuickPtr2=Dest Ram Location
|
||||||
|
|
||||||
|
ldy K.InsDrv.DrvLen
|
||||||
|
ldx K.InsDrv.DrvLen+1
|
||||||
|
|
||||||
|
.2 lda (ZPQuickPtr1)
|
||||||
|
sta (ZPQuickPtr2)
|
||||||
|
|
||||||
|
inc ZPQuickPtr1
|
||||||
|
bne .3
|
||||||
|
inc ZPQuickPtr1+1
|
||||||
|
|
||||||
|
.3 inc ZPQuickPtr2
|
||||||
|
bne .4
|
||||||
|
inc ZPQuickPtr2+1
|
||||||
|
|
||||||
|
.4 tya
|
||||||
|
bne .5
|
||||||
|
txa
|
||||||
|
beq .8
|
||||||
|
dex
|
||||||
|
|
||||||
|
.5 dey
|
||||||
|
bra .2
|
||||||
|
.8 rts
|
||||||
|
*--------------------------------------
|
||||||
|
K.InsDrv.DrvLen .BS 2
|
||||||
|
K.InsDrv.DrvEnd .BS 2
|
||||||
|
*--------------------------------------
|
||||||
|
* BIN.Relocate___ :
|
||||||
|
* ZPQuickPtr1 = Ptr to Code
|
||||||
|
*--------------------------------------
|
||||||
|
BIN.RelocateEXE ldy #H.BIN.JMP relocate Main JMP
|
||||||
|
lda (ZPQuickPtr1),y
|
||||||
|
clc
|
||||||
|
adc Rel.Offset
|
||||||
|
sta (ZPQuickPtr1),y
|
||||||
|
|
||||||
|
iny
|
||||||
|
lda (ZPQuickPtr1),y
|
||||||
|
adc Rel.Offset+1
|
||||||
|
sta (ZPQuickPtr1),y
|
||||||
|
|
||||||
|
ldy #H.BIN.RELOC.TABLE skip Header, CS.SIZE & DS.SIZE... (16 bytes)
|
||||||
|
|
||||||
|
.HS 2C bit abs
|
||||||
|
|
||||||
|
BIN.RelocateDRV ldy #0
|
||||||
|
|
||||||
|
.1 lda (ZPQuickPtr1),y Start Relocate JMP table
|
||||||
|
tax
|
||||||
|
iny
|
||||||
|
ora (ZPQuickPtr1),y
|
||||||
|
beq .2 $0000 = end of table
|
||||||
|
|
||||||
|
dey
|
||||||
|
txa
|
||||||
|
clc
|
||||||
|
adc Rel.Offset
|
||||||
|
sta (ZPQuickPtr1),y
|
||||||
|
|
||||||
|
iny
|
||||||
|
lda (ZPQuickPtr1),y
|
||||||
|
adc Rel.Offset+1
|
||||||
|
sta (ZPQuickPtr1),y
|
||||||
|
|
||||||
|
iny
|
||||||
|
|
||||||
|
bra .1
|
||||||
|
|
||||||
|
.2 lda ZPQuickPtr1
|
||||||
|
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
|
||||||
|
sta ZPQuickPtr1
|
||||||
|
bcc .5
|
||||||
|
inc ZPQuickPtr1+1 ZPQuickPtr1=Current Code PTR
|
||||||
|
clc
|
||||||
|
|
||||||
|
.5 lda (ZPQuickPtr1) get OPCODE
|
||||||
|
tax
|
||||||
|
lda BIN.OPCODES,x get OPCODE definition
|
||||||
|
bpl .7 abs addressing?
|
||||||
|
|
||||||
|
and #3 save Opcode length...
|
||||||
|
pha
|
||||||
|
|
||||||
|
ldy #1
|
||||||
|
lda (ZPQuickPtr1),y Get LO
|
||||||
|
sec
|
||||||
|
sbc Rel.Start
|
||||||
|
iny
|
||||||
|
lda (ZPQuickPtr1),y Get HI
|
||||||
|
sbc Rel.Start+1
|
||||||
|
bcc .6 addr < AX, out of range
|
||||||
|
|
||||||
|
dey
|
||||||
|
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
|
||||||
|
|
||||||
|
dey
|
||||||
|
lda (ZPQuickPtr1),y Get LO
|
||||||
|
clc
|
||||||
|
adc Rel.Offset add DX to abs address
|
||||||
|
sta (ZPQuickPtr1),y store relocated addr LO
|
||||||
|
iny
|
||||||
|
lda (ZPQuickPtr1),y Get HI
|
||||||
|
adc Rel.Offset+1
|
||||||
|
sta (ZPQuickPtr1),y store relocated addr HI
|
||||||
|
|
||||||
|
.6 pla
|
||||||
|
|
||||||
|
.7 clc A = OPCODE length
|
||||||
|
adc ZPQuickPtr1
|
||||||
|
sta ZPQuickPtr1
|
||||||
|
bcc .8
|
||||||
|
inc ZPQuickPtr1+1
|
||||||
|
|
||||||
|
.8 lda ZPQuickPtr1 is Current PTR < Code Limit ?
|
||||||
|
sec
|
||||||
|
sbc ZPQuickPtr2
|
||||||
|
lda ZPQuickPtr1+1
|
||||||
|
sbc ZPQuickPtr2+1
|
||||||
|
bcc .5 yes, continue relocating
|
||||||
|
|
||||||
|
clc
|
||||||
|
rts
|
||||||
|
*--------------------------------------
|
||||||
|
* 65C02 OPCODES
|
||||||
|
* Bit 7 : 1 absolute addressing
|
||||||
|
* Bit 1-0 : opcode + @ length
|
||||||
|
*--------------------------------------
|
||||||
|
* x0.x1.x2.x3.x4.x5.x6.x7.x8.x9.xA.xB.xC.xD.xE.xF
|
||||||
|
BIN.OPCODES .HS 01.02.02.01.02.02.02.02.01.02.01.01.83.83.83.03
|
||||||
|
.HS 02.02.02.01.02.02.02.02.01.83.01.01.83.83.83.03
|
||||||
|
.HS 83.02.02.01.02.02.02.02.01.02.01.01.83.83.83.03
|
||||||
|
.HS 02.02.02.01.02.02.02.02.01.83.01.01.83.83.83.03
|
||||||
|
.HS 01.02.02.01.02.02.02.02.01.02.01.01.83.83.83.03
|
||||||
|
.HS 02.02.02.01.02.02.02.02.01.83.01.01.01.83.83.03
|
||||||
|
.HS 01.02.02.01.02.02.02.02.01.02.01.01.83.83.83.03
|
||||||
|
.HS 02.02.02.01.02.02.02.02.01.83.01.01.83.83.83.03
|
||||||
|
.HS 02.02.02.01.02.02.02.02.01.02.01.01.83.83.83.03
|
||||||
|
.HS 02.02.02.01.02.02.02.02.01.83.01.01.83.83.83.03
|
||||||
|
.HS 02.02.02.01.02.02.02.02.01.02.01.01.83.83.83.03
|
||||||
|
.HS 02.02.02.01.02.02.02.02.01.83.01.01.83.83.83.03
|
||||||
|
.HS 02.02.02.01.02.02.02.02.01.02.01.01.83.83.83.03
|
||||||
|
.HS 02.02.02.01.02.02.02.02.01.83.01.01.01.83.83.03
|
||||||
|
.HS 02.02.02.01.02.02.02.02.01.02.01.01.83.83.83.03
|
||||||
|
.HS 02.02.02.01.02.02.02.02.01.83.01.01.01.83.83.03
|
||||||
|
*--------------------------------------
|
||||||
|
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
|
||||||
|
|
|
@ -25,7 +25,7 @@ K.LoadDrvYA >STYA K.LoadDrv.CmdArray
|
||||||
bcs .99
|
bcs .99
|
||||||
stx K.LoadDrv.hFullName
|
stx K.LoadDrv.hFullName
|
||||||
|
|
||||||
jsr K.LoadBinYA Y,A =filename full path
|
jsr BIN.LoadExeYA Y,A =filename full path
|
||||||
bcs .98
|
bcs .98
|
||||||
|
|
||||||
>STYA pDrv
|
>STYA pDrv
|
||||||
|
@ -46,7 +46,7 @@ K.LoadDrvYA >STYA K.LoadDrv.CmdArray
|
||||||
|
|
||||||
bcs .97
|
bcs .97
|
||||||
|
|
||||||
jsr K.InsDrv
|
jsr BIN.InstallDRV
|
||||||
|
|
||||||
bcs .97
|
bcs .97
|
||||||
|
|
||||||
|
|
|
@ -143,14 +143,8 @@ K.FCLOSEA.1 ldy #S.FILE.PRODOS.REF
|
||||||
* Y,A = Bytes Read
|
* Y,A = Bytes Read
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
K.FREAD jsr K.PFTCheckFileSTK
|
K.FREAD jsr K.PFTCheckFileSTK
|
||||||
>PULLA
|
ldx #MLIREAD
|
||||||
jsr FILE.SetupPrt1A
|
bra K.FREAD.1
|
||||||
>PULLW MLICALL.PARAMS+4
|
|
||||||
>PULLW MLICALL.PARAMS+2
|
|
||||||
>MLICALL MLIREAD
|
|
||||||
bcs .9
|
|
||||||
>LDYA MLICALL.PARAMS+6
|
|
||||||
.9 rts
|
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* K.FWRITE
|
* K.FWRITE
|
||||||
* In :
|
* In :
|
||||||
|
@ -162,10 +156,15 @@ K.FREAD jsr K.PFTCheckFileSTK
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
K.FWRITE jsr K.PFTCheckFileSTK
|
K.FWRITE jsr K.PFTCheckFileSTK
|
||||||
>PULLA
|
>PULLA
|
||||||
jsr FILE.SetupPrt1A
|
ldx #MLIWRITE
|
||||||
|
K.FREAD.1 jsr FILE.SetupPrt1A
|
||||||
>PULLW MLICALL.PARAMS+4
|
>PULLW MLICALL.PARAMS+4
|
||||||
>PULLW MLICALL.PARAMS+2
|
>PULLW MLICALL.PARAMS+2
|
||||||
>MLICALL MLIWRITE
|
|
||||||
|
* >MLICALL MLIWRITE
|
||||||
|
|
||||||
|
lda #4 Param Count = 4 for MLIREAD & MLIWRITE
|
||||||
|
jsr A2osX.MLICALL
|
||||||
bcs .9
|
bcs .9
|
||||||
>LDYA MLICALL.PARAMS+6
|
>LDYA MLICALL.PARAMS+6
|
||||||
.9 rts
|
.9 rts
|
||||||
|
|
|
@ -7,14 +7,18 @@ AUTO 6
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* $D000-D0FF KERNEL.SYSCALL Jmp Table
|
* $D000-D0FF KERNEL.SYSCALL Jmp Table
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
KERNEL.SYSCALL .DA K.GetMem $00
|
KERNEL.SYSCALL
|
||||||
.DA K.FreeMemA
|
*--------------------------------------
|
||||||
.DA K.GetMemPtrA
|
* Bank 1
|
||||||
.DA K.GetMemByIDA
|
*--------------------------------------
|
||||||
.DA K.GetMemByNameYA
|
.DA K.COutA $00
|
||||||
.DA K.LoadStockObjectYA
|
.DA 0
|
||||||
.DA K.GetStockObjectA
|
.DA K.PStrOutYA
|
||||||
.DA K.FreeStockObject
|
.DA 0
|
||||||
|
.DA K.HexOutA
|
||||||
|
.DA K.HexOutYA
|
||||||
|
.DA K.DecOutA
|
||||||
|
.DA K.DecOutYA
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
.DA K.NewPStrYA $10
|
.DA K.NewPStrYA $10
|
||||||
.DA K.PStrCpy
|
.DA K.PStrCpy
|
||||||
|
@ -25,7 +29,36 @@ KERNEL.SYSCALL .DA K.GetMem $00
|
||||||
.DA 0
|
.DA 0
|
||||||
.DA K.PStr2StrArrayYA
|
.DA K.PStr2StrArrayYA
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
.DA K.LoadDrvYA $20
|
.DA K.ExecProcessNewEnvYA $20
|
||||||
|
.DA K.ExecProcessYA
|
||||||
|
.DA K.CreateProcessNewEnvYA
|
||||||
|
.DA K.CreateProcessYA
|
||||||
|
.DA K.GetPSByIDA
|
||||||
|
.DA 0
|
||||||
|
.DA K.Sleep
|
||||||
|
.DA 0
|
||||||
|
*--------------------------------------
|
||||||
|
.DA K.GetArgC $30
|
||||||
|
.DA K.GetArgA
|
||||||
|
.DA K.ExpandPStrYA $32
|
||||||
|
.DA 0
|
||||||
|
.DA K.PutEnvYA
|
||||||
|
.DA K.SetEnv
|
||||||
|
.DA K.GetEnvYA
|
||||||
|
.DA K.UnsetEnvYA
|
||||||
|
*--------------------------------------
|
||||||
|
* Bank 2
|
||||||
|
*--------------------------------------
|
||||||
|
.DA K.FileSearch $40
|
||||||
|
.DA K.GetFullPathYA
|
||||||
|
.DA K.LoadFile
|
||||||
|
.DA K.SaveFile
|
||||||
|
.DA 0
|
||||||
|
.DA 0
|
||||||
|
.DA 0
|
||||||
|
.DA 0
|
||||||
|
*--------------------------------------
|
||||||
|
.DA K.LoadDrvYA $50
|
||||||
.DA K.LoadLibYA
|
.DA K.LoadLibYA
|
||||||
.DA K.UnloadLibA
|
.DA K.UnloadLibA
|
||||||
.DA 0
|
.DA 0
|
||||||
|
@ -33,33 +66,6 @@ KERNEL.SYSCALL .DA K.GetMem $00
|
||||||
.DA K.CTime2Time
|
.DA K.CTime2Time
|
||||||
.DA K.PTime2Time
|
.DA K.PTime2Time
|
||||||
.DA K.StrFTime
|
.DA K.StrFTime
|
||||||
*--------------------------------------
|
|
||||||
.DA 0 $30
|
|
||||||
.DA K.ExpandPStrYA
|
|
||||||
.DA K.GetArgC
|
|
||||||
.DA K.GetArgA
|
|
||||||
.DA K.PutEnvYA
|
|
||||||
.DA K.SetEnv
|
|
||||||
.DA K.GetEnvYA
|
|
||||||
.DA K.UnsetEnvYA
|
|
||||||
*--------------------------------------
|
|
||||||
.DA 0 $40
|
|
||||||
.DA 0
|
|
||||||
.DA 0
|
|
||||||
.DA 0
|
|
||||||
.DA 0
|
|
||||||
.DA 0
|
|
||||||
.DA 0
|
|
||||||
.DA 0
|
|
||||||
*--------------------------------------
|
|
||||||
.DA 0 $50
|
|
||||||
.DA 0
|
|
||||||
.DA 0
|
|
||||||
.DA 0
|
|
||||||
.DA 0
|
|
||||||
.DA 0
|
|
||||||
.DA 0
|
|
||||||
.DA 0
|
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
.DA K.FOPEN $60
|
.DA K.FOPEN $60
|
||||||
.DA K.FCLOSEA
|
.DA K.FCLOSEA
|
||||||
|
@ -79,78 +85,21 @@ KERNEL.SYSCALL .DA K.GetMem $00
|
||||||
.DA K.CLOSEDIRA
|
.DA K.CLOSEDIRA
|
||||||
.DA K.MKDIRYA
|
.DA K.MKDIRYA
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
.DA K.GetDevByIDA $80
|
* $E000
|
||||||
.DA 0
|
*--------------------------------------
|
||||||
|
.DA K.GetMem $80
|
||||||
|
.DA K.FreeMemA
|
||||||
|
.DA K.GetMemPtrA
|
||||||
|
.DA K.GetMemByIDA
|
||||||
|
.DA K.GetMemByNameYA
|
||||||
|
.DA K.LoadStockObjectYA
|
||||||
|
.DA K.GetStockObjectA
|
||||||
|
.DA K.FreeStockObject
|
||||||
|
*--------------------------------------
|
||||||
|
.DA K.GetDevByIDA $90
|
||||||
.DA K.GetDevByNameYA
|
.DA K.GetDevByNameYA
|
||||||
.DA K.GetDevInfoA
|
.DA K.GetDevInfoA
|
||||||
.DA K.GetKeyboardEvent
|
.DA K.GetKeyboardEvent
|
||||||
.DA 0
|
|
||||||
.DA 0
|
|
||||||
.DA 0
|
|
||||||
*--------------------------------------
|
|
||||||
.DA K.ExecProcessNewEnvYA $90
|
|
||||||
.DA K.ExecProcessYA
|
|
||||||
.DA K.CreateProcessNewEnvYA
|
|
||||||
.DA K.CreateProcessYA
|
|
||||||
.DA K.GetPSByIDA
|
|
||||||
.DA 0
|
|
||||||
.DA K.Sleep
|
|
||||||
.DA 0
|
|
||||||
*--------------------------------------
|
|
||||||
.DA 0 $A0
|
|
||||||
.DA K.FileSearch
|
|
||||||
.DA K.GetFullPathYA
|
|
||||||
.DA 0
|
|
||||||
.DA K.LoadFile
|
|
||||||
.DA K.SaveFile
|
|
||||||
.DA 0
|
|
||||||
.DA 0
|
|
||||||
*--------------------------------------
|
|
||||||
.DA 0 $B0
|
|
||||||
.DA 0
|
|
||||||
.DA 0
|
|
||||||
.DA 0
|
|
||||||
.DA 0
|
|
||||||
.DA 0
|
|
||||||
.DA 0
|
|
||||||
.DA 0
|
|
||||||
*--------------------------------------
|
|
||||||
.DA 0 $C0
|
|
||||||
.DA 0
|
|
||||||
.DA 0
|
|
||||||
.DA 0
|
|
||||||
.DA 0
|
|
||||||
.DA 0
|
|
||||||
.DA 0
|
|
||||||
.DA 0
|
|
||||||
*--------------------------------------
|
|
||||||
.DA K.COutA $D0
|
|
||||||
.DA 0
|
|
||||||
.DA K.PStrOutYA
|
|
||||||
.DA 0
|
|
||||||
.DA K.HexOutA
|
|
||||||
.DA K.HexOutYA
|
|
||||||
.DA K.DecOutA
|
|
||||||
.DA K.DecOutYA
|
|
||||||
*--------------------------------------
|
|
||||||
.DA 0 $E0
|
|
||||||
.DA 0
|
|
||||||
.DA 0
|
|
||||||
.DA 0
|
|
||||||
.DA 0
|
|
||||||
.DA 0
|
|
||||||
.DA 0
|
|
||||||
.DA 0
|
|
||||||
*--------------------------------------
|
|
||||||
.DA 0 $F0
|
|
||||||
.DA 0
|
|
||||||
.DA 0
|
|
||||||
.DA 0
|
|
||||||
.DA 0
|
|
||||||
.DA 0
|
|
||||||
.DA 0
|
|
||||||
.DA 0
|
|
||||||
|
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* LO Byte :
|
* LO Byte :
|
||||||
* #RRAMWRAMBNK1 or #RRAMWRAMBNK2
|
* #RRAMWRAMBNK1 or #RRAMWRAMBNK2
|
||||||
|
@ -158,157 +107,179 @@ KERNEL.SYSCALL .DA K.GetMem $00
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
KERNEL.SYSCALL.FLAGS
|
KERNEL.SYSCALL.FLAGS
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
.DA 0 $00 : MEM $E000
|
.DA #$80 $00 : CIO $D001
|
||||||
.DA 0
|
.DA #RRAMWRAMBNK1
|
||||||
.DA 0
|
.DA #$80
|
||||||
.DA 0
|
.DA #RRAMWRAMBNK1
|
||||||
.DA 0
|
.DA #$80
|
||||||
.DA 0
|
.DA #RRAMWRAMBNK1
|
||||||
.DA 0
|
.DA #$80
|
||||||
.DA 0
|
.DA #RRAMWRAMBNK1
|
||||||
*--------------------------------------
|
|
||||||
.DA 0 $10 : STR $D001
|
|
||||||
.DA 0
|
|
||||||
.DA 0
|
|
||||||
.DA 0
|
|
||||||
.DA 0
|
|
||||||
.DA 0
|
|
||||||
.DA 0
|
|
||||||
.DA 0
|
|
||||||
*--------------------------------------
|
|
||||||
.DA #RRAMWRAMBNK2 $20 : BIN,DRV,LIB (REL) $D002
|
|
||||||
.DA #0
|
|
||||||
.DA #RRAMWRAMBNK2
|
|
||||||
.DA #0
|
|
||||||
.DA #RRAMWRAMBNK2
|
|
||||||
.DA #0
|
|
||||||
.DA 0
|
|
||||||
|
|
||||||
.DA #RRAMWRAMBNK2 $28 : TIME $D002
|
.DA #$80
|
||||||
.DA #0
|
.DA #RRAMWRAMBNK1
|
||||||
|
.DA #$80
|
||||||
|
.DA #RRAMWRAMBNK1
|
||||||
|
.DA #$80
|
||||||
|
.DA #RRAMWRAMBNK1
|
||||||
|
.DA #$80
|
||||||
|
.DA #RRAMWRAMBNK1
|
||||||
|
*--------------------------------------
|
||||||
|
.DA #$80 $10 : STR $D001
|
||||||
|
.DA #RRAMWRAMBNK1
|
||||||
|
.DA #$80
|
||||||
|
.DA #RRAMWRAMBNK1
|
||||||
|
.DA #$80
|
||||||
|
.DA #RRAMWRAMBNK1
|
||||||
|
.DA #$80
|
||||||
|
.DA #RRAMWRAMBNK1
|
||||||
|
|
||||||
|
.DA #$80
|
||||||
|
.DA #RRAMWRAMBNK1
|
||||||
|
.DA #$80
|
||||||
|
.DA #RRAMWRAMBNK1
|
||||||
|
.DA #$80
|
||||||
|
.DA #RRAMWRAMBNK1
|
||||||
|
.DA #$80
|
||||||
|
.DA #RRAMWRAMBNK1
|
||||||
|
*--------------------------------------
|
||||||
|
.DA #$80 $20 :
|
||||||
|
.DA #RRAMWRAMBNK1
|
||||||
|
.DA #$80
|
||||||
|
.DA #RRAMWRAMBNK1
|
||||||
|
.DA #$80
|
||||||
|
.DA #RRAMWRAMBNK1
|
||||||
|
.DA #$80
|
||||||
|
.DA #RRAMWRAMBNK1
|
||||||
|
|
||||||
|
.DA #$80 $28 :
|
||||||
|
.DA #RRAMWRAMBNK1
|
||||||
|
.DA #$80
|
||||||
|
.DA #RRAMWRAMBNK1
|
||||||
|
.DA #$80
|
||||||
|
.DA #RRAMWRAMBNK1
|
||||||
|
.DA #$80
|
||||||
|
.DA #RRAMWRAMBNK1
|
||||||
|
*--------------------------------------
|
||||||
|
.DA #$80 $30 : ARG
|
||||||
|
.DA #RRAMWRAMBNK1
|
||||||
|
.DA #$80
|
||||||
|
.DA #RRAMWRAMBNK1
|
||||||
|
.DA #$80 $32 : ENV
|
||||||
|
.DA #RRAMWRAMBNK1
|
||||||
|
.DA #$80
|
||||||
|
.DA #RRAMWRAMBNK1
|
||||||
|
|
||||||
|
.DA #$80
|
||||||
|
.DA #RRAMWRAMBNK1
|
||||||
|
.DA #$80
|
||||||
|
.DA #RRAMWRAMBNK1
|
||||||
|
.DA #$80
|
||||||
|
.DA #RRAMWRAMBNK1
|
||||||
|
.DA #$80
|
||||||
|
.DA #RRAMWRAMBNK1
|
||||||
|
*--------------------------------------
|
||||||
|
* $40 -> $7E
|
||||||
|
*--------------------------------------
|
||||||
|
.DA #$80 $40 : FIO
|
||||||
.DA #RRAMWRAMBNK2
|
.DA #RRAMWRAMBNK2
|
||||||
.DA #0
|
.DA #$80
|
||||||
.DA #RRAMWRAMBNK2
|
.DA #RRAMWRAMBNK2
|
||||||
.DA #0
|
.DA #$80
|
||||||
|
.DA #RRAMWRAMBNK2
|
||||||
|
.DA #$80
|
||||||
|
.DA #RRAMWRAMBNK2
|
||||||
|
|
||||||
|
.DA #$80
|
||||||
|
.DA #RRAMWRAMBNK2
|
||||||
|
.DA #$80
|
||||||
|
.DA #RRAMWRAMBNK2
|
||||||
|
.DA #$80
|
||||||
|
.DA #RRAMWRAMBNK2
|
||||||
|
.DA #$80
|
||||||
.DA #RRAMWRAMBNK2
|
.DA #RRAMWRAMBNK2
|
||||||
.DA #0
|
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
.DA 0 $30
|
.DA #$80 $50 :
|
||||||
.DA 0
|
.DA #RRAMWRAMBNK2
|
||||||
.DA 0
|
.DA #$80
|
||||||
.DA 0
|
.DA #RRAMWRAMBNK2
|
||||||
.DA 0
|
.DA #$80
|
||||||
.DA 0
|
.DA #RRAMWRAMBNK2
|
||||||
.DA 0
|
.DA #$80
|
||||||
.DA 0
|
.DA #RRAMWRAMBNK2
|
||||||
|
|
||||||
|
.DA #$80
|
||||||
|
.DA #RRAMWRAMBNK2
|
||||||
|
.DA #$80
|
||||||
|
.DA #RRAMWRAMBNK2
|
||||||
|
.DA #$80
|
||||||
|
.DA #RRAMWRAMBNK2
|
||||||
|
.DA #$80
|
||||||
|
.DA #RRAMWRAMBNK2
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
.DA 0 $40
|
.DA #$80 $60 :
|
||||||
.DA 0
|
.DA #RRAMWRAMBNK2
|
||||||
.DA 0
|
.DA #$80
|
||||||
.DA 0
|
.DA #RRAMWRAMBNK2
|
||||||
.DA 0
|
.DA #$80
|
||||||
.DA 0
|
.DA #RRAMWRAMBNK2
|
||||||
.DA 0
|
.DA #$80
|
||||||
.DA 0
|
.DA #RRAMWRAMBNK2
|
||||||
|
|
||||||
|
.DA #$80
|
||||||
|
.DA #RRAMWRAMBNK2
|
||||||
|
.DA #$80
|
||||||
|
.DA #RRAMWRAMBNK2
|
||||||
|
.DA #$80
|
||||||
|
.DA #RRAMWRAMBNK2
|
||||||
|
.DA #$80
|
||||||
|
.DA #RRAMWRAMBNK2
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
.DA 0 $50
|
.DA #$80 $70 :
|
||||||
.DA 0
|
.DA #RRAMWRAMBNK2
|
||||||
.DA 0
|
.DA #$80
|
||||||
.DA 0
|
.DA #RRAMWRAMBNK2
|
||||||
.DA 0
|
.DA #$80
|
||||||
.DA 0
|
.DA #RRAMWRAMBNK2
|
||||||
.DA 0
|
.DA #$80
|
||||||
.DA 0
|
.DA #RRAMWRAMBNK2
|
||||||
|
|
||||||
|
.DA #$80
|
||||||
|
.DA #RRAMWRAMBNK2
|
||||||
|
.DA #$80
|
||||||
|
.DA #RRAMWRAMBNK2
|
||||||
|
.DA #$80
|
||||||
|
.DA #RRAMWRAMBNK2
|
||||||
|
.DA #$80
|
||||||
|
.DA #RRAMWRAMBNK2
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
.DA 0 $60
|
.DA #$80 $80 :
|
||||||
.DA 0
|
.DA #RRAMWRAMBNK2
|
||||||
.DA 0
|
.DA #$80
|
||||||
.DA 0
|
.DA #RRAMWRAMBNK2
|
||||||
.DA 0
|
.DA #$80
|
||||||
.DA 0
|
.DA #RRAMWRAMBNK2
|
||||||
.DA 0
|
.DA #$80
|
||||||
.DA 0
|
.DA #RRAMWRAMBNK2
|
||||||
|
|
||||||
|
.DA #$80
|
||||||
|
.DA #RRAMWRAMBNK2
|
||||||
|
.DA #$80
|
||||||
|
.DA #RRAMWRAMBNK2
|
||||||
|
.DA #$80
|
||||||
|
.DA #RRAMWRAMBNK2
|
||||||
|
.DA #$80
|
||||||
|
.DA #RRAMWRAMBNK2
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
.DA 0 $70
|
.DA #$80 $90 :
|
||||||
.DA 0
|
.DA #RRAMWRAMBNK2
|
||||||
.DA 0
|
.DA #$80
|
||||||
.DA 0
|
.DA #RRAMWRAMBNK2
|
||||||
.DA 0
|
.DA #$80
|
||||||
.DA 0
|
.DA #RRAMWRAMBNK2
|
||||||
.DA 0
|
.DA #$80
|
||||||
.DA 0
|
.DA #RRAMWRAMBNK2
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
.DA 0 $80
|
|
||||||
.DA 0
|
|
||||||
.DA 0
|
|
||||||
.DA 0
|
|
||||||
.DA 0
|
|
||||||
.DA 0
|
|
||||||
.DA 0
|
|
||||||
.DA 0
|
|
||||||
*--------------------------------------
|
|
||||||
.DA 0 $90
|
|
||||||
.DA 0
|
|
||||||
.DA 0
|
|
||||||
.DA 0
|
|
||||||
.DA 0
|
|
||||||
.DA 0
|
|
||||||
.DA 0
|
|
||||||
.DA 0
|
|
||||||
*--------------------------------------
|
|
||||||
.DA 0 $A0
|
|
||||||
.DA 0
|
|
||||||
.DA 0
|
|
||||||
.DA 0
|
|
||||||
.DA 0
|
|
||||||
.DA 0
|
|
||||||
.DA 0
|
|
||||||
.DA 0
|
|
||||||
*--------------------------------------
|
|
||||||
.DA 0 $B0
|
|
||||||
.DA 0
|
|
||||||
.DA 0
|
|
||||||
.DA 0
|
|
||||||
.DA 0
|
|
||||||
.DA 0
|
|
||||||
.DA 0
|
|
||||||
.DA 0
|
|
||||||
*--------------------------------------
|
|
||||||
.DA 0 $C0
|
|
||||||
.DA 0
|
|
||||||
.DA 0
|
|
||||||
.DA 0
|
|
||||||
.DA 0
|
|
||||||
.DA 0
|
|
||||||
.DA 0
|
|
||||||
.DA 0
|
|
||||||
*--------------------------------------
|
|
||||||
.DA 0 $D0
|
|
||||||
.DA 0
|
|
||||||
.DA 0
|
|
||||||
.DA 0
|
|
||||||
.DA 0
|
|
||||||
.DA 0
|
|
||||||
.DA 0
|
|
||||||
.DA 0
|
|
||||||
*--------------------------------------
|
|
||||||
.DA 0 $E0
|
|
||||||
.DA 0
|
|
||||||
.DA 0
|
|
||||||
.DA 0
|
|
||||||
.DA 0
|
|
||||||
.DA 0
|
|
||||||
.DA 0
|
|
||||||
.DA 0
|
|
||||||
*--------------------------------------
|
|
||||||
.DA 0 $F0
|
|
||||||
.DA 0
|
|
||||||
.DA 0
|
|
||||||
.DA 0
|
|
||||||
.DA 0
|
|
||||||
.DA 0
|
|
||||||
.DA 0
|
|
||||||
.DA 0
|
|
||||||
MAN
|
MAN
|
||||||
SAVE SYS/KERNEL.S.JMP
|
SAVE SYS/KERNEL.S.JMP
|
||||||
LOAD SYS/KERNEL.S
|
LOAD SYS/KERNEL.S
|
||||||
|
|
|
@ -25,7 +25,7 @@ K.LoadLibYA >STYA K.LoadLib.Name save libname for K.FileSearch
|
||||||
|
|
||||||
stx K.LoadLib.hFullName
|
stx K.LoadLib.hFullName
|
||||||
|
|
||||||
jsr K.LoadBinYA Y,A = filename full path
|
jsr BIN.LoadExeYA Y,A=filename full path
|
||||||
bcs .98
|
bcs .98
|
||||||
|
|
||||||
stx K.LoadLib.hMem
|
stx K.LoadLib.hMem
|
||||||
|
|
|
@ -5,43 +5,62 @@ INC 1
|
||||||
AUTO 6
|
AUTO 6
|
||||||
.LIST OFF
|
.LIST OFF
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* K.SelectProcessA
|
* K.ExecProcessNewEnvYA
|
||||||
* In : A=PSID
|
* K.ExecProcessYA (Blocking Parent PID)
|
||||||
|
* K.CreateProcessNewEnvYA
|
||||||
|
* K.CreateProcessYA (Non Blocking)
|
||||||
|
* in :
|
||||||
|
* Y,A = PTR To Cmd Line
|
||||||
|
* out :
|
||||||
|
* A = Child PSID
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
K.SelectProcessA
|
K.ExecProcessNewEnvYA
|
||||||
tay
|
ldx #S.PS.F.ENV+S.PS.F.HOLD
|
||||||
bne K.SelectProcessN
|
.HS 2C bit abs
|
||||||
K.SelectProcess0
|
K.ExecProcessYA ldx #S.PS.F.HOLD
|
||||||
>LDYAI TskMgr.Table Make PS #0 as current process
|
.HS 2C bit abs
|
||||||
>STYA pPs
|
K.CreateProcessNewEnvYA
|
||||||
bra K.SelectProcessDev
|
ldx #S.PS.F.ENV
|
||||||
K.SelectProcessN
|
.HS 2C bit abs
|
||||||
jsr K.GetPSByIDA
|
K.CreateProcessYA
|
||||||
bcs *
|
ldx #0
|
||||||
>STYA pPs
|
stx K.CreateProcess.Flags
|
||||||
|
|
||||||
K.SelectProcess ldy #S.PS.hCS
|
jsr K.ExpandPStrYA
|
||||||
lda (pPs),y
|
bcs .99
|
||||||
jsr K.GetMemPtrA
|
|
||||||
>STYA pCode
|
|
||||||
|
|
||||||
ldy #S.PS.hDS
|
stx K.CreateProcess.hCmdLine
|
||||||
lda (pPs),y
|
>STYA K.CreateProcess.CmdLine
|
||||||
beq K.SelectProcessDev
|
|
||||||
|
|
||||||
jsr K.GetMemPtrA
|
|
||||||
>STYA pData
|
|
||||||
|
|
||||||
K.SelectProcessDev
|
|
||||||
ldy #S.PS.hOUTDEV
|
|
||||||
lda (pPs),y
|
|
||||||
beq .8
|
|
||||||
|
|
||||||
jsr K.GetDevByIDA
|
jsr K.CreateProcess.Child
|
||||||
>STYA pDev
|
bcs .98
|
||||||
|
|
||||||
.8 clc
|
sta K.CreateProcess.CPSID
|
||||||
|
|
||||||
|
jsr K.CreateProcess.Init
|
||||||
|
bcs .97
|
||||||
|
|
||||||
|
lda K.CreateProcess.CPSID
|
||||||
|
clc
|
||||||
rts
|
rts
|
||||||
|
|
||||||
|
.97 pha save error code
|
||||||
|
lda K.CreateProcess.CPSID
|
||||||
|
jsr K.FreeProcessA
|
||||||
|
pla get back error code
|
||||||
|
|
||||||
|
.98 pha
|
||||||
|
lda K.CreateProcess.hCmdLine
|
||||||
|
jsr K.FreeMemA
|
||||||
|
pla
|
||||||
|
|
||||||
|
.99 sec
|
||||||
|
rts
|
||||||
|
*--------------------------------------
|
||||||
|
K.CreateProcess.Flags .BS 1
|
||||||
|
K.CreateProcess.hCmdLine .BS 1
|
||||||
|
K.CreateProcess.CmdLine .BS 2
|
||||||
|
K.CreateProcess.CPSID .BS 1
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* K.GetPSByIDA
|
* K.GetPSByIDA
|
||||||
* In :
|
* In :
|
||||||
|
@ -104,63 +123,6 @@ K.Sleep pla get PC LO
|
||||||
clc No error,
|
clc No error,
|
||||||
rts back to Kernel
|
rts back to Kernel
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* K.ExecProcessNewEnvYA
|
|
||||||
* K.ExecProcessYA (Blocking Parent PID)
|
|
||||||
* K.CreateProcessNewEnvYA
|
|
||||||
* K.CreateProcessYA (Non Blocking)
|
|
||||||
* in :
|
|
||||||
* Y,A = PTR To Cmd Line
|
|
||||||
* out :
|
|
||||||
* A = Child PSID
|
|
||||||
*--------------------------------------
|
|
||||||
K.ExecProcessNewEnvYA
|
|
||||||
ldx #S.PS.F.ENV+S.PS.F.HOLD
|
|
||||||
.HS 2C bit abs
|
|
||||||
K.ExecProcessYA ldx #S.PS.F.HOLD
|
|
||||||
.HS 2C bit abs
|
|
||||||
K.CreateProcessNewEnvYA
|
|
||||||
ldx #S.PS.F.ENV
|
|
||||||
.HS 2C bit abs
|
|
||||||
K.CreateProcessYA
|
|
||||||
ldx #0
|
|
||||||
stx K.CreateProcess.Flags
|
|
||||||
|
|
||||||
jsr K.ExpandPStrYA
|
|
||||||
bcs .99
|
|
||||||
|
|
||||||
stx K.CreateProcess.hCmdLine
|
|
||||||
>STYA K.CreateProcess.CmdLine
|
|
||||||
|
|
||||||
jsr K.CreateProcess.Child
|
|
||||||
bcs .98
|
|
||||||
|
|
||||||
sta K.CreateProcess.CPSID
|
|
||||||
|
|
||||||
jsr K.CreateProcess.Init
|
|
||||||
bcs .97
|
|
||||||
|
|
||||||
lda K.CreateProcess.CPSID
|
|
||||||
clc
|
|
||||||
rts
|
|
||||||
|
|
||||||
.97 pha save error code
|
|
||||||
lda K.CreateProcess.CPSID
|
|
||||||
jsr K.FreeProcessA
|
|
||||||
pla get back error code
|
|
||||||
|
|
||||||
.98 pha
|
|
||||||
lda K.CreateProcess.hCmdLine
|
|
||||||
jsr K.FreeMemA
|
|
||||||
pla
|
|
||||||
|
|
||||||
.99 sec
|
|
||||||
rts
|
|
||||||
*--------------------------------------
|
|
||||||
K.CreateProcess.Flags .BS 1
|
|
||||||
K.CreateProcess.hCmdLine .BS 1
|
|
||||||
K.CreateProcess.CmdLine .BS 2
|
|
||||||
K.CreateProcess.CPSID .BS 1
|
|
||||||
*--------------------------------------
|
|
||||||
* K.CreateProcess.Child
|
* K.CreateProcess.Child
|
||||||
* in :
|
* in :
|
||||||
* out :
|
* out :
|
||||||
|
@ -297,7 +259,7 @@ K.CreateProcess.Init
|
||||||
pla Restore PTR...
|
pla Restore PTR...
|
||||||
ply
|
ply
|
||||||
|
|
||||||
jsr K.LoadBinYA A = BinPath hMem
|
jsr BIN.LoadEXEYA Y,A=filename full path
|
||||||
bcs .9
|
bcs .9
|
||||||
|
|
||||||
>STYA ZPQuickPtr4 save PTR to Code Segment
|
>STYA ZPQuickPtr4 save PTR to Code Segment
|
||||||
|
@ -374,6 +336,44 @@ K.FreeProcessA jsr K.GetPSByIDA
|
||||||
clc
|
clc
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
|
* K.SelectProcessA
|
||||||
|
* In : A=PSID
|
||||||
|
*--------------------------------------
|
||||||
|
K.SelectProcessA
|
||||||
|
tay
|
||||||
|
bne K.SelectProcessN
|
||||||
|
K.SelectProcess0
|
||||||
|
>LDYAI TskMgr.Table Make PS #0 as current process
|
||||||
|
>STYA pPs
|
||||||
|
bra K.SelectProcessDev
|
||||||
|
K.SelectProcessN
|
||||||
|
jsr K.GetPSByIDA
|
||||||
|
bcs *
|
||||||
|
>STYA pPs
|
||||||
|
|
||||||
|
K.SelectProcess ldy #S.PS.hCS
|
||||||
|
lda (pPs),y
|
||||||
|
jsr K.GetMemPtrA
|
||||||
|
>STYA pCode
|
||||||
|
|
||||||
|
ldy #S.PS.hDS
|
||||||
|
lda (pPs),y
|
||||||
|
beq K.SelectProcessDev
|
||||||
|
|
||||||
|
jsr K.GetMemPtrA
|
||||||
|
>STYA pData
|
||||||
|
|
||||||
|
K.SelectProcessDev
|
||||||
|
ldy #S.PS.hOUTDEV
|
||||||
|
lda (pPs),y
|
||||||
|
beq .8
|
||||||
|
|
||||||
|
jsr K.GetDevByIDA
|
||||||
|
>STYA pDev
|
||||||
|
|
||||||
|
.8 clc
|
||||||
|
rts
|
||||||
|
*--------------------------------------
|
||||||
* S.DupEnvA
|
* S.DupEnvA
|
||||||
* In:
|
* In:
|
||||||
* A = ENV hMem To Duplicate
|
* A = ENV hMem To Duplicate
|
||||||
|
|
|
@ -1,378 +0,0 @@
|
||||||
PR#3
|
|
||||||
PREFIX /A2OSX.SRC
|
|
||||||
NEW
|
|
||||||
INC 1
|
|
||||||
AUTO 6
|
|
||||||
.LIST OFF
|
|
||||||
*--------------------------------------
|
|
||||||
* K.InsBin
|
|
||||||
*--------------------------------------
|
|
||||||
K.InsBin >LDYA K.LoadBin.NewBase
|
|
||||||
>STYA ZPQuickPtr1
|
|
||||||
|
|
||||||
ldy #H.BIN.CODE.LEN make AX = Code Len
|
|
||||||
lda (ZPQuickPtr1),y
|
|
||||||
sta Rel.CodeLen
|
|
||||||
iny
|
|
||||||
lda (ZPQuickPtr1),y
|
|
||||||
sta Rel.CodeLen+1
|
|
||||||
|
|
||||||
lda K.LoadBin.OldBase
|
|
||||||
sta Rel.Start Make BX=Range Start=AUXTYPE
|
|
||||||
clc
|
|
||||||
adc K.LoadBin.SegLen
|
|
||||||
sta Rel.End Make CX=Range End=AUXTYPE+FILELEN
|
|
||||||
|
|
||||||
lda K.LoadBin.OldBase+1
|
|
||||||
sta Rel.Start+1
|
|
||||||
adc K.LoadBin.SegLen+1
|
|
||||||
sta Rel.End+1
|
|
||||||
|
|
||||||
lda ZPQuickPtr1 Compute relocation offset in DX
|
|
||||||
sec
|
|
||||||
sbc K.LoadBin.OldBase
|
|
||||||
sta Rel.Offset DX=Offset=ZPQuickPtr1-AUXTYPE
|
|
||||||
lda ZPQuickPtr1+1
|
|
||||||
sbc K.LoadBin.OldBase+1
|
|
||||||
sta Rel.Offset+1
|
|
||||||
|
|
||||||
jmp S.BinRelocate
|
|
||||||
*--------------------------------------
|
|
||||||
* K.InsDrv
|
|
||||||
* pDrv = .DRV File Loaded Address
|
|
||||||
*--------------------------------------
|
|
||||||
K.InsDrv ldy #H.BIN.DRV.CODE.LEN
|
|
||||||
lda (pDrv),y
|
|
||||||
sta Rel.CodeLen
|
|
||||||
iny
|
|
||||||
lda (pDrv),y
|
|
||||||
sta Rel.CodeLen+1
|
|
||||||
|
|
||||||
ldy #H.BIN.DRV.CODE.O
|
|
||||||
lda (pDrv),y
|
|
||||||
clc
|
|
||||||
adc K.LoadBin.OldBase
|
|
||||||
sta Rel.Start
|
|
||||||
iny
|
|
||||||
lda (pDrv),y
|
|
||||||
adc K.LoadBin.OldBase+1
|
|
||||||
sta Rel.Start+1 set BX=End Of Code
|
|
||||||
|
|
||||||
lda K.LoadBin.OldBase
|
|
||||||
clc
|
|
||||||
adc K.LoadBin.SegLen
|
|
||||||
sta Rel.End
|
|
||||||
lda K.LoadBin.OldBase+1
|
|
||||||
adc K.LoadBin.SegLen+1
|
|
||||||
sta Rel.End+1 set CX=End Of Range
|
|
||||||
|
|
||||||
ldy #H.BIN.DRV.CODE.O
|
|
||||||
lda K.LoadBin.SegLen
|
|
||||||
sec
|
|
||||||
sbc (pDrv),y
|
|
||||||
sta K.InsDrv.DRVLen
|
|
||||||
iny
|
|
||||||
lda K.LoadBin.SegLen+1
|
|
||||||
sbc (pDrv),y
|
|
||||||
sta K.InsDrv.DRVLen+1 Compute DRV Len
|
|
||||||
|
|
||||||
lda DevMgr.Free
|
|
||||||
clc
|
|
||||||
adc K.InsDrv.DRVLen
|
|
||||||
sta K.InsDrv.DRVEnd
|
|
||||||
lda DevMgr.Free+1
|
|
||||||
adc K.InsDrv.DRVLen+1
|
|
||||||
sta K.InsDrv.DRVEnd+1
|
|
||||||
|
|
||||||
bcs .98 we crossed $FFFF, out of mem
|
|
||||||
|
|
||||||
lda K.InsDrv.DRVEnd
|
|
||||||
sec
|
|
||||||
sbc #DevMgr.HiMem
|
|
||||||
lda K.InsDrv.DRVEnd+1
|
|
||||||
sbc /DevMgr.HiMem
|
|
||||||
bcs .98 No More Room to load Driver....
|
|
||||||
|
|
||||||
lda DevMgr.LastDevID
|
|
||||||
inc
|
|
||||||
cmp #K.DEV.MAX
|
|
||||||
beq .99 No Device Handle Left
|
|
||||||
|
|
||||||
sta DevMgr.LastDevID
|
|
||||||
|
|
||||||
ldy #H.BIN.DEV.HEADER.O
|
|
||||||
lda (pDrv),y
|
|
||||||
clc
|
|
||||||
adc pDrv
|
|
||||||
sta ZPQuickPtr1
|
|
||||||
iny
|
|
||||||
lda (pDrv),y
|
|
||||||
adc pDrv+1
|
|
||||||
sta ZPQuickPtr1+1
|
|
||||||
|
|
||||||
ldy #S.DEV.JMP
|
|
||||||
|
|
||||||
lda DevMgr.Free
|
|
||||||
sec
|
|
||||||
sbc (ZPQuickPtr1),y
|
|
||||||
sta Rel.Offset
|
|
||||||
lda DevMgr.Free+1
|
|
||||||
iny
|
|
||||||
sbc (ZPQuickPtr1),y
|
|
||||||
sta Rel.Offset+1 set DX=Offset
|
|
||||||
|
|
||||||
ldy #H.BIN.DRV.CODE.O
|
|
||||||
lda (pDrv),y
|
|
||||||
clc
|
|
||||||
adc pDrv
|
|
||||||
sta ZPQuickPtr1
|
|
||||||
|
|
||||||
iny
|
|
||||||
lda (pDrv),y
|
|
||||||
adc pDrv+1
|
|
||||||
sta ZPQuickPtr1+1
|
|
||||||
|
|
||||||
jsr S.DrvRelocate
|
|
||||||
|
|
||||||
jsr K.InsDrv.Move
|
|
||||||
|
|
||||||
>LDYA K.InsDrv.DrvEnd
|
|
||||||
>STYA DevMgr.Free
|
|
||||||
clc
|
|
||||||
rts
|
|
||||||
|
|
||||||
.98 lda #DEVMGR.ERROOM
|
|
||||||
sec
|
|
||||||
rts
|
|
||||||
|
|
||||||
.99 lda #DEVMGR.ERROOH
|
|
||||||
sec
|
|
||||||
rts
|
|
||||||
*--------------------------------------
|
|
||||||
K.InsDrv.Move ldy #H.BIN.DEV.HEADER.O
|
|
||||||
lda (pDrv),y
|
|
||||||
clc
|
|
||||||
adc pDrv
|
|
||||||
sta ZPQuickPtr1
|
|
||||||
iny
|
|
||||||
lda (pDrv),y
|
|
||||||
adc pDrv+1
|
|
||||||
sta ZPQuickPtr1+1
|
|
||||||
|
|
||||||
ldy #S.DEV.JMP Relocate Main JMP
|
|
||||||
lda (ZPQuickPtr1),y
|
|
||||||
clc
|
|
||||||
adc Rel.Offset
|
|
||||||
sta (ZPQuickPtr1),y
|
|
||||||
iny
|
|
||||||
lda (ZPQuickPtr1),y
|
|
||||||
adc Rel.Offset+1
|
|
||||||
sta (ZPQuickPtr1),y
|
|
||||||
|
|
||||||
lda DevMgr.LastDevID
|
|
||||||
jsr K.GetDevByIDA
|
|
||||||
>STYA pDev
|
|
||||||
|
|
||||||
ldy #S.DEV.SIZE Make sure DevMgr.Table Ends with 0
|
|
||||||
lda #0
|
|
||||||
sta (pDev),y
|
|
||||||
dey
|
|
||||||
|
|
||||||
.1 lda (ZPQuickPtr1),y Copy DRV.Header
|
|
||||||
sta (pDev),y
|
|
||||||
dey
|
|
||||||
bpl .1
|
|
||||||
|
|
||||||
lda DevMgr.LastDevID Save Dev.ID in the driver for SELECT
|
|
||||||
ldy #S.DEV.ID
|
|
||||||
sta (pDev),y
|
|
||||||
|
|
||||||
ldy #H.BIN.DRV.CODE.O
|
|
||||||
lda (pDrv),y
|
|
||||||
clc
|
|
||||||
adc pDrv
|
|
||||||
sta ZPQuickPtr1
|
|
||||||
iny
|
|
||||||
lda (pDrv),y
|
|
||||||
adc pDrv+1
|
|
||||||
sta ZPQuickPtr1+1 Make ZPQuickPtr1=DRV.CODE
|
|
||||||
|
|
||||||
lda DevMgr.Free
|
|
||||||
sta ZPQuickPtr2
|
|
||||||
lda DevMgr.Free+1
|
|
||||||
sta ZPQuickPtr2+1 Make ZPQuickPtr2=Dest Ram Location
|
|
||||||
|
|
||||||
ldy K.InsDrv.DrvLen
|
|
||||||
ldx K.InsDrv.DrvLen+1
|
|
||||||
|
|
||||||
.2 lda (ZPQuickPtr1)
|
|
||||||
sta (ZPQuickPtr2)
|
|
||||||
|
|
||||||
inc ZPQuickPtr1
|
|
||||||
bne .3
|
|
||||||
inc ZPQuickPtr1+1
|
|
||||||
|
|
||||||
.3 inc ZPQuickPtr2
|
|
||||||
bne .4
|
|
||||||
inc ZPQuickPtr2+1
|
|
||||||
|
|
||||||
.4 tya
|
|
||||||
bne .5
|
|
||||||
txa
|
|
||||||
beq .8
|
|
||||||
dex
|
|
||||||
|
|
||||||
.5 dey
|
|
||||||
bra .2
|
|
||||||
.8 rts
|
|
||||||
*--------------------------------------
|
|
||||||
K.InsDrv.DrvLen .BS 2
|
|
||||||
K.InsDrv.DrvEnd .BS 2
|
|
||||||
*--------------------------------------
|
|
||||||
* S.BinRelocate :
|
|
||||||
* ZPQuickPtr1 = Ptr to Code
|
|
||||||
* R.AX = Code Length
|
|
||||||
* R.BX = Range Start address to relocate
|
|
||||||
* R.CX = Range End address to relocate
|
|
||||||
* R.DX = offset to apply to all abs addresses between R.BX and R.CX
|
|
||||||
*--------------------------------------
|
|
||||||
S.BinRelocate ldy #H.BIN.JMP relocate Main JMP
|
|
||||||
lda (ZPQuickPtr1),y
|
|
||||||
clc
|
|
||||||
adc Rel.Offset
|
|
||||||
sta (ZPQuickPtr1),y
|
|
||||||
|
|
||||||
iny
|
|
||||||
lda (ZPQuickPtr1),y
|
|
||||||
adc Rel.Offset+1
|
|
||||||
sta (ZPQuickPtr1),y
|
|
||||||
|
|
||||||
ldy #H.BIN.RELOC.TABLE skip Header, CS.SIZE & DS.SIZE... (16 bytes)
|
|
||||||
|
|
||||||
.HS 2C bit abs
|
|
||||||
|
|
||||||
S.DrvRelocate ldy #0
|
|
||||||
|
|
||||||
.1 lda (ZPQuickPtr1),y Start Relocate JMP table
|
|
||||||
tax
|
|
||||||
iny
|
|
||||||
ora (ZPQuickPtr1),y
|
|
||||||
beq .2 $0000 = end of table
|
|
||||||
|
|
||||||
dey
|
|
||||||
txa
|
|
||||||
clc
|
|
||||||
adc Rel.Offset
|
|
||||||
sta (ZPQuickPtr1),y
|
|
||||||
|
|
||||||
iny
|
|
||||||
lda (ZPQuickPtr1),y
|
|
||||||
adc Rel.Offset+1
|
|
||||||
sta (ZPQuickPtr1),y
|
|
||||||
|
|
||||||
iny
|
|
||||||
|
|
||||||
bra .1
|
|
||||||
|
|
||||||
.2 lda ZPQuickPtr1
|
|
||||||
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
|
|
||||||
sta ZPQuickPtr1
|
|
||||||
bcc .5
|
|
||||||
inc ZPQuickPtr1+1 ZPQuickPtr1=Current Code PTR
|
|
||||||
clc
|
|
||||||
|
|
||||||
.5 lda (ZPQuickPtr1) get OPCODE
|
|
||||||
tax
|
|
||||||
lda OPCODES,x get OPCODE definition
|
|
||||||
bpl .7 abs addressing?
|
|
||||||
|
|
||||||
and #3 save Opcode length...
|
|
||||||
pha
|
|
||||||
|
|
||||||
ldy #1
|
|
||||||
lda (ZPQuickPtr1),y Get LO
|
|
||||||
sec
|
|
||||||
sbc Rel.Start
|
|
||||||
iny
|
|
||||||
lda (ZPQuickPtr1),y Get HI
|
|
||||||
sbc Rel.Start+1
|
|
||||||
bcc .6 addr < AX, out of range
|
|
||||||
|
|
||||||
dey
|
|
||||||
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
|
|
||||||
|
|
||||||
dey
|
|
||||||
lda (ZPQuickPtr1),y Get LO
|
|
||||||
clc
|
|
||||||
adc Rel.Offset add DX to abs address
|
|
||||||
sta (ZPQuickPtr1),y store relocated addr LO
|
|
||||||
iny
|
|
||||||
lda (ZPQuickPtr1),y Get HI
|
|
||||||
adc Rel.Offset+1
|
|
||||||
sta (ZPQuickPtr1),y store relocated addr HI
|
|
||||||
|
|
||||||
.6 pla
|
|
||||||
|
|
||||||
.7 clc A = OPCODE length
|
|
||||||
adc ZPQuickPtr1
|
|
||||||
sta ZPQuickPtr1
|
|
||||||
bcc .8
|
|
||||||
inc ZPQuickPtr1+1
|
|
||||||
|
|
||||||
.8 lda ZPQuickPtr1 is Current PTR < Code Limit ?
|
|
||||||
sec
|
|
||||||
sbc ZPQuickPtr2
|
|
||||||
lda ZPQuickPtr1+1
|
|
||||||
sbc ZPQuickPtr2+1
|
|
||||||
bcc .5 yes, continue relocating
|
|
||||||
|
|
||||||
clc
|
|
||||||
rts
|
|
||||||
*--------------------------------------
|
|
||||||
* 65C02 OPCODES
|
|
||||||
* Bit 7 : 1 absolute addressing
|
|
||||||
* Bit 1-0 : opcode + @ length
|
|
||||||
*--------------------------------------
|
|
||||||
* x0.x1.x2.x3.x4.x5.x6.x7.x8.x9.xA.xB.xC.xD.xE.xF
|
|
||||||
OPCODES .HS 01.02.02.01.02.02.02.02.01.02.01.01.83.83.83.03
|
|
||||||
.HS 02.02.02.01.02.02.02.02.01.83.01.01.83.83.83.03
|
|
||||||
.HS 83.02.02.01.02.02.02.02.01.02.01.01.83.83.83.03
|
|
||||||
.HS 02.02.02.01.02.02.02.02.01.83.01.01.83.83.83.03
|
|
||||||
.HS 01.02.02.01.02.02.02.02.01.02.01.01.83.83.83.03
|
|
||||||
.HS 02.02.02.01.02.02.02.02.01.83.01.01.01.83.83.03
|
|
||||||
.HS 01.02.02.01.02.02.02.02.01.02.01.01.83.83.83.03
|
|
||||||
.HS 02.02.02.01.02.02.02.02.01.83.01.01.83.83.83.03
|
|
||||||
.HS 02.02.02.01.02.02.02.02.01.02.01.01.83.83.83.03
|
|
||||||
.HS 02.02.02.01.02.02.02.02.01.83.01.01.83.83.83.03
|
|
||||||
.HS 02.02.02.01.02.02.02.02.01.02.01.01.83.83.83.03
|
|
||||||
.HS 02.02.02.01.02.02.02.02.01.83.01.01.83.83.83.03
|
|
||||||
.HS 02.02.02.01.02.02.02.02.01.02.01.01.83.83.83.03
|
|
||||||
.HS 02.02.02.01.02.02.02.02.01.83.01.01.01.83.83.03
|
|
||||||
.HS 02.02.02.01.02.02.02.02.01.02.01.01.83.83.83.03
|
|
||||||
.HS 02.02.02.01.02.02.02.02.01.83.01.01.01.83.83.03
|
|
||||||
*--------------------------------------
|
|
||||||
Rel.CodeLen .BS 2
|
|
||||||
Rel.Start .BS 2
|
|
||||||
Rel.End .BS 2
|
|
||||||
Rel.Offset .BS 2
|
|
||||||
*--------------------------------------
|
|
||||||
MAN
|
|
||||||
SAVE SYS/KERNEL.S.REL
|
|
||||||
LOAD SYS/KERNEL.S
|
|
||||||
ASM
|
|
|
@ -57,40 +57,41 @@ A2osX.BE00 .EQ *
|
||||||
.EP
|
.EP
|
||||||
A2osX.BE00.END .EQ *
|
A2osX.BE00.END .EQ *
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* LC AUX $D000 BANK1
|
* LC AUX $D000 BANK1 API Calls $00-$3E
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
A2osX.D001 .EQ *
|
A2osX.D001 .EQ *
|
||||||
.PH $D000
|
.PH $D000
|
||||||
.DA #RRAMWRAMBNK1
|
.DA #RRAMWRAMBNK1
|
||||||
.INB SYS/KERNEL.S.RUN
|
.INB SYS/KERNEL.S.CIO
|
||||||
.INB SYS/KERNEL.S.STR
|
.INB SYS/KERNEL.S.STR
|
||||||
|
.INB SYS/KERNEL.S.PS
|
||||||
.INB SYS/KERNEL.S.ARG
|
.INB SYS/KERNEL.S.ARG
|
||||||
.INB SYS/KERNEL.S.ENV
|
.INB SYS/KERNEL.S.ENV
|
||||||
.INB SYS/KERNEL.S.CIO
|
*--------------------------------------
|
||||||
.INB SYS/KERNEL.S.FIO
|
.INB SYS/KERNEL.S.RUN
|
||||||
.INB SYS/KERNEL.S.EVT
|
.INB SYS/KERNEL.S.EVT
|
||||||
.INB SYS/KERNEL.S.TSK
|
.INB SYS/KERNEL.S.TSK
|
||||||
.INB SYS/KERNEL.S.PS
|
|
||||||
.EP
|
.EP
|
||||||
A2osX.D001.END .EQ *
|
A2osX.D001.END .EQ *
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* LC AUX $D000 BANK2
|
* LC AUX $D000 BANK2 API Calls $40-$7E
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
A2osX.D002 .EQ *
|
A2osX.D002 .EQ *
|
||||||
.PH $D000
|
.PH $D000
|
||||||
.DA #RRAMWRAMBNK2
|
.DA #RRAMWRAMBNK2
|
||||||
.INB SYS/KERNEL.S.BIN
|
.INB SYS/KERNEL.S.FIO
|
||||||
.INB SYS/KERNEL.S.DRV
|
.INB SYS/KERNEL.S.DRV
|
||||||
.INB SYS/KERNEL.S.LIB
|
.INB SYS/KERNEL.S.LIB
|
||||||
.INB SYS/KERNEL.S.REL
|
|
||||||
.INB SYS/KERNEL.S.TIME
|
.INB SYS/KERNEL.S.TIME
|
||||||
.INB SYS/KERNEL.S.FILE
|
.INB SYS/KERNEL.S.FILE
|
||||||
.INB SYS/KERNEL.S.DIR
|
.INB SYS/KERNEL.S.DIR
|
||||||
|
*--------------------------------------
|
||||||
.INB SYS/KERNEL.S.PFT
|
.INB SYS/KERNEL.S.PFT
|
||||||
|
.INB SYS/KERNEL.S.BIN
|
||||||
.EP
|
.EP
|
||||||
A2osX.D002.END .EQ *
|
A2osX.D002.END .EQ *
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* LC AUX $E000
|
* LC AUX $E000 API Calls $80-$FE
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
A2osX.E000 .EQ *
|
A2osX.E000 .EQ *
|
||||||
.PH $E000
|
.PH $E000
|
||||||
|
|
Loading…
Reference in New Issue
Block a user