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