mirror of
https://github.com/A2osX/A2osX.git
synced 2024-10-31 23:09:33 +00:00
8dea8d82c3
A2osX : bugfixes in KERNEL
715 lines
13 KiB
Plaintext
715 lines
13 KiB
Plaintext
NEW
|
||
AUTO 3,1
|
||
.LIST OFF
|
||
.OP 65C02
|
||
.OR $2000
|
||
.TF A2OSX.SYSTEM,TSYS
|
||
*--------------------------------------
|
||
.INB inc/macros.i
|
||
.INB inc/a2osx.i
|
||
.INB inc/io.i
|
||
.INB inc/rom.ii.i
|
||
.INB inc/mli.i
|
||
.INB inc/mli.e.i
|
||
.INB inc/zp.i
|
||
.INB inc/gfx.i
|
||
*--------------------------------------
|
||
TmpPtr1 .EQ $0 main & aux ZP
|
||
TmpPtr2 .EQ $2 main & aux ZP
|
||
*--------------------------------------
|
||
A2osX.PMLOAD .EQ $2000
|
||
A2osX.LOGOLOAD .EQ $4000
|
||
A2osX.PMMAXLEN .EQ $6000
|
||
A2osX.OpenBuff1 .EQ $8000 1024 Buffer for MLIOPEN01
|
||
A2osX.OpenBuff2 .EQ $8400 1024 Buffer for MLIOPEN02
|
||
A2osX.ReadBuff .EQ $8800 512 Buffer for MLIREAD01
|
||
Boot.Prefix .EQ $8A00 MLI.MAXPATH
|
||
Logo.Filename .EQ $8A80 MLI.MAXPATH
|
||
Sys.Prefix .EQ $8B00 MLI.MAXPATH
|
||
PM.Filename .EQ $8B80 MLI.MAXPATH
|
||
MLIONLINE01BUF .EQ $8C00 256
|
||
*--------------------------------------
|
||
* Kernel Stage 0
|
||
*--------------------------------------
|
||
SYSTEM.START .EQ *
|
||
.PH $1000
|
||
A2osX.Init0 >LDYAI $2000
|
||
>STYA TmpPtr1
|
||
>LDYAI $1000
|
||
>STYA TmpPtr2
|
||
|
||
ldx /SYSTEM.END-$1F00
|
||
|
||
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 IO.RROMBNK1
|
||
jsr ROM.HOME
|
||
>LDYAI MSG.INIT0
|
||
jsr PrintFYA
|
||
|
||
>LDYAI MSG.SYSMEM
|
||
jsr PrintFYA
|
||
|
||
lda GP.MACHID
|
||
and #MACHID.M
|
||
cmp #MACHID.M.128
|
||
beq A2osX.Init1.128
|
||
>LDYAI MSG.SYSMEM.KO
|
||
jsr PrintFYA
|
||
bra *
|
||
*--------------------------------------
|
||
A2osX.Init1.128 jsr MLI
|
||
.DA #MLI.GETPREFIX
|
||
.DA MLIGETPREFIX01
|
||
bcs *
|
||
|
||
ldx Boot.Prefix
|
||
|
||
.1 lda Boot.Prefix,x
|
||
sta Logo.Filename,x
|
||
sta Sys.Prefix,x
|
||
sta PM.Filename,x
|
||
sta A2osX.QC.B.BOOT,x
|
||
sta A2osX.QC.B.ROOT,x
|
||
dex
|
||
bpl .1
|
||
|
||
jsr A2osX.Screen80
|
||
>LDYAI MSG.INIT0
|
||
jsr PrintFYA
|
||
|
||
lda #Boot.Prefix
|
||
pha
|
||
lda /Boot.Prefix
|
||
pha
|
||
>LDYAI MSG.BOOTPREFIX
|
||
jsr PrintFYA
|
||
|
||
>LDYAI MSG.SYSMEM
|
||
jsr PrintFYA
|
||
|
||
>LDYAI MSG.SYSMEM.OK
|
||
jsr PrintFYA
|
||
>LDYAI MSG.CPU
|
||
jsr PrintFYA
|
||
|
||
sed Test 6502 BCD bug
|
||
lda #$99
|
||
clc
|
||
adc #$01
|
||
cld
|
||
bpl .2 if minus, BUG!, we have 6502
|
||
|
||
>LDYAI MSG.CPU.KO
|
||
jsr PrintFYA
|
||
bra *
|
||
|
||
.2 >LDYAI MSG.CPU.OK
|
||
jsr PrintFYA
|
||
|
||
stz GP.FLEVEL Back To FILE LEVEL 0
|
||
|
||
jsr MLI Make sure all files are closed
|
||
.DA #MLI.CLOSE
|
||
.DA MLICLOSE01
|
||
bcs *
|
||
*--------------------------------------
|
||
A2osX.RamDrv >LDYAI MSG.RAMDRV
|
||
jsr PrintFYA
|
||
|
||
jsr DisableRamDRV
|
||
bcc .2
|
||
|
||
tax
|
||
bne .1
|
||
|
||
>LDYAI MSG.RAMDRV.KO0
|
||
bra .8
|
||
|
||
.1 >LDYAI MSG.RAMDRV.KO1
|
||
bra .8
|
||
|
||
.2 >LDYAI MSG.RAMDRV.OK
|
||
|
||
.8 jsr PrintFYA
|
||
*--------------------------------------
|
||
A2osX.SetupQC lda IO.RRAMWRAMBNK2
|
||
lda IO.RRAMWRAMBNK2
|
||
|
||
lda GP.KVER
|
||
cmp #$8D
|
||
bne .1
|
||
|
||
sta IO.SETALTZP
|
||
|
||
.1 ldx #0
|
||
|
||
.2 lda A2osX.QC.B.Start,x Still at $2xxx !!! not moved to $1xxx
|
||
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 .2
|
||
|
||
lda GP.KVER
|
||
cmp #$8D
|
||
bne .3
|
||
|
||
sta IO.CLRALTZP
|
||
|
||
bra A2osX.MLIQuit
|
||
|
||
.3 lda IO.RROMBNK1
|
||
*--------------------------------------
|
||
A2osX.EnumPM >LDYAI MSG.PMENUM do this After SetupQC, a PM could override QC
|
||
jsr PrintFYA
|
||
jsr EnumPM
|
||
*--------------------------------------
|
||
A2osX.MLIQuit >LDYAI MSG.INIT0OK
|
||
jsr PrintFYA
|
||
>DEBUGOA
|
||
|
||
stz $280 Quit to A2osX
|
||
|
||
jsr MLI
|
||
.DA #MLI.QUIT
|
||
.DA MLIQUIT01
|
||
bra *
|
||
*--------------------------------------
|
||
A2osX.Screen80 lda #$8C Reset 80 col screen ($0C:HOME)
|
||
jsr $C300
|
||
|
||
ldx Boot.Prefix
|
||
ldy #0
|
||
|
||
.2 inx
|
||
iny
|
||
lda A2osX.LOGO,y
|
||
sta Logo.Filename,x
|
||
cpy A2osX.LOGO
|
||
bne .2
|
||
|
||
stx Logo.Filename
|
||
jsr MLI
|
||
.DA #MLI.OPEN
|
||
.DA MLIOPEN00
|
||
bcs .99
|
||
|
||
lda MLIOPEN00+5
|
||
sta MLIREAD00+1
|
||
sta MLICLOSE00+1
|
||
jsr MLI
|
||
.DA #MLI.READ
|
||
.DA MLIREAD00
|
||
bcs .98
|
||
|
||
jsr .98
|
||
bra A2osX.ScreenDLGR
|
||
|
||
.98 jsr MLI
|
||
.DA #MLI.CLOSE
|
||
.DA MLICLOSE00
|
||
.99 rts
|
||
*--------------------------------------
|
||
A2osX.ScreenDLGR
|
||
lda #20
|
||
sta ZP.WNDTOP
|
||
sta ZP.CV
|
||
jsr ROM.TABV
|
||
|
||
* sta IO.SETALTCHAR
|
||
sta IO.CLRHIRES
|
||
sta IO.SETMIXED
|
||
* sta IO.SET80DISP
|
||
* sta IO.SET80STORE
|
||
* sta IO.CLRPAGE2
|
||
|
||
bit IO.RDIOUDIS
|
||
sta IO.SETIOUDIS
|
||
sta IO.SETDHIRES
|
||
bmi .10
|
||
|
||
sta IO.CLRIOUDIS
|
||
|
||
.10 sta IO.CLRTEXT
|
||
|
||
lda #A2osX.LOGOLOAD+S.BM
|
||
sta TmpPtr1
|
||
lda /A2osX.LOGOLOAD+S.BM
|
||
sta TmpPtr1+1
|
||
|
||
ldx #0
|
||
|
||
.1 phx
|
||
|
||
lda SCR.BASEL,x
|
||
sta TmpPtr2
|
||
lda SCR.BASEH,x
|
||
sta TmpPtr2+1
|
||
|
||
ldy #0
|
||
|
||
.2 lda (TmpPtr1),y
|
||
pha
|
||
|
||
and #$f
|
||
tax
|
||
lda PALETTE.AUX,x
|
||
|
||
sta IO.SETPAGE2
|
||
sta (TmpPtr2),y
|
||
|
||
pla
|
||
lsr
|
||
lsr
|
||
lsr
|
||
lsr
|
||
tax
|
||
lda PALETTE.MAIN,x
|
||
sta IO.CLRPAGE2
|
||
sta (TmpPtr2),y
|
||
|
||
iny
|
||
cpy #40
|
||
bne .2
|
||
|
||
lda TmpPtr1
|
||
clc
|
||
adc #40
|
||
sta TmpPtr1
|
||
bcc .3
|
||
|
||
inc TmpPtr1+1
|
||
|
||
.3 ldy #0
|
||
|
||
.4 lda (TmpPtr1),y
|
||
pha
|
||
and #$f
|
||
|
||
tax
|
||
lda PALETTE.AUX,x
|
||
asl
|
||
asl
|
||
asl
|
||
asl
|
||
sta IO.SETPAGE2
|
||
ora (TmpPtr2),y
|
||
sta (TmpPtr2),y
|
||
|
||
pla
|
||
lsr
|
||
lsr
|
||
lsr
|
||
lsr
|
||
tax
|
||
lda PALETTE.MAIN,x
|
||
asl
|
||
asl
|
||
asl
|
||
asl
|
||
sta IO.CLRPAGE2
|
||
ora (TmpPtr2),y
|
||
sta (TmpPtr2),y
|
||
|
||
iny
|
||
cpy #40
|
||
bne .4
|
||
|
||
lda TmpPtr1
|
||
clc
|
||
adc #40
|
||
sta TmpPtr1
|
||
bcc .7
|
||
|
||
inc TmpPtr1+1
|
||
|
||
.7 plx
|
||
inx
|
||
cpx #20
|
||
bne .1
|
||
|
||
rts
|
||
*--------------------------------------
|
||
DisableRamDRV php
|
||
sei
|
||
lda GP.DEVPTRS3D2
|
||
cmp GP.DEVPTRS S0D1=NOVEV
|
||
bne .1
|
||
|
||
lda GP.DEVPTRS3D2+1
|
||
cmp GP.DEVPTRS+1 S0D1=NODEV
|
||
beq .9 S3D2=NODEV, nothing to do
|
||
|
||
.1 ldx GP.DEVCNT
|
||
|
||
.2 lda GP.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 GP.DEVCNT
|
||
beq .5
|
||
|
||
.4 lda GP.DEVLST+1,x
|
||
sta GP.DEVLST,x
|
||
inx
|
||
cpx GP.DEVCNT
|
||
bne .4
|
||
|
||
.5 ldx GP.DEVCNT
|
||
stz GP.DEVLST,x
|
||
dec GP.DEVCNT
|
||
lda GP.DEVPTRS
|
||
sta GP.DEVPTRS3D2
|
||
lda GP.DEVPTRS+1
|
||
sta GP.DEVPTRS3D2+1
|
||
|
||
plp
|
||
jsr MLI
|
||
.DA #MLI.ONLINE
|
||
.DA MLIONLINE01
|
||
clc Success!!
|
||
rts
|
||
|
||
.9 plp
|
||
|
||
lda #0 Not detected
|
||
sec
|
||
rts
|
||
*--------------------------------------
|
||
EnumPM.EPB .EQ $0D
|
||
EnumPM.EL .EQ $27
|
||
*--------------------------------------
|
||
EnumPM ldx #0
|
||
ldy Boot.Prefix
|
||
|
||
.1 inx
|
||
lda SYS,x
|
||
sta Sys.Prefix+1,y
|
||
sta PM.Filename+1,y
|
||
iny
|
||
cpx SYS
|
||
bne .1
|
||
|
||
sty Sys.Prefix
|
||
sty PM.Filename
|
||
|
||
lda #Sys.Prefix
|
||
pha
|
||
lda /Sys.Prefix
|
||
pha
|
||
>LDYAI MSG.PMSYSDIR
|
||
jsr PrintFYA
|
||
|
||
jsr MLI
|
||
.DA #MLI.SETPREFIX
|
||
.DA MLISETPREFIX02
|
||
bcs .19
|
||
|
||
jsr MLI
|
||
.DA #MLI.OPEN
|
||
.DA MLIOPEN01
|
||
bcc .10
|
||
|
||
.19 pha
|
||
>LDYAI MSG.PMSYSDIR.KO
|
||
jsr PrintFYA
|
||
sec
|
||
rts
|
||
|
||
.10 lda MLIOPEN01+5
|
||
sta MLIREAD01+1
|
||
sta MLICLOSE01+1
|
||
|
||
.2 jsr MLI
|
||
.DA #MLI.READ
|
||
.DA MLIREAD01
|
||
bcs .98
|
||
|
||
lda #EnumPM.EPB
|
||
sta EnumPM.EC
|
||
|
||
>LDYAI A2osX.ReadBuff+4
|
||
>STYA EnumPM.BPTR
|
||
|
||
.3 >LDYA EnumPM.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 PM. at least enough chars for PM.*?
|
||
bcc .5 no, skip
|
||
|
||
ldy #$10 file type
|
||
lda (TmpPtr1),y
|
||
cmp #$06 'BIN'?
|
||
bne .5 skip
|
||
|
||
ldy PM.
|
||
|
||
.4 lda (TmpPtr1),y PM.* ?
|
||
cmp PM.,y
|
||
bne .5
|
||
|
||
dey
|
||
bne .4
|
||
|
||
jsr LoadPM
|
||
|
||
.5 lda EnumPM.BPTR
|
||
clc
|
||
adc #EnumPM.EL
|
||
sta EnumPM.BPTR
|
||
bcc .6
|
||
|
||
inc EnumPM.BPTR+1
|
||
|
||
.6 dec EnumPM.EC
|
||
bne .3
|
||
|
||
bra .2
|
||
|
||
.98 cmp #MLI.E.EOF
|
||
beq .8
|
||
|
||
pha
|
||
jsr .8
|
||
pla
|
||
|
||
sec
|
||
rts
|
||
|
||
.8 jsr MLI
|
||
.DA #MLI.CLOSE
|
||
.DA MLICLOSE01
|
||
bcs .99
|
||
|
||
jsr MLI
|
||
.DA #MLI.SETPREFIX
|
||
.DA MLISETPREFIX01
|
||
|
||
.99 rts
|
||
*--------------------------------------
|
||
EnumPM.EC .BS 1
|
||
EnumPM.BPTR .BS 2
|
||
*--------------------------------------
|
||
LoadPM ldy #$1c
|
||
lda (TmpPtr1),y
|
||
sta LoadPM.VERSION
|
||
iny
|
||
lda (TmpPtr1),y
|
||
sta LoadPM.MVERSION
|
||
|
||
ldx Sys.Prefix
|
||
lda (TmpPtr1)
|
||
and #$0F
|
||
tay
|
||
clc
|
||
adc sys.Prefix
|
||
sta PM.Filename
|
||
tax
|
||
|
||
.2 bit LoadPM.MVERSION
|
||
bpl .6
|
||
|
||
cpy #8
|
||
bcs .3
|
||
|
||
lda LoadPM.Bits,y
|
||
bit LoadPM.MVERSION
|
||
beq .6
|
||
bra .4
|
||
|
||
.3 lda LoadPM.Bits-8,y
|
||
bit LoadPM.VERSION
|
||
beq .6
|
||
|
||
.4 lda (TmpPtr1),y
|
||
eor #$20
|
||
.HS 2C BIT ABS
|
||
|
||
.6 lda (TmpPtr1),y
|
||
sta PM.Filename,x
|
||
dex
|
||
dey
|
||
bne .2
|
||
|
||
lda #PM.Filename
|
||
pha
|
||
lda /PM.Filename
|
||
pha
|
||
|
||
>LDYAI MSG.PMLOAD
|
||
jsr PrintFYA
|
||
|
||
jsr MLI
|
||
.DA #MLI.OPEN
|
||
.DA MLIOPEN02
|
||
bcs .99
|
||
|
||
lda MLIOPEN02+5
|
||
sta MLIREAD02+1
|
||
sta MLICLOSE02+1
|
||
|
||
jsr MLI
|
||
.DA #MLI.READ
|
||
.DA MLIREAD02
|
||
bcs .98
|
||
|
||
jsr .9
|
||
jmp A2osX.PMLOAD
|
||
|
||
.98 pha
|
||
jsr .9
|
||
pla
|
||
|
||
sec
|
||
rts
|
||
|
||
.9 jsr MLI
|
||
.DA #MLI.CLOSE
|
||
.DA MLICLOSE02
|
||
.99 rts
|
||
*--------------------------------------
|
||
LoadPM.VERSION .BS 1
|
||
LoadPM.MVERSION .BS 1
|
||
LoadPM.Bits .HS 8040201008040201
|
||
*--------------------------------------
|
||
.INB usr/src/shared/x.printf.s
|
||
*--------------------------------------
|
||
MSG.INIT0 .CZ "A2osX[Stage0]:Init\r"
|
||
MSG.SYSMEM .CZ "Checking System Memory..."
|
||
MSG.SYSMEM.OK .CZ "128k Detected.\r"
|
||
MSG.SYSMEM.KO .CZ "A2osX Requires At Least 128k Memory.\r"
|
||
|
||
MSG.CPU .CZ "Checking CPU..."
|
||
MSG.CPU.OK .CZ "65C02 CPU (or higher) Detected.\r"
|
||
MSG.CPU.KO .CZ "A2osX Requires At Least A 65C02 CPU.\r"
|
||
|
||
MSG.RAMDRV .CZ "Checking ProDOS RamDrive..."
|
||
MSG.RAMDRV.OK .CZ "Successfully Disabled.\r"
|
||
MSG.RAMDRV.KO0 .CZ "Not Detected.\r"
|
||
MSG.RAMDRV.KO1 .CZ "Uninstall Failed.\r"
|
||
|
||
MSG.BOOTPREFIX .CZ "Boot Prefix:%S\r"
|
||
|
||
MSG.PMENUM .CZ "Looking For ProDOS Modules...\r"
|
||
MSG.PMSYSDIR .CZ "SYS dir is %S\r"
|
||
MSG.PMSYSDIR.KO .CZ "***Error : $%h\r"
|
||
MSG.PMLOAD .CZ "***Loading PM : %S\r"
|
||
MSG.INIT0OK .CZ "A2osX[Stage0]:Complete.\r"
|
||
*--------------------------------------
|
||
MLIGETPREFIX01
|
||
MLISETPREFIX01 .DA #1
|
||
.DA Boot.Prefix
|
||
*--------------------------------------
|
||
MLISETPREFIX02 .DA #1
|
||
.DA Sys.Prefix
|
||
*--------------------------------------
|
||
MLIONLINE01 .DA #2
|
||
* .DA #0
|
||
.DA #$B0 S3D2
|
||
.DA MLIONLINE01BUF
|
||
*--------------------------------------
|
||
MLIOPEN00 .DA #3 For DIR listing
|
||
.DA Logo.Filename
|
||
.DA A2osX.OpenBuff1
|
||
.BS 1
|
||
MLIREAD00 .DA #4
|
||
.BS 1
|
||
.DA A2osX.LOGOLOAD
|
||
.DA 2048
|
||
.BS 2
|
||
MLICLOSE00 .DA #1
|
||
.BS 1
|
||
*--------------------------------------
|
||
MLIOPEN01 .DA #3 For DIR listing
|
||
.DA Sys.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 PM.Filename
|
||
.DA A2osX.OpenBuff2
|
||
.BS 1
|
||
MLIREAD02 .DA #4
|
||
.BS 1
|
||
.DA A2osX.PMLOAD Load address for PMs
|
||
.DA A2osX.PMMAXLEN Maxlen of PM
|
||
.BS 2
|
||
MLICLOSE02 .DA #1
|
||
.BS 1
|
||
*--------------------------------------
|
||
MLIQUIT01 .DA #4
|
||
.DA #0
|
||
.DA 0
|
||
.DA #0
|
||
.DA 0
|
||
*--------------------------------------
|
||
A2osX.LOGO .PS "A2osX.logo"
|
||
SYS .PS "sys/"
|
||
PM. .PS "PM."
|
||
*--------------------------------------
|
||
SCR.BASEL .HS 00.80.00.80.00.80.00.80.28.A8.28.A8.28.A8.28.A8.50.D0.50.D0.50.D0.50.D0
|
||
SCR.BASEH .HS 04.04.05.05.06.06.07.07.04.04.05.05.06.06.07.07.04.04.05.05.06.06.07.07
|
||
*--------------------------------------
|
||
PALETTE.MAIN .HS 00.02.04.06.08.0A.0C.0E
|
||
.HS 01.03.05.07.09.0B.0D.0F
|
||
PALETTE.AUX .HS 00.01.02.03.04.05.06.07
|
||
.HS 08.09.0A.0B.0C.0D.0E.0F
|
||
*--------------------------------------
|
||
.EP
|
||
|
||
.LIST ON
|
||
SYSTEM.END .EQ *
|
||
.LIST OFF
|
||
*--------------------------------------
|
||
A2osX.QC.B.Start
|
||
A2osX.QC.B.BOOT .EQ *+4
|
||
A2osX.QC.B.ROOT .EQ *+4+64
|
||
|
||
.INB usr/src/a2osx.s.qc
|
||
*--------------------------------------
|
||
MAN
|
||
SAVE usr/src/a2osx.s
|
||
ASM
|