A2osX/SYS/KERNEL.S.INIT2.txt
2025-01-19 17:12:51 +01:00

496 lines
7.6 KiB
Plaintext
Raw Permalink 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
*--------------------------------------
* Runs in MAIN memory
*--------------------------------------
INIT2 sei
ldx #$FF
txs
sta IO.SETALTZP
stx SaveSM
stx SaveSX
sta IO.CLRALTZP
cli
sta IO.SETALTCHAR
sta IO.SETMIXED
sta IO.CLRHIRES
sta IO.SET80DISP
sta IO.SET80STORE
sta IO.CLRPAGE2
lda IO.RDIOUDIS
sta IO.SETIOUDIS
sta IO.SETDHIRES
bmi .10
sta IO.CLRIOUDIS
.10 bit IO.RRAMWRAMBNK2
bit IO.RRAMWRAMBNK2
*--------------------------------------
>LDYAI MSG.Init2
jsr X.PrintF
ldx #Kernel.ZP.S-1
.1 lda Kernel.ZP,x
sta CHARGET,x
dex
bpl .1
>LDYA PAKME.LC2
>STYA ZPInBufPtr
>LDYAI A2osX.GP
>STYA ZPOutBufPtr
jsr X.Unpak
lda /K.VER
sta A2osX.KVER
lda #K.VER
sta A2osX.KVER+1
jsr INIT2.BnkDetect
jsr INIT2.KConfig
bcc * FX only
jsr INIT2.MemInit setup KERNEL MEM.HiMem
*--------------------------------------
INIT2a >LDYA PAKME.INIT3
>STYA ZPInBufPtr
>LDYAI INIT3
>STYA ZPOutBufPtr
jsr X.Unpak
>LDYA MEM.HiMem
>STYA FD.TTY+S.FD.DEV.pDCB
>LDYAI INIT3
>STYA ZPPtr1
lda A2osX.MaxBnk
sta (pRWReg)
sta IO.SETWRITEAUX Mirror to AUX
lda #INIT3.S
eor #$ff
tax
lda /INIT3.S
eor #$ff
pha
ldy #0
.2 inx
bne .3
pla
inc
beq .4
pha
.3 lda (ZPPtr1),y
sta (ZPPtr1),y
iny
bne .2
inc ZPPtr1+1
bra .2
.4 ldx #63
.81 lda SYS.BOOT,x
sta SYS.BOOT,x
dex
bpl .81
ldx #$2f
.82 lda MLI.DEVPTRS,x
sta $210,x
dex
bpl .82
sta IO.CLRWRITEAUX
lda #0
sta (pRWReg)
*--------------------------------------
* Move up KERNEL
*--------------------------------------
>LDYAI MAIN.B+MAIN.S-1
>STYA ZPPtr1
>LDYAI K.HiMem+MAIN.S-1
>STYA ZPPtr2
lda #MAIN.S
eor #$ff
tay
lda /MAIN.S
eor #$ff
tax
.5 iny
bne .6
inx
beq INIT2b
.6 lda (ZPPtr1)
sta (ZPPtr2)
lda ZPPtr1
bne .7
dec ZPPtr1+1
.7 dec ZPPtr1
lda ZPPtr2
bne .70
dec ZPPtr2+1
.70 dec ZPPtr2
bra .5
*--------------------------------------
INIT2b lda A2osX.HZ
pha
lda A2osX.TTYDEVS
pha
lda A2osX.MaxBnk
ldx #0
inc
bne .10
inx
.10 pha
phx
>LDYAI MSG.CFG
jsr X.PrintF
jsr MLI
.DA #MLI.ALLOCIRQ
.DA pMLIALLOCIRQ
bcs *
lda pMLIALLOCIRQ+1
sta IRQ.IntNum
lda #K.LoMem-pFDs
eor #$ff
tay
lda /K.LoMem-pFDs
eor #$ff
pha
ldx #0
.1 iny
bne .2
pla
inc
beq .3
pha
.2 stz pFDs,x
inx
bne .1
inc .2+2
bra .1
.3 >LDYAI S.PS Create Process 0 (Kernel)
ldx #S.MEM.F.INIT0
jsr MEM.Malloc.YAX
bcs *
>STYA pPS
>STYA pPSs
>LDYAI K.STACKTOP
>STYA pStack
sta pBase+1
>LDYAI MSG.Init2.OK
jsr X.PrintF
*--------------------------------------
>DEBUGOA
lda A2osX.MaxBnk
sta A2osX.ActBnk
sta (pRWReg)
lda /INIT3-1
pha
lda #INIT3-1
pha
jmp RAMSW.2AUXRTS
*--------------------------------------
INIT2.BnkDetect lda #$C0
sta pRWReg+1
lda #$73 AE RamWorks at $C073
jsr INIT2.BnkCheck
bne .1
lda #$71 Super Expander at $C071
jsr INIT2.BnkCheck
.1 sta IO.SETWRITEAUX
ldx A2osX.MaxBnk
.2 txa
sta (pRWReg)
sta MEM.BnkID
>LDYAI U.HiMem
>STYA MEM.HiMem
>STYA MEM.Free
>LDYAI U.LoMem
>STYA MEM.LoMem
stz MEM.LastSlot Reserve Slot #0
dex
cpx #$ff
bne .2
sta IO.CLRWRITEAUX
rts
*--------------------------------------
INIT2.BnkCheck sta pRWReg
sta .2+1
sta .3+1
sta .7+1
stz A2osX.MaxBnk
sta IO.SETALTZP Use ZP to get Bank Count
ldx #0
.1 dex
.2 stx $C073 SLEF MODIFIED
pha waste time...
pla
lda 0
sta K.Buf512,x save Bank 0 $0000 to prevent ALTZP trash
lda 1
sta K.Buf512+$100,x
txa
sta 0
eor #$FF
sta 1
eor #$FF
bne .1
ldx #0 start detection at page $00
.3 stx $C073 SLEF MODIFIED
txa
pha waste time...
pla
cmp 0
bne .4
eor #$FF
cmp 1
bne .4
inx
bne .3
.4 dex 256 banks
ldy #0
.6 dey
.7 sty $C073 SLEF MODIFIED
pha waste time...
pla
lda K.Buf512,y
sta 0
lda K.Buf512+$100,y
sta 1
tya
bne .6
sta IO.CLRALTZP back to MAIN ZP
stx A2osX.MaxBnk X = detected page count
txa set Z
rts CS = bMBnk
*--------------------------------------
INIT2.KConfig >LDYAI MSG.KCREAD
jsr X.PrintF
stz ZPPtr1 A2osX.FSID
jsr MLI.MLIENTRY Bypass ATALK
.DA #MLI.GFINFOEX
.DA pMLIGFIEX
bcc .1
eor #MLI.E.BADCALL
beq .2 regular ProDOS
ror ZPPtr1 Bad file, but ProDOS.FX detected
bra .9
.1 sec
ror ZPPtr1 File Present & ProDOS.FX detected
.2 jsr MLI
.DA #MLI.OPEN
.DA pMLIOPEN
bcs .9
lda pMLIOPEN+5
sta pMLIREAD+1
sta pMLICLOSE+1
jsr MLI
.DA #MLI.READ
.DA pMLIREAD
php
pha
jsr MLI
.DA #MLI.CLOSE
.DA pMLICLOSE
pla
plp
bcs .9
ldx #15
.3 lda pMLIREAD.Buf,x
sta A2osX.KCONFIG,x
dex
bpl .3
>LDYAI MSG.KCREAD.OK
bra .8
.9 >LDYAI MSG.KCREAD.KO
.8 jsr X.PrintF
lda ZPPtr1 A2osX.FSID
sta A2osX.FSID
rol CS if ProDOS.FX
rts
*--------------------------------------
INIT2.MemInit >LDYAI K.LoMem
>STYA MEM.LoMem
stz MEM.LastSlot Reserve Slot #0
ldx A2osX.TTYDEVS
>LDYAI K.HiMem
.1 pha
tya
sec
sbc #80*24+S.DCB.TTY
tay
pla
sbc /80*24+S.DCB.TTY
dex
bpl .1 +1 for /dev/console
>STYA MEM.HiMem
>STYA MEM.Free
rts
*--------------------------------------
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 "Error, Using Default.\r"
MSG.CFG .CZ "Kernel using %D Banks, %d TTYs, SYS Timer Set For %d0 hz Machine.\r"
MSG.Init2.OK .CZ "A2osX[Stage2]:Complete."
*--------------------------------------
* 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
*--------------------------------------
pMLIGFIEX .DA #2
.DA FNKConfig
.BS S.FIEX
*--------------------------------------
pMLIOPEN .DA #3
.DA FNKConfig
.DA $800
.BS 1
FNKConfig .PS "A2osX.kconfig"
*--------------------------------------
pMLIREAD .DA #4
.BS 1
.DA pMLIREAD.Buf
.DA 16
.BS 2
pMLIREAD.Buf .BS 16
*--------------------------------------
pMLICLOSE .DA #1
.BS 1
*--------------------------------------
pMLIALLOCIRQ .DA #2
.BS 1
.DA IRQ
*--------------------------------------
MAN
SAVE usr/src/sys/kernel.s.init2
LOAD usr/src/sys/kernel.s
ASM