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/monitor.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.KMLOAD .EQ $2000 A2osX.LOGOLOAD .EQ $4000 A2osX.KMMAXLEN .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 KM.Filename .EQ $8B00 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 #$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 >LDYAI MSG.INIT0 jsr PrintFYA >LDYAI MSG.SYSMEM jsr PrintFYA lda 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 #MLIGETPREFIX .DA MLIGETPREFIX01 bcs * ldx Boot.Prefix .1 lda Boot.Prefix,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 LEVEL Back To FILE LEVEL 0 jsr MLI Make sure all files are closed .DA #MLICLOSE .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.EnumKM >LDYAI MSG.KMENUM jsr PrintFYA jsr EnumKM *-------------------------------------- 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.MLIQuit >LDYAI MSG.INIT0OK jsr PrintFYA >DEBUGOA stz $280 Quit to A2osX jsr MLI .DA #MLIQUIT .DA MLIQUIT01 bra * *-------------------------------------- A2osX.Screen80 lda #$8C Reset 80 col screen ($0C:HOME) jsr $C300 ldx Boot.Prefix .1 lda Boot.Prefix,x sta LOGO.Filename,x dex bne .1 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 #MLIOPEN .DA MLIOPEN00 bcs .99 lda MLIOPEN00+5 sta MLIREAD00+1 sta MLICLOSE00+1 jsr MLI .DA #MLIREAD .DA MLIREAD00 bcs .98 jsr .98 bra A2osX.ScreenDLGR .98 jsr MLI .DA #MLICLOSE .DA MLICLOSE00 .99 rts *-------------------------------------- A2osX.ScreenDLGR lda #20 sta WNDTOP sta CV jsr VTAB sta SETALTCHAR sta CLRHIRES sta SETMIXED sta SET80DISP sta SET80STORE sta CLRPAGE2 bit RDIOUDIS sta SETIOUDIS sta SETDHIRES bmi .10 sta CLRIOUDIS .10 sta 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 SETPAGE2 sta (TmpPtr2),y pla lsr lsr lsr lsr tax lda PALETTE.MAIN,x sta 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 SETPAGE2 ora (TmpPtr2),y sta (TmpPtr2),y pla lsr lsr lsr lsr tax lda PALETTE.MAIN,x asl asl asl asl sta 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 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 lda #Boot.Prefix pha lda /Boot.Prefix pha >LDYAI MSG.KMSYSDIR jsr PrintFYA jsr MLI .DA #MLIOPEN .DA MLIOPEN01 bcc .10 pha >LDYAI MSG.KMSYSDIR.KO jsr PrintFYA sec rts .10 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 KM.* ? 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 .98 cmp #MLI.E.EOF beq .8 pha jsr .8 pla sec rts .8 jsr MLI .DA #MLICLOSE .DA MLICLOSE01 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 ldy #$1c lda (TmpPtr1),y sta LoadKM.VERSION iny lda (TmpPtr1),y sta LoadKM.MVERSION ldx Boot.Prefix lda (TmpPtr1) and #$0F tay clc adc Boot.Prefix sta KM.Filename tax .2 bit LoadKM.MVERSION bpl .6 cpy #8 bcs .3 lda LoadKM.Bits,y bit LoadKM.MVERSION beq .6 bra .4 .3 lda LoadKM.Bits-8,y bit LoadKM.VERSION beq .6 .4 lda (TmpPtr1),y eor #$20 .HS 2C BIT ABS .6 lda (TmpPtr1),y sta KM.Filename,x dex dey bne .2 lda #KM.Filename pha lda /KM.Filename pha >LDYAI MSG.KMLOAD jsr PrintFYA 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 jmp A2osX.KMLOAD .98 pha jsr .9 pla sec rts .9 jsr MLI .DA #MLICLOSE .DA MLICLOSE02 .99 rts *-------------------------------------- LoadKM.VERSION .BS 1 LoadKM.MVERSION .BS 1 LoadKM.Bits .HS 8040201008040201 *-------------------------------------- .INB usr/src/shared/x.printf.s *-------------------------------------- MSG.INIT0 .AZ "A2osX[Stage0]:Init\n" MSG.SYSMEM .AZ "Checking System Memory..." MSG.SYSMEM.OK .AZ "128k Detected.\n" MSG.SYSMEM.KO .AZ "A2osX Requires At Least 128k Memory.\n" MSG.CPU .AZ "Checking CPU..." MSG.CPU.OK .AZ "65C02 CPU (or higher) Detected.\n" MSG.CPU.KO .AZ "A2osX Requires At Least A 65C02 CPU.\n" MSG.RAMDRV .AZ "Checking ProDOS RamDrive..." MSG.RAMDRV.OK .AZ "Successfully Disabled.\n" MSG.RAMDRV.KO0 .AZ "Not Detected.\n" MSG.RAMDRV.KO1 .AZ "Uninstall Failed !!!\n" MSG.BOOTPREFIX .AZ "Boot Prefix:%S\n" MSG.KMENUM .AZ "Looking For Kernel Modules...\n" MSG.KMSYSDIR .AZ "SYS dir is %S\n" MSG.KMSYSDIR.KO .AZ "***Error : $%h\n" MSG.KMLOAD .AZ "***Loading KM : %S\n" MSG.INIT0OK .AZ "A2osX[Stage0]:Complete.\n" *-------------------------------------- MLIGETPREFIX01 .DA #1 .DA Boot.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 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 *-------------------------------------- A2osX.LOGO >PSTR "A2osX.logo" SYS >PSTR "sys/" KM.PREFIX >PSTR "KM." *-------------------------------------- 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 *-------------------------------------- A2osX.QC.B.Start A2osX.QC.B.BOOT .EQ *+4 A2osX.QC.B.ROOT .EQ *+4+64 .INB usr/src/a2osx.s.qc .LIST ON SYSTEM.END .EQ * .LIST OFF *-------------------------------------- MAN SAVE USR/SRC/A2OSX.S ASM