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.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 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 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 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.SetupQC lda RRAMWRAMBNK2 lda RRAMWRAMBNK2 ldx #0 .1 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 .1 lda 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 #MLIQUIT .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 #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 *-------------------------------------- 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 #MLISETPREFIX .DA MLISETPREFIX02 bcs .19 jsr MLI .DA #MLIOPEN .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 #MLIREAD .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 #MLICLOSE .DA MLICLOSE01 bcs .99 jsr MLI .DA #MLISETPREFIX .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 #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.PMLOAD .98 pha jsr .9 pla sec rts .9 jsr MLI .DA #MLICLOSE .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 .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.PMENUM .AZ "Looking For ProDOS Modules...\n" MSG.PMSYSDIR .AZ "SYS dir is %S\n" MSG.PMSYSDIR.KO .AZ "***Error : $%h\n" MSG.PMLOAD .AZ "***Loading PM : %S\n" MSG.INIT0OK .AZ "A2osX[Stage0]:Complete.\n" *-------------------------------------- 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 >PSTR "A2osX.logo" SYS >PSTR "sys/" PM. >PSTR "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