mirror of
https://github.com/A2osX/A2osX.git
synced 2024-08-15 04:29:35 +00:00
429 lines
8.2 KiB
Plaintext
429 lines
8.2 KiB
Plaintext
PR#3
|
||
PREFIX /A2OSX.BOOT
|
||
DELETE A2OSX.SYSTEM
|
||
PREFIX /A2OSX.SRC
|
||
NEW
|
||
INC 1
|
||
AUTO 8
|
||
.LIST OFF
|
||
.OP 65C02
|
||
.OR $2000
|
||
.TF /A2OSX.BOOT/A2OSX.SYSTEM,TSYS
|
||
*--------------------------------------
|
||
.INB /A2OSX.DEV/INC/MACROS.I
|
||
.INB /A2OSX.DEV/INC/A2OSX.I
|
||
.INB /A2OSX.DEV/INC/IO.I
|
||
.INB /A2OSX.DEV/INC/MONITOR.I
|
||
.INB /A2OSX.DEV/INC/PRODOS.I
|
||
*--------------------------------------
|
||
TmpPtr1 .EQ $0 main & aux ZP
|
||
TmpPtr2 .EQ $2 main & aux ZP
|
||
*--------------------------------------
|
||
A2osX.KMLOAD .EQ $2000
|
||
A2osX.KMMAXLEN .EQ $4000
|
||
A2osX.OpenBuff1 .EQ $6000 1024 Buffer for MLIOPEN01
|
||
A2osX.OpenBuff2 .EQ $6400 1024 Buffer for MLIOPEN02
|
||
A2osX.ReadBuff .EQ $6800 512 Buffer for MLIREAD01
|
||
Boot.Prefix .EQ $6A00 MLI.MAXPATH
|
||
KM.Filename .EQ $6A80 MLI.MAXPATH
|
||
*--------------------------------------
|
||
* Kernel Stage 0
|
||
*--------------------------------------
|
||
.PH $1000
|
||
|
||
A2osX.Init0 >LDYAI $2000
|
||
>STYA TmpPtr1
|
||
>LDYAI $1000
|
||
>STYA TmpPtr2
|
||
|
||
ldx #$10 reloc $2000-$2FFF to $1000-$1FFF
|
||
ldy #0
|
||
|
||
.1 lda (TmpPtr1),y
|
||
sta (TmpPtr2),y
|
||
iny
|
||
bne .1
|
||
|
||
inc TmpPtr1+1
|
||
inc TmpPtr2+1
|
||
dex
|
||
bne .1
|
||
|
||
jmp A2osX.Init1
|
||
*--------------------------------------
|
||
A2osX.Init1 ldx #$FF init 6502 stack to highest
|
||
txs
|
||
|
||
bit RROMBNK1
|
||
jsr HOME
|
||
>LDAXI MSG.INIT0
|
||
jsr PrintCStrAX
|
||
|
||
>LDAXI MSG.SYSMEM
|
||
jsr PrintCStrAX
|
||
|
||
lda MACHID
|
||
and #MACHID.RAM
|
||
cmp #MACHID.RAM.128
|
||
beq .1
|
||
|
||
>LDAXI MSG.SYSMEM.KO
|
||
jsr PrintCStrAX
|
||
bra *
|
||
|
||
.1 lda #$8C Reset 80 col screen ($0C:HOME)
|
||
jsr $C300
|
||
|
||
>LDAXI MSG.INIT0
|
||
jsr PrintCStrAX
|
||
|
||
>LDAXI MSG.SYSMEM
|
||
jsr PrintCStrAX
|
||
|
||
>LDAXI MSG.SYSMEM.OK
|
||
jsr PrintCStrAX
|
||
|
||
>LDAXI MSG.CPU
|
||
jsr PrintCStrAX
|
||
|
||
sed Test 6502 BCD bug
|
||
lda #$99
|
||
clc
|
||
adc #$01
|
||
cld
|
||
bpl .2 if minus, BUG!, we have 6502
|
||
|
||
>LDAXI MSG.CPU.KO
|
||
jsr PrintCStrAX
|
||
bra *
|
||
|
||
.2 >LDAXI MSG.CPU.OK
|
||
jsr PrintCStrAX
|
||
*--------------------------------------
|
||
A2osX.Prefix >LDAXI MSG.BOOTPREFIX
|
||
jsr PrintCStrAX
|
||
jsr MLI
|
||
.DA #MLIGETPREFIX
|
||
.DA MLIGETPREFIX01
|
||
bcs *
|
||
ldx Boot.Prefix
|
||
stx A2osX.QC.B.Start+4
|
||
ldy #1
|
||
.1 lda Boot.Prefix,y
|
||
sta A2osX.QC.B.Start+4,y
|
||
ora #$80
|
||
jsr COUT
|
||
iny
|
||
dex
|
||
bne .1
|
||
jsr CROUT
|
||
*--------------------------------------
|
||
A2osX.RamDrv >LDAXI MSG.RAMDRV
|
||
jsr PrintCStrAX
|
||
|
||
jsr DisableRamDRV
|
||
bcc .2
|
||
|
||
tax
|
||
bne .1
|
||
>LDAXI MSG.RAMDRV.KO0
|
||
jsr PrintCStrAX
|
||
bra A2osX.SetupQC
|
||
|
||
.1 >LDAXI MSG.RAMDRV.KO1
|
||
jsr PrintCStrAX
|
||
bra A2osX.SetupQC
|
||
|
||
.2 >LDAXI MSG.RAMDRV.OK
|
||
jsr PrintCStrAX
|
||
*--------------------------------------
|
||
A2osX.SetupQC lda RRAMWRAMBNK2
|
||
lda RRAMWRAMBNK2
|
||
|
||
ldx #0
|
||
|
||
.1 lda A2osX.QC.B.Start,x
|
||
sta $D100,x
|
||
lda A2osX.QC.B.Start+$100,x
|
||
sta $D200,x
|
||
lda A2osX.QC.B.Start+$200,x
|
||
sta $D300,x
|
||
inx
|
||
bne .1
|
||
|
||
lda RROMBNK1
|
||
*--------------------------------------
|
||
A2osX.EnumKM >LDAXI MSG.KMENUM
|
||
jsr PrintCStrAX
|
||
jsr EnumKM
|
||
*--------------------------------------
|
||
A2osX.MLIQuit >LDAXI MSG.INIT0OK
|
||
jsr PrintCStrAX
|
||
|
||
>DEBUGOA
|
||
jsr MLI
|
||
.DA #MLIQUIT
|
||
.DA MLIQUIT01
|
||
bra *
|
||
*--------------------------------------
|
||
DisableRamDRV php
|
||
sei
|
||
lda DEVPTRS3D2
|
||
cmp DEVPTRS0D1
|
||
bne .1
|
||
lda DEVPTRS3D2+1
|
||
cmp DEVPTRS0D1+1
|
||
beq .9 S3D2=NODEV, nothing to do
|
||
|
||
.1 ldx DEVCNT
|
||
|
||
.2 lda DEVLST,x LOOKING FOR $BF, $BB, $B7, $B3
|
||
and #$F3
|
||
cmp #$B3
|
||
beq .3
|
||
|
||
dex
|
||
bpl .2
|
||
|
||
plp
|
||
lda #1 No device found, exit with error
|
||
sec
|
||
rts
|
||
|
||
.3 cpx DEVCNT
|
||
beq .5
|
||
|
||
.4 lda DEVLST+1,x
|
||
sta DEVLST,x
|
||
inx
|
||
cpx DEVCNT
|
||
bne .4
|
||
|
||
.5 ldx DEVCNT
|
||
stz DEVLST,x
|
||
dec DEVCNT
|
||
|
||
lda DEVPTRS0D1
|
||
sta DEVPTRS3D2
|
||
lda DEVPTRS0D1+1
|
||
sta DEVPTRS3D2+1
|
||
plp
|
||
|
||
jsr MLI
|
||
.DA #MLIONLINE
|
||
.DA MLIONLINE01
|
||
clc Success!!
|
||
rts
|
||
|
||
.9 plp
|
||
lda #0 Not detected
|
||
sec
|
||
rts
|
||
EnumKM.EPB .EQ $0D
|
||
EnumKM.EL .EQ $27
|
||
*--------------------------------------
|
||
EnumKM ldx #0
|
||
ldy Boot.Prefix
|
||
.1 inx
|
||
lda SYS,x
|
||
sta Boot.Prefix+1,y
|
||
iny
|
||
cpx SYS
|
||
bne .1
|
||
|
||
sty Boot.Prefix
|
||
|
||
jsr MLI
|
||
.DA #MLIOPEN
|
||
.DA MLIOPEN01
|
||
bcs .99
|
||
|
||
lda MLIOPEN01+5
|
||
sta MLIREAD01+1
|
||
sta MLICLOSE01+1
|
||
|
||
.2 jsr MLI
|
||
.DA #MLIREAD
|
||
.DA MLIREAD01
|
||
bcs .98
|
||
|
||
lda #EnumKM.EPB
|
||
sta EnumKM.EC
|
||
>LDYAI A2osX.ReadBuff+4
|
||
>STYA EnumKM.BPTR
|
||
|
||
.3 >LDYA EnumKM.BPTR
|
||
>STYA TmpPtr1
|
||
lda (TmpPtr1)
|
||
and #$F0 Empty ?
|
||
beq .5 yes, skip
|
||
and #$C0 anything out of type 1,2 or 3 ?
|
||
bne .5 yes, skip
|
||
lda (TmpPtr1)
|
||
and #$0F
|
||
cmp KM.PREFIX at least enough chars for KM.*?
|
||
bcc .5 no, skip
|
||
ldy #$10 file type
|
||
lda (TmpPtr1),y
|
||
cmp #$06 'BIN'?
|
||
bne .5 skip
|
||
ldy KM.PREFIX
|
||
.4 lda (TmpPtr1),y
|
||
cmp KM.PREFIX,y
|
||
bne .5
|
||
dey
|
||
bne .4
|
||
|
||
jsr LoadKM
|
||
|
||
.5 lda EnumKM.BPTR
|
||
clc
|
||
adc #EnumKM.EL
|
||
sta EnumKM.BPTR
|
||
bcc .6
|
||
inc EnumKM.BPTR+1
|
||
|
||
.6 dec EnumKM.EC
|
||
bne .3
|
||
bra .2
|
||
|
||
.8 jsr MLI
|
||
.DA #MLICLOSE
|
||
.DA MLICLOSE01
|
||
rts
|
||
|
||
.98 cmp #MLI.ERR.EOF
|
||
beq .8
|
||
pha
|
||
jsr .8
|
||
pla
|
||
.99 sec
|
||
rts
|
||
*--------------------------------------
|
||
EnumKM.EC .BS 1
|
||
EnumKM.BPTR .BS 2
|
||
*--------------------------------------
|
||
LoadKM ldx Boot.Prefix
|
||
.1 lda Boot.Prefix,x
|
||
sta KM.Filename,x
|
||
dex
|
||
bne .1
|
||
|
||
ldx Boot.Prefix
|
||
lda (TmpPtr1)
|
||
and #$0F
|
||
tay
|
||
clc
|
||
adc Boot.Prefix
|
||
sta KM.Filename
|
||
tax
|
||
|
||
.2 lda (TmpPtr1),y
|
||
sta KM.Filename,x
|
||
dex
|
||
dey
|
||
bne .2
|
||
|
||
>LDAXI MSG.KMLOAD
|
||
jsr PrintCStrAX
|
||
>LDAXI KM.Filename
|
||
jsr PrintPStrAX
|
||
jsr CROUT
|
||
|
||
jsr MLI
|
||
.DA #MLIOPEN
|
||
.DA MLIOPEN02
|
||
bcs .99
|
||
|
||
lda MLIOPEN02+5
|
||
sta MLIREAD02+1
|
||
sta MLICLOSE02+1
|
||
|
||
jsr MLI
|
||
.DA #MLIREAD
|
||
.DA MLIREAD02
|
||
bcs .98
|
||
jsr .9
|
||
|
||
jsr A2osX.KMLOAD
|
||
jsr CROUT
|
||
|
||
.98 pha
|
||
jsr .9
|
||
pla
|
||
sec
|
||
rts
|
||
|
||
.9 jsr MLI
|
||
.DA #MLICLOSE
|
||
.DA MLICLOSE02
|
||
.99 rts
|
||
*--------------------------------------
|
||
.INB X.PRINTF.S
|
||
*--------------------------------------
|
||
MSG.INIT0 >CSTR "A2osX[Stage0]:Init\n"
|
||
MSG.SYSMEM >CSTR "Checking System Memory..."
|
||
MSG.SYSMEM.OK >CSTR "128k Detected.\n"
|
||
MSG.SYSMEM.KO >CSTR "A2osX Requires At Least 128k Memory.\n"
|
||
|
||
MSG.CPU >CSTR "Checking CPU..."
|
||
MSG.CPU.OK >CSTR "65C02 CPU (or higher) Detected.\n"
|
||
MSG.CPU.KO >CSTR "A2osX Requires At Least A 65C02 CPU.\n"
|
||
|
||
MSG.RAMDRV >CSTR "Checking ProDOS RamDrive..."
|
||
MSG.RAMDRV.OK >CSTR "Successfully Disabled.\n"
|
||
MSG.RAMDRV.KO0 >CSTR "Not Detected.\n"
|
||
MSG.RAMDRV.KO1 >CSTR "Uninstall Failed !!!\n"
|
||
|
||
MSG.BOOTPREFIX >CSTR "Boot Prefix:"
|
||
|
||
MSG.KMENUM >CSTR "Looking For Kernel Modules...\n"
|
||
MSG.KMLOAD >CSTR "***Loading KM : "
|
||
MSG.INIT0OK >CSTR "A2osX[Stage0]:Complete.\n"
|
||
*--------------------------------------
|
||
MLIGETPREFIX01 .DA #1
|
||
.DA Boot.Prefix
|
||
MLIONLINE01 .DA #2
|
||
.DA #0
|
||
.DA MLIONLINE01BUF
|
||
MLIONLINE01BUF .BS 256
|
||
MLIOPEN01 .DA #3 For DIR listing
|
||
.DA Boot.Prefix
|
||
.DA A2osX.OpenBuff1
|
||
.BS 1
|
||
MLIREAD01 .DA #4
|
||
.BS 1
|
||
.DA A2osX.ReadBuff Load address Dir Blocks
|
||
.DA $200 Maxlen of Dir Blocks (512)
|
||
.BS 2
|
||
MLICLOSE01 .DA #1
|
||
.BS 1
|
||
MLIOPEN02 .DA #3
|
||
.DA KM.Filename
|
||
.DA A2osX.OpenBuff2
|
||
.BS 1
|
||
MLIREAD02 .DA #4
|
||
.BS 1
|
||
.DA A2osX.KMLOAD Load address for KMs
|
||
.DA A2osX.KMMAXLEN Maxlen of KM
|
||
.BS 2
|
||
MLICLOSE02 .DA #1
|
||
.BS 1
|
||
MLIQUIT01 .DA #4
|
||
.DA #0
|
||
.DA 0
|
||
.DA #0
|
||
.DA 0
|
||
*--------------------------------------
|
||
SYS >PSTR "SYS/"
|
||
KM.PREFIX >PSTR "KM."
|
||
*--------------------------------------
|
||
.EP
|
||
*--------------------------------------
|
||
A2osX.QC.B.Start
|
||
.INB A2OSX.S.QC
|
||
*--------------------------------------
|
||
MAN
|
||
SAVE A2OSX.S
|
||
ASM
|