From 127f89cedcf02f72d789f7a55118cb5097d30790 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20GIBERT?= Date: Tue, 27 Sep 2016 17:51:59 +0200 Subject: [PATCH] Kernel version 0.8 : API finalized and dispatched in LCBNK1/2 --- A2OSX.BOOT.po | Bin 143360 -> 143360 bytes A2OSX.SRC.po | Bin 819200 -> 819200 bytes INC/A2osX.I.txt | 108 +++++----- SYS/KERNEL.S.BIN.txt | 405 ++++++++++++++++++++++++++++++++++-- SYS/KERNEL.S.DRV.txt | 4 +- SYS/KERNEL.S.FILE.txt | 19 +- SYS/KERNEL.S.JMP.txt | 463 ++++++++++++++++++++---------------------- SYS/KERNEL.S.LIB.txt | 2 +- SYS/KERNEL.S.PS.txt | 178 ++++++++-------- SYS/KERNEL.S.REL.txt | 378 ---------------------------------- SYS/KERNEL.S.txt | 19 +- 11 files changed, 764 insertions(+), 812 deletions(-) delete mode 100644 SYS/KERNEL.S.REL.txt diff --git a/A2OSX.BOOT.po b/A2OSX.BOOT.po index 51ec34ab6b089d183aa87ff186397afcf4061d03..a52b716c5b68bab81266acfaea1c6456a5a47db7 100644 GIT binary patch delta 6202 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 z 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 delta 23342 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

h#j8qo5SFBXh*FQF;R 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 TfPsB(=v5hJ{cP-B?b!bVA=7=9 diff --git a/INC/A2osX.I.txt b/INC/A2osX.I.txt index 08c385c0..371c7b23 100644 --- a/INC/A2osX.I.txt +++ b/INC/A2osX.I.txt @@ -136,15 +136,14 @@ H.BIN.RELOC.TABLE .EQ 16 *-------------------------------------- * A2osX.SYSCALL Functions Indexes *-------------------------------------- -SYS.GetMem .EQ $00 -SYS.FreeMemA .EQ $02 -SYS.GetMemPtrA .EQ $04 -SYS.GetMemByIDA .EQ $06 - -SYS.GetMemByNameYA .EQ $08 -SYS.LoadStockObjectYA .EQ $0A -SYS.GetStockObjectA .EQ $0C -SYS.FreeStockObject .EQ $0E +SYS.COutA .EQ $00 SYS.FPUTCA +* .EQ $02 SYS.FGETC +SYS.PStrOutYA .EQ $04 SYS.FPUTSYA +* .EQ $06 SYS.FGETS +SYS.HexOutA .EQ $08 +SYS.HexOutYA .EQ $0A +SYS.DecOutA .EQ $0C +SYS.DecOutYA .EQ $0E *-------------------------------------- SYS.NewPStrYA .EQ $10 SYS.PStrCpy .EQ $12 @@ -153,31 +152,48 @@ SYS.PStrMatch .EQ $16 SYS.PStrUprYA .EQ $18 SYS.PStrLwrYA .EQ $1A - +* .EQ $1C SYS.PStr2StrArrayYA .EQ $1E *-------------------------------------- -SYS.LoadDrvYA .EQ $20 -SYS.LoadLibYA .EQ $22 -SYS.UnloadLibA .EQ $24 +SYS.ExecProcessNewEnvYA .EQ $20 +SYS.ExecProcessYA .EQ $22 +SYS.CreateProcessNewEnvYA .EQ $24 +SYS.CreateProcessYA .EQ $26 -SYS.TimeYA .EQ $28 -SYS.CTime2Time .EQ $2A -SYS.PTime2Time .EQ $2C -SYS.StrFTime .EQ $2E +SYS.GetPSByIDA .EQ $28 +* .EQ $2A +SYS.Sleep .EQ $2C +* .EQ $2E *-------------------------------------- - -SYS.ExpandPStrYA .EQ $32 -SYS.GetArgC .EQ $34 -SYS.GetArgA .EQ $36 +SYS.GetArgC .EQ $30 +SYS.GetArgA .EQ $32 +SYS.ExpandPStrYA .EQ $34 +* .EQ $36 SYS.PutEnvYA .EQ $38 SYS.SetEnv .EQ $3A SYS.GetEnvYA .EQ $3C 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.R .EQ $01 Open For Read @@ -201,51 +217,31 @@ SYS.FEOF .EQ $6E SYS.REMOVE .EQ $70 SYS.RENAME .EQ $72 SYS.STAT .EQ $74 - +* .EQ $76 SYS.OPENDIRYA .EQ $78 SYS.READDIRA .EQ $7A SYS.CLOSEDIRA .EQ $7C 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.GetDevInfoA .EQ $86 - -SYS.GetKeyboardEvent .EQ $88 -SYS.MKNOD .EQ $8C -SYS.MKFIFO .EQ $8E +SYS.GetMemByNameYA .EQ $88 +SYS.LoadStockObjectYA .EQ $8A +SYS.GetStockObjectA .EQ $8C +SYS.FreeStockObject .EQ $8E *-------------------------------------- -SYS.ExecProcessNewEnvYA .EQ $90 -SYS.ExecProcessYA .EQ $92 -SYS.CreateProcessNewEnvYA .EQ $94 -SYS.CreateProcessYA .EQ $96 +SYS.GetDevByIDA .EQ $90 +SYS.GetDevByNameYA .EQ $94 +SYS.GetDevInfoA .EQ $96 +SYS.GetKeyboardEvent .EQ $98 -SYS.GetPSByIDA .EQ $98 - -SYS.Sleep .EQ $9C +SYS.MKNOD .EQ $FF +SYS.MKFIFO .EQ $FF *-------------------------------------- - -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 * Lib ERROR CODES : $80->$BF diff --git a/SYS/KERNEL.S.BIN.txt b/SYS/KERNEL.S.BIN.txt index 7e4d3d08..8235ea05 100644 --- a/SYS/KERNEL.S.BIN.txt +++ b/SYS/KERNEL.S.BIN.txt @@ -5,19 +5,19 @@ INC 1 AUTO 6 .LIST OFF *-------------------------------------- -* K.LoadBinYA +* BIN.LoadExeYA * in : * A = hMem of FilePath (PSTRING) * out : * Y,A = MEMPTR * X = hMem of Code Segment *-------------------------------------- -K.LoadBinYA >STYA K.LoadBin.Filename +BIN.LoadEXEYA >STYA BIN.LoadExe.Filename jsr K.PStrUprYA - >LDYA K.LoadBin.Filename + >LDYA BIN.LoadExe.Filename jsr K.GetMemByNameYA - bcs .3 not already loaded + bcs .1 not already loaded >STYA ZPQuickPtr1 Save base address ldy #S.MEM.REFCNT @@ -34,37 +34,37 @@ K.LoadBinYA >STYA K.LoadBin.Filename clc rts -.3 >PUSHWI KrnBuf256 - >PUSHW K.LoadBin.Filename +.1 >PUSHWI KrnBuf256 + >PUSHW BIN.LoadExe.Filename jsr K.STAT Look for AUXTYPE bcs .99 >LDYA KrnBuf256+S.STAT.AUXTYPE - >STYA K.LoadBin.OldBase + >STYA BIN.LoadExe.OldBase >PUSHYA >PUSHBI 6 S.FILEINFO.TYPE.BIN >PUSHBI SYS.FOPEN.R - >PUSHW K.LoadBin.Filename + >PUSHW BIN.LoadExe.Filename jsr K.LoadFile bcs .99 Error Loading file - >STYA K.LoadBin.SegLen - stx K.LoadBin.hMem save hMem + >STYA BIN.LoadExe.SegLen + stx BIN.LoadExe.hMem save hMem txa jsr K.GetMemPtrA - >STYA K.LoadBin.NewBase + >STYA BIN.LoadExe.NewBase - jsr K.InsBin + jsr BIN.InstallEXE 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 bcs .98 phx save copy - lda K.LoadBin.hMem + lda BIN.LoadExe.hMem jsr K.GetMemByIDA >STYA ZPQuickPtr1 @@ -76,25 +76,388 @@ K.LoadBinYA >STYA K.LoadBin.Filename ldy #S.MEM.BIN sta (ZPQuickPtr1),y - lda K.LoadBin.hMem + lda BIN.LoadExe.hMem tax return hMEM to Caller... jsr K.GetMemPtrA clc ...and Y,A=PTR to CS rts .98 pha - lda K.LoadBin.hMem + lda BIN.LoadExe.hMem jsr K.FreeMemA Discard Loaded Code pla sec .99 rts *-------------------------------------- -K.LoadBin.Filename .BS 2 -K.LoadBin.hMem .BS 1 -K.LoadBin.OldBase .BS 2 -K.LoadBin.NewBase .BS 2 -K.LoadBin.SegLen .BS 2 +BIN.LoadExe.Filename .BS 2 +BIN.LoadExe.hMem .BS 1 +BIN.LoadExe.OldBase .BS 2 +BIN.LoadExe.NewBase .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 SAVE SYS/KERNEL.S.BIN diff --git a/SYS/KERNEL.S.DRV.txt b/SYS/KERNEL.S.DRV.txt index ca20d6d0..9360c673 100644 --- a/SYS/KERNEL.S.DRV.txt +++ b/SYS/KERNEL.S.DRV.txt @@ -25,7 +25,7 @@ K.LoadDrvYA >STYA K.LoadDrv.CmdArray bcs .99 stx K.LoadDrv.hFullName - jsr K.LoadBinYA Y,A =filename full path + jsr BIN.LoadExeYA Y,A =filename full path bcs .98 >STYA pDrv @@ -46,7 +46,7 @@ K.LoadDrvYA >STYA K.LoadDrv.CmdArray bcs .97 - jsr K.InsDrv + jsr BIN.InstallDRV bcs .97 diff --git a/SYS/KERNEL.S.FILE.txt b/SYS/KERNEL.S.FILE.txt index ac0d9c7a..ecc184fa 100644 --- a/SYS/KERNEL.S.FILE.txt +++ b/SYS/KERNEL.S.FILE.txt @@ -143,14 +143,8 @@ K.FCLOSEA.1 ldy #S.FILE.PRODOS.REF * Y,A = Bytes Read *-------------------------------------- K.FREAD jsr K.PFTCheckFileSTK - >PULLA - jsr FILE.SetupPrt1A - >PULLW MLICALL.PARAMS+4 - >PULLW MLICALL.PARAMS+2 - >MLICALL MLIREAD - bcs .9 - >LDYA MLICALL.PARAMS+6 -.9 rts + ldx #MLIREAD + bra K.FREAD.1 *-------------------------------------- * K.FWRITE * In : @@ -162,10 +156,15 @@ K.FREAD jsr K.PFTCheckFileSTK *-------------------------------------- K.FWRITE jsr K.PFTCheckFileSTK >PULLA - jsr FILE.SetupPrt1A + ldx #MLIWRITE +K.FREAD.1 jsr FILE.SetupPrt1A >PULLW MLICALL.PARAMS+4 >PULLW MLICALL.PARAMS+2 - >MLICALL MLIWRITE + +* >MLICALL MLIWRITE + + lda #4 Param Count = 4 for MLIREAD & MLIWRITE + jsr A2osX.MLICALL bcs .9 >LDYA MLICALL.PARAMS+6 .9 rts diff --git a/SYS/KERNEL.S.JMP.txt b/SYS/KERNEL.S.JMP.txt index d0147c40..4d71a0c8 100644 --- a/SYS/KERNEL.S.JMP.txt +++ b/SYS/KERNEL.S.JMP.txt @@ -7,14 +7,18 @@ AUTO 6 *-------------------------------------- * $D000-D0FF KERNEL.SYSCALL Jmp Table *-------------------------------------- -KERNEL.SYSCALL .DA K.GetMem $00 - .DA K.FreeMemA - .DA K.GetMemPtrA - .DA K.GetMemByIDA - .DA K.GetMemByNameYA - .DA K.LoadStockObjectYA - .DA K.GetStockObjectA - .DA K.FreeStockObject +KERNEL.SYSCALL +*-------------------------------------- +* Bank 1 +*-------------------------------------- + .DA K.COutA $00 + .DA 0 + .DA K.PStrOutYA + .DA 0 + .DA K.HexOutA + .DA K.HexOutYA + .DA K.DecOutA + .DA K.DecOutYA *-------------------------------------- .DA K.NewPStrYA $10 .DA K.PStrCpy @@ -25,7 +29,36 @@ KERNEL.SYSCALL .DA K.GetMem $00 .DA 0 .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.UnloadLibA .DA 0 @@ -33,33 +66,6 @@ KERNEL.SYSCALL .DA K.GetMem $00 .DA K.CTime2Time .DA K.PTime2Time .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.FCLOSEA @@ -79,78 +85,21 @@ KERNEL.SYSCALL .DA K.GetMem $00 .DA K.CLOSEDIRA .DA K.MKDIRYA *-------------------------------------- - .DA K.GetDevByIDA $80 - .DA 0 +* $E000 +*-------------------------------------- + .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.GetDevInfoA .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 : * #RRAMWRAMBNK1 or #RRAMWRAMBNK2 @@ -158,157 +107,179 @@ KERNEL.SYSCALL .DA K.GetMem $00 *-------------------------------------- KERNEL.SYSCALL.FLAGS *-------------------------------------- - .DA 0 $00 : MEM $E000 - .DA 0 - .DA 0 - .DA 0 - .DA 0 - .DA 0 - .DA 0 - .DA 0 -*-------------------------------------- - .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 #$80 $00 : CIO $D001 + .DA #RRAMWRAMBNK1 + .DA #$80 + .DA #RRAMWRAMBNK1 + .DA #$80 + .DA #RRAMWRAMBNK1 + .DA #$80 + .DA #RRAMWRAMBNK1 - .DA #RRAMWRAMBNK2 $28 : TIME $D002 - .DA #0 + .DA #$80 + .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 #0 + .DA #$80 .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 #0 *-------------------------------------- - .DA 0 $30 - .DA 0 - .DA 0 - .DA 0 - .DA 0 - .DA 0 - .DA 0 - .DA 0 + .DA #$80 $50 : + .DA #RRAMWRAMBNK2 + .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 #$80 + .DA #RRAMWRAMBNK2 *-------------------------------------- - .DA 0 $40 - .DA 0 - .DA 0 - .DA 0 - .DA 0 - .DA 0 - .DA 0 - .DA 0 + .DA #$80 $60 : + .DA #RRAMWRAMBNK2 + .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 #$80 + .DA #RRAMWRAMBNK2 *-------------------------------------- - .DA 0 $50 - .DA 0 - .DA 0 - .DA 0 - .DA 0 - .DA 0 - .DA 0 - .DA 0 + .DA #$80 $70 : + .DA #RRAMWRAMBNK2 + .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 #$80 + .DA #RRAMWRAMBNK2 *-------------------------------------- - .DA 0 $60 - .DA 0 - .DA 0 - .DA 0 - .DA 0 - .DA 0 - .DA 0 - .DA 0 + .DA #$80 $80 : + .DA #RRAMWRAMBNK2 + .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 #$80 + .DA #RRAMWRAMBNK2 *-------------------------------------- - .DA 0 $70 - .DA 0 - .DA 0 - .DA 0 - .DA 0 - .DA 0 - .DA 0 - .DA 0 + .DA #$80 $90 : + .DA #RRAMWRAMBNK2 + .DA #$80 + .DA #RRAMWRAMBNK2 + .DA #$80 + .DA #RRAMWRAMBNK2 + .DA #$80 + .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 SAVE SYS/KERNEL.S.JMP LOAD SYS/KERNEL.S diff --git a/SYS/KERNEL.S.LIB.txt b/SYS/KERNEL.S.LIB.txt index d338c833..1f66adeb 100644 --- a/SYS/KERNEL.S.LIB.txt +++ b/SYS/KERNEL.S.LIB.txt @@ -25,7 +25,7 @@ K.LoadLibYA >STYA K.LoadLib.Name save libname for K.FileSearch stx K.LoadLib.hFullName - jsr K.LoadBinYA Y,A = filename full path + jsr BIN.LoadExeYA Y,A=filename full path bcs .98 stx K.LoadLib.hMem diff --git a/SYS/KERNEL.S.PS.txt b/SYS/KERNEL.S.PS.txt index 674c4f33..6bd6cda6 100644 --- a/SYS/KERNEL.S.PS.txt +++ b/SYS/KERNEL.S.PS.txt @@ -5,43 +5,62 @@ INC 1 AUTO 6 .LIST OFF *-------------------------------------- -* K.SelectProcessA -* In : A=PSID +* 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.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.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 -K.SelectProcess ldy #S.PS.hCS - lda (pPs),y - jsr K.GetMemPtrA - >STYA pCode + jsr K.ExpandPStrYA + bcs .99 - 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 + stx K.CreateProcess.hCmdLine + >STYA K.CreateProcess.CmdLine - jsr K.GetDevByIDA - >STYA pDev + jsr K.CreateProcess.Child + bcs .98 -.8 clc + 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.GetPSByIDA * In : @@ -104,63 +123,6 @@ K.Sleep pla get PC LO clc No error, 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 * in : * out : @@ -297,7 +259,7 @@ K.CreateProcess.Init pla Restore PTR... ply - jsr K.LoadBinYA A = BinPath hMem + jsr BIN.LoadEXEYA Y,A=filename full path bcs .9 >STYA ZPQuickPtr4 save PTR to Code Segment @@ -374,6 +336,44 @@ K.FreeProcessA jsr K.GetPSByIDA clc 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 * In: * A = ENV hMem To Duplicate diff --git a/SYS/KERNEL.S.REL.txt b/SYS/KERNEL.S.REL.txt deleted file mode 100644 index e5aebbea..00000000 --- a/SYS/KERNEL.S.REL.txt +++ /dev/null @@ -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 diff --git a/SYS/KERNEL.S.txt b/SYS/KERNEL.S.txt index da058559..0c5e5052 100644 --- a/SYS/KERNEL.S.txt +++ b/SYS/KERNEL.S.txt @@ -57,40 +57,41 @@ A2osX.BE00 .EQ * .EP A2osX.BE00.END .EQ * *-------------------------------------- -* LC AUX $D000 BANK1 +* LC AUX $D000 BANK1 API Calls $00-$3E *-------------------------------------- A2osX.D001 .EQ * .PH $D000 .DA #RRAMWRAMBNK1 - .INB SYS/KERNEL.S.RUN + .INB SYS/KERNEL.S.CIO .INB SYS/KERNEL.S.STR + .INB SYS/KERNEL.S.PS .INB SYS/KERNEL.S.ARG .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.TSK - .INB SYS/KERNEL.S.PS .EP A2osX.D001.END .EQ * *-------------------------------------- -* LC AUX $D000 BANK2 +* LC AUX $D000 BANK2 API Calls $40-$7E *-------------------------------------- A2osX.D002 .EQ * .PH $D000 .DA #RRAMWRAMBNK2 - .INB SYS/KERNEL.S.BIN + .INB SYS/KERNEL.S.FIO .INB SYS/KERNEL.S.DRV .INB SYS/KERNEL.S.LIB - .INB SYS/KERNEL.S.REL .INB SYS/KERNEL.S.TIME .INB SYS/KERNEL.S.FILE .INB SYS/KERNEL.S.DIR +*-------------------------------------- .INB SYS/KERNEL.S.PFT + .INB SYS/KERNEL.S.BIN .EP A2osX.D002.END .EQ * *-------------------------------------- -* LC AUX $E000 +* LC AUX $E000 API Calls $80-$FE *-------------------------------------- A2osX.E000 .EQ * .PH $E000