A2osX/SYS/KERNEL.S.INIT3.txt

505 lines
10 KiB
Plaintext
Raw Normal View History

2016-08-28 20:48:01 +00:00
PR#3
PREFIX /A2OSX.SRC
LOMEM $900
2016-08-28 20:48:01 +00:00
INC 1
AUTO 6
.LIST OFF
*--------------------------------------
2017-01-12 17:43:45 +00:00
Kernel.Init3 jsr MemMgrInit
jsr PS0Init
bcs *
2016-08-28 20:48:01 +00:00
>LDYAI MSG.Init3
>SYSCALL CPrintFYA
2016-08-28 20:48:01 +00:00
>LDYAI MSG.DEV
>SYSCALL CPrintFYA
jsr DevMgrInit
2016-09-29 15:30:15 +00:00
bcs *
>LDYAI MSG.IRQ
>SYSCALL CPrintFYA
jsr IrqMgrInit
bcs *
2016-09-29 15:30:15 +00:00
>LDYAI MSG.EVT
>SYSCALL CPrintFYA
2017-01-12 17:43:45 +00:00
jsr EvtMgrInit
2016-09-29 15:30:15 +00:00
bcs *
>LDYAI MSG.FLT
>SYSCALL CPrintFYA
2017-01-12 17:43:45 +00:00
jsr FltMgrInit
2016-09-29 15:30:15 +00:00
bcs *
>LDYAI MSG.TSK
>SYSCALL CPrintFYA
2017-01-12 17:43:45 +00:00
jsr TskMgrInit
2016-09-29 15:30:15 +00:00
bcs *
2016-08-28 20:48:01 +00:00
ldy #S.PS.hPREFIX
lda (pPs),y
>SYSCALL GetMemPtrA
2016-08-28 20:48:01 +00:00
>PUSHYA
>LDYAI MSG.Prefix
>SYSCALL CPrintFYA
2016-08-28 20:48:01 +00:00
>PUSHWI STARTUP.CMDLINE
>LDYAI MSG.Startup
>SYSCALL CPrintFYA
2016-08-28 20:48:01 +00:00
>LDYAI STARTUP.CMDLINE
>SYSCALL ExpandPStrYA
phx Save Expanded CMDLINE for discard
>SYSCALL CreateProcessYA
2016-08-28 20:48:01 +00:00
bcs .9
pla
>SYSCALL FreeMemA ...discard...
2016-08-28 20:48:01 +00:00
>LDYAI MSG.Init3.OK
>SYSCALL CPrintFYA
2016-08-28 20:48:01 +00:00
>LDYAI TskMgr.Table
>STYA pPs
>DEBUGOA
2017-01-12 17:43:45 +00:00
bit RRAMWRAMBNK2
bit RRAMWRAMBNK2
jmp K.KernelRun
2016-08-28 20:48:01 +00:00
.9 >PUSHA
>LDYAI MSG.StartupErr
>SYSCALL CPrintFYA
bra * No need to discard Expanded CMDLINE
2016-08-28 20:48:01 +00:00
*--------------------------------------
2017-01-12 17:43:45 +00:00
MemMgrInit >LDYAI MemMgr.MHiMem
>STYA MemMgr.HiMem
>STYA MemMgr.Free
>LDYAI MemMgr.MLoMem
>STYA MemMgr.LoMem
stz MemMgr.LastSlot Reserve Slot #0
sta SETWRITEAUX
>LDYAI MemMgr.XHiMem
>STYA MemMgr.HiMem
>STYA MemMgr.Free
>LDYAI MemMgr.XLoMem
>STYA MemMgr.LoMem
stz MemMgr.LastSlot Reserve Slot #0
sta CLRWRITEAUX
rts
*--------------------------------------
PS0Init ldx #S.DEV*2 NUL,SYS
.1 lda DevMgr.NUL-1,x
sta DevMgr.Table-1,x
dex
bne .1
lda #2
sta DevMgr.Count
>LDYAI TskMgr.Table Select Process 0 (Kernel)
>STYA pPs
ldy #S.PS-1
lda #0
.2 sta (pPs),y Blank PS0
dey
bpl .2
>LDYAI DEV.SYS
>SYSCALL MkNodYA
bcs .9
ldy #S.PS.hStdIn
sta (pPs),y
ldy #S.PS.hStdOut
sta (pPs),y
ldy #S.PS.hStdErr
sta (pPs),y
clc
.9 rts
*--------------------------------------
DevMgr.NUL .DA DevMgr.NUL.Code
.DA #S.DEV.S.WRITE+S.DEV.S.READ+S.DEV.S.OPENED
.DA #3
.AS "NUL" NAME
.HS 00 NAME must Be 4 bytes long
2016-09-29 15:30:15 +00:00
*--------------------------------------
2017-01-12 17:43:45 +00:00
DevMgr.SYS .DA DevMgr.SYS.Code
.DA #S.DEV.S.WRITE+S.DEV.S.READ
2017-01-12 17:43:45 +00:00
.DA #3
.AS "SYS" NAME
.HS 00 NAME must Be 4 bytes long
2016-09-29 15:30:15 +00:00
*--------------------------------------
* Setup AuxLC $FFFE->Kernel IRQ Handler
* if irq not handled, jmp (S.IrqMgrOldFFFE)
*--------------------------------------
SETMOUSE .EQ $12 Sets mouse mode
SERVEMOUSE .EQ $13 Services mouse interrupt
READMOUSE .EQ $14 Reads mouse position
*--------------------------------------
2017-01-12 17:43:45 +00:00
IrqMgrInit php
2016-09-29 15:30:15 +00:00
sei
>LDYA $FFFE
>STYA K.IrqMgrOldFFFE
2016-09-29 15:30:15 +00:00
>LDYAI K.IrqHandlerAuxLC
>STYA $FFFE
>LDYAI IrqHandler
>STYA MLICALL.PARAMS+2
>MLICALL MLIALLOCIRQ
bcs .9
2016-09-29 15:30:15 +00:00
lda MLICALL.PARAMS+1
sta ProDOS.INTNUM
stz ZPPtr1 Try finding a Mouse Card...
lda #$C1
sta ZPPtr1+1
.1 ldx #DEVSIG.Value-DEVSIG.Offset-1
.2 ldy DEVSIG.Offset,x
lda (ZPPtr1),y
cmp DEVSIG.Value,x
bne .3
dex
bpl .2
bra .4
.3 inc ZPPtr1+1 no match, try next slot....
lda ZPPtr1+1
cmp #$C8
bne .1
plp
clc
rts
.9 plp
sec
rts
.4 lda ZPPtr1+1
sta GOMOUSE.JMP+2 DEVSLOTCn
sta K.IrqMgrVBL.MSM+2
sta K.IrqMgrVBL.MRM+2
and #$0f
sta K.IrqMgrVBL.0n
asl
asl
asl
asl
sta GOMOUSE.n0+1
sta K.IrqMgrVBL.n0
ldy #SERVEMOUSE
lda (ZPPtr1),y
sta K.IrqMgrVBL.MSM+1
ldy #READMOUSE
lda (ZPPtr1),y
sta K.IrqMgrVBL.MRM+1
bit RROMBNK2 Renable ROM to allow MOUSE II firmware works properly
ldx K.IrqMgrVBL.0n
lda $7F8,x
and #$0F
ora #9
ldy #SETMOUSE
jsr GOMOUSE
bcs *
bit RRAMWRAMBNK1 Back To LC Ram
bit RRAMWRAMBNK1
inc K.IrkMgr.VBL set=1 awaiting IrqMgr confirmation
plp
clc
rts
*--------------------------------------
GOMOUSE pha
stz ZPPtr1
ldx GOMOUSE.JMP+2 DEVSLOTCn
stx ZPPtr1+1
lda (ZPPtr1),y
sta GOMOUSE.JMP+1
GOMOUSE.n0 ldy #$ff
pla
GOMOUSE.JMP jmp $ffff Self Modified
*--------------------------------------
DEVSIG.Offset .HS 05070B0CFB
DEVSIG.Value .HS 38180120D6
2016-09-29 15:30:15 +00:00
*--------------------------------------
2017-01-12 17:43:45 +00:00
DevMgrInit stz ZPPtr1
lda #$C1
2017-01-12 17:43:45 +00:00
sta ZPPtr1+1
lda #'1'
sta DEV.HEADER+5 S1Dy
.1 ldx #SmartPort.SIG-SmartPort.OFS-1
.2 ldy SmartPort.OFS,x Check if there is a smartport firmware
2017-01-12 17:43:45 +00:00
lda (ZPPtr1),y
cmp SmartPort.SIG,x
bne .3 not a smartport...
dex
bpl .2
*SmartPort!!!
2017-01-12 17:43:45 +00:00
jsr DevMgrInit.SP
ldy #A2osX.SLOTS.SP
bra .7
* Disk II, or Block device ?
.3 dex if x=0, only first SIG byte failed
bpl .8
ldy #$ff
2017-01-12 17:43:45 +00:00
lda (ZPPtr1),y
bne .4 $0, Disk II, 16sect
2017-01-12 17:43:45 +00:00
jsr DevMgrInit.DII
ldy #A2osX.SLOTS.DII
2017-01-12 17:43:45 +00:00
bra .7
.4 inc
beq .7 $ff, Disk II, 13sect, ignore
dec
2017-01-12 17:43:45 +00:00
* Block device
jsr DevMgrInit.BLK
ldy #A2osX.SLOTS.BLK
2017-01-12 17:43:45 +00:00
.7 lda ZPPtr1+1
and #$0f
tax
tya
sta A2osX.SLOTS,x
.8 inc DEV.HEADER+5
2017-01-12 17:43:45 +00:00
inc ZPPtr1+1
lda ZPPtr1+1
cmp #$C8
bne .1
clc
rts
*--------------------------------------
2017-01-12 17:43:45 +00:00
DevMgrInit.SP ldy #$ff
lda (ZPPtr1),y
clc
adc #3 Compute smartport entry point
sta .1+1
sta .3+1
sta DEV.HEADER+S.DEV.JMP
2017-01-12 17:43:45 +00:00
lda ZPPtr1+1
sta .1+2
sta .3+2
sta DEV.HEADER+S.DEV.JMP+1
2017-01-12 17:43:45 +00:00
.1 jsr $ffff Self Modified
.DA #0 Status
.DA SP.CTRL.STATUS
bcs .9
lda SP.STATUS1
beq .9 no device
.2 lda #1
sta DEV.HEADER.STATUS+1
2017-01-12 17:43:45 +00:00
lda #'1'
sta DEV.HEADER+7 SxD1
2017-01-12 17:43:45 +00:00
.3 jsr $ffff Self Modified
.DA #0 Status
.DA DEV.HEADER.STATUS
2017-01-12 17:43:45 +00:00
bcs .7
lda SP.STATUS2+S.DEVSTAT.S
sta DEV.HEADER+S.DEV.S
2017-01-12 17:43:45 +00:00
.7 inc DEV.HEADER+7
2017-01-12 17:43:45 +00:00
dec SP.STATUS1
bne .3
.9 rts
*--------------------------------------
DevMgrInit.DII
2017-01-12 17:43:45 +00:00
rts
*--------------------------------------
DevMgrInit.BLK
rts
*--------------------------------------
2017-01-12 17:43:45 +00:00
DevMgrInit.AddDev
lda DevMgr.Count
cmp #K.DEV.MAX
beq .9
2017-01-12 17:43:45 +00:00
inc DevMgr.Count
jsr K.GetDevByIDA
>STYA ZPPtr1
ldy #S.DEV-1
.1 lda DEV.HEADER,y
sta (ZPPtr1),y
dey
bne .1
clc
rts
.9 lda #DEVMGR.ERROOH
sec
rts
*--------------------------------------
DEV.HEADER .BS 2 JMP
DEV.HEADER.STATUS .DA #S.DEV.S.BLOCK S
>PSTR "S1D1" 5 bytes
*--------------------------------------
SmartPort.OFS .HS 07010305
SmartPort.SIG .HS 00200003
2016-09-29 15:30:15 +00:00
*--------------------------------------
2017-01-12 17:43:45 +00:00
SP.CTRL.STATUS .DA #3
.DA #0
.DA SP.STATUS1
.DA #0 return S only
SP.DEV.STATUS .DA #3
.BS 1
.DA SP.STATUS2
.DA #3 return DIB
SP.STATUS1 .BS 4
SP.STATUS2 .BS S.DEVSTAT
*--------------------------------------
SP.DRV cld
ldy #7
lda (pDev),y
and #$f
sta PRTCALL.PARAMS+1 dev
SP.DRV.lo ldy #$ff
SP.DRV.hi lda #$ff
jmp A2osX.PRTCALL
*--------------------------------------
DII.DRV cld
lda #$ff DSSS0000
cpx #DEVMGR.CONTROL
bcs .9
.9 lda #MLI.ERR.BADCALL
rts
*--------------------------------------
2017-01-12 17:43:45 +00:00
BLK.DRV
*--------------------------------------
2017-03-09 07:11:44 +00:00
EvtMgrInit lda #$A5
sta A2osX.TIMER16
lda #$9B
sta A2osX.TIMER16+1
2016-09-29 15:30:15 +00:00
2017-03-09 07:11:44 +00:00
lda /EvtMgr.Table
2016-09-29 15:30:15 +00:00
sta pEvent+1
clc
rts
*--------------------------------------
2017-01-12 17:43:45 +00:00
FltMgrInit stz FltMgr.Table
2016-09-29 15:30:15 +00:00
clc
rts
*--------------------------------------
2017-01-12 17:43:45 +00:00
TskMgrInit >LDYAI TskMgr.Table+S.PS Clear whole process table except PS0
>STYA .2+1
2016-09-29 15:30:15 +00:00
2017-01-12 17:43:45 +00:00
ldx #K.PS.MAX-1
2016-09-29 15:30:15 +00:00
.1 lda #0
ldy #S.PS-1
2016-09-29 15:30:15 +00:00
2017-01-12 17:43:45 +00:00
.2 sta $ffff,y Self Modified
2016-09-29 15:30:15 +00:00
dey
bpl .2
2017-01-12 17:43:45 +00:00
lda .2+1
2016-09-29 15:30:15 +00:00
clc
adc #S.PS
2017-01-12 17:43:45 +00:00
sta .2+1
2016-09-29 15:30:15 +00:00
bcc .3
2017-01-12 17:43:45 +00:00
inc .2+2
2016-09-29 15:30:15 +00:00
.3 dex
bne .1
>PUSHWI K.ENV.SIZE get a buffer for ENV
>PUSHBI S.MEM.F.INIT0 make sure blank
2017-01-12 17:43:45 +00:00
>SYSCALL GetMem create it...
2016-09-29 15:30:15 +00:00
bcs .9
txa
ldy #S.PS.hENV
sta (pPs),y
>LDYAI UsrBuf256
>STYA MLICALL.PARAMS+1
>MLICALL MLIGETPREFIX
bcs .9
>LDYAI UsrBuf256
>SYSCALL NewPStrYA
2016-09-29 15:30:15 +00:00
bcs .9
txa
ldy #S.PS.hPREFIX
sta (pPs),y
2017-01-12 17:43:45 +00:00
>PUSHWI UsrBuf256 push ENV value
2016-09-29 15:30:15 +00:00
>PUSHWI I.ENV.A2osX push ENV name
>SYSCALL SetEnv
2016-09-29 15:30:15 +00:00
bcs .9
>LDYAI I.ENV.PATH
>SYSCALL PutEnvYA
2016-09-29 15:30:15 +00:00
bcs .9
>LDYAI I.ENV.LIB
>SYSCALL PutEnvYA
2016-09-29 15:30:15 +00:00
bcs .9
>LDYAI I.ENV.DRV
>SYSCALL PutEnvYA
2016-09-29 15:30:15 +00:00
.9 rts
*--------------------------------------
2017-01-12 17:43:45 +00:00
DEV.SYS >PSTR "SYS"
I.ENV.A2osX >PSTR "A2OSX"
I.ENV.PATH >PSTR "PATH=${A2OSX}SBIN/;${A2OSX}BIN/"
I.ENV.LIB >PSTR "LIB=${A2OSX}LIB/"
I.ENV.DRV >PSTR "DRV=${A2OSX}DRV/"
STARTUP.CMDLINE >PSTR "${A2OSX}SBIN/SHELL ${A2OSX}A2osX.STARTUP"
2016-08-28 20:48:01 +00:00
*--------------------------------------
MSG.Init3 >CSTR "A2osX[Stage3]:Init\r\n"
MSG.DEV >CSTR "-Device Manager...\r\n"
MSG.IRQ >CSTR "-Interrupt Manager...\r\n"
MSG.EVT >CSTR "-Event Manager...\r\n"
MSG.FLT >CSTR "-Path Filter...\r\n"
MSG.TSK >CSTR "-Task Manager...\r\n"
MSG.Prefix >CSTR "Prefix:%S\r\n"
MSG.Startup >CSTR "Executing Kernel Startup Script...\r\nCmd:%S\r\n"
MSG.StartupErr >CSTR "Failed : [$%h]\r\n"
MSG.Init3.OK >CSTR "A2osX[Stage3]:Complete.\r\n"
*--------------------------------------
2016-08-28 20:48:01 +00:00
MAN
SAVE SYS/KERNEL.S.INIT3
LOAD SYS/KERNEL.S
ASM