From c85f3c62c4a6e7ea24b8b652f4c053e0467599dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20GIBERT?= Date: Thu, 21 Sep 2017 17:29:45 +0200 Subject: [PATCH] Kernel 0.9.1 : Code reorganization & move to CSTR (PS switcher, LS, IRQ & VBL) --- .Floppies/A2OSX.BUILD.po | Bin 819200 -> 819200 bytes .Floppies/A2OSX.SRC.po | Bin 819200 -> 819200 bytes BIN/LS.S.txt | 98 ++++++++++++++++---------------- BIN/LSDEV.S.txt | 82 ++++++++++++++++++--------- BIN/PS.S.txt | 30 +++++----- BIN/X.FILEENUM.S.txt | 119 ++++++++++++++++++++++----------------- INC/A2osX.I.txt | 2 +- README.md | 27 ++++----- SBIN/SHELL.S.CMD.txt | 3 + SBIN/SHELL.S.CSH.txt | 2 +- SBIN/SHELL.S.txt | 4 +- SYS/KERNEL.S.INIT.txt | 16 +++--- SYS/KERNEL.S.IRQ.txt | 20 ++++--- SYS/KERNEL.S.PS.txt | 22 ++++---- SYS/KERNEL.S.STDIO.txt | 6 +- 15 files changed, 241 insertions(+), 190 deletions(-) diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index 52e5d6787d06a6e850b17143f9ad32aee04d4ef6..20bb5a7d06394fa4630513c7a7109bcada851c5f 100644 GIT binary patch delta 7633 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 diff --git a/.Floppies/A2OSX.SRC.po b/.Floppies/A2OSX.SRC.po index 2c6fb27478572ef97149b1030609495880ce2a3f..9802c919ac060c07f77aa56b3e0085fdf41d1898 100644 GIT binary patch delta 27366 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 delta 27157 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%0A1hfW{yRge=|UF1o%+DT1^L6KVS&HL4}MrYg-90% zaBtvg-s*PdYR|}f1JCk~)13b3a~P2Re7p+(1(NHd>PAHcZ0<{FpSyq52UWL%=cQN4~eY3ol%gCaf}>>KIT16L|Sh>(I~`;_jR<% z^0G!DU_cSRH`V%9HGulm6C%c2OZZ1&;pB^5KRGE%={NR&kf-==O!fZ(jPqM-2xJ$t@h9)l zyg{FqbgjW!nBS%@F4$!TV|)r;g>{aL>WKPNlyxqmKFC{;aD_k)AYFktt++!GNffwd zqLz<(sLDiSFNDeGl%Ug5A>)sXrKWPKyq1yii67T>sTn zWbsPbko~nL?}4Z{9DUzt>k_w3t%n`|r-^%@*29k9YSyhp^#p~R*({}~TGBNe+-u== W*lfmua6Q})d;EdRiw`bx&ij9_EzyVo diff --git a/BIN/LS.S.txt b/BIN/LS.S.txt index f1da9c3b..07ff68e2 100644 --- a/BIN/LS.S.txt +++ b/BIN/LS.S.txt @@ -29,9 +29,10 @@ CS.START cld .DA #$61 6502,Level 1 (65c02) .DA #1 BIN Layout Version 1 .DA 0 - .DA CS.END-CS.START Code Length To Relocate - .DA DS.END-DS.START Data Segment to Allocate - .DA 0 + .DA CS.END-CS.START CS + .DA DS.END-DS.START DS + .DA #16 SS + .DA #8 ZP .DA 0 *-------------------------------------- * Relocation Table @@ -47,20 +48,15 @@ L.MSG.DIREXT .DA MSG.DIREXT L.MSG.FILE .DA MSG.FILE L.MSG.FILEEXT .DA MSG.FILEEXT L.PRODOS.FT.TXT .DA PRODOS.FT.TXT -L.STAT .DA STAT L.TIME.Format .DA TIME.Format -L.TIME.Create .DA TIME.Create -L.TIME.Mod .DA TIME.Mod .DA 0 *-------------------------------------- -CS.INIT >SYSCALL GetArgC - sta ArgCount - -.1 dec ArgCount - beq .5 +CS.INIT ldy #S.PS.ARGC + lda (pPs),y + >STA.G ArgCount + beq .7 - lda ArgCount - >SYSCALL GetArg.A +.1 >SYSCALL GetArg.A >STYA ZPPtr1 lda (ZPPtr1) @@ -89,15 +85,18 @@ CS.INIT >SYSCALL GetArgC .3 ldy OptionVars-1,x lda #$80 sta (pData),y - bra .1 + bra .7 .4 >LDYA ZPPtr1 jsr InitSrcDirYA bcs .9 - bra .1 scan for any other args + >LDA.G ArgCount + dec + sta (pData),y + bne .1 scan for any other args -.5 ldy #index +.7 ldy #index lda (pData),y bne .8 @@ -217,17 +216,14 @@ CS.RUN.DEV ldy #bLong clc .9 rts *-------------------------------------- -CS.RUN.DIR ldy #bAllmostAll - lda (pData),y +CS.RUN.DIR >LDA.G bAllmostAll bpl .10 - ldy #1 - lda (ZPFileName),y + lda (ZPFileName) cmp #'.' beq .5 -.10 ldy #bLong - lda (pData),y +.10 >LDA.G bLong bmi .4 >PUSHW ZPFileName @@ -235,19 +231,19 @@ CS.RUN.DIR ldy #bAllmostAll >SYSCALL PrintF.YA bcs .9 - lda #80/MAX.COL-2 - sec - sbc (ZPFileName) - beq .2 - tax + ldy #0 -.1 lda #' ' - phx +.1 lda (ZPFileName),y + beq .11 + +.11 lda #' ' + phy >SYSCALL PutChar.A - plx + ply bcs .9 - dex - bne .1 + iny + cpy #16 + bne .11 .2 jsr CS.RUN.UpdateColCnt bcc .5 @@ -271,8 +267,7 @@ CS.RUN.DIR ldy #bAllmostAll lda (pData),y bpl .8 - ldy #1 - lda (ZPFileName),y + lda (ZPFileName) cmp #'.' beq .8 @@ -354,7 +349,8 @@ CS.RUN.PUSHEXTRA lda (ZPFileStat),y beq .1 Month=0.....invalid date/time - >PUSHW L.TIME.Mod + >LEA.G TIME.Mod + >PUSHYA >PUSHW L.TIME.Format lda ZPFileStat clc @@ -369,7 +365,8 @@ CS.RUN.PUSHEXTRA lda (ZPFileStat),y beq .2 Month=0.....invalid date/time - >PUSHW L.TIME.Create + >LEA.G TIME.Create + >PUSHYA >PUSHW L.TIME.Format lda ZPFileStat clc @@ -380,8 +377,10 @@ CS.RUN.PUSHEXTRA >PUSHYA >SYSCALL StrFTime -.2 >PUSHW L.TIME.Mod ModTime - >PUSHW L.TIME.Create Create Time +.2 >LEA.G TIME.Mod + >PUSHYA + >LEA.G TIME.Create + >PUSHYA rts *-------------------------------------- CS.RUN.UpdateColCnt @@ -472,12 +471,12 @@ CS.END OptionList >PSTR "ALRalr" OptionVars .DA #bAllmostAll,#bLong,#bRecurse,#bAllmostAll,#bLong,#bRecurse *-------------------------------------- -MSG.DEVEXT >CSTR "%15S S%d,D%d Blocks Used:%5D,Total:%5D\r\n" -MSG.DIR >CSTR "%S/" -MSG.ENTER >CSTR "Directory:%S\r\n" -MSG.DIREXT >CSTR "%16S %a %s %s\r\n" -MSG.FILE >CSTR "%19S" -MSG.FILEEXT >CSTR "%15S %S $%H %a %10u %s %s\r\n" +MSG.DEVEXT >CSTR "%15s S%d,D%d Blocks Used:%5D Total:%5D\r\n" +MSG.DIR >CSTR "%s/" +MSG.ENTER >CSTR "Directory:%s\r\n" +MSG.DIREXT >CSTR "%16s %a %s %s\r\n" +MSG.FILE >CSTR "%19s" +MSG.FILEEXT >CSTR "%15s %S $%H %a %10u %s %s\r\n" *-------------------------------------- PRODOS.FT.HEX .HS 0406FAFCFDE2FF PRODOS.FT.TXT >PSTR "TXT" @@ -490,16 +489,19 @@ PRODOS.FT.TXT >PSTR "TXT" PRODOS.FT.DFLT >PSTR "$ " TIME.NODATE >CSTR " " TIME.Format >CSTR "%d-%b-%y %H:%M" -TIME.Create .BS 20 -TIME.Mod .BS 20 HEXDIGIT .AS '0123456789ABCDEF' -STAT .BS S.STAT -ArgCount .BS 1 *-------------------------------------- .DUMMY .OR 0 DS.START +ArgCount .BS 1 Index .BS 1 +STAT .BS S.STAT +TIME.Create .BS 20 +TIME.Mod .BS 20 + +hFullPath .BS 1 +bExists .BS 1 hDIRs .BS X.MAX.RECURSE hDIRENTs .BS X.MAX.RECURSE oDIRENTs .BS X.MAX.RECURSE*2 diff --git a/BIN/LSDEV.S.txt b/BIN/LSDEV.S.txt index 95606ff8..8e35c985 100644 --- a/BIN/LSDEV.S.txt +++ b/BIN/LSDEV.S.txt @@ -22,9 +22,10 @@ CS.START cld .DA #$61 6502,Level 1 (65c02) .DA #1 BIN Layout Version 1 .DA 0 - .DA CS.END-CS.START Code Length To Relocate - .DA 0 Data Segment to Allocate - .DA 0 + .DA CS.END-CS.START CS + .DA DS.END-DS.START DS + .DA #16 SS + .DA #4 ZP .DA 0 *-------------------------------------- * Relocation Table @@ -37,7 +38,6 @@ L.MSG0 .DA MSG0 L.MSG1 .DA MSG1 L.MSG2.C .DA MSG2.C L.MSG2.B .DA MSG2.B -L.DEV.SIZE .DA DEV.SIZE .DA 0 *-------------------------------------- CS.INIT clc @@ -46,11 +46,9 @@ CS.INIT clc CS.RUN >LDYA L.MSG0 >SYSCALL PrintF.YA - stz DEV.ID + >LDA.G DEV.ID - lda DEV.ID - -.1 >SYSCALL GetDevByIDA +.1 >SYSCALL GetDevByID.A bcs .7 >STYA ZPPTR1 @@ -59,10 +57,10 @@ CS.RUN >LDYA L.MSG0 bcs .9 - lda DEV.ID - >SYSCALL GetDevByIDA + >LDA.G DEV.ID + >SYSCALL GetDevByID.A >STYA pDev - + ldx #DEVMGR.STATUS jsr pDevJmp bcs .6 @@ -77,8 +75,9 @@ CS.RUN >LDYA L.MSG0 lda #10 >SYSCALL PutChar.A -.7 inc DEV.ID - lda DEV.ID +.7 >LDA.G DEV.ID + inc + sta (pData),y cmp #K.DEV.MAX bne .1 @@ -106,28 +105,51 @@ DumpHeader ldy #S.DEV.DRV.JMP+1 >PUSHB (ZPPTR1),y ldy #S.DEV.S - >PUSHB (ZPPTR1),y - sta DEV.S + lda (ZPPTR1),y + >STA.G DEV.S - >PUSHB DEV.ID + ldy #DEV.SFLAGS+7 + ldx #7 + +.1 lsr + pha + lda #'-' + bcc .2 + lda MSG.SFLAGS,x + +.2 sta (pData),y + pla + dey + dex + bpl .1 + + >LEA.G DEV.SFLAGS + >PUSHYA + + >LDA.G DEV.ID + >PUSHA >LDYA L.MSG1 >SYSCALL PrintF.YA rts *-------------------------------------- -DumpStatus bit DEV.S +DumpStatus >LDA.G DEV.S bpl .1 ldy #S.DEVSTAT.SIZE lda (ZPPTR2),y - sta DEV.SIZE - iny + >STA.G DEV.SIZE + + ldy #S.DEVSTAT.SIZE+1 lda (ZPPTR2),y - sta DEV.SIZE+1 - iny + >STA.G DEV.SIZE+1 + + ldy #S.DEVSTAT.SIZE+2 lda (ZPPTR2),y - sta DEV.SIZE+2 - >PUSHW L.DEV.SIZE + >STA.G DEV.SIZE+2 + + >LEA.G DEV.SIZE + >PUSHYA .1 ldy #S.DEVSTAT.VERSION+1 >PUSHB (ZPPTR2),y @@ -148,9 +170,9 @@ DumpStatus bit DEV.S dey >PUSHB (ZPPTR2),y - bit DEV.S + >LDA.G DEV.S bpl .2 - + >LDYA L.MSG2.B bra .3 .2 >LDYA L.MSG2.C @@ -166,13 +188,21 @@ CS.QUIT clc *-------------------------------------- CS.END MSG0 >CSTR "ID Status Flags Name Addr. Typ/Sub IDString Version Size (BLK)\r\n" -MSG1 >CSTR "%03d %b %b %4S $%H " +MSG1 >CSTR "%03d %s %b %4s $%H " MSG2.B >CSTR "$%h/$%h %16S %03d.%03d %10u" MSG2.C >CSTR "$%h/$%h %16S %03d.%03d n/a" +MSG.SFLAGS .AS "BWRLNEIO" *-------------------------------------- + .DUMMY + .OR 0 +DS.START DEV.ID .BS 1 DEV.S .BS 1 DEV.SIZE .BS 4 +DEV.SFLAGS .BS 9 +DS.END + .ED +*-------------------------------------- MAN SAVE /A2OSX.SRC/BIN/LSDEV.S ASM diff --git a/BIN/PS.S.txt b/BIN/PS.S.txt index 642de745..78e24e83 100644 --- a/BIN/PS.S.txt +++ b/BIN/PS.S.txt @@ -20,9 +20,10 @@ CS.START cld .DA #$61 6502,Level 1 (65c02) .DA #1 BIN Layout Version 1 .DA 0 - .DA CS.END-CS.START Code Length To Relocate - .DA 0 Data Segment to Allocate - .DA 0 + .DA CS.END-CS.START CS + .DA DS.END-DS.START DS + .DA #16 SS + .DA #2 ZP .DA 0 *-------------------------------------- * Relocation Table @@ -45,17 +46,18 @@ CS.RUN >LDYA pData >SYSCALL PrintF.YA lda (pData) PS.COUNT - beq .8 + beq .8 +.1 >LDA.G PS.Index + inc + sta (pData),y -.1 dec - asl - tay - + tay lda (pData),y PID + >SYSCALL GetMemPtr.A + >STYA ZPPTR1 - ldy #S.PS.hARGS lda (ZPPTR1),y >SYSCALL GetMemPtr.A @@ -73,13 +75,6 @@ CS.RUN >LDYA pData >PUSHA PID >LDYA L.MSG1 >SYSCALL PrintF.YA - -.4 lda ZPPTR1 - clc - adc #S.PS - sta ZPPTR1 - bcc .5 - inc ZPPTR1+1 .7 lda (pData) PS.COUNT dec @@ -104,7 +99,8 @@ MSG1 >CSTR "%03d %b %03d %S\r\n" .OR 0 DS.START PS.COUNT .BS 1 -PS.DATA .BS K.PS.MAX+K.PS.MAX +PS.DATA .BS K.PS.MAX +PS.Index .BS 1 DS.END .ED *-------------------------------------- diff --git a/BIN/X.FILEENUM.S.txt b/BIN/X.FILEENUM.S.txt index 90e248ce..50e0d50c 100644 --- a/BIN/X.FILEENUM.S.txt +++ b/BIN/X.FILEENUM.S.txt @@ -17,27 +17,33 @@ InitSrcDirYA >SYSCALL GetFullPath.YA bcc .10 rts -.10 stx .90+1 - >STYA ZPPtr1 +.10 >STYA ZPPtr1 + txa + >STA.G hFullPath - lda (ZPPtr1) - cmp #1 + ldy #1 + lda (ZPPtr1),y beq .5 we have '/' - >PUSHW L.STAT + >LEA.G STAT + >PUSHYA >PUSHW ZPPtr1 >SYSCALL Stat ror - sta .30+1 save file exists for later..... + >STA.G bExists save file exists for later..... bmi .1 File/DIR does not exists, go extract pattern - lda STAT+S.STAT.P.TYPE + >LDA.G STAT+S.STAT.P.TYPE cmp #$0f beq .5 TYPE=DIR, do not extract wildcard -.1 lda (ZPPtr1) Get Src Path Len - tay + ldy #0 +.1 iny + lda (ZPPtr1),y Get Src Path Len + bne .1 + + dey ldx #0 Init Wildcard count .2 lda (ZPPtr1),y search backward for a / @@ -53,36 +59,29 @@ InitSrcDirYA >SYSCALL GetFullPath.YA bne .2 .3 tya - cmp (ZPPtr1) - beq .5 Make sure at least one char +* cmp (ZPPtr1) +* beq .5 Make sure at least one char txa - bne .31 we have wc, go extract.... + bne .4 we have wc, go extract.... .30 lda #$ff no wc, remember if file exists? bmi .91 no, file not found.... -.31 ldx #0 - phy save / pos to trunk string later +.4 tya save / pos to trunk string later + >STA.G index -.4 iny - inx - lda (ZPPtr1),y - sta UsrBuf256,x tya - cmp (ZPPtr1) - bne .4 - - pla get back / pos - sta (ZPPtr1) trunk it for Opendir - stx UsrBuf256 set pattern len - - >LDYAI UsrBuf256 - >SYSCALL NewPstrYA + clc + adc ZPPtr1 + tay + lda ZPPtr1+1 + adc #0 + + >SYSCALL Newstr.YA bcs .9 txa - ldy #hFilter - sta (pData),y + >STA.G hFilter .5 >LDYAI 256 >SYSCALL GetMem.YA Get a 256 buffer to store BasePath @@ -90,29 +89,27 @@ InitSrcDirYA >SYSCALL GetFullPath.YA >STYA ZPPtr2 txa - ldy #hSrcBasePath - sta (pData),y + >STA.G hSrcBasePath - lda (ZPPtr1) - pha + >LDA.G index tay - -.6 lda (ZPPtr1),y - sta (ZPPtr2),y dey - bne .6 - - ply lda #'/' cmp (ZPPtr1),y - beq .7 - + beq .51 iny - sta (ZPPtr2),y + sta (ZPPtr1),y -.7 tya - sta (ZPPtr2) - +.51 lda #0 + sta (ZPPtr1),y Trunk before filter string + + ldy #$ff + +.6 iny + lda (ZPPtr1),y + sta (ZPPtr2),y + bne .6 + >LDYA ZPPtr2 >SYSCALL OpenDir.YA @@ -132,7 +129,7 @@ InitSrcDirYA >SYSCALL GetFullPath.YA .91 lda #MLI.ERR.FNOTFND .9 pha -.90 lda #$ff self modified +.90 >LDA.G hFullPath >SYSCALL FreeMem.A pla sec @@ -146,12 +143,13 @@ InitDstDirYA >SYSCALL GetFullPath.YA stx .90+1 >STYA ZPPtr1 - >PUSHW L.STAT + >LEA.G STAT + >PUSHYA >PUSHW ZPPtr1 >SYSCALL Stat bcs .1 File/DIR does not exists, go extract DstFileName - lda STAT+S.STAT.P.TYPE + >LDA.G STAT+S.STAT.P.TYPE cmp #$0f beq .5 Dst is a directory...no destfilename @@ -236,8 +234,12 @@ InitDstDirYA >SYSCALL GetFullPath.YA GetNextEntry jsr GetEntry bcs .9 - lda (ZPFileName) Save actual file len for setting up - tax new offset later + ldy #0 + +.10 iny + lda (ZPFileName),y Save actual file len for setting up + bne .10 + phy new offset later lda ZPFileStat clc @@ -265,7 +267,7 @@ GetNextEntry jsr GetEntry adc #oDIRENTs-1 tay - txa Get back previous file len + pla Get back previous file len sec adc (pData),y @@ -290,17 +292,26 @@ GetNextEntry jsr GetEntry clc rts -.1 jsr GetEntry.ReadDir +.1 pla + jsr GetEntry.ReadDir bcs .9 lda (ZPFileName) beq .99 + ldy #0 + +.2 iny + lda (ZPFileName),y + bne .2 + tya + sec adc ZPFileName sta ZPFileStat lda ZPFileName+1 adc #0 sta ZPFileStat+1 + clc .9 rts @@ -451,7 +462,7 @@ EnterSubDirYA.1 lda (pData),y >PUSHW ZPPtr2 >PUSHW ZPPtr1 - >SYSCALL PStrCat + >SYSCALL StrCat lda (ZPPtr1) inc @@ -541,3 +552,5 @@ BasePath..1 lda (pData),y *-------------------------------------- MAN SAVE /A2OSX.SRC/BIN/X.FILEENUM.S +LOAD /A2OSX.SRC/BIN/LS.S +ASM diff --git a/INC/A2osX.I.txt b/INC/A2osX.I.txt index 675a8227..28ddc89a 100644 --- a/INC/A2osX.I.txt +++ b/INC/A2osX.I.txt @@ -372,7 +372,7 @@ S.DEV.BUSID .EQ 6 S.DEV.DEVID .EQ 7 S.DEV.ROM.JMP .EQ 8 word * -S.DEV.NAME .EQ 11 L+4 MAX +S.DEV.NAME .EQ 11 4+\0 MAX * S.DEV .EQ 16 *----------- Smartport ---------------- diff --git a/README.md b/README.md index 25ada64e..19d777f2 100644 --- a/README.md +++ b/README.md @@ -73,10 +73,7 @@ Several subprojects are now indentified : ## General Information: -** Kernel 0.9.1 rewrite in progress ** - -(Kernel 0.9 has been archived) -It is confined in Aux LC Bank 1 & 2 to leave enough room at $EOOO for Drivers. +Kernel API is confined in Aux LC Bank 1 & 2 to leave enough room at $EOOO for Drivers. Network drivers, Mouse, DHGR.DRV can load and fit in Aux LC. Now it's time to make all external BINs use new API, then GUI development will resume. @@ -101,11 +98,11 @@ OApple+1,OApple+2,OApple+3 to switch between screens : Kernel Log, text, DHGR. | Name | Status | Comment | K.Ver | | ---- | ------ | ------- | ------| -| INSDRV | Working | | 0.9 | -| GETTY | Working | | 0.9 | -| LOGIN | In Progress | no auth using /etc/passd yet | 0.9 | -| SHELL | Working | (See Internal Shell commands) | 0.9 | -| KCONFIG | Working | Kernel Configuration Utility | 0.9 | +| INSDRV | Working | | 0.9.1 | +| GETTY | Working | | 0.9.1 | +| LOGIN | In Progress | no auth using /etc/passd yet | 0.9.1 | +| SHELL | Working | (See Internal Shell commands) | 0.9.1 | +| KCONFIG | Working | Kernel Configuration Utility | 0.9.1 | | ---- | ------ | ------- | ----- | | TCPIP | Working | Socket API.ARP,IP,ICMP,UDP & TCP ok | 0.9 | | DHCPCLNT| Working | rewritten to use new Socket API | 0.9 | @@ -149,7 +146,7 @@ note : '$VAR' does NOT expand Variable | Name | Status | Comment | K.Ver | | ---- | ------ | ------- | ----- | -| Console.DRV | Working | ANSI support in Progress. | 0.9 | +| Console.DRV | Working | ANSI support in Progress. | 0.9.1 | | SSC.DRV | Working | Apple "Super Serial Card" Driver | 0.9 | | SSC.I.DRV | Working | Apple "Super Serial Card" Driver (IRQ enabled) | 0.9 | | PIC.DRV | In Progress | Apple "Parallel Interface Card" Driver, renamed from PPIC.DRV | 0.9 | @@ -164,9 +161,9 @@ note : '$VAR' does NOT expand Variable ## BIN,External Shell commands: | Name | Status | Comment | K.Ver | | ---- | ------ | ------- | ----- | -| MEM | Working | Old dump behavior is now MEMDUMP. New MEM command displays MEMSTAT (Main, Aux & Kernel Memory) | 0.9 | -| LSDEV | Working | | 0.9 | -| PS | Working | | 0.9 | +| MEM | Working | Old dump behavior is now MEMDUMP. New MEM command displays MEMSTAT (Main, Aux & Kernel Memory) | 0.9.1 | +| LSDEV | Working | | 0.9.1 | +| PS | Working | | 0.9.1 | | MD | Working | | 0.9 | | LS | Working | -A : Do Not Print . & .. | 0.9 | | | | -L : long listing with size/date... | | @@ -182,7 +179,7 @@ note : '$VAR' does NOT expand Variable | | | -Q : Quiet | | | | | -R : Recurse subdirectories | | | | | -Y : Dont't Prompt For Override | | -| CAT | Working | -A : Show All non printable caracters | 0.9 | +| CAT | Working | -A : Show All non printable caracters | 0.9.1 | | | | -N : Number all output lines | | | | | -S : Suppress repeated empty output lines | | | CHTYP | In Progress | -C : Continue On Error | 0.9 | @@ -207,7 +204,7 @@ note : '$VAR' does NOT expand Variable | Name | Status | Comment | K.Ver | | ---- | ------ | ------- | ----- | | ASM | In Progress | S-C MASM based multi CPU assembler | 0.9 | -| MEMDUMP | Working | | 0.9 | +| MEMDUMP | Working | | 0.9.1 | | RPCDUMP | Working | tool based on UDP socket API, renamed from RPCINFO | 0.9 | ## Misc diff --git a/SBIN/SHELL.S.CMD.txt b/SBIN/SHELL.S.CMD.txt index 2f3ccdc2..174138aa 100644 --- a/SBIN/SHELL.S.CMD.txt +++ b/SBIN/SHELL.S.CMD.txt @@ -212,6 +212,9 @@ Cmd.Exec.EXT.TXT * BIN : Launch "/PATH/CMD ARGS" *-------------------------------------- Cmd.Exec.EXT.BIN + lda (ZPPTR2) Some ARGS ? + beq .1 + jsr Cmd.Exec.EXT.SEP Add a space.... >PUSHW ZPPTR2 diff --git a/SBIN/SHELL.S.CSH.txt b/SBIN/SHELL.S.CSH.txt index 23f87881..f3f302f6 100644 --- a/SBIN/SHELL.S.CSH.txt +++ b/SBIN/SHELL.S.CSH.txt @@ -163,7 +163,7 @@ CSH.Run jsr CSH.GetBuf >STA.G bCmdBufexec >LDA.G bEcho -* beq .80 + beq .80 >PUSHW ZPCMDBuf >LDYA L.MSG.ECHO diff --git a/SBIN/SHELL.S.txt b/SBIN/SHELL.S.txt index e030f091..7a85a53d 100644 --- a/SBIN/SHELL.S.txt +++ b/SBIN/SHELL.S.txt @@ -156,7 +156,7 @@ CS.RUN >LDA.G bReadMode READ Command ? jsr CMD.Parse >LDA.G CmdBuflen - beq .8 Empty line + beq .10 Empty line jsr HIS.Add @@ -539,7 +539,7 @@ CSHCMDS >PSTR "IF" >PSTR "FLOAT" .HS 00 *-------------------------------------- -MSG.GREETINGS >CSTR "\r\nA2osX-Shell\r\n\r\n" +MSG.GREETINGS >CSTR "\r\nA2osX-Shell 0.9.1\r\n\r\n" MSG.PROMPT >CSTR "%s$ " MSG.ECHO >CSTR ">%s\r\n" MSG.ERROR >CSTR "[$%h]:%S.\r\n" diff --git a/SYS/KERNEL.S.INIT.txt b/SYS/KERNEL.S.INIT.txt index 0a6adb5b..b041257c 100644 --- a/SYS/KERNEL.S.INIT.txt +++ b/SYS/KERNEL.S.INIT.txt @@ -514,8 +514,6 @@ IrqMgrInit >LDYAI MSG.IRQ lda (ZPPtr1),y sta K.IrqMgrVBL.MRM+1 - bit RROMBNK2 Renable ROM to allow MOUSE II firmware works properly - ldy #SETMOUSE lda (ZPPtr1),y sta .7+1 @@ -525,16 +523,20 @@ IrqMgrInit >LDYAI MSG.IRQ ldx ZPPtr1+1 DEVSLOTCn stx .7+2 ldy K.IrqMgrVBL.n0 - + + bit RROMBNK2 Renable ROM to allow MOUSE II firmware works properly + .7 jsr $ffff self Modified, CALL SETMOUSE bcs * bit RRAMWRAMBNK1 Back To LC Ram bit RRAMWRAMBNK1 - inc K.IrkMgr.VBL set=1 awaiting IrqMgr confirmation plp + lda #"V" + sta SYS.BASL0+37 + >LDYAI MSG.IRQ.VBL >SYSCALL PrintF.YA clc @@ -674,11 +676,11 @@ DevMgrInit.AddDev lda DEV.HEADER+S.DEV.BUSID ora #$30 - sta DEV.HEADER+S.DEV.NAME+2 SnDy + sta DEV.HEADER+S.DEV.NAME+1 SnDy lda DEV.HEADER+S.DEV.DEVID ora #$30 - sta DEV.HEADER+S.DEV.NAME+4 SxDn + sta DEV.HEADER+S.DEV.NAME+3 SxDn ldy #S.DEV-1 @@ -702,7 +704,7 @@ DEV.HEADER clc .BS 1 DEV.ID .BS 2 ROM.JMP .BS 1 - >PSTR "S1D1" 5 bytes + >CSTR "S1D1" 5 bytes *-------------------------------------- SmartPort.OFS .HS 010305 SmartPort.SIG .HS 200003 diff --git a/SYS/KERNEL.S.IRQ.txt b/SYS/KERNEL.S.IRQ.txt index dce97bfd..4a35e900 100644 --- a/SYS/KERNEL.S.IRQ.txt +++ b/SYS/KERNEL.S.IRQ.txt @@ -60,15 +60,16 @@ K.IrkMgr.VBLINT .BS 1 * ProDOS IRQ Manager (GP) *-------------------------------------- K.IrqHandler lda K.IrkMgr.VBL - beq .10 0, totally disabled.... - + beq K.IrqHandler.DEV 0, totally disabled.... + +K.IrqHandler.VBL jsr K.IrqMgrVBL.MSM SERVEMOUSE - bcs .10 Not From Mouse + bcs K.IrqHandler.DEV Not From Mouse ldx K.IrqMgrVBL.0n lda $778,x and #$08 IRQ was caused by VBL ? - beq .10 + beq K.IrqHandler.DEV ldx K.IrqMgrVBL.MRM+2 $Cn ldy K.IrqMgrVBL.n0 @@ -77,13 +78,16 @@ K.IrqHandler lda K.IrkMgr.VBL inc K.IrkMgr.VBLINT lda SYS.BASL0+37 - eor #'V' - sta SYS.BASL0+37 Confirm VBL signal valid for EvtMgr + eor #$80 + sta SYS.BASL0+37 + sec + ror K.IrkMgr.VBL Confirm VBL signal valid for EvtMgr clc rts - -.10 >LDYAI DevMgr.Table +*-------------------------------------- +K.IrqHandler.DEV + >LDYAI DevMgr.Table >STYA $fe ldx DevMgr.Count diff --git a/SYS/KERNEL.S.PS.txt b/SYS/KERNEL.S.PS.txt index 00ee2f56..553ea09e 100644 --- a/SYS/KERNEL.S.PS.txt +++ b/SYS/KERNEL.S.PS.txt @@ -173,12 +173,11 @@ PS.CreateChild ldx #0 .9 rts *-------------------------------------- PS.CmdLine2Args >STYA ZPPtr1 - ldy #0 .1 lda (ZPPtr1),y compute strlen in Y,X beq .2 - cmp #'"' skip "" in computation.... + cmp #'"' skip " in computation.... beq .1 iny bne .1 max 255 @@ -227,9 +226,11 @@ PS.CmdLine2Args >STYA ZPPtr1 lda #0 .70 sta (ZPPtr2) yes, set this token len + .71 inc ZPPtr2 bne .72 inc ZPPtr2+1 + .72 iny bne .4 @@ -358,21 +359,22 @@ PS.DupEnv.A jsr K.GetMemPtr.A *-------------------------------------- K.GetPSList.YA >STYA ZPPtr1 - lda CORE.PSCount - sta (ZPPtr1) - ldx #0 - ldy #1 + ldy #0 .1 lda PS.Table.PID,x - sta (ZPPtr1),y - iny + beq .2 + lda PS.Table.hMem,x - sta (ZPPtr1),y iny - inx + sta (ZPPtr1),y + +.2 inx cpx CORE.PSCount bne .1 + +.9 tya + sta (ZPPtr1) rts *-------------------------------------- MAN diff --git a/SYS/KERNEL.S.STDIO.txt b/SYS/KERNEL.S.STDIO.txt index 359f1a9a..c01388b7 100644 --- a/SYS/KERNEL.S.STDIO.txt +++ b/SYS/KERNEL.S.STDIO.txt @@ -1073,11 +1073,13 @@ PrintF.SS ldy #$00 PSTR .2 lda PADLEN beq .8 -.3 lda PADCHAR +.3 cpy PADLEN + beq .8 + + lda PADCHAR jsr Printf.Cout bcs .9 iny - cpy PADLEN bne .3 .8 clc