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
				bit RRAMWRAMBNK2
				bit RRAMWRAMBNK2

				>LDYA PAKME.D2
				>STYA ZPInBufPtr
				>LDYAI $D000
				jsr A2osX.Unpak

				bit RRAMWRAMBNK1
				bit RRAMWRAMBNK1

				>LDYA PAKME.D1
				>STYA ZPInBufPtr
				>LDYAI $D000
				jsr A2osX.Unpak

				>LDYA PAKME.E0
				>STYA ZPInBufPtr
				>LDYAI $E000
				jsr A2osX.Unpak

				bit 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
				bit RRAMWRAMBNK1
				bit 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

				bit 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.DEV.MAX*2-1

.1				stz Dev.Table,x
				dex
				bpl .1

				ldx #K.NOD.MAX*2-1

.2				stz Nod.Table.hName,x
				dex
				bpl .2

				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 .1+1
				tay

				lda FD.TTY+S.FD.DEV.DCBPTR+1
				sbc /80*24+S.DCB.TTY
				sta FD.TTY+S.FD.DEV.DCBPTR+1
				sta .1+2

				ldx #S.DCB.TTY-1

				sta SETWRITEAUX

.1				stz $ffff,x				SELF MODIFIED
				dex
				bpl .1

				>STYA Mem.HiMem
				>STYA Mem.Free
				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

				ldy #0

				stz A2osX.CPUSPEED+1

				php
				sei

				lda MACHID
				and #MACHID.T
				eor #MACHID.T.IIc
				beq CPU.Init2c

				lda A2osX.HZ
				asl
				tax

.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)
				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		sta CLRIOUDIS
				lda IO.IIC.RDVBLMSK
				pha						Save VBLIRQ enable

				sta IO.IIC.ENVBL
				lda IO.IIC.CLRVBLIRQ

				ldx A2osX.HZ

.1				bit VBL					Wait VBL high....
				bpl .1

				bit IO.IIC.CLRVBLIRQ	clear //c IRQ

.3				lda #40

.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 CPU.InitOk

				sta IO.IIC.DISVBL
*--------------------------------------
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.VSD

				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.VSD	ldy #VSD.PATCH.SIZE-1

.1				lda $BF41,y
				cmp VSD.PATCH,y
				bne .9

				dey
				bpl .1

				php
				sei

				bit RRAMWRAMBNK2
				bit RRAMWRAMBNK2
				sta CLRALTZP
				ldx $d001
				sta SETALTZP
				bit RRAMWRAMBNK1
				bit RRAMWRAMBNK1

				lda #A2osX.S.VSDRIVE
				sta A2osX.S,x
				plp

.9				rts
*--------------------------------------
VSD.PATCH		bit RRAMWRAMBNK2
				jsr $D002
				bit RRAMWRAMBNK1
				rts
VSD.PATCH.SIZE	.EQ *-VSD.PATCH
*--------------------------------------
* 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
				sta $5fb

				stz $4FF				//c ROM FF
				stz $4FC				//c ROM 1,2,3,4,5
				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

				>PUSHWI 0
				>PUSHWI 0
				>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		.AZ "A2osX[Stage2]:Init\nRelocating Kernel...\n"
MSG.HZ			.AZ "Kernel SYS Timer Set For %d0 hz Machine.\n"
MSG.KCREAD		.AZ "Reading Kernel Config File..."
MSG.KCREAD.OK	.AZ "OK\n"
MSG.KCREAD.KO	.AZ "\nError While Reading Kernel Config File, Using Default.\n"
MSG.PRODOSFX	.AZ "!!!Running under ProDOS.FX!!! Enabling lowercase mode.\n"
MSG.Init2.OK	.AZ "A2osX[Stage2]:Complete."
*--------------------------------------
MSG.Init3		.AZ "A2osX[Stage3]:Init *** Press Ctrl-R for entering ROOT Mode ***\r\n"
MSG.DEV			.AZ "Device Manager..."
*--------------------------------------
MSG.BLKDEV		.AZ "  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	.AZ "Failed : [$%h]\r\n"
MSG.Init3.OK	.AZ "OK\r\nA2osX[Stage3]:Complete.\r\n"
*--------------------------------------
MSG.HW			.AZ "Checking Hardware..."
MSG.HW.TypeSubT	.AZ "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	.AZ "%d.%02d Mhz.\r\n"
MSG.Z80			.AZ "Checking Z80 CPU..."
MSG.Z80.OK		.AZ "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		>PSTR "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 #1					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
