A2osX/SYS/KERNEL.S.INIT.txt

1394 lines
25 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

NEW
AUTO 3,1
*--------------------------------------
Kernel.Init2 sei
ldx #$FF
txs
sta SETALTZP
stx SaveSM
stx SaveSX
ldx #Kernel.ZP.S-1
.1 lda Kernel.ZP,x
sta CHARGET,x
dex
bpl .1
sta CLRALTZP
>LDYAI MSG.Init2
jsr PrintFYA
>LDYA PAKME.MAIN
>STYA ZPInBufPtr
>LDYAI A2osX.EndTables
jsr A2osX.Unpak
>LDYA PAKME.AUX
>STYA ZPInBufPtr
>LDYAI $9F00
jsr A2osX.Unpak
>LDYAI $9F00
>STYA ZPPtr1
>LDYAI Mem.XHiMem
>STYA ZPPtr2
lda #AUX.S
eor #$ff
tax
lda /AUX.S
eor #$ff
pha
ldy #0
sta SETWRITEAUX
.2 inx
bne .3
pla
inc
beq .4
pha
.3 lda (ZPPtr1),y
sta (ZPPtr2),y
iny
bne .2
inc ZPPtr1+1
inc ZPPtr2+1
bra .2
.4 sta CLRWRITEAUX
>LDYA PAKME.GP
>STYA ZPInBufPtr
>LDYAI A2osX.SYSCALL
jsr A2osX.Unpak
sta SETALTZP
lda RRAMWRAMBNK2
lda RRAMWRAMBNK2
>LDYA PAKME.D2
>STYA ZPInBufPtr
>LDYAI $D000
jsr A2osX.Unpak
lda RRAMWRAMBNK1
lda RRAMWRAMBNK1
>LDYA PAKME.D1
>STYA ZPInBufPtr
>LDYAI $D000
jsr A2osX.Unpak
>LDYA PAKME.E0
>STYA ZPInBufPtr
>LDYAI $E000
jsr A2osX.Unpak
lda RROMBNK1
sta CLRALTZP
cli
jsr KConfigLoad
lda A2osX.HZ
pha
>LDYAI MSG.HZ
jsr PrintFYA
>LDYAI MSG.Init2.OK
jsr PrintFYA
*--------------------------------------
>DEBUGOA
*--------------------------------------
Kernel.Init3 sta SETALTZP
lda RRAMWRAMBNK1
lda RRAMWRAMBNK1
lda #$ff Make sure we are in Kernel Mode during setup
sta IRQ.InKernel
stz IRQ.InLib
lda /K.VER
sta A2osX.KVER
lda #K.VER
sta A2osX.KVER+1
sta SETALTCHAR
sta SETMIXED
sta CLRHIRES
sta SET80DISP
sta SET80STORE
sta CLRPAGE2
lda RDIOUDIS
sta SETIOUDIS
sta SETDHIRES
bmi .10
sta CLRIOUDIS
.10 jsr MemMgrInit
>LDYAI S.PS Select Process 0 (Kernel)
jsr K.GetMem0
>STYA pPs
stx PS.Table.hPS
jsr Mem.SetOwner
lda #1
sta CORE.PSCount
>LDYAI K.STACKTOP
>STYA pStack
sta pBase+1
>PUSHWI FD.NULL
>PUSHWI FD.NULL.NAME
>SYSCALL2 MKDev
jsr SysScrInit
bcs *
* sta CLRMIXED
>PUSHWI DEV.CONSOLE
>PUSHBI O.RDWR
>PUSHBI S.FI.T.TXT
>PUSHWZ Aux type
>SYSCALL2 fopen
bcs *
ldy #S.PS.hStdIn
sta (pPS),y
iny #S.PS.hStdOut
sta (pPS),y
iny #S.PS.hStdErr
sta (pPS),y
*--------------------------------------
Kernel.Init3C >PUSHWI MSG.Init3
>PUSHBI 0
>SYSCALL2 printf
jsr HW.Detect
jsr CPU.Init
jsr CPU.Init.Z80
jsr DevMgrInit
jsr IrqMgrInit
bcs *
jsr EvtMgrInit
jsr TskMgrInit
bcs *
jsr PwdMgrInit
>PUSHWI MSG.EXEC
>PUSHWI SBININITD
>PUSHBI 2
>SYSCALL PrintF
>PUSHWI SBININITD
>PUSHBI 0 PS Flags
>SYSCALL2 ExecV
bcs Kernel.Init3.Err
>PUSHWI MSG.Init3.OK
>PUSHBI 0
>SYSCALL2 printf
>DEBUGOA
jmp CORE.Run
Kernel.Init3.Err
pha
>PUSHWI MSG.StartupErr
pla
>PUSHA
>PUSHBI 1
>SYSCALL2 printf
bra * No need to discard Expanded CMDLINE
*--------------------------------------
* INIT2 Subs
*--------------------------------------
KConfigLoad >LDYAI MSG.KCREAD
jsr PrintFYA
jsr MLIENTRY Bypass ATALK
.DA #MLIGETFILEINFOEX
.DA pMLIGFIEX
bcc .1
eor #MLI.E.BADCALL
beq .2 regular ProDOS
ror A2osX.FSID Bad file, but ProDOS.FX detected
bra .9
.1 sec
ror A2osX.FSID File Present & ProDOS.FX detected
.2 jsr MLI
.DA #MLIOPEN
.DA pMLIOPEN
bcs .9
lda pMLIOPEN+5
sta pMLIREAD+1
sta pMLICLOSE+1
jsr MLI
.DA #MLIREAD
.DA pMLIREAD
php
pha
jsr MLI
.DA #MLICLOSE
.DA pMLICLOSE
pla
plp
bcs .9
>LDYAI MSG.KCREAD.OK
bra .8
.9 >LDYAI MSG.KCREAD.KO
.8 jsr PrintFYA
lda A2osX.FSID
beq .99
>LDYAI MSG.PRODOSFX
jsr PrintFYA
.99 rts
*--------------------------------------
* INIT3 Subs
*--------------------------------------
MemMgrInit >LDYAI Mem.MHiMem
>STYA Mem.HiMem
>STYA Mem.Free
>LDYAI Mem.MLoMem
>STYA Mem.LoMem
stz Mem.LastSlot Reserve Slot #0
sta SETWRITEAUX
>LDYAI Mem.XLoMem
>STYA Mem.LoMem
stz Mem.LastSlot Reserve Slot #0
sta CLRWRITEAUX
ldx #K.hFD.MAX-1
.1 stz hFDs,x
stz hFDs.hName,x
stz hFDs.oCnt,x
dex
bpl .1
ldx #K.PS.MAX*4-1
.3 stz PS.Table.PID,x
dex
bpl .3
ldx #K.EVT.MAX*S.EVT-1
.5 stz Evt.Table,x
dex
bpl .5
ldx #K.USR.MAX*2-1
.6 stz S.Table.hSID,x
dex
bpl .6
ldx #K.FLT.MAX*4-1
.7 stz Flt.Table.pftLO,x
dex
bpl .7
rts
*--------------------------------------
SysScrInit >LDYAI Mem.XHiMem
>STYA FD.TTY+S.FD.DEV.DCBPTR
jsr SysScrInit.TTYPtrs
>PUSHWI FD.TTY
>PUSHWI FD.CONSOLE.NAME
>SYSCALL2 MKDev
bcs .9
ldx A2osX.TTYDEVS
.1 phx
inc FD.TTY+S.FD.DEV.DEVID
inc FD.TTY.NAME+3
jsr SysScrInit.TTYPtrs
>PUSHWI FD.TTY
>PUSHWI FD.TTY.NAME
>SYSCALL2 MKDev
plx
bcs .9
dex
bne .1
* clc
.9 rts
*--------------------------------------
SysScrInit.TTYPtrs
lda FD.TTY+S.FD.DEV.DCBPTR
sec
sbc #80*24+S.DCB.TTY
sta FD.TTY+S.FD.DEV.DCBPTR
sta ZPPtr1
tay
lda FD.TTY+S.FD.DEV.DCBPTR+1
sbc /80*24+S.DCB.TTY
sta FD.TTY+S.FD.DEV.DCBPTR+1
sta ZPPtr1+1
sta SETWRITEAUX
>STYA Mem.HiMem
>STYA Mem.Free
ldy #S.DCB.TTY-1
lda #0
.1 sta (ZPPtr1),y
dey
bne .1
lda FD.TTY+S.FD.DEV.DEVID
sta (ZPPtr1)
sta CLRWRITEAUX
rts
*--------------------------------------
* http://www.1000bit.it/support/manuali/apple/technotes/misc/tn.misc.02.html
* https://mirrors.apple2.org.za/apple.cabi.net/FAQs.and.INFO/A2.TECH.NOTES.ETC/A2.CLASSIC.TNTS/a2misc007(1).htm
*--------------------------------------
HW.Detect >PUSHWI MSG.HW
>PUSHBI 0
>SYSCALL2 printf
bit RROMBNK1
stz A2osX.HWType
stz A2osX.HWSubT
sec
jsr $FE1F IIgs ?
bcs .2
lda #A2osX.HWType.IIgs
sta A2osX.HWType
cpy #2
bne .1
iny
.1 sty A2osX.HWSubT
bra .8
.2 lda $FBC0
beq .4 //c
ldx #A2osX.HWType.IIe
stx A2osX.HWType
cmp #$EA
beq .8 //e OLD ROMs
inc A2osX.HWSubT //e Enh ROMs
lda $FBDD
cmp #2
bne .8
inc A2osX.HWSubT //e LC card
bra .8
.4 lda #A2osX.HWType.IIc
sta A2osX.HWType
lda $FBBF
sta A2osX.HWSubT
.8 bit RRAMWRAMBNK1
bit RRAMWRAMBNK1
>PUSHWI MSG.HW.TypeSubT
>PUSHB A2osX.HWType
>PUSHB A2osX.HWSubT
>PUSHBI 2
>SYSCALL2 printf
rts
*--------------------------------------
CPU.Init >PUSHWI MSG.CPU
>PUSHBI 0
>SYSCALL2 printf
jsr Detect6502 A = CPU type
sta A2osX.CPUTYPE
and #$F
asl
tax
ldy MSG.CPUTYPE,x
lda MSG.CPUTYPE+1,x
>SYSCALL2 puts
>PUSHWI MSG.CPU.SPEED
>PUSHB A2osX.HZ
>PUSHBI 1
>SYSCALL2 printf
stz A2osX.CPUSPEED+1
ldx A2osX.HZ
ldy #0
php
sei
lda A2osX.HWType
cmp #A2osX.HWType.IIc
beq CPU.Init2c
.1 bit VBL //e : Wait VBL high....
bpl .1
.2 lda VBL //e : wait VBL low
bmi .2
.3 pha (3)
pla (4)
pha (3)
pla (4)
pha (3)
pla (4)
pha (3)
pla (4)
pha (3)
pla (4)
iny
cpy #100
bne .5
ldy #0
inc A2osX.CPUSPEED+1
.5 eor VBL (4)
bpl .3 (2*)
dex
bne .3
bra CPU.InitOK
*--------------------------------------
CPU.Init2c lda RDIOUDIS
pha
sta CLRIOUDIS
lda IO.IIC.RDVBLMSK
pha Save VBLIRQ enable
sta IO.IIC.ENVBL
lda IO.IIC.CLRVBLIRQ
.1 bit VBL Wait VBL high....
bpl .1
bit IO.IIC.CLRVBLIRQ clear //c IRQ
.3 lda #60
.4 pha (3)
pla (4)
pha (3)
pla (4)
dec
bne .4
iny
cpy #100
bne .5
inc A2osX.CPUSPEED+1
ldy #0
.5 bit VBL Wait VBL high....
bpl .3
bit IO.IIC.CLRVBLIRQ clear //c IRQ
dex
bne .3
pla Disable VBLIRQ ?
bpl .8
sta IO.IIC.DISVBL
.8 pla
bpl CPU.InitOk
sta SETIOUDIS
*--------------------------------------
CPU.InitOk plp
sty A2osX.CPUSPEED
>PUSHWI MSG.CPU.SPEEDOK
lda A2osX.CPUSPEED+1
>PUSHA push CPU speed HI
lda A2osX.CPUSPEED
>PUSHA push CPU speed LO
>PUSHBI 2
>SYSCALL2 printf
rts
*--------------------------------------
CPU.Init.Z80 >PUSHWI MSG.Z80
>PUSHBI 0
>SYSCALL2 printf
jsr DetectZ80
bcs .9
sta A2osX.Z80SLOT
tax
lda #A2osX.S.Z80
sta A2osX.S,x
>PUSHWI MSG.Z80.OK
lda A2osX.Z80SLOT
>PUSHA
>PUSHBI 1
>SYSCALL2 printf
rts
.9 >LDYAI MSG.Z80.KO
>SYSCALL2 puts
rts
*--------------------------------------
* Out:
* A = $60, 6502
* A = $61, 65C02
* A = $62, 65R02
* A = $63, 65816
*--------------------------------------
Detect6502 ldy #0 Test 6502 BCD bug
sed
lda #$99
clc
adc #$01
cld
bmi .9 BUG!, we have 6502
ldy #3 test 65C816 TYX Instruction
ldx #0
.OP 65816
tyx TYX: if 65C816, x becomes non-zero
.OP 65C02
bne .9 worked! 65C816
dey y=2 -> R65C02
ldx $EA save zp $EA
stz $EA store 0 in $EA
* .OP 65R02
.HS F7EA For compatibility with A2osX.ASM
* smb 7,$EA if not Rockwell, assemble as nop nop
* .OP 65C02
asl $EA cs if Rockwell
stx $EA restore zp $EA
bcs .9
dey y=1 -> 65C02
.9 tya
ora #$60
rts
*--------------------------------------
* Out:
* A = Z80 Slot
*--------------------------------------
DetectZ80 ldx #Z80Code.Size
.1 lda Z80Code.Start-1,x
sta Z80CODE-1,x 00000H for Z80
dex
bne .1
stz ZPPtr1
lda #$C1
sta ZPPtr1+1
.2 sta (ZPPtr1)
lda $100D
bmi .8
inc ZPPtr1+1
lda ZPPtr1+1
cmp #$C8
beq .9 CS
clc
adc #$20
sta $100A
bra .2
.8 lda ZPPtr1+1
and #$0F
clc
.9 rts
*--------------------------------------
DevMgrInit >LDYAI MSG.DEV
>SYSCALL2 puts
jsr DevMgrInit.VXD
lda DEVCNT
sta .1+1
.1 ldx #$ff SELF MODIFIED
lda DEVLST,x
and #$F0
asl
php Save Drive 1/2 in C
ror DSSS0000
lsr
lsr
lsr
tax 000DSSS0
lsr 0000DSSS
and #$7
sta FD.BDEV+S.FD.DEV.BUSID
ora #$30
sta FD.BDEV.NAME+1 SnDy
lda DEVPTRS,x
sta FD.BDEV+S.FD.DEV.BUSPTR
lda DEVPTRS+1,x
sta FD.BDEV+S.FD.DEV.BUSPTR+1
sta ZPPtr1+1
stz ZPPtr1 Cn00
plp
lda #0
adc #1 Make DevID 1 or 2
sta FD.BDEV+S.FD.DEV.DEVID
ora #$30
sta FD.BDEV.NAME+3 SxDn
lda ZPPtr1+1
cmp #$FF /RAM is always $FF00
bne .2
jsr DevMgrInit.RAM
bra .8 keep slot free
.2 cmp #$D0 Disk II Driver is $D000
bne .3
jsr DevMgrInit.DII
lda #A2osX.S.DII
bra .7 Go mark slot as USED
.3 bcs .53 > $D0, Some BLK remapped DRV
cmp #$C0
bcs .4 $C0 .. $CF, in slot ROM
jsr DevMgrInit.USR Outside ROM/LC space, User loaded BLK dev
bra .8 keep slot free
.4 ldx #SmartPort.SIG-SmartPort.OFS-1
.5 ldy SmartPort.OFS,x Check if there is a smartport firmware
lda (ZPPtr1),y
cmp SmartPort.SIG,x
bne .8 not a Disk Controller...
dex
bpl .5
ldy #7
lda (ZPPtr1),y
bne .6 $Cn07=00 : SmartPort
jsr DevMgrInit.SP
lda #A2osX.S.SP
bra .7
.53 jsr DevMgrInit.RSP Remapped SP devices....
bra .8 don't mark slot as busy
.6 jsr DevMgrInit.BLK
lda #A2osX.S.BLK
.7 ldx FD.BDEV+S.FD.DEV.BUSID
sta A2osX.S,x
.8 dec .1+1
bmi .80
jmp .1
.80 clc
rts
*--------------------------------------
DevMgrInit.RAM ldx #0
.HS 2C BIT ABS
*--------------------------------------
DevMgrInit.DII ldx #2
.HS 2C BIT ABS
*--------------------------------------
DevMgrInit.USR ldx #4
.HS 2C BIT ABS
*--------------------------------------
DevMgrInit.BLK ldx #6
bra DevMgrInit.AddBDev
*--------------------------------------
DevMgrInit.SP ldy #$ff
lda (ZPPtr1),y
clc
adc #3 Compute smartport entry point
sta FD.BDEV+S.FD.DEV.BUSPTR
ldx #8
.HS 2C BIT ABS
DevMgrInit.RSP ldx #10
*--------------------------------------
DevMgrInit.AddBDev
>LDYA DRV.BLKDEVX,x
>STYA FD.BDEV+S.FD.DEV.DRVPTR
>PUSHWI MSG.BLKDEV
>PUSHWI FD.BDEV.NAME
>PUSHW FD.BDEV+S.FD.DEV.BUSPTR
>PUSHW MSG.BLKDEV.TBL,x
>PUSHBI 6
>SYSCALL2 printf
>PUSHWI FD.BDEV
>PUSHWI FD.BDEV.NAME
>SYSCALL2 MKDev
rts
*--------------------------------------
DevMgrInit.VXD >LDYAI VSD.PATCH
jsr .10
bcc .8
>LDYAI VED.PATCH
jsr .10
bcs .9
.8 ldy #4
lda (ZPPtr1),y
sec
sbc #1
sta .81+1
iny
lda (ZPPtr1),y
sbc #0
sta .81+2
php
sei
bit RRAMWRAMBNK2
bit RRAMWRAMBNK2
sta CLRALTZP
.81 ldx $FFFF SELF MODIFIED : Slot0n
sta SETALTZP
bit RRAMWRAMBNK1
bit RRAMWRAMBNK1
lda #A2osX.S.VXDRIVE
sta A2osX.S,x
plp
.9 rts
*--------------------------------------
.10 >STYA ZPPtr1
ldy #VXD.PATCH.SIZE-1
.11 lda $BF41,y
cmp (ZPPtr1),y
bne .19
dey
bpl .11
clc
rts
.19 sec
rts
*--------------------------------------
VSD.PATCH bit RRAMWRAMBNK2
jsr $D002
bit RRAMWRAMBNK1
rts
*--------------------------------------
VED.PATCH bit RRAMWRAMBNK2
jsr $D401
bit RRAMWRAMBNK1
rts
VXD.PATCH.SIZE .EQ 10
*--------------------------------------
* Setup AuxLC $FFFE->Kernel IRQ Handler
* if irq not handled, jmp (S.IrqMgrOldFFFE)
*--------------------------------------
IrqMgrInit >LDYAI MSG.IRQ
>SYSCALL2 puts
php
sei
>LDYA $FFFE
>STYA IRQ.JMP+1
>LDYAI IRQ.Handler
>STYA $FFFE
>LDYAI GP.IRQ
>STYA K.MLI.PARAMS+2
>MLICALL MLIALLOCIRQ
bcs .9
lda K.MLI.PARAMS+1
sta IRQ.INTNUM
plp
*--------------------------------------
lda A2osX.HWType
cmp #A2osX.HWType.IIgs
bne .1
lda #"G"
sta IRQ.Mode
lda #$08
tsb IO.IIGS.INTEN
jsr IrqMgrInit.HZ2Tick
>LDYAI CORE.IRQ.IIGS
jsr IrqMgrInit.SetV
>LDYAI CORE.IRQ.IIGS.Off
>STYA CORE.Quit+3
>LDYAI MSG.IRQ.IIGS
bra .8
.9 plp
sec
rts
.1 cmp #A2osX.HWType.IIc
beq .2
jsr IrqMgrInit.TClock
bcs .3
lda #"C"
sta IRQ.Mode
>LDYAI CORE.IRQ.TCLOCK
jsr IrqMgrInit.SetV
>LDYAI CORE.IRQ.TCLOCK.Off
>STYA CORE.Quit+3
>LDYAI MSG.IRQ.CLOCK
bra .8
.2 php
sei
sta CLRPAGE2
lda #$60
sta $5fa //c EXTINT COM1:Dont buffer but get IRQ
sta $5fb //c EXTINT COM2:Dont buffer but get IRQ
stz $5FA //c TYPHED no keyboard buffering
stz $4FF //c ROM FF: no ACIABUF
stz $4FC //c ROM 0X: no ACIABUF
plp
.3 jsr IrqMgrInit.Mouse
bcs .7
lda #"V"
sta IRQ.Mode
>LDYAI CORE.IRQ.MOUSE
jsr IrqMgrInit.SetV
>LDYAI CORE.IRQ.MOUSE.Off
>STYA CORE.Quit+3
>LDYAI MSG.IRQ.MOUSE
bra .8
.7 jsr IrqMgrInit.HZ2Tick
lda #"P"
sta IRQ.Mode
>LDYAI MSG.IRQ.POLL
.8 >SYSCALL2 puts
clc
rts
*--------------------------------------
IrqMgrInit.SetV >STYA IRQ.JSR+1
>STYA GP.IRQ.JSR+1
rts
*--------------------------------------
IrqMgrInit.TClock
stz ZPPtr1 Try finding a TClock Card...
lda #$C1
sta ZPPtr1+1
.1 ldx #TClock.SIG-TClock.OFS-1
.2 ldy TClock.OFS,x
lda (ZPPtr1),y
cmp TClock.SIG,x
bne .3
dex
bpl .2
bra .4
.3 inc ZPPtr1+1 no match, try next slot....
lda ZPPtr1+1
cmp #$C8
bne .1
* sec
rts
.4 lda ZPPtr1+1 get $Cn
and #$f
tax get $0n
asl
asl
asl
asl
tay get $n0
sty IRQ.n0
lda #A2osX.S.CLK
sta A2osX.S,x
php
sei
lda #$40+$20 Enable interrupt + 64Hz
sta $c080,y
lda #$40
* sta SETPAGE2
* sta $478,x
* sta $7f8,x
* sta CLRPAGE2
sta $478,x
sta $7f8,x
lda #64
sta CORE.TickPerSec
sta CORE.TickSec
lda #11
sta CORE.TickPer10t
sta CORE.Tick10t
dec A2osX.IRQMode
plp
clc
rts
*--------------------------------------
IrqMgrInit.Mouse
stz ZPPtr1 Try finding a Mouse Card...
lda #$C1
sta ZPPtr1+1
.1 ldx #Mouse.SIG-Mouse.OFS-1
.2 ldy Mouse.OFS,x
lda (ZPPtr1),y
cmp Mouse.SIG,x
bne .3
dex
bpl .2
bra .4
.3 inc ZPPtr1+1 no match, try next slot....
lda ZPPtr1+1
cmp #$C8
bne .1
sec
rts
.4 lda ZPPtr1+1
sta .11+2
sta CORE.IRQ.MOUSE.Off.1+2
sta CORE.IRQ.MOUSE+2
sta CORE.IRQ.MOUSE.2+2
and #$0f
sta IRQ.0n
asl
asl
asl
asl
sta IRQ.n0
php
sei
bit RROMBNK2 Renable ROM to allow MOUSE II firmware works properly
ldy #INITMOUSE
jsr .10
ldy #SETMOUSE
lda (ZPPtr1),y
sta CORE.IRQ.MOUSE.Off.1+1
lda #MOUSEMODx.INTVBL+MOUSEMODx.ACTIVE
jsr .10
bit RRAMWRAMBNK1 Back To LC Ram
bit RRAMWRAMBNK1
ldy #SERVEMOUSE
lda (ZPPtr1),y
sta CORE.IRQ.MOUSE+1
ldy #READMOUSE
lda (ZPPtr1),y
sta CORE.IRQ.MOUSE.2+1
jsr IrqMgrInit.HZ2Tick
dec A2osX.IRQMode
plp
clc
rts
.9 plp
sec
rts
.10 pha
lda (ZPPtr1),y
sta .11+1
pla
ldx .11+2 Cn
ldy IRQ.n0
.11 jmp $ffff SELF MODIFIED
*--------------------------------------
IrqMgrInit.HZ2Tick
lda A2osX.HZ
sta CORE.TickPer10t
sta CORE.Tick10t
asl
asl
clc
adc A2osX.HZ
asl
sta CORE.TickPerSec
sta CORE.TickSec
rts
*--------------------------------------
EvtMgrInit >LDYAI MSG.EVT
>SYSCALL2 puts
stz CORE.EvtCount
lda /Evt.Table
sta pEvent+1
clc
rts
*--------------------------------------
TskMgrInit >LDYAI MSG.TSK
>SYSCALL2 puts
>LDYAI K.ENV.SIZE get a buffer for ENV
>SYSCALL NewStkObj Buffer in AUX mem
bcs .99
>STYA ZPPtr1
txa
ldy #S.PS.hENV
sta (pPS),y
sta SETWRITEAUX
lda #0
sta (ZPPtr1) make sure blank!!
sta CLRWRITEAUX
>PUSHWZ
>PUSHWZ
>SYSCALL OpenSession
bcs .99
sta S.Table.hSID
ldy #S.PS.hStdIn
lda (pPS),y
sta S.Table.hFile
lda #1
ldy #S.PS.hSession
sta (pPS),y
>LDYAI $2E0 Get ROOT from QC
>SYSCALL2 strdup
.99 bcs .9
txa
ldy #S.PS.hCWD
sta (pPS),y
>PUSHWI I.ENV.BOOT
>PUSHWI $2C0 Get BOOT from QC
>SYSCALL2 SetEnv
bcs .9
>PUSHWI I.ENV.ROOT
>PUSHWI $2E0 Get ROOT from QC
>SYSCALL2 SetEnv
bcs .9
>PUSHWI I.ENV.PATH
>SYSCALL2 PutEnv
bcs .9
>PUSHWI I.ENV.LIB
>SYSCALL2 PutEnv
bcs .9
>PUSHWI I.ENV.DRV
>SYSCALL2 PutEnv
.9 rts
*--------------------------------------
PwdMgrInit >LDYAI MSG.PWD
>SYSCALL2 puts
>LDYAI PWD.ETCPASSWD
>SYSCALL2 LoadStkObj
bcs .1
stx PWD.hUsrDB
>STYA PWD.UsrDBSize
>LDYAI PWD.ETCGROUP
>SYSCALL2 LoadStkObj
bcs .1
stx PWD.hGrpDB
>STYA PWD.GrpDBSize
.1
* clc
.9 rts
*--------------------------------------
* Modified CHARGET/CHARGOT for ROM CALL
* CHRGET .EQ $B1 - C8
*--------------------------------------
Kernel.ZP .PH $B1
CHARGET inc TXTPTR
bne CHARGOT
inc TXTPTR+1
CHARGOT lda $ffff
beq ZP.IsDigit.9
ZP.IsDigit cmp #'0'
bcc ZP.IsDigit.9
cmp #'9'+1
rts
ZP.IsDigit.9 sec
rts
.EP
Kernel.ZP.S .EQ *-Kernel.ZP
*--------------------------------------
Z80Code.Start .HS 31FF00 START: LD SP,000FFH Init Stack
.HS 3EFF LD A,0FFH Set Flag
.HS 320D00 LD (FLAG),A
.HS 3200E1 LD (0E100H),A Back to 6502
.HS 18F3 JR START Loop
.HS 00 FLAG: .DB 0
Z80Code.Size .EQ *-Z80Code.Start
*--------------------------------------
Mouse.OFS .HS 05070B0CFB
Mouse.SIG .HS 38180120D6
*--------------------------------------
TClock.OFS .HS 00020406
TClock.SIG .HS 08285870
*--------------------------------------
SmartPort.OFS .HS 010305
SmartPort.SIG .HS 200003
*--------------------------------------
MSG.Init2 .CZ "A2osX[Stage2]:Init\rRelocating Kernel...\r"
MSG.KCREAD .CZ "Reading Kernel Config File..."
MSG.KCREAD.OK .CZ "OK\r"
MSG.KCREAD.KO .CZ "\rError While Reading Kernel Config File, Using Default.\r"
MSG.HZ .CZ "Kernel SYS Timer Set For %d0 hz Machine.\r"
MSG.PRODOSFX .CZ "!!!Running under ProDOS.FX!!! Enabling lowercase mode.\r"
MSG.Init2.OK .CZ "A2osX[Stage2]:Complete."
*--------------------------------------
MSG.Init3 .CZ "A2osX[Stage3]:Init *** Press Ctrl-R for entering ROOT Mode ***\r\n"
MSG.DEV .AZ "Device Manager..."
MSG.BLKDEV .CZ " Adding Device: /dev/%s, Addr:%H, Type: %s\r\n"
MSG.BLKDEV.TBL .DA MSG.BLKDEV.RAM
.DA MSG.BLKDEV.DII
.DA MSG.BLKDEV.USR
.DA MSG.BLKDEV.BLK
.DA MSG.BLKDEV.SP
.DA MSG.BLKDEV.RSP
MSG.BLKDEV.RAM .AZ "/RAM Disk"
MSG.BLKDEV.DII .AZ "Disk ]["
MSG.BLKDEV.USR .AZ "User"
MSG.BLKDEV.BLK .AZ "Generic Block"
MSG.BLKDEV.SP .AZ "Smart Port"
MSG.BLKDEV.RSP .AZ "Remapped SP"
DRV.BLKDEVX .DA DRV.RamDrive
.DA DRV.DiskII
.DA DRV.BlkDev
.DA DRV.BlkDev
.DA DRV.SmartPort
.DA DRV.BlkDev
*--------------------------------------
MSG.IRQ .AZ "Interrupt Manager..."
MSG.IRQ.IIGS .AZ " Apple IIgs VBL IRQ Activated."
MSG.IRQ.MOUSE .AZ " Mouse Card VBL IRQ Activated."
MSG.IRQ.CLOCK .AZ " Clock Card IRQ Activated."
MSG.IRQ.POLL .AZ " Polling Mode."
MSG.EVT .AZ "Event Manager..."
MSG.TSK .AZ "Task Manager..."
MSG.PWD .AZ "Password Manager..."
MSG.EXEC .AZ "Executing %s..."
MSG.StartupErr .CZ "Failed : [$%h]\r\n"
MSG.Init3.OK .CZ "OK\r\nA2osX[Stage3]:Complete.\r\n"
*--------------------------------------
MSG.HW .AZ "Checking Hardware..."
MSG.HW.TypeSubT .CZ "Type=%h,SubT=%h\r\n"
MSG.CPU .AZ "Checking CPU..."
MSG.CPUTYPE .DA MSG.6502
.DA MSG.65C02
.DA MSG.65R02
.DA MSG.65816
MSG.6502 .AZ "6502."
MSG.65C02 .AZ "65C02."
MSG.65R02 .AZ "65R02."
MSG.65816 .AZ "65816."
MSG.CPU.SPEED .AZ "Checking CPU Speed (%d0Hz)..."
MSG.CPU.SPEEDOK .CZ "%d.%02d Mhz.\r\n"
MSG.Z80 .AZ "Checking Z80 CPU..."
MSG.Z80.OK .CZ "Detected In Slot %d.\r\n"
MSG.Z80.KO .AZ "Not Detected."
*--------------------------------------
DEV.CONSOLE .AZ "/dev/console"
RAMx .AZ "/RAMx"
I.ENV.BOOT .AZ "BOOT"
I.ENV.ROOT .AZ "ROOT"
I.ENV.PATH .AZ "PATH=${BOOT}sbin/:${BOOT}bin/"
I.ENV.LIB .AZ "LIB=${BOOT}lib/"
I.ENV.DRV .AZ "DRV=${BOOT}drv/"
SBININITD .AZ "${ROOT}sbin/initd"
.DA #0 end of ARGV for ExecV
*--------------------------------------
pMLIGFIEX .DA #2
.DA FNKConfig
.BS S.FIEX
*--------------------------------------
pMLIOPEN .DA #3
.DA FNKConfig
.DA $B000
.BS 1
FNKConfig .PS "A2osX.kconfig"
*--------------------------------------
pMLIREAD .DA #4
.BS 1
.DA A2osX.KCONFIG
.DA 16
.BS 2
*--------------------------------------
pMLICLOSE .DA #1
.BS 1
*--------------------------------------
FD.NULL .DA #S.FD.T.CDEV
.DA #0 HANDLER
.DA #0 BUSID
.DA #0 DEVID
.DA 0 BUSPTR
.DA DRV.NULL
.DA 0 DCBPTR
.DA 0 BUFPTR
*--------------------------------------
FD.NULL.NAME .AZ "null" NAME
*--------------------------------------
FD.TTY .DA #S.FD.T.CDEV
.DA #0 HANDLER
.DA #0 BUSID
.DA #0 DEVID
.DA 0 BUSPTR
.DA DRV.TERM
.BS 2 DCBPTR
.BS 2 BUFPTR
*--------------------------------------
FD.CONSOLE.NAME .AZ "console"
FD.TTY.NAME .AZ "tty0"
*--------------------------------------
FD.BDEV .DA #S.FD.T.BDEV
.DA #0 HANDLER
.DA #0 BUSID
.DA #0 DEVID
.BS 2 BUSPTR
.BS 2 DRVPTR
.DA 0 DCBPTR
.DA 0 BUFPTR
*--------------------------------------
FD.BDEV.NAME .AZ "s1d1"
*--------------------------------------
MAN
SAVE usr/src/sys/kernel.s.init
LOAD usr/src/sys/kernel.s
ASM