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 MAIN ZP is enabled for X.PRINT.F lda RROMBNK1 Make sure 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 >LDYAI MSG.StartupFile >SYSCALL SYS.PSTROutYA >LDYAI STARTUP.ARGS Get A2osX.STARTUP full path... >SYSCALL SYS.NewPStrYA pha >LDYAI STARTUP.CMD Get SHELL full path... >SYSCALL SYS.NewPStrYA ply get back ARGS in Y phy pha A=CMD, save for discard >SYSCALL SYS.CreateProcessYA bcc .1 >PUSHA >LDYAI MSG.StartupErr >SYSCALL SYS.PSTROutYA bra * .1 pla >SYSCALL SYS.FreeMemA pla >SYSCALL SYS.FreeMemA >LDYAI MSG.Init3.OK >SYSCALL SYS.PSTROutYA >LDYAI TskMgr.Table >STYA pPs jmp S.KernelRun *-------------------------------------- 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.StartupFile >PSTRING "EXEC A2osX.Startup...\n" MSG.StartupErr >PSTRING "SHELL A2osX.Startup Failed with Error : [$%h]\n" MSG.Init3.OK >PSTRING "A2osX[Stage3]:Complete.\n" *-------------------------------------- STARTUP.CMD >PSTRING "${A2OSX}SBIN/SHELL" STARTUP.ARGS >PSTRING "${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.STR .INB SYS/KERNEL.S.CIO .INB SYS/KERNEL.S.FIO .INB SYS/KERNEL.S.MLI .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.RUN .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 *-------------------------------------- * 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