diff --git a/BIN/LS.S.txt b/BIN/LS.S.txt index 56bd7829..9b5db0e2 100644 --- a/BIN/LS.S.txt +++ b/BIN/LS.S.txt @@ -49,67 +49,42 @@ CS.INIT >LDYA L.LIBSTR >SYSCALL SYS.LoadLibYA sta hLIBSTR - stz TmpBuffer256 - >SYSCALL SYS.GetArgC cmp #1 bne .1 - jsr CS.INIT.GETPFX no arg, go get current prefix - bra .3 + ldy #S.PS.hPREFIX + lda (pPs),y + >SYSCALL SYS.GetMemPtrA + >SYSCALL SYS.NewPStrYA no arg, go get current prefix + stx hFullPath + bra .2 .1 lda #1 >SYSCALL SYS.GetArgA - >STYA ZPPtr1 - - ldy #1 - lda (ZPPtr1),y - cmp #'/' full path starting with '/'? - beq .2 yes, do not append to current prefix - - jsr CS.INIT.GETPFX - -.2 >PUSHW ZPPtr1 - >PUSHWI TmpBuffer256 - >SYSCALL SYS.PStrCat -.3 >LDYAI TmpBuffer256 - >SYSCALL SYS.CheckPrefixYA is it a existing directory? - bcs .5 no, let ListDirInitYA extract pattern - - lda TmpBuffer256 - tay - lda #'/' - cmp TmpBuffer256,y - beq .4 - iny - sta TmpBuffer256,y + >SYSCALL SYS.GetFullPathYA + stx hFullPath -.4 iny - lda #'*' - sta TmpBuffer256,y - -.5 >LDYAI TmpBuffer256 - >SYSCALL SYS.ListDirInitYA - bcs .9 +.2 >SYSCALL SYS.ListDirInitYA + bcs .99 ldy #hS.LISTDIR sta (pData),y + + jsr .99 lda (pPs) ora #S.PS.F.EVENT Now accept events sta (pPs) + clc rts -.9 sec - rts -*-------------------------------------- -CS.INIT.GETPFX ldy #S.PS.hPREFIX - lda (pPs),y - >SYSCALL SYS.GetMemPtrA - >PUSHYA - >PUSHWI TmpBuffer256 - >SYSCALL SYS.PStrCpy +.99 pha + lda hFullPath + >SYSCALL SYS.FreeMemA + pla + sec rts *-------------------------------------- CS.RUN ldy #bCANCEL @@ -414,6 +389,7 @@ TFF >PSTRING "SYS" PRODOS.FT.DFLT >PSTRING "$ " HEXDIGIT .AS '0123456789ABCDEF' hLIBSTR .BS 1 +hFullPath .BS 1 *-------------------------------------- .DUMMY .OR 0 diff --git a/BIN/MD.S.txt b/BIN/MD.S.txt index 728b26da..8816f5a7 100644 --- a/BIN/MD.S.txt +++ b/BIN/MD.S.txt @@ -34,53 +34,28 @@ CS.START cld .DA CS.QUIT .DA 0 *-------------------------------------- -CS.INIT stz hFullPath - ldy #S.PS.hARGS - lda (pPs),y - beq .9 - - >SYSCALL SYS.GetMemPtrA - >STYA ZPPTR1 - lda (ZPPTR1) - beq .9 - - ldy #1 - lda (ZPPTR1),y - cmp #'/' - bne .1 - - ldy #S.PS.hARGS - lda (pPs),y - bra .2 - -.1 ldy #S.PS.hARGS - lda (pPs),y - >PUSHA - ldy #S.PS.hPREFIX - lda (pPs),y - >PUSHA - >SYSCALL SYS.PStrCat - sta hFullPath - -.2 >SYSCALL SYS.GetMemPtrA +CS.INIT >SYSCALL SYS.GetArgC + cmp #1 + bne .99 + + lda #1 + >SYSCALL SYS.GetArgA + >SYSCALL SYS.GetFullPathYA + stx hFullPath >SYSCALL SYS.MLICreateDirYA - php - pha + pha save error code jsr .98 pla - plp + sec rts .98 lda hFullPath - beq .9 >SYSCALL SYS.FreeMemA -.9 lda #SYSMGR.ERRSYN +.99 lda #SYSMGR.ERRSYN sec rts *-------------------------------------- -CS.RUN sec - rts -*-------------------------------------- +CS.RUN CS.DOEVENT sec rts *-------------------------------------- diff --git a/BIN/RM.S.txt b/BIN/RM.S.txt index e84c98c3..85d369ee 100644 --- a/BIN/RM.S.txt +++ b/BIN/RM.S.txt @@ -38,49 +38,39 @@ L.MSG.ERR .DA MSG.ERR L.FullPath .DA FullPath .DA 0 *-------------------------------------- -CS.INIT ldy #S.PS.hARGS - lda (pPs),y - beq .98 +CS.INIT >SYSCALL SYS.GetArgC + cmp #1 + bne .99 + + lda #1 + >SYSCALL SYS.GetArgA + >SYSCALL SYS.GetFullPathYA + stx hFullPath - >SYSCALL SYS.GetMemPtrA - >STYA ZPPtr1 - lda (ZPPtr1) - beq .98 - ldy #1 - lda (ZPPtr1),y - cmp #'/' - bne .10 - - ldy #S.PS.hARGS - lda (pPs),y - bra .3 - -.10 ldy #S.PS.hARGS - lda (pPs),y - >PUSHA - ldy #S.PS.hPREFIX - lda (pPs),y - >PUSHA - >SYSCALL SYS.PStrCat - ldy #hDirPath - sta (pData),y - -.3 >SYSCALL SYS.GetMemPtrA >SYSCALL SYS.ListDirInitYA - bcs .99 + bcs .98 ldy #hS.LISTDIR sta (pData),y + jsr .98 + lda (pPs) ora #S.PS.F.EVENT Now accept events sta (pPs) clc rts -.98 >LDYA L.MSG.USAGE +.98 pha + lda hFullPath + >SYSCALL SYS.FreeMemA + pla + sec + rts + +.99 >LDYA L.MSG.USAGE >SYSCALL SYS.PSTRoutYA lda #SYSMGR.ERRSYN -.99 sec + sec rts *-------------------------------------- CS.RUN ldy #bCANCEL @@ -222,6 +212,7 @@ CS.END MSG.USAGE >PSTRING "Usage : RM [file/Dir, *,? wildcards allowed]\n" MSG.OK >PSTRING " [Ok]\n" MSG.ERR >PSTRING " [%h]\n" +hFullPath .BS 1 FullPath .BS 64 *-------------------------------------- .DUMMY diff --git a/SYS/KERNEL.S.CPU.txt b/SYS/KERNEL.S.CPU.txt deleted file mode 100644 index 3bb3fa46..00000000 --- a/SYS/KERNEL.S.CPU.txt +++ /dev/null @@ -1,200 +0,0 @@ -PR#3 -PREFIX /A2OSX.SRC -NEW -INC 1 -AUTO 6 - .LIST OFF -*-------------------------------------- -CPU.Init >LDAXI MSG.CPU - jsr PrintCStrAX - - jsr Detect6502 A = CPU type - sta A2osX.CPUTYPE - lda MSG.CPUTYPEH,y - tax - lda MSG.CPUTYPEL,y - jsr PrintCStrAX - -CPU.Init.Speed lda MACHID - and #MACHID.TYPE - cmp #MACHID.TYPE.IIc - beq CPU.Init.Z80 - - >LDAXI MSG.CPU.SPEED - jsr PrintCStrAX - - stz A2osX.RANDOM16 - stz A2osX.RANDOM16+1 - - php - sei - -.1 bit VBL - bpl .2 - -.2 bit VBL - bmi .2 - - ldx #0 Count LO - lda #0 Count HI - -.3 ldy #3 (2) - -.4 nop (2) - dey (2) - bne .4 (2*) - - inc A2osX.RANDOM16 (6) - bne .5 (2*) - - inc A2osX.RANDOM16+1 (6) - bit VBL (4) - bpl .3 (2*) - bmi .6 - -.5 nop (2) - nop (2) - nop (2) - bit VBL (4) - bpl .3 (2*) - -.6 plp - - stz A2osX.CPUSPEED - -.7 sec - lda A2osX.RANDOM16 - 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 - pha push CPU speed LO - lda A2osX.CPUSPEED - pha push CPU speed HI - >LDAXI MSG.CPU.SPEEDOK - jsr PrintCStrAX - -CPU.Init.Z80 >LDAXI MSG.Z80 - jsr PrintCStrAX - jsr DetectZ80 - bcs .9 - sta A2osX.Z80SLOT - pha Push Z80Slot - - >LDAXI MSG.Z80.OK - jsr PrintCStrAX - rts - -.9 >LDAXI MSG.Z80.KO - jsr PrintCStrAX - rts -*-------------------------------------- -* Out: -* A = $60, 6502 -* A = $61, 65C02 -* A = $62, R65C02 -* A = $63, 65C816 -*-------------------------------------- -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 $1000-1,x 00000H for Z80 - dex - bne .1 - - stz ZPQuickPtr1 - lda #$C1 - sta ZPQuickPtr1+1 - -.2 sta (ZPQuickPtr1) - lda $100D - bmi .8 - inc ZPQuickPtr1+1 - lda ZPQuickPtr1+1 - cmp #$C8 - beq .9 CS - clc - adc #$20 - sta $100A - bra .2 - -.8 lda ZPQuickPtr1+1 - and #$0F - clc -.9 rts -*-------------------------------------- -Z80Code.Start .HS 31FFFF START: LD SP,0FFFFH 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.End .EQ * -Z80Code.Size .EQ Z80Code.End-Z80Code.Start -*-------------------------------------- -MSG.CPU >CSTRING "Checking CPU..." -MSG.CPU.SPEED >CSTRING "Detecting CPU Speed..." -MSG.CPUTYPEL .DA #MSG.6502 - .DA #MSG.65C02 - .DA #MSG.65R02 - .DA #MSG.65816 -MSG.CPUTYPEH .DA /MSG.6502 - .DA /MSG.65C02 - .DA /MSG.65R02 - .DA /MSG.65816 -MSG.6502 >CSTRING "6502.\n" -MSG.65C02 >CSTRING "65C02.\n" -MSG.65R02 >CSTRING "65R02.\n" -MSG.65816 >CSTRING "65816.\n" -MSG.CPU.SPEEDOK >CSTRING "%d.%02d Mhz.\n" -MSG.Z80 >CSTRING "Detecting Z80 CPU..." -MSG.Z80.OK >CSTRING "Detected In Slot %d.\n" -MSG.Z80.KO >CSTRING "Not Detected.\n" -*-------------------------------------- -MAN -SAVE SYS/KERNEL.S.CPU -LOAD SYS/KERNEL.S -ASM diff --git a/SYS/KERNEL.S.DIR.txt b/SYS/KERNEL.S.DIR.txt index 4b5eafac..7ffa4a95 100644 --- a/SYS/KERNEL.S.DIR.txt +++ b/SYS/KERNEL.S.DIR.txt @@ -13,7 +13,8 @@ AUTO 6 * CS : A = EC *-------------------------------------- S.OPENDIRYA jsr S.PFTCHECKPATHYA -* if +* if we are here, we only have to deal with Local ProDOS path + clc rts diff --git a/SYS/KERNEL.S.ENV.txt b/SYS/KERNEL.S.ENV.txt index 34758052..92adfd18 100644 --- a/SYS/KERNEL.S.ENV.txt +++ b/SYS/KERNEL.S.ENV.txt @@ -5,6 +5,28 @@ INC 1 AUTO 6 .LIST OFF *-------------------------------------- +S.ExpandPStrYA >STYA ZPQuickPtr3 + + lda (ZPQuickPtr3) + sta KrnBuffer256 + tay + +.1 lda (ZPQuickPtr3),y + sta KrnBuffer256,y + dey + bne .1 + + ldy #0 + +.2 stz S.ExpandPStr.Start + +.3 tya + cmp KrnBuffer256 End of PSTR? + beq .80 + + iny + lda KrnBuffer256,y +*-------------------------------------- * S.ExpandPStrYA * In: * Y,A = PTR to String to Expand (PSTRING) @@ -12,7 +34,8 @@ AUTO 6 * X = hMem to Expanded String (PSTRING) * Y,A = PTR to Expanded String *-------------------------------------- -S.ExpandPStrYA >STYA ZPQuickPtr3 +S.ExpandPStrYA.OLD + >STYA ZPQuickPtr3 stz KrnBuffer256 init Expanded String len=0 diff --git a/SYS/KERNEL.S.FIL.txt b/SYS/KERNEL.S.FIL.txt index 4e573269..e0882947 100644 --- a/SYS/KERNEL.S.FIL.txt +++ b/SYS/KERNEL.S.FIL.txt @@ -7,12 +7,19 @@ AUTO 6 *-------------------------------------- * For All SYS.xxxx calls, X = #SYSCall * Must be kept in X before calling -* S.PFTCheckPathXX +* S.PFTCheckXYZ *-------------------------------------- * S.FOPEN * In : * PULLW = PATH (PSTR) * PULLB = MODE +* SYS.FOPEN.R .EQ $01 //Ignored (No ProDOS equivalent) +* SYS.FOPEN.W .EQ $02 //Ignored (No ProDOS equivalent) +* SYS.FOPEN.A .EQ $04 Append +* SYS.FOPEN.T .EQ $08 Open/Append in Text mode +* SYS.FOPEN.X .EQ $80 Create if not exists +* PULLB = TYPE +* PULLW = AUXTYPE * Out : * CC : A = hFILE * CS : A = EC @@ -20,11 +27,32 @@ AUTO 6 S.FOPEN jsr S.PFTCHECKPATHSTK >PULLW MLICALL.PARAMS+1 >PULLB S.FOPEN.MODE + >PULLB S.FOPEN.TYPE + >PULLW S.FOPEN.AUXTYPE - >PUSHWI S.FILE.PRODOS + >MLICALL MLIGETFILEINFO + bcc .10 Already Exists + + bit S.FOPEN.MODE Create if not exists ? + bpl .9 No, return MLI error + + lda #$C3 Yes, Create... + sta MLICALL.PARAMS+3 Access + lda S.FOPEN.TYPE + sta MLICALL.PARAMS+4 File type + >LDYA S.FOPEN.AUXTYPE + >STYA MLICALL.PARAMS+5 Aux type + lda #$01 Storage=Standard Files + sta MLICALL.PARAMS+7 + >MLICALL MLICREATE + bcc .10 +.9 rts + +.10 >PUSHWI S.FILE.PRODOS >PUSHBI S.MEM.F.INIT0 jsr S.GetMem bcs .99 + >STYA ZPQuickPtr1 stx hFILE @@ -39,24 +67,35 @@ S.FOPEN jsr S.PFTCHECKPATHSTK sta (ZPQuickPtr1),y >MLICALL MLIOPEN - bcc .1 Failed... - bit S.FOPEN.MODE Create if not exists? - bpl .98 no....error + bcs .98 - -.1 lda MLICALL.PARAMS+5 get ref_num + lda MLICALL.PARAMS+5 get ref_num ldy #S.FILE.PRODOS.REF sta (ZPQuickPtr1),y + sta MLICALL.PARAMS+1 Next MLI Calls are REF_NUM based + lda S.FOPEN.MODE - bit #SYS.FOPEN.A - beq .1 + and #SYS.FOPEN.A Append ? + beq .20 + >MLICALL MLIGETEOF + bcs .98 + >MLICALL MLISETMARK + bcs .98 +.20 lda S.FOPEN.MODE + and #SYS.FOPEN.T Text Mode ? + beq .30 -.1 - lda hFILE + lda #$FF + sta MLICALL.PARAMS+2 + lda #$0D + sta MLICALL.PARAMS+3 + >MLICALL MLINEWLINE + +.30 lda hFILE clc rts CC @@ -67,6 +106,8 @@ S.FOPEN jsr S.PFTCHECKPATHSTK .99 rts *-------------------------------------- S.FOPEN.MODE .BS 1 +S.FOPEN.TYPE .BS 1 +S.FOPEN.AUXTYPE .BS 2 hFILE .BS 1 *-------------------------------------- * S.FCLOSEA @@ -101,7 +142,12 @@ S.FCLOSEA.1 ldy #S.FILE.PRODOS.REF * Y,A = Bytes Read *-------------------------------------- S.FREAD jsr S.PFTCHECKFILESTK - >PULLB MLICALL.PARAMS+1 + >PULLA + jsr S.GetMemPtrA + >STYA ZPQuickPtr1 + ldy #S.FILE.PRODOS.REF + lda (ZPQuickPtr1),y + sta MLICALL.PARAMS+1 >PULLW MLICALL.PARAMS+4 >PULLW MLICALL.PARAMS+2 >MLICALL MLIREAD @@ -118,6 +164,12 @@ S.FREAD jsr S.PFTCHECKFILESTK * Y,A = Bytes Written *-------------------------------------- S.FWRITE jsr S.PFTCHECKFILESTK + >PULLA + jsr S.GetMemPtrA + >STYA ZPQuickPtr1 + ldy #S.FILE.PRODOS.REF + lda (ZPQuickPtr1),y + sta MLICALL.PARAMS+1 >PULLB MLICALL.PARAMS+1 >PULLW MLICALL.PARAMS+4 >PULLW MLICALL.PARAMS+2 @@ -131,6 +183,10 @@ S.FWRITE jsr S.PFTCHECKFILESTK * A = hFILE *-------------------------------------- S.FFLUSHA jsr S.PFTCHECKFILEA + jsr S.GetMemPtrA + >STYA ZPQuickPtr1 + ldy #S.FILE.PRODOS.REF + lda (ZPQuickPtr1),y sta MLICALL.PARAMS+1 >MLICALL MLIFLUSH rts diff --git a/SYS/KERNEL.S.FIO.txt b/SYS/KERNEL.S.FIO.txt index 5ee82969..2d304341 100644 --- a/SYS/KERNEL.S.FIO.txt +++ b/SYS/KERNEL.S.FIO.txt @@ -204,75 +204,65 @@ S.LoadFile.Len .BS 2 * out : * A = hMem of Dir Listing *-------------------------------------- -S.ListDirInitYA >STYA R.BX Store path - - stz TmpFileName Reset File.Pattern +S.ListDirInitYA >STYA ZPQuickPtr3 Store path - lda (R.BX) + lda (ZPQuickPtr3) tay ldx #0 -.1 lda (R.BX),y +.1 lda (ZPQuickPtr3),y reverse read path until '/' found cmp #'/' beq .2 inx dey bne .1 -.2 stx TmpFileName +.2 stx TmpFileName store file pattern len in buffer txa - beq .4 + beq .4 no pattern ? - lda (R.BX) + lda (ZPQuickPtr3) tay -.3 lda (R.BX),y +.3 lda (ZPQuickPtr3),y sta TmpFileName,x dey dex bne .3 tya - sta (R.BX) remove pattern from path + sta (ZPQuickPtr3) remove pattern from path .4 >PUSHWI S.LISTDIR.SIZE get LISTDIR Struct >PUSHBI S.MEM.F.INIT0 reset all bytes jsr S.GetMem bcs .99 - stx S.ListDirInitYA.hDir - >STYA R.CX Store LISTDIR Struct - >LDYA R.BX + stx S.ListDirInitYA.hDir + >STYA ZPQuickPtr4 Store LISTDIR Struct + + >LDYA ZPQuickPtr3 jsr S.NewPStrYA bcs .99 txa ldy #S.LISTDIR.hPATH - sta (R.CX),y - - ldy TmpFileName + sta (ZPQuickPtr4),y + + lda TmpFileName beq .5 - - lda #0 - >PUSHYA - >PUSHBI 0 - jsr S.GetMem - bcs .98 - >STYA ZPQuickPtr1 + >LDYAI TmpFileName + jsr S.NewPStrYA + bcs .99 txa ldy #S.LISTDIR.hPATTERN - sta (R.CX),y + sta (ZPQuickPtr4),y - ldy TmpFileName -.40 lda TmpFileName,y - sta (ZPQuickPtr1),y - dey - bpl .40 - -.5 lda (R.BX) +.5 lda (ZPQuickPtr3) cmp #1 length = 1 ? ('/') bne .6 + jsr S.ListDirInitAV bcs .98 lda S.ListDirInitYA.hDir @@ -298,34 +288,35 @@ S.ListDirInitAV >PUSHWI 256 bcs .99 >PUSHYA push buffer for online call txa - sta (R.CX) save hONLINE buffer + sta (ZPQuickPtr4) save hONLINE buffer >PUSHBI 0 All devices jsr S.MLIOnline bcs .98 ldy #S.LISTDIR.ONLINEPTR * lda #0 make index point first Entry -* sta (R.CX),y +* sta (ZPQuickPtr4),y clc rts -.98 lda (R.CX) + +.98 lda (ZPQuickPtr4) jsr S.FreeMemA .99 sec rts *-------------------------------------- S.ListDirInitAD * lda #0 -* sta (R.CX) reset hONLINE +* sta (ZPQuickPtr4) reset hONLINE - >LDYA R.BX Open DIR + >LDYA ZPQuickPtr3 Open DIR jsr S.MLIOpenYA bcs .99 ldy #S.LISTDIR.REFNUM - sta (R.CX),y save ref_num + sta (ZPQuickPtr4),y save ref_num txa ldy #S.LISTDIR.hIOBUF - sta (R.CX),y save ProDOS IO buffer hMem + sta (ZPQuickPtr4),y save ProDOS IO buffer hMem >PUSHWI 512 get Read buffer >PUSHBI 0 @@ -333,7 +324,7 @@ S.ListDirInitAD bcs .99 txa ldy #S.LISTDIR.hREADBUF save Read Buffer hMem - sta (R.CX),y + sta (ZPQuickPtr4),y jsr S.ListDirReadBlock bcs .99 >STYA ZPQuickPtr1 @@ -341,31 +332,31 @@ S.ListDirInitAD ldy #$23 get entry_length lda (ZPQuickPtr1),y ldy #S.LISTDIR.EL - sta (R.CX),y + sta (ZPQuickPtr4),y ldy #$24 get entry_per_block lda (ZPQuickPtr1),y ldy #S.LISTDIR.EPB - sta (R.CX),y + sta (ZPQuickPtr4),y ldy #$25 get File_count LO lda (ZPQuickPtr1),y clc adc #1 Add 1 for VOL/DIR Header ldy #S.LISTDIR.FC - sta (R.CX),y + sta (ZPQuickPtr4),y ldy #$26 get File_count HI lda (ZPQuickPtr1),y adc #0 ldy #S.LISTDIR.FC+1 - sta (R.CX),y + sta (ZPQuickPtr4),y * ldy #S.LISTDIR.FI * lda #0 -* sta (R.CX),y +* sta (ZPQuickPtr4),y * iny -* sta (R.CX),y set FI to $0000 +* sta (ZPQuickPtr4),y set FI to $0000 clc .99 rts *-------------------------------------- diff --git a/SYS/KERNEL.S.INIT.txt b/SYS/KERNEL.S.INIT.txt deleted file mode 100644 index 049e1cac..00000000 --- a/SYS/KERNEL.S.INIT.txt +++ /dev/null @@ -1,185 +0,0 @@ -PR#3 -PREFIX /A2OSX.SRC -NEW -INC 1 -AUTO 6 - .LIST OFF -*-------------------------------------- -* Setup MainLC ($3FE) -* -* -* Setup AuxLC $FFFE->Kernel IRQ Handler -* if irq not handled, jmp (S.IrqMgrOldFFFE) -*-------------------------------------- -S.IrqMgrInit php - sei - >LDYA $FFFE - cpy #S.IrqHandlerAuxLC - bne .1 - cmp /S.IrqHandlerAuxLC - beq .2 - -.1 >STYA S.IrqMgrOldFFFE - >LDYAI S.IrqHandlerAuxLC - >STYA $FFFE - -.2 - -* >LDYAI $BE0C -* >STYA $3F0 - - plp - clc - rts -*-------------------------------------- -S.MemMgrInit >LDYAI MemMgr.MHiMem - >STYA MemMgr.HiMem - >STYA MemMgr.Free - >LDYAI MemMgr.MLoMem - >STYA MemMgr.LoMem - stz MemMgr.LastSlot Reserve Slot #0 - - sta SETWRITEAUX - - >LDYAI MemMgr.XHiMem - >STYA MemMgr.HiMem - >STYA MemMgr.Free - >LDYAI MemMgr.XLoMem - >STYA MemMgr.LoMem - stz MemMgr.LastSlot Reserve Slot #0 - - sta CLRWRITEAUX - - clc - rts -*-------------------------------------- -* S.DevMgrInit -*-------------------------------------- -S.DevMgrInit ldx #S.DEV.SIZE*DevMgr.Count -.1 lda DevMgr.NUL-1,x - sta DevMgr.Table-1,x - dex - bne .1 - - stz DevMgr.Table+S.DEV.SIZE*DevMgr.Count+1 - - lda #DevMgr.Count-1 - sta DevMgr.LastDevID - - >LDYAI DevMgr.End - >STYA DevMgr.Free - clc - rts -*-------------------------------------- -* S.EvtMgrInit -*-------------------------------------- -S.EvtMgrInit lda #10 - sta EVTMGR.10TH.CNT - - lda A2osX.HZ - sta EVTMGR.HZ.CNT - - lda MACHID - and #MACHID.TYPE - cmp #MACHID.TYPE.IIc - bne .8 - -* sta CLRIOUDIS -* sta ENBVBLIIC - -.8 lda /EvtMgr.Table - sta pEvent+1 - clc - rts -*-------------------------------------- -* S.TskMgrInit -*-------------------------------------- -S.TskMgrInit stz TSKMGR.LASTID - lda #1 - sta TSKMGR.SIZE One Slot Busy (Kernel PS=0) - - >LDYAI TskMgr.Table Clear whole process table - >STYA pPs - - ldx #K.PS.MAX - -.1 lda #0 - ldy #S.PS.SIZE-1 - -.2 sta (pPs),y - dey - bpl .2 - - lda pPs - clc - adc #S.PS.SIZE - sta pPs - bcc .3 - - inc pPs+1 -.3 dex - bne .1 - - >LDYAI TskMgr.Table Select Process 0 (Kernel) - >STYA pPs - - lda #1 - ldy #S.PS.hINDEV - sta (pPs),y Make In DEV = SYS - ldy #S.PS.hOUTDEV - sta (pPs),y Make OUT DEV = SYS - ldy #S.PS.hERRDEV - sta (pPs),y Make ERR DEV = SYS - - >SYSCALL SYS.GetDevByIDA - >STYA pDev - ldx #DEVMGR.OPEN - jsr pDevJmp - - >PUSHWI K.ENV.SIZE get a buffer for ENV - >PUSHBI S.MEM.F.INIT0 make sure blank - >SYSCALL SYS.GetMem create it... - bcs .9 - - txa - ldy #S.PS.hENV - sta (pPs),y - - >LDYAI TmpBuffer256 - >SYSCALL SYS.MLIGetPrefixYA - bcs .9 - - >LDYAI TmpBuffer256 - >SYSCALL SYS.NewPStrYA - bcs .9 - - txa - ldy #S.PS.hPREFIX - sta (pPs),y - - >PUSHWI TmpBuffer256 push ENV value - >PUSHWI I.ENV.A2osX push ENV name - >SYSCALL SYS.SetEnv - bcs .9 - - >LDYAI I.ENV.PATH - >SYSCALL SYS.PutEnvYA - bcs .9 - - >LDYAI I.ENV.LIB - >SYSCALL SYS.PutEnvYA - bcs .9 - - >LDYAI I.ENV.DRV - >SYSCALL SYS.PutEnvYA -.9 rts -*-------------------------------------- -I.ENV.A2osX >PSTRING "A2OSX" -I.ENV.PATH >PSTRING "PATH=${A2OSX}SBIN/;${A2OSX}BIN/" -I.ENV.LIB >PSTRING "LIB=${A2OSX}LIB/" -I.ENV.DRV >PSTRING "DRV=${A2OSX}DRV/" -*-------------------------------------- -MAN -SAVE SYS/KERNEL.S.INIT -LOAD SYS/KERNEL.S -ASM diff --git a/SYS/KERNEL.S.INIT2.txt b/SYS/KERNEL.S.INIT2.txt new file mode 100644 index 00000000..a7895a63 --- /dev/null +++ b/SYS/KERNEL.S.INIT2.txt @@ -0,0 +1,509 @@ +PR#3 +PREFIX /A2OSX.SRC +NEW +INC 1 +AUTO 6 + .LIST OFF +*-------------------------------------- +Kernel.Init2 >LDAXI MSG.Init2 + jsr PrintCStrAX + + sei + ldx #$FF init 6502 stack to highest + txs + sta SETALTZP + + stx A2osX.SaveSM + stx A2osX.SaveSX + + sta CLRALTZP Make MAIN ZP is enabled for X.PRINT.F + lda RROMBNK1 Make sure ROM is enabled for X.PRINT.F + cli + + >LDAXI MSG.Relocate + jsr PrintCStrAX + + sei + sta SETALTZP + + >LDYAI A2osX.BE00 + >STYA ZPQuickPtr1 + >LDYAI $BE00 + >STYA ZPQuickPtr2 + >LDYAI A2osX.BE00.SIZE^$FFFF + >STYA ZPQuickPtr3 + + jsr Kernel.Move + lda RRAMWRAMBNK2 + lda RRAMWRAMBNK2 + + >LDYAI A2osX.D002 + >STYA ZPQuickPtr1 + >LDYAI $D000 + >STYA ZPQuickPtr2 + >LDYAI A2osX.D002.SIZE^$FFFF + >STYA ZPQuickPtr3 + + jsr Kernel.Move + + lda RRAMWRAMBNK1 + lda RRAMWRAMBNK1 + + >LDYAI A2osX.D001 + >STYA ZPQuickPtr1 + >LDYAI $D000 + >STYA ZPQuickPtr2 + >LDYAI A2osX.D001.SIZE^$FFFF + >STYA ZPQuickPtr3 + + jsr Kernel.Move + + >LDYAI A2osX.E000 + >STYA ZPQuickPtr1 + >LDYAI $E000 + >STYA ZPQuickPtr2 + >LDYAI A2osX.E000.SIZE^$FFFF + >STYA ZPQuickPtr3 + + jsr Kernel.Move + + >LDYAI D.STACK.TOP + >STYA pStack init Soft Stack + + sta CLRALTZP Make MAIN ZP is enabled for X.PRINT.F + lda RROMBNK1 Make sure ROM is enabled for X.PRINT.F + cli + + lda #6 + sta A2osX.HZ + + pha push HZ + >LDAXI MSG.HZ + jsr PrintCStrAX + + jsr CPU.Init + + >LDAXI MSG.K.INIT + jsr PrintCStrAX + + sta SETALTZP + lda RRAMWRAMBNK1 + lda RRAMWRAMBNK1 + + jsr S.IrqMgrInit + bcs * + jsr S.MemMgrInit + bcs * + jsr S.DevMgrInit + bcs * + jsr S.EvtMgrInit + bcs * + jsr S.FltMgrInit + bcs * + jsr S.TskMgrInit + bcs * + + sta CLRALTZP Make sure MAIN ZP... + lda RROMBNK1 ... & ROM is enabled for X.PRINT.F + + >LDAXI MSG.Init2.OK + jsr PrintCStrAX + + sta SETALTZP + lda RRAMWRAMBNK1 + lda RRAMWRAMBNK1 + rts +*-------------------------------------- +MSG.Init2 >CSTRING "A2osX[Stage2]:Init\n" +MSG.Relocate >CSTRING "Relocating KERNEL...\n" +MSG.HZ >CSTRING "Kernel SYS Timer Set For %d0 hz Machine.\n" +MSG.K.INIT >CSTRING "Kernel Setup...\n" +MSG.Init2.OK >CSTRING "A2osX[Stage2]:Complete.\n" +*-------------------------------------- +CPU.Init >LDAXI MSG.CPU + jsr PrintCStrAX + + jsr Detect6502 A = CPU type + sta A2osX.CPUTYPE + lda MSG.CPUTYPEH,y + tax + lda MSG.CPUTYPEL,y + jsr PrintCStrAX + +CPU.Init.Speed lda MACHID + and #MACHID.TYPE + cmp #MACHID.TYPE.IIc + beq CPU.Init.Z80 + + >LDAXI MSG.CPU.SPEED + jsr PrintCStrAX + + stz A2osX.RANDOM16 + stz A2osX.RANDOM16+1 + + php + sei + +.1 bit VBL + bpl .2 + +.2 bit VBL + bmi .2 + + ldx #0 Count LO + lda #0 Count HI + +.3 ldy #3 (2) + +.4 nop (2) + dey (2) + bne .4 (2*) + + inc A2osX.RANDOM16 (6) + bne .5 (2*) + + inc A2osX.RANDOM16+1 (6) + bit VBL (4) + bpl .3 (2*) + bmi .6 + +.5 nop (2) + nop (2) + nop (2) + bit VBL (4) + bpl .3 (2*) + +.6 plp + + stz A2osX.CPUSPEED + +.7 sec + lda A2osX.RANDOM16 + 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 + pha push CPU speed LO + lda A2osX.CPUSPEED + pha push CPU speed HI + >LDAXI MSG.CPU.SPEEDOK + jsr PrintCStrAX + +CPU.Init.Z80 >LDAXI MSG.Z80 + jsr PrintCStrAX + jsr DetectZ80 + bcs .9 + sta A2osX.Z80SLOT + pha Push Z80Slot + + >LDAXI MSG.Z80.OK + jsr PrintCStrAX + rts + +.9 >LDAXI MSG.Z80.KO + jsr PrintCStrAX + rts +*-------------------------------------- +* Out: +* A = $60, 6502 +* A = $61, 65C02 +* A = $62, R65C02 +* A = $63, 65C816 +*-------------------------------------- +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 $1000-1,x 00000H for Z80 + dex + bne .1 + + stz ZPQuickPtr1 + lda #$C1 + sta ZPQuickPtr1+1 + +.2 sta (ZPQuickPtr1) + lda $100D + bmi .8 + inc ZPQuickPtr1+1 + lda ZPQuickPtr1+1 + cmp #$C8 + beq .9 CS + clc + adc #$20 + sta $100A + bra .2 + +.8 lda ZPQuickPtr1+1 + and #$0F + clc +.9 rts +*-------------------------------------- +Z80Code.Start .HS 31FFFF START: LD SP,0FFFFH 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.End .EQ * +Z80Code.Size .EQ Z80Code.End-Z80Code.Start +*-------------------------------------- +MSG.CPU >CSTRING "Checking CPU..." +MSG.CPU.SPEED >CSTRING "Detecting CPU Speed..." +MSG.CPUTYPEL .DA #MSG.6502 + .DA #MSG.65C02 + .DA #MSG.65R02 + .DA #MSG.65816 +MSG.CPUTYPEH .DA /MSG.6502 + .DA /MSG.65C02 + .DA /MSG.65R02 + .DA /MSG.65816 +MSG.6502 >CSTRING "6502.\n" +MSG.65C02 >CSTRING "65C02.\n" +MSG.65R02 >CSTRING "65R02.\n" +MSG.65816 >CSTRING "65816.\n" +MSG.CPU.SPEEDOK >CSTRING "%d.%02d Mhz.\n" +MSG.Z80 >CSTRING "Detecting Z80 CPU..." +MSG.Z80.OK >CSTRING "Detected In Slot %d.\n" +MSG.Z80.KO >CSTRING "Not Detected.\n" +*-------------------------------------- +Kernel.Move ldy #0 +.1 inc ZPQuickPtr3 + bne .2 + inc ZPQuickPtr3+1 + beq .9 + +.2 lda (ZPQuickPtr1),y + sta (ZPQuickPtr2),y + iny + bne .1 + + inc ZPQuickPtr1+1 + inc ZPQuickPtr2+1 + bne .1 +.9 rts +*-------------------------------------- +* Setup MainLC ($3FE) +* +* +* Setup AuxLC $FFFE->Kernel IRQ Handler +* if irq not handled, jmp (S.IrqMgrOldFFFE) +*-------------------------------------- +S.IrqMgrInit php + sei + >LDYA $FFFE + cpy #S.IrqHandlerAuxLC + bne .1 + cmp /S.IrqHandlerAuxLC + beq .2 + +.1 >STYA S.IrqMgrOldFFFE + >LDYAI S.IrqHandlerAuxLC + >STYA $FFFE + +.2 + +* >LDYAI $BE0C +* >STYA $3F0 + + plp + clc + rts +*-------------------------------------- +S.MemMgrInit >LDYAI MemMgr.MHiMem + >STYA MemMgr.HiMem + >STYA MemMgr.Free + >LDYAI MemMgr.MLoMem + >STYA MemMgr.LoMem + stz MemMgr.LastSlot Reserve Slot #0 + + sta SETWRITEAUX + + >LDYAI MemMgr.XHiMem + >STYA MemMgr.HiMem + >STYA MemMgr.Free + >LDYAI MemMgr.XLoMem + >STYA MemMgr.LoMem + stz MemMgr.LastSlot Reserve Slot #0 + + sta CLRWRITEAUX + + clc + rts +*-------------------------------------- +* S.DevMgrInit +*-------------------------------------- +S.DevMgrInit ldx #S.DEV.SIZE*DevMgr.Count +.1 lda DevMgr.NUL-1,x + sta DevMgr.Table-1,x + dex + bne .1 + + stz DevMgr.Table+S.DEV.SIZE*DevMgr.Count+1 + + lda #DevMgr.Count-1 + sta DevMgr.LastDevID + + >LDYAI DevMgr.End + >STYA DevMgr.Free + clc + rts +*-------------------------------------- +* S.EvtMgrInit +*-------------------------------------- +S.EvtMgrInit lda #10 + sta EVTMGR.10TH.CNT + + lda A2osX.HZ + sta EVTMGR.HZ.CNT + + lda MACHID + and #MACHID.TYPE + cmp #MACHID.TYPE.IIc + bne .8 + +* sta CLRIOUDIS +* sta ENBVBLIIC + +.8 lda /EvtMgr.Table + sta pEvent+1 + clc + rts +*-------------------------------------- +* S.TskMgrInit +*-------------------------------------- +S.TskMgrInit stz TSKMGR.LASTID + lda #1 + sta TSKMGR.SIZE One Slot Busy (Kernel PS=0) + + >LDYAI TskMgr.Table Clear whole process table + >STYA pPs + + ldx #K.PS.MAX + +.1 lda #0 + ldy #S.PS.SIZE-1 + +.2 sta (pPs),y + dey + bpl .2 + + lda pPs + clc + adc #S.PS.SIZE + sta pPs + bcc .3 + + inc pPs+1 +.3 dex + bne .1 + + >LDYAI TskMgr.Table Select Process 0 (Kernel) + >STYA pPs + + lda #1 + ldy #S.PS.hINDEV + sta (pPs),y Make In DEV = SYS + ldy #S.PS.hOUTDEV + sta (pPs),y Make OUT DEV = SYS + ldy #S.PS.hERRDEV + sta (pPs),y Make ERR DEV = SYS + + >SYSCALL SYS.GetDevByIDA + >STYA pDev + ldx #DEVMGR.OPEN + jsr pDevJmp + + >PUSHWI K.ENV.SIZE get a buffer for ENV + >PUSHBI S.MEM.F.INIT0 make sure blank + >SYSCALL SYS.GetMem create it... + bcs .9 + + txa + ldy #S.PS.hENV + sta (pPs),y + + >LDYAI TmpBuffer256 + >SYSCALL SYS.MLIGetPrefixYA + bcs .9 + + >LDYAI TmpBuffer256 + >SYSCALL SYS.NewPStrYA + bcs .9 + + txa + ldy #S.PS.hPREFIX + sta (pPs),y + + >PUSHWI TmpBuffer256 push ENV value + >PUSHWI I.ENV.A2osX push ENV name + >SYSCALL SYS.SetEnv + bcs .9 + + >LDYAI I.ENV.PATH + >SYSCALL SYS.PutEnvYA + bcs .9 + + >LDYAI I.ENV.LIB + >SYSCALL SYS.PutEnvYA + bcs .9 + + >LDYAI I.ENV.DRV + >SYSCALL SYS.PutEnvYA +.9 rts +*-------------------------------------- +S.FltMgrInit stz FltMgr.Table + clc + rts +*-------------------------------------- +I.ENV.A2osX >PSTRING "A2OSX" +I.ENV.PATH >PSTRING "PATH=${A2OSX}SBIN/;${A2OSX}BIN/" +I.ENV.LIB >PSTRING "LIB=${A2OSX}LIB/" +I.ENV.DRV >PSTRING "DRV=${A2OSX}DRV/" +*-------------------------------------- +MAN +SAVE SYS/KERNEL.S.INIT2 +LOAD SYS/KERNEL.S +ASM diff --git a/SYS/KERNEL.S.INIT3.txt b/SYS/KERNEL.S.INIT3.txt new file mode 100644 index 00000000..16568960 --- /dev/null +++ b/SYS/KERNEL.S.INIT3.txt @@ -0,0 +1,54 @@ +PR#3 +PREFIX /A2OSX.SRC +NEW +INC 1 +AUTO 6 + .LIST OFF +*-------------------------------------- +Kernel.Init3 ldx #DEVMGR.SELECT + jsr pDevJmp + + >LDYAI MSG.Init3 + >SYSCALL SYS.PSTROutYA + + ldy #S.PS.hPREFIX + lda (pPs),y + >SYSCALL SYS.GetMemPtrA + + >PUSHYA + >LDYAI MSG.Prefix + >SYSCALL SYS.PSTROutYA + + >PUSHWI STARTUP.CMDLINE + >LDYAI MSG.Startup + >SYSCALL SYS.PSTROutYA + + >LDYAI STARTUP.CMDLINE + >SYSCALL SYS.CreateProcessYA + bcs .9 + + >LDYAI MSG.Init3.OK + >SYSCALL SYS.PSTROutYA + + >LDYAI TskMgr.Table + >STYA pPs + + jmp S.KernelRun + +.9 >PUSHA + >LDYAI MSG.StartupErr + >SYSCALL SYS.PSTROutYA + bra * +*-------------------------------------- +MSG.Init3 >PSTRING "A2osX[Stage3]:Init\n" +MSG.Prefix >PSTRING "Prefix:%S\n" +MSG.Startup >PSTRING "Executing Kernel Startup Script...\nCmd:%S\n" +MSG.StartupErr >PSTRING "Failed : [$%h]\n" +MSG.Init3.OK >PSTRING "A2osX[Stage3]:Complete.\n" +*-------------------------------------- +STARTUP.CMDLINE >PSTRING "${A2OSX}SBIN/SHELL ${A2OSX}A2osX.STARTUP" +*-------------------------------------- +MAN +SAVE SYS/KERNEL.S.INIT3 +LOAD SYS/KERNEL.S +ASM diff --git a/SYS/KERNEL.S.PFT.txt b/SYS/KERNEL.S.PFT.txt index df01ffd5..53ab3e49 100644 --- a/SYS/KERNEL.S.PFT.txt +++ b/SYS/KERNEL.S.PFT.txt @@ -37,7 +37,7 @@ S.PFTCHECKPATHYA dey bne .2 - ldy #S.S.PFT.HANDLER + ldy #S.PFT.HANDLER lda (ZPQuickPtr2),y get hLib jsr S.GetMemPtrA >STYA .3+1 @@ -63,6 +63,7 @@ S.PFTCHECKPATHYA .9 >LDYA ZPQuickPtr1 restore passed params ldx S.PFT.SYSCALL + >LDYA ZPQuickPtr1 rts *-------------------------------------- * In : @@ -74,7 +75,7 @@ S.PFTCHECKPATHYA S.PFTCHECKFILESTK lda (pStack) read hFILE on top of stack S.PFTCHECKFILEA - jsr GetMemPtrA X = unmidified + jsr S.GetMemPtrA X = unmidified .8 clc rts diff --git a/SYS/KERNEL.S.txt b/SYS/KERNEL.S.txt index 0341ec69..97f197bb 100644 --- a/SYS/KERNEL.S.txt +++ b/SYS/KERNEL.S.txt @@ -21,184 +21,17 @@ ZPQuickPtr4 .EQ ZPKERNEL+6 *-------------------------------------- * Kernel Stage 2 *-------------------------------------- -Kernel.Init2 >LDAXI MSG.Init2 - jsr PrintCStrAX - - sei - ldx #$FF init 6502 stack to highest - txs - sta SETALTZP - - stx A2osX.SaveSM - stx A2osX.SaveSX - - sta CLRALTZP Make MAIN ZP is enabled for X.PRINT.F - lda RROMBNK1 Make sure ROM is enabled for X.PRINT.F - cli - - >LDAXI MSG.Relocate - jsr PrintCStrAX - - sei - sta SETALTZP - - >LDYAI A2osX.BE00 - >STYA ZPQuickPtr1 - >LDYAI $BE00 - >STYA ZPQuickPtr2 - >LDYAI A2osX.BE00.SIZE^$FFFF - >STYA ZPQuickPtr3 - - jsr Kernel.Move - lda RRAMWRAMBNK2 - lda RRAMWRAMBNK2 - - >LDYAI A2osX.D002 - >STYA ZPQuickPtr1 - >LDYAI $D000 - >STYA ZPQuickPtr2 - >LDYAI A2osX.D002.SIZE^$FFFF - >STYA ZPQuickPtr3 - - jsr Kernel.Move - - lda RRAMWRAMBNK1 - lda RRAMWRAMBNK1 - - >LDYAI A2osX.D001 - >STYA ZPQuickPtr1 - >LDYAI $D000 - >STYA ZPQuickPtr2 - >LDYAI A2osX.D001.SIZE^$FFFF - >STYA ZPQuickPtr3 - - jsr Kernel.Move - - >LDYAI A2osX.E000 - >STYA ZPQuickPtr1 - >LDYAI $E000 - >STYA ZPQuickPtr2 - >LDYAI A2osX.E000.SIZE^$FFFF - >STYA ZPQuickPtr3 - - jsr Kernel.Move - - >LDYAI D.STACK.TOP - >STYA pStack init Soft Stack - - sta CLRALTZP Make MAIN ZP is enabled for X.PRINT.F - lda RROMBNK1 Make sure ROM is enabled for X.PRINT.F - cli - - lda #6 - sta A2osX.HZ - - pha push HZ - >LDAXI MSG.HZ - jsr PrintCStrAX - - jsr CPU.Init - - >LDAXI MSG.K.INIT - jsr PrintCStrAX - - sta SETALTZP - lda RRAMWRAMBNK1 - lda RRAMWRAMBNK1 - - jsr S.IrqMgrInit - bcs * - jsr S.MemMgrInit - bcs * - jsr S.DevMgrInit - bcs * - jsr S.EvtMgrInit - bcs * - jsr S.TskMgrInit - bcs * - - sta CLRALTZP Make sure MAIN ZP... - lda RROMBNK1 ... & ROM is enabled for X.PRINT.F - - >LDAXI MSG.Init2.OK - jsr PrintCStrAX - - sta SETALTZP - lda RRAMWRAMBNK1 - lda RRAMWRAMBNK1 - + jsr Kernel.Init2 >DEBUGOA *-------------------------------------- * Kernel Stage 3 *-------------------------------------- -Kernel.Init3 ldx #DEVMGR.SELECT - jsr pDevJmp - - >LDYAI MSG.Init3 - >SYSCALL SYS.PSTROutYA - - ldy #S.PS.hPREFIX - lda (pPs),y - >SYSCALL SYS.GetMemPtrA - - >PUSHYA - >LDYAI MSG.Prefix - >SYSCALL SYS.PSTROutYA - - >PUSHWI STARTUP.CMDLINE - >LDYAI MSG.Startup - >SYSCALL SYS.PSTROutYA - - >LDYAI STARTUP.CMDLINE - >SYSCALL SYS.CreateProcessYA - bcs .9 - - >LDYAI MSG.Init3.OK - >SYSCALL SYS.PSTROutYA - - >LDYAI TskMgr.Table - >STYA pPs - - jmp S.KernelRun - -.9 >PUSHA - >LDYAI MSG.StartupErr - >SYSCALL SYS.PSTROutYA - bra * -*-------------------------------------- -Kernel.Move ldy #0 -.1 inc ZPQuickPtr3 - bne .2 - inc ZPQuickPtr3+1 - beq .9 - -.2 lda (ZPQuickPtr1),y - sta (ZPQuickPtr2),y - iny - bne .1 - - inc ZPQuickPtr1+1 - inc ZPQuickPtr2+1 - bne .1 -.9 rts + jsr Kernel.Init3 + >DEBUGOA *-------------------------------------- .INB X.PRINTF.S - .INB SYS/KERNEL.S.CPU - .INB SYS/KERNEL.S.INIT -*-------------------------------------- -MSG.Init2 >CSTRING "A2osX[Stage2]:Init\n" -MSG.Relocate >CSTRING "Relocating KERNEL...\n" -MSG.HZ >CSTRING "Kernel SYS Timer Set For %d0 hz Machine.\n" -MSG.K.INIT >CSTRING "Kernel Setup...\n" -MSG.Init2.OK >CSTRING "A2osX[Stage2]:Complete.\n" -*-------------------------------------- -MSG.Init3 >PSTRING "A2osX[Stage3]:Init\n" -MSG.Prefix >PSTRING "Prefix:%S\n" -MSG.Startup >PSTRING "Executing Kernel Startup Script...\nCmd:%S\n" -MSG.StartupErr >PSTRING "Failed : [$%h]\n" -MSG.Init3.OK >PSTRING "A2osX[Stage3]:Complete.\n" -*-------------------------------------- -STARTUP.CMDLINE >PSTRING "${A2OSX}SBIN/SHELL ${A2OSX}A2osX.STARTUP" + .INB SYS/KERNEL.S.INIT2 + .INB SYS/KERNEL.S.INIT3 *-------------------------------------- * Global Page *-------------------------------------- @@ -243,6 +76,9 @@ A2osX.E000 .EQ * .INB SYS/KERNEL.S.LIB .INB SYS/KERNEL.S.TSK .INB SYS/KERNEL.S.PS +*-------------------------------------- + .INB SYS/KERNEL.S.PFT + .INB SYS/KERNEL.S.FIL *-------------------------------------- * Make sure KERNEL.S.DEV is the last one *-------------------------------------- diff --git a/_/MidPoint.bas.txt b/_/MidPoint.bas.txt new file mode 100644 index 00000000..22ce9204 --- /dev/null +++ b/_/MidPoint.bas.txt @@ -0,0 +1,60 @@ +PR#3 +NEW +1000 GR +1010 COLOR = 12 : X1% = 3 : Y1% = 0 : X2% = 39 : Y2% = 17 +1020 GOSUB 2000 +1030 COLOR = 13 : X1% = 2 : Y1% = 1 : X2% = 39 : Y2% = 32 +1040 GOSUB 2000 +1050 COLOR = 14 : X1% = 1 : Y1% = 2 : X2% = 29 : Y2% = 39 +1060 GOSUB 2000 +1070 COLOR = 15 : X1% = 0 : Y1% = 3 : X2% = 15 : Y2% = 39 +1080 GOSUB 2000 + +1110 COLOR = 8 : X1% = 36 : Y1% = 0 : X2% = 0 : Y2% = 17 +1120 GOSUB 2000 +1130 COLOR = 9 : X1% = 37 : Y1% = 1 : X2% = 0 : Y2% = 32 +1140 GOSUB 2000 +1150 COLOR = 10 : X1% = 38 : Y1% = 2 : X2% = 26 : Y2% = 39 +1160 GOSUB 2000 +1170 COLOR = 11 : X1% = 39 : Y1% = 3 : X2% = 33 : Y2% = 39 +1180 GOSUB 2000 + +1999 END + +2000 VTAB 21 : PRINT "X1=";X1%;" Y1=";Y1%;" X2=";X2%;" Y2=";Y2% + +2010 DX% = X2% - X1% +2020 IF DX% = 0 Then VLIN Y1%,Y2% At X1% : RETURN +2030 IF DX% < 0 Then T% = X1% : X1% = X2% : X2% = T% : T% = Y1% : Y1% = Y2% : Y2% = T% : DX% = -DX% + +2040 DY% = Y2% - Y1% +2050 IF DY% = 0 Then HLIN X1%,X2% At Y1% : RETURN +2060 IF DY% < 0 Then IY% = -1 : DY% = - DY% : GOTO 2100 +2070 IY% = 1 + +2100 PLOT X1%,Y1% + +2110 IF DX% > DY% GOTO 3000 +2120 IF DX% < DY% GOTO 4000 + +2200 IF X1% = X2% THEN RETURN +2210 X1% = X1% + 1 +2220 Y1% = Y1% + IY% +2230 PLOT X1%,Y1% +2240 GOTO 2200 + +3000 IE% = 2 * DY% : D% = IE% - DX% : INE% = 2 * (DY% - DX%) +3010 IF X1% = X2% THEN RETURN +3020 IF D% > 0 THEN D% = D% + INE% : Y1% = Y1% + IY% : GOTO 3040 +3030 D% = D% + IE% +3040 X1% = X1% + 1 +3050 PLOT X1%,Y1% +3060 GOTO 3010 + +4000 IE% = 2 * DX% : D% = IE% - DY% : INE% = 2 * (DX% - DY%) +4010 IF Y1% = Y2% THEN RETURN +4020 IF D% > 0 THEN D% = D% + INE% : X1% = X1% + 1 : GOTO 4040 +4030 D% = D% + IE% +4040 Y1% = Y1% + IY% +4050 PLOT X1%,Y1% +4060 GOTO 4010