A2osX/SYS/KERNEL.S.BIN.txt

453 lines
9.3 KiB
Plaintext
Raw Permalink Normal View History

NEW
2019-05-25 19:24:07 +00:00
AUTO 3,1
2015-03-14 21:48:35 +00:00
*--------------------------------------
2018-07-20 05:43:11 +00:00
* LoadLib
* in :
2019-07-22 06:31:01 +00:00
* Y,A = PTR To "LibName" C-String
* out :
* A = hMem To loaded LIB
*--------------------------------------
2020-09-25 12:05:23 +00:00
K.LoadLib jsr PS.Find.LIB
2021-01-12 21:14:13 +00:00
bcs .99
2019-07-24 15:17:08 +00:00
jsr BIN.Load K.Buf256 = "/PATH/BIN"
2021-01-12 21:14:13 +00:00
bcs .99
>STYA .1+1
2019-02-03 21:58:26 +00:00
txa Pass hLib to LibLoad
2021-01-12 21:14:13 +00:00
pha
ldx #LIBMGR.LOAD
2021-01-12 21:14:13 +00:00
2019-02-03 21:58:26 +00:00
.1 jsr $ffff SELF MODIFIED, Call LIB.LOAD function
2021-01-12 21:14:13 +00:00
plx
bcc .8
pha
txa
jsr K.FreeMem
pla
sec
rts
.8 txa
2019-02-03 21:58:26 +00:00
* clc
2021-01-12 21:14:13 +00:00
.99 rts
*--------------------------------------
2018-07-20 05:43:11 +00:00
* UnloadLib
* in :
* A = hMem To Lib
* out :
*--------------------------------------
2018-06-18 06:22:50 +00:00
K.UnloadLib pha
2018-12-20 16:23:43 +00:00
jsr K.GetMemPtr
>STYA .2+1
2019-10-25 15:09:13 +00:00
ldy #S.MEM.REFCNT
lda (ZPMemMgrSPtr),y
dec
2019-02-05 13:45:15 +00:00
bne .8
2019-10-25 15:09:13 +00:00
ldx #LIBMGR.UNLOAD
.2 jsr $ffff Self Modified, Call LIB.UNLOAD function
pla
2018-06-22 06:24:35 +00:00
jmp K.FreeMem
2019-10-25 15:09:13 +00:00
.8 sta (ZPMemMgrSPtr),y
pla
2019-02-05 13:45:15 +00:00
* clc
2019-10-03 06:25:27 +00:00
rts
2018-06-21 15:12:10 +00:00
*/--------------------------------------
* # LoadDrv
2018-07-20 05:43:11 +00:00
* ## ASM
2018-06-21 15:12:10 +00:00
* Y,A = PTR to "NAME.DRV [PARAM]" C-String
2018-10-11 15:23:06 +00:00
* ## RETURN VALUE
2018-06-21 15:12:10 +00:00
* none
*\--------------------------------------
2018-06-18 06:22:50 +00:00
K.LoadDrv >STYA .2+1 Save "BIN\0ARGS\0\0"
2020-09-25 12:05:23 +00:00
jsr PS.Find.DRV
bcs .9
2021-01-12 21:14:13 +00:00
2019-07-24 15:17:08 +00:00
jsr BIN.Load K.Buf256 = "/PATH/BIN"
bcs .9
2021-01-12 21:14:13 +00:00
2018-07-05 15:39:36 +00:00
>STYA .3+1
2019-02-03 21:58:26 +00:00
ldx #$ff
.1 inx Skip "BIN"
2021-01-12 21:14:13 +00:00
.2 lda $ffff,x
bne .1
2021-01-12 21:14:13 +00:00
txa
sec
adc .2+1
tay
lda #0
2018-06-28 15:26:34 +00:00
adc .2+2 Y,A = ARGS
2021-01-12 21:14:13 +00:00
2018-07-05 15:39:36 +00:00
.3 jsr $ffff SELF MODIFIED, call Dev.Detect
2021-04-29 11:56:34 +00:00
jsr BIN.Load.Free
2019-02-03 21:58:26 +00:00
bcs .9
2021-01-12 21:14:13 +00:00
lda #0 Make sure RC = 0 if success
2019-07-22 06:31:01 +00:00
* clc
.9 rts
*--------------------------------------
2018-06-28 15:26:34 +00:00
* BIN.Load
2015-03-14 21:48:35 +00:00
* in :
2019-07-24 15:17:08 +00:00
* K.Buf256 = /BIN/PATH (CSTR)
2015-03-14 21:48:35 +00:00
* out :
* Y,A = MEMPTR
* X = hMem of Code Segment
*--------------------------------------
2020-11-19 15:34:02 +00:00
BIN.Load lda A2osX.FSID
2019-12-03 15:42:17 +00:00
bne .11
ldx #$ff
.10 inx
lda K.Buf256,x
beq .11
cmp #'a'
bcc .10
cmp #'z'+1
bcs .10
eor #$20
sta K.Buf256,x
bra .10
.11 ldx #0
2019-07-24 15:17:08 +00:00
2018-08-20 15:15:37 +00:00
.1 cpx Mem.LastSlot
beq BIN.Load.1
2018-12-20 16:23:43 +00:00
inx we will skip Slot 0...
txa
2019-02-01 20:01:54 +00:00
jsr MEM.GetMemByID
2018-12-20 16:23:43 +00:00
lda (ZPMemMgrSPtr)
2018-08-20 15:15:37 +00:00
bpl .1 In Use?
2019-12-03 15:42:17 +00:00
ldy #S.MEM.BIN any BIN PATH in this slot?
2018-12-20 16:23:43 +00:00
lda (ZPMemMgrSPtr),y
2018-08-20 15:15:37 +00:00
beq .1
2019-12-03 15:42:17 +00:00
2018-08-20 15:15:37 +00:00
jsr K.GetMemPtr X unmodified, get pathname
>STYA .3+1
ldy #0
2019-12-03 15:42:17 +00:00
2019-07-22 06:31:01 +00:00
.2 lda K.Buf256,y
.3 cmp $ffff,y SELF MODIFIED
2018-08-20 15:15:37 +00:00
bne .1
2019-12-03 15:42:17 +00:00
iny
ora #0
bne .2
2019-12-03 15:42:17 +00:00
2019-07-22 06:31:01 +00:00
stx BIN.hMem save hMem
2018-12-20 16:23:43 +00:00
txa
2019-02-03 21:58:26 +00:00
jsr MEM.GetMemByID
2019-07-18 15:55:43 +00:00
jsr Mem.IncRefCnt
clc
2019-07-22 06:31:01 +00:00
jmp MEM.GetMEMPTR Y,A=Ptr
2019-10-03 06:25:27 +00:00
*--------------------------------------
2019-01-26 14:01:05 +00:00
* STAT Already called by Filesearch in FindDRV, FindLIB
* STAT Already called by PS.Load (TXT,BIN,SYS)
2019-10-03 06:25:27 +00:00
*--------------------------------------
2020-02-14 07:21:56 +00:00
BIN.Load.1 >PUSHWI K.Buf256
>PUSHBI O.RDONLY
>PUSHBI S.FI.T.BIN
>LDYA K.S.STAT+S.STAT.P.AUXTYPE
2018-06-29 14:16:40 +00:00
>STYA BIN.R.CS.Start
>PUSHYA Push AUXTYPE
2020-12-15 13:23:22 +00:00
2019-07-29 15:38:55 +00:00
jsr K.LoadFile
2021-05-04 17:31:21 +00:00
bcs .9 Error Loading file
2020-02-14 07:21:56 +00:00
stx BIN.hMem save hMem
2019-07-22 06:31:01 +00:00
pha YA=CODE+DATA size
tya
2019-07-22 06:31:01 +00:00
* clc
2018-07-13 14:38:24 +00:00
adc BIN.R.CS.Start Get AUXTYPE for actual Base Address
2017-10-27 14:56:46 +00:00
sta BIN.R.End compute Range End=AUXTYPE+FILELEN
pla
2018-06-29 14:16:40 +00:00
adc BIN.R.CS.Start+1
2017-10-27 14:56:46 +00:00
sta BIN.R.End+1
txa
2018-06-21 15:12:10 +00:00
jsr K.GetMemPtr
2019-07-22 06:31:01 +00:00
>STYA ZPPtr1 set ZPPtr1 -> New Code start
2021-05-04 17:31:21 +00:00
jsr BIN.CompOfsYA YA = actual load address
2020-09-05 18:44:58 +00:00
jsr Mem.SetOwnerPS0 this CS is owned by PS 0
2018-09-11 13:32:56 +00:00
ldy #H.BIN.CS.SIZE get Code Len
2017-01-12 17:43:45 +00:00
lda (ZPPtr1),y
2019-07-22 06:31:01 +00:00
pha
iny
2017-01-12 17:43:45 +00:00
lda (ZPPtr1),y
2019-07-22 06:31:01 +00:00
ply
2021-05-04 17:31:21 +00:00
jsr BIN.CompCSEndYA
2017-10-27 14:56:46 +00:00
jsr BIN.RelExe
2019-12-03 15:42:17 +00:00
jsr STRING.DupBuf256 get back bin path & jsr K.strdup make a copy of this string
2021-04-29 11:56:34 +00:00
bcs BIN.Load.Free
2019-12-03 15:42:17 +00:00
2020-09-05 18:44:58 +00:00
jsr Mem.SetOwnerPS0 Make BINPATH owned by PS0
2019-02-03 21:58:26 +00:00
lda BIN.hMem Keep X=new string hMem
2019-01-30 06:20:13 +00:00
jsr MEM.GetMemByID X unmodified
2018-12-20 16:23:43 +00:00
lda (ZPMemMgrSPtr)
2015-03-14 21:48:35 +00:00
ora #S.MEM.F.CODE This is a code segment
2018-12-20 16:23:43 +00:00
sta (ZPMemMgrSPtr)
2016-03-13 21:47:19 +00:00
2018-12-20 16:23:43 +00:00
txa Get Back Cmd line hMem
2015-03-14 21:48:35 +00:00
ldy #S.MEM.BIN
2018-12-20 16:23:43 +00:00
sta (ZPMemMgrSPtr),y
2019-07-24 15:17:08 +00:00
ldx BIN.hMem setup X = CS hMem
2018-12-20 16:23:43 +00:00
clc
2019-02-03 21:58:26 +00:00
jmp MEM.GetMEMPTR ...and Y,A=PTR to CS
2021-04-29 11:56:34 +00:00
2021-05-04 17:31:21 +00:00
.9 rts
2021-04-29 11:56:34 +00:00
BIN.Load.Free php
pha
lda BIN.hMem
jsr K.FreeMem
pla
plp
rts Discard Loaded Code, exits CS
2018-06-28 15:26:34 +00:00
*/--------------------------------------
2018-07-20 05:43:11 +00:00
* # InsDrv
* ## C
2019-07-22 06:31:01 +00:00
* `void * insdrv (void * src, void * crvcsstart, void * drvcssize, void * drvend);`
2018-07-20 05:43:11 +00:00
* ## ASM
2018-07-19 15:33:55 +00:00
* `>PUSHW DRV.END`
2019-07-22 06:31:01 +00:00
* `>PUSHW DRV.CS.SIZE`
2018-07-19 15:33:55 +00:00
* `>PUSHW DRV.CS.START`
* `>LDYA L.SRC`
2019-02-26 16:50:42 +00:00
* `>SYSCALL insdrv`
2018-10-11 15:23:06 +00:00
* ## RETURN VALUE
2018-07-17 15:45:59 +00:00
* Y,A = Ptr to installed driver
2018-06-28 15:26:34 +00:00
*\--------------------------------------
2019-07-22 06:31:01 +00:00
K.InsDrv >STYA ZPPtr3 SRC PTR for move
2018-07-17 15:45:59 +00:00
>PULLW BIN.R.CS.Start
2019-07-28 20:39:30 +00:00
>PULLYA DRV.CS.SIZE
2021-05-04 17:31:21 +00:00
jsr BIN.CompCSEndYA
2019-07-28 20:39:30 +00:00
>PULLA BIN.R.End
sta BIN.R.End
sec
sbc BIN.R.CS.Start
tay
>PULLA
sta BIN.R.End+1
sbc BIN.R.CS.Start+1
>STYA BIN.R.Size
2021-07-10 19:09:43 +00:00
jsr MEM.GetKBuf Y,A = CODE + DATA
2019-01-11 16:06:05 +00:00
bcs .9 No More Room to load Driver
2019-07-22 06:31:01 +00:00
2019-01-11 16:06:05 +00:00
>STYA ZPPtr1 Y,A = DST Buf for RelDrv...
2019-07-22 06:31:01 +00:00
>STYA ZPPtr4 ...for move...
2019-01-11 16:06:05 +00:00
sty .7+1 ...and for exit
sta .8+1
2021-05-04 17:31:21 +00:00
jsr BIN.CompOfsYA
2019-07-22 06:31:01 +00:00
2019-07-28 20:39:30 +00:00
lda BIN.R.Size
2019-07-22 06:31:01 +00:00
eor #$ff
tax
2019-07-28 20:39:30 +00:00
lda BIN.R.Size+1
eor #$ff
pha
ldy #0
2023-10-18 05:41:12 +00:00
2018-06-29 14:16:40 +00:00
.1 inx
bne .2
pla
inc
2018-06-29 14:16:40 +00:00
beq .3
pha
2023-10-18 05:41:12 +00:00
2019-07-22 06:31:01 +00:00
.2 lda (ZPPtr3),y
sta (ZPPtr4),y
iny
2018-06-29 14:16:40 +00:00
bne .1
2019-01-11 16:06:05 +00:00
inc ZPPtr3+1
2019-07-22 06:31:01 +00:00
inc ZPPtr4+1
2018-06-29 14:16:40 +00:00
bra .1
2019-01-11 16:06:05 +00:00
.3 jsr BIN.RelDrv Relocate at Ptr1
2019-01-11 16:06:05 +00:00
.7 ldy #$ff SELF MODIFIED
.8 lda #$ff SELF MODIFIED
2019-10-03 06:25:27 +00:00
.9 rts
*--------------------------------------
2017-10-27 14:56:46 +00:00
BIN.RelExe ldy #H.BIN.T+1
2017-01-12 17:43:45 +00:00
lda (ZPPtr1),y
cmp /H.BIN.T.BIN65
beq .1
2020-11-26 19:47:57 +00:00
cmp /H.BIN.T.DRV65
beq .1
2020-11-26 19:47:57 +00:00
2018-10-21 20:54:07 +00:00
lda #E.IBIN
sec
rts
2020-11-26 19:47:57 +00:00
.1 ldy #H.BIN.JMP relocate Main JMP
2021-05-04 17:31:21 +00:00
jsr BIN.RelAtPtr1Y
2021-05-04 17:31:21 +00:00
ldy #16 skip Header, CS.SIZE & DS.SIZE... (16 bytes)
.HS 2C bit abs
2019-10-03 06:25:27 +00:00
*--------------------------------------
2021-05-04 17:31:21 +00:00
BIN.RelDrv ldy #2 start after CLD JMP
2018-07-17 15:45:59 +00:00
2019-01-11 16:06:05 +00:00
.1 iny
2018-09-09 08:11:42 +00:00
lda (ZPPtr1),y HI in A
beq .2 $00xx = end of table
2020-11-26 19:47:57 +00:00
dey
2021-05-04 17:31:21 +00:00
jsr BIN.RelAtPtr1Y
iny
2020-11-26 19:47:57 +00:00
bne .1
inc ZPPtr1+1
bra .1
2019-10-03 06:25:27 +00:00
*--------------------------------------
2021-05-04 17:31:21 +00:00
.2 jsr SHARED.AddYp12P1 add current offset in Y to Ptr
2018-12-20 16:23:43 +00:00
* + 1 to skip last 00 from beq .2
* ZPPtr1=Current Code PTR
2019-07-22 16:28:44 +00:00
lda BIN.R.CS.End
2018-07-19 15:33:55 +00:00
clc
adc BIN.R.Offset
2019-07-22 16:28:44 +00:00
sta BIN.R.Stop
lda BIN.R.CS.End+1
2019-07-22 06:31:01 +00:00
adc BIN.R.Offset+1
2019-07-22 16:28:44 +00:00
sta BIN.R.Stop+1
2018-07-19 15:33:55 +00:00
2019-07-22 06:31:01 +00:00
.3 lda (ZPPtr1) get OPCODE
lsr /2
tax
2021-07-10 19:09:43 +00:00
lda BIN.65R02,x get OPCODE definition
bcs .4 go get LO nibble
lsr
lsr move HI -> LO
lsr
lsr
.4 and #$0f
bit #$8 abs addressing?
2019-07-22 06:31:01 +00:00
beq .5 no....
and #7 save Opcode length...
pha
ldy #1
2021-05-04 17:31:21 +00:00
jsr BIN.RelAtPtr1Y
2019-07-22 06:31:01 +00:00
pla get back Opcode length...
2019-01-11 16:06:05 +00:00
2019-07-22 06:31:01 +00:00
.5 tay A = OPCODE length
2021-05-04 17:31:21 +00:00
jsr SHARED.AddY2P1
2019-07-22 06:31:01 +00:00
2019-07-22 16:28:44 +00:00
.6 cmp BIN.R.Stop A = ZPPtr1
2019-01-11 16:06:05 +00:00
bne .3
2019-07-22 06:31:01 +00:00
2019-01-11 16:06:05 +00:00
lda ZPPtr1+1
2019-07-22 16:28:44 +00:00
.7 cmp BIN.R.Stop+1
2019-01-11 16:06:05 +00:00
bne .3 next opcode....
2019-07-22 06:31:01 +00:00
clc Make sure exit with CC
rts
*-------------------------------------- YA = CS Size
2021-05-04 17:31:21 +00:00
BIN.CompCSEndYA pha
2019-07-22 06:31:01 +00:00
tya
clc
adc BIN.R.CS.Start
sta BIN.R.CS.End ZPPtr1 + CodeLen
pla
adc BIN.R.CS.Start+1
sta BIN.R.CS.End+1
rts
*-------------------------------------- YA = Target Address
2021-05-04 17:31:21 +00:00
BIN.CompOfsYA pha
2019-07-22 06:31:01 +00:00
tya
sec
sbc BIN.R.CS.Start
sta BIN.R.Offset
pla
sbc BIN.R.CS.Start+1
sta BIN.R.Offset+1
2019-01-11 16:06:05 +00:00
rts
*--------------------------------------
2021-05-04 17:31:21 +00:00
BIN.RelAtPtr1Y lda (ZPPtr1),y Get LO
tax save LO in X
iny make Y point to HI
2018-07-17 15:45:59 +00:00
lda (ZPPtr1),y Get HI
2018-06-29 14:16:40 +00:00
cpx BIN.R.CS.Start
sbc BIN.R.CS.Start+1
2019-01-11 16:06:05 +00:00
bcc .9 addr < BIN.R.CS.Start, out of range
txa Get back LO
2017-10-27 14:56:46 +00:00
cpx BIN.R.End
2018-07-17 15:45:59 +00:00
lda (ZPPtr1),y Get HI
2017-10-27 14:56:46 +00:00
sbc BIN.R.End+1
2019-01-11 16:06:05 +00:00
bcs .9 addr > BIN.R.End, out of range
txa Get back LO
dey
2019-01-11 16:06:05 +00:00
clc
adc BIN.R.Offset
sta (ZPPtr1),y
iny
2019-01-11 16:06:05 +00:00
lda (ZPPtr1),y
2017-10-27 14:56:46 +00:00
adc BIN.R.Offset+1
2019-01-11 16:06:05 +00:00
sta (ZPPtr1),y
.9 rts
*--------------------------------------
2019-01-04 13:17:31 +00:00
* 6502/65C02/65816 OPCODES
* Bit 3 : 1 = absolute addressing
* Bit 2-1-0 : opcode + @ length
*--------------------------------------
* 0.1.2.3.4.5.6.7.8.9.A.B.C.D.E.F
2021-07-10 19:09:43 +00:00
* BIN.65816
2019-01-04 13:17:31 +00:00
* TO DO : Make 2 different tables
* http://axis.llx.com/~nparker/a2/opcodes.html
*--------------------------------------
* 65R02 OPCODES
*--------------------------------------
* 0.1.2.3.4.5.6.7.8.9.A.B.C.D.E.F
BIN.65R02 .HS 1.2.2.1.2.2.2.2.1.2.1.1.B.B.B.3
.HS 2.2.2.1.2.2.2.2.1.B.1.1.B.B.B.3
.HS B.2.2.1.2.2.2.2.1.2.1.1.B.B.B.3
.HS 2.2.2.1.2.2.2.2.1.B.1.1.B.B.B.3
.HS 1.2.2.1.2.2.2.2.1.2.1.1.B.B.B.3
.HS 2.2.2.1.2.2.2.2.1.B.1.1.1.B.B.3
.HS 1.2.2.1.2.2.2.2.1.2.1.1.B.B.B.3
.HS 2.2.2.1.2.2.2.2.1.B.1.1.B.B.B.3
.HS 2.2.2.1.2.2.2.2.1.2.1.1.B.B.B.3
.HS 2.2.2.1.2.2.2.2.1.B.1.1.B.B.B.3
.HS 2.2.2.1.2.2.2.2.1.2.1.1.B.B.B.3
.HS 2.2.2.1.2.2.2.2.1.B.1.1.B.B.B.3
.HS 2.2.2.1.2.2.2.2.1.2.1.1.B.B.B.3
.HS 2.2.2.1.2.2.2.2.1.B.1.1.1.B.B.3
.HS 2.2.2.1.2.2.2.2.1.2.1.1.B.B.B.3
.HS 2.2.2.1.2.2.2.2.1.B.1.1.1.B.B.3
*--------------------------------------
2015-03-14 21:48:35 +00:00
MAN
2020-12-15 13:23:22 +00:00
SAVE usr/src/sys/kernel.s.bin
LOAD usr/src/sys/kernel.s
2015-03-14 21:48:35 +00:00
ASM