Kernel 0.94+

This commit is contained in:
Rémy GIBERT 2021-01-12 22:14:13 +01:00
parent d8c0f5e1e3
commit 2c946c431e
40 changed files with 1922 additions and 793 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -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

View File

@ -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 <SERVER> [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
*--------------------------------------

View File

@ -6,7 +6,6 @@ PathBuf .BS 65
hFileBuf .BS 1
CSH.Buf .BS 2
CSH.BufPtrSave .BS 2
CSH.CmdSave .BS 1

View File

@ -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

View File

@ -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
*--------------------------------------

View File

@ -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

135
BIN/CSH.S.DIR.txt Normal file
View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -395,6 +395,7 @@ CS.RUN.PRINT.BDEV
beq .8
>LDYA ZPFileName
jmp EnterSubDirYA
.8 clc
.9 rts

5
BIN/SED.S.txt Normal file
View File

@ -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"

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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
*--------------------------------------

View File

@ -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 );

View File

@ -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
*--------------------------------------

View File

@ -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
*--------------------------------------

691
LIB/LIBCIFS.S.txt Normal file
View File

@ -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

View File

@ -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

View File

@ -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
*--------------------------------------

View File

@ -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

View File

@ -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

49
LIB/string.o.s.txt Normal file
View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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 <ip|host> 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
*--------------------------------------

View File

@ -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

View File

@ -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

View File

@ -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
*--------------------------------------

View File

@ -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

View File

@ -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

View File

@ -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`

View File

@ -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