PR#3 PREFIX /A2OSX.BUILD NEW INC 1 AUTO 8 .LIST OFF .OP 65C02 .OR $2000 .TF /A2OSX.BUILD/A2OSX.SYSTEM,TSYS *-------------------------------------- .INB /A2OSX.BUILD/INC/MACROS.I .INB /A2OSX.BUILD/INC/A2OSX.I .INB /A2OSX.BUILD/INC/IO.I .INB /A2OSX.BUILD/INC/MONITOR.I .INB /A2OSX.BUILD/INC/PRODOS.I .INB /A2OSX.BUILD/INC/MLI.ERR.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 PrintFAX >LDAXI MSG.SYSMEM jsr PrintFAX lda MACHID and #MACHID.RAM cmp #MACHID.RAM.128 beq .1 >LDAXI MSG.SYSMEM.KO jsr PrintFAX bra * .1 lda #$8C Reset 80 col screen ($0C:HOME) jsr $C300 >LDAXI MSG.INIT0 jsr PrintFAX >LDAXI MSG.SYSMEM jsr PrintFAX >LDAXI MSG.SYSMEM.OK jsr PrintFAX >LDAXI MSG.CPU jsr PrintFAX sed Test 6502 BCD bug lda #$99 clc adc #$01 cld bpl .2 if minus, BUG!, we have 6502 >LDAXI MSG.CPU.KO jsr PrintFAX bra * .2 >LDAXI MSG.CPU.OK jsr PrintFAX *-------------------------------------- A2osX.CloseAll stz LEVEL Back To FILE LEVEL 0 jsr MLI Make sure all files are closed .DA #MLICLOSE .DA MLICLOSE01 bcs * *-------------------------------------- A2osX.Prefix >LDAXI MSG.BOOTPREFIX jsr PrintFAX 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 PrintFAX jsr DisableRamDRV bcc .2 tax bne .1 >LDAXI MSG.RAMDRV.KO0 jsr PrintFAX bra A2osX.SetupQC .1 >LDAXI MSG.RAMDRV.KO1 jsr PrintFAX bra A2osX.SetupQC .2 >LDAXI MSG.RAMDRV.OK jsr PrintFAX *-------------------------------------- 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 PrintFAX jsr EnumKM *-------------------------------------- A2osX.MLIQuit >LDAXI MSG.INIT0OK jsr PrintFAX >DEBUGOA jsr MLI .DA #MLIQUIT .DA MLIQUIT01 bra * *-------------------------------------- DisableRamDRV php sei lda DEVPTRS3D2 cmp DEVPTRS S0D1=NOVEV bne .1 lda DEVPTRS3D2+1 cmp DEVPTRS+1 S0D1=NODEV 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 DEVPTRS sta DEVPTRS3D2 lda DEVPTRS+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.E.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 lda #KM.Filename pha lda /KM.Filename pha >LDAXI MSG.KMLOAD jsr PrintFAX 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 .98 pha jsr .9 pla sec rts .9 jsr MLI .DA #MLICLOSE .DA MLICLOSE02 .99 rts *-------------------------------------- .INB /A2OSX.SRC/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 : %S\n" 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.SRC/A2OSX.S.QC *-------------------------------------- MAN SAVE /A2OSX.SRC/A2OSX.S ASM