NEW AUTO 3,1 *-------------------------------------- Kernel.Init2 sei ldx #$FF txs sta SETALTZP stx A2osX.SaveSM stx A2osX.SaveSX ldx #Kernel.ZP.S-1 .1 lda Kernel.ZP,x sta CHARGET,x dex bpl .1 sta CLRALTZP >LDYAI MSG.Init2 jsr PrintFYA >LDYA PAKME.MAIN >STYA ZPInBufPtr >LDYAI A2osX.EndTables jsr A2osX.Unpak >LDYA PAKME.AUX >STYA ZPInBufPtr >LDYAI $9F00 jsr A2osX.Unpak >LDYAI $9F00 >STYA ZPPtr1 >LDYAI Mem.XHiMem >STYA ZPPtr2 lda #A2osX.AUX.S eor #$ff tax lda /A2osX.AUX.S eor #$ff pha ldy #0 sta SETWRITEAUX .2 inx bne .3 pla inc beq .4 pha .3 lda (ZPPtr1),y sta (ZPPtr2),y iny bne .2 inc ZPPtr1+1 inc ZPPtr2+1 bra .2 .4 sta CLRWRITEAUX >LDYA PAKME.GP >STYA ZPInBufPtr >LDYAI A2osX.SYSCALL jsr A2osX.Unpak sta SETALTZP bit RRAMWRAMBNK2 bit RRAMWRAMBNK2 >LDYA PAKME.D2 >STYA ZPInBufPtr >LDYAI $D000 jsr A2osX.Unpak bit RRAMWRAMBNK1 bit RRAMWRAMBNK1 >LDYA PAKME.D1 >STYA ZPInBufPtr >LDYAI $D000 jsr A2osX.Unpak >LDYA PAKME.E0 >STYA ZPInBufPtr >LDYAI $E000 jsr A2osX.Unpak bit RROMBNK1 sta CLRALTZP cli jsr KConfigLoad lda A2osX.HZ pha >LDYAI MSG.HZ jsr PrintFYA >LDYAI MSG.Init2.OK jsr PrintFYA *-------------------------------------- >DEBUGOA *-------------------------------------- Kernel.Init3 sta SETALTZP bit RRAMWRAMBNK1 bit RRAMWRAMBNK1 lda #$ff Make sure we are in Kernel Mode during setup sta IRQ.InKernel stz IRQ.InLib sta SETALTCHAR sta CLRMIXED sta CLRHIRES sta SET80DISP sta SET80STORE sta CLRPAGE2 bit RDIOUDIS sta SETIOUDIS sta SETDHIRES bmi .10 sta CLRIOUDIS .10 jsr MemMgrInit >LDYAI S.PS Select Process 0 (Kernel) jsr K.GetMem0 >STYA pPs stx PS.Table.hPS jsr Mem.SetOwner lda #1 sta CORE.PSCount >LDYAI K.STACKTOP >STYA pStack sta pBase+1 >PUSHWI FD.NULL >PUSHWI FD.NULL.NAME >SYSCALL2 MKDev jsr SysScrInit bcs * >PUSHWI DEV.CONSOLE >PUSHBI O.RDWR >PUSHBI S.FI.T.TXT >PUSHWZ Aux type >SYSCALL2 fopen bcs * ldy #S.PS.hStdIn sta (pPS),y iny #S.PS.hStdOut sta (pPS),y iny #S.PS.hStdErr sta (pPS),y *-------------------------------------- Kernel.Init3C >PUSHWI MSG.Init3 >PUSHBI 0 >SYSCALL2 printf jsr HW.Detect jsr CPU.Init.6502 jsr CPU.Init.Z80 jsr DevMgrInit jsr IrqMgrInit bcs * jsr EvtMgrInit jsr TskMgrInit bcs * jsr PwdMgrInit >PUSHWI MSG.EXEC >PUSHWI SBININITD >PUSHBI 2 >SYSCALL PrintF >PUSHWI SBININITD >PUSHBI 0 PS Flags >SYSCALL2 ExecV bcs Kernel.Init3.Err >PUSHWI MSG.Init3.OK >PUSHBI 0 >SYSCALL2 printf >DEBUGOA jmp CORE.Run Kernel.Init3.Err pha >PUSHWI MSG.StartupErr pla >PUSHA >PUSHBI 1 >SYSCALL2 printf bra * No need to discard Expanded CMDLINE *-------------------------------------- * INIT2 Subs *-------------------------------------- KConfigLoad >LDYAI MSG.KCREAD jsr PrintFYA jsr MLIENTRY Bypass ATALK .DA #MLIGETFILEINFOEX .DA MLIGETFILEINFOEX00 bcc .1 eor #MLI.E.BADCALL beq .2 regular ProDOS ror CORE.FSID Bad file, but ProDOS.FX detected bra .9 .1 sec ror CORE.FSID File Present & ProDOS.FX detected .2 jsr MLI .DA #MLIOPEN .DA MLIOPEN00 bcs .9 lda MLIOPEN00+5 sta MLIREAD00+1 sta MLICLOSE00+1 jsr MLI .DA #MLIREAD .DA MLIREAD00 php pha jsr MLI .DA #MLICLOSE .DA MLICLOSE00 pla plp bcs .9 >LDYAI MSG.KCREAD.OK bra .8 .9 >LDYAI MSG.KCREAD.KO .8 jsr PrintFYA lda CORE.FSID beq .99 >LDYAI MSG.PRODOSFX jsr PrintFYA .99 rts *-------------------------------------- * INIT3 Subs *-------------------------------------- MemMgrInit >LDYAI Mem.MHiMem >STYA Mem.HiMem >STYA Mem.Free >LDYAI Mem.MLoMem >STYA Mem.LoMem stz Mem.LastSlot Reserve Slot #0 sta SETWRITEAUX >LDYAI Mem.XLoMem >STYA Mem.LoMem stz Mem.LastSlot Reserve Slot #0 sta CLRWRITEAUX ldx #K.DEV.MAX*2-1 .1 stz Dev.Table,x dex bpl .1 ldx #K.FLT.MAX*2-1 .11 stz Flt.Table.hPath,x dex bpl .11 ldx #K.NOD.MAX*2-1 .2 stz Nod.Table.hPath,x dex bpl .2 ldx #K.PS.MAX*4-1 .3 stz PS.Table.PID,x dex bpl .3 ldx #K.OF.MAX*2-1 .4 stz OF.Table.hPath,x dex bpl .4 ldx #K.EVT.MAX*S.EVT-1 .5 stz Evt.Table,x dex bpl .5 ldx #K.USR.MAX*2-1 .6 stz S.Table.hSID,x dex bpl .6 rts *-------------------------------------- SysScrInit >LDYAI Mem.XHiMem >STYA FD.TTY+S.FD.DEV.DCBPTR jsr SysScrInit.TTYPtrs >PUSHWI FD.TTY >PUSHWI FD.CONSOLE.NAME >SYSCALL2 MKDev bcs .9 ldx A2osX.TTYDEVS .1 phx inc FD.TTY+S.FD.DEV.DEVID inc FD.TTY.NAME+3 jsr SysScrInit.TTYPtrs >PUSHWI FD.TTY >PUSHWI FD.TTY.NAME >SYSCALL2 MKDev plx bcs .9 dex bne .1 * clc .9 rts *-------------------------------------- SysScrInit.TTYPtrs lda FD.TTY+S.FD.DEV.DCBPTR sec sbc #TTY.BUF.SIZE+S.DCB.TTY sta FD.TTY+S.FD.DEV.DCBPTR sta .1+1 tay lda FD.TTY+S.FD.DEV.DCBPTR+1 sbc /TTY.BUF.SIZE+S.DCB.TTY sta FD.TTY+S.FD.DEV.DCBPTR+1 sta .1+2 ldx #S.DCB.TTY-1 sta SETWRITEAUX .1 stz $ffff,x SELF MODIFIED dex bpl .1 >STYA Mem.HiMem >STYA Mem.Free sta CLRWRITEAUX rts *-------------------------------------- * http://www.1000bit.it/support/manuali/apple/technotes/misc/tn.misc.02.html * https://mirrors.apple2.org.za/apple.cabi.net/FAQs.and.INFO/A2.TECH.NOTES.ETC/A2.CLASSIC.TNTS/a2misc007(1).htm *-------------------------------------- HW.Detect >PUSHWI MSG.HW >PUSHBI 0 >SYSCALL2 printf bit RROMBNK1 stz A2osX.HWType stz A2osX.HWSubT sec jsr $FE1F IIgs ? bcs .2 lda #A2osX.HWType.IIgs sta A2osX.HWType cpy #2 bne .1 iny .1 sty A2osX.HWSubT bra .8 .2 lda $FBC0 beq .4 //c ldx #A2osX.HWType.IIe stx A2osX.HWType cmp #$EA beq .8 //e OLD ROMs inc A2osX.HWSubT //e Enh ROMs lda $FBDD cmp #2 bne .8 inc A2osX.HWSubT //e LC card bra .8 .4 lda #A2osX.HWType.IIc sta A2osX.HWType lda $FBBF sta A2osX.HWSubT .8 bit RRAMWRAMBNK1 bit RRAMWRAMBNK1 >PUSHWI MSG.HW.TypeSubT >PUSHB A2osX.HWType >PUSHB A2osX.HWSubT >PUSHBI 2 >SYSCALL2 printf rts *-------------------------------------- CPU.Init.6502 >PUSHWI MSG.CPU >PUSHBI 0 >SYSCALL2 printf jsr Detect6502 A = CPU type sta A2osX.CPUTYPE and #$F asl tax ldy MSG.CPUTYPE,x lda MSG.CPUTYPE+1,x >SYSCALL2 puts >PUSHWI MSG.CPU.SPEED >PUSHB A2osX.HZ >PUSHBI 1 >SYSCALL2 printf ldy #0 stz A2osX.RANDOM16+1 php sei ldx A2osX.HZ lda A2osX.HZ2Cnt-5,x asl tax 2 VBL states (up & down) clc CC for //e lda MACHID and #MACHID.T eor #MACHID.T.IIc bne .1 txa if //c, only one change (IRQ up) lsr tax sec CS for //c sta CLRIOUDIS lda IO.IIC.RDVBLMSK sta ZPPtr1+1 Save VBLIRQ enable sta IO.IIC.ENVBL lda IO.IIC.CLRVBLIRQ .1 bit VBL Wait VBL high.... bpl .1 bcc .2 skip if //e lda IO.IIC.CLRVBLIRQ clear //c IRQ lda #0 reset A = LOW bra .3 .2 lda VBL //e : wait VBL low bmi .2 *-------------------------------------- .3 nop (2) nop (2) nop (2) nop (2) nop (2) nop (2) nop (2) nop (2) nop (2) nop (2) nop (2) iny (2) bne .4 (2*) inc A2osX.RANDOM16+1 (6) bra .5 (3) 2+6+3 .4 nop (2) nop (2) nop (2) nop (2) 3+2+2+2+2 if from BNE .5 eor VBL (4) bpl .3 (2*) bcc .51 skip if //e lda IO.IIC.CLRVBLIRQ clear //c IRQ lda #0 reset A = LOW .51 dex bne .3 bcc .60 skip if //e bit ZPPtr1+1 Disable VBLIRQ ? bpl .60 sta IO.IIC.DISVBL .60 plp *-------------------------------------- sty A2osX.RANDOM16 stz A2osX.CPUSPEED lsr A2osX.RANDOM16+1 ror A2osX.RANDOM16 .7 lda A2osX.RANDOM16 sec sbc #100 tax lda A2osX.RANDOM16+1 sbc /100 bcc .8 stx A2osX.RANDOM16 sta A2osX.RANDOM16+1 inc A2osX.CPUSPEED bra .7 .8 lda A2osX.RANDOM16 sta A2osX.CPUSPEED+1 >PUSHWI MSG.CPU.SPEEDOK lda A2osX.CPUSPEED >PUSHA push CPU speed HI lda A2osX.CPUSPEED+1 >PUSHA push CPU speed LO >PUSHBI 2 >SYSCALL2 printf rts *-------------------------------------- CPU.Init.Z80 >PUSHWI MSG.Z80 >PUSHBI 0 >SYSCALL2 printf jsr DetectZ80 bcs .9 sta A2osX.Z80SLOT tax lda #A2osX.S.Z80 sta A2osX.S,x >PUSHWI MSG.Z80.OK lda A2osX.Z80SLOT >PUSHA >PUSHBI 1 >SYSCALL2 printf rts .9 >LDYAI MSG.Z80.KO >SYSCALL2 puts rts *-------------------------------------- * Out: * A = $60, 6502 * A = $61, 65C02 * A = $62, 65R02 * A = $63, 65816 *-------------------------------------- Detect6502 ldy #0 Test 6502 BCD bug sed lda #$99 clc adc #$01 cld bmi .9 BUG!, we have 6502 ldy #3 test 65C816 TYX Instruction ldx #0 .OP 65816 tyx TYX: if 65C816, x becomes non-zero .OP 65C02 bne .9 worked! 65C816 dey y=2 -> R65C02 ldx $EA save zp $EA stz $EA store 0 in $EA * .OP 65R02 .HS F7EA For compatibility with A2osX.ASM * smb 7,$EA if not Rockwell, assemble as nop nop * .OP 65C02 asl $EA cs if Rockwell stx $EA restore zp $EA bcs .9 dey y=1 -> 65C02 .9 tya ora #$60 rts *-------------------------------------- * Out: * A = Z80 Slot *-------------------------------------- DetectZ80 ldx #Z80Code.Size .1 lda Z80Code.Start-1,x sta Z80CODE-1,x 00000H for Z80 dex bne .1 stz ZPPtr1 lda #$C1 sta ZPPtr1+1 .2 sta (ZPPtr1) lda $100D bmi .8 inc ZPPtr1+1 lda ZPPtr1+1 cmp #$C8 beq .9 CS clc adc #$20 sta $100A bra .2 .8 lda ZPPtr1+1 and #$0F clc .9 rts *-------------------------------------- DevMgrInit >LDYAI MSG.DEV >SYSCALL2 puts lda DEVCNT sta .1+1 .1 ldx #$ff SELF MODIFIED lda DEVLST,x and #$F0 asl php Save Drive 1/2 in C ror DSSS0000 lsr lsr lsr tax 000DSSS0 lsr 0000DSSS and #$7 sta FD.BDEV+S.FD.DEV.BUSID ora #$30 sta FD.BDEV.NAME+1 SnDy lda DEVPTRS,x sta FD.BDEV+S.FD.DEV.BUSPTR lda DEVPTRS+1,x sta FD.BDEV+S.FD.DEV.BUSPTR+1 sta ZPPtr1+1 stz ZPPtr1 Cn00 plp lda #0 adc #1 Make DevID 1 or 2 sta FD.BDEV+S.FD.DEV.DEVID ora #$30 sta FD.BDEV.NAME+3 SxDn lda ZPPtr1+1 cmp #$FF /RAM is always $FF00 bne .2 jsr DevMgrInit.RAM bra .8 keep slot free .2 cmp #$D0 Disk II Driver is $D000 bne .3 jsr DevMgrInit.DII lda #A2osX.S.DII bra .7 Go mark slot as USED .3 bcs .53 > $D0, Some BLK remapped DRV cmp #$C0 bcs .4 $C0 .. $CF, in slot ROM jsr DevMgrInit.USR Outside ROM/LC space, User loaded BLK dev bra .8 keep slot free .4 ldx #SmartPort.SIG-SmartPort.OFS-1 .5 ldy SmartPort.OFS,x Check if there is a smartport firmware lda (ZPPtr1),y cmp SmartPort.SIG,x bne .8 not a Disk Controller... dex bpl .5 ldy #7 lda (ZPPtr1),y bne .6 $Cn07=00 : SmartPort jsr DevMgrInit.SP lda #A2osX.S.SP bra .7 .53 jsr DevMgrInit.RSP Remapped SP devices.... bra .8 don't mark slot as busy .6 jsr DevMgrInit.BLK lda #A2osX.S.BLK .7 ldx FD.BDEV+S.FD.DEV.BUSID sta A2osX.S,x .8 dec .1+1 bmi .80 jmp .1 .80 clc rts *-------------------------------------- DevMgrInit.RAM ldx #0 .HS 2C BIT ABS *-------------------------------------- DevMgrInit.DII ldx #2 .HS 2C BIT ABS *-------------------------------------- DevMgrInit.USR ldx #4 .HS 2C BIT ABS *-------------------------------------- DevMgrInit.BLK ldx #6 bra DevMgrInit.AddBDev *-------------------------------------- DevMgrInit.SP ldy #$ff lda (ZPPtr1),y clc adc #3 Compute smartport entry point sta FD.BDEV+S.FD.DEV.BUSPTR ldx #8 .HS 2C BIT ABS DevMgrInit.RSP ldx #10 *-------------------------------------- DevMgrInit.AddBDev >LDYA DRV.BLKDEV,x >STYA FD.BDEV+S.FD.DEV.DRVPTR >PUSHWI MSG.BLKDEV >PUSHWI FD.BDEV.NAME >PUSHW FD.BDEV+S.FD.DEV.BUSPTR >PUSHW MSG.BLKDEV.TBL,x >PUSHBI 6 >SYSCALL2 printf >PUSHWI FD.BDEV >PUSHWI FD.BDEV.NAME >SYSCALL2 MKDev rts *-------------------------------------- * Setup AuxLC $FFFE->Kernel IRQ Handler * if irq not handled, jmp (S.IrqMgrOldFFFE) *-------------------------------------- IrqMgrInit >LDYAI MSG.IRQ >SYSCALL2 puts php sei >LDYA $FFFE >STYA IRQ.JMP+1 >LDYAI IRQ.Handler >STYA $FFFE >LDYAI GP.IRQ >STYA K.MLI.PARAMS+2 >MLICALL MLIALLOCIRQ bcs .9 lda K.MLI.PARAMS+1 sta IRQ.INTNUM plp *-------------------------------------- lda A2osX.HWType cmp #A2osX.HWType.IIgs bne .1 lda #"G" sta IRQ.Mode lda #$08 tsb IO.IIGS.INTEN jsr IrqMgrInit.HZ2Tick >LDYAI CORE.IRQ.IIGS jsr IrqMgrInit.SetV >LDYAI CORE.IRQ.IIGS.Off >STYA CORE.Quit+1 >LDYAI MSG.IRQ.IIGS bra .8 .9 plp sec rts .1 cmp #A2osX.HWType.IIc beq .2 jsr IrqMgrInit.TClock bcs .2 lda #"C" sta IRQ.Mode >LDYAI CORE.IRQ.TCLOCK jsr IrqMgrInit.SetV >LDYAI CORE.IRQ.TCLOCK.Off >STYA CORE.Quit+1 >LDYAI MSG.IRQ.CLOCK bra .8 .2 jsr IrqMgrInit.Mouse bcs .3 lda #"V" sta IRQ.Mode >LDYAI CORE.IRQ.MOUSE jsr IrqMgrInit.SetV >LDYAI CORE.IRQ.MOUSE.Off >STYA CORE.Quit+1 >LDYAI MSG.IRQ.MOUSE bra .8 .3 jsr IrqMgrInit.HZ2Tick lda #"P" sta IRQ.Mode >LDYAI MSG.IRQ.POLL .8 >SYSCALL2 puts clc rts *-------------------------------------- IrqMgrInit.SetV >STYA IRQ.JSR+1 >STYA GP.IRQ.JSR+1 rts *-------------------------------------- IrqMgrInit.TClock stz ZPPtr1 Try finding a TClock Card... lda #$C1 sta ZPPtr1+1 .1 ldx #TClock.SIG-TClock.OFS-1 .2 ldy TClock.OFS,x lda (ZPPtr1),y cmp TClock.SIG,x bne .3 dey bpl .2 bra .4 .3 inc ZPPtr1+1 no match, try next slot.... lda ZPPtr1+1 cmp #$C8 bne .1 sec rts .4 lda ZPPtr1+1 get $Cn and #$f tax get $0n asl asl asl asl tay get $n0 sty IRQ.n0 lda #A2osX.S.CLK sta A2osX.S,x php sei lda #$40+$20 Enable interrupt + 64Hz sta $c080,y sta CLRPAGE2 lda #$40 sta $478,x sta $7f8,x lda #64 sta CORE.TickPerSec sta CORE.TickSec lda #11 sta CORE.TickPer10t sta CORE.Tick10t dec CORE.IRQMode plp clc rts *-------------------------------------- IrqMgrInit.Mouse stz ZPPtr1 Try finding a Mouse Card... lda #$C1 sta ZPPtr1+1 .1 ldx #Mouse.SIG-Mouse.OFS-1 .2 ldy Mouse.OFS,x lda (ZPPtr1),y cmp Mouse.SIG,x bne .3 dex bpl .2 bra .4 .3 inc ZPPtr1+1 no match, try next slot.... lda ZPPtr1+1 cmp #$C8 bne .1 sec rts .4 lda ZPPtr1+1 sta .11+2 sta CORE.IRQ.MOUSE.Off.1+2 sta CORE.IRQ.MOUSE+2 sta CORE.IRQ.MOUSE.2+2 and #$0f sta IRQ.0n asl asl asl asl sta IRQ.n0 php sei bit RROMBNK2 Renable ROM to allow MOUSE II firmware works properly ldy #INITMOUSE jsr .10 ldy #SETMOUSE lda (ZPPtr1),y sta CORE.IRQ.MOUSE.Off.1+1 lda #MOUSEMODx.INTVBL+MOUSEMODx.ACTIVE jsr .10 bit RRAMWRAMBNK1 Back To LC Ram bit RRAMWRAMBNK1 ldy #SERVEMOUSE lda (ZPPtr1),y sta CORE.IRQ.MOUSE+1 ldy #READMOUSE lda (ZPPtr1),y sta CORE.IRQ.MOUSE.2+1 jsr IrqMgrInit.HZ2Tick dec CORE.IRQMode plp clc rts .9 plp sec rts .10 pha lda (ZPPtr1),y sta .11+1 pla ldx .11+2 Cn ldy IRQ.n0 .11 jmp $ffff SELF MODIFIED *-------------------------------------- IrqMgrInit.HZ2Tick lda A2osX.HZ sta CORE.TickPer10t sta CORE.Tick10t asl asl clc adc A2osX.HZ asl sta CORE.TickPerSec sta CORE.TickSec rts *-------------------------------------- EvtMgrInit >LDYAI MSG.EVT >SYSCALL2 puts stz CORE.EvtCount lda /Evt.Table sta pEvent+1 clc EvtMgrInit.RTS rts *-------------------------------------- TskMgrInit >LDYAI MSG.TSK >SYSCALL2 puts >LDYAI K.ENV.SIZE get a buffer for ENV >SYSCALL NewStkObj Buffer in AUX mem bcs EvtMgrInit.RTS >STYA ZPPtr1 txa ldy #S.PS.hENV sta (pPS),y sta SETWRITEAUX lda #0 sta (ZPPtr1) make sure blank!! sta CLRWRITEAUX >PUSHWI 0 >PUSHWI 0 >SYSCALL OpenSession bcs .99 sta S.Table.hSID ldy #S.PS.hStdIn lda (pPS),y sta S.Table.hFile lda #1 ldy #S.PS.hSession sta (pPS),y >LDYAI $2E0 Get ROOT from QC >SYSCALL2 strdup bcs .9 txa ldy #S.PS.hCWD sta (pPS),y >PUSHWI I.ENV.BOOT >PUSHWI $2C0 Get BOOT from QC >SYSCALL2 SetEnv .99 bcs .9 >PUSHWI I.ENV.ROOT >PUSHWI $2E0 Get ROOT from QC >SYSCALL2 SetEnv bcs .9 >PUSHWI I.ENV.PATH >SYSCALL2 PutEnv bcs .9 >PUSHWI I.ENV.LIB >SYSCALL2 PutEnv bcs .9 >PUSHWI I.ENV.DRV >SYSCALL2 PutEnv .9 rts *-------------------------------------- PwdMgrInit >LDYAI MSG.PWD >SYSCALL2 puts >LDYAI PWD.ETCPASSWD jsr PwdMgrInit.Load bcs .1 stx PWD.hUsrDB >STYA PWD.UsrDBSize >LDYAI PWD.ETCGROUP jsr PwdMgrInit.Load bcs .1 stx PWD.hGrpDB >STYA PWD.GrpDBSize .1 * clc .9 rts *-------------------------------------- PwdMgrInit.Load >PUSHYA >PUSHBI O.RDONLY >PUSHBI S.FI.T.TXT >PUSHWZ Aux type >SYSCALL2 LoadStkObj rts *-------------------------------------- * Modified CHARGET/CHARGOT for ROM CALL * CHRGET .EQ $B1 - C8 *-------------------------------------- Kernel.ZP .PH $B1 CHARGET inc TXTPTR bne CHARGOT inc TXTPTR+1 CHARGOT lda $ffff beq ZP.IsDigit.9 ZP.IsDigit cmp #'0' bcc ZP.IsDigit.9 cmp #'9'+1 rts ZP.IsDigit.9 sec rts .EP Kernel.ZP.S .EQ *-Kernel.ZP *-------------------------------------- Z80Code.Start .HS 31FF00 START: LD SP,000FFH Init Stack .HS 3EFF LD A,0FFH Set Flag .HS 320D00 LD (FLAG),A .HS 3200E1 LD (0E100H),A Back to 6502 .HS 18F3 JR START Loop .HS 00 FLAG: .DB 0 Z80Code.Size .EQ *-Z80Code.Start *-------------------------------------- A2osX.HZ2Cnt .DA #30,#25 *-------------------------------------- Mouse.OFS .HS 05070B0CFB Mouse.SIG .HS 38180120D6 *-------------------------------------- TClock.OFS .HS 01030507 TClock.SIG .HS 08285870 *-------------------------------------- SmartPort.OFS .HS 010305 SmartPort.SIG .HS 200003 *-------------------------------------- MSG.Init2 .AZ "A2osX[Stage2]:Init\nRelocating Kernel...\n" MSG.HZ .AZ "Kernel SYS Timer Set For %d0 hz Machine.\n" MSG.KCREAD .AZ "Reading Kernel Config File..." MSG.KCREAD.OK .AZ "OK\n" MSG.KCREAD.KO .AZ "\nError While Reading Kernel Config File, Using Default.\n" MSG.PRODOSFX .AZ "!!!Running under ProDOS.FX!!! Enabling lowercase mode.\n" MSG.Init2.OK .AZ "A2osX[Stage2]:Complete." *-------------------------------------- MSG.Init3 .AZ "A2osX[Stage3]:Init *** Press Ctrl-R for entering ROOT Mode ***\r\n" MSG.DEV .AZ "Device Manager..." *-------------------------------------- MSG.BLKDEV .AZ " Adding Device: /dev/%s, Addr:%H, Type: %s\r\n" MSG.BLKDEV.TBL .DA MSG.BLKDEV.RAM .DA MSG.BLKDEV.DII .DA MSG.BLKDEV.USR .DA MSG.BLKDEV.BLK .DA MSG.BLKDEV.SP .DA MSG.BLKDEV.RSP MSG.BLKDEV.RAM .AZ "/RAM Disk" MSG.BLKDEV.DII .AZ "Disk ][" MSG.BLKDEV.USR .AZ "User" MSG.BLKDEV.BLK .AZ "Generic Block" MSG.BLKDEV.SP .AZ "Smart Port" MSG.BLKDEV.RSP .AZ "Remapped SP" DRV.BLKDEV .DA DRV.RamDrive .DA DRV.DiskII .DA DRV.BlkDevice .DA DRV.BlkDevice .DA DRV.SmartPort .DA DRV.BlkDevice *-------------------------------------- MSG.IRQ .AZ "Interrupt Manager..." MSG.IRQ.IIGS .AZ " Apple IIgs VBL IRQ Activated." MSG.IRQ.MOUSE .AZ " Mouse Card VBL IRQ Activated." MSG.IRQ.CLOCK .AZ " Clock Card IRQ Activated." MSG.IRQ.POLL .AZ " Polling Mode." MSG.EVT .AZ "Event Manager..." MSG.TSK .AZ "Task Manager..." MSG.PWD .AZ "Password Manager..." MSG.EXEC .AZ "Executing %s..." MSG.StartupErr .AZ "Failed : [$%h]\r\n" MSG.Init3.OK .AZ "OK\r\nA2osX[Stage3]:Complete.\r\n" *-------------------------------------- MSG.HW .AZ "Checking Hardware..." MSG.HW.TypeSubT .AZ "Type=%h,SubT=%h\r\n" MSG.CPU .AZ "Checking CPU..." MSG.CPUTYPE .DA MSG.6502 .DA MSG.65C02 .DA MSG.65R02 .DA MSG.65816 MSG.6502 .AZ "6502." MSG.65C02 .AZ "65C02." MSG.65R02 .AZ "65R02." MSG.65816 .AZ "65816." MSG.CPU.SPEED .AZ "Checking CPU Speed (%d0Hz)..." MSG.CPU.SPEEDOK .AZ "%d.%02d Mhz.\r\n" MSG.Z80 .AZ "Checking Z80 CPU..." MSG.Z80.OK .AZ "Detected In Slot %d.\r\n" MSG.Z80.KO .AZ "Not Detected." *-------------------------------------- DEV.CONSOLE .AZ "/dev/console" RAMx .AZ "/RAMx" I.ENV.BOOT .AZ "BOOT" I.ENV.ROOT .AZ "ROOT" I.ENV.PATH .AZ "PATH=${BOOT}sbin/:${BOOT}bin/" I.ENV.LIB .AZ "LIB=${BOOT}lib/" I.ENV.DRV .AZ "DRV=${BOOT}drv/" SBININITD .AZ "${ROOT}sbin/initd" .DA #0 end of ARGV for ExecV *-------------------------------------- MLIGETFILEINFOEX00 .DA #2 .DA MLIOPEN00.FN .BS S.FIEX *-------------------------------------- MLIOPEN00 .DA #3 .DA MLIOPEN00.FN .DA $B000 .BS 1 MLIOPEN00.FN >PSTR "A2osX.kconfig" *-------------------------------------- MLIREAD00 .DA #4 .BS 1 .DA A2osX.KCONFIG .DA 16 .BS 2 *-------------------------------------- MLICLOSE00 .DA #1 .BS 1 *-------------------------------------- FD.NULL .DA #S.FD.T.CDEV .DA #0 HANDLER .DA #0 BUSID .DA #0 DEVID .DA 0 BUSPTR .DA DRV.NULL .DA 0 DCBPTR .DA 0 BUFPTR FD.NULL.NAME .AZ "null" NAME *-------------------------------------- FD.TTY .DA #S.FD.T.CDEV .DA #0 HANDLER .DA #0 BUSID .DA #1 DEVID .DA 0 BUSPTR .DA DRV.TERM .BS 2 DCBPTR .BS 2 BUFPTR *-------------------------------------- FD.CONSOLE.NAME .AZ "console" FD.TTY.NAME .AZ "tty0" *-------------------------------------- FD.BDEV .DA #S.FD.T.BDEV .DA #0 HANDLER .DA #0 BUSID .DA #0 DEVID .BS 2 BUSPTR .BS 2 DRVPTR .DA 0 DCBPTR .DA 0 BUFPTR FD.BDEV.NAME .AZ "s1d1" *-------------------------------------- MAN SAVE usr/src/sys/kernel.s.init LOAD usr/src/sys/kernel.s ASM