diff --git a/.Floppies/A2OSX.BOOTHD.woz b/.Floppies/A2OSX.BOOTHD.woz index 544d3777..3c6678de 100644 Binary files a/.Floppies/A2OSX.BOOTHD.woz and b/.Floppies/A2OSX.BOOTHD.woz differ diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index f04d0437..7aa9651c 100644 Binary files a/.Floppies/A2OSX.BUILD.po and b/.Floppies/A2OSX.BUILD.po differ diff --git a/.Floppies/A2OSX.TEST.po b/.Floppies/A2OSX.TEST.po index f7feb324..f61a8e6b 100644 Binary files a/.Floppies/A2OSX.TEST.po and b/.Floppies/A2OSX.TEST.po differ diff --git a/BIN/ATBROWSE.S.txt b/BIN/ATBROWSE.S.txt index 9a52715d..9360acb7 100644 --- a/BIN/ATBROWSE.S.txt +++ b/BIN/ATBROWSE.S.txt @@ -16,7 +16,6 @@ NEW ZS.START ZPAtlkParams .BS 2 ZPPTR1 .BS 2 -ZPPTR2 .BS 2 hBuf .BS 1 ZS.END .ED *-------------------------------------- @@ -63,12 +62,9 @@ CS.RUN jsr CS.RUN.GetInfo sec .9 rts *-------------------------------------- -CS.RUN.GetInfo lda #AT.GetInfo - >STA.G P.GetInfo+1 - - >LEA.G P.GetInfo - - jsr A2osX.ATKCALL +CS.RUN.GetInfo >LEA.G P.GetInfo + ldx #AT.GetInfo + jsr CS.RUN.GOATLK bcs .9 >PUSHW L.MSG.GETINFO @@ -96,7 +92,8 @@ CS.RUN.GetInfo lda #AT.GetInfo CS.RUN.GetMyZone >LEA.G ZoneBuf >STYA.G P.GetMyZone+$08 - lda #4 + + lda #4 1/4 sec >STA.G P.GetMyZone+$0C RetInt >STA.G P.GetMyZone+$0D RetCnt @@ -156,23 +153,28 @@ CS.RUN.LookupName lda ZPPTR1 clc adc #5 - sta ZPPTR2 + sta ZPPTR1 lda ZPPTR1+1 adc #0 - sta ZPPTR2+2 - >PUSHW ZPPTR2 - - >PUSHBI 7 + sta ZPPTR1+1 + + ldx #3 + +.3 >PUSHW ZPPTR1 + lda ZPPTR1 + sec + adc (ZPPTR1) + sta ZPPTR1 + lda ZPPTR1+1 + adc #0 + sta ZPPTR1+1 + dex + bne .3 + + >PUSHBI 11 >SYSCALL PrintF bcs .9 - lda ZPPTR2 - sec - adc (ZPPTR2) - sta ZPPTR1 - lda ZPPTR2+1 - adc #0 - sta ZPPTR1+1 >DEC.G P.LookupName+$17 bne .1 @@ -224,13 +226,15 @@ CS.QUIT lda hBuf CS.END MSG.NOATK .AZ "AppleTalk Not Loaded." MSG.ATKERR .AZ "AppleTalk Call %h, ERR:%H\r\n" -MSG.GETINFO .AS "Network/Node:$%h%h/$%h\r\n" - .AS "Bridge : $%h\r\n" - .AZ "HWID/ROMVER :$%h%h/$%h\r\n" +MSG.GETINFO .AS "Network/Node:%h%h/%h\r\n" + .AS "Bridge : %h\r\n" + .AZ "HWID/ROMVER :%h%h/%h\r\n" MSG.MYZONE .AZ "Zone Name :%S\r\n" -SEARCH.STRING >PSTR "=:=@*" -MSG.DUMP0 .AZ "Net Nod SkT En# Name" -MSG.DUMP .AZ "%H $%h $%h $%h %S\r\n" +SEARCH.STRING >PSTR "=" + >PSTR "=" + >PSTR "*" +MSG.DUMP0 .AZ "\e[?7lNet Nod SkT En# Object:Type@Zone" +MSG.DUMP .AZ "%H %h %h %h %S:%S@%S\r\n" *-------------------------------------- .DUMMY .OR 0 diff --git a/BIN/ATLOGON.S.txt b/BIN/ATLOGON.S.txt index bde85ca2..6f2014eb 100644 --- a/BIN/ATLOGON.S.txt +++ b/BIN/ATLOGON.S.txt @@ -15,6 +15,10 @@ NEW .OR ZPBIN ZS.START ZPAtlkParams .BS 2 +hCmdBuf .BS 1 +hReplyBuf .BS 1 +ZPCmdBuf .BS 2 +ZPReplyBuf .BS 2 ZPPTR1 .BS 2 ZPPTR2 .BS 2 ZS.END .ED @@ -56,6 +60,9 @@ CS.RUN ldy #S.PS.ARGC jsr CS.RUN.LookupName bcs .9 + jsr CS.RUN.GetParms + bcs .9 + jsr CS.RUN.FILogin bcs .9 @@ -71,12 +78,9 @@ CS.RUN.USAGE >PUSHW L.MSG.USAGE sec rts *-------------------------------------- -CS.RUN.GetInfo lda #AT.GetInfo - >STA.G P.GetInfo+1 - - >LEA.G P.GetInfo - - jsr A2osX.ATKCALL +CS.RUN.GetInfo >LEA.G P.GetInfo + ldx #AT.GetInfo + jsr CS.RUN.GOATLK bcs .9 >PUSHW L.MSG.GETINFO @@ -104,15 +108,47 @@ CS.RUN.GetInfo lda #AT.GetInfo CS.RUN.LookupName lda #1 >SYSCALL ArgV + >STYA ZPPTR1 + + >LEA.G NameBuf + >STYA ZPPTR2 >STYA.G P.LookupName+$08 + lda #1 + jsr CS.RUN.PutPtr2 + lda #'=' + jsr CS.RUN.PutPtr2 + + ldy #$ff + +.1 iny + lda (ZPPTR1),y + bne .1 + + tya + tax + jsr CS.RUN.PutPtr2 + +.2 ldy #0 + +.3 lda (ZPPTR1),y + jsr CS.RUN.PutPtr2 + iny + dex + bne .3 + + lda #1 + jsr CS.RUN.PutPtr2 + lda #'*' + jsr CS.RUN.PutPtr2 + lda #4 >STA.G P.LookupName+$C RetInt >STA.G P.LookupName+$D RetCnt >LDYAI 64 >STYA.G P.LookupName+$10 BufLen - >LDYA.G NameBuf - >STYA ZPPTR1 + >LDYA.G LookupBuf + >STYA.G P.LookupName+$12 BufPtr lda #1 @@ -122,20 +158,49 @@ CS.RUN.LookupName ldx #AT.LookupName jmp CS.RUN.GOATLK *-------------------------------------- -CS.RUN.FILogin >LEA.G P.FILogin+$4 +CS.RUN.GetParms >LEA.G P.GetParms + ldx #AT.GetParms + jsr CS.RUN.GOATLK + bcs .9 + + >LDYA.G P.GetParms+$4 + >SYSCALL GetMem + bcs .9 + + >STYA ZPCmdBuf + stx hCmdBuf + + >LDYA.G P.GetParms+$6 + >SYSCALL GetMem + bcs .9 + + >STYA ZPReplyBuf + stx hReplyBuf + +.9 rts +*-------------------------------------- +CS.RUN.FILogin >LDYA.G LookupBuf + >STYA ZPPTR1 + >LEA.G P.FILogin+$4 >STYA ZPPTR2 ldy #3 -.1 lda (ZPPTR1),y +.1 lda (ZPPTR1),y copy NETWORK/NODE/SOCKET sta (ZPPTR2),y dey bpl .1 - >LDYAI 64 - >STYA.G P.FILogin+$E + >LDYA.G P.GetParms+$4 + >STYA.G P.FILogin+$8 Cmd buffer length + + >LDYA ZPCmdBuf + >STYA.G P.FILogin+$A + + >LDYA.G P.GetParms+$6 + >STYA.G P.FILogin+$E Reply buffer length - >LEA.G ReplyBuf + >LDYA ZPReplyBuf >STYA.G P.FILogin+$10 >LEA.G P.FILogin @@ -174,10 +239,26 @@ CS.RUN.GOATLK >STYA ZPAtlkParams sec .9 rts *-------------------------------------- +CS.RUN.PutPtr2 sta (ZPPTR2) + inc ZPPTR2 + bne .8 + inc ZPPTR2+1 +.8 rts +*-------------------------------------- CS.DOEVENT sec rts *-------------------------------------- -CS.QUIT clc +CS.QUIT lda hReplyBuf + beq .1 + + >SYSCALL FreeMem + +.1 lda hCmdBuf + beq .2 + + >SYSCALL FreeMem + +.2 clc rts *-------------------------------------- CS.END @@ -193,10 +274,10 @@ MSG.USAGE .AZ "Usage : ATLOGON [USER] [PASSWORD]" DS.START P.GetInfo .BS $0F P.LookupName .BS $17 +P.GetParms .BS $07 P.FILogin .BS $19 -ZoneBuf .BS 33 -NameBuf .BS 64 -ReplyBuf .BS 64 +NameBuf .BS 36 +lookupBuf .BS 5+99 DS.END .ED *-------------------------------------- diff --git a/BIN/CSH.D.txt b/BIN/CSH.D.txt index 350aa056..0587ad3f 100644 --- a/BIN/CSH.D.txt +++ b/BIN/CSH.D.txt @@ -6,7 +6,6 @@ PathBuf .BS 65 hFileBuf .BS 1 -CSH.Buf .BS 2 CSH.BufPtrSave .BS 2 CSH.CmdSave .BS 1 diff --git a/BIN/CSH.I.txt b/BIN/CSH.I.txt index 37d8353d..14a68577 100644 --- a/BIN/CSH.I.txt +++ b/BIN/CSH.I.txt @@ -2,20 +2,22 @@ NEW AUTO 3,1 .LIST OFF *-------------------------------------- +CSH.T.VOID .EQ 0 +CSH.T.SCHAR .EQ 1 +CSH.T.SINT .EQ 2 +CSH.T.SLONG .EQ 3 +CSH.T.FLOAT .EQ 4 +CSH.T.UCHAR .EQ 5 +CSH.T.UINT .EQ 6 +CSH.T.ULONG .EQ 7 +CSH.T.VARIADIC .EQ $FF +*-------------------------------------- CSH.Q.POINTER .EQ %01000000 CSH.Q.PPOINTER .EQ %10000000 CSH.Q.PPPOINTER .EQ %11000000 -CSH.Q.CONST .EQ %00100000 -CSH.Q.FUNC .EQ %00010000 -CSH.T.VOID .EQ 0 -CSH.T.CHAR .EQ 1 -CSH.T.INT .EQ 2 -CSH.T.LONG .EQ 3 -CSH.T.UCHAR .EQ 4 -CSH.T.UINT .EQ 5 -CSH.T.ULONG .EQ 6 -CSH.T.FLOAT .EQ 7 -CSH.T.VARIADIC .EQ $F +CSH.Q.PCONST .EQ %00100000 +CSH.Q.CONST .EQ %00010000 +CSH.Q.FUNC .EQ %00001000 *-------------------------------------- CSH.OPChars .AS "!~+-*/%=&|^<>" CSH.OPChars.Cnt .EQ *-CSH.OPChars @@ -92,23 +94,24 @@ CSH.KW >PSTR "if" >PSTR "case" >PSTR "break" >PSTR "continue" + >PSTR "sizeof" >PSTR "typedef" >PSTR "struct" - >PSTR "sizeof" -CSH.TYPES >PSTR "void" - >PSTR "float" +CSH.MTYPES >PSTR "const" ALL >PSTR "signed" char,int,long >PSTR "unsigned" char,int,long >PSTR "short" int -CSH.STYPES >PSTR "char" +CSH.TYPES >PSTR "void" + >PSTR "char" >PSTR "int" >PSTR "long" + >PSTR "float" .HS 00 *-------------------------------------- CSH.FTYPES >PSTR "fastcall" * .HS 00 *-------------------------------------- -CSH.TYPESIZE .HS 0001020401020405 VOID,CHAR,INT,LONG,UCHAR,UINT,ULONG,FLOAT.... +CSH.TYPESIZE .HS 0001020405010204 *-------------------------------------- CSH.FN * float cos ( float x ); @@ -142,57 +145,57 @@ CSH.FN .DA #0 * char getchar ( void ); >PSTR "getchar" - .DA #CSH.T.CHAR returned value + .DA #CSH.T.UCHAR returned value .DA #0 * int puts ( const char * str ); >PSTR "puts" - .DA #CSH.T.INT returned value - .DA #CSH.Q.CONST+CSH.Q.POINTER+CSH.T.CHAR + .DA #CSH.T.SINT returned value + .DA #CSH.Q.CONST+CSH.Q.POINTER+CSH.T.UCHAR .DA #0 * int execl(const char* cmdline, short int flags); >PSTR "execl" - .DA #CSH.T.INT returned value - .DA #CSH.Q.CONST+CSH.Q.POINTER+CSH.T.CHAR + .DA #CSH.T.SINT returned value + .DA #CSH.Q.CONST+CSH.Q.POINTER+CSH.T.UCHAR .DA #CSH.T.UCHAR .DA #0 * int printf ( const char * format, ... ); >PSTR "printf" - .DA #CSH.T.INT returned value - .DA #CSH.Q.CONST+CSH.Q.POINTER+CSH.T.CHAR + .DA #CSH.T.SINT returned value + .DA #CSH.Q.CONST+CSH.Q.POINTER+CSH.T.UCHAR .DA #CSH.T.VARIADIC .DA #0 * int putenv(const char *string); >PSTR "putenv" - .DA #CSH.T.INT returned value - .DA #CSH.Q.CONST+CSH.Q.POINTER+CSH.T.CHAR + .DA #CSH.T.SINT returned value + .DA #CSH.Q.CONST+CSH.Q.POINTER+CSH.T.UCHAR .DA #0 * int setenv(const char *name, const char *value); >PSTR "setenv" - .DA #CSH.T.INT returned value - .DA #CSH.Q.CONST+CSH.Q.POINTER+CSH.T.CHAR - .DA #CSH.Q.CONST+CSH.Q.POINTER+CSH.T.CHAR + .DA #CSH.T.SINT returned value + .DA #CSH.Q.CONST+CSH.Q.POINTER+CSH.T.UCHAR + .DA #CSH.Q.CONST+CSH.Q.POINTER+CSH.T.UCHAR .DA #0 * char *getenv(const char *name, char *value); >PSTR "getenv" - .DA #CSH.Q.POINTER+CSH.T.CHAR - .DA #CSH.Q.CONST+CSH.Q.POINTER+CSH.T.CHAR - .DA #CSH.Q.POINTER+CSH.T.CHAR + .DA #CSH.Q.POINTER+CSH.T.UCHAR + .DA #CSH.Q.CONST+CSH.Q.POINTER+CSH.T.UCHAR + .DA #CSH.Q.POINTER+CSH.T.UCHAR .DA #0 * int unsetenv(const char *name); >PSTR "unsetenv" - .DA #CSH.T.INT returned value - .DA #CSH.Q.CONST+CSH.Q.POINTER+CSH.T.CHAR + .DA #CSH.T.SINT returned value + .DA #CSH.Q.CONST+CSH.Q.POINTER+CSH.T.UCHAR .DA #0 * void md5 (const char* str, char* digest); >PSTR "md5" .DA #CSH.T.VOID - .DA #CSH.Q.CONST+CSH.Q.POINTER+CSH.T.CHAR - .DA #CSH.Q.POINTER+CSH.T.CHAR + .DA #CSH.Q.CONST+CSH.Q.POINTER+CSH.T.UCHAR + .DA #CSH.Q.POINTER+CSH.T.UCHAR .DA #0 * void * malloc ( int size ); >PSTR "malloc" .DA #CSH.Q.POINTER+CSH.T.VOID returned value - .DA #CSH.T.INT + .DA #CSH.T.SINT .DA #0 *-------------------------------------- .DA #0 diff --git a/BIN/CSH.R.txt b/BIN/CSH.R.txt index cec9064e..48ce76f1 100644 --- a/BIN/CSH.R.txt +++ b/BIN/CSH.R.txt @@ -48,8 +48,8 @@ J.CSH.BOPS.SHLt .DA CSH.TMISMATCH L.CSH.FN .DA CSH.FN L.CSH.DIRS .DA CSH.DIRS L.CSH.KW .DA CSH.KW +L.CSH.MTYPES .DA CSH.MTYPES L.CSH.TYPES .DA CSH.TYPES -L.CSH.STYPES .DA CSH.STYPES L.CSH.FTYPES .DA CSH.FTYPES J.CSH.DIRS .DA CSH.DIR.DEFINE .DA CSH.DIR.INCLUDE @@ -62,20 +62,26 @@ J.CSH.KW .DA CSH.IF .DA CSH.CASE .DA CSH.BREAK .DA CSH.CONTINUE + .DA CSH.SIZEOF +*-------------------------------------- .DA CSH.TYPEDEF .DA CSH.STRUCT - .DA CSH.SIZEOF - .DA CSH.VOID - .DA CSH.FLOAT +*-------------------------------------- +J.CSH.MTYPES .DA CSH.CONST .DA CSH.SIGNED .DA CSH.UNSIGNED .DA CSH.SHORT -J.CSH.STYPES .DA CSH.CHAR +J.CSH.TYPES .DA CSH.VOID + .DA CSH.CHAR .DA CSH.INT .DA CSH.LONG + .DA CSH.FLOAT J.CSH.UTYPES .DA CSH.UCHAR .DA CSH.UINT .DA CSH.ULONG +J.CSH.STYPES .DA CSH.SCHAR + .DA CSH.SINT + .DA CSH.SLONG J.CSH.KW.END .DA CSH.IF.END .DA CSH.WHILE.END *-------------------------------------- diff --git a/BIN/CSH.S.CORE.txt b/BIN/CSH.S.CORE.txt index 723a6d68..5ba13baa 100644 --- a/BIN/CSH.S.CORE.txt +++ b/BIN/CSH.S.CORE.txt @@ -75,7 +75,7 @@ CSH.Quit >LDA.G CSH.hSymbols .3 lda hInclude beq .4 - + >SYSCALL FClose .4 lda hDefine @@ -204,134 +204,6 @@ CSH.COMMENTS jsr CSH.GetNextChar sec rts *-------------------------------------- -CSH.DIR jsr CSH.GetNextCharNB - bcs .99 - - cmp #'!' #!/bin/csh - bne .1 - - jmp CSH.SkipLine - -.1 >LDYA L.CSH.DIRS - jsr CSH.LookupID - bcs .91 - - jmp (J.CSH.DIRS,x) - -.91 lda #CSH.E.INVDIR - sec -.99 rts -*-------------------------------------- -CSH.DIR.DEFINE jsr CSH.CheckSpace - bcs .99 - - jsr CSH.IsLetter - bcs .90 - - >LDA.G CSH.hDefines - jsr CSH.NewKey - bcs .99 - - >STYA ZPVarID - - jsr CSH.CheckSpace - bcs .99 - - ldy #$ff - -.1 iny - lda (ZPInputBufPtr),y - beq .2 - - cmp #C.CR - bne .1 - - dey - -.2 iny - - phy - - >PUSHB.G CSH.hDefines - >PUSHW ZPVarID - >PUSHW ZPInputBufPtr - - ply - lda #0 - >PUSHYA DataLen - - >SYSCALL SListAddData - bcs .99 - - jmp CSH.SkipLine - -.90 lda #CSH.E.SYNTAX - sec -.99 rts -*-------------------------------------- -CSH.DIR.INCLUDE >STZ.G PathBuf - - jsr CSH.CheckSpace - bcs .99 - - cmp #'"' - beq .1 - - cmp #'<' - bne .90 - - >PUSHW L.ENV.INCLUDE - >PUSHEA.G PathBuf - >SYSCALL GetEnv - - lda #'>' - -.1 sta ArgIndex - - ldy #PathBuf - -.2 lda (pData),y - beq .3 - - iny - bra .2 - -.3 jsr CSH.GetNextChar - beq .90 - - cmp ArgIndex - beq .8 - - sta (pData),y - iny - cpy #64 - bne .3 - -.90 lda #CSH.E.SYNTAX - sec -.99 rts - -.8 jsr CSH.GetNextChar skip " or > - - lda hInclude - bne .90 - - lda hDefine - bne .90 - - >LDYA ZPInputBufPtr - >STYA.G CSH.SaveInclude - - >LDYA pData - jsr CS.RUN.LoadFile - bcs .99 - - stx hInclude - >STYA ZPInputBufPtr - >STYA.G CSH.Buf For printing error message - - rts -*-------------------------------------- CSH.SkipLine jsr CSH.GetNextChar bcs .9 cmp #C.CR @@ -440,8 +312,8 @@ CSH.AddSymbol >LDA.G CSH.hSymbols ldx ZPVarType jsr CSH.GetVarSize CS if pointer sta ZPVarSizeOf - -* clc / sec + +* clc / sec lda ZPCSHData sta ZPVarDataPtr @@ -473,32 +345,46 @@ CSH.TMISMATCH lda #CSH.E.TMISMATCH sec rts *-------------------------------------- -CSH.AddFunction lda #CSH.Q.FUNC +CSH.fDeclaration + lda #CSH.Q.FUNC tsb ZPVarType jsr CSH.GetNextCharNB Skip ( bcs .9 - >DEBUG .1 cmp #')' beq .5 - - >LDYA L.CSH.TYPES - jsr CSH.LookupID - bcs .9 - - - -.5 jsr CSH.GetNextCharNB Skip ) - + + jsr CSH.GetDeclaration + bcs .99 + + + +.5 jsr CSH.GetNextCharNB Skip ) + jsr CSH.SkipLine clc rts + +.9 lda #CSH.E.SYNTAX + sec +.99 rts +*-------------------------------------- +CSH.GetDeclaration + >ENTER 4 + + >LDYA L.CSH.MTYPES + jsr CSH.LookupID + bcs .9 + + + bra .8 .9 lda #CSH.E.SYNTAX sec -.99 rts +.8 >LEAVE + rts *-------------------------------------- CSH.NewKey >PUSHA >PUSHW ZPInputBufPtr @@ -860,10 +746,10 @@ CSH.GetChar lda (ZPInputBufPtr) ply plx bra CSH.GetChar - + .1 lda hInclude beq .9 - + stz hInclude phx phy diff --git a/BIN/CSH.S.DIR.txt b/BIN/CSH.S.DIR.txt new file mode 100644 index 00000000..decb212a --- /dev/null +++ b/BIN/CSH.S.DIR.txt @@ -0,0 +1,135 @@ +NEW + AUTO 3,1 + .LIST OFF +*-------------------------------------- +CSH.DIR jsr CSH.GetNextCharNB + bcs .99 + + cmp #'!' #!/bin/csh + bne .1 + + jmp CSH.SkipLine + +.1 >LDYA L.CSH.DIRS + jsr CSH.LookupID + bcs .91 + + jmp (J.CSH.DIRS,x) + +.91 lda #CSH.E.INVDIR + sec +.99 rts +*-------------------------------------- +CSH.DIR.DEFINE jsr CSH.CheckSpace + bcs .99 + + jsr CSH.IsLetter + bcs .90 + + >LDA.G CSH.hDefines + jsr CSH.NewKey + bcs .99 + + >STYA ZPVarID + + jsr CSH.CheckSpace + bcs .99 + + ldy #$ff + +.1 iny + lda (ZPInputBufPtr),y + beq .2 + + cmp #C.CR + bne .1 + + dey + +.2 iny + + phy + + >PUSHB.G CSH.hDefines + >PUSHW ZPVarID + >PUSHW ZPInputBufPtr + + ply + lda #0 + >PUSHYA DataLen + + >SYSCALL SListAddData + bcs .99 + + jmp CSH.SkipLine + +.90 lda #CSH.E.SYNTAX + sec +.99 rts +*-------------------------------------- +CSH.DIR.INCLUDE >STZ.G PathBuf + + jsr CSH.CheckSpace + bcs .99 + + cmp #'"' + beq .1 + + cmp #'<' + bne .90 + + >PUSHW L.ENV.INCLUDE + >PUSHEA.G PathBuf + >SYSCALL GetEnv + + lda #'>' + +.1 sta ArgIndex + + ldy #PathBuf + +.2 lda (pData),y + beq .3 + + iny + bra .2 + +.3 jsr CSH.GetNextChar + beq .90 + + cmp ArgIndex + beq .8 + + sta (pData),y + iny + cpy #64 + bne .3 + +.90 lda #CSH.E.SYNTAX + sec +.99 rts + +.8 jsr CSH.GetNextChar skip " or > + + lda hInclude + bne .90 + + lda hDefine + bne .90 + + >LDYA ZPInputBufPtr + >STYA.G CSH.SaveInclude + + >LDYA pData + jsr CS.RUN.LoadFile + bcs .99 + + stx hInclude + >STYA ZPInputBufPtr + + rts +*-------------------------------------- +MAN +SAVE usr/src/bin/csh.s.dir +LOAD usr/src/bin/csh.s +ASM diff --git a/BIN/CSH.S.EXP.txt b/BIN/CSH.S.EXP.txt index 319ff5b2..29b53eed 100644 --- a/BIN/CSH.S.EXP.txt +++ b/BIN/CSH.S.EXP.txt @@ -76,7 +76,7 @@ CSH.ExpEval ldx ZPPtr1 ldx ZPPtr2 bne .23 - ldx #CSH.T.INT + ldx #CSH.T.SINT stx ZPPtr2 .23 jsr CSH.GetNumOnStack @@ -194,9 +194,11 @@ CSH.GetNumOnStack txa beq .99 -.10 cpx #CSH.T.FLOAT - bcc .1 - bne .99 + cpx #CSH.T.ULONG+1 + bcs .99 + + cpx #CSH.T.FLOAT + bne .1 >PUSHW ZPInputBufPtr >PUSHWI ZPInputBufPtr @@ -208,8 +210,9 @@ CSH.GetNumOnStack >PUSHWI ZPInputBufPtr >PUSHBI 10 phx - cpx #CSH.T.UCHAR + bcc .2 + >SYSCALL StrToUL bra .3 @@ -224,6 +227,7 @@ CSH.GetNumOnStack cmp #2 bne .4 + ldy #1 >PULLA sta (pStack),y @@ -236,6 +240,7 @@ CSH.GetNumOnStack inc pStack inc pStack sta (pStack) + .8 clc .9 rts diff --git a/BIN/CSH.S.KW.txt b/BIN/CSH.S.KW.txt index 0ca21cf1..8996165e 100644 --- a/BIN/CSH.S.KW.txt +++ b/BIN/CSH.S.KW.txt @@ -74,9 +74,9 @@ CSH.SWITCH CSH.CASE CSH.BREAK CSH.CONTINUE -CSH.TYPEDEF CSH.SIZEOF - lda #CSH.E.SYNTAX +*-------------------------------------- +CSH.TYPEDEF lda #CSH.E.SYNTAX sec rts *-------------------------------------- @@ -108,7 +108,25 @@ CSH.STRUCT >ENTER 4 .99 >LEAVE rts *-------------------------------------- -* Built in Types +CSH.CONST lda ZPVarQual + bit #CSH.Q.PPPOINTER + bne .1 + + lda #CSH.Q.CONST + bra .2 + +.1 lda #CSH.Q.PCONST + +.2 bit ZPVarQual + bne .9 + + tsb ZPVarQual + clc + rts + +.9 lda #CSH.E.SYNTAX + sec + rts *-------------------------------------- CSH.SIGNED sec .HS 90 BCC @@ -119,16 +137,23 @@ CSH.UNSIGNED clc jsr CSH.CheckSpace bcs .9 - >LDYA L.CSH.STYPES + >LDYA L.CSH.TYPES jsr CSH.LookupID bcs .9 + cpx #2 + bcc .9 + + cpx #8 only char int long allowed + bcs .9 + plp bcs .8 - jmp (J.CSH.UTYPES,x) -.8 jmp (J.CSH.STYPES,x) + jmp (J.CSH.UTYPES-2,x) + +.8 jmp (J.CSH.STYPES-2,x) .9 plp @@ -139,13 +164,13 @@ CSH.UNSIGNED clc CSH.SHORT jsr CSH.CheckSpace bcs .9 - >LDYA L.CSH.STYPES + >LDYA L.CSH.TYPES jsr CSH.LookupID bcs CSH.UCHAR - cpx #2 - beq CSH.CHAR + cpx #4 only int allowed + beq CSH.SCHAR .9 lda #CSH.E.SYNTAX sec @@ -153,16 +178,22 @@ CSH.SHORT jsr CSH.CheckSpace *-------------------------------------- CSH.VOID ldx #CSH.T.VOID bra CSH.TYPE -CSH.CHAR ldx #CSH.T.CHAR + +CSH.SCHAR ldx #CSH.T.SCHAR bra CSH.TYPE +CSH.CHAR CSH.UCHAR ldx #CSH.T.UCHAR bra CSH.TYPE -CSH.INT ldx #CSH.T.INT +CSH.INT +CSH.SINT ldx #CSH.T.SINT bra CSH.TYPE + CSH.UINT ldx #CSH.T.UINT bra CSH.TYPE -CSH.LONG ldx #CSH.T.LONG +CSH.LONG +CSH.SLONG ldx #CSH.T.SLONG bra CSH.TYPE + CSH.ULONG ldx #CSH.T.ULONG bra CSH.TYPE @@ -220,7 +251,7 @@ CSH.TYPE stx ZPVarType .13 cmp #'(' bne .9 - jmp CSH.AddFunction + jmp CSH.fDeclaration .2 jsr CSH.GetNextCharNB Skip = bcs .9 @@ -274,6 +305,7 @@ CSH.fCall ldx ZPPtr1 cmp #'(' bne .52 + jsr CSH.GetNextCharNB skip '(' .10 bcs .90 @@ -294,13 +326,16 @@ CSH.fCall ldx ZPPtr1 *-------------------------------------- .3 eor #CSH.T.VARIADIC if VARIADIC, don't advance to next arg and assume type = 0 beq .4 + eor #CSH.T.VARIADIC restore type... + .4 jsr CSH.ExpEval A=0 if VARIADIC bcs .9 X = Var Type lda (ZPPtr1) get current arg type eor #CSH.T.VARIADIC bne .5 + jsr CSH.GetVarSize X = Var Type clc make sure pointer only 2 bytes @@ -326,6 +361,7 @@ CSH.fCall ldx ZPPtr1 bne .90 lda (ZPPtr1) beq .8 no more arg after ')', exit + eor #CSH.T.VARIADIC bne .90 missing arg diff --git a/BIN/CSH.S.txt b/BIN/CSH.S.txt index 874fe02d..99fd7a6a 100644 --- a/BIN/CSH.S.txt +++ b/BIN/CSH.S.txt @@ -24,7 +24,8 @@ ZPCSHStack .BS 2 ZPVarID .BS 2 ZPVarDef .EQ * -ZPVarType .BS 2 +ZPVarType .BS 1 +ZPVarQual .BS 1 ZPVarSizeOf .BS 2 ZPVarDataPtr .BS 2 @@ -160,7 +161,6 @@ CS.RUN.ARGS inc ArgIndex bcs .9 >STYA ZPInputBufPtr - >STYA.G CSH.Buf For printing error message txa >STA.G hFileBuf @@ -203,8 +203,17 @@ PrintErrMsg lda hDefine >LDYA.G CSH.SaveDefine >STYA ZPInputBufPtr -.10 >LDYA.G CSH.Buf +.10 lda hInclude + beq .11 + + + bra .12 + +.11 >LDA.G hFileBuf + +.12 >SYSCALL GetMemPtr >STYA ZPPtr1 + stz ZPPtr2 stz ZPPtr2+1 Line counter @@ -255,7 +264,7 @@ PrintErrMsg lda hDefine lda (pPS),y >PUSHA >PUSHW L.MSG.ERR - >PUSHW ZPPtr2 Line counter + >PUSHW ZPPtr2 Line counter >PUSHBI 2 >SYSCALL FPrintF @@ -306,6 +315,7 @@ PrintTraceMsg.3 >PUSHBI '>' rts *-------------------------------------- .INB usr/src/bin/csh.s.core + .INB usr/src/bin/csh.s.dir .INB usr/src/bin/csh.s.kw .INB usr/src/bin/csh.s.exp .INB usr/src/bin/csh.s.exec diff --git a/BIN/FORMAT.S.txt b/BIN/FORMAT.S.txt index 0b121abe..c6b47b04 100644 --- a/BIN/FORMAT.S.txt +++ b/BIN/FORMAT.S.txt @@ -198,7 +198,7 @@ CS.RUN.Format jsr CS.RUN.GetDevStatus >LDYA L.MSG.OK >SYSCALL PutS bcs .9 - >DEBUGOA + .8 >PUSHB DSSS0000 >PUSHW pData >SYSCALL Online @@ -314,6 +314,11 @@ CS.RUN.LL >LDA.G DIB+S.DIB.T CS.RUN.LL.RTS rts *-------------------------------------- CS.RUN.LL.DISKII + jsr CS.RUN.MotorOn + bcs CS.RUN.LL.RTS + + >SLEEP + >LDYAI 4096 >SYSCALL GetMem bcs CS.RUN.LL.RTS @@ -321,11 +326,6 @@ CS.RUN.LL.DISKII stx hTrackBuf >STYA ZPPtr1 - jsr CS.RUN.MotorOn - bcs CS.RUN.LL.RTS - - >SLEEP - >PUSHB DSSS0000 >LIBCALL hLIBBLKDEV,LIBBLKDEV.D2Recalibrate bcs CS.RUN.LL.RTS @@ -393,7 +393,6 @@ CS.RUN.LL.DISKII bpl .80 jsr CS.RUN.LL.DISKII.V - >DEBUGOA bcs .9 .80 jmp CS.RUN.MotorOff @@ -750,7 +749,7 @@ Disk2.HX .DA 432 BlkCnt *-------------------------------------- RANA Elite 2 Disk2.DefaultD .DA 640 BlkCnt .DA #40 TrkCnt - .DA #2 Stepping + .DA #4 Stepping .DA #193 VolNum .DA #$80 AltBB .DA #1 HeadCnt @@ -758,7 +757,7 @@ Disk2.DefaultD .DA 640 BlkCnt *-------------------------------------- Disk2.XD .DA 640 BlkCnt .DA #40 TrkCnt - .DA #2 Stepping + .DA #4 Stepping .DA #193 VolNum .DA #$80 AltBB .DA #1 HeadCnt diff --git a/BIN/IPCONFIG.S.DHCP.txt b/BIN/IPCONFIG.S.DHCP.txt index 8dd7cc62..40858165 100644 --- a/BIN/IPCONFIG.S.DHCP.txt +++ b/BIN/IPCONFIG.S.DHCP.txt @@ -133,7 +133,7 @@ DHCP.RUN.OK lda #S.IPCFG.STATUS.OK ldx #0 -.2 lda IPCFG+S.IPCFG.IP,x +.2 lda IPCFG+S.IPCFG.MASK,x >PUSHA inx cpx #4 diff --git a/BIN/LS.S.txt b/BIN/LS.S.txt index 5747bf55..b819a62b 100644 --- a/BIN/LS.S.txt +++ b/BIN/LS.S.txt @@ -395,6 +395,7 @@ CS.RUN.PRINT.BDEV beq .8 >LDYA ZPFileName jmp EnterSubDirYA + .8 clc .9 rts diff --git a/BIN/SED.S.txt b/BIN/SED.S.txt new file mode 100644 index 00000000..a7f6cccf --- /dev/null +++ b/BIN/SED.S.txt @@ -0,0 +1,5 @@ +MSG.USAGE .AS "Usage : SED File(s) (*,? wildcards allowed)\r\n" + .AS " -C : Continue on error\r\n" + .AS " -R : Recurse subdirectories\r\n" + .AS " -S "search text" + .AS " -N "new text" \ No newline at end of file diff --git a/INC/APPLETALK.I.txt b/INC/APPLETALK.I.txt index 3e8c2036..4deddb47 100644 --- a/INC/APPLETALK.I.txt +++ b/INC/APPLETALK.I.txt @@ -9,6 +9,8 @@ AT.LookupName .EQ $10 AT.GetMyZone .EQ $1A AT.GetZoneList .EQ $1B +AT.GetParms .EQ $1C + AT.FILogin .EQ $2B AT.FILoginCont .EQ $2C AT.FILogout .EQ $2D diff --git a/INC/IO.D2.I.txt b/INC/IO.D2.I.txt index fa09ade2..e54e6758 100644 --- a/INC/IO.D2.I.txt +++ b/INC/IO.D2.I.txt @@ -1,11 +1,10 @@ NEW AUTO 3,1 *-------------------------------------- -IO.D2.SeekTimeR .EQ 140 LIBBLKDEV Recalibration +IO.D2.SeekTimeR .EQ 65 LIBBLKDEV Recalibration IO.D2.SeekTimeF .EQ 65 LIBBLKDEV Track Formatter IO.D2.SeekTimeB .EQ 65 LIBBLKDEV Boot Block -IO.D2.SeekTime0 .EQ 65 ProDOS.FX initial0 -IO.D2.SeekTimeP .EQ 30 ProDOS.FX initial +IO.D2.SeekTimeP .EQ 65 ProDOS.FX initial IO.D2.SeekTimeI .EQ 10 ProDOS.FX increment -> until > 128 *-------------------------------------- IO.D2.Ph0Off .EQ $C080 diff --git a/INC/KERNEL.I.txt b/INC/KERNEL.I.txt index 8f4353ba..736939ee 100644 --- a/INC/KERNEL.I.txt +++ b/INC/KERNEL.I.txt @@ -16,10 +16,12 @@ PS.Table.Stats .EQ $13E0 K.PS.MAX S.Table.hSID .EQ $1400 K.USR.MAX S.Table.hFile .EQ $1410 K.USR.MAX *-------------------------------------- -Flt.Table.hPath .EQ $1420 K.FLT.MAX -Flt.Table.hLib .EQ $1424 K.FLT.MAX +Flt.Table.pftLO .EQ $1420 K.FLT.MAX +Flt.Table.pftHI .EQ $1424 K.FLT.MAX +Flt.Table.cbLO .EQ $1428 K.FLT.MAX +Flt.Table.cbHI .EQ $142C K.FLT.MAX *-------------------------------------- -A2osX.EndTables .EQ $1428 +A2osX.EndTables .EQ $1430 *-------------------------------------- MAN SAVE inc/kernel.i diff --git a/INC/NET.SMB.I.txt b/INC/NET.SMB.I.txt index 106c6d4f..a14e0627 100644 --- a/INC/NET.SMB.I.txt +++ b/INC/NET.SMB.I.txt @@ -3,8 +3,13 @@ NEW *-------------------------------------- TCP.PORT.CIFS .EQ 445 *-------------------------------------- -S.SMB.H.PROTO .EQ 0 \xFF 'SMB' -S.SMB.H.CMD .EQ 4 +S.NETBIOS.TYPE .EQ 0 +S.NETBIOS.LEN .EQ 1 +* +S.NETBIOS .EQ 4 +*-------------------------------------- +S.SMB.H.PROTO .EQ 0 \xFF 'SMB' +S.SMB.H.CMD .EQ 4 S.SMB.H.CMD.TRANSACTION2 .EQ $32 S.SMB.H.CMD.NEGOTIATE .EQ $72 S.SMB.H.CMD.SESSION.SETUP.ANDX .EQ $73 @@ -24,10 +29,10 @@ S.SMB.H.FLAGS2.UNICODE .EQ %10000000.00000000 S.SMB.H.PIDHI .EQ 12 S.SMB.H.SECFEAT .EQ 14 S.SMB.H.RSVD .EQ 22 -S.SMB.H.TID .EQ 24 +S.SMB.H.TID .EQ 24 S.SMB.H.PIDLO .EQ 26 -S.SMB.H.UID .EQ 28 -S.SMB.H.MID .EQ 30 +S.SMB.H.UID .EQ 28 +S.SMB.H.MID .EQ 30 * S.SMB.H .EQ 32 *-------------------------------------- diff --git a/INCLUDE/stdio.h.txt b/INCLUDE/stdio.h.txt index 8f8f6d58..d778cf5a 100644 --- a/INCLUDE/stdio.h.txt +++ b/INCLUDE/stdio.h.txt @@ -13,12 +13,12 @@ int fastcall putchar(short int); // int fputc ( hFILE stream , short int character ); int fastcall puts(const char*); int fputs (short int, const char*); -char* fgets(hFILE stream, char* s, int n); +char* fgets(short int, char* s, int n); short int getchar(); short int fastcall getc(short int); // short int ungetc(short int c, short int ); -short int fopen( const char*,short int,short int,int); +short int fopen(const char*,short int,short int,int); int fclose(short int); // int fread (short int stream, void * ptr, int count ); // int fwrite (short int stream, const void * ptr, int count ); diff --git a/LIB/LIBBLKDEV.S.D2.txt b/LIB/LIBBLKDEV.S.D2.txt index e91929e7..9e9775ea 100644 --- a/LIB/LIBBLKDEV.S.D2.txt +++ b/LIB/LIBBLKDEV.S.D2.txt @@ -6,54 +6,56 @@ D2MotorControl >PULLB MotorOn >PULLB DrvSlt jsr CheckDiskII bcs .9 - + lda MotorOn asl - + lda #IO.D2.DrvOff adc Slotn0 tax lda $C000,x - + clc - + .9 rts */-------------------------------------- *\-------------------------------------- D2Recalibrate >PULLB DrvSlt jsr CheckDiskII bcs .9 - + +* ldx Slotn0 ldy Slotn0 - - lda IO.D2.DrvOn,y - nop - nop - + lda #168 - -.1 sta IO.D2.Ph0Off,y - dec +.1 dec dec - pha + pha and #6 ora Slotn0 + phy + plx tay - sta IO.D2.Ph0On,y - + lda IO.D2.Ph0On,y + + lda #IO.D2.SeekTimeR + jsr D2.Wait100usecA + + lda IO.D2.Ph0Off,x + lda #IO.D2.SeekTimeR jsr D2.Wait100usecA pla bne .1 - + jsr D2.Wait25600usec - - ldx Slotn0 - lda IO.D2.Ph0Off,x + +* ldy Slotn0 + lda IO.D2.Ph0Off,y jsr D2.Wait25600usec @@ -74,15 +76,15 @@ D2MoveHead >PULLB MoveTo clc .9 rts - D2MoveHead.SEI ldx Slotn0 ldy Slotn0 .1 lda MoveFrom cmp MoveTo - beq .7 + beq .8 - jsr .8 + sta IO.D2.Ph0Off,x + sta IO.D2.Ph0Off,y bcs .2 @@ -121,28 +123,28 @@ D2MoveHead.SEI ldx Slotn0 and #6 ora Slotn0 -* bcc .4 + bcc .4 * move out : invert 2 phases -* phx -* tax -* pla + phx + tax + pla .4 tay - lda IO.D2.Ph0On,x - lda IO.D2.Ph0On,y + sta IO.D2.Ph0On,x + sta IO.D2.Ph0On,y lda #IO.D2.SeekTimeF jsr D2.Wait100usecA bra .1 -.7 jsr D2.Wait25600usec +.8 jsr D2.Wait25600usec -.8 bit IO.D2.Ph0Off,x - ldx IO.D2.Ph0Off,y + sta IO.D2.Ph0Off,x + sta IO.D2.Ph0Off,y rts *-------------------------------------- D2.Wait25600usec @@ -150,22 +152,22 @@ D2.Wait25600usec D2.Wait100usecA phx -.1 ldx #19 (2) +.1 ldx #20 (2) .2 dex (2) bne .2 (3) dec (2) bne .1 (3) - + plx - + rts (6) */-------------------------------------- * # D2TrkRead16s * Write a track (16 sectors) * PUSHB = DSSS0000 -* PUSHB = TrackNum * 4 : 0->136+ +* PUSHB = TrackNum * 4 : 0->136+ * PUSHW = Ptr to 16*256 buffer * ## RETURN VALUE * CC : success, A = VolNum @@ -177,16 +179,16 @@ D2TrkRead16s >PULLW ZPPtr1 jsr CheckDiskII bcs .9 - - + + lda VolNum clc -.9 rts +.9 rts */-------------------------------------- * # D2TrkWrite16s * Write a track (16 sectors) * PUSHB = DSSS0000 -* PUSHB = TrackNum * 4 : 0->136+ +* PUSHB = TrackNum * 4 : 0->136+ * PUSHW = Ptr to 16*256 buffer * ## RETURN VALUE * CC : success @@ -199,53 +201,56 @@ D2TrkWrite16s >PULLW ZPPtr1 jsr CheckDiskII bcs .9 - - >LDYAI TRACK16.LEN+1 + + >LDYAI TRACK16.LEN+256+1 >SYSCALL2 GetMem bcs .9 - + >STYA ZPPtr2 stx hTrkBuf stz SectNum + ldy #0 put 256 FF sync bytes for slooooow drives + jsr PutSyncBytePtr2 + ldy #TRACK16.GAP1 jsr PutSyncBytePtr2 - + .1 jsr PutAddrHeadPtr2 - + jsr HeaderCheckSum - + ldy #3 .2 lda Checksum,y jsr PutByte44Ptr2 dey bpl .2 - + jsr PutTailPtr2 - + ldy #TRACK16.GAP2 jsr PutSyncBytePtr2 - + jsr PutDataHeadPtr2 - + jsr PutData - + jsr PutTailPtr2 ldy #TRACK16.GAP3 jsr PutSyncBytePtr2 - + inc ZPPtr1+1 - + inc SectNum lda SectNum cmp #16 bne .1 - + lda #0 sta (ZPPtr2) - + jsr D2WriteTrackPtr2 php pha @@ -271,7 +276,7 @@ D2TrkReadNIB *\-------------------------------------- D2TrkWriteNIB >PULLW ZPPtr1 >PULLB DrvSlt - + jsr CheckDiskII was it a DISK II ? bcs .9 @@ -289,7 +294,7 @@ CheckDiskII pha ora #$C0 make Cn sta ZPPtr3+1 stz ZPPtr3 - + ldx #3 4 bytes to check .1 ldy DiskII.OFS,x @@ -300,7 +305,7 @@ CheckDiskII pha dex bpl .1 - + pla all bytes match, Disk II asl lda #0 @@ -333,7 +338,10 @@ DrvSpinCheck ldy #0 lda IO.D2.RData,x -.1 cmp IO.D2.RData,x +.1 pha + pla + + cmp IO.D2.RData,x bne .8 spinning dey @@ -395,36 +403,36 @@ PutData stz Checksum clc adc #86 bcc .1 - + iny clc - + .1 sta ZPPtr3 sty ZPPtr3+1 - + adc #86 bcc .2 - + iny - + .2 sta ZPPtr4 sty ZPPtr4+1 - + ldy #85 - + .3 lda (ZPPtr1),y and #3 tax lda D2.XX000000,x pha - + lda (ZPPtr3),y and #3 tax pla ora D2.00XX0000,x pha - + lda (ZPPtr4),y and #3 tax @@ -432,37 +440,37 @@ PutData stz Checksum ora D2.0000XX00,x tax - + eor Checksum sta Checksum - + lda FC2Nib,x - + jsr PutBytePtr2 dey bpl .3 - + ldy #0 - + .4 lda (ZPPtr1),y and #$FC - + tax - + eor Checksum sta Checksum - + lda FC2Nib,x - + jsr PutBytePtr2 - + iny bne .4 - + ldx Checksum lda FC2Nib,x jsr PutBytePtr2 - + rts *-------------------------------------- PutByte44Ptr2 pha @@ -470,14 +478,14 @@ PutByte44Ptr2 pha jsr .1 pla - + .1 ora #$AA *-------------------------------------- PutBytePtr2 sta (ZPPtr2) inc ZPPtr2 bne .8 inc ZPPtr2+1 -.8 rts +.8 rts *-------------------------------------- D2WriteTrackPtr2 lda hTrkBuf @@ -488,16 +496,16 @@ D2WriteTrackPtr2 sei ldy #TrkWriter.Size - + .1 lda TrkWriter-1,y sta $1ff,y dey bne .1 - + ldx Slotn0 jsr $200 - + plp rts *-------------------------------------- diff --git a/LIB/LIBBLKDEV.S.txt b/LIB/LIBBLKDEV.S.txt index 6ef030a5..629c4c1b 100644 --- a/LIB/LIBBLKDEV.S.txt +++ b/LIB/LIBBLKDEV.S.txt @@ -13,16 +13,16 @@ NEW *-------------------------------------- * 300rpm = 5rps = 200000us / 4us = 50000 bits MAX *-------------------------------------- -TRACK16.LEN .EQ 6400 +TRACK16.LEN .EQ 6240 *-------------------------------------- TRACK16.GAP1 .EQ 80 800 bits * 16 * ( *Address field = D5AA96 + 4x2 + DEAAEB = 14 112 bits TRACK16.GAP2 .EQ 6 60 bits *Data field = D5AAAD + 342 + CS + DEAAEB = 349 2792 bits -TRACK16.GAP3 .EQ 17 170 bits +TRACK16.GAP3 .EQ 16 160 bits * ) -* 80 + 16 * (14 + 6 + 349 + 17) = 6256 800 + 50144 bits +* 80 + 16 * (14 + 6 + 349 + 16) = 6240 800 + 49984 bits *-------------------------------------- TRACK9.LEN .EQ 6511 *-------------------------------------- diff --git a/LIB/LIBCIFS.S.txt b/LIB/LIBCIFS.S.txt new file mode 100644 index 00000000..69b6ffd2 --- /dev/null +++ b/LIB/LIBCIFS.S.txt @@ -0,0 +1,691 @@ +NEW + AUTO 3,1 + .LIST OFF + .OP 65C02 + .OR $2000 + .TF lib/libcifs +*-------------------------------------- + .INB inc/macros.i + .INB inc/a2osx.i + .INB inc/mli.e.i + .INB inc/eth.i + .INB inc/libtcpip.i + .INB inc/net.smb.i +*-------------------------------------- + .DUMMY + .OR ZPLIB +ZS.START +hSocket .BS 1 +hReq .BS 1 +ZPReqPtr .BS 2 +ZPReqLen .BS 2 +ZPCtxPtr .BS 2 + +hResp .BS 1 +ZPRespPtr .BS 2 + +ZPPtr1 .BS 2 +ZPPtr2 .BS 2 + +ZS.END .ED +*-------------------------------------- +* File Header (16 Bytes) +*-------------------------------------- +CS.START cld + jmp (.1,x) + .DA #$61 6502,Level 1 (65c02) + .DA #1 BIN Layout Version 1 + .DA 0 + .DA CS.END-CS.START + .DA 0 + .DA 0 + .DA 0 +*-------------------------------------- +* Relocation Table +*-------------------------------------- +.1 .DA LIB.LOAD + .DA LIB.UNLOAD + .DA CIFS.Negotiate + .DA CIFS.SessionSetup + .DA CIFS.TreeConnect + .DA CIFS.Mount + .DA CIFS.UMount +*-------------------------------------- +J.CIFS .DA CIFS.ChTyp + .DA CIFS.ChMod + .DA CIFS.FStat + .DA CIFS.Stat + .DA CIFS.MKDir + .DA CIFS.MKNod + .DA CIFS.MKFIFO + .DA CIFS.Pipe + .DA CIFS.OpenDir + .DA CIFS.ReadDir + .DA CIFS.CloseDir + .DA CIFS.Open + .DA CIFS.Close + .DA CIFS.Read + .DA CIFS.Write + .DA CIFS.ChOwn +L.LIBTCPIP .DA LIBTCPIP +L.SMB.TRANSPORT .DA SMB.TRANSPORT + .DA 0 +*-------------------------------------- +LIB.LOAD >LDYA L.LIBTCPIP + >SYSCALL LoadLib + bcs .9 + + sta hLIBTCPIP + + >LDYAI 256 + >SYSCALL GetMem + bcs .9 + + >STYA ZPReqPtr + stx hReq + + +* clc +.9 rts +*-------------------------------------- +LIB.UNLOAD lda hReq + beq .1 + + >SYSCALL FreeMem + +.1 lda hLIBTCPIP + beq .8 + + >SYSCALL UnloadLib + +.8 clc + rts +*-------------------------------------- +* >PUSHB hSocket +* >PUSHB 0 +* >LIBCALL Negotiate +* A = hSMBContext +*-------------------------------------- +CIFS.Negotiate lda (pStack) + bne .1 + + dec + sta (pStack) + + >PUSHWI SMB.NegReq.end-SMB.TRANSPORT + >PUSHW L.SMB.TRANSPORT + ldy #1+4 hSocket + lda (pStack),y + + >LIBCALL hLIBTCPIP,LIBTCPIP.Send + bcs .99 + >DEBUG + lda #0 + sec + rts + +.1 dec + sta (pStack) + beq .98 + + ldy #1 hSocket + lda (pStack),y + >LIBCALL hLIBTCPIP,LIBTCPIP.Recv + >DEBUG + bcc .3 + + cmp #E.NODATA + bne .99 + inc + rts + +.3 jsr GetRespData + + ldy #S.NETBIOS+S.SMB.H.STATUS + lda (ZPRespPtr),y + bne .97 + + ldy #3 + lda (ZPRespPtr),y + tay + lda #0 + + >SYSCALL GetMem + bcs .99 + + >STYA ZPCtxPtr + + ldy #3 + lda (ZPRespPtr),y + + tay + +.4 dey + lda (ZPRespPtr),y + sta (ZPCtxPtr),y + tya + bne .4 + + phx + + lda hResp + >SYSCALL FreeMem + + pla + + clc + >RET 2 + +.97 lda hResp + >SYSCALL FreeMem + +.98 lda #MLI.E.IO + +.99 >POP 2 + rts +*-------------------------------------- +* >PUSHB hSocket +* >PUSHB hSMBContext +* >PUSHW username +* >PUSHW password +* >PUSHB 0 +* >LIBCALL SessionSetup +* (SMBContext updated with UID) +*-------------------------------------- +CIFS.SessionSetup + lda (pStack) + beq .10 + jmp .5 + +.10 dec + sta (pStack) + + ldy #5 hSMBContext + jsr GetSMBCtx + + ldx #S.SMB.H.CMD.SESSION.SETUP.ANDX + + ldy #0 + +.1 lda (ZPCtxPtr),y + cpy #S.NETBIOS+S.SMB.H.CMD + bne .11 + + txa + +.11 sta (ZPReqPtr),y + iny + cpy #S.NETBIOS+S.SMB.H + bne .1 + + ldx #0 + +.2 lda SMB.SessionSetup.H,x + sta (ZPReqPtr),y + iny + inx + cpx #SMB.SessionSetup.H.Len + bne .2 + + phy save Y = LEN + iny + iny + + ldx #0 + +.3 lda SMB.SessionSetup.Guest,x + sta (ZPReqPtr),y + iny + inx + cpx #SMB.SessionSetup.Guest.Len + bne .3 + + ldx #0 + +.4 lda SMB.SessionSetup.T,x + sta (ZPReqPtr),y + iny + inx + cpx #SMB.SessionSetup.T.Len + bne .4 + + pla + + jsr GetReqLenYAtA + + >PUSHYA + >PUSHW ZPReqPtr + ldy #6+4 hSocket + lda (pStack),y + + >LIBCALL hLIBTCPIP,LIBTCPIP.Send + bcs .99 + + lda #0 + sec + rts + +.5 dec + sta (pStack) + beq .98 + + ldy #6 hSocket + lda (pStack),y + >LIBCALL hLIBTCPIP,LIBTCPIP.Recv + bcc .6 + + cmp #E.NODATA + bne .99 + inc + rts + +.6 jsr GetRespData + + ldy #S.NETBIOS+S.SMB.H.STATUS + lda (ZPRespPtr),y + bne .97 + + ldy #5 hSMBContext + jsr GetSMBCtx + + ldy #S.NETBIOS+S.SMB.H.UID + lda (ZPRespPtr),y + sta (ZPCtxPtr),y + iny + lda (ZPRespPtr),y + sta (ZPCtxPtr),y + +.8 lda hResp + >SYSCALL FreeMem + + clc + >RET 7 + +.97 lda hResp + >SYSCALL FreeMem + +.98 lda #MLI.E.IO + +.99 >POP 7 + rts +*-------------------------------------- +* >PUSHB hSocket +* >PUSHB hSMBContext +* >PUSHW path +* >PUSHB 0 +* >LIBCALL TreeConnect +* (SMBContext updated with TID) +*-------------------------------------- +CIFS.TreeConnect + lda (pStack) + beq .10 + jmp .5 + +.10 dec + sta (pStack) + + ldy #3 hSMBContext + jsr GetSMBCtx + + ldx #S.SMB.H.CMD.TREE.CONNECT.ANDX + + ldy #0 + +.1 lda (ZPCtxPtr),y + cpy #S.NETBIOS+S.SMB.H.CMD + bne .11 + + txa + +.11 sta (ZPReqPtr),y + iny + cpy #S.NETBIOS+S.SMB.H + bne .1 + + ldx #0 + +.2 lda SMB.TreeConnect.H,x + sta (ZPReqPtr),y + iny + inx + cpx #SMB.TreeConnect.H.Len + bne .2 + + phy save Y = LEN + iny + iny + + lda #0 + sta (ZPReqPtr),y PASSWORD = "\0" + iny + + ldy #1 + lda (pStack),y + sta ZPPtr1 + iny + lda (pStack),y + sta ZPPtr1+1 + +.3 lda (ZPPtr1) + inc ZPPtr1 + bne .31 + + inc ZPPtr1+1 + +.31 sta (ZPReqPtr),y + iny + tax + bne .3 + + ldx #0 + +.4 lda SMB.TreeConnect.T,x + sta (ZPReqPtr),y + iny + inx + cpx #SMB.TreeConnect.T.Len + bne .4 + + pla + + jsr GetReqLenYAtA + + >PUSHYA + >PUSHW ZPReqPtr + ldy #4+4 hSocket + lda (pStack),y + + >LIBCALL hLIBTCPIP,LIBTCPIP.Send + bcs .99 + + lda #0 + sec + rts + +.5 dec + sta (pStack) + beq .98 + + ldy #4 hSocket + lda (pStack),y + >LIBCALL hLIBTCPIP,LIBTCPIP.Recv + bcc .6 + + cmp #E.NODATA + bne .99 + inc + rts + +.6 jsr GetRespData + + ldy #S.NETBIOS+S.SMB.H.STATUS + lda (ZPRespPtr),y + bne .97 + + ldy #3 hSMBContext + jsr GetSMBCtx + + ldy #S.NETBIOS+S.SMB.H.TID + lda (ZPRespPtr),y + sta (ZPCtxPtr),y + iny + lda (ZPRespPtr),y + sta (ZPCtxPtr),y + +.8 lda hResp + >SYSCALL FreeMem + + clc + >RET 5 + +.97 lda hResp + >SYSCALL FreeMem + +.98 lda #MLI.E.IO + +.99 >POP 5 + rts +*-------------------------------------- +CIFS.Mount +*-------------------------------------- +CIFS.UMount clc + rts +*-------------------------------------- +CS.CALLBACK jmp (J.CIFS,x) +*-------------------------------------- +CIFS.ChTyp +*-------------------------------------- +CIFS.ChMod +*-------------------------------------- +CIFS.FStat +*-------------------------------------- +CIFS.Stat >PULLW ZPPtr2 S.STAT + >PULLW ZPPtr1 PATH + + +.99 lda #MLI.E.INVPATH + sec + rts +*-------------------------------------- +CIFS.MKDir +*-------------------------------------- +CIFS.MKNod +*-------------------------------------- +CIFS.MKFIFO +*-------------------------------------- +CIFS.Pipe lda #MLI.E.BADCALL + sec + rts +*-------------------------------------- +CIFS.OpenDir lda #MLI.E.BADCALL + sec + rts +*-------------------------------------- +CIFS.ReadDir lda #MLI.E.INVPATH + sec + rts +*-------------------------------------- +CIFS.CloseDir +*-------------------------------------- +CIFS.Open +*-------------------------------------- +CIFS.Close +*-------------------------------------- +CIFS.Read +*-------------------------------------- +CIFS.Write +*-------------------------------------- +CIFS.ChOwn + lda #MLI.E.BADCALL + sec + rts +*-------------------------------------- +GetSMBCtx lda (pStack),y + >SYSCALL GetMemPtr + >STYA ZPCtxPtr + rts +*-------------------------------------- +* Y = LEN from S.NETBIOS.TYPE +* A = Ptr to LEN Word +*-------------------------------------- +GetReqLenYAtA sty ZPReqLen + stz ZPReqLen+1 + + pha + + tya + dec + dec + ply + + sta (ZPReqPtr),y + iny + lda #0 + sta (ZPReqPtr),y + + lda ZPReqLen + sec + sbc #S.NETBIOS + ldy #S.NETBIOS.LEN+2 + sta (ZPReqPtr),y + lda ZPReqLen+1 + sec + sbc /S.NETBIOS + dey + sta (ZPReqPtr),y + + lda ZPReqLen + clc + adc #S.TCP + tay + + lda ZPReqLen+1 + adc /S.TCP + + rts +*-------------------------------------- +GetRespData sta hResp + >SYSCALL GetMemPtr + + pha + tya +* clc + adc #S.TCP + sta ZPRespPtr + pla + adc /S.TCP + sta ZPRespPtr+1 + rts +*-------------------------------------- +CS.END +*-------------------------------------- +LIBTCPIP .AZ "libtcpip" +hLIBTCPIP .BS 1 +*-------------------------------------- +SMB.TRANSPORT .DA #0 DIRECT TCP TRANSPORT + .DA #0 24 BITS LENGTH + .DA /SMB.NegReq.end-SMB.H + .DA #SMB.NegReq.end-SMB.H +*-------------------------------------- +SMB.H .DA #$FF + .AS "SMB" + .DA #S.SMB.H.CMD.NEGOTIATE + .HS 00000000 + .DA #0 S.SMB.H.FLAGS + .DA S.SMB.H.FLAGS2.LONGNAMES + .DA 0 PIDHI + .HS 0000000000000000 SECFEAT + .DA 0 RSVD + .DA $FFFF TID + .DA $FFFE PIDLO + .BS 2 UID + .DA 0 MID +*-------------------------------------- +SMB.NegReq .DA #0 WORD COUNT + + .DA #SMB.NegReq.end-2-* ByteCount + .DA #0 + +* .DA #2 +* .AZ "PC NETWORK PROGRAM 1.0" +* .DA #2 +* .AZ "LANMAN1.0" +* .DA #2 +* .AZ "Windows for Workgroups 3.1a" +* .DA #2 +* .AZ "LM1.2X002" +* .DA #2 +* .AZ "LANMAN2.1" + .DA #2 + .AZ "NT LM 0.12" +* .DA #2 +* .AZ "SMB 2.002" +* .DA #2 +* .AZ "SMB 2.???" +SMB.NegReq.end .EQ * +*-------------------------------------- +SMB.SessionSetup.H + .DA #13 WORD COUNT + .HS FF000000 NO MORE CMD + .DA 1280 MAX BUFFER + .DA 2 MAX MPX COUNT + .HS 0000 VC NUMBER + .HS 00000000 SESSION KEY + .DA 0 CI PASS LEN + .DA 0 CS PASS LEN + .HS 00000000 + .HS 00000000 CAPABILITIES +SMB.SessionSetup.H.Len .EQ *-SMB.SessionSetup.H +* .BS 2 ByteCount +SMB.SessionSetup.Guest + .AZ "" Password + .AZ "Guest" Account Name + .AZ "?" Primary Domain +SMB.SessionSetup.Guest.Len .EQ *-SMB.SessionSetup.Guest +SMB.SessionSetup.T + .AZ "A2osX" Native OS + .AZ "A2osX-CIFSD" Native LANMAN +SMB.SessionSetup.T.Len .EQ *-SMB.SessionSetup.T +*-------------------------------------- +SMB.TreeConnect.H + .DA #4 WORD COUNT + .HS FF000000 NO MORE CMD + .DA 0 + .DA 1 PASSWORD LEN (1 for "\0") +SMB.TreeConnect.H.Len .EQ *-SMB.TreeConnect.H +* .BS 2 ByteCount +* .AZ "" PASSWORD +* .AZ "_temp" PATH +SMB.TreeConnect.T + .AZ "A:" Disk Share +SMB.TreeConnect.T.Len .EQ *-SMB.TreeConnect.T +*-------------------------------------- +SMB.TRANS2.H .DA #15 WORD COUNT + .BS 2 TotalParamCount + .DA 0 TotalDataCount + .DA 10 MaxParameterCount + .DA 460 MaxDataCount + .DA #1 MaxSetupCount + .HS 00 Reserved1 + .DA 0 Flags + .HS 00000000 Timeout + .HS 0000 Reserved2 + .BS 2 ParameterCount + .DA 66 ParameterOffset + .HS 0000 DataCount + .HS 0000 DataOffset + .DA #1 SetupCount + .HS 00 Reserved3 +*-------------------------------------- +SMB.QueryPathInfo + .DA 5 TRANS2_QUERY_PATH_INFORMATION + + .DA SMB.QueryPathInfo.PrmCnt+1 INCLUDING Padding byte below + .HS 00 Padding + +SMB.QueryPathInfo.Prm + .DA $0001 InformationLevel + .HS 00000000 SearchStorageType +SMB.QueryPathInfo.PrmCnt .EQ *-SMB.QueryPathInfo.Prm + .AZ "server.met" FileName +SMB.QueryPathInfo.end + +*-------------------------------------- +SMB.FindFirst .DA 1 TRANS2_FIND_FIRST2 + + .DA SMB.FindFirst.PrmCnt+1 INCLUDING Padding byte below + .HS 00 Padding + +SMB.FindFirst.Prm + .DA $0016 SearchAttributes + .DA 1024 SearchCount + .DA 3 Flags + .DA $0001 InformationLevel + .HS 00000000 SearchStorageType +SMB.FindFirst.PrmCnt .EQ *-SMB.FindFirst.Prm + .AZ "\*.*" FileName +SMB.FindFirst.end +*-------------------------------------- +MAN +SAVE usr/src/lib/libcifs.s +ASM diff --git a/LIB/LIBPAK.S.txt b/LIB/LIBPAK.S.txt index 7449fbfb..95bda872 100644 --- a/LIB/LIBPAK.S.txt +++ b/LIB/LIBPAK.S.txt @@ -5,9 +5,9 @@ NEW .OR $2000 .TF lib/libpak *-------------------------------------- - .INB INC/MACROS.I - .INB INC/A2OSX.I - .INB INC/LIBPAK.I + .INB inc/macros.i + .INB inc/a2osx.i + .INB inc/libpak.i *-------------------------------------- STATS .EQ 0 *-------------------------------------- @@ -39,7 +39,6 @@ CS.START cld L.MSG.Stats .DA MSG.Stats L.MSG.TopBytes .DA MSG.TopBytes .FIN -L.MSG.BL .DA MSG.BL .DA 0 *-------------------------------------- LIB.LOAD @@ -674,7 +673,6 @@ MSG.TopBytes .AS "Top : (%2d) %h.%h.%h.%h.%h.%h.%h.%h %h.%h.%h.%h.%h.%h.%h.%h TOP.Bits .DA #PAK.B.TOP8,#PAK.B.TOP16,#PAK.B.TOP24,#PAK.B.TOP32 TOP.BitCnt .DA #PAK.B.TOP8.W,#PAK.B.TOP16.W,#PAK.B.TOP24.W,#PAK.B.TOP32.W TOP.Stat .DA #S.PAKSTAT.TOP8,#S.PAKSTAT.TOP16,#S.PAKSTAT.TOP24,#S.PAKSTAT.TOP32 -MSG.BL .AZ "o=%D,l=%d,d=%D:" *-------------------------------------- Pak.SrcPtr .BS 2 @@ -708,5 +706,5 @@ Pak.Shnk .BS S.PAKSHNK Pak.Stat .BS S.PAKSTAT *-------------------------------------- MAN -SAVE USR/SRC/LIB/LIBPAK.S +SAVE usr/src/lib/libpak.s ASM diff --git a/LIB/LIBTCPIP.S.SKT.txt b/LIB/LIBTCPIP.S.SKT.txt index 740e2022..bcf393d7 100644 --- a/LIB/LIBTCPIP.S.SKT.txt +++ b/LIB/LIBTCPIP.S.SKT.txt @@ -221,7 +221,7 @@ SKT.connect.SEQPKT bcs .99 lda #S.SOCKET.TCP.S.SYNSENT - jsr SKT.StoreTCB.S + jmp SKT.StoreTCB.S .99 lda #ERR.SKT.NOCONN sec @@ -1045,14 +1045,14 @@ SKT.CheckStream lda #S.SOCKET.T.STREAM SKT.CheckTCP ldy #S.SOCKET.O lda (ZPPtrSKT),y and #S.SOCKET.O.ACCEPTCONN - bne .99 + bne SKT.BAD ldy #S.SOCKET.TCP.S lda (ZPPtrSKT),y cmp #S.SOCKET.TCP.S.ESTBLSH beq .8 - bcc .90 + bcc .9 lda #MLI.E.IO * sec @@ -1062,11 +1062,10 @@ SKT.CheckTCP ldy #S.SOCKET.O clc rts -.90 lda #ERR.SKT.NOCONN +.9 lda #ERR.SKT.NOCONN sec rts -.99 SKT.BAD lda #ERR.SKT.BAD sec rts @@ -1308,22 +1307,26 @@ SKT.NewTCB ldx #S.SOCKET.TCP.INSEQNUM .9 rts *-------------------------------------- SKT.GetTCB ldy #S.SOCKET.TCP.INSEQNUM + .1 lda (ZPPtrSKT),y sta SKT.Cache,y iny cpy #S.SOCKET.TCP bne .1 + rts *-------------------------------------- SKT.StoreTCB.S ldy #S.SOCKET.TCP.S sta (ZPPtrSKT),y SKT.StoreTCB ldy #S.SOCKET.TCP.INSEQNUM + .1 lda SKT.Cache,y sta (ZPPtrSKT),y iny cpy #S.SOCKET.TCP bne .1 + clc rts *-------------------------------------- diff --git a/LIB/LIBTCPIP.S.TCP.txt b/LIB/LIBTCPIP.S.TCP.txt index 0752e7c8..3d182800 100644 --- a/LIB/LIBTCPIP.S.TCP.txt +++ b/LIB/LIBTCPIP.S.TCP.txt @@ -1,6 +1,6 @@ NEW AUTO 3,1 - .LIST OFF + .LIST OFF *-------------------------------------- TCP.IN jsr FRM.GetTargetSKT.TCPUDP jsr SKT.FindMatchingLocRem @@ -20,7 +20,7 @@ TCP.IN jsr FRM.GetTargetSKT.TCPUDP TCP.IN.RST lda #S.SOCKET.TCP.S.CLWAIT ldy #S.SOCKET.TCP.S sta (ZPPtrSKT),y - + * lda SKT.TABLE,x * jsr SKT.shutdown *-------------------------------------- @@ -39,7 +39,7 @@ TCP.IN.JMP.LISTEN bcs TCP.IN.JMP.DISCARD jsr SKT.AddToQueueA Queued successfully ? - bcs TCP.IN.JMP.DISCARD no, discard frame and new socket + bcs TCP.IN.JMP.DISCARD no, discard frame and new socket jsr ARP.AddFromFrameInPtr lda ZPTmpPtr1 @@ -64,11 +64,11 @@ TCP.IN.JMP.LISTEN lda #S.SOCKET.TCP.S.SYNRCVD jmp SKT.StoreTCB.S - + .9 rts *-------------------------------------- TCP.IN.JMP.SYNSENT - ldy #S.TCP.OPTIONS SYN Send, only accept SYN.ACK packet, then Send ACK + ldy #S.TCP.OPTIONS SYN Send, only accept SYN.ACK packet, then Send ACK lda (ZPFrameInPtr),y and #S.TCP.OPTIONS.SYN+S.TCP.OPTIONS.ACK cmp #S.TCP.OPTIONS.SYN+S.TCP.OPTIONS.ACK @@ -82,7 +82,7 @@ TCP.IN.JMP.SYNSENT .1 lda SKT.Cache+S.SOCKET.TCP.OUTNEXTSEQ,x adc #0 - sta SKT.Cache+S.SOCKET.TCP.OUTNEXTSEQ,x + sta SKT.Cache+S.SOCKET.TCP.OUTNEXTSEQ,x eor (ZPFrameInPtr),y bne .9 dey @@ -108,7 +108,7 @@ TCP.IN.JMP.SYNRCVD cmp #S.TCP.OPTIONS.ACK bne .8 jsr SKT.GetTCB - + ldx #3 ldy #S.TCP.ACKNUM+3 @@ -125,7 +125,7 @@ TCP.IN.JMP.SYNRCVD bpl .1 lda #S.SOCKET.TCP.S.ESTBLSH jmp SKT.StoreTCB.S - + .8 clc .9 rts *-------------------------------------- @@ -136,7 +136,7 @@ TCP.IN.JMP.ESTBLSH lda (ZPFrameInPtr),y and #S.TCP.OPTIONS.ACK Remote side ACKed data ? beq .4 -* Ack sent data +* Ack sent data ldy #S.TCP.ACKNUM+3 Get new ACK number from FrameIn... ldx #3 Substract old ACK from socket @@ -197,7 +197,7 @@ TCP.IN.JMP.ESTBLSH .5 lda (ZPFrameInPtr),y eor SKT.Cache+S.SOCKET.TCP.INSEQNUM,x bne .90 Missed a frame..... - + dey dex bpl .5 @@ -209,9 +209,9 @@ TCP.IN.JMP.ESTBLSH jsr SKT.AddDataToSktIn yes, queue data if there is room for.... bcc .6 - + rts - + .52 lda hFrameIn jsr SKT.AddToQueueA bcs .99 @@ -222,7 +222,7 @@ TCP.IN.JMP.ESTBLSH ldy ZPDataInLen+1 ldx #S.SOCKET.TCP.INSEQNUM jsr TCP.AddAYToSktCacheAtX - + jsr SKT.StoreTCB update socket jsr TCP.SetSocketTCPO.ACK ...and ack data @@ -235,7 +235,7 @@ TCP.IN.JMP.ESTBLSH jsr SKT.StoreTCB update socket lda #S.TCP.OPTIONS.FIN+S.TCP.OPTIONS.ACK - jsr TCP.OUT.SendOptA FIN received, Send FIN.ACK + jsr TCP.OUT.SendOptA FIN received, Send FIN.ACK lda #S.SOCKET.TCP.S.LASTACK jmp SKT.StoreTCB.S @@ -243,16 +243,16 @@ TCP.IN.JMP.ESTBLSH .8 ldy #S.SOCKET.TCP.O lda (ZPPtrSKT),y bne .91 - + .80 clc .99 rts .90 lda #S.TCP.OPTIONS.ACK Send 3 ACK for last SEQ number jsr TCP.OUT.SendOptA - + lda #S.TCP.OPTIONS.ACK jsr TCP.OUT.SendOptA - + lda #S.TCP.OPTIONS.ACK .91 jmp TCP.OUT.SendOptA *-------------------------------------- @@ -279,7 +279,7 @@ TCP.IN.JMP.FINWT1 bne .1 lda #S.TCP.OPTIONS.FIN+S.TCP.OPTIONS.ACK - jsr TCP.OUT.SendOptA Send FIN.ACK + jsr TCP.OUT.SendOptA Send FIN.ACK bcs TCP.IN.JMP.TIMEWT.RTS lda #S.SOCKET.TCP.S.FINWT2 @@ -288,9 +288,9 @@ TCP.IN.JMP.FINWT1 .1 jsr TCP.IN.ACKTheFIN FIN/ACK lda #S.TCP.OPTIONS.FIN+S.TCP.OPTIONS.ACK - jsr TCP.OUT.SendOptA FIN received, Send ACK + jsr TCP.OUT.SendOptA FIN received, Send ACK bcs TCP.IN.JMP.TIMEWT.RTS - + lda #S.SOCKET.TCP.S.LASTACK jmp SKT.StoreTCB.S *-------------------------------------- @@ -306,9 +306,9 @@ TCP.IN.JMP.FINWT2 lda #S.TCP.OPTIONS.ACK - jsr TCP.OUT.SendOptA FIN received, Send ACK + jsr TCP.OUT.SendOptA FIN received, Send ACK bcs TCP.IN.JMP.TIMEWT.RTS - + lda #S.SOCKET.TCP.S.TIMEWT jmp SKT.StoreTCB.S *-------------------------------------- @@ -346,7 +346,7 @@ TCP.IN.ACKTheSYN *-------------------------------------- TCP.IN.ACKTheFIN ldx #3 - + .1 inc SKT.Cache+S.SOCKET.TCP.INSEQNUM,x bne .8 dex @@ -448,13 +448,13 @@ TCP.SENDCLOSE ldx #0 *-------------------------------------- .4 cpx #S.SOCKET.T.SEQPKT bne .6 - + .5 jsr SKT.GetFromQueue bcs .7 >SYSCALL2 FreeMem - bra .5 - + bra .5 + .6 ldy #S.SOCKET.SQ.hInMem jsr TCP.SENDCLOSE.PIPE @@ -472,7 +472,9 @@ TCP.SENDCLOSE ldx #0 cpx #K.SKTTABLE.SIZE bne .1 + clc rts + TCP.SENDCLOSE.PIPE lda (ZPPtrSKT),y beq .8 @@ -487,11 +489,11 @@ TCP.SENDCLOSE.PIPE TCP.OUT lda SKT.Cache+S.SOCKET.TCP.OUTTOSEND+1 ldy SKT.Cache+S.SOCKET.TCP.OUTTOSEND bne .1 - + tax bne .1 -* Y,A=0 : no data to send - +* Y,A=0 : no data to send + ldy #S.SOCKET.TCP.O lda (ZPPtrSKT),y bne TCP.OUT.SendOptA a least an option... @@ -553,7 +555,7 @@ TCP.OUT.Send ldy #S.TCP.OPTIONS sta (ZPFrameOutPtr),y bit #S.TCP.OPTIONS.ACK beq .2 - + ldx #3 ldy #S.TCP.ACKNUM+3 diff --git a/LIB/LIBTCPIP.S.txt b/LIB/LIBTCPIP.S.txt index e08a9da0..3f4b1c24 100644 --- a/LIB/LIBTCPIP.S.txt +++ b/LIB/LIBTCPIP.S.txt @@ -227,17 +227,18 @@ INCOMING sta hFrameIn iny lda (ZPFrameInPtr),y cmp #S.ETH.EII.TYPE.ARP - beq .2 + bne .2 + jmp ARP.IN - cmp #S.ETH.EII.TYPE.IP - beq .3 +.2 cmp #S.ETH.EII.TYPE.IP + bne .9 -.9 sec + jmp IP.IN + +.9 lda #MLI.E.EOF + sec rts - -.2 jmp ARP.IN -.3 jmp IP.IN *-------------------------------------- * A = S.EVT.F * Expire = every sec @@ -248,6 +249,7 @@ PULSE and #S.EVT.F.T1SEC jsr ARP.EXPIRE every sec jsr DNS.EXPIRE + .1 jsr FRM.RETRY every 100ms jsr DNS.POLL jmp TCP.SENDCLOSE diff --git a/LIB/string.o.s.txt b/LIB/string.o.s.txt new file mode 100644 index 00000000..e44b1654 --- /dev/null +++ b/LIB/string.o.s.txt @@ -0,0 +1,49 @@ +NEW + AUTO 3,1 + .LIST ON + .OP 65C02 + .OR $2000 + .TF lib/string.o +*-------------------------------------- + .INB inc/macros.i + .INB inc/a2osx.i +*-------------------------------------- + .DA #0 KERNEL +*-------------------------------------- + >PSTR "strlen" + .DA CODE.strlen + >PSTR "strdup" + .DA CODE.strdup + >PSTR "strupr" + .DA CODE.strupr + >PSTR "strlwr" + .DA CODE.strlwr + .DA 0 +*-------------------------------------- +CODE.strlen .DA #CODE.strlen.L + >SYSCALL strlen +CODE.strlen.L .EQ *-CODE.strlen + rts +*-------------------------------------- +*-------------------------------------- +*-------------------------------------- +CODE.strdup .DA #CODE.strdup.L + >SYSCALL strdup +CODE.strdup.L .EQ *-CODE.strdup + rts +*-------------------------------------- +CODE.strupr .DA #CODE.strupr.L + >SYSCALL strupr +CODE.strupr.L .EQ *-CODE.strupr + rts +*-------------------------------------- +CODE.strlwr .DA #CODE.strlwr.L + >SYSCALL strlwr +CODE.strlwr.L .EQ *-CODE.strlwr + rts +*-------------------------------------- +*-------------------------------------- +*-------------------------------------- +MAN +SAVE usr/src/lib/string.o.s +ASM diff --git a/ProDOS.FX/ProDOS.S.XDOS.A.txt b/ProDOS.FX/ProDOS.S.XDOS.A.txt index d1a13205..404ed187 100644 --- a/ProDOS.FX/ProDOS.S.XDOS.A.txt +++ b/ProDOS.FX/ProDOS.S.XDOS.A.txt @@ -148,7 +148,7 @@ XDOS.DevCall php do not allow interrupts. lsr tax jsr XDOS.DevCall.Jmp - + bit CLRC8ROM RELEASE $C800-$CFFF ROM space bcs .9 plp diff --git a/ProDOS.FX/ProDOS.S.XRW.txt b/ProDOS.FX/ProDOS.S.XRW.txt index be0fa52f..f39a7150 100644 --- a/ProDOS.FX/ProDOS.S.XRW.txt +++ b/ProDOS.FX/ProDOS.S.XRW.txt @@ -23,6 +23,8 @@ XRW.START cld $D8 to flag language card bank 1 (main) .10 sta XRW.SeekTime + stz XRW.montimel + pla and #$7F mask off high bit. @@ -57,7 +59,7 @@ L59BD lda bloknml ldy #$05 -.1 asl +.1 asl rol XRW.ReqTrack dey bne .1 @@ -181,73 +183,6 @@ XRW.E.EXIT ldx A2L bit IO.D2.DrvOff,x turn off rts *-------------------------------------- -XRW.SectorIO lda #2 - sta XRW.RecalibrateCnt - sta XRW.BadSeek - - bit XRW.bWrite - bpl .1 - - jsr XRW.PreNibble must prenibblize for write - -.1 stz XRW.RetryCnt - -.2 jsr XRW.ReadAddr read next address field. - bcc .4 if CC, A = current track - -.3 inc XRW.RetryCnt one less chance. - bpl .2 branch if < 128 - - dec XRW.RecalibrateCnt - sec - beq .9 - - ldx XRW.UnitIndex - lda #41 - sta XRW.D2Trk-1,x - lda #0 - sta XRW.D2VolNum-1,x - - jsr XRW.Seek Seek from Track 41 -> 0 - bra .1 - -.4 cmp XRW.ReqTrack - beq .6 - - lda XRW.BadSeek - beq .40 2 bad seeks, already - - dec XRW.BadSeek - bne .5 - -.40 lda XRW.SeekTime - bmi .5 seektime = 140 - - clc - adc #IO.D2.SeekTimeI - sta XRW.SeekTime - - ldx XRW.UnitIndex - sta XRW.D2SeekTime-1,x - -.5 lda XRW.ReqTrack - jsr XRW.Seek - bra .3 - -.6 lda XRW.AddrField.S is this the right sector ? - cmp XRW.ReqSector - bne .3 no, try another sector. - - bit XRW.bWrite - bpl .7 branch if write - - jmp XRW.Write - -.7 jsr XRW.Read - bcs .3 if bad read - -.9 rts -*-------------------------------------- * preniblize subroutine (16 sector format) * * converts 256 bytes of user data in (buf) into 6 bit nibls in nbuf2. @@ -369,6 +304,75 @@ L596F ldy #$FF index to last byte of data to write. stx wrefd5+1 rts *-------------------------------------- +XRW.SectorIO lda #2 + sta XRW.RecalibrateCnt + sta XRW.BadSeek + + bit XRW.bWrite + bpl .1 + + jsr XRW.PreNibble must prenibblize for write + +.1 stz XRW.RetryCnt + +.2 jsr XRW.ReadAddr read next address field. + bcc .4 if CC, A = current track + +.3 inc XRW.RetryCnt one less chance. + bpl .2 branch if < 128 + + dec XRW.RecalibrateCnt + sec + beq .9 + + ldx XRW.UnitIndex + + lda #41 + sta XRW.D2Trk-1,x + + lda #0 + sta XRW.D2VolNum-1,x reset volnum for seeking 4 Qtracks + + jsr XRW.Seek Seek from Track 41 -> 0 + bra .1 + +.4 cmp XRW.ReqTrack + beq .6 + + lda XRW.BadSeek + beq .40 2 bad seeks, already + + dec XRW.BadSeek + bne .5 + +.40 lda XRW.SeekTime + bmi .5 seektime already > 128 + + clc + adc #IO.D2.SeekTimeI + sta XRW.SeekTime + + ldx XRW.UnitIndex + sta XRW.D2SeekTime-1,x + +.5 lda XRW.ReqTrack + jsr XRW.Seek + bra .3 + +.6 lda XRW.AddrField.S is this the right sector ? + cmp XRW.ReqSector + bne .3 no, try another sector. + + bit XRW.bWrite +* bpl .7 branch if write + bmi XRW.Write +* jmp XRW.Write + +.7 jsr XRW.Read + bcs .3 if bad read + +.9 rts +*-------------------------------------- * write subroutine (16 sector format) * * writes data from nbuf1 and buf. first nbuf2, high to low then direct @@ -382,13 +386,10 @@ L596F ldy #$FF index to last byte of data to write. .LIST ON XRW.Write lda IO.D2.ReadProt,x PREWRITE MODE .LIST OFF - lda IO.D2.ReadMode,x -* sec -* bpl .1 -* jmp XRW.ReadMode +* lda IO.D2.ReadMode,x -.1 lda nbuf2 + lda nbuf2 sta pcl lda #$FF Self Sync Byte @@ -520,10 +521,12 @@ wrefd5 ldx #$60 (2) restore slot. warning: modified by prenib clc (2) - lda #$FF (2) - nop (2) + jsr XRW.Write.RTS (6+6) - jsr wnibl (15,6) write turn off byte. +* lda #$FF (2) +* nop (2) + +* jsr wnibl (15,6) write turn off byte. XRW.ReadMode lda IO.D2.ReadMode,x out of write mode lda IO.D2.WShift,x to read mode. @@ -542,41 +545,14 @@ wnibl sta IO.D2.WLoad,x (5) nibl write XRW.Write.RTS rts (6) .LIST OFF *-------------------------------------- -* delays a specified number of 100 usec intervals for motor timing. -* on entry: acc holds number of 100 usec intervals to delay. -* on exit: acc = 0, x = 0, y = unchanged, carry set. -* montimel, montimeh are incremented once per 100 usec interval -* for motor on timing. -*-------------------------------------- -XRW.WaitSeekTime -* lda XRW.SeekCnt -* bne .1 -* inc XRW.SeekCnt - - lda #IO.D2.SeekTime0 -* bra XRW.Wait100usecA -*.1 lda XRW.SeekTime - .HS 2C BIT ABS -XRW.Wait25600usec - lda #0 -XRW.Wait100usecA - phx - -.1 ldx #17 (2) +XRW.Reset ldx A2L -.2 dex (2) - bne .2 (3) + lda IO.D2.Ph0Off,x + lda IO.D2.Ph1Off,x + lda IO.D2.Ph2Off,x + lda IO.D2.Ph3Off,x - inc XRW.montimel (6) - bne .3 (3) - - inc XRW.montimeh (6) - -.3 dec (2) - bne .1 (3) - - plx - rts + jmp XRW.ReadMode *-------------------------------------- * read subroutine (16-sector format) * @@ -746,16 +722,15 @@ XRW.Seek ldx XRW.UnitIndex pla sta XRW.D2Trk-1,x will be current track at the end - stz XRW.SeekCnt - ldx A2L ldy A2L .1 lda XRW.CurrentQTrack cmp XRW.TargetQTrack - beq .7 + beq .8 - jsr .8 + sta IO.D2.Ph0Off,x + sta IO.D2.Ph0Off,y bcs .2 @@ -794,37 +769,53 @@ XRW.Seek ldx XRW.UnitIndex and #6 ora A2L -* bcc .4 + bcc .4 * move out : invert 2 phases -* phx -* tax -* pla + phx + tax + pla .4 tay - lda IO.D2.Ph0On,x - lda IO.D2.Ph0On,y + sta IO.D2.Ph0On,x + sta IO.D2.Ph0On,y jsr XRW.WaitSeekTime bra .1 -.7 jsr XRW.Wait25600usec +.8 jsr XRW.Wait25600usec -.8 bit IO.D2.Ph0Off,x - ldx IO.D2.Ph0Off,y - rts + sta IO.D2.Ph0Off,x + sta IO.D2.Ph0Off,y + rts *-------------------------------------- -XRW.Reset ldx A2L +XRW.WaitSeekTime +* lda XRW.SeekTime + lda #IO.D2.SeekTimeP + .HS 2C BIT ABS +XRW.Wait25600usec + lda #0 +XRW.Wait100usecA + phx + +.1 ldx #18 (2) - lda IO.D2.Ph0Off,x - lda IO.D2.Ph1Off,x - lda IO.D2.Ph2Off,x - lda IO.D2.Ph3Off,x +.2 dex (2) + bne .2 (3) - jmp XRW.ReadMode + inc XRW.montimel (6) + bne .3 (3) + + inc XRW.montimeh (6) + +.3 dec (2) + bne .1 (3) + + plx + rts *-------------------------------------- XRW.Trk2Qtrk asl x2 sta .1+1 @@ -1003,6 +994,7 @@ XRW.SeekTime .HS 00 .HS FFFFFF .HS 7C * .HS FFFF +XRW.MoveCnt .EQ * XRW.Temp4x4 .HS 00 XRW.CheckSum .HS 00 used for address header cksum .HS 8084 @@ -1016,9 +1008,7 @@ XRW.CurrentQTrack .HS 00 * .HS FF XRW.TargetQTrack .HS 00 .HS B0B4B8BCC0C4C8 -* .HS FFFF - .HS FF -XRW.SeekCnt .HS 00 + .HS FFFF .HS CCD0D4D8DCE0 XRW.bWrite .HS 00 .HS E4E8ECF0F4F8FC diff --git a/SBIN/CIFSD.S.txt b/SBIN/CIFSD.S.txt index a069a824..17bfeb3d 100644 --- a/SBIN/CIFSD.S.txt +++ b/SBIN/CIFSD.S.txt @@ -11,8 +11,9 @@ NEW .INB inc/eth.i .INB inc/libtcpip.i .INB inc/net.smb.i + .INB inc/libcifs.i *-------------------------------------- -TIMEOUT.MAX .EQ 100 20 sec. +TIMEOUT.MAX .EQ 250 25 sec. *-------------------------------------- * Zero Page Segment, up to 32 bytes *-------------------------------------- @@ -20,11 +21,15 @@ TIMEOUT.MAX .EQ 100 20 sec. .OR ZPBIN ZS.START ZPIPCfgPtr .BS 2 +hSocket .BS 1 hResp .BS 1 ZPRespPtr .BS 2 TimeOut .BS 1 -ZS.END - .ED +hSMBContext .BS 1 +hMount .BS 1 +ZPPtr1 .BS 2 +ZPPtr2 .BS 2 +ZS.END .ED *-------------------------------------- * File Header (16 Bytes) *-------------------------------------- @@ -44,9 +49,10 @@ CS.START cld *-------------------------------------- .1 .DA CS.INIT .DA CS.RUN - .DA CS.DOEVENT + .DA CS.DOEVENT .DA CS.QUIT L.LIBTCPIP .DA LIBTCPIP +L.LIBCIFS .DA LIBCIFS L.MSG.TCPIPERR .DA MSG.TCPIPERR L.MSG.USAGE .DA MSG.USAGE L.MSG.UNKNOWN .DA MSG.UNKNOWN @@ -54,6 +60,7 @@ L.MSG.SESSION .DA MSG.SESSION L.SMB.NegReq .DA SMB.NegReq L.SMB.SessSetup .DA SMB.SessSetup L.SMB.TreeConnReq .DA SMB.TreeConnReq +L.SMB.QueryPathInfo .DA SMB.QueryPathInfo L.SMB.FindFirstReq .DA SMB.FindFirstReq .DA 0 *-------------------------------------- @@ -63,17 +70,84 @@ L.SMB.FindFirstReq .DA SMB.FindFirstReq CS.INIT >LDYA L.LIBTCPIP >SYSCALL LoadLib bcs .9 + sta hLIBTCPIP - - clc -.9 rts + + >LDYA L.LIBCIFS + >SYSCALL LoadLib + bcs .9 + + sta hLIBCIFS + +* clc +.9 +CS.INIT.RTS rts *-------------------------------------- * Called until exit with CS * if RUN exits with CC, RUN entered again *-------------------------------------- -CS.RUN >LDA.G hSocket - bne .8 +CS.RUN lda hSocket + beq .1 + lda #0 + clc + rts + +.1 jsr CS.RUN.CheckTCPIP + bcs CS.INIT.RTS + + jsr CS.RUN.CheckArgs + bcs CS.INIT.RTS + + jsr CS.RUN.Connect + bcs CS.INIT.RTS + + >PUSHB hSocket + >PUSHBI 0 + >LIBCALL hLIBCIFS,LIBCIFS.Negotiate + +* jsr CS.RUN.Negotiate + bcs .9 + + sta hSMBContext + + >PUSHB hSocket + >PUSHB hSMBContext + >PUSHWI 0 + >PUSHWI 0 + >PUSHBI 0 + >LIBCALL hLIBCIFS,LIBCIFS.SessionSetup + +* jsr CS.RUN.SessSetup + bcs .9 + + >PUSHB hSocket + >PUSHB hSMBContext + lda #2 + >SYSCALL ArgV + >PUSHYA + >PUSHBI 0 + >LIBCALL hLIBCIFS,LIBCIFS.TreeConnect + +* jsr CS.RUN.TreeConn + bcs .9 + +* lda #3 +* >SYSCALL ArgV +* >PUSHYA + +* >PUSHW L.CS.CALLBACK + +* >SYSCALL Mount +* bcs .9 + +* sta hMount + +.8 lda #0 + clc +.9 rts +*-------------------------------------- +CS.RUN.CheckTCPIP >LIBCALL hLIBTCPIP,LIBTCPIP.GETCFG is TCPIP loaded ? bcs .9 @@ -83,67 +157,66 @@ CS.RUN >LDA.G hSocket >LDYA L.MSG.TCPIPERR >SYSCALL PutS - + lda #E.SYN sec - rts - -.1 jsr CS.RUN.CheckArgs - bcs .90 - - jsr CS.RUN.Connect - - >SLEEP - - jsr CS.RUN.Negotiate - bcs .9 - - >SLEEP - - jsr CS.RUN.SessSetup - bcs .9 - - >SLEEP - - jsr CS.RUN.TreeConn - bcs .9 - - >SLEEP - - jsr CIFS.OpenDir - bcs .9 - - -.8 lda #0 - clc .9 rts -.90 >LDYA L.MSG.USAGE - >SYSCALL PutS - lda #E.SYN - sec +.1 lda #AF.INET + >STA.G SA.LOCAL + >STA.G SA.REMOTE + + ldy #S.IPCFG.IP+3 + +.3 lda (ZPIPCfgPtr),y + pha + dey + cpy #S.IPCFG.IP-1 + bne .3 + + ldy #SA.LOCAL+S.SOCKADDR.ADDR + +.4 pla + sta (pData),y + iny + cpy #SA.LOCAL+S.SOCKADDR.ADDR+4 + bne .4 + + lda #TCP.PORT.CIFS + >STA.G SA.REMOTE+S.SOCKADDR.PORT + iny + lda /TCP.PORT.CIFS + sta (pData),y + + clc rts *-------------------------------------- CS.RUN.CheckArgs ldy #S.PS.ARGC lda (pPS),y cmp #3 - bcc .9 + bcs .1 - lda #TIMEOUT.MAX + >LDYA L.MSG.USAGE + >SYSCALL PutS + lda #E.SYN + sec + rts + +.1 lda #TIMEOUT.MAX sta TimeOut - -.1 >PUSHEA.G SA.REMOTE+S.SOCKADDR.ADDR + +.2 >PUSHEA.G SA.REMOTE+S.SOCKADDR.ADDR lda #1 >SYSCALL ArgV >PUSHYA >LIBCALL hLIBTCPIP,LIBTCPIP.HST.GetByName - bcc .2 - + bcc .3 + >SLEEP lda TimeOut - bne .1 - + bne .2 + >PUSHW L.MSG.UNKNOWN lda #1 >SYSCALL ArgV @@ -151,32 +224,10 @@ CS.RUN.CheckArgs >PUSHBI 2 >SYSCALL PrintF sec -.9 rts - -.2 lda #AF.INET - >STA.G SA.LOCAL - >STA.G SA.REMOTE - ldy #S.IPCFG.IP+3 - -.3 lda (ZPIPCfgPtr),y - pha - dey - cpy #S.IPCFG.IP-1 - bne .3 - - ldy #SA.REMOTE+S.SOCKADDR.PORT -.4 pla - sta (pData),y - iny - cpy #SA.REMOTE+S.SOCKADDR.PORT+4 - bne .4 - - lda #TCP.PORT.CIFS - >STA.G SA.REMOTE+S.SOCKADDR.PORT - iny - lda /TCP.PORT.CIFS - sta (pData),y + rts +.3 lda #2 + >SYSCALL ArgV clc rts @@ -186,16 +237,43 @@ CS.RUN.Connect >PUSHBI 0 no protocol >LIBCALL hLIBTCPIP,LIBTCPIP.Socket bcs .9 - >STA.G hSocket + sta hSocket >PUSHEA.G SA.LOCAL - >LDA.G hSocket + lda hSocket >LIBCALL hLIBTCPIP,LIBTCPIP.Bind bcs .9 - + + >SLEEP + >PUSHEA.G SA.REMOTE - >LDA.G hSocket + lda hSocket + >LIBCALL hLIBTCPIP,LIBTCPIP.Connect + bcs .9 + + lda #TIMEOUT.MAX + sta TimeOut + +.1 >SLEEP + + lda hSocket + >LIBCALL hLIBTCPIP,LIBTCPIP.Recv + bcc .7 + + cmp #E.NODATA + beq .8 + + ldx TimeOut + bne .1 + + sec + rts + +.7 >SYSCALL Freemem + +.8 clc + .9 rts *-------------------------------------- CS.RUN.Negotiate @@ -204,19 +282,19 @@ CS.RUN.Negotiate .1 >PUSHWI SMB.NegReq.end-SMB.NegReq >PUSHW L.SMB.NegReq - >LDA.G hSocket + lda hSocket >LIBCALL hLIBTCPIP,LIBTCPIP.Send bcc .2 - + >SLEEP ldx TimeOut bne .1 - + bra .99 - + .2 >SLEEP - >LDA.G hSocket + lda hSocket >LIBCALL hLIBTCPIP,LIBTCPIP.Recv bcc .3 @@ -228,25 +306,25 @@ CS.RUN.Negotiate .3 sta hResp >SYSCALL GetMemPtr >STYA ZPRespPtr - + ldy #$3f lda (ZPRespPtr),y bne .9 - + ldy #$5B lda (ZPRespPtr),y cmp #5 bne .9 - - + + lda hResp >SYSCALL FreeMem * clc rts - + .9 lda hResp >SYSCALL FreeMem - + .99 lda #MLI.E.INVPATH sec rts @@ -257,19 +335,19 @@ CS.RUN.SessSetup .1 >PUSHWI SMB.SessSetup.end-SMB.SessSetup >PUSHW L.SMB.SessSetup - >LDA.G hSocket + lda hSocket >LIBCALL hLIBTCPIP,LIBTCPIP.Send bcc .2 - + >SLEEP ldx TimeOut bne .1 - + bra .99 - + .2 >SLEEP - >LDA.G hSocket + lda hSocket >LIBCALL hLIBTCPIP,LIBTCPIP.Recv bcc .3 @@ -281,7 +359,7 @@ CS.RUN.SessSetup .3 sta hResp >SYSCALL GetMemPtr >STYA ZPRespPtr - + ldy #$3f lda (ZPRespPtr),y bne .9 @@ -292,7 +370,7 @@ CS.RUN.SessSetup iny lda (ZPRespPtr),y sta SMB.TreeConnReq.UID+1 - + >PUSHW L.MSG.SESSION lda #$63 clc @@ -301,18 +379,18 @@ CS.RUN.SessSetup lda #0 adc ZPRespPtr+1 >PUSHYA - + >PUSHBI 2 >SYSCALL PrintF - + lda hResp >SYSCALL FreeMem * clc rts - + .9 lda hResp >SYSCALL FreeMem - + .99 lda #MLI.E.INVPATH sec rts @@ -322,19 +400,19 @@ CS.RUN.TreeConn lda #TIMEOUT.MAX .1 >PUSHWI SMB.TreeConnReq.end-SMB.TreeConnReq >PUSHW L.SMB.TreeConnReq - >LDA.G hSocket + lda hSocket >LIBCALL hLIBTCPIP,LIBTCPIP.Send bcc .2 - + >SLEEP ldx TimeOut bne .1 - + bra .99 - + .2 >SLEEP - >LDA.G hSocket + lda hSocket >LIBCALL hLIBTCPIP,LIBTCPIP.Recv bcc .3 @@ -346,41 +424,43 @@ CS.RUN.TreeConn lda #TIMEOUT.MAX .3 sta hResp >SYSCALL GetMemPtr >STYA ZPRespPtr - + ldy #$3f lda (ZPRespPtr),y bne .9 - + ldy #$52 lda (ZPRespPtr),y sta SMB.FindFirstReq.TID iny lda (ZPRespPtr),y sta SMB.FindFirstReq.TID+1 - + ldy #$56 lda (ZPRespPtr),y sta SMB.FindFirstReq.UID iny lda (ZPRespPtr),y sta SMB.FindFirstReq.UID+1 - + lda hResp >SYSCALL FreeMem * clc rts - + .9 lda hResp >SYSCALL FreeMem - + .99 lda #MLI.E.INVPATH sec rts *-------------------------------------- CS.DOEVENT lda (pEvent) bpl .9 is it a TIMER event? + lda TimeOut beq .9 + dec TimeOut .9 sec do not discard TIMER event rts @@ -388,78 +468,41 @@ CS.DOEVENT lda (pEvent) * Called once, when RUN exited with CS * Put code for unloading LIB here *-------------------------------------- -CS.QUIT >LDA.G hSocket +CS.QUIT lda hMount + beq .1 + + >SYSCALL UMount + +.1 lda hSocket + beq .2 + >LIBCALL hLIBTCPIP,LIBTCPIP.Shutdown - - lda hLIBTCPIP + +.2 lda hLIBCIFS + beq .3 + + >SYSCALL UnloadLib + +.3 lda hLIBTCPIP beq .8 + >SYSCALL UnloadLib .8 clc rts *-------------------------------------- -CIFS.OpenDir lda #TIMEOUT.MAX - sta TimeOut - -.1 >PUSHWI SMB.FindFirstReq.end-SMB.FindFirstReq - >PUSHW L.SMB.FindFirstReq - >LDA.G hSocket - >LIBCALL hLIBTCPIP,LIBTCPIP.Send - bcc .2 - - >SLEEP - ldx TimeOut - bne .1 - - bra .99 - -.2 >SLEEP - - >LDA.G hSocket - >LIBCALL hLIBTCPIP,LIBTCPIP.Recv - bcc .3 - - cmp #E.NODATA - beq .2 - - bra .99 - -.3 sta hResp - >SYSCALL GetMemPtr - >STYA ZPRespPtr - - ldy #$3f - lda (ZPRespPtr),y - bne .9 - - lda hResp - >SYSCALL FreeMem -* clc - rts - -.9 lda hResp - >SYSCALL FreeMem - -.99 lda #MLI.E.INVPATH - sec - rts -*-------------------------------------- -CIFS.ReadDir -*-------------------------------------- -CIFS.CloseDir - clc - rts -*-------------------------------------- CS.END *-------------------------------------- * Initialized DATA *-------------------------------------- LIBTCPIP .AZ "libtcpip" hLIBTCPIP .BS 1 -MSG.TCPIPERR .AZ "HTTPD:TCP/IP Not initialized properly." +LIBCIFS .AZ "libcifs" +hLIBCIFS .BS 1 +MSG.TCPIPERR .AZ "CIFSD:TCP/IP Not initialized properly." MSG.USAGE .AZ "Usage : CIFSD sharename mountpoint" -MSG.UNKNOWN .AZ "%s: Unknown host\r\n" -MSG.SESSION .AZ "Connected to: %s\r\n" +MSG.UNKNOWN .AZ "CIFSD:%s: Unknown host\r\n" +MSG.SESSION .AZ "CIFSD:Connected to: %s\r\n" *-------------------------------------- SMB.NegReq .DA #0 DIRECT TCP TRANSPORT .DA #0 24 BITS LENGTH @@ -521,7 +564,7 @@ SMB.SessSetup .DA #0 DIRECT TCP TRANSPORT .DA 0 MID .DA #13 WORD COUNT - + .HS FF000000 NO MORE CMD .DA 1280 MAX BUFFER .DA 2 MAX MPX COUNT @@ -535,11 +578,9 @@ SMB.SessSetup .DA #0 DIRECT TCP TRANSPORT .DA #SMB.SessSetup.end-2-* .DA /SMB.SessSetup.end-2-* -SMB.SessSetup.SecBlob * .AZ "" Password - .AZ "GUEST" Account Name + .AZ "Guest" Account Name .AZ "?" Primary Domain -SMB.SessSetup.SecBlob.LEN .EQ *-SMB.SessSetup.SecBlob .AZ "A2osX" Native OS .AZ "A2osX-CIFSD" Native LANMAN SMB.SessSetup.end .EQ * @@ -563,20 +604,73 @@ SMB.TreeConnReq.TID SMB.TreeConnReq.UID .DA 0 UID .DA 0 MID - + .DA #4 WORD COUNT .HS FF000000 NO MORE CMD - .DA 0 + .DA 0 .DA 1 PASSWORD LEN - + .DA #SMB.TreeConnReq.end-2-* .DA /SMB.TreeConnReq.end-2-* .AZ "" PASSWORD - .AZ "\\SV-W2K-3\Apple" PATH + .AZ "_temp" PATH .AZ "?????" SMB.TreeConnReq.end .EQ * *-------------------------------------- +* https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-cifs/9b171bbf-c6d8-4c88-ac85-23c795cbb5d3 +*-------------------------------------- +SMB.QueryPathInfo + .DA #0 DIRECT TCP TRANSPORT + .DA #0 24 BITS LENGTH + .DA /SMB.QueryPathInfo.end-1-* + .DA #SMB.QueryPathInfo.end-1-* + .DA #$FF + .AS "SMB" + .DA #S.SMB.H.CMD.TRANSACTION2 + .HS 00000000 + .DA #0 S.SMB.H.FLAGS + .DA S.SMB.H.FLAGS2.LONGNAMES + .DA 0 PIDHI + .HS 0000000000000000 SECFEAT + .DA 0 RSVD +SMB.QueryPathInfo.TID + .DA $FFFF TID + .DA $FEFF PIDLO +SMB.QueryPathInfo.UID + .DA 0 UID + .DA 0 MID +* Trans2 + .DA #15 WORD COUNT + .DA SMB.QueryPathInfo.PrmCnt TotalParamCount + .DA 0 TotalDataCount + .DA 10 MaxParameterCount + .DA 460 MaxDataCount + .DA #1 MaxSetupCount + .HS 00 Reserved1 + .DA 0 Flags + .HS 00000000 Timeout + .HS 0000 Reserved2 + .DA SMB.QueryPathInfo.PrmCnt ParameterCount + .DA 66 ParameterOffset + .HS 0000 DataCount + .HS 0000 DataOffset + + .DA #1 SetupCount + .HS 00 Reserved3 +* TRANS2_QUERY_PATH_INFORMATION + .DA 5 TRANS2_QUERY_PATH_INFORMATION + + .DA SMB.QueryPathInfo.PrmCnt+1 INCLUDING Padding byte below + .HS 00 Padding + +SMB.QueryPathInfo.Prm + .DA $0001 InformationLevel + .HS 00000000 SearchStorageType + .AZ "server.met" FileName +SMB.QueryPathInfo.PrmCnt .EQ *-SMB.QueryPathInfo.Prm +SMB.QueryPathInfo.end +*-------------------------------------- SMB.FindFirstReq .DA #0 DIRECT TCP TRANSPORT .DA #0 24 BITS LENGTH @@ -596,38 +690,39 @@ SMB.FindFirstReq.TID .DA $FEFF PIDLO SMB.FindFirstReq.UID .DA 0 UID - .DA 0 MID - - .DA #$0F WORD COUNT - .DA 0 TotalParamCount + .DA 0 MID +* Trans2 + .DA #15 WORD COUNT + .DA SMB.FindFirstReq.PrmCnt TotalParamCount .DA 0 TotalDataCount - .DA 256 MaxParameterCount - .DA 1024 MaxDataCount + .DA 10 MaxParameterCount + .DA 460 MaxDataCount .DA #1 MaxSetupCount .HS 00 Reserved1 .DA 0 Flags .HS 00000000 Timeout .HS 0000 Reserved2 - .DA 18 ParameterCount - .DA 68 ParameterOffset + .DA SMB.FindFirstReq.PrmCnt ParameterCount + .DA 66 ParameterOffset .HS 0000 DataCount .HS 0000 DataOffset .DA #1 SetupCount .HS 00 Reserved3 - +* FIND_FIRST2 .DA 1 TRANS2_FIND_FIRST2 - .DA SMB.FindFirstReq.end-2-* + .DA SMB.FindFirstReq.PrmCnt+1 INCLUDING Padding byte below + .HS 00 Padding - .HS 000000 Padding - - .DA $373E SearchAttributes +SMB.FindFirstReq.Prm + .DA $0016 SearchAttributes .DA 1024 SearchCount - .DA 0 Flags - .DA $0104 InformationLevel + .DA 3 Flags + .DA $0001 InformationLevel .HS 00000000 SearchStorageType - .AS "\*" FileName + .AZ "\*.*" FileName +SMB.FindFirstReq.PrmCnt .EQ *-SMB.FindFirstReq.Prm SMB.FindFirstReq.end *-------------------------------------- .DUMMY @@ -641,7 +736,6 @@ SA.REMOTE .BS 1 S.SOCKADDR.AF .BS 1 .BS 4 S.SOCKADDR.ADDR .BS 2 S.SOCKADDR.PORT -hSocket .BS 1 DS.END .ED *-------------------------------------- diff --git a/SBIN/NETWORKD.S.txt b/SBIN/NETWORKD.S.txt index ffbd1562..f31ecc14 100644 --- a/SBIN/NETWORKD.S.txt +++ b/SBIN/NETWORKD.S.txt @@ -6,7 +6,7 @@ NEW .TF sbin/networkd *-------------------------------------- LIB.MAX .EQ 4 -DBG .EQ 0 +DBG .EQ 2 *-------------------------------------- .INB inc/macros.i .INB inc/a2osx.i diff --git a/SYS/KERNEL.S.BIN.txt b/SYS/KERNEL.S.BIN.txt index 616d4ec1..555e9a5a 100644 --- a/SYS/KERNEL.S.BIN.txt +++ b/SYS/KERNEL.S.BIN.txt @@ -8,19 +8,34 @@ NEW * A = hMem To loaded LIB *-------------------------------------- K.LoadLib jsr PS.Find.LIB - bcs .9 + bcs .99 + jsr BIN.Load K.Buf256 = "/PATH/BIN" - bcs .9 + bcs .99 + >STYA .1+1 txa Pass hLib to LibLoad + pha ldx #LIBMGR.LOAD -.1 jsr $ffff SELF MODIFIED, Call LIB.LOAD function - bcs BIN.Load.Cleanup - lda BIN.hMem +.1 jsr $ffff SELF MODIFIED, Call LIB.LOAD function + + plx + bcc .8 + + pha + txa + + jsr K.FreeMem + + pla + sec + rts + +.8 txa * clc -.9 rts +.99 rts *-------------------------------------- * UnloadLib * in : @@ -57,24 +72,30 @@ K.LoadDrv >STYA .2+1 Save "BIN\0ARGS\0\0" jsr PS.Find.DRV bcs .9 + jsr BIN.Load K.Buf256 = "/PATH/BIN" bcs .9 + >STYA .3+1 ldx #$ff .1 inx Skip "BIN" + .2 lda $ffff,x bne .1 + txa sec adc .2+1 tay lda #0 adc .2+2 Y,A = ARGS + .3 jsr $ffff SELF MODIFIED, call Dev.Detect jsr BIN.Load.Cleanup bcs .9 + lda #0 Make sure RC = 0 if success * clc .9 rts diff --git a/SYS/KERNEL.S.DIRENT.txt b/SYS/KERNEL.S.DIRENT.txt index f97b8aab..e6fd820c 100644 --- a/SYS/KERNEL.S.DIRENT.txt +++ b/SYS/KERNEL.S.DIRENT.txt @@ -3,7 +3,7 @@ NEW */-------------------------------------- * # OpenDir * ## C -* `int hDIR opendir (const char * dirpath);` +* `short int hDIR opendir (const char * dirpath);` * ## ASM * `>LDYA dirpath` * `>SYSCALL opendir` @@ -76,7 +76,7 @@ K.ReadDir.ROOT ldy #S.FD.DIR.FC did we already returned something ? >MLICALL MLIONLINE bcs K.ReadDir.RTS - >LDYAI 16*S.STAT+257 16 (Vols+Stat) + \0 + >LDYAI 16+S.STAT*18+1 14*(Vols+Stat) + 4*(PFT+Stat) + \0 jsr K.ReadDir.GetBufYA bcs K.ReadDir.RTS @@ -86,7 +86,7 @@ K.ReadDir.ROOT ldy #S.FD.DIR.FC did we already returned something ? .1 lda (ZPPtr2) and #$0F - beq .6 + beq .4 tax inc @@ -139,21 +139,49 @@ K.ReadDir.ROOT ldy #S.FD.DIR.FC did we already returned something ? .3 jsr K.ReadDir.AddStat -.6 lda ZPPtr2 +.4 lda ZPPtr2 clc adc #16 sta ZPPtr2 - bcc .7 + bcc .5 inc ZPPtr2+1 -.7 dec K.ReadDir.EC +.5 dec K.ReadDir.EC bne .1 + jsr FS.ClrStat + + lda /S.STAT.MODE.DIR + sta K.S.STAT+S.STAT.MODE+1 + + ldx #0 + +.6 lda Flt.Table.pftHI,x + beq .8 + + sta ZPPtr2+1 + lda Flt.Table.pftLO,x + sta ZPPtr2 + + ldy #$ff + +.7 iny + lda (ZPPtr2),y + jsr K.ReadDir.AddToBuf + eor #0 + bne .7 + + jsr K.ReadDir.AddStat + +.8 inx + cpx #K.FLT.MAX + bne .6 + * lda #0 done by S.MEM.F.INIT0 * sta (ZPPtr4) Ending 0 ldy #S.FD.DIR.FC - lda #16 + lda #255 sta (pFD),y Flag that we returned something for next time jmp K.ReadDir.EXIT *-------------------------------------- diff --git a/SYS/KERNEL.S.GP.txt b/SYS/KERNEL.S.GP.txt index b09037bc..d3b93b6f 100644 --- a/SYS/KERNEL.S.GP.txt +++ b/SYS/KERNEL.S.GP.txt @@ -2,7 +2,7 @@ NEW AUTO 3,1 *-------------------------------------- * SYSCALL (AUXLC to AUXLC) -* Used by user & kernel for inter bank Calls +* Used by user & kernel for inter bank Calls * In: * X = SYSfnc.Index * Y,A = free for Inline param @@ -10,7 +10,7 @@ NEW GP.CodeStart jmp GP.SysCall *-------------------------------------- * LIBCALL (AUXLC to AUXLC) -* Used by user +* Used by user * In: * Y = LIB.ID * X = LIBfnc.Index @@ -77,7 +77,7 @@ GP.Sleep2 ldy #S.PS.PC tsx inx - + inx keep PC HI,LO from KERNEL jsr PSExec/PSResume inx Stack Ptr is $1ff if empty @@ -92,7 +92,7 @@ GP.Sleep2 ldy #S.PS.PC bne .2 tya - + .3 >PUSHA push CPU Stack BC to restore on top of Soft Stack inc $1fe PC=PC+1 @@ -133,30 +133,49 @@ GP.SysCall dec IRQ.InKernel rts Unmodified Carry .3 sei - - pla get PC LO + inc IRQ.InKernel + +GO.Sleep2 pla get PC LO plx get PC HI * sec - sbc #2 move back JSR GP.SysCall -3 (jsr $BF00) +1 (RTI) - bcs .4 + sbc #2 + bcs GP.Sleep2 dex -.4 inc IRQ.InKernel - bra GP.Sleep2 +.1 bra GP.Sleep2 *-------------------------------------- GP.LibCall dec IRQ.InLib - pha No need to save X, K.GetMemPtr will leave it unmodified - tya Get LIB hMem in A + pha + phy + ldy #S.PS.A + sta (pPS),y + txa + iny #S.PS.X + sta (pPS),y + pla + iny #S.PS.Y + sta (pPS),y + jsr K.GetMemPtr Get LIB Code Segment (MemMgr in $E000, no BNK change) >STYA .1+1 pla .1 jsr $FFFF SELF MODIFIED -GP.LibCall.8 inc IRQ.InLib -GP.LibCall.RTS rts + bcc .2 + + tax + beq .3 + +.2 inc IRQ.InLib + rts + +.3 sei + inc IRQ.InLib + + bra GO.Sleep2 *-------------------------------------- GP.AtkCall dec IRQ.InKernel @@ -187,7 +206,7 @@ GP.AtkCall.INC inc IRQ.InKernel GP.FpuCall dec IRQ.InKernel cpx #FPU.FADD bcs .1 - + jsr MATH32 INT32, direct JMP bra GP.AtkCall.INC @@ -238,7 +257,7 @@ GP.FpuCall dec IRQ.InKernel *\-------------------------------------- GP.RomCallGetFacOnStack jsr GP.ROMCALL - + lda pStack ldy pStack+1 sta FORPNT Ptr to dst buffer @@ -252,7 +271,7 @@ GP.RomCall phx plx jsr GP.RomCall.JmpX - + .8 ldx #$ff bit $C000,x bit $C000,x @@ -305,7 +324,7 @@ GP.Float ldy #3 GP.lrintf jsr GP.SetFAC inc pStack keep 4 bytes on stack ldx #FPU.QINT - jsr GP.ROMCALL + jsr GP.ROMCALL ldy #3 @@ -386,7 +405,7 @@ GO.EXIT.JMP jmp $FFFF SELF MODIFIED *-------------------------------------- GP.IRQ cld - bit IRQ.Skip After A2osX IRQ.H ? + bit IRQ.Skip After A2osX IRQ.H ? bmi GP.IRQ.Exit sta SETALTZP switch to aux LC diff --git a/SYS/KERNEL.S.INIT.txt b/SYS/KERNEL.S.INIT.txt index 9836ffe1..00d86e4a 100644 --- a/SYS/KERNEL.S.INIT.txt +++ b/SYS/KERNEL.S.INIT.txt @@ -292,12 +292,6 @@ MemMgrInit >LDYAI Mem.MHiMem dex bpl .1 - ldx #K.FLT.MAX*2-1 - -.11 stz Flt.Table.hPath,x - dex - bpl .11 - ldx #K.NOD.MAX*2-1 .2 stz Nod.Table.hName,x @@ -322,6 +316,12 @@ MemMgrInit >LDYAI Mem.MHiMem dex bpl .6 + ldx #K.FLT.MAX*4-1 + +.7 stz Flt.Table.pftLO,x + dex + bpl .7 + rts *-------------------------------------- SysScrInit >LDYAI Mem.XHiMem diff --git a/SYS/KERNEL.S.MOUNT.txt b/SYS/KERNEL.S.MOUNT.txt index 6b5fdbf5..32f26926 100644 --- a/SYS/KERNEL.S.MOUNT.txt +++ b/SYS/KERNEL.S.MOUNT.txt @@ -2,18 +2,59 @@ NEW AUTO 3,1 *-------------------------------------- * K.Mount -* In : -* Out : +* ## ASM +* `>PUSHW mountpoint` +* `>PUSHW callback` +* +* Out : A = hMount *-------------------------------------- -K.Mount +K.Mount >PULLW ZPPtr2 callback + >PULLW ZPPtr1 mountpoint + + ldx #1 + +.1 lda Flt.Table.pftHI-1,x + beq .2 + + inx + cpx #K.FLT.MAX+1 + bne .1 + + lda #E.OOH + sec + rts + +.2 lda ZPPtr1 + sta Flt.Table.pftLO-1,x + lda ZPPtr1+1 + sta Flt.Table.pftHI-1,x + + lda ZPPtr2 + sta Flt.Table.cbLO-1,x + lda ZPPtr2+1 + sta Flt.Table.cbHI-1,x + + txa + + clc + rts *-------------------------------------- * K.UMount -* In : +* In : A = hMount * Out : *-------------------------------------- -K.UMount +K.UMount tax + + lda Flt.Table.pftHI-1,x + beq .9 + + stz Flt.Table.pftHI-1,x clc rts + +.9 lda #E.INVH + sec + rts *-------------------------------------- K.Online >PULLW K.MLI.PARAMS+2 >PULLB K.MLI.PARAMS+1 @@ -22,7 +63,7 @@ K.Online >PULLW K.MLI.PARAMS+2 */-------------------------------------- * # GetStkObj * ## C -* `int *ptr getstkobj (shoirt int hStkObj);` +* `int *ptr getstkobj (short int hStkObj);` * ## ASM * `lda hStkObj` * `>SYSCALL GetStkObj` diff --git a/SYS/KERNEL.S.PFT.txt b/SYS/KERNEL.S.PFT.txt index 7ce2d7f0..4b6cea5c 100644 --- a/SYS/KERNEL.S.PFT.txt +++ b/SYS/KERNEL.S.PFT.txt @@ -25,11 +25,13 @@ PFT.CheckPathYA >PUSHYA ldx #0 -.1 lda Flt.Table.hPath,x +.1 lda Flt.Table.pftHI,x beq .8 - jsr K.GetMemPtr - >STYA ZPPtr1 + sta ZPPtr1+1 + + lda Flt.Table.pftLO,x + sta ZPPtr1 ldy #$ff @@ -46,12 +48,15 @@ PFT.CheckPathYA >PUSHYA cmp #'/' bne .8 - lda Flt.Table.hLib,x get hLib - jsr K.GetMemPtr - >STYA .7+1 + lda Flt.Table.cbLO,x + sta .7+1 + + lda Flt.Table.cbHI,x + sta .7+2 pla discard JSR return @ pla - >LDYAI K.Buf256 pass full path to handler + lda /K.Buf256 pass full path to handler + iny skip "/" .6 ldx #$ff SELF MODIFIED SYSCALL # .7 jmp $ffff SELF MODIFIED