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.hFD.MAX-1 .1 stz hFDs,x stz hFDs.hName,x stz hFDs.oCnt,x dex bpl .1 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 ZPPtr1 tay lda FD.TTY+S.FD.DEV.DCBPTR+1 sbc /80*24+S.DCB.TTY sta FD.TTY+S.FD.DEV.DCBPTR+1 sta ZPPtr1+1 sta SETWRITEAUX >STYA Mem.HiMem >STYA Mem.Free ldy #S.DCB.TTY-1 lda #0 .1 sta (ZPPtr1),y dey bne .1 lda FD.TTY+S.FD.DEV.DEVID sta (ZPPtr1) 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 stz A2osX.CPUSPEED+1 ldx A2osX.HZ ldy #0 php sei lda A2osX.HWType cmp #A2osX.HWType.IIc beq CPU.Init2c .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) 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 lda RDIOUDIS pha sta CLRIOUDIS lda IO.IIC.RDVBLMSK pha Save VBLIRQ enable sta IO.IIC.ENVBL lda IO.IIC.CLRVBLIRQ .1 bit VBL Wait VBL high.... bpl .1 bit IO.IIC.CLRVBLIRQ clear //c IRQ .3 lda #60 .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 .8 sta IO.IIC.DISVBL .8 pla bpl CPU.InitOk sta SETIOUDIS *-------------------------------------- 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 //c EXTINT COM1:Dont buffer but get IRQ sta $5fb //c EXTINT COM2:Dont buffer but get IRQ stz $5FA //c TYPHED no keyboard buffering stz $4FF //c ROM FF: no ACIABUF stz $4FC //c ROM 0X: no ACIABUF 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 >PUSHWZ >PUSHWZ >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 #0 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