A2osX/SYS/KERNEL.S.INIT3.txt
2016-12-05 18:04:42 +01:00

335 lines
6.8 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

PR#3
PREFIX /A2OSX.SRC
NEW
INC 1
AUTO 6
.LIST OFF
*--------------------------------------
Kernel.Init3 ldx #S.DEV*DevMgr.Count
.1 lda DevMgr.NUL-1,x
sta DevMgr.Table-1,x
dex
bne .1
stz DevMgr.Table+S.DEV*DevMgr.Count
lda #1 SYS device
>SYSCALL GetDevByIDA
>STYA pDev
ldx #DEVMGR.OPEN
jsr pDevJmp
>LDYAI MSG.Init3
>SYSCALL CPrintFYA
>LDYAI MSG.IRQ
>SYSCALL CPrintFYA
jsr K.IrqMgrInit
bcs *
>LDYAI MSG.MEM
>SYSCALL CPrintFYA
jsr K.MemMgrInit
bcs *
>LDYAI MSG.DEV
>SYSCALL CPrintFYA
jsr K.DevMgrInit
bcs *
>LDYAI MSG.EVT
>SYSCALL CPrintFYA
jsr K.EvtMgrInit
bcs *
>LDYAI MSG.FLT
>SYSCALL CPrintFYA
jsr K.FltMgrInit
bcs *
>LDYAI MSG.TSK
>SYSCALL CPrintFYA
jsr K.TskMgrInit
bcs *
ldy #S.PS.hPREFIX
lda (pPs),y
>SYSCALL GetMemPtrA
>PUSHYA
>LDYAI MSG.Prefix
>SYSCALL CPrintFYA
>PUSHWI STARTUP.CMDLINE
>LDYAI MSG.Startup
>SYSCALL CPrintFYA
>LDYAI STARTUP.CMDLINE
>SYSCALL ExpandPStrYA
phx Save Expanded CMDLINE for discard
>SYSCALL CreateProcessYA
bcs .9
pla
>SYSCALL FreeMemA ...discard...
>LDYAI MSG.Init3.OK
>SYSCALL CPrintFYA
>LDYAI TskMgr.Table
>STYA pPs
>DEBUGOA
bit RRAMWRAMBNK2
bit RRAMWRAMBNK2
jmp K.KernelRun
.9 >PUSHA
>LDYAI MSG.StartupErr
>SYSCALL CPrintFYA
bra * No need to discard Expanded CMDLINE
*--------------------------------------
DevMgr.NUL cld
jmp (DevMgr.NUL.Code,x)
.DA #0 DevID=0
.DA #S.DEV.F.INUSE+S.DEV.F.SHARE+S.DEV.F.COUT+S.DEV.F.CHAR
>PSTR "NUL" NAME
.HS 00 NAME must Be 5 bytes long
.HS 00
.HS 00.00.00.00
*--------------------------------------
DevMgr.SYS cld
jmp (DevMgr.SYS.Code,x)
.DA #1 DevID=1
.DA #S.DEV.F.INUSE+S.DEV.F.EVENT+S.DEV.F.SHARE+S.DEV.F.COUT+S.DEV.F.CHAR
>PSTR "SYS" NAME
.HS 00 NAME must Be 5 bytes long
.HS 00
.HS 00.00.00.00
*--------------------------------------
* Setup MainLC ($3FE)
*
*
* Setup AuxLC $FFFE->Kernel IRQ Handler
* if irq not handled, jmp (S.IrqMgrOldFFFE)
*--------------------------------------
K.IrqMgrInit php
sei
>LDYA $FFFE
cpy #K.IrqHandlerAuxLC
bne .1
cmp /K.IrqHandlerAuxLC
beq .2
.1 >STYA K.IrqMgrOldFFFE
>LDYAI K.IrqHandlerAuxLC
>STYA $FFFE
.2
* >LDYAI $BE0C
* >STYA $3F0
plp
clc
rts
*--------------------------------------
K.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
clc
rts
*--------------------------------------
K.DevMgrInit stz ZPQuickPtr1
lda #$C1
sta ZPQuickPtr1+1
.1 ldx #SmartPort.SIG-SmartPort.OFS-1
.2 ldy SmartPort.OFS,x Check if there is a smartport firmware
lda (ZPQuickPtr1),y
cmp SmartPort.SIG,x
bne .3 not a smartport...
dex
bpl .2
*SmartPort!!!
jsr K.DevMgrInit.AddDev
bra .7
* Disk II, or Block device ?
.3 dex if x=0, only first SIG byte failed
bpl .8
ldy #$ff
lda (ZPQuickPtr1),y
beq .4 $0, Disk II, 16sect
inc
beq .8 $ff, Disk II, 13sect
dec
.4
.7 lda ZPQuickPtr1+1
and #$0f
tax
lda #$80
sta A2osX.SLOTS,x
.8 inc ZPQuickPtr1+1
lda ZPQuickPtr1+1
cmp #$C8
bne .1
clc
rts
*--------------------------------------
K.DevMgrInit.AddCtrl
rts
*--------------------------------------
K.DevMgrInit.AddDev
rts
*--------------------------------------
SmartPort.OFS .HS 07010305
SmartPort.SIG .HS 00200003
*--------------------------------------
K.EvtMgrInit
* lda #10
* sta EVTMGR.10TH.CNT WARNING!!!! WRONG BANK!!!
* lda A2osX.HZ
* sta EVTMGR.HZ.CNT
lda MACHID
and #MACHID.TYPE
cmp #MACHID.TYPE.IIc
bne .8
* sta CLRIOUDIS
* sta ENBVBLIIC
.8 lda /EvtMgr.Table
sta pEvent+1
clc
rts
*--------------------------------------
K.FltMgrInit stz FltMgr.Table
clc
rts
*--------------------------------------
K.TskMgrInit stz TSKMGR.LASTID
lda #1
sta TSKMGR.SIZE One Slot Busy (Kernel PS=0)
>LDYAI TskMgr.Table Clear whole process table
>STYA pPs
ldx #K.PS.MAX
.1 lda #0
ldy #S.PS-1
.2 sta (pPs),y
dey
bpl .2
lda pPs
clc
adc #S.PS
sta pPs
bcc .3
inc pPs+1
.3 dex
bne .1
>LDYAI TskMgr.Table Select Process 0 (Kernel)
>STYA pPs
lda #1
ldy #S.PS.hINDEV
sta (pPs),y Make In DEV = SYS
ldy #S.PS.hOUTDEV
sta (pPs),y Make OUT DEV = SYS
ldy #S.PS.hERRDEV
sta (pPs),y Make ERR DEV = SYS
>PUSHWI K.ENV.SIZE get a buffer for ENV
>PUSHBI S.MEM.F.INIT0 make sure blank
>SYSCALL GetMem create it...
bcs .9
txa
ldy #S.PS.hENV
sta (pPs),y
>LDYAI UsrBuf256
>STYA MLICALL.PARAMS+1
>MLICALL MLIGETPREFIX
bcs .9
>LDYAI UsrBuf256
>SYSCALL NewPStrYA
bcs .9
txa
ldy #S.PS.hPREFIX
sta (pPs),y
>PUSHWI UsrBuf256 push ENV value
>PUSHWI I.ENV.A2osX push ENV name
>SYSCALL SetEnv
bcs .9
>LDYAI I.ENV.PATH
>SYSCALL PutEnvYA
bcs .9
>LDYAI I.ENV.LIB
>SYSCALL PutEnvYA
bcs .9
>LDYAI I.ENV.DRV
>SYSCALL PutEnvYA
.9 rts
*--------------------------------------
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"
*--------------------------------------
MSG.Init3 >CSTR "A2osX[Stage3]:Init\n"
MSG.IRQ >CSTR "-Interrupt Manager...\n"
MSG.MEM >CSTR "-Memory Manager...\n"
MSG.DEV >CSTR "-Device Manager...\n"
MSG.EVT >CSTR "-Event Manager...\n"
MSG.FLT >CSTR "-Path Filter...\n"
MSG.TSK >CSTR "-Task Manager...\n"
MSG.Prefix >CSTR "Prefix:%S\n"
MSG.Startup >CSTR "Executing Kernel Startup Script...\nCmd:%S\n"
MSG.StartupErr >CSTR "Failed : [$%h]\n"
MSG.Init3.OK >CSTR "A2osX[Stage3]:Complete.\n"
*--------------------------------------
MAN
SAVE SYS/KERNEL.S.INIT3
LOAD SYS/KERNEL.S
ASM