PR#3 PREFIX /A2OSX.SRC NEW INC 1 AUTO 6 .LIST OFF *-------------------------------------- Kernel.Init3 jsr K.DevMgrInit bcs * lda #1 SYS device >SYSCALL GetDevByIDA >STYA pDev ldx #DEVMGR.OPEN jsr pDevJmp ldx #DEVMGR.SELECT jsr pDevJmp lda #2 sta A2osX.ASCREEN >LDYAI MSG.Init3 >SYSCALL PrintFYA >LDYAI MSG.IRQ >SYSCALL PrintFYA jsr K.IrqMgrInit bcs * >LDYAI MSG.MEM >SYSCALL PrintFYA jsr K.MemMgrInit bcs * >LDYAI MSG.EVT >SYSCALL PrintFYA jsr K.EvtMgrInit bcs * >LDYAI MSG.FLT >SYSCALL PrintFYA jsr K.FltMgrInit bcs * >LDYAI MSG.TSK >SYSCALL PrintFYA jsr K.TskMgrInit bcs * ldy #S.PS.hPREFIX lda (pPs),y >SYSCALL GetMemPtrA >PUSHYA >LDYAI MSG.Prefix >SYSCALL PrintFYA >PUSHWI STARTUP.CMDLINE >LDYAI MSG.Startup >SYSCALL PrintFYA >LDYAI STARTUP.CMDLINE >SYSCALL CreateProcessYA bcs .9 >LDYAI MSG.Init3.OK >SYSCALL PrintFYA >LDYAI TskMgr.Table >STYA pPs >DEBUGOA bit RRAMWRAMBNK2 bit RRAMWRAMBNK2 jmp K.KernelRun .9 >PUSHA >LDYAI MSG.StartupErr >SYSCALL PrintFYA bra * *-------------------------------------- * K.DevMgrInit *-------------------------------------- K.DevMgrInit 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 * >LDYAI DevMgr.LoMem Hard Coded * >STYA DevMgr.Free * lda #DevMgr.Count-1 * sta DevMgr.LastDevID clc rts *-------------------------------------- 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.EvtMgrInit *-------------------------------------- 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 *-------------------------------------- K.FltMgrInit stz FltMgr.Table clc rts *-------------------------------------- * K.TskMgrInit *-------------------------------------- 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.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