PR#3 PREFIX /A2OSX.SRC NEW INC 1 AUTO 6 .LIST OFF .OP 65C02 .OR $2000 .TF /A2OSX.BOOT/SYS/KERNEL *-------------------------------------- .INB INC/MACROS.I .INB INC/A2OSX.I .INB INC/IO.I .INB INC/PRODOS.I *-------------------------------------- TmpPtr1 .EQ $0 for X.PRINTF.S ZPQuickPtr1 .EQ ZPKERNEL Temp Ptrs for use in very limited scope ZPQuickPtr2 .EQ ZPKERNEL+2 (could be trashed by any JSR) ZPQuickPtr3 .EQ ZPKERNEL+4 ZPQuickPtr4 .EQ ZPKERNEL+6 *-------------------------------------- * Kernel Stage 2 *-------------------------------------- Kernel.Init2 >LDAXI MSG.Init2 jsr PrintCStrAX sei ldx #$FF init 6502 stack to highest txs sta SETALTZP stx A2osX.SaveSM stx A2osX.SaveSX sta CLRALTZP Make MAIN ZP is enabled for X.PRINT.F lda RROMBNK1 Make sure ROM is enabled for X.PRINT.F cli >LDAXI MSG.Relocate jsr PrintCStrAX sei sta SETALTZP >LDYAI A2osX.BE00 >STYA ZPQuickPtr1 >LDYAI $BE00 >STYA ZPQuickPtr2 >LDYAI A2osX.BE00.SIZE^$FFFF >STYA ZPQuickPtr3 jsr Kernel.Move lda RRAMWRAMBNK2 lda RRAMWRAMBNK2 >LDYAI A2osX.D002 >STYA ZPQuickPtr1 >LDYAI $D000 >STYA ZPQuickPtr2 >LDYAI A2osX.D002.SIZE^$FFFF >STYA ZPQuickPtr3 jsr Kernel.Move lda RRAMWRAMBNK1 lda RRAMWRAMBNK1 >LDYAI A2osX.D001 >STYA ZPQuickPtr1 >LDYAI $D000 >STYA ZPQuickPtr2 >LDYAI A2osX.D001.SIZE^$FFFF >STYA ZPQuickPtr3 jsr Kernel.Move >LDYAI A2osX.E000 >STYA ZPQuickPtr1 >LDYAI $E000 >STYA ZPQuickPtr2 >LDYAI A2osX.E000.SIZE^$FFFF >STYA ZPQuickPtr3 jsr Kernel.Move >LDYAI D.STACK.TOP >STYA pStack init Soft Stack sta CLRALTZP Make MAIN ZP is enabled for X.PRINT.F lda RROMBNK1 Make sure ROM is enabled for X.PRINT.F cli lda #6 sta A2osX.HZ pha push HZ >LDAXI MSG.HZ jsr PrintCStrAX jsr CPU.Init >LDAXI MSG.K.INIT jsr PrintCStrAX sta SETALTZP lda RRAMWRAMBNK1 lda RRAMWRAMBNK1 jsr S.IrqMgrInit bcs * jsr S.MemMgrInit bcs * jsr S.DevMgrInit bcs * jsr S.EvtMgrInit bcs * jsr S.TskMgrInit bcs * sta CLRALTZP Make sure MAIN ZP... lda RROMBNK1 ... & ROM is enabled for X.PRINT.F >LDAXI MSG.Init2.OK jsr PrintCStrAX sta SETALTZP lda RRAMWRAMBNK1 lda RRAMWRAMBNK1 >DEBUGOA *-------------------------------------- * Kernel Stage 3 *-------------------------------------- Kernel.Init3 ldx #DEVMGR.SELECT jsr pDevJmp >LDYAI MSG.Init3 >SYSCALL SYS.PSTROutYA ldy #S.PS.hPREFIX lda (pPs),y >SYSCALL SYS.GetMemPtrA >PUSHYA >LDYAI MSG.Prefix >SYSCALL SYS.PSTROutYA >PUSHWI STARTUP.CMDLINE >LDYAI MSG.Startup >SYSCALL SYS.PSTROutYA >LDYAI STARTUP.CMDLINE >SYSCALL SYS.CreateProcessYA bcs .9 >LDYAI MSG.Init3.OK >SYSCALL SYS.PSTROutYA >LDYAI TskMgr.Table >STYA pPs jmp S.KernelRun .9 >PUSHA >LDYAI MSG.StartupErr >SYSCALL SYS.PSTROutYA bra * *-------------------------------------- Kernel.Move ldy #0 .1 inc ZPQuickPtr3 bne .2 inc ZPQuickPtr3+1 beq .9 .2 lda (ZPQuickPtr1),y sta (ZPQuickPtr2),y iny bne .1 inc ZPQuickPtr1+1 inc ZPQuickPtr2+1 bne .1 .9 rts *-------------------------------------- .INB X.PRINTF.S .INB SYS/KERNEL.S.CPU .INB SYS/KERNEL.S.INIT *-------------------------------------- MSG.Init2 >CSTRING "A2osX[Stage2]:Init\n" MSG.Relocate >CSTRING "Relocating KERNEL...\n" MSG.HZ >CSTRING "Kernel SYS Timer Set For %d0 hz Machine.\n" MSG.K.INIT >CSTRING "Kernel Setup...\n" MSG.Init2.OK >CSTRING "A2osX[Stage2]:Complete.\n" *-------------------------------------- MSG.Init3 >PSTRING "A2osX[Stage3]:Init\n" MSG.Prefix >PSTRING "Prefix:%S\n" MSG.Startup >PSTRING "Executing Kernel Startup Script...\nCmd:%S\n" MSG.StartupErr >PSTRING "Failed : [$%h]\n" MSG.Init3.OK >PSTRING "A2osX[Stage3]:Complete.\n" *-------------------------------------- STARTUP.CMDLINE >PSTRING "${A2OSX}SBIN/SHELL ${A2OSX}A2osX.STARTUP" *-------------------------------------- * Global Page *-------------------------------------- A2osX.BE00 .EQ * .PH $BE00 .INB SYS/KERNEL.S.GP .EP A2osX.BE00.END .EQ * *-------------------------------------- * LC AUX $D000 BANK1 *-------------------------------------- A2osX.D001 .EQ * .PH $D000 .INB SYS/KERNEL.S.JMP .INB SYS/KERNEL.S.RUN .INB SYS/KERNEL.S.STR .INB SYS/KERNEL.S.CIO .INB SYS/KERNEL.S.FIO .INB SYS/KERNEL.S.MLI .INB SYS/KERNEL.S.ARG .INB SYS/KERNEL.S.ENV .INB SYS/KERNEL.S.EVT .EP A2osX.D001.END .EQ * *-------------------------------------- * LC AUX $D000 BANK2 *-------------------------------------- A2osX.D002 .EQ * .PH $D000 .INB SYS/KERNEL.S.REL .EP A2osX.D002.END .EQ * *-------------------------------------- * LC AUX $E000 *-------------------------------------- A2osX.E000 .EQ * .PH $E000 .INB SYS/KERNEL.S.IRQ .INB SYS/KERNEL.S.MEM .INB SYS/KERNEL.S.BIN .INB SYS/KERNEL.S.DRV .INB SYS/KERNEL.S.LIB .INB SYS/KERNEL.S.TSK .INB SYS/KERNEL.S.PS *-------------------------------------- * Make sure KERNEL.S.DEV is the last one *-------------------------------------- .INB SYS/KERNEL.S.DEV .EP A2osX.E000.END .EQ * *-------------------------------------- .LIST ON *-------------------------------------- A2osX.BE00.SIZE .EQ A2osX.BE00.END-A2osX.BE00 A2osX.D001.SIZE .EQ A2osX.D001.END-A2osX.D001 A2osX.D002.SIZE .EQ A2osX.D002.END-A2osX.D002 A2osX.E000.SIZE .EQ A2osX.E000.END-A2osX.E000 *-------------------------------------- .LIST OFF MAN SAVE SYS/KERNEL.S ASM