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 ZS.START
ZPAtlkParams .BS 2 ZPAtlkParams .BS 2
ZPPTR1 .BS 2 ZPPTR1 .BS 2
ZPPTR2 .BS 2
hBuf .BS 1 hBuf .BS 1
ZS.END .ED ZS.END .ED
*-------------------------------------- *--------------------------------------
@ -63,12 +62,9 @@ CS.RUN jsr CS.RUN.GetInfo
sec sec
.9 rts .9 rts
*-------------------------------------- *--------------------------------------
CS.RUN.GetInfo lda #AT.GetInfo CS.RUN.GetInfo >LEA.G P.GetInfo
>STA.G P.GetInfo+1 ldx #AT.GetInfo
jsr CS.RUN.GOATLK
>LEA.G P.GetInfo
jsr A2osX.ATKCALL
bcs .9 bcs .9
>PUSHW L.MSG.GETINFO >PUSHW L.MSG.GETINFO
@ -96,7 +92,8 @@ CS.RUN.GetInfo lda #AT.GetInfo
CS.RUN.GetMyZone CS.RUN.GetMyZone
>LEA.G ZoneBuf >LEA.G ZoneBuf
>STYA.G P.GetMyZone+$08 >STYA.G P.GetMyZone+$08
lda #4
lda #4 1/4 sec
>STA.G P.GetMyZone+$0C RetInt >STA.G P.GetMyZone+$0C RetInt
>STA.G P.GetMyZone+$0D RetCnt >STA.G P.GetMyZone+$0D RetCnt
@ -156,23 +153,28 @@ CS.RUN.LookupName
lda ZPPTR1 lda ZPPTR1
clc clc
adc #5 adc #5
sta ZPPTR2 sta ZPPTR1
lda ZPPTR1+1 lda ZPPTR1+1
adc #0 adc #0
sta ZPPTR2+2 sta ZPPTR1+1
>PUSHW ZPPTR2
ldx #3
>PUSHBI 7
.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 >SYSCALL PrintF
bcs .9 bcs .9
lda ZPPTR2
sec
adc (ZPPTR2)
sta ZPPTR1
lda ZPPTR2+1
adc #0
sta ZPPTR1+1
>DEC.G P.LookupName+$17 >DEC.G P.LookupName+$17
bne .1 bne .1
@ -224,13 +226,15 @@ CS.QUIT lda hBuf
CS.END CS.END
MSG.NOATK .AZ "AppleTalk Not Loaded." MSG.NOATK .AZ "AppleTalk Not Loaded."
MSG.ATKERR .AZ "AppleTalk Call %h, ERR:%H\r\n" MSG.ATKERR .AZ "AppleTalk Call %h, ERR:%H\r\n"
MSG.GETINFO .AS "Network/Node:$%h%h/$%h\r\n" MSG.GETINFO .AS "Network/Node:%h%h/%h\r\n"
.AS "Bridge : $%h\r\n" .AS "Bridge : %h\r\n"
.AZ "HWID/ROMVER :$%h%h/$%h\r\n" .AZ "HWID/ROMVER :%h%h/%h\r\n"
MSG.MYZONE .AZ "Zone Name :%S\r\n" MSG.MYZONE .AZ "Zone Name :%S\r\n"
SEARCH.STRING >PSTR "=:=@*" SEARCH.STRING >PSTR "="
MSG.DUMP0 .AZ "Net Nod SkT En# Name" >PSTR "="
MSG.DUMP .AZ "%H $%h $%h $%h %S\r\n" >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 .DUMMY
.OR 0 .OR 0

View File

@ -15,6 +15,10 @@ NEW
.OR ZPBIN .OR ZPBIN
ZS.START ZS.START
ZPAtlkParams .BS 2 ZPAtlkParams .BS 2
hCmdBuf .BS 1
hReplyBuf .BS 1
ZPCmdBuf .BS 2
ZPReplyBuf .BS 2
ZPPTR1 .BS 2 ZPPTR1 .BS 2
ZPPTR2 .BS 2 ZPPTR2 .BS 2
ZS.END .ED ZS.END .ED
@ -56,6 +60,9 @@ CS.RUN ldy #S.PS.ARGC
jsr CS.RUN.LookupName jsr CS.RUN.LookupName
bcs .9 bcs .9
jsr CS.RUN.GetParms
bcs .9
jsr CS.RUN.FILogin jsr CS.RUN.FILogin
bcs .9 bcs .9
@ -71,12 +78,9 @@ CS.RUN.USAGE >PUSHW L.MSG.USAGE
sec sec
rts rts
*-------------------------------------- *--------------------------------------
CS.RUN.GetInfo lda #AT.GetInfo CS.RUN.GetInfo >LEA.G P.GetInfo
>STA.G P.GetInfo+1 ldx #AT.GetInfo
jsr CS.RUN.GOATLK
>LEA.G P.GetInfo
jsr A2osX.ATKCALL
bcs .9 bcs .9
>PUSHW L.MSG.GETINFO >PUSHW L.MSG.GETINFO
@ -104,15 +108,47 @@ CS.RUN.GetInfo lda #AT.GetInfo
CS.RUN.LookupName CS.RUN.LookupName
lda #1 lda #1
>SYSCALL ArgV >SYSCALL ArgV
>STYA ZPPTR1
>LEA.G NameBuf
>STYA ZPPTR2
>STYA.G P.LookupName+$08 >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 lda #4
>STA.G P.LookupName+$C RetInt >STA.G P.LookupName+$C RetInt
>STA.G P.LookupName+$D RetCnt >STA.G P.LookupName+$D RetCnt
>LDYAI 64 >LDYAI 64
>STYA.G P.LookupName+$10 BufLen >STYA.G P.LookupName+$10 BufLen
>LDYA.G NameBuf >LDYA.G LookupBuf
>STYA ZPPTR1
>STYA.G P.LookupName+$12 BufPtr >STYA.G P.LookupName+$12 BufPtr
lda #1 lda #1
@ -122,20 +158,49 @@ CS.RUN.LookupName
ldx #AT.LookupName ldx #AT.LookupName
jmp CS.RUN.GOATLK 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 >STYA ZPPTR2
ldy #3 ldy #3
.1 lda (ZPPTR1),y .1 lda (ZPPTR1),y copy NETWORK/NODE/SOCKET
sta (ZPPTR2),y sta (ZPPTR2),y
dey dey
bpl .1 bpl .1
>LDYAI 64 >LDYA.G P.GetParms+$4
>STYA.G P.FILogin+$E >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 >STYA.G P.FILogin+$10
>LEA.G P.FILogin >LEA.G P.FILogin
@ -174,10 +239,26 @@ CS.RUN.GOATLK >STYA ZPAtlkParams
sec sec
.9 rts .9 rts
*-------------------------------------- *--------------------------------------
CS.RUN.PutPtr2 sta (ZPPTR2)
inc ZPPTR2
bne .8
inc ZPPTR2+1
.8 rts
*--------------------------------------
CS.DOEVENT sec CS.DOEVENT sec
rts rts
*-------------------------------------- *--------------------------------------
CS.QUIT clc CS.QUIT lda hReplyBuf
beq .1
>SYSCALL FreeMem
.1 lda hCmdBuf
beq .2
>SYSCALL FreeMem
.2 clc
rts rts
*-------------------------------------- *--------------------------------------
CS.END CS.END
@ -193,10 +274,10 @@ MSG.USAGE .AZ "Usage : ATLOGON <SERVER> [USER] [PASSWORD]"
DS.START DS.START
P.GetInfo .BS $0F P.GetInfo .BS $0F
P.LookupName .BS $17 P.LookupName .BS $17
P.GetParms .BS $07
P.FILogin .BS $19 P.FILogin .BS $19
ZoneBuf .BS 33 NameBuf .BS 36
NameBuf .BS 64 lookupBuf .BS 5+99
ReplyBuf .BS 64
DS.END DS.END
.ED .ED
*-------------------------------------- *--------------------------------------

View File

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

View File

@ -2,20 +2,22 @@ NEW
AUTO 3,1 AUTO 3,1
.LIST OFF .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.POINTER .EQ %01000000
CSH.Q.PPOINTER .EQ %10000000 CSH.Q.PPOINTER .EQ %10000000
CSH.Q.PPPOINTER .EQ %11000000 CSH.Q.PPPOINTER .EQ %11000000
CSH.Q.CONST .EQ %00100000 CSH.Q.PCONST .EQ %00100000
CSH.Q.FUNC .EQ %00010000 CSH.Q.CONST .EQ %00010000
CSH.T.VOID .EQ 0 CSH.Q.FUNC .EQ %00001000
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.OPChars .AS "!~+-*/%=&|^<>" CSH.OPChars .AS "!~+-*/%=&|^<>"
CSH.OPChars.Cnt .EQ *-CSH.OPChars CSH.OPChars.Cnt .EQ *-CSH.OPChars
@ -92,23 +94,24 @@ CSH.KW >PSTR "if"
>PSTR "case" >PSTR "case"
>PSTR "break" >PSTR "break"
>PSTR "continue" >PSTR "continue"
>PSTR "sizeof"
>PSTR "typedef" >PSTR "typedef"
>PSTR "struct" >PSTR "struct"
>PSTR "sizeof" CSH.MTYPES >PSTR "const" ALL
CSH.TYPES >PSTR "void"
>PSTR "float"
>PSTR "signed" char,int,long >PSTR "signed" char,int,long
>PSTR "unsigned" char,int,long >PSTR "unsigned" char,int,long
>PSTR "short" int >PSTR "short" int
CSH.STYPES >PSTR "char" CSH.TYPES >PSTR "void"
>PSTR "char"
>PSTR "int" >PSTR "int"
>PSTR "long" >PSTR "long"
>PSTR "float"
.HS 00 .HS 00
*-------------------------------------- *--------------------------------------
CSH.FTYPES >PSTR "fastcall" CSH.FTYPES >PSTR "fastcall"
* .HS 00 * .HS 00
*-------------------------------------- *--------------------------------------
CSH.TYPESIZE .HS 0001020401020405 VOID,CHAR,INT,LONG,UCHAR,UINT,ULONG,FLOAT.... CSH.TYPESIZE .HS 0001020405010204
*-------------------------------------- *--------------------------------------
CSH.FN CSH.FN
* float cos ( float x ); * float cos ( float x );
@ -142,57 +145,57 @@ CSH.FN
.DA #0 .DA #0
* char getchar ( void ); * char getchar ( void );
>PSTR "getchar" >PSTR "getchar"
.DA #CSH.T.CHAR returned value .DA #CSH.T.UCHAR returned value
.DA #0 .DA #0
* int puts ( const char * str ); * int puts ( const char * str );
>PSTR "puts" >PSTR "puts"
.DA #CSH.T.INT returned value .DA #CSH.T.SINT returned value
.DA #CSH.Q.CONST+CSH.Q.POINTER+CSH.T.CHAR .DA #CSH.Q.CONST+CSH.Q.POINTER+CSH.T.UCHAR
.DA #0 .DA #0
* int execl(const char* cmdline, short int flags); * int execl(const char* cmdline, short int flags);
>PSTR "execl" >PSTR "execl"
.DA #CSH.T.INT returned value .DA #CSH.T.SINT returned value
.DA #CSH.Q.CONST+CSH.Q.POINTER+CSH.T.CHAR .DA #CSH.Q.CONST+CSH.Q.POINTER+CSH.T.UCHAR
.DA #CSH.T.UCHAR .DA #CSH.T.UCHAR
.DA #0 .DA #0
* int printf ( const char * format, ... ); * int printf ( const char * format, ... );
>PSTR "printf" >PSTR "printf"
.DA #CSH.T.INT returned value .DA #CSH.T.SINT returned value
.DA #CSH.Q.CONST+CSH.Q.POINTER+CSH.T.CHAR .DA #CSH.Q.CONST+CSH.Q.POINTER+CSH.T.UCHAR
.DA #CSH.T.VARIADIC .DA #CSH.T.VARIADIC
.DA #0 .DA #0
* int putenv(const char *string); * int putenv(const char *string);
>PSTR "putenv" >PSTR "putenv"
.DA #CSH.T.INT returned value .DA #CSH.T.SINT returned value
.DA #CSH.Q.CONST+CSH.Q.POINTER+CSH.T.CHAR .DA #CSH.Q.CONST+CSH.Q.POINTER+CSH.T.UCHAR
.DA #0 .DA #0
* int setenv(const char *name, const char *value); * int setenv(const char *name, const char *value);
>PSTR "setenv" >PSTR "setenv"
.DA #CSH.T.INT returned value .DA #CSH.T.SINT returned value
.DA #CSH.Q.CONST+CSH.Q.POINTER+CSH.T.CHAR .DA #CSH.Q.CONST+CSH.Q.POINTER+CSH.T.UCHAR
.DA #CSH.Q.CONST+CSH.Q.POINTER+CSH.T.CHAR .DA #CSH.Q.CONST+CSH.Q.POINTER+CSH.T.UCHAR
.DA #0 .DA #0
* char *getenv(const char *name, char *value); * char *getenv(const char *name, char *value);
>PSTR "getenv" >PSTR "getenv"
.DA #CSH.Q.POINTER+CSH.T.CHAR .DA #CSH.Q.POINTER+CSH.T.UCHAR
.DA #CSH.Q.CONST+CSH.Q.POINTER+CSH.T.CHAR .DA #CSH.Q.CONST+CSH.Q.POINTER+CSH.T.UCHAR
.DA #CSH.Q.POINTER+CSH.T.CHAR .DA #CSH.Q.POINTER+CSH.T.UCHAR
.DA #0 .DA #0
* int unsetenv(const char *name); * int unsetenv(const char *name);
>PSTR "unsetenv" >PSTR "unsetenv"
.DA #CSH.T.INT returned value .DA #CSH.T.SINT returned value
.DA #CSH.Q.CONST+CSH.Q.POINTER+CSH.T.CHAR .DA #CSH.Q.CONST+CSH.Q.POINTER+CSH.T.UCHAR
.DA #0 .DA #0
* void md5 (const char* str, char* digest); * void md5 (const char* str, char* digest);
>PSTR "md5" >PSTR "md5"
.DA #CSH.T.VOID .DA #CSH.T.VOID
.DA #CSH.Q.CONST+CSH.Q.POINTER+CSH.T.CHAR .DA #CSH.Q.CONST+CSH.Q.POINTER+CSH.T.UCHAR
.DA #CSH.Q.POINTER+CSH.T.CHAR .DA #CSH.Q.POINTER+CSH.T.UCHAR
.DA #0 .DA #0
* void * malloc ( int size ); * void * malloc ( int size );
>PSTR "malloc" >PSTR "malloc"
.DA #CSH.Q.POINTER+CSH.T.VOID returned value .DA #CSH.Q.POINTER+CSH.T.VOID returned value
.DA #CSH.T.INT .DA #CSH.T.SINT
.DA #0 .DA #0
*-------------------------------------- *--------------------------------------
.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.FN .DA CSH.FN
L.CSH.DIRS .DA CSH.DIRS L.CSH.DIRS .DA CSH.DIRS
L.CSH.KW .DA CSH.KW L.CSH.KW .DA CSH.KW
L.CSH.MTYPES .DA CSH.MTYPES
L.CSH.TYPES .DA CSH.TYPES L.CSH.TYPES .DA CSH.TYPES
L.CSH.STYPES .DA CSH.STYPES
L.CSH.FTYPES .DA CSH.FTYPES L.CSH.FTYPES .DA CSH.FTYPES
J.CSH.DIRS .DA CSH.DIR.DEFINE J.CSH.DIRS .DA CSH.DIR.DEFINE
.DA CSH.DIR.INCLUDE .DA CSH.DIR.INCLUDE
@ -62,20 +62,26 @@ J.CSH.KW .DA CSH.IF
.DA CSH.CASE .DA CSH.CASE
.DA CSH.BREAK .DA CSH.BREAK
.DA CSH.CONTINUE .DA CSH.CONTINUE
.DA CSH.SIZEOF
*--------------------------------------
.DA CSH.TYPEDEF .DA CSH.TYPEDEF
.DA CSH.STRUCT .DA CSH.STRUCT
.DA CSH.SIZEOF *--------------------------------------
.DA CSH.VOID J.CSH.MTYPES .DA CSH.CONST
.DA CSH.FLOAT
.DA CSH.SIGNED .DA CSH.SIGNED
.DA CSH.UNSIGNED .DA CSH.UNSIGNED
.DA CSH.SHORT .DA CSH.SHORT
J.CSH.STYPES .DA CSH.CHAR J.CSH.TYPES .DA CSH.VOID
.DA CSH.CHAR
.DA CSH.INT .DA CSH.INT
.DA CSH.LONG .DA CSH.LONG
.DA CSH.FLOAT
J.CSH.UTYPES .DA CSH.UCHAR J.CSH.UTYPES .DA CSH.UCHAR
.DA CSH.UINT .DA CSH.UINT
.DA CSH.ULONG .DA CSH.ULONG
J.CSH.STYPES .DA CSH.SCHAR
.DA CSH.SINT
.DA CSH.SLONG
J.CSH.KW.END .DA CSH.IF.END J.CSH.KW.END .DA CSH.IF.END
.DA CSH.WHILE.END .DA CSH.WHILE.END
*-------------------------------------- *--------------------------------------

View File

@ -75,7 +75,7 @@ CSH.Quit >LDA.G CSH.hSymbols
.3 lda hInclude .3 lda hInclude
beq .4 beq .4
>SYSCALL FClose >SYSCALL FClose
.4 lda hDefine .4 lda hDefine
@ -204,134 +204,6 @@ CSH.COMMENTS jsr CSH.GetNextChar
sec sec
rts 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 CSH.SkipLine jsr CSH.GetNextChar
bcs .9 bcs .9
cmp #C.CR cmp #C.CR
@ -440,8 +312,8 @@ CSH.AddSymbol >LDA.G CSH.hSymbols
ldx ZPVarType ldx ZPVarType
jsr CSH.GetVarSize CS if pointer jsr CSH.GetVarSize CS if pointer
sta ZPVarSizeOf sta ZPVarSizeOf
* clc / sec * clc / sec
lda ZPCSHData lda ZPCSHData
sta ZPVarDataPtr sta ZPVarDataPtr
@ -473,32 +345,46 @@ CSH.TMISMATCH lda #CSH.E.TMISMATCH
sec sec
rts rts
*-------------------------------------- *--------------------------------------
CSH.AddFunction lda #CSH.Q.FUNC CSH.fDeclaration
lda #CSH.Q.FUNC
tsb ZPVarType tsb ZPVarType
jsr CSH.GetNextCharNB Skip ( jsr CSH.GetNextCharNB Skip (
bcs .9 bcs .9
>DEBUG
.1 cmp #')' .1 cmp #')'
beq .5 beq .5
>LDYA L.CSH.TYPES jsr CSH.GetDeclaration
jsr CSH.LookupID bcs .99
bcs .9
.5 jsr CSH.GetNextCharNB Skip )
.5 jsr CSH.GetNextCharNB Skip )
jsr CSH.SkipLine jsr CSH.SkipLine
clc clc
rts 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 .9 lda #CSH.E.SYNTAX
sec sec
.99 rts .8 >LEAVE
rts
*-------------------------------------- *--------------------------------------
CSH.NewKey >PUSHA CSH.NewKey >PUSHA
>PUSHW ZPInputBufPtr >PUSHW ZPInputBufPtr
@ -860,10 +746,10 @@ CSH.GetChar lda (ZPInputBufPtr)
ply ply
plx plx
bra CSH.GetChar bra CSH.GetChar
.1 lda hInclude .1 lda hInclude
beq .9 beq .9
stz hInclude stz hInclude
phx phx
phy 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 ldx ZPPtr2
bne .23 bne .23
ldx #CSH.T.INT ldx #CSH.T.SINT
stx ZPPtr2 stx ZPPtr2
.23 jsr CSH.GetNumOnStack .23 jsr CSH.GetNumOnStack
@ -194,9 +194,11 @@ CSH.GetNumOnStack
txa txa
beq .99 beq .99
.10 cpx #CSH.T.FLOAT cpx #CSH.T.ULONG+1
bcc .1 bcs .99
bne .99
cpx #CSH.T.FLOAT
bne .1
>PUSHW ZPInputBufPtr >PUSHW ZPInputBufPtr
>PUSHWI ZPInputBufPtr >PUSHWI ZPInputBufPtr
@ -208,8 +210,9 @@ CSH.GetNumOnStack
>PUSHWI ZPInputBufPtr >PUSHWI ZPInputBufPtr
>PUSHBI 10 >PUSHBI 10
phx phx
cpx #CSH.T.UCHAR
bcc .2 bcc .2
>SYSCALL StrToUL >SYSCALL StrToUL
bra .3 bra .3
@ -224,6 +227,7 @@ CSH.GetNumOnStack
cmp #2 cmp #2
bne .4 bne .4
ldy #1 ldy #1
>PULLA >PULLA
sta (pStack),y sta (pStack),y
@ -236,6 +240,7 @@ CSH.GetNumOnStack
inc pStack inc pStack
inc pStack inc pStack
sta (pStack) sta (pStack)
.8 clc .8 clc
.9 rts .9 rts

View File

@ -74,9 +74,9 @@ CSH.SWITCH
CSH.CASE CSH.CASE
CSH.BREAK CSH.BREAK
CSH.CONTINUE CSH.CONTINUE
CSH.TYPEDEF
CSH.SIZEOF CSH.SIZEOF
lda #CSH.E.SYNTAX *--------------------------------------
CSH.TYPEDEF lda #CSH.E.SYNTAX
sec sec
rts rts
*-------------------------------------- *--------------------------------------
@ -108,7 +108,25 @@ CSH.STRUCT >ENTER 4
.99 >LEAVE .99 >LEAVE
rts 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 CSH.SIGNED sec
.HS 90 BCC .HS 90 BCC
@ -119,16 +137,23 @@ CSH.UNSIGNED clc
jsr CSH.CheckSpace jsr CSH.CheckSpace
bcs .9 bcs .9
>LDYA L.CSH.STYPES >LDYA L.CSH.TYPES
jsr CSH.LookupID jsr CSH.LookupID
bcs .9 bcs .9
cpx #2
bcc .9
cpx #8 only char int long allowed
bcs .9
plp plp
bcs .8 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 .9 plp
@ -139,13 +164,13 @@ CSH.UNSIGNED clc
CSH.SHORT jsr CSH.CheckSpace CSH.SHORT jsr CSH.CheckSpace
bcs .9 bcs .9
>LDYA L.CSH.STYPES >LDYA L.CSH.TYPES
jsr CSH.LookupID jsr CSH.LookupID
bcs CSH.UCHAR bcs CSH.UCHAR
cpx #2 cpx #4 only int allowed
beq CSH.CHAR beq CSH.SCHAR
.9 lda #CSH.E.SYNTAX .9 lda #CSH.E.SYNTAX
sec sec
@ -153,16 +178,22 @@ CSH.SHORT jsr CSH.CheckSpace
*-------------------------------------- *--------------------------------------
CSH.VOID ldx #CSH.T.VOID CSH.VOID ldx #CSH.T.VOID
bra CSH.TYPE bra CSH.TYPE
CSH.CHAR ldx #CSH.T.CHAR
CSH.SCHAR ldx #CSH.T.SCHAR
bra CSH.TYPE bra CSH.TYPE
CSH.CHAR
CSH.UCHAR ldx #CSH.T.UCHAR CSH.UCHAR ldx #CSH.T.UCHAR
bra CSH.TYPE bra CSH.TYPE
CSH.INT ldx #CSH.T.INT CSH.INT
CSH.SINT ldx #CSH.T.SINT
bra CSH.TYPE bra CSH.TYPE
CSH.UINT ldx #CSH.T.UINT CSH.UINT ldx #CSH.T.UINT
bra CSH.TYPE bra CSH.TYPE
CSH.LONG ldx #CSH.T.LONG CSH.LONG
CSH.SLONG ldx #CSH.T.SLONG
bra CSH.TYPE bra CSH.TYPE
CSH.ULONG ldx #CSH.T.ULONG CSH.ULONG ldx #CSH.T.ULONG
bra CSH.TYPE bra CSH.TYPE
@ -220,7 +251,7 @@ CSH.TYPE stx ZPVarType
.13 cmp #'(' .13 cmp #'('
bne .9 bne .9
jmp CSH.AddFunction jmp CSH.fDeclaration
.2 jsr CSH.GetNextCharNB Skip = .2 jsr CSH.GetNextCharNB Skip =
bcs .9 bcs .9
@ -274,6 +305,7 @@ CSH.fCall ldx ZPPtr1
cmp #'(' cmp #'('
bne .52 bne .52
jsr CSH.GetNextCharNB skip '(' jsr CSH.GetNextCharNB skip '('
.10 bcs .90 .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 .3 eor #CSH.T.VARIADIC if VARIADIC, don't advance to next arg and assume type = 0
beq .4 beq .4
eor #CSH.T.VARIADIC restore type... eor #CSH.T.VARIADIC restore type...
.4 jsr CSH.ExpEval A=0 if VARIADIC .4 jsr CSH.ExpEval A=0 if VARIADIC
bcs .9 X = Var Type bcs .9 X = Var Type
lda (ZPPtr1) get current arg type lda (ZPPtr1) get current arg type
eor #CSH.T.VARIADIC eor #CSH.T.VARIADIC
bne .5 bne .5
jsr CSH.GetVarSize X = Var Type jsr CSH.GetVarSize X = Var Type
clc make sure pointer only 2 bytes clc make sure pointer only 2 bytes
@ -326,6 +361,7 @@ CSH.fCall ldx ZPPtr1
bne .90 bne .90
lda (ZPPtr1) lda (ZPPtr1)
beq .8 no more arg after ')', exit beq .8 no more arg after ')', exit
eor #CSH.T.VARIADIC eor #CSH.T.VARIADIC
bne .90 missing arg bne .90 missing arg

View File

@ -24,7 +24,8 @@ ZPCSHStack .BS 2
ZPVarID .BS 2 ZPVarID .BS 2
ZPVarDef .EQ * ZPVarDef .EQ *
ZPVarType .BS 2 ZPVarType .BS 1
ZPVarQual .BS 1
ZPVarSizeOf .BS 2 ZPVarSizeOf .BS 2
ZPVarDataPtr .BS 2 ZPVarDataPtr .BS 2
@ -160,7 +161,6 @@ CS.RUN.ARGS inc ArgIndex
bcs .9 bcs .9
>STYA ZPInputBufPtr >STYA ZPInputBufPtr
>STYA.G CSH.Buf For printing error message
txa txa
>STA.G hFileBuf >STA.G hFileBuf
@ -203,8 +203,17 @@ PrintErrMsg lda hDefine
>LDYA.G CSH.SaveDefine >LDYA.G CSH.SaveDefine
>STYA ZPInputBufPtr >STYA ZPInputBufPtr
.10 >LDYA.G CSH.Buf .10 lda hInclude
beq .11
bra .12
.11 >LDA.G hFileBuf
.12 >SYSCALL GetMemPtr
>STYA ZPPtr1 >STYA ZPPtr1
stz ZPPtr2 stz ZPPtr2
stz ZPPtr2+1 Line counter stz ZPPtr2+1 Line counter
@ -255,7 +264,7 @@ PrintErrMsg lda hDefine
lda (pPS),y lda (pPS),y
>PUSHA >PUSHA
>PUSHW L.MSG.ERR >PUSHW L.MSG.ERR
>PUSHW ZPPtr2 Line counter >PUSHW ZPPtr2 Line counter
>PUSHBI 2 >PUSHBI 2
>SYSCALL FPrintF >SYSCALL FPrintF
@ -306,6 +315,7 @@ PrintTraceMsg.3 >PUSHBI '>'
rts rts
*-------------------------------------- *--------------------------------------
.INB usr/src/bin/csh.s.core .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.kw
.INB usr/src/bin/csh.s.exp .INB usr/src/bin/csh.s.exp
.INB usr/src/bin/csh.s.exec .INB usr/src/bin/csh.s.exec

View File

@ -198,7 +198,7 @@ CS.RUN.Format jsr CS.RUN.GetDevStatus
>LDYA L.MSG.OK >LDYA L.MSG.OK
>SYSCALL PutS >SYSCALL PutS
bcs .9 bcs .9
>DEBUGOA
.8 >PUSHB DSSS0000 .8 >PUSHB DSSS0000
>PUSHW pData >PUSHW pData
>SYSCALL Online >SYSCALL Online
@ -314,6 +314,11 @@ CS.RUN.LL >LDA.G DIB+S.DIB.T
CS.RUN.LL.RTS rts CS.RUN.LL.RTS rts
*-------------------------------------- *--------------------------------------
CS.RUN.LL.DISKII CS.RUN.LL.DISKII
jsr CS.RUN.MotorOn
bcs CS.RUN.LL.RTS
>SLEEP
>LDYAI 4096 >LDYAI 4096
>SYSCALL GetMem >SYSCALL GetMem
bcs CS.RUN.LL.RTS bcs CS.RUN.LL.RTS
@ -321,11 +326,6 @@ CS.RUN.LL.DISKII
stx hTrackBuf stx hTrackBuf
>STYA ZPPtr1 >STYA ZPPtr1
jsr CS.RUN.MotorOn
bcs CS.RUN.LL.RTS
>SLEEP
>PUSHB DSSS0000 >PUSHB DSSS0000
>LIBCALL hLIBBLKDEV,LIBBLKDEV.D2Recalibrate >LIBCALL hLIBBLKDEV,LIBBLKDEV.D2Recalibrate
bcs CS.RUN.LL.RTS bcs CS.RUN.LL.RTS
@ -393,7 +393,6 @@ CS.RUN.LL.DISKII
bpl .80 bpl .80
jsr CS.RUN.LL.DISKII.V jsr CS.RUN.LL.DISKII.V
>DEBUGOA
bcs .9 bcs .9
.80 jmp CS.RUN.MotorOff .80 jmp CS.RUN.MotorOff
@ -750,7 +749,7 @@ Disk2.HX .DA 432 BlkCnt
*-------------------------------------- RANA Elite 2 *-------------------------------------- RANA Elite 2
Disk2.DefaultD .DA 640 BlkCnt Disk2.DefaultD .DA 640 BlkCnt
.DA #40 TrkCnt .DA #40 TrkCnt
.DA #2 Stepping .DA #4 Stepping
.DA #193 VolNum .DA #193 VolNum
.DA #$80 AltBB .DA #$80 AltBB
.DA #1 HeadCnt .DA #1 HeadCnt
@ -758,7 +757,7 @@ Disk2.DefaultD .DA 640 BlkCnt
*-------------------------------------- *--------------------------------------
Disk2.XD .DA 640 BlkCnt Disk2.XD .DA 640 BlkCnt
.DA #40 TrkCnt .DA #40 TrkCnt
.DA #2 Stepping .DA #4 Stepping
.DA #193 VolNum .DA #193 VolNum
.DA #$80 AltBB .DA #$80 AltBB
.DA #1 HeadCnt .DA #1 HeadCnt

View File

@ -133,7 +133,7 @@ DHCP.RUN.OK lda #S.IPCFG.STATUS.OK
ldx #0 ldx #0
.2 lda IPCFG+S.IPCFG.IP,x .2 lda IPCFG+S.IPCFG.MASK,x
>PUSHA >PUSHA
inx inx
cpx #4 cpx #4

View File

@ -395,6 +395,7 @@ CS.RUN.PRINT.BDEV
beq .8 beq .8
>LDYA ZPFileName >LDYA ZPFileName
jmp EnterSubDirYA jmp EnterSubDirYA
.8 clc .8 clc
.9 rts .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.GetMyZone .EQ $1A
AT.GetZoneList .EQ $1B AT.GetZoneList .EQ $1B
AT.GetParms .EQ $1C
AT.FILogin .EQ $2B AT.FILogin .EQ $2B
AT.FILoginCont .EQ $2C AT.FILoginCont .EQ $2C
AT.FILogout .EQ $2D AT.FILogout .EQ $2D

View File

@ -1,11 +1,10 @@
NEW NEW
AUTO 3,1 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.SeekTimeF .EQ 65 LIBBLKDEV Track Formatter
IO.D2.SeekTimeB .EQ 65 LIBBLKDEV Boot Block IO.D2.SeekTimeB .EQ 65 LIBBLKDEV Boot Block
IO.D2.SeekTime0 .EQ 65 ProDOS.FX initial0 IO.D2.SeekTimeP .EQ 65 ProDOS.FX initial
IO.D2.SeekTimeP .EQ 30 ProDOS.FX initial
IO.D2.SeekTimeI .EQ 10 ProDOS.FX increment -> until > 128 IO.D2.SeekTimeI .EQ 10 ProDOS.FX increment -> until > 128
*-------------------------------------- *--------------------------------------
IO.D2.Ph0Off .EQ $C080 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.hSID .EQ $1400 K.USR.MAX
S.Table.hFile .EQ $1410 K.USR.MAX S.Table.hFile .EQ $1410 K.USR.MAX
*-------------------------------------- *--------------------------------------
Flt.Table.hPath .EQ $1420 K.FLT.MAX Flt.Table.pftLO .EQ $1420 K.FLT.MAX
Flt.Table.hLib .EQ $1424 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 MAN
SAVE inc/kernel.i SAVE inc/kernel.i

View File

@ -3,8 +3,13 @@ NEW
*-------------------------------------- *--------------------------------------
TCP.PORT.CIFS .EQ 445 TCP.PORT.CIFS .EQ 445
*-------------------------------------- *--------------------------------------
S.SMB.H.PROTO .EQ 0 \xFF 'SMB' S.NETBIOS.TYPE .EQ 0
S.SMB.H.CMD .EQ 4 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.TRANSACTION2 .EQ $32
S.SMB.H.CMD.NEGOTIATE .EQ $72 S.SMB.H.CMD.NEGOTIATE .EQ $72
S.SMB.H.CMD.SESSION.SETUP.ANDX .EQ $73 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.PIDHI .EQ 12
S.SMB.H.SECFEAT .EQ 14 S.SMB.H.SECFEAT .EQ 14
S.SMB.H.RSVD .EQ 22 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.PIDLO .EQ 26
S.SMB.H.UID .EQ 28 S.SMB.H.UID .EQ 28
S.SMB.H.MID .EQ 30 S.SMB.H.MID .EQ 30
* *
S.SMB.H .EQ 32 S.SMB.H .EQ 32
*-------------------------------------- *--------------------------------------

View File

@ -13,12 +13,12 @@ int fastcall putchar(short int);
// int fputc ( hFILE stream , short int character ); // int fputc ( hFILE stream , short int character );
int fastcall puts(const char*); int fastcall puts(const char*);
int fputs (short int, 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 getchar();
short int fastcall getc(short int); short int fastcall getc(short int);
// short int ungetc(short int c, 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 fclose(short int);
// int fread (short int stream, void * ptr, int count ); // int fread (short int stream, void * ptr, int count );
// int fwrite (short int stream, const 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 >PULLB DrvSlt
jsr CheckDiskII jsr CheckDiskII
bcs .9 bcs .9
lda MotorOn lda MotorOn
asl asl
lda #IO.D2.DrvOff lda #IO.D2.DrvOff
adc Slotn0 adc Slotn0
tax tax
lda $C000,x lda $C000,x
clc clc
.9 rts .9 rts
*/-------------------------------------- */--------------------------------------
*\-------------------------------------- *\--------------------------------------
D2Recalibrate >PULLB DrvSlt D2Recalibrate >PULLB DrvSlt
jsr CheckDiskII jsr CheckDiskII
bcs .9 bcs .9
* ldx Slotn0
ldy Slotn0 ldy Slotn0
lda IO.D2.DrvOn,y
nop
nop
lda #168 lda #168
.1 sta IO.D2.Ph0Off,y
dec .1 dec
dec dec
pha pha
and #6 and #6
ora Slotn0 ora Slotn0
phy
plx
tay 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 lda #IO.D2.SeekTimeR
jsr D2.Wait100usecA jsr D2.Wait100usecA
pla pla
bne .1 bne .1
jsr D2.Wait25600usec jsr D2.Wait25600usec
ldx Slotn0 * ldy Slotn0
lda IO.D2.Ph0Off,x lda IO.D2.Ph0Off,y
jsr D2.Wait25600usec jsr D2.Wait25600usec
@ -74,15 +76,15 @@ D2MoveHead >PULLB MoveTo
clc clc
.9 rts .9 rts
D2MoveHead.SEI ldx Slotn0 D2MoveHead.SEI ldx Slotn0
ldy Slotn0 ldy Slotn0
.1 lda MoveFrom .1 lda MoveFrom
cmp MoveTo cmp MoveTo
beq .7 beq .8
jsr .8 sta IO.D2.Ph0Off,x
sta IO.D2.Ph0Off,y
bcs .2 bcs .2
@ -121,28 +123,28 @@ D2MoveHead.SEI ldx Slotn0
and #6 and #6
ora Slotn0 ora Slotn0
* bcc .4 bcc .4
* move out : invert 2 phases * move out : invert 2 phases
* phx phx
* tax tax
* pla pla
.4 tay .4 tay
lda IO.D2.Ph0On,x sta IO.D2.Ph0On,x
lda IO.D2.Ph0On,y sta IO.D2.Ph0On,y
lda #IO.D2.SeekTimeF lda #IO.D2.SeekTimeF
jsr D2.Wait100usecA jsr D2.Wait100usecA
bra .1 bra .1
.7 jsr D2.Wait25600usec .8 jsr D2.Wait25600usec
.8 bit IO.D2.Ph0Off,x sta IO.D2.Ph0Off,x
ldx IO.D2.Ph0Off,y sta IO.D2.Ph0Off,y
rts rts
*-------------------------------------- *--------------------------------------
D2.Wait25600usec D2.Wait25600usec
@ -150,22 +152,22 @@ D2.Wait25600usec
D2.Wait100usecA phx D2.Wait100usecA phx
.1 ldx #19 (2) .1 ldx #20 (2)
.2 dex (2) .2 dex (2)
bne .2 (3) bne .2 (3)
dec (2) dec (2)
bne .1 (3) bne .1 (3)
plx plx
rts (6) rts (6)
*/-------------------------------------- */--------------------------------------
* # D2TrkRead16s * # D2TrkRead16s
* Write a track (16 sectors) * Write a track (16 sectors)
* PUSHB = DSSS0000 * PUSHB = DSSS0000
* PUSHB = TrackNum * 4 : 0->136+ * PUSHB = TrackNum * 4 : 0->136+
* PUSHW = Ptr to 16*256 buffer * PUSHW = Ptr to 16*256 buffer
* ## RETURN VALUE * ## RETURN VALUE
* CC : success, A = VolNum * CC : success, A = VolNum
@ -177,16 +179,16 @@ D2TrkRead16s >PULLW ZPPtr1
jsr CheckDiskII jsr CheckDiskII
bcs .9 bcs .9
lda VolNum lda VolNum
clc clc
.9 rts .9 rts
*/-------------------------------------- */--------------------------------------
* # D2TrkWrite16s * # D2TrkWrite16s
* Write a track (16 sectors) * Write a track (16 sectors)
* PUSHB = DSSS0000 * PUSHB = DSSS0000
* PUSHB = TrackNum * 4 : 0->136+ * PUSHB = TrackNum * 4 : 0->136+
* PUSHW = Ptr to 16*256 buffer * PUSHW = Ptr to 16*256 buffer
* ## RETURN VALUE * ## RETURN VALUE
* CC : success * CC : success
@ -199,53 +201,56 @@ D2TrkWrite16s >PULLW ZPPtr1
jsr CheckDiskII jsr CheckDiskII
bcs .9 bcs .9
>LDYAI TRACK16.LEN+1 >LDYAI TRACK16.LEN+256+1
>SYSCALL2 GetMem >SYSCALL2 GetMem
bcs .9 bcs .9
>STYA ZPPtr2 >STYA ZPPtr2
stx hTrkBuf stx hTrkBuf
stz SectNum stz SectNum
ldy #0 put 256 FF sync bytes for slooooow drives
jsr PutSyncBytePtr2
ldy #TRACK16.GAP1 ldy #TRACK16.GAP1
jsr PutSyncBytePtr2 jsr PutSyncBytePtr2
.1 jsr PutAddrHeadPtr2 .1 jsr PutAddrHeadPtr2
jsr HeaderCheckSum jsr HeaderCheckSum
ldy #3 ldy #3
.2 lda Checksum,y .2 lda Checksum,y
jsr PutByte44Ptr2 jsr PutByte44Ptr2
dey dey
bpl .2 bpl .2
jsr PutTailPtr2 jsr PutTailPtr2
ldy #TRACK16.GAP2 ldy #TRACK16.GAP2
jsr PutSyncBytePtr2 jsr PutSyncBytePtr2
jsr PutDataHeadPtr2 jsr PutDataHeadPtr2
jsr PutData jsr PutData
jsr PutTailPtr2 jsr PutTailPtr2
ldy #TRACK16.GAP3 ldy #TRACK16.GAP3
jsr PutSyncBytePtr2 jsr PutSyncBytePtr2
inc ZPPtr1+1 inc ZPPtr1+1
inc SectNum inc SectNum
lda SectNum lda SectNum
cmp #16 cmp #16
bne .1 bne .1
lda #0 lda #0
sta (ZPPtr2) sta (ZPPtr2)
jsr D2WriteTrackPtr2 jsr D2WriteTrackPtr2
php php
pha pha
@ -271,7 +276,7 @@ D2TrkReadNIB
*\-------------------------------------- *\--------------------------------------
D2TrkWriteNIB >PULLW ZPPtr1 D2TrkWriteNIB >PULLW ZPPtr1
>PULLB DrvSlt >PULLB DrvSlt
jsr CheckDiskII was it a DISK II ? jsr CheckDiskII was it a DISK II ?
bcs .9 bcs .9
@ -289,7 +294,7 @@ CheckDiskII pha
ora #$C0 make Cn ora #$C0 make Cn
sta ZPPtr3+1 sta ZPPtr3+1
stz ZPPtr3 stz ZPPtr3
ldx #3 4 bytes to check ldx #3 4 bytes to check
.1 ldy DiskII.OFS,x .1 ldy DiskII.OFS,x
@ -300,7 +305,7 @@ CheckDiskII pha
dex dex
bpl .1 bpl .1
pla all bytes match, Disk II pla all bytes match, Disk II
asl asl
lda #0 lda #0
@ -333,7 +338,10 @@ DrvSpinCheck ldy #0
lda IO.D2.RData,x lda IO.D2.RData,x
.1 cmp IO.D2.RData,x .1 pha
pla
cmp IO.D2.RData,x
bne .8 spinning bne .8 spinning
dey dey
@ -395,36 +403,36 @@ PutData stz Checksum
clc clc
adc #86 adc #86
bcc .1 bcc .1
iny iny
clc clc
.1 sta ZPPtr3 .1 sta ZPPtr3
sty ZPPtr3+1 sty ZPPtr3+1
adc #86 adc #86
bcc .2 bcc .2
iny iny
.2 sta ZPPtr4 .2 sta ZPPtr4
sty ZPPtr4+1 sty ZPPtr4+1
ldy #85 ldy #85
.3 lda (ZPPtr1),y .3 lda (ZPPtr1),y
and #3 and #3
tax tax
lda D2.XX000000,x lda D2.XX000000,x
pha pha
lda (ZPPtr3),y lda (ZPPtr3),y
and #3 and #3
tax tax
pla pla
ora D2.00XX0000,x ora D2.00XX0000,x
pha pha
lda (ZPPtr4),y lda (ZPPtr4),y
and #3 and #3
tax tax
@ -432,37 +440,37 @@ PutData stz Checksum
ora D2.0000XX00,x ora D2.0000XX00,x
tax tax
eor Checksum eor Checksum
sta Checksum sta Checksum
lda FC2Nib,x lda FC2Nib,x
jsr PutBytePtr2 jsr PutBytePtr2
dey dey
bpl .3 bpl .3
ldy #0 ldy #0
.4 lda (ZPPtr1),y .4 lda (ZPPtr1),y
and #$FC and #$FC
tax tax
eor Checksum eor Checksum
sta Checksum sta Checksum
lda FC2Nib,x lda FC2Nib,x
jsr PutBytePtr2 jsr PutBytePtr2
iny iny
bne .4 bne .4
ldx Checksum ldx Checksum
lda FC2Nib,x lda FC2Nib,x
jsr PutBytePtr2 jsr PutBytePtr2
rts rts
*-------------------------------------- *--------------------------------------
PutByte44Ptr2 pha PutByte44Ptr2 pha
@ -470,14 +478,14 @@ PutByte44Ptr2 pha
jsr .1 jsr .1
pla pla
.1 ora #$AA .1 ora #$AA
*-------------------------------------- *--------------------------------------
PutBytePtr2 sta (ZPPtr2) PutBytePtr2 sta (ZPPtr2)
inc ZPPtr2 inc ZPPtr2
bne .8 bne .8
inc ZPPtr2+1 inc ZPPtr2+1
.8 rts .8 rts
*-------------------------------------- *--------------------------------------
D2WriteTrackPtr2 D2WriteTrackPtr2
lda hTrkBuf lda hTrkBuf
@ -488,16 +496,16 @@ D2WriteTrackPtr2
sei sei
ldy #TrkWriter.Size ldy #TrkWriter.Size
.1 lda TrkWriter-1,y .1 lda TrkWriter-1,y
sta $1ff,y sta $1ff,y
dey dey
bne .1 bne .1
ldx Slotn0 ldx Slotn0
jsr $200 jsr $200
plp plp
rts rts
*-------------------------------------- *--------------------------------------

View File

@ -13,16 +13,16 @@ NEW
*-------------------------------------- *--------------------------------------
* 300rpm = 5rps = 200000us / 4us = 50000 bits MAX * 300rpm = 5rps = 200000us / 4us = 50000 bits MAX
*-------------------------------------- *--------------------------------------
TRACK16.LEN .EQ 6400 TRACK16.LEN .EQ 6240
*-------------------------------------- *--------------------------------------
TRACK16.GAP1 .EQ 80 800 bits TRACK16.GAP1 .EQ 80 800 bits
* 16 * ( * 16 * (
*Address field = D5AA96 + 4x2 + DEAAEB = 14 112 bits *Address field = D5AA96 + 4x2 + DEAAEB = 14 112 bits
TRACK16.GAP2 .EQ 6 60 bits TRACK16.GAP2 .EQ 6 60 bits
*Data field = D5AAAD + 342 + CS + DEAAEB = 349 2792 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 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 .OR $2000
.TF lib/libpak .TF lib/libpak
*-------------------------------------- *--------------------------------------
.INB INC/MACROS.I .INB inc/macros.i
.INB INC/A2OSX.I .INB inc/a2osx.i
.INB INC/LIBPAK.I .INB inc/libpak.i
*-------------------------------------- *--------------------------------------
STATS .EQ 0 STATS .EQ 0
*-------------------------------------- *--------------------------------------
@ -39,7 +39,6 @@ CS.START cld
L.MSG.Stats .DA MSG.Stats L.MSG.Stats .DA MSG.Stats
L.MSG.TopBytes .DA MSG.TopBytes L.MSG.TopBytes .DA MSG.TopBytes
.FIN .FIN
L.MSG.BL .DA MSG.BL
.DA 0 .DA 0
*-------------------------------------- *--------------------------------------
LIB.LOAD 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.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.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 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 Pak.SrcPtr .BS 2
@ -708,5 +706,5 @@ Pak.Shnk .BS S.PAKSHNK
Pak.Stat .BS S.PAKSTAT Pak.Stat .BS S.PAKSTAT
*-------------------------------------- *--------------------------------------
MAN MAN
SAVE USR/SRC/LIB/LIBPAK.S SAVE usr/src/lib/libpak.s
ASM ASM

View File

@ -221,7 +221,7 @@ SKT.connect.SEQPKT
bcs .99 bcs .99
lda #S.SOCKET.TCP.S.SYNSENT lda #S.SOCKET.TCP.S.SYNSENT
jsr SKT.StoreTCB.S jmp SKT.StoreTCB.S
.99 lda #ERR.SKT.NOCONN .99 lda #ERR.SKT.NOCONN
sec sec
@ -1045,14 +1045,14 @@ SKT.CheckStream lda #S.SOCKET.T.STREAM
SKT.CheckTCP ldy #S.SOCKET.O SKT.CheckTCP ldy #S.SOCKET.O
lda (ZPPtrSKT),y lda (ZPPtrSKT),y
and #S.SOCKET.O.ACCEPTCONN and #S.SOCKET.O.ACCEPTCONN
bne .99 bne SKT.BAD
ldy #S.SOCKET.TCP.S ldy #S.SOCKET.TCP.S
lda (ZPPtrSKT),y lda (ZPPtrSKT),y
cmp #S.SOCKET.TCP.S.ESTBLSH cmp #S.SOCKET.TCP.S.ESTBLSH
beq .8 beq .8
bcc .90 bcc .9
lda #MLI.E.IO lda #MLI.E.IO
* sec * sec
@ -1062,11 +1062,10 @@ SKT.CheckTCP ldy #S.SOCKET.O
clc clc
rts rts
.90 lda #ERR.SKT.NOCONN .9 lda #ERR.SKT.NOCONN
sec sec
rts rts
.99
SKT.BAD lda #ERR.SKT.BAD SKT.BAD lda #ERR.SKT.BAD
sec sec
rts rts
@ -1308,22 +1307,26 @@ SKT.NewTCB ldx #S.SOCKET.TCP.INSEQNUM
.9 rts .9 rts
*-------------------------------------- *--------------------------------------
SKT.GetTCB ldy #S.SOCKET.TCP.INSEQNUM SKT.GetTCB ldy #S.SOCKET.TCP.INSEQNUM
.1 lda (ZPPtrSKT),y .1 lda (ZPPtrSKT),y
sta SKT.Cache,y sta SKT.Cache,y
iny iny
cpy #S.SOCKET.TCP cpy #S.SOCKET.TCP
bne .1 bne .1
rts rts
*-------------------------------------- *--------------------------------------
SKT.StoreTCB.S ldy #S.SOCKET.TCP.S SKT.StoreTCB.S ldy #S.SOCKET.TCP.S
sta (ZPPtrSKT),y sta (ZPPtrSKT),y
SKT.StoreTCB ldy #S.SOCKET.TCP.INSEQNUM SKT.StoreTCB ldy #S.SOCKET.TCP.INSEQNUM
.1 lda SKT.Cache,y .1 lda SKT.Cache,y
sta (ZPPtrSKT),y sta (ZPPtrSKT),y
iny iny
cpy #S.SOCKET.TCP cpy #S.SOCKET.TCP
bne .1 bne .1
clc clc
rts rts
*-------------------------------------- *--------------------------------------

View File

@ -1,6 +1,6 @@
NEW NEW
AUTO 3,1 AUTO 3,1
.LIST OFF .LIST OFF
*-------------------------------------- *--------------------------------------
TCP.IN jsr FRM.GetTargetSKT.TCPUDP TCP.IN jsr FRM.GetTargetSKT.TCPUDP
jsr SKT.FindMatchingLocRem jsr SKT.FindMatchingLocRem
@ -20,7 +20,7 @@ TCP.IN jsr FRM.GetTargetSKT.TCPUDP
TCP.IN.RST lda #S.SOCKET.TCP.S.CLWAIT TCP.IN.RST lda #S.SOCKET.TCP.S.CLWAIT
ldy #S.SOCKET.TCP.S ldy #S.SOCKET.TCP.S
sta (ZPPtrSKT),y sta (ZPPtrSKT),y
* lda SKT.TABLE,x * lda SKT.TABLE,x
* jsr SKT.shutdown * jsr SKT.shutdown
*-------------------------------------- *--------------------------------------
@ -39,7 +39,7 @@ TCP.IN.JMP.LISTEN
bcs TCP.IN.JMP.DISCARD bcs TCP.IN.JMP.DISCARD
jsr SKT.AddToQueueA Queued successfully ? 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 jsr ARP.AddFromFrameInPtr
lda ZPTmpPtr1 lda ZPTmpPtr1
@ -64,11 +64,11 @@ TCP.IN.JMP.LISTEN
lda #S.SOCKET.TCP.S.SYNRCVD lda #S.SOCKET.TCP.S.SYNRCVD
jmp SKT.StoreTCB.S jmp SKT.StoreTCB.S
.9 rts .9 rts
*-------------------------------------- *--------------------------------------
TCP.IN.JMP.SYNSENT 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 lda (ZPFrameInPtr),y
and #S.TCP.OPTIONS.SYN+S.TCP.OPTIONS.ACK and #S.TCP.OPTIONS.SYN+S.TCP.OPTIONS.ACK
cmp #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 .1 lda SKT.Cache+S.SOCKET.TCP.OUTNEXTSEQ,x
adc #0 adc #0
sta SKT.Cache+S.SOCKET.TCP.OUTNEXTSEQ,x sta SKT.Cache+S.SOCKET.TCP.OUTNEXTSEQ,x
eor (ZPFrameInPtr),y eor (ZPFrameInPtr),y
bne .9 bne .9
dey dey
@ -108,7 +108,7 @@ TCP.IN.JMP.SYNRCVD
cmp #S.TCP.OPTIONS.ACK cmp #S.TCP.OPTIONS.ACK
bne .8 bne .8
jsr SKT.GetTCB jsr SKT.GetTCB
ldx #3 ldx #3
ldy #S.TCP.ACKNUM+3 ldy #S.TCP.ACKNUM+3
@ -125,7 +125,7 @@ TCP.IN.JMP.SYNRCVD
bpl .1 bpl .1
lda #S.SOCKET.TCP.S.ESTBLSH lda #S.SOCKET.TCP.S.ESTBLSH
jmp SKT.StoreTCB.S jmp SKT.StoreTCB.S
.8 clc .8 clc
.9 rts .9 rts
*-------------------------------------- *--------------------------------------
@ -136,7 +136,7 @@ TCP.IN.JMP.ESTBLSH
lda (ZPFrameInPtr),y lda (ZPFrameInPtr),y
and #S.TCP.OPTIONS.ACK Remote side ACKed data ? and #S.TCP.OPTIONS.ACK Remote side ACKed data ?
beq .4 beq .4
* Ack sent data * Ack sent data
ldy #S.TCP.ACKNUM+3 Get new ACK number from FrameIn... ldy #S.TCP.ACKNUM+3 Get new ACK number from FrameIn...
ldx #3 Substract old ACK from socket ldx #3 Substract old ACK from socket
@ -197,7 +197,7 @@ TCP.IN.JMP.ESTBLSH
.5 lda (ZPFrameInPtr),y .5 lda (ZPFrameInPtr),y
eor SKT.Cache+S.SOCKET.TCP.INSEQNUM,x eor SKT.Cache+S.SOCKET.TCP.INSEQNUM,x
bne .90 Missed a frame..... bne .90 Missed a frame.....
dey dey
dex dex
bpl .5 bpl .5
@ -209,9 +209,9 @@ TCP.IN.JMP.ESTBLSH
jsr SKT.AddDataToSktIn yes, queue data if there is room for.... jsr SKT.AddDataToSktIn yes, queue data if there is room for....
bcc .6 bcc .6
rts rts
.52 lda hFrameIn .52 lda hFrameIn
jsr SKT.AddToQueueA jsr SKT.AddToQueueA
bcs .99 bcs .99
@ -222,7 +222,7 @@ TCP.IN.JMP.ESTBLSH
ldy ZPDataInLen+1 ldy ZPDataInLen+1
ldx #S.SOCKET.TCP.INSEQNUM ldx #S.SOCKET.TCP.INSEQNUM
jsr TCP.AddAYToSktCacheAtX jsr TCP.AddAYToSktCacheAtX
jsr SKT.StoreTCB update socket jsr SKT.StoreTCB update socket
jsr TCP.SetSocketTCPO.ACK ...and ack data jsr TCP.SetSocketTCPO.ACK ...and ack data
@ -235,7 +235,7 @@ TCP.IN.JMP.ESTBLSH
jsr SKT.StoreTCB update socket jsr SKT.StoreTCB update socket
lda #S.TCP.OPTIONS.FIN+S.TCP.OPTIONS.ACK 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 lda #S.SOCKET.TCP.S.LASTACK
jmp SKT.StoreTCB.S jmp SKT.StoreTCB.S
@ -243,16 +243,16 @@ TCP.IN.JMP.ESTBLSH
.8 ldy #S.SOCKET.TCP.O .8 ldy #S.SOCKET.TCP.O
lda (ZPPtrSKT),y lda (ZPPtrSKT),y
bne .91 bne .91
.80 clc .80 clc
.99 rts .99 rts
.90 lda #S.TCP.OPTIONS.ACK Send 3 ACK for last SEQ number .90 lda #S.TCP.OPTIONS.ACK Send 3 ACK for last SEQ number
jsr TCP.OUT.SendOptA jsr TCP.OUT.SendOptA
lda #S.TCP.OPTIONS.ACK lda #S.TCP.OPTIONS.ACK
jsr TCP.OUT.SendOptA jsr TCP.OUT.SendOptA
lda #S.TCP.OPTIONS.ACK lda #S.TCP.OPTIONS.ACK
.91 jmp TCP.OUT.SendOptA .91 jmp TCP.OUT.SendOptA
*-------------------------------------- *--------------------------------------
@ -279,7 +279,7 @@ TCP.IN.JMP.FINWT1
bne .1 bne .1
lda #S.TCP.OPTIONS.FIN+S.TCP.OPTIONS.ACK 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 bcs TCP.IN.JMP.TIMEWT.RTS
lda #S.SOCKET.TCP.S.FINWT2 lda #S.SOCKET.TCP.S.FINWT2
@ -288,9 +288,9 @@ TCP.IN.JMP.FINWT1
.1 jsr TCP.IN.ACKTheFIN FIN/ACK .1 jsr TCP.IN.ACKTheFIN FIN/ACK
lda #S.TCP.OPTIONS.FIN+S.TCP.OPTIONS.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 bcs TCP.IN.JMP.TIMEWT.RTS
lda #S.SOCKET.TCP.S.LASTACK lda #S.SOCKET.TCP.S.LASTACK
jmp SKT.StoreTCB.S jmp SKT.StoreTCB.S
*-------------------------------------- *--------------------------------------
@ -306,9 +306,9 @@ TCP.IN.JMP.FINWT2
lda #S.TCP.OPTIONS.ACK 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 bcs TCP.IN.JMP.TIMEWT.RTS
lda #S.SOCKET.TCP.S.TIMEWT lda #S.SOCKET.TCP.S.TIMEWT
jmp SKT.StoreTCB.S jmp SKT.StoreTCB.S
*-------------------------------------- *--------------------------------------
@ -346,7 +346,7 @@ TCP.IN.ACKTheSYN
*-------------------------------------- *--------------------------------------
TCP.IN.ACKTheFIN TCP.IN.ACKTheFIN
ldx #3 ldx #3
.1 inc SKT.Cache+S.SOCKET.TCP.INSEQNUM,x .1 inc SKT.Cache+S.SOCKET.TCP.INSEQNUM,x
bne .8 bne .8
dex dex
@ -448,13 +448,13 @@ TCP.SENDCLOSE ldx #0
*-------------------------------------- *--------------------------------------
.4 cpx #S.SOCKET.T.SEQPKT .4 cpx #S.SOCKET.T.SEQPKT
bne .6 bne .6
.5 jsr SKT.GetFromQueue .5 jsr SKT.GetFromQueue
bcs .7 bcs .7
>SYSCALL2 FreeMem >SYSCALL2 FreeMem
bra .5 bra .5
.6 ldy #S.SOCKET.SQ.hInMem .6 ldy #S.SOCKET.SQ.hInMem
jsr TCP.SENDCLOSE.PIPE jsr TCP.SENDCLOSE.PIPE
@ -472,7 +472,9 @@ TCP.SENDCLOSE ldx #0
cpx #K.SKTTABLE.SIZE cpx #K.SKTTABLE.SIZE
bne .1 bne .1
clc
rts rts
TCP.SENDCLOSE.PIPE TCP.SENDCLOSE.PIPE
lda (ZPPtrSKT),y lda (ZPPtrSKT),y
beq .8 beq .8
@ -487,11 +489,11 @@ TCP.SENDCLOSE.PIPE
TCP.OUT lda SKT.Cache+S.SOCKET.TCP.OUTTOSEND+1 TCP.OUT lda SKT.Cache+S.SOCKET.TCP.OUTTOSEND+1
ldy SKT.Cache+S.SOCKET.TCP.OUTTOSEND ldy SKT.Cache+S.SOCKET.TCP.OUTTOSEND
bne .1 bne .1
tax tax
bne .1 bne .1
* Y,A=0 : no data to send * Y,A=0 : no data to send
ldy #S.SOCKET.TCP.O ldy #S.SOCKET.TCP.O
lda (ZPPtrSKT),y lda (ZPPtrSKT),y
bne TCP.OUT.SendOptA a least an option... bne TCP.OUT.SendOptA a least an option...
@ -553,7 +555,7 @@ TCP.OUT.Send ldy #S.TCP.OPTIONS
sta (ZPFrameOutPtr),y sta (ZPFrameOutPtr),y
bit #S.TCP.OPTIONS.ACK bit #S.TCP.OPTIONS.ACK
beq .2 beq .2
ldx #3 ldx #3
ldy #S.TCP.ACKNUM+3 ldy #S.TCP.ACKNUM+3

View File

@ -227,17 +227,18 @@ INCOMING sta hFrameIn
iny iny
lda (ZPFrameInPtr),y lda (ZPFrameInPtr),y
cmp #S.ETH.EII.TYPE.ARP cmp #S.ETH.EII.TYPE.ARP
beq .2 bne .2
jmp ARP.IN
cmp #S.ETH.EII.TYPE.IP .2 cmp #S.ETH.EII.TYPE.IP
beq .3 bne .9
.9 sec jmp IP.IN
.9 lda #MLI.E.EOF
sec
rts rts
.2 jmp ARP.IN
.3 jmp IP.IN
*-------------------------------------- *--------------------------------------
* A = S.EVT.F * A = S.EVT.F
* Expire = every sec * Expire = every sec
@ -248,6 +249,7 @@ PULSE and #S.EVT.F.T1SEC
jsr ARP.EXPIRE every sec jsr ARP.EXPIRE every sec
jsr DNS.EXPIRE jsr DNS.EXPIRE
.1 jsr FRM.RETRY every 100ms .1 jsr FRM.RETRY every 100ms
jsr DNS.POLL jsr DNS.POLL
jmp TCP.SENDCLOSE 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 lsr
tax tax
jsr XDOS.DevCall.Jmp jsr XDOS.DevCall.Jmp
bit CLRC8ROM RELEASE $C800-$CFFF ROM space
bcs .9 bcs .9
plp plp

View File

@ -23,6 +23,8 @@ XRW.START cld $D8 to flag language card bank 1 (main)
.10 sta XRW.SeekTime .10 sta XRW.SeekTime
stz XRW.montimel
pla pla
and #$7F mask off high bit. and #$7F mask off high bit.
@ -57,7 +59,7 @@ L59BD lda bloknml
ldy #$05 ldy #$05
.1 asl .1 asl
rol XRW.ReqTrack rol XRW.ReqTrack
dey dey
bne .1 bne .1
@ -181,73 +183,6 @@ XRW.E.EXIT ldx A2L
bit IO.D2.DrvOff,x turn off bit IO.D2.DrvOff,x turn off
rts 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) * preniblize subroutine (16 sector format)
* *
* converts 256 bytes of user data in (buf) into 6 bit nibls in nbuf2. * 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 stx wrefd5+1
rts 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) * write subroutine (16 sector format)
* *
* writes data from nbuf1 and buf. first nbuf2, high to low then direct * 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 .LIST ON
XRW.Write lda IO.D2.ReadProt,x PREWRITE MODE XRW.Write lda IO.D2.ReadProt,x PREWRITE MODE
.LIST OFF .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 sta pcl
lda #$FF Self Sync Byte lda #$FF Self Sync Byte
@ -520,10 +521,12 @@ wrefd5 ldx #$60 (2) restore slot. warning: modified by prenib
clc (2) clc (2)
lda #$FF (2) jsr XRW.Write.RTS (6+6)
nop (2)
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 XRW.ReadMode lda IO.D2.ReadMode,x out of write mode
lda IO.D2.WShift,x to read 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) XRW.Write.RTS rts (6)
.LIST OFF .LIST OFF
*-------------------------------------- *--------------------------------------
* delays a specified number of 100 usec intervals for motor timing. XRW.Reset ldx A2L
* 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)
.2 dex (2) lda IO.D2.Ph0Off,x
bne .2 (3) lda IO.D2.Ph1Off,x
lda IO.D2.Ph2Off,x
lda IO.D2.Ph3Off,x
inc XRW.montimel (6) jmp XRW.ReadMode
bne .3 (3)
inc XRW.montimeh (6)
.3 dec (2)
bne .1 (3)
plx
rts
*-------------------------------------- *--------------------------------------
* read subroutine (16-sector format) * read subroutine (16-sector format)
* *
@ -746,16 +722,15 @@ XRW.Seek ldx XRW.UnitIndex
pla pla
sta XRW.D2Trk-1,x will be current track at the end sta XRW.D2Trk-1,x will be current track at the end
stz XRW.SeekCnt
ldx A2L ldx A2L
ldy A2L ldy A2L
.1 lda XRW.CurrentQTrack .1 lda XRW.CurrentQTrack
cmp XRW.TargetQTrack cmp XRW.TargetQTrack
beq .7 beq .8
jsr .8 sta IO.D2.Ph0Off,x
sta IO.D2.Ph0Off,y
bcs .2 bcs .2
@ -794,37 +769,53 @@ XRW.Seek ldx XRW.UnitIndex
and #6 and #6
ora A2L ora A2L
* bcc .4 bcc .4
* move out : invert 2 phases * move out : invert 2 phases
* phx phx
* tax tax
* pla pla
.4 tay .4 tay
lda IO.D2.Ph0On,x sta IO.D2.Ph0On,x
lda IO.D2.Ph0On,y sta IO.D2.Ph0On,y
jsr XRW.WaitSeekTime jsr XRW.WaitSeekTime
bra .1 bra .1
.7 jsr XRW.Wait25600usec .8 jsr XRW.Wait25600usec
.8 bit IO.D2.Ph0Off,x sta IO.D2.Ph0Off,x
ldx IO.D2.Ph0Off,y sta IO.D2.Ph0Off,y
rts 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 .2 dex (2)
lda IO.D2.Ph1Off,x bne .2 (3)
lda IO.D2.Ph2Off,x
lda IO.D2.Ph3Off,x
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 XRW.Trk2Qtrk asl x2
sta .1+1 sta .1+1
@ -1003,6 +994,7 @@ XRW.SeekTime .HS 00
.HS FFFFFF .HS FFFFFF
.HS 7C .HS 7C
* .HS FFFF * .HS FFFF
XRW.MoveCnt .EQ *
XRW.Temp4x4 .HS 00 XRW.Temp4x4 .HS 00
XRW.CheckSum .HS 00 used for address header cksum XRW.CheckSum .HS 00 used for address header cksum
.HS 8084 .HS 8084
@ -1016,9 +1008,7 @@ XRW.CurrentQTrack .HS 00
* .HS FF * .HS FF
XRW.TargetQTrack .HS 00 XRW.TargetQTrack .HS 00
.HS B0B4B8BCC0C4C8 .HS B0B4B8BCC0C4C8
* .HS FFFF .HS FFFF
.HS FF
XRW.SeekCnt .HS 00
.HS CCD0D4D8DCE0 .HS CCD0D4D8DCE0
XRW.bWrite .HS 00 XRW.bWrite .HS 00
.HS E4E8ECF0F4F8FC .HS E4E8ECF0F4F8FC

View File

@ -11,8 +11,9 @@ NEW
.INB inc/eth.i .INB inc/eth.i
.INB inc/libtcpip.i .INB inc/libtcpip.i
.INB inc/net.smb.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 * Zero Page Segment, up to 32 bytes
*-------------------------------------- *--------------------------------------
@ -20,11 +21,15 @@ TIMEOUT.MAX .EQ 100 20 sec.
.OR ZPBIN .OR ZPBIN
ZS.START ZS.START
ZPIPCfgPtr .BS 2 ZPIPCfgPtr .BS 2
hSocket .BS 1
hResp .BS 1 hResp .BS 1
ZPRespPtr .BS 2 ZPRespPtr .BS 2
TimeOut .BS 1 TimeOut .BS 1
ZS.END hSMBContext .BS 1
.ED hMount .BS 1
ZPPtr1 .BS 2
ZPPtr2 .BS 2
ZS.END .ED
*-------------------------------------- *--------------------------------------
* File Header (16 Bytes) * File Header (16 Bytes)
*-------------------------------------- *--------------------------------------
@ -44,9 +49,10 @@ CS.START cld
*-------------------------------------- *--------------------------------------
.1 .DA CS.INIT .1 .DA CS.INIT
.DA CS.RUN .DA CS.RUN
.DA CS.DOEVENT .DA CS.DOEVENT
.DA CS.QUIT .DA CS.QUIT
L.LIBTCPIP .DA LIBTCPIP L.LIBTCPIP .DA LIBTCPIP
L.LIBCIFS .DA LIBCIFS
L.MSG.TCPIPERR .DA MSG.TCPIPERR L.MSG.TCPIPERR .DA MSG.TCPIPERR
L.MSG.USAGE .DA MSG.USAGE L.MSG.USAGE .DA MSG.USAGE
L.MSG.UNKNOWN .DA MSG.UNKNOWN L.MSG.UNKNOWN .DA MSG.UNKNOWN
@ -54,6 +60,7 @@ L.MSG.SESSION .DA MSG.SESSION
L.SMB.NegReq .DA SMB.NegReq L.SMB.NegReq .DA SMB.NegReq
L.SMB.SessSetup .DA SMB.SessSetup L.SMB.SessSetup .DA SMB.SessSetup
L.SMB.TreeConnReq .DA SMB.TreeConnReq L.SMB.TreeConnReq .DA SMB.TreeConnReq
L.SMB.QueryPathInfo .DA SMB.QueryPathInfo
L.SMB.FindFirstReq .DA SMB.FindFirstReq L.SMB.FindFirstReq .DA SMB.FindFirstReq
.DA 0 .DA 0
*-------------------------------------- *--------------------------------------
@ -63,17 +70,84 @@ L.SMB.FindFirstReq .DA SMB.FindFirstReq
CS.INIT >LDYA L.LIBTCPIP CS.INIT >LDYA L.LIBTCPIP
>SYSCALL LoadLib >SYSCALL LoadLib
bcs .9 bcs .9
sta hLIBTCPIP sta hLIBTCPIP
clc >LDYA L.LIBCIFS
.9 rts >SYSCALL LoadLib
bcs .9
sta hLIBCIFS
* clc
.9
CS.INIT.RTS rts
*-------------------------------------- *--------------------------------------
* Called until exit with CS * Called until exit with CS
* if RUN exits with CC, RUN entered again * if RUN exits with CC, RUN entered again
*-------------------------------------- *--------------------------------------
CS.RUN >LDA.G hSocket CS.RUN lda hSocket
bne .8 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 ? >LIBCALL hLIBTCPIP,LIBTCPIP.GETCFG is TCPIP loaded ?
bcs .9 bcs .9
@ -83,67 +157,66 @@ CS.RUN >LDA.G hSocket
>LDYA L.MSG.TCPIPERR >LDYA L.MSG.TCPIPERR
>SYSCALL PutS >SYSCALL PutS
lda #E.SYN lda #E.SYN
sec 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 .9 rts
.90 >LDYA L.MSG.USAGE .1 lda #AF.INET
>SYSCALL PutS >STA.G SA.LOCAL
lda #E.SYN >STA.G SA.REMOTE
sec
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 rts
*-------------------------------------- *--------------------------------------
CS.RUN.CheckArgs CS.RUN.CheckArgs
ldy #S.PS.ARGC ldy #S.PS.ARGC
lda (pPS),y lda (pPS),y
cmp #3 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 sta TimeOut
.1 >PUSHEA.G SA.REMOTE+S.SOCKADDR.ADDR .2 >PUSHEA.G SA.REMOTE+S.SOCKADDR.ADDR
lda #1 lda #1
>SYSCALL ArgV >SYSCALL ArgV
>PUSHYA >PUSHYA
>LIBCALL hLIBTCPIP,LIBTCPIP.HST.GetByName >LIBCALL hLIBTCPIP,LIBTCPIP.HST.GetByName
bcc .2 bcc .3
>SLEEP >SLEEP
lda TimeOut lda TimeOut
bne .1 bne .2
>PUSHW L.MSG.UNKNOWN >PUSHW L.MSG.UNKNOWN
lda #1 lda #1
>SYSCALL ArgV >SYSCALL ArgV
@ -151,32 +224,10 @@ CS.RUN.CheckArgs
>PUSHBI 2 >PUSHBI 2
>SYSCALL PrintF >SYSCALL PrintF
sec sec
.9 rts 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
.3 lda #2
>SYSCALL ArgV
clc clc
rts rts
@ -186,16 +237,43 @@ CS.RUN.Connect >PUSHBI 0 no protocol
>LIBCALL hLIBTCPIP,LIBTCPIP.Socket >LIBCALL hLIBTCPIP,LIBTCPIP.Socket
bcs .9 bcs .9
>STA.G hSocket sta hSocket
>PUSHEA.G SA.LOCAL >PUSHEA.G SA.LOCAL
>LDA.G hSocket lda hSocket
>LIBCALL hLIBTCPIP,LIBTCPIP.Bind >LIBCALL hLIBTCPIP,LIBTCPIP.Bind
bcs .9 bcs .9
>SLEEP
>PUSHEA.G SA.REMOTE >PUSHEA.G SA.REMOTE
>LDA.G hSocket lda hSocket
>LIBCALL hLIBTCPIP,LIBTCPIP.Connect >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 .9 rts
*-------------------------------------- *--------------------------------------
CS.RUN.Negotiate CS.RUN.Negotiate
@ -204,19 +282,19 @@ CS.RUN.Negotiate
.1 >PUSHWI SMB.NegReq.end-SMB.NegReq .1 >PUSHWI SMB.NegReq.end-SMB.NegReq
>PUSHW L.SMB.NegReq >PUSHW L.SMB.NegReq
>LDA.G hSocket lda hSocket
>LIBCALL hLIBTCPIP,LIBTCPIP.Send >LIBCALL hLIBTCPIP,LIBTCPIP.Send
bcc .2 bcc .2
>SLEEP >SLEEP
ldx TimeOut ldx TimeOut
bne .1 bne .1
bra .99 bra .99
.2 >SLEEP .2 >SLEEP
>LDA.G hSocket lda hSocket
>LIBCALL hLIBTCPIP,LIBTCPIP.Recv >LIBCALL hLIBTCPIP,LIBTCPIP.Recv
bcc .3 bcc .3
@ -228,25 +306,25 @@ CS.RUN.Negotiate
.3 sta hResp .3 sta hResp
>SYSCALL GetMemPtr >SYSCALL GetMemPtr
>STYA ZPRespPtr >STYA ZPRespPtr
ldy #$3f ldy #$3f
lda (ZPRespPtr),y lda (ZPRespPtr),y
bne .9 bne .9
ldy #$5B ldy #$5B
lda (ZPRespPtr),y lda (ZPRespPtr),y
cmp #5 cmp #5
bne .9 bne .9
lda hResp lda hResp
>SYSCALL FreeMem >SYSCALL FreeMem
* clc * clc
rts rts
.9 lda hResp .9 lda hResp
>SYSCALL FreeMem >SYSCALL FreeMem
.99 lda #MLI.E.INVPATH .99 lda #MLI.E.INVPATH
sec sec
rts rts
@ -257,19 +335,19 @@ CS.RUN.SessSetup
.1 >PUSHWI SMB.SessSetup.end-SMB.SessSetup .1 >PUSHWI SMB.SessSetup.end-SMB.SessSetup
>PUSHW L.SMB.SessSetup >PUSHW L.SMB.SessSetup
>LDA.G hSocket lda hSocket
>LIBCALL hLIBTCPIP,LIBTCPIP.Send >LIBCALL hLIBTCPIP,LIBTCPIP.Send
bcc .2 bcc .2
>SLEEP >SLEEP
ldx TimeOut ldx TimeOut
bne .1 bne .1
bra .99 bra .99
.2 >SLEEP .2 >SLEEP
>LDA.G hSocket lda hSocket
>LIBCALL hLIBTCPIP,LIBTCPIP.Recv >LIBCALL hLIBTCPIP,LIBTCPIP.Recv
bcc .3 bcc .3
@ -281,7 +359,7 @@ CS.RUN.SessSetup
.3 sta hResp .3 sta hResp
>SYSCALL GetMemPtr >SYSCALL GetMemPtr
>STYA ZPRespPtr >STYA ZPRespPtr
ldy #$3f ldy #$3f
lda (ZPRespPtr),y lda (ZPRespPtr),y
bne .9 bne .9
@ -292,7 +370,7 @@ CS.RUN.SessSetup
iny iny
lda (ZPRespPtr),y lda (ZPRespPtr),y
sta SMB.TreeConnReq.UID+1 sta SMB.TreeConnReq.UID+1
>PUSHW L.MSG.SESSION >PUSHW L.MSG.SESSION
lda #$63 lda #$63
clc clc
@ -301,18 +379,18 @@ CS.RUN.SessSetup
lda #0 lda #0
adc ZPRespPtr+1 adc ZPRespPtr+1
>PUSHYA >PUSHYA
>PUSHBI 2 >PUSHBI 2
>SYSCALL PrintF >SYSCALL PrintF
lda hResp lda hResp
>SYSCALL FreeMem >SYSCALL FreeMem
* clc * clc
rts rts
.9 lda hResp .9 lda hResp
>SYSCALL FreeMem >SYSCALL FreeMem
.99 lda #MLI.E.INVPATH .99 lda #MLI.E.INVPATH
sec sec
rts rts
@ -322,19 +400,19 @@ CS.RUN.TreeConn lda #TIMEOUT.MAX
.1 >PUSHWI SMB.TreeConnReq.end-SMB.TreeConnReq .1 >PUSHWI SMB.TreeConnReq.end-SMB.TreeConnReq
>PUSHW L.SMB.TreeConnReq >PUSHW L.SMB.TreeConnReq
>LDA.G hSocket lda hSocket
>LIBCALL hLIBTCPIP,LIBTCPIP.Send >LIBCALL hLIBTCPIP,LIBTCPIP.Send
bcc .2 bcc .2
>SLEEP >SLEEP
ldx TimeOut ldx TimeOut
bne .1 bne .1
bra .99 bra .99
.2 >SLEEP .2 >SLEEP
>LDA.G hSocket lda hSocket
>LIBCALL hLIBTCPIP,LIBTCPIP.Recv >LIBCALL hLIBTCPIP,LIBTCPIP.Recv
bcc .3 bcc .3
@ -346,41 +424,43 @@ CS.RUN.TreeConn lda #TIMEOUT.MAX
.3 sta hResp .3 sta hResp
>SYSCALL GetMemPtr >SYSCALL GetMemPtr
>STYA ZPRespPtr >STYA ZPRespPtr
ldy #$3f ldy #$3f
lda (ZPRespPtr),y lda (ZPRespPtr),y
bne .9 bne .9
ldy #$52 ldy #$52
lda (ZPRespPtr),y lda (ZPRespPtr),y
sta SMB.FindFirstReq.TID sta SMB.FindFirstReq.TID
iny iny
lda (ZPRespPtr),y lda (ZPRespPtr),y
sta SMB.FindFirstReq.TID+1 sta SMB.FindFirstReq.TID+1
ldy #$56 ldy #$56
lda (ZPRespPtr),y lda (ZPRespPtr),y
sta SMB.FindFirstReq.UID sta SMB.FindFirstReq.UID
iny iny
lda (ZPRespPtr),y lda (ZPRespPtr),y
sta SMB.FindFirstReq.UID+1 sta SMB.FindFirstReq.UID+1
lda hResp lda hResp
>SYSCALL FreeMem >SYSCALL FreeMem
* clc * clc
rts rts
.9 lda hResp .9 lda hResp
>SYSCALL FreeMem >SYSCALL FreeMem
.99 lda #MLI.E.INVPATH .99 lda #MLI.E.INVPATH
sec sec
rts rts
*-------------------------------------- *--------------------------------------
CS.DOEVENT lda (pEvent) CS.DOEVENT lda (pEvent)
bpl .9 is it a TIMER event? bpl .9 is it a TIMER event?
lda TimeOut lda TimeOut
beq .9 beq .9
dec TimeOut dec TimeOut
.9 sec do not discard TIMER event .9 sec do not discard TIMER event
rts rts
@ -388,78 +468,41 @@ CS.DOEVENT lda (pEvent)
* Called once, when RUN exited with CS * Called once, when RUN exited with CS
* Put code for unloading LIB here * 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 >LIBCALL hLIBTCPIP,LIBTCPIP.Shutdown
lda hLIBTCPIP .2 lda hLIBCIFS
beq .3
>SYSCALL UnloadLib
.3 lda hLIBTCPIP
beq .8 beq .8
>SYSCALL UnloadLib >SYSCALL UnloadLib
.8 clc .8 clc
rts 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 CS.END
*-------------------------------------- *--------------------------------------
* Initialized DATA * Initialized DATA
*-------------------------------------- *--------------------------------------
LIBTCPIP .AZ "libtcpip" LIBTCPIP .AZ "libtcpip"
hLIBTCPIP .BS 1 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.USAGE .AZ "Usage : CIFSD <ip|host> sharename mountpoint"
MSG.UNKNOWN .AZ "%s: Unknown host\r\n" MSG.UNKNOWN .AZ "CIFSD:%s: Unknown host\r\n"
MSG.SESSION .AZ "Connected to: %s\r\n" MSG.SESSION .AZ "CIFSD:Connected to: %s\r\n"
*-------------------------------------- *--------------------------------------
SMB.NegReq .DA #0 DIRECT TCP TRANSPORT SMB.NegReq .DA #0 DIRECT TCP TRANSPORT
.DA #0 24 BITS LENGTH .DA #0 24 BITS LENGTH
@ -521,7 +564,7 @@ SMB.SessSetup .DA #0 DIRECT TCP TRANSPORT
.DA 0 MID .DA 0 MID
.DA #13 WORD COUNT .DA #13 WORD COUNT
.HS FF000000 NO MORE CMD .HS FF000000 NO MORE CMD
.DA 1280 MAX BUFFER .DA 1280 MAX BUFFER
.DA 2 MAX MPX COUNT .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-*
.DA /SMB.SessSetup.end-2-* .DA /SMB.SessSetup.end-2-*
SMB.SessSetup.SecBlob
* .AZ "" Password * .AZ "" Password
.AZ "GUEST" Account Name .AZ "Guest" Account Name
.AZ "?" Primary Domain .AZ "?" Primary Domain
SMB.SessSetup.SecBlob.LEN .EQ *-SMB.SessSetup.SecBlob
.AZ "A2osX" Native OS .AZ "A2osX" Native OS
.AZ "A2osX-CIFSD" Native LANMAN .AZ "A2osX-CIFSD" Native LANMAN
SMB.SessSetup.end .EQ * SMB.SessSetup.end .EQ *
@ -563,20 +604,73 @@ SMB.TreeConnReq.TID
SMB.TreeConnReq.UID SMB.TreeConnReq.UID
.DA 0 UID .DA 0 UID
.DA 0 MID .DA 0 MID
.DA #4 WORD COUNT .DA #4 WORD COUNT
.HS FF000000 NO MORE CMD .HS FF000000 NO MORE CMD
.DA 0 .DA 0
.DA 1 PASSWORD LEN .DA 1 PASSWORD LEN
.DA #SMB.TreeConnReq.end-2-* .DA #SMB.TreeConnReq.end-2-*
.DA /SMB.TreeConnReq.end-2-* .DA /SMB.TreeConnReq.end-2-*
.AZ "" PASSWORD .AZ "" PASSWORD
.AZ "\\SV-W2K-3\Apple" PATH .AZ "_temp" PATH
.AZ "?????" .AZ "?????"
SMB.TreeConnReq.end .EQ * 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 SMB.FindFirstReq
.DA #0 DIRECT TCP TRANSPORT .DA #0 DIRECT TCP TRANSPORT
.DA #0 24 BITS LENGTH .DA #0 24 BITS LENGTH
@ -596,38 +690,39 @@ SMB.FindFirstReq.TID
.DA $FEFF PIDLO .DA $FEFF PIDLO
SMB.FindFirstReq.UID SMB.FindFirstReq.UID
.DA 0 UID .DA 0 UID
.DA 0 MID .DA 0 MID
* Trans2
.DA #$0F WORD COUNT .DA #15 WORD COUNT
.DA 0 TotalParamCount .DA SMB.FindFirstReq.PrmCnt TotalParamCount
.DA 0 TotalDataCount .DA 0 TotalDataCount
.DA 256 MaxParameterCount .DA 10 MaxParameterCount
.DA 1024 MaxDataCount .DA 460 MaxDataCount
.DA #1 MaxSetupCount .DA #1 MaxSetupCount
.HS 00 Reserved1 .HS 00 Reserved1
.DA 0 Flags .DA 0 Flags
.HS 00000000 Timeout .HS 00000000 Timeout
.HS 0000 Reserved2 .HS 0000 Reserved2
.DA 18 ParameterCount .DA SMB.FindFirstReq.PrmCnt ParameterCount
.DA 68 ParameterOffset .DA 66 ParameterOffset
.HS 0000 DataCount .HS 0000 DataCount
.HS 0000 DataOffset .HS 0000 DataOffset
.DA #1 SetupCount .DA #1 SetupCount
.HS 00 Reserved3 .HS 00 Reserved3
* FIND_FIRST2
.DA 1 TRANS2_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 SMB.FindFirstReq.Prm
.DA $0016 SearchAttributes
.DA $373E SearchAttributes
.DA 1024 SearchCount .DA 1024 SearchCount
.DA 0 Flags .DA 3 Flags
.DA $0104 InformationLevel .DA $0001 InformationLevel
.HS 00000000 SearchStorageType .HS 00000000 SearchStorageType
.AS "\*" FileName .AZ "\*.*" FileName
SMB.FindFirstReq.PrmCnt .EQ *-SMB.FindFirstReq.Prm
SMB.FindFirstReq.end SMB.FindFirstReq.end
*-------------------------------------- *--------------------------------------
.DUMMY .DUMMY
@ -641,7 +736,6 @@ SA.REMOTE .BS 1 S.SOCKADDR.AF
.BS 1 .BS 1
.BS 4 S.SOCKADDR.ADDR .BS 4 S.SOCKADDR.ADDR
.BS 2 S.SOCKADDR.PORT .BS 2 S.SOCKADDR.PORT
hSocket .BS 1
DS.END DS.END
.ED .ED
*-------------------------------------- *--------------------------------------

View File

@ -6,7 +6,7 @@ NEW
.TF sbin/networkd .TF sbin/networkd
*-------------------------------------- *--------------------------------------
LIB.MAX .EQ 4 LIB.MAX .EQ 4
DBG .EQ 0 DBG .EQ 2
*-------------------------------------- *--------------------------------------
.INB inc/macros.i .INB inc/macros.i
.INB inc/a2osx.i .INB inc/a2osx.i

View File

@ -8,19 +8,34 @@ NEW
* A = hMem To loaded LIB * A = hMem To loaded LIB
*-------------------------------------- *--------------------------------------
K.LoadLib jsr PS.Find.LIB K.LoadLib jsr PS.Find.LIB
bcs .9 bcs .99
jsr BIN.Load K.Buf256 = "/PATH/BIN" jsr BIN.Load K.Buf256 = "/PATH/BIN"
bcs .9 bcs .99
>STYA .1+1 >STYA .1+1
txa Pass hLib to LibLoad txa Pass hLib to LibLoad
pha
ldx #LIBMGR.LOAD 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 * clc
.9 rts .99 rts
*-------------------------------------- *--------------------------------------
* UnloadLib * UnloadLib
* in : * in :
@ -57,24 +72,30 @@ K.LoadDrv >STYA .2+1 Save "BIN\0ARGS\0\0"
jsr PS.Find.DRV jsr PS.Find.DRV
bcs .9 bcs .9
jsr BIN.Load K.Buf256 = "/PATH/BIN" jsr BIN.Load K.Buf256 = "/PATH/BIN"
bcs .9 bcs .9
>STYA .3+1 >STYA .3+1
ldx #$ff ldx #$ff
.1 inx Skip "BIN" .1 inx Skip "BIN"
.2 lda $ffff,x .2 lda $ffff,x
bne .1 bne .1
txa txa
sec sec
adc .2+1 adc .2+1
tay tay
lda #0 lda #0
adc .2+2 Y,A = ARGS adc .2+2 Y,A = ARGS
.3 jsr $ffff SELF MODIFIED, call Dev.Detect .3 jsr $ffff SELF MODIFIED, call Dev.Detect
jsr BIN.Load.Cleanup jsr BIN.Load.Cleanup
bcs .9 bcs .9
lda #0 Make sure RC = 0 if success lda #0 Make sure RC = 0 if success
* clc * clc
.9 rts .9 rts

View File

@ -3,7 +3,7 @@ NEW
*/-------------------------------------- */--------------------------------------
* # OpenDir * # OpenDir
* ## C * ## C
* `int hDIR opendir (const char * dirpath);` * `short int hDIR opendir (const char * dirpath);`
* ## ASM * ## ASM
* `>LDYA dirpath` * `>LDYA dirpath`
* `>SYSCALL opendir` * `>SYSCALL opendir`
@ -76,7 +76,7 @@ K.ReadDir.ROOT ldy #S.FD.DIR.FC did we already returned something ?
>MLICALL MLIONLINE >MLICALL MLIONLINE
bcs K.ReadDir.RTS 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 jsr K.ReadDir.GetBufYA
bcs K.ReadDir.RTS bcs K.ReadDir.RTS
@ -86,7 +86,7 @@ K.ReadDir.ROOT ldy #S.FD.DIR.FC did we already returned something ?
.1 lda (ZPPtr2) .1 lda (ZPPtr2)
and #$0F and #$0F
beq .6 beq .4
tax tax
inc inc
@ -139,21 +139,49 @@ K.ReadDir.ROOT ldy #S.FD.DIR.FC did we already returned something ?
.3 jsr K.ReadDir.AddStat .3 jsr K.ReadDir.AddStat
.6 lda ZPPtr2 .4 lda ZPPtr2
clc clc
adc #16 adc #16
sta ZPPtr2 sta ZPPtr2
bcc .7 bcc .5
inc ZPPtr2+1 inc ZPPtr2+1
.7 dec K.ReadDir.EC .5 dec K.ReadDir.EC
bne .1 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 * lda #0 done by S.MEM.F.INIT0
* sta (ZPPtr4) Ending 0 * sta (ZPPtr4) Ending 0
ldy #S.FD.DIR.FC ldy #S.FD.DIR.FC
lda #16 lda #255
sta (pFD),y Flag that we returned something for next time sta (pFD),y Flag that we returned something for next time
jmp K.ReadDir.EXIT jmp K.ReadDir.EXIT
*-------------------------------------- *--------------------------------------

View File

@ -2,7 +2,7 @@ NEW
AUTO 3,1 AUTO 3,1
*-------------------------------------- *--------------------------------------
* SYSCALL (AUXLC to AUXLC) * SYSCALL (AUXLC to AUXLC)
* Used by user & kernel for inter bank Calls * Used by user & kernel for inter bank Calls
* In: * In:
* X = SYSfnc.Index * X = SYSfnc.Index
* Y,A = free for Inline param * Y,A = free for Inline param
@ -10,7 +10,7 @@ NEW
GP.CodeStart jmp GP.SysCall GP.CodeStart jmp GP.SysCall
*-------------------------------------- *--------------------------------------
* LIBCALL (AUXLC to AUXLC) * LIBCALL (AUXLC to AUXLC)
* Used by user * Used by user
* In: * In:
* Y = LIB.ID * Y = LIB.ID
* X = LIBfnc.Index * X = LIBfnc.Index
@ -77,7 +77,7 @@ GP.Sleep2 ldy #S.PS.PC
tsx tsx
inx inx
inx keep PC HI,LO from KERNEL jsr PSExec/PSResume inx keep PC HI,LO from KERNEL jsr PSExec/PSResume
inx Stack Ptr is $1ff if empty inx Stack Ptr is $1ff if empty
@ -92,7 +92,7 @@ GP.Sleep2 ldy #S.PS.PC
bne .2 bne .2
tya tya
.3 >PUSHA push CPU Stack BC to restore on top of Soft Stack .3 >PUSHA push CPU Stack BC to restore on top of Soft Stack
inc $1fe PC=PC+1 inc $1fe PC=PC+1
@ -133,30 +133,49 @@ GP.SysCall dec IRQ.InKernel
rts Unmodified Carry rts Unmodified Carry
.3 sei .3 sei
inc IRQ.InKernel
pla get PC LO
GO.Sleep2 pla get PC LO
plx get PC HI plx get PC HI
* sec * sec
sbc #2 move back JSR GP.SysCall -3 (jsr $BF00) +1 (RTI) sbc #2
bcs .4 bcs GP.Sleep2
dex dex
.4 inc IRQ.InKernel .1 bra GP.Sleep2
bra GP.Sleep2
*-------------------------------------- *--------------------------------------
GP.LibCall dec IRQ.InLib GP.LibCall dec IRQ.InLib
pha No need to save X, K.GetMemPtr will leave it unmodified pha
tya Get LIB hMem in A 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) jsr K.GetMemPtr Get LIB Code Segment (MemMgr in $E000, no BNK change)
>STYA .1+1 >STYA .1+1
pla pla
.1 jsr $FFFF SELF MODIFIED .1 jsr $FFFF SELF MODIFIED
GP.LibCall.8 inc IRQ.InLib bcc .2
GP.LibCall.RTS rts
tax
beq .3
.2 inc IRQ.InLib
rts
.3 sei
inc IRQ.InLib
bra GO.Sleep2
*-------------------------------------- *--------------------------------------
GP.AtkCall dec IRQ.InKernel GP.AtkCall dec IRQ.InKernel
@ -187,7 +206,7 @@ GP.AtkCall.INC inc IRQ.InKernel
GP.FpuCall dec IRQ.InKernel GP.FpuCall dec IRQ.InKernel
cpx #FPU.FADD cpx #FPU.FADD
bcs .1 bcs .1
jsr MATH32 INT32, direct JMP jsr MATH32 INT32, direct JMP
bra GP.AtkCall.INC bra GP.AtkCall.INC
@ -238,7 +257,7 @@ GP.FpuCall dec IRQ.InKernel
*\-------------------------------------- *\--------------------------------------
GP.RomCallGetFacOnStack GP.RomCallGetFacOnStack
jsr GP.ROMCALL jsr GP.ROMCALL
lda pStack lda pStack
ldy pStack+1 ldy pStack+1
sta FORPNT Ptr to dst buffer sta FORPNT Ptr to dst buffer
@ -252,7 +271,7 @@ GP.RomCall phx
plx plx
jsr GP.RomCall.JmpX jsr GP.RomCall.JmpX
.8 ldx #$ff .8 ldx #$ff
bit $C000,x bit $C000,x
bit $C000,x bit $C000,x
@ -305,7 +324,7 @@ GP.Float ldy #3
GP.lrintf jsr GP.SetFAC GP.lrintf jsr GP.SetFAC
inc pStack keep 4 bytes on stack inc pStack keep 4 bytes on stack
ldx #FPU.QINT ldx #FPU.QINT
jsr GP.ROMCALL jsr GP.ROMCALL
ldy #3 ldy #3
@ -386,7 +405,7 @@ GO.EXIT.JMP jmp $FFFF SELF MODIFIED
*-------------------------------------- *--------------------------------------
GP.IRQ cld GP.IRQ cld
bit IRQ.Skip After A2osX IRQ.H ? bit IRQ.Skip After A2osX IRQ.H ?
bmi GP.IRQ.Exit bmi GP.IRQ.Exit
sta SETALTZP switch to aux LC sta SETALTZP switch to aux LC

View File

@ -292,12 +292,6 @@ MemMgrInit >LDYAI Mem.MHiMem
dex dex
bpl .1 bpl .1
ldx #K.FLT.MAX*2-1
.11 stz Flt.Table.hPath,x
dex
bpl .11
ldx #K.NOD.MAX*2-1 ldx #K.NOD.MAX*2-1
.2 stz Nod.Table.hName,x .2 stz Nod.Table.hName,x
@ -322,6 +316,12 @@ MemMgrInit >LDYAI Mem.MHiMem
dex dex
bpl .6 bpl .6
ldx #K.FLT.MAX*4-1
.7 stz Flt.Table.pftLO,x
dex
bpl .7
rts rts
*-------------------------------------- *--------------------------------------
SysScrInit >LDYAI Mem.XHiMem SysScrInit >LDYAI Mem.XHiMem

View File

@ -2,18 +2,59 @@ NEW
AUTO 3,1 AUTO 3,1
*-------------------------------------- *--------------------------------------
* K.Mount * K.Mount
* In : * ## ASM
* Out : * `>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 * K.UMount
* In : * In : A = hMount
* Out : * Out :
*-------------------------------------- *--------------------------------------
K.UMount K.UMount tax
lda Flt.Table.pftHI-1,x
beq .9
stz Flt.Table.pftHI-1,x
clc clc
rts rts
.9 lda #E.INVH
sec
rts
*-------------------------------------- *--------------------------------------
K.Online >PULLW K.MLI.PARAMS+2 K.Online >PULLW K.MLI.PARAMS+2
>PULLB K.MLI.PARAMS+1 >PULLB K.MLI.PARAMS+1
@ -22,7 +63,7 @@ K.Online >PULLW K.MLI.PARAMS+2
*/-------------------------------------- */--------------------------------------
* # GetStkObj * # GetStkObj
* ## C * ## C
* `int *ptr getstkobj (shoirt int hStkObj);` * `int *ptr getstkobj (short int hStkObj);`
* ## ASM * ## ASM
* `lda hStkObj` * `lda hStkObj`
* `>SYSCALL GetStkObj` * `>SYSCALL GetStkObj`

View File

@ -25,11 +25,13 @@ PFT.CheckPathYA >PUSHYA
ldx #0 ldx #0
.1 lda Flt.Table.hPath,x .1 lda Flt.Table.pftHI,x
beq .8 beq .8
jsr K.GetMemPtr sta ZPPtr1+1
>STYA ZPPtr1
lda Flt.Table.pftLO,x
sta ZPPtr1
ldy #$ff ldy #$ff
@ -46,12 +48,15 @@ PFT.CheckPathYA >PUSHYA
cmp #'/' cmp #'/'
bne .8 bne .8
lda Flt.Table.hLib,x get hLib lda Flt.Table.cbLO,x
jsr K.GetMemPtr sta .7+1
>STYA .7+1
lda Flt.Table.cbHI,x
sta .7+2
pla discard JSR return @ pla discard JSR return @
pla 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 # .6 ldx #$ff SELF MODIFIED SYSCALL #
.7 jmp $ffff SELF MODIFIED .7 jmp $ffff SELF MODIFIED