NEW AUTO 3,1 *-------------------------------------- Kernel.Init2 sei ldx #$FF txs sta SETALTZP stx SaveSM stx 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 #AUX.S eor #$ff tax lda /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 lda /K.VER sta A2osX.KVER lda #K.VER sta A2osX.KVER+1 sta SETALTCHAR sta SETMIXED 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 * sta CLRMIXED >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 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 pMLIGFIEX bcc .1 eor #MLI.E.BADCALL beq .2 regular ProDOS ror A2osX.FSID Bad file, but ProDOS.FX detected bra .9 .1 sec ror A2osX.FSID File Present & ProDOS.FX detected .2 jsr MLI .DA #MLIOPEN .DA pMLIOPEN bcs .9 lda pMLIOPEN+5 sta pMLIREAD+1 sta pMLICLOSE+1 jsr MLI .DA #MLIREAD .DA pMLIREAD php pha jsr MLI .DA #MLICLOSE .DA pMLICLOSE pla plp bcs .9 >LDYAI MSG.KCREAD.OK bra .8 .9 >LDYAI MSG.KCREAD.KO .8 jsr PrintFYA lda A2osX.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.NOD.MAX*2-1 .2 stz Nod.Table.hName,x dex bpl .2 ldx #K.PS.MAX*4-1 .3 stz PS.Table.PID,x dex bpl .3 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 ldx #K.FLT.MAX*4-1 .7 stz Flt.Table.pftLO,x dex bpl .7 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 #80*24+S.DCB.TTY sta FD.TTY+S.FD.DEV.DCBPTR sta .1+1 tay lda FD.TTY+S.FD.DEV.DCBPTR+1 sbc /80*24+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 >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.CPUSPEED+1 php sei lda MACHID and #MACHID.T eor #MACHID.T.IIc beq CPU.Init2c lda A2osX.HZ asl tax .1 bit VBL //e : Wait VBL high.... bpl .1 .2 lda VBL //e : wait VBL low bmi .2 .3 pha (3) pla (4) pha (3) pla (4) pha (3) pla (4) pha (3) pla (4) pha (3) pla (4) pha (3) pla (4) iny cpy #100 bne .5 ldy #0 inc A2osX.CPUSPEED+1 .5 eor VBL (4) bpl .3 (2*) dex bne .3 bra CPU.InitOK *-------------------------------------- CPU.Init2c sta CLRIOUDIS lda IO.IIC.RDVBLMSK pha Save VBLIRQ enable sta IO.IIC.ENVBL lda IO.IIC.CLRVBLIRQ ldx A2osX.HZ .1 bit VBL Wait VBL high.... bpl .1 bit IO.IIC.CLRVBLIRQ clear //c IRQ .3 lda #40 .4 pha (3) pla (4) pha (3) pla (4) dec bne .4 iny cpy #100 bne .5 inc A2osX.CPUSPEED+1 ldy #0 .5 bit VBL Wait VBL high.... bpl .3 bit IO.IIC.CLRVBLIRQ clear //c IRQ dex bne .3 pla Disable VBLIRQ ? bpl CPU.InitOk sta IO.IIC.DISVBL *-------------------------------------- CPU.InitOk plp sty A2osX.CPUSPEED >PUSHWI MSG.CPU.SPEEDOK lda A2osX.CPUSPEED+1 >PUSHA push CPU speed HI lda A2osX.CPUSPEED >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 jsr DevMgrInit.VSD 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.BLKDEVX,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 *-------------------------------------- DevMgrInit.VSD ldy #VSD.PATCH.SIZE-1 .1 lda $BF41,y cmp VSD.PATCH,y bne .9 dey bpl .1 php sei bit RRAMWRAMBNK2 bit RRAMWRAMBNK2 sta CLRALTZP ldx $d001 sta SETALTZP bit RRAMWRAMBNK1 bit RRAMWRAMBNK1 lda #A2osX.S.VSDRIVE sta A2osX.S,x plp .9 rts *-------------------------------------- VSD.PATCH bit RRAMWRAMBNK2 jsr $D002 bit RRAMWRAMBNK1 rts VSD.PATCH.SIZE .EQ *-VSD.PATCH *-------------------------------------- * 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+3 >LDYAI MSG.IRQ.IIGS bra .8 .9 plp sec rts .1 cmp #A2osX.HWType.IIc beq .2 jsr IrqMgrInit.TClock bcs .3 lda #"C" sta IRQ.Mode >LDYAI CORE.IRQ.TCLOCK jsr IrqMgrInit.SetV >LDYAI CORE.IRQ.TCLOCK.Off >STYA CORE.Quit+3 >LDYAI MSG.IRQ.CLOCK bra .8 .2 php sei sta CLRPAGE2 lda #$60 sta $5fa sta $5fb stz $4FF //c ROM FF stz $4FC //c ROM 1,2,3,4,5 plp .3 jsr IrqMgrInit.Mouse bcs .7 lda #"V" sta IRQ.Mode >LDYAI CORE.IRQ.MOUSE jsr IrqMgrInit.SetV >LDYAI CORE.IRQ.MOUSE.Off >STYA CORE.Quit+3 >LDYAI MSG.IRQ.MOUSE bra .8 .7 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 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 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 lda #$40 sta SETPAGE2 sta $478,x sta $7f8,x sta CLRPAGE2 sta $478,x sta $7f8,x lda #64 sta CORE.TickPerSec sta CORE.TickSec lda #11 sta CORE.TickPer10t sta CORE.Tick10t dec A2osX.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 A2osX.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 rts *-------------------------------------- TskMgrInit >LDYAI MSG.TSK >SYSCALL2 puts >LDYAI K.ENV.SIZE get a buffer for ENV >SYSCALL NewStkObj Buffer in AUX mem bcs .99 >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 .99 bcs .9 txa ldy #S.PS.hCWD sta (pPS),y >PUSHWI I.ENV.BOOT >PUSHWI $2C0 Get BOOT from QC >SYSCALL2 SetEnv 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 >SYSCALL2 LoadStkObj bcs .1 stx PWD.hUsrDB >STYA PWD.UsrDBSize >LDYAI PWD.ETCGROUP >SYSCALL2 LoadStkObj bcs .1 stx PWD.hGrpDB >STYA PWD.GrpDBSize .1 * clc .9 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 *-------------------------------------- Mouse.OFS .HS 05070B0CFB Mouse.SIG .HS 38180120D6 *-------------------------------------- TClock.OFS .HS 00020406 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.BLKDEVX .DA DRV.RamDrive .DA DRV.DiskII .DA DRV.BlkDev .DA DRV.BlkDev .DA DRV.SmartPort .DA DRV.BlkDev *-------------------------------------- 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 *-------------------------------------- pMLIGFIEX .DA #2 .DA FNKConfig .BS S.FIEX *-------------------------------------- pMLIOPEN .DA #3 .DA FNKConfig .DA $B000 .BS 1 FNKConfig >PSTR "A2osX.kconfig" *-------------------------------------- pMLIREAD .DA #4 .BS 1 .DA A2osX.KCONFIG .DA 16 .BS 2 *-------------------------------------- pMLICLOSE .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