A2osX/SYS/KERNEL.S.txt

542 lines
10 KiB
Plaintext
Raw Normal View History

2015-03-08 21:45:23 +00:00
PR#3
PREFIX /DATA/A2osX
NEW
INC 1
AUTO 6
.LIST OFF
.OP 65C02
.OR $E000
.TF SYS/KERNEL
*--------------------------------------
.INB INC/MACROS.I
.INB INC/KERNEL.I
.INB INC/A2OSX.I
.INB INC/IO.I
.INB INC/PRODOS.I
*--------------------------------------
KERNEL.BOOT jmp S.Kernel
*--------------------------------------
KERNEL.SYSCALL jmp (.1,x)
*--------------------------------------
.1 .DA S.GetMem $00
.DA S.FreeMemA
.DA S.ClrMemA
.DA S.GetMemPtrA
.DA S.GetMemLenA
.DA S.GetMemByIDA
.DA S.GetMemByNameA
.DA 0
*--------------------------------------
.DA S.NewPStr $10
.DA S.PStrCpyA
.DA S.PStrCat
.DA S.PStrCmp
.DA S.PStrGetTkn
.DA S.GetPStrIndex
.DA 0
.DA 0
*--------------------------------------
.DA S.LoadBinA $20
.DA S.LoadLib
.DA S.UnloadLibA
.DA S.LoadDrvA
.DA 0
.DA 0
.DA 0
.DA 0
*--------------------------------------
.DA S.ExpandPStrA $30
.DA S.ExpandPStr
.DA S.GetEnvVarH
.DA S.GetEnvVarP
.DA S.SetEnvVarH
.DA S.SetEnvVarP
.DA 0
.DA 0
*--------------------------------------
.DA S.MLICreate $40
.DA S.MLIDestroy
.DA S.MLIRename
.DA S.MLISetFileInfo
.DA S.MLIGetFileInfoA
.DA S.MLIOnline
.DA S.MLISetPrefix
.DA S.MLIGetPrefixA
.DA S.MLIOpenA $50
.DA S.MLINewLine
.DA S.MLIRead
.DA S.MLIWrite
.DA S.MLICloseA
.DA S.MLIFlushA
.DA S.MLISetMark
.DA S.MLIGetMark
.DA S.MLISetEOF $60
.DA S.MLIGetEOFA
.DA 0
.DA 0
.DA 0
.DA 0
.DA 0
.DA 0
*--------------------------------------
.DA S.GetDevByIDA $70
.DA S.GetDevByNameA
.DA S.GetDevTable
.DA S.GetDevInfoA
.DA S.DevOutA
.DA 0
.DA 0
.DA 0
*--------------------------------------
.DA S.GetEvent $80
.DA S.DestroyEvent
.DA 0
.DA 0
.DA 0
.DA 0
.DA 0
.DA 0
*--------------------------------------
.DA S.ExecProcessA $90
.DA S.CreateProcessA
.DA 0
.DA 0
.DA S.GetPSByIDA
.DA 0
.DA 0
.DA 0
*--------------------------------------
.DA S.CheckPrefixA $A0
.DA S.FileSearch
.DA S.LoadFileA
.DA S.ListDirInitA
.DA S.ListDirNextA
.DA S.ListDirCloseA
.DA 0
.DA 0
*--------------------------------------
.DA S.AddNetCfg $B0
.DA S.SetNetCfg
.DA S.GetNetCfgA
.DA S.ClrNetCfgA
.DA 0
.DA 0
.DA 0
.DA 0
*--------------------------------------
S.Kernel jsr S.KernelInit
jsr S.KernelRun
jsr S.KernelQuit
bra *
*--------------------------------------
S.KernelInit >LDYAI D.STACKSEG
>STYA R.SP init Soft Stack
>STYA R.LS init LS
stz A2osX.SCREENS
stz A2osX.ACTIVESCRN
jsr S.SysScrInit
>LDYAI MSG.INIT0
jsr S.SysScrPPSTR
>LDYAI MSG.INIT1
jsr S.SysScrPPSTR
jsr S.MemMgrInit
jsr S.SysScrPRCode
bcs .1
>LDYAI MSG.INIT2
jsr S.SysScrPPSTR
jsr S.TskMgrInit
jsr S.SysScrPRCode
.1 bcs .2
>LDYAI MSG.INIT3
jsr S.SysScrPPSTR
jsr S.DevMgrInit
jsr S.SysScrPRCode
.2 bcs .3
>LDYAI MSG.INIT4
jsr S.SysScrPPSTR
jsr S.EvtMgrInit
jsr S.SysScrPRCode
.3 bcs .99
>LDYAI MSG.INIT5
jsr S.SysScrPPSTR
>PUSHWI STARTUP.FILE Build A2osX.STARTUP full path...
jsr S.NewPStr
pha save for discard
>PUSHA
>PUSHWI ENV.A2osX get KRNL root path
ldy #S.PS.hENV
lda TSKMGR.TABLE,y
>PUSHA
jsr S.GetEnvVarP
pha save for discard
>PUSHA
jsr S.PStrCat
pha save for discard
jsr S.ExecFileA
bcs .99
pla
jsr S.FreeMemA
pla
jsr S.FreeMemA
pla
jsr S.FreeMemA
>LDYAI MSG.INIT6
jsr S.SysScrPPSTR
jsr S.PrintSysEnv
.99 rts
*--------------------------------------
S.KernelRun jsr S.TskMgrRun
bcs .98
jsr S.SysScrCPULoad
jsr S.GetEvent
bcs S.KernelRun CS=no event
jsr S.DispatchEvent
bcc S.KernelRun CC=Event Dispatched
lda (EVTMGR.EVTPTR)
and #S.EVT.F.TIMER Discard any TIMER event
beq .1
jsr S.DestroyEvent
bra S.KernelRun
.1 lda (EVTMGR.EVTPTR)
and #S.EVT.F.KEY any special key?
beq .99
ldy #S.EVT.DATAHI Open-Apple?
lda (EVTMGR.EVTPTR),y
bpl .99
ldy #S.EVT.DATALO
lda (EVTMGR.EVTPTR),y
cmp #$31
bne .2
lda #A2osX.SCREENS.S
jsr S.ScreenSelectA
bra .8
.2 cmp #$32
bne .3
lda #A2osX.SCREENS.C
jsr S.ScreenSelectA
bra .8
.3 cmp #$33
bne .8
lda #A2osX.SCREENS.G
jsr S.ScreenSelectA
.8 jsr S.DestroyEvent
bra S.KernelRun
.98 lda #A2osX.SCREENS.S
jsr S.ScreenSelectA
>LDYAI MSG.KRNLPANIC
jsr S.SysScrPPSTR
bra *
.99 >LDYAI MSG.EVNTPANIC
jsr S.SysScrPPSTR
lda (EVTMGR.EVTPTR)
jsr S.SysScrPRBYTEA
ldy #S.EVT.hDEV
lda (EVTMGR.EVTPTR),y
jsr S.SysScrPRBYTEA
ldy #S.EVT.DATALO
lda (EVTMGR.EVTPTR),y
jsr S.SysScrPRBYTEA
ldy #S.EVT.DATAHI
lda (EVTMGR.EVTPTR),y
jsr S.SysScrPRBYTEA
lda #'.'
jsr S.SysScrCOUTA
ldy #S.EVT.DATAW1
lda (EVTMGR.EVTPTR),y
jsr S.SysScrPRBYTEA
iny
lda (EVTMGR.EVTPTR),y
jsr S.SysScrPRBYTEA
lda #'.'
jsr S.SysScrCOUTA
ldy #S.EVT.DATAW2
lda (EVTMGR.EVTPTR),y
jsr S.SysScrPRBYTEA
iny
lda (EVTMGR.EVTPTR),y
jsr S.SysScrPRBYTEA
jsr S.DestroyEvent
jmp S.KernelRun
*--------------------------------------
S.KernelQuit clc
rts
*--------------------------------------
* PUBLIC
*--------------------------------------
* S.ScreenSelectA
* IN :
* A = Screen to display
*--------------------------------------
S.ScreenSelectA and A2osX.SCREENS Screen is available ?
beq .9 ...not setup up
cmp #A2osX.SCREENS.S
bne .1
sta SETTEXT
sta SET80DISP
sta CLR80STORE
sta SETPAGE2
sta SETALTCHAR
lda #A2osX.SCREENS.S
bra .8
.1 cmp #A2osX.SCREENS.C
bne .2
sta SETTEXT
sta SET80DISP
sta SET80STORE
sta CLRPAGE2
sta SETALTCHAR
lda #A2osX.SCREENS.C
bra .8
.2 cmp #A2osX.SCREENS.G
bne .9
sta CLRMIXED
sta SETHIRES
sta CLRTEXT
sta SETIOUDIS
sta CLR80DISP
sta SETDHIRES
sta CLRDHIRES
sta SETDHIRES
sta CLRDHIRES
sta SET80DISP
sta SETDHIRES
sta CLRDHIRES
sta SETDHIRES
lda #A2osX.SCREENS.G
.8 sta A2osX.ACTIVESCRN
.9 rts
*--------------------------------------
* S.ExecFileA (R)
* in :
* A = hMem of FilePath (PSTRING)
* out :
*--------------------------------------
* LS : (8)
* 0 = hMem of Loaded File
* 2 = PTR to File data
* 4 = Data Len
* 6 = CMD hMem
* 7 = ARGS hMem
*--------------------------------------
S.ExecFileA jsr S.LoadFileA
bcc S.ExecFileAOK
rts
S.ExecFileAOK >ADDLOCAL 8
>STYAL 4 Store File Length
txa
>STAL 0 hMem of Loaded File
jsr S.GetMemPtrA
>STYAL 2
.1 stz TmpBuffer256
.2 >LDYAL 2
>STYA ZPQuickPtr1
>INCLW 2
>DECLW 4
lda (ZPQuickPtr1)
cmp #$0D
beq .3
inc TmpBuffer256
ldx TmpBuffer256
sta TmpBuffer256,x
>LDAL 4
bne .2
>LDAL 5
bne .2
.3 lda TmpBuffer256
beq .4
lda TmpBuffer256+1
cmp #'*'
beq .4
lda #'-'
jsr S.SysScrCOUTA
lda #'>'
jsr S.SysScrCOUTA
>LDYAI TmpBuffer256
jsr S.SysScrPPSTR
>PUSHWI TmpBuffer256
jsr S.NewPStr
bcs .99
pha
jsr S.ExecCmdLineA
jsr S.SysScrPRCode
pla
jsr S.FreeMemA
.4 >LDAL 4
.5 bne .6
>LDAL 5
beq .8
.6 jmp .1
.8 jsr .99
clc
rts
.99 >LDAL 0
jsr S.FreeMemA
>REMLOCAL 8
sec
rts
*--------------------------------------
S.ExecCmdLineA >PUSHA
>PUSHBI $20 Push SEP=' '
>PUSHBI 0 Push Token IDX
jsr S.PStrGetTkn
bcs .99
>STAL 6
pha
txa
>STAL 7
pla
jsr S.GetMemPtrA
>PUSHYA
>PUSHWI EXECCMDS
jsr S.GetPStrIndex
bcs .98
asl
tax
>LDAL 7
jsr S.ExecCmdLine
bcs .98
jsr .98
clc
rts
.98 pha
>LDAL 7
jsr S.FreeMemA
>LDAL 6
jsr S.FreeMemA
pla
.99 sec
rts
*--------------------------------------
S.ExecCmdLine jmp (.1,x)
.1 .DA S.SetSysEnvA
.DA S.LoadDrvA VCPU!!!!
.DA S.CreateProcessA VCPU!!!!
*--------------------------------------
S.SetSysEnvA >PUSHA Push Cmd Line
>PUSHBI $3D Push SEP='='
>PUSHBI 0 Push Token IDX
jsr S.PStrGetTkn
bcs *
phx save X,A for discard
pha
pha
txa
>PUSHA
pla
>PUSHA
ldy #S.PS.hENV
lda TSKMGR.TABLE,y
>PUSHA
jsr S.SetEnvVarH
pla disard NAME
jsr S.FreeMemA
pla discard VALUE
jmp S.FreeMemA
*--------------------------------------
S.PrintSysEnv ldy #S.PS.hENV
lda TSKMGR.TABLE,y Get PS #0 ENV
jsr S.GetMemPtrA
>STYA R.AX
.1 lda (R.AX)
beq .8 Ending 0 ?
>LDYA R.AX
jsr S.SysScrPPSTR
jsr S.SysScrCROUT
lda R.AL
sec
adc (R.AX) Add len+1 to PTR
sta R.AL
bcc .1
inc R.AH
bra .1
.8 rts
*--------------------------------------
EXECCMDS >PSTRING "SET"
EXECCMDS1 >PSTRING "LOAD"
EXECCMDS2 >PSTRING "EXEC"
.DA #0
*--------------------------------------
MSG.INIT0 >PSTRING "\nKernel Startup...\n"
MSG.INIT1 >PSTRING "->MemMgr Init"
MSG.INIT2 >PSTRING "->TskMgr Init"
MSG.INIT3 >PSTRING "->DevMgr Init"
MSG.INIT4 >PSTRING "->EvtMgr Init"
MSG.INIT5 >PSTRING "EXEC A2osX.Startup...\n"
MSG.INIT6 >PSTRING "SYS ENV:\n"
MSG.EVNTPANIC >PSTRING "\nEVT:F/hDev/DATA/W1/W2="
MSG.KRNLPANIC >PSTRING "\n\n!!!Kernel Panic!!!"
*--------------------------------------
STARTUP.FILE >PSTRING "A2osX.STARTUP"
*--------------------------------------
ENV.A2osX >PSTRING "A2OSX"
ENV.PATH >PSTRING "PATH"
ENV.DRV >PSTRING "DRV"
ENV.ETC >PSTRING "ETC"
ENV.LIB >PSTRING "LIB"
*--------------------------------------
.INB SYS/KERNEL.S.BIN
.INB SYS/KERNEL.S.DEV
.INB SYS/KERNEL.S.ENV
.INB SYS/KERNEL.S.EVT
.INB SYS/KERNEL.S.FS
.INB SYS/KERNEL.S.MEM
.INB SYS/KERNEL.S.MLI
.INB SYS/KERNEL.S.NET
* .INB SYS/KERNEL.S.RDR
.INB SYS/KERNEL.S.SCR
.INB SYS/KERNEL.S.STR
.INB SYS/KERNEL.S.TSK
*--------------------------------------
MAN
SAVE SYS/KERNEL.S
ASM