mirror of
https://github.com/A2osX/A2osX.git
synced 2024-11-26 13:49:18 +00:00
266 lines
6.1 KiB
Plaintext
266 lines
6.1 KiB
Plaintext
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.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.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
|
||
*--------------------------------------
|
||
* 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
|