mirror of
https://github.com/romychs/ESPKit.git
synced 2025-11-02 00:15:58 +03:00
tftp proto lib first impl
This commit is contained in:
parent
6d9428d988
commit
6aa509d427
30
sources/DSS/.vscode/tasks.json
vendored
30
sources/DSS/.vscode/tasks.json
vendored
@ -142,6 +142,36 @@
|
||||
}
|
||||
},
|
||||
|
||||
{
|
||||
"label": "make CMDTEST (sjasmplus)",
|
||||
"type": "shell",
|
||||
"command": "sjasmplus",
|
||||
"args": [
|
||||
"--sld=cmdtest.sld",
|
||||
"--sym=cmdtest.labels",
|
||||
"--raw=cmdtest.exe",
|
||||
"--fullpath",
|
||||
"cmdtest.asm"
|
||||
],
|
||||
"problemMatcher": {
|
||||
"owner": "sjasmplus",
|
||||
"fileLocation": "autoDetect",
|
||||
"pattern": {
|
||||
"regexp": "^(.*)\\((\\d+)\\):\\s+(warning|error):\\s+(.*)$",
|
||||
"file": 1,
|
||||
"line": 2,
|
||||
"severity": 3,
|
||||
"message": 4
|
||||
}
|
||||
},
|
||||
"group": {
|
||||
"kind": "build",
|
||||
"isDefault": true
|
||||
}
|
||||
},
|
||||
|
||||
|
||||
|
||||
{
|
||||
"label": "start mame",
|
||||
"type": "shell",
|
||||
|
||||
66
sources/DSS/cmdtest.asm
Normal file
66
sources/DSS/cmdtest.asm
Normal file
@ -0,0 +1,66 @@
|
||||
DSS EQU 0x10
|
||||
DSS_PCHARS EQU 0x5C
|
||||
DSS_EXIT EQU 0x41
|
||||
EXE_VERSION EQU 0x00
|
||||
|
||||
|
||||
; Print data ASCIIZ string to screen and CR+LF
|
||||
MACRO PRINTLN data
|
||||
LD HL,data
|
||||
LD C,DSS_PCHARS
|
||||
RST DSS
|
||||
LD C,DSS_PCHARS
|
||||
LD HL, MSG_LINE_END
|
||||
RST DSS
|
||||
ENDM
|
||||
|
||||
MODULE MAIN
|
||||
|
||||
ORG 0x8080
|
||||
; ------------------------------------------------------
|
||||
EXE_HEADER
|
||||
DB "EXE"
|
||||
DB EXE_VERSION ; EXE Version
|
||||
DW 0x0080 ; Code offset
|
||||
DW 0
|
||||
DW 0 ; Primary loader size
|
||||
DW 0 ; Reserved
|
||||
DW 0
|
||||
DW 0
|
||||
DW START ; Loading Address
|
||||
DW START ; Entry Point
|
||||
DW STACK_TOP ; Stack address
|
||||
DS 106, 0 ; Reserved
|
||||
|
||||
ORG 0x8100
|
||||
@STACK_TOP
|
||||
|
||||
; ------------------------------------------------------
|
||||
START
|
||||
|
||||
PRINTLN MSG_CMDLINE
|
||||
PUSH IX
|
||||
POP HL
|
||||
LD C,DSS_PCHARS
|
||||
RST DSS
|
||||
|
||||
PRINTLN MSG_CURPATH
|
||||
PUSH IY
|
||||
POP HL
|
||||
LD C,DSS_PCHARS
|
||||
RST DSS
|
||||
|
||||
LD BC,DSS_EXIT
|
||||
RST DSS
|
||||
|
||||
|
||||
MSG_CMDLINE
|
||||
DB "\r\nCommandline:"Z
|
||||
|
||||
MSG_CURPATH
|
||||
DB "\r\nCurrentPath:"Z
|
||||
|
||||
MSG_LINE_END
|
||||
DB "\r\n"Z
|
||||
|
||||
ENDMODULE
|
||||
@ -41,7 +41,7 @@ RST38:
|
||||
|
||||
DSS_HANDLER
|
||||
|
||||
PUSH HL
|
||||
//PUSH HL
|
||||
PUSH BC
|
||||
LD A, C
|
||||
CP DSS_CURDISK
|
||||
@ -119,13 +119,13 @@ NXT_PCHAR
|
||||
NORM_EXIT
|
||||
AND A ; CF=0
|
||||
POP BC
|
||||
POP HL
|
||||
//POP HL
|
||||
RET
|
||||
|
||||
BAD_EXIT
|
||||
SCF
|
||||
POP BC
|
||||
POP HL
|
||||
//POP HL
|
||||
RET
|
||||
|
||||
|
||||
@ -364,10 +364,10 @@ CMD_LINE_TFTP_D
|
||||
DB " tftp://tftp.server.ru:1024/file_in.asm c:\\tmp\\file_out.asm"Z
|
||||
|
||||
CMD_LINE_TFTP_D1
|
||||
DB " tftp://tftp.server.ru:1024/file_in.asm local.asm"Z
|
||||
DB " tftp://server.ru/file.src sss.dst"Z
|
||||
|
||||
CMD_LINE_TFTP_U
|
||||
DB " file_up.txt tftp://tftp.server.ru:9999/file_in.asm "Z
|
||||
DB " file_from.asm tftp://server.ru:9999/file_to.asm"Z
|
||||
|
||||
CMD_LINE_TFTP_U1
|
||||
DB " file_up.txt"Z
|
||||
|
||||
@ -13,6 +13,9 @@ CHECK
|
||||
RET NC
|
||||
|
||||
PRINT
|
||||
PUSH AF
|
||||
PRINT GET_ERR_MSG.MSG_DSS_ERROR
|
||||
POP AF
|
||||
CALL GET_ERR_MSG
|
||||
DSS_EXEC DSS_PCHARS
|
||||
LD HL, WCOMMON.LINE_END
|
||||
@ -43,6 +46,9 @@ GET_ERR_MSG
|
||||
POP AF
|
||||
RET
|
||||
|
||||
.MSG_DSS_ERROR
|
||||
DB " Error: "Z
|
||||
|
||||
.MSG_E01 DB "Invalid function"Z
|
||||
.MSG_E02 DB "Invalid drive number"Z
|
||||
.MSG_E03 DB "File not found"Z
|
||||
|
||||
@ -503,9 +503,8 @@ MSG_ERROR DB "ERROR", 0
|
||||
; Received message for Failure
|
||||
MSG_FAIL DB "FAIL", 0
|
||||
|
||||
IFUSED RS_BUFF
|
||||
; Buffer to receive response from ESP
|
||||
RS_BUFF DS RS_BUFF_SIZE, 0
|
||||
ENDIF
|
||||
RS_BUFF
|
||||
;DS RS_BUFF_SIZE, 0
|
||||
|
||||
ENDMODULE
|
||||
@ -15,21 +15,29 @@
|
||||
CALL CHECK_ERROR
|
||||
ENDM
|
||||
|
||||
; Print data ASCIIZ string to screen
|
||||
MACRO PRINT data
|
||||
LD HL,data
|
||||
; Print data forn HL - pointer to ASCIIZ string to screen
|
||||
MACRO PRINT_HL
|
||||
LD C,DSS_PCHARS
|
||||
RST DSS
|
||||
ENDM
|
||||
|
||||
; Print data ASCIIZ string to screen and CR+LF
|
||||
; Print data forn HL - pointer to ASCIIZ string to screen, and <CR><LF>
|
||||
MACRO PRINTLN_HL
|
||||
PRINT_HL
|
||||
LD HL, WCOMMON.LINE_END
|
||||
PRINT_HL
|
||||
ENDM
|
||||
|
||||
; Print data ASCIIZ string to screen
|
||||
MACRO PRINT data
|
||||
LD HL,data
|
||||
PRINT_HL
|
||||
ENDM
|
||||
|
||||
; Print data ASCIIZ string to screen and <CR><LF>
|
||||
MACRO PRINTLN data
|
||||
LD HL,data
|
||||
LD C,DSS_PCHARS
|
||||
RST DSS
|
||||
LD C,DSS_PCHARS
|
||||
LD HL, WCOMMON.LINE_END
|
||||
RST DSS
|
||||
PRINTLN_HL
|
||||
ENDM
|
||||
|
||||
; Print data ASCIIZ string to screen if TRACE enabled
|
||||
@ -51,5 +59,11 @@
|
||||
RST DSS
|
||||
ENDM
|
||||
|
||||
; If current work mode is upload, go to label
|
||||
MACRO IF_UPLOAD_GO lbl
|
||||
LD A,(WORK_MODE)
|
||||
CP WM_UPLOAD
|
||||
JR Z,lbl
|
||||
ENDM
|
||||
|
||||
ENDIF
|
||||
163
sources/DSS/tftp.asm
Normal file
163
sources/DSS/tftp.asm
Normal file
@ -0,0 +1,163 @@
|
||||
; ======================================================
|
||||
; TFTP-protocol support module for WTFTP app
|
||||
; By Roman Boykov. Copyright (c) 2024
|
||||
; https://github.com/romychs
|
||||
; License: BSD 3-Clause
|
||||
; ======================================================
|
||||
|
||||
MODULE TFTP
|
||||
|
||||
; ------------------------------------------------------
|
||||
; Operation codes 2b for tftp packet header
|
||||
; ------------------------------------------------------
|
||||
|
||||
; Opcode Read Request
|
||||
OP_RRQ EQU '01'
|
||||
; Opcode Write Request
|
||||
OP_WRQ EQU '02'
|
||||
; Opcode Data packet
|
||||
OP_DATA EQU '03'
|
||||
; Opcode Acknowledge packet
|
||||
OP_ACK EQU '04'
|
||||
; Opcode Error packet
|
||||
OP_ERROR EQU '05'
|
||||
|
||||
; ------------------------------------------------------
|
||||
; Build packet for request file from TFTF-server
|
||||
; Out: HL - pointer to buffer to send
|
||||
; ------------------------------------------------------
|
||||
BUILD_RRQ_PACKET
|
||||
PUSH DE
|
||||
LD DE,OP_RRQ ; opcode
|
||||
CALL .BUILD_RW_PACKET
|
||||
POP HL,DE
|
||||
RET
|
||||
|
||||
; ------------------------------------------------------
|
||||
; Build packet for write file to TFTF-server
|
||||
; ------------------------------------------------------
|
||||
!BUILD_WRQ_PACKET
|
||||
PUSH DE
|
||||
LD DE,OP_WRQ ; opcode
|
||||
CALL .BUILD_RW_PACKET
|
||||
POP HL,DE
|
||||
RET
|
||||
|
||||
; ------------------------------------------------------
|
||||
; Build packet for write file or receive form TFTF-server
|
||||
; ------------------------------------------------------
|
||||
.BUILD_RW_PACKET
|
||||
LD HL,TFTP_BUFF
|
||||
PUSH HL
|
||||
LD (HL), DE
|
||||
INC HL
|
||||
INC HL
|
||||
LD DE,MAIN.REM_FILE
|
||||
; filename
|
||||
.BRP_NXT_RF
|
||||
LD A, (DE)
|
||||
LD (HL), A
|
||||
OR A
|
||||
JR Z,.BRP_MOD
|
||||
INC HL
|
||||
INC DE
|
||||
JR .BRP_NXT_RF
|
||||
; Mode 'octet'Z
|
||||
.BRP_MOD
|
||||
INC HL
|
||||
LD DE,'ct'
|
||||
LD (HL),DE
|
||||
INC HL
|
||||
LD DE,'et'
|
||||
LD (HL),DE
|
||||
INC HL
|
||||
LD DE,'t'
|
||||
LD (HL),DE
|
||||
RET
|
||||
|
||||
; ------------------------------------------------------
|
||||
; Check TFTP Error, out error message if '05' packet
|
||||
; type received
|
||||
; Out: CF set if Error
|
||||
; A - packet type, second byte if no errors
|
||||
; ------------------------------------------------------
|
||||
CHK_ERROR
|
||||
LD HL,TFTP_BUFF
|
||||
LD A, (HL)
|
||||
CP '0'
|
||||
JR NZ, .CKE_UNKNOWN
|
||||
INC HL
|
||||
LD A, (HL)
|
||||
CP '5'
|
||||
JR Z, .CKE_ERR
|
||||
OR A
|
||||
RET
|
||||
.CKE_ERR
|
||||
INC HL
|
||||
LD DE,(HL) ; ErrorCode
|
||||
LD A, D
|
||||
OR E
|
||||
; check for 1..7 range for defined error codes
|
||||
JR Z,.CKE_UNDEF_ERR
|
||||
LD A,E
|
||||
CP 8
|
||||
JP P,.CKE_UNDEF_ERR
|
||||
; defined error
|
||||
ADD A
|
||||
LD E,A
|
||||
LD HL,.TFTPE_T
|
||||
ADD HL,DE
|
||||
LD A,(HL)
|
||||
INC HL
|
||||
LD H,(HL)
|
||||
LD L,A
|
||||
; print error message, HL - pointer to message
|
||||
.CKE_PRINT_ERR
|
||||
PUSH HL
|
||||
PRINT .MSG_TFTP_ERR ; Protocol error: ...
|
||||
POP HL
|
||||
PRINTLN_HL
|
||||
JR .CKE_ERR_EXIT
|
||||
|
||||
; undefined error, message in datagram
|
||||
.CKE_UNDEF_ERR
|
||||
INC HL
|
||||
INC HL
|
||||
JR .CKE_PRINT_ERR
|
||||
|
||||
.CKE_UNKNOWN
|
||||
; unknown packet type
|
||||
PRINTLN .MSG_ERR_UPT
|
||||
.CKE_ERR_EXIT
|
||||
SCF
|
||||
RET
|
||||
|
||||
; ------------------------------------------------------
|
||||
; Defined TFTP Protocol Error messages
|
||||
; ------------------------------------------------------
|
||||
|
||||
;MSG_TFTPE_0 DB "Not defined, see error message (if any)."Z
|
||||
.MSG_TFTPE_1 DB "File not found."Z
|
||||
.MSG_TFTPE_2 DB "Access violation."Z
|
||||
.MSG_TFTPE_3 DB "Disk full or allocation exceeded."Z
|
||||
.MSG_TFTPE_4 DB "Illegal TFTP operation."Z
|
||||
.MSG_TFTPE_5 DB "Unknown transfer ID."Z
|
||||
.MSG_TFTPE_6 DB "File already exists."Z
|
||||
.MSG_TFTPE_7 DB "No such user."Z
|
||||
|
||||
; Table with error messages offsets
|
||||
.TFTPE_T
|
||||
DW .MSG_TFTPE_1,.MSG_TFTPE_1,.MSG_TFTPE_2,.MSG_TFTPE_3
|
||||
DW .MSG_TFTPE_4,.MSG_TFTPE_5,.MSG_TFTPE_7,.MSG_TFTPE_7
|
||||
|
||||
.MSG_TFTP_ERR
|
||||
DB "Protocol error: "Z
|
||||
|
||||
.MSG_ERR_UPT
|
||||
DB "Unknown TFTP packet received!"Z
|
||||
|
||||
; Buffer for UDP datagram with TFTP payload
|
||||
TFTP_BUFF
|
||||
DS 516,0
|
||||
|
||||
ENDMODULE
|
||||
@ -19,26 +19,26 @@ DELAY
|
||||
|
||||
LD A,H
|
||||
OR L
|
||||
JR NZ,DELAY_NXT
|
||||
JR NZ,.DELAY_NXT
|
||||
LD HL,20
|
||||
|
||||
DELAY_NXT
|
||||
CALL DELAY_1MS_INT
|
||||
.DELAY_NXT
|
||||
CALL .DELAY_1MS_INT
|
||||
DEC HL
|
||||
LD A,H
|
||||
OR L
|
||||
JP NZ,DELAY_NXT
|
||||
JP NZ,.DELAY_NXT
|
||||
|
||||
POP HL,BC,AF
|
||||
RET
|
||||
|
||||
DELAY_1MS_INT
|
||||
.DELAY_1MS_INT
|
||||
LD BC,400
|
||||
SBD_NXT
|
||||
.SBD_NXT
|
||||
DEC BC
|
||||
LD A, B
|
||||
OR C
|
||||
JR NZ, SBD_NXT
|
||||
JR NZ, .SBD_NXT
|
||||
RET
|
||||
|
||||
; ------------------------------------------------------
|
||||
@ -46,7 +46,7 @@ SBD_NXT
|
||||
; ------------------------------------------------------
|
||||
DELAY_1MS
|
||||
PUSH BC
|
||||
CALL DELAY_1MS_INT
|
||||
CALL DELAY.DELAY_1MS_INT
|
||||
POP BC
|
||||
RET
|
||||
|
||||
@ -56,14 +56,14 @@ DELAY_1MS
|
||||
DELAY_100uS
|
||||
PUSH BC
|
||||
LD BC,40
|
||||
CALL SBD_NXT
|
||||
CALL DELAY.SBD_NXT
|
||||
POP BC
|
||||
RET
|
||||
|
||||
; ------------------------------------------------------
|
||||
; Calc length of zero ended string
|
||||
; Inp: HL - pointer to string
|
||||
; Out: BC - length of string
|
||||
; Inp: HL - pointer to string
|
||||
; Out: BC - length of string
|
||||
; ------------------------------------------------------
|
||||
IFUSED STRLEN
|
||||
STRLEN
|
||||
@ -76,33 +76,33 @@ STRLEN
|
||||
LD BC,HL
|
||||
LD A, B
|
||||
OR C
|
||||
JR Z, STRL_NCOR
|
||||
JR Z, .STRL_NCOR
|
||||
DEC BC
|
||||
STRL_NCOR
|
||||
.STRL_NCOR
|
||||
POP HL,DE
|
||||
RET
|
||||
ENDIF
|
||||
|
||||
; ------------------------------------------------------
|
||||
; Compare zero-ended strings
|
||||
; Inp: HL, DE - pointers to strings to compare
|
||||
; Out: CF=0 - equal, CF=1 - not equal
|
||||
; Compare strings
|
||||
; Inp: HL, DE - pointers to asciiz strings to compare
|
||||
; Out: CF=0 - equal, CF=1 - not equal
|
||||
; ------------------------------------------------------
|
||||
IFUSED STRCMP
|
||||
STRCMP
|
||||
PUSH DE,HL
|
||||
STC_NEXT
|
||||
.STC_NEXT
|
||||
LD A, (DE)
|
||||
CP (HL)
|
||||
JR NZ, STC_NE
|
||||
JR NZ,.STC_NE
|
||||
AND A
|
||||
JR Z, STC_EQ
|
||||
JR Z,.STC_EQ
|
||||
INC DE
|
||||
INC HL
|
||||
JR STC_NEXT
|
||||
STC_NE
|
||||
JR .STC_NEXT
|
||||
.STC_NE
|
||||
SCF
|
||||
STC_EQ
|
||||
.STC_EQ
|
||||
POP HL,DE
|
||||
RET
|
||||
ENDIF
|
||||
@ -161,6 +161,21 @@ STARTSWITH
|
||||
ENDIF
|
||||
|
||||
|
||||
; ------------------------------------------------------
|
||||
; Skip spaces at start of zero ended string
|
||||
; Inp: HL - pointer to string
|
||||
; Out: HL - points to first non space symbol
|
||||
; ------------------------------------------------------
|
||||
IFUSED LTRIM
|
||||
LTRIM
|
||||
LD A, (HL)
|
||||
OR A
|
||||
RET Z
|
||||
CP 0x21
|
||||
RET P
|
||||
INC HL
|
||||
JR LTRIM
|
||||
ENDIF
|
||||
|
||||
; ------------------------------------------------------
|
||||
; Convert string to number
|
||||
@ -171,13 +186,13 @@ STARTSWITH
|
||||
ATOU
|
||||
PUSH BC
|
||||
LD HL,0x0000
|
||||
ATOU_L1
|
||||
.ATOU_L1
|
||||
LD A,(DE)
|
||||
AND A
|
||||
JR Z, ATOU_LE
|
||||
JR Z, .ATOU_LE
|
||||
SUB 0x30
|
||||
CP 10
|
||||
JR NC, ATOU_LE
|
||||
JR NC, .ATOU_LE
|
||||
INC DE
|
||||
LD B,H
|
||||
LD C,L
|
||||
@ -187,36 +202,171 @@ ATOU_L1
|
||||
ADD HL,HL
|
||||
ADD A,L
|
||||
LD L,A
|
||||
JR NC,ATOU_L1
|
||||
JR NC,.ATOU_L1
|
||||
INC H
|
||||
JP ATOU_L1
|
||||
ATOU_LE
|
||||
JP .ATOU_L1
|
||||
.ATOU_LE
|
||||
POP BC
|
||||
RET
|
||||
ENDIF
|
||||
|
||||
; ------------------------------------------------------
|
||||
; Find char in string
|
||||
; Inp: HL - ptr to zero endeds string
|
||||
; A - char to find
|
||||
; Outp: CF=0, HL points to char if found
|
||||
; CF=1 - Not found
|
||||
; Convert 16 bit unsigned number to string
|
||||
; Inp: HL - number
|
||||
; DE - ptr to buffer
|
||||
; Out: DE -> asciiz string representing a number
|
||||
; ------------------------------------------------------
|
||||
IFUSED STRCHR
|
||||
IFUSED UTOA
|
||||
UTOA:
|
||||
PUSH BC, HL
|
||||
XOR A
|
||||
PUSH AF ; END MARKER A=0, Z
|
||||
.UTOA_L1
|
||||
CALL DIV_10
|
||||
ADD '0'
|
||||
PUSH AF ; DIGIT: A>0, NZ
|
||||
LD A,H
|
||||
OR L
|
||||
JR NZ,.UTOA_L1
|
||||
.UTOA_L2
|
||||
POP AF
|
||||
LD (DE),A
|
||||
INC DE
|
||||
JR NZ,.UTOA_L2
|
||||
POP HL, BC
|
||||
RET
|
||||
|
||||
; ------------------------------------------------------
|
||||
; Division by 10
|
||||
; Inp: HL - number
|
||||
; Out: HL - quotient
|
||||
; A - remainder
|
||||
; ------------------------------------------------------
|
||||
DIV_10:
|
||||
PUSH BC
|
||||
LD BC,0x0D0A
|
||||
XOR A
|
||||
ADD HL,HL
|
||||
RLA
|
||||
ADD HL,HL
|
||||
RLA
|
||||
ADD HL,HL
|
||||
RLA
|
||||
.DDL1
|
||||
ADD HL,HL
|
||||
RLA
|
||||
CP C
|
||||
JR C,.DDL2
|
||||
SUB C
|
||||
INC L
|
||||
.DDL2
|
||||
DJNZ .DDL1
|
||||
POP BC
|
||||
RET
|
||||
ENDIF
|
||||
; ------------------------------------------------------
|
||||
; FAST_UTOA
|
||||
; Inp: HL - number
|
||||
; DE - Buffer
|
||||
; CF is set to write leading zeroes
|
||||
; Out: DE - address of strinf
|
||||
; ------------------------------------------------------
|
||||
IFUSED FAST_UTOA
|
||||
FAST_UTOA
|
||||
LD BC,0+256
|
||||
PUSH BC
|
||||
LD BC,-10+256
|
||||
PUSH BC
|
||||
INC H
|
||||
DEC H
|
||||
JR Z, .EIGHT_BIT
|
||||
|
||||
LD C,0XFF & (-100+256)
|
||||
PUSH BC
|
||||
|
||||
LD BC,-1000+256
|
||||
PUSH BC
|
||||
|
||||
LD BC,-10000
|
||||
|
||||
JR C,.LEADING_ZEROES
|
||||
|
||||
.NO_LEADING_ZEROES
|
||||
|
||||
CALL .DIVIDE
|
||||
CP '0'
|
||||
JR NZ,.WRITE
|
||||
|
||||
POP BC
|
||||
DJNZ .NO_LEADING_ZEROES
|
||||
|
||||
JR .WRITE1S
|
||||
|
||||
.LEADING_ZEROES
|
||||
CALL .DIVIDE
|
||||
|
||||
.WRITE
|
||||
LD (DE),A
|
||||
INC DE
|
||||
|
||||
POP BC
|
||||
DJNZ .LEADING_ZEROES
|
||||
|
||||
.WRITE1S
|
||||
LD A,L
|
||||
ADD A,'0'
|
||||
|
||||
LD (DE),A
|
||||
INC DE
|
||||
RET
|
||||
|
||||
.DIVIDE
|
||||
LD A,'0'-1
|
||||
|
||||
.DIVLOOP
|
||||
INC A
|
||||
ADD HL,BC
|
||||
JR C, .DIVLOOP
|
||||
|
||||
SBC HL,BC
|
||||
RET
|
||||
|
||||
.EIGHT_BIT
|
||||
LD BC,-100
|
||||
JR NC, .NO_LEADING_ZEROES
|
||||
|
||||
; write two leading zeroes to output string
|
||||
LD A,'0'
|
||||
LD (DE),A
|
||||
INC DE
|
||||
LD (DE),A
|
||||
INC DE
|
||||
|
||||
JR .LEADING_ZEROES
|
||||
ENDIF
|
||||
|
||||
; ------------------------------------------------------
|
||||
; Find char in string
|
||||
; Inp: HL - ptr to zero endeds string
|
||||
; A - char to find
|
||||
; Outp: CF=0, HL points to char if found
|
||||
; CF=1 - Not found
|
||||
; ------------------------------------------------------
|
||||
IFUSED STRCHR
|
||||
STRCHR
|
||||
PUSH BC
|
||||
STCH_NEXT
|
||||
.STCH_NEXT
|
||||
LD C,A
|
||||
LD A,(HL)
|
||||
AND A
|
||||
JR Z, STCH_N_FOUND
|
||||
JR Z, .STCH_N_FOUND
|
||||
CP C
|
||||
JR Z, STCH_FOUND
|
||||
JR Z, .STCH_FOUND
|
||||
INC HL
|
||||
JR STCH_NEXT
|
||||
STCH_N_FOUND
|
||||
.STCH_N_FOUND
|
||||
SCF
|
||||
STCH_FOUND
|
||||
.STCH_FOUND
|
||||
POP BC
|
||||
RET
|
||||
ENDIF
|
||||
@ -233,9 +383,10 @@ HEXB
|
||||
RRA
|
||||
RRA
|
||||
RRA
|
||||
CALL CONV_NIBLE
|
||||
CALL .CONV_NIBLE
|
||||
LD A,C
|
||||
CONV_NIBLE
|
||||
|
||||
.CONV_NIBLE
|
||||
AND 0x0f
|
||||
ADD A,0x90
|
||||
DAA
|
||||
@ -296,8 +447,6 @@ ADD_BACK_SLASH
|
||||
LD (HL),0x0
|
||||
RET
|
||||
|
||||
|
||||
|
||||
ENDMODULE
|
||||
|
||||
ENDIF
|
||||
81
sources/DSS/utoa.asm
Normal file
81
sources/DSS/utoa.asm
Normal file
@ -0,0 +1,81 @@
|
||||
|
||||
; ------------------------------------------------------
|
||||
; FAST_UTOA
|
||||
; Inp: HL - number
|
||||
; A - Radix 2,8,10,16
|
||||
; DE - Buffer
|
||||
; CF is set to write leading zeroes
|
||||
; Out: DE - address of strinf
|
||||
; ------------------------------------------------------
|
||||
FAST_UTOA
|
||||
LD BC,0+256
|
||||
PUSH BC
|
||||
LD BC,-10+256
|
||||
PUSH BC
|
||||
INC H
|
||||
DEC H
|
||||
JR Z, .EIGHT_BIT
|
||||
|
||||
LD C,0XFF & (-100+256)
|
||||
PUSH BC
|
||||
|
||||
LD BC,-1000+256
|
||||
PUSH BC
|
||||
|
||||
LD BC,-10000
|
||||
|
||||
JR C,.LEADING_ZEROES
|
||||
|
||||
.NO_LEADING_ZEROES
|
||||
|
||||
CALL .DIVIDE
|
||||
CP '0'
|
||||
JR NZ,.WRITE
|
||||
|
||||
POP BC
|
||||
DJNZ .NO_LEADING_ZEROES
|
||||
|
||||
JR .WRITE1S
|
||||
|
||||
.LEADING_ZEROES
|
||||
CALL .DIVIDE
|
||||
|
||||
.WRITE
|
||||
LD (DE),A
|
||||
INC DE
|
||||
|
||||
POP BC
|
||||
DJNZ .LEADING_ZEROES
|
||||
|
||||
|
||||
.WRITE1S
|
||||
LD A,L
|
||||
ADD A,'0'
|
||||
|
||||
LD (DE),A
|
||||
INC DE
|
||||
RET
|
||||
|
||||
.DIVIDE
|
||||
LD A,'0'-1
|
||||
|
||||
.DIVLOOP
|
||||
INC A
|
||||
ADD HL,BC
|
||||
JR C, .DIVLOOP
|
||||
|
||||
SBC HL,BC
|
||||
RET
|
||||
|
||||
.EIGHT_BIT
|
||||
LD BC,-100
|
||||
JR NC, .NO_LEADING_ZEROES
|
||||
|
||||
; write two leading zeroes to output string
|
||||
LD A,'0'
|
||||
LD (DE),A
|
||||
INC DE
|
||||
LD (DE),A
|
||||
INC DE
|
||||
|
||||
JR .LEADING_ZEROES
|
||||
@ -8,14 +8,13 @@
|
||||
|
||||
; Set to 1 to turn debug ON with DeZog VSCode plugin
|
||||
; Set to 0 to compile .EXE
|
||||
DEFINE DEBUG
|
||||
; DEFINE DEBUG
|
||||
|
||||
; Set to 1 to output TRACE messages
|
||||
DEFINE TRACE
|
||||
|
||||
|
||||
WM_DOWNLOAD EQU 0
|
||||
|
||||
WM_UPLOAD EQU 1
|
||||
|
||||
|
||||
@ -67,17 +66,29 @@ START
|
||||
LD SP, STACK_TOP
|
||||
ENDIF
|
||||
|
||||
PRINTLN MSG_START
|
||||
|
||||
CALL PARSE_CMD_LINE
|
||||
|
||||
CALL OPEN_LOCAL_FILE
|
||||
|
||||
CALL DISPLAY_MODE
|
||||
|
||||
CALL OPEN_LOCAL_FILE
|
||||
|
||||
IF_UPLOAD_GO DO_UPLOAD
|
||||
CALL @TFTP.BUILD_RRQ_PACKET
|
||||
JP DONE
|
||||
|
||||
DO_UPLOAD
|
||||
CALL @TFTP.BUILD_WRQ_PACKET
|
||||
|
||||
DONE
|
||||
CALL CLOSE_LOCAL_FILE
|
||||
|
||||
IFDEF DEBUG
|
||||
JP MAIN_LOOP
|
||||
ENDIF
|
||||
;IFDEF DEBUG
|
||||
LD B,0
|
||||
DSS_EXEC DSS_EXIT
|
||||
|
||||
;ENDIF
|
||||
|
||||
CALL ISA.ISA_RESET
|
||||
|
||||
@ -113,16 +124,17 @@ OK_EXIT
|
||||
; IX - points to cmd line
|
||||
; ------------------------------------------------------
|
||||
PARSE_CMD_LINE
|
||||
PUSH IX
|
||||
POP HL
|
||||
LD A,(HL)
|
||||
PUSH IX
|
||||
POP HL ; HL -> CMD Line
|
||||
LD A,(HL) ; CMD Line length
|
||||
OR A
|
||||
JR Z, OUT_USAGE_MSG
|
||||
CALL SKIP_SPACES
|
||||
INC HL ; skip length byte
|
||||
CALL @UTIL.LTRIM ; skip leading non-printable characters
|
||||
|
||||
|
||||
; check first parameter for tftp url pattern
|
||||
LD DE,TFTF_START
|
||||
LD DE,TFTF_START ; check parameter to start from 'tftp://'
|
||||
CALL @UTIL.STARTSWITH
|
||||
JR NZ,.PLC_UPLOAD
|
||||
|
||||
@ -130,7 +142,7 @@ PARSE_CMD_LINE
|
||||
|
||||
; handle parameter URL
|
||||
CALL GET_SRV_PARAMS
|
||||
CALL SKIP_SPACES
|
||||
CALL @UTIL.LTRIM ; skip spaces between parameters
|
||||
|
||||
; handle lfn
|
||||
CALL GET_LFN
|
||||
@ -143,7 +155,7 @@ PARSE_CMD_LINE
|
||||
LD (WORK_MODE),A
|
||||
|
||||
CALL GET_LFN
|
||||
CALL SKIP_SPACES
|
||||
CALL @UTIL.LTRIM
|
||||
|
||||
LD DE,TFTF_START
|
||||
CALL @UTIL.STARTSWITH
|
||||
@ -308,6 +320,7 @@ COPY_LFN
|
||||
INC (IX+0)
|
||||
|
||||
LD DE,REM_FILE
|
||||
LD B,12 ; limit filename length nnnnnnnn.exe
|
||||
.CLFN_NXT
|
||||
LD A,(DE)
|
||||
LD (HL),A
|
||||
@ -315,10 +328,7 @@ COPY_LFN
|
||||
RET Z
|
||||
INC HL
|
||||
INC DE
|
||||
JR .CLFN_NXT
|
||||
|
||||
|
||||
|
||||
DJNZ .CLFN_NXT
|
||||
|
||||
; ------------------------------------------------------
|
||||
; Open local file for upload or download
|
||||
@ -331,8 +341,8 @@ OPEN_LOCAL_FILE
|
||||
OR A
|
||||
JR NZ,.OLF_SKP_CP
|
||||
|
||||
LD HL, WIFI.RS_BUFF
|
||||
PUSH HL
|
||||
LD HL, @TMP_BUFF
|
||||
;PUSH HL
|
||||
CALL UTIL.GET_CUR_DIR
|
||||
LD DE,LOC_FILE
|
||||
LD B,128
|
||||
@ -345,25 +355,41 @@ OPEN_LOCAL_FILE
|
||||
INC DE
|
||||
DJNZ .OLF_NXT
|
||||
.OLF_EFN
|
||||
POP HL
|
||||
LD HL, @TMP_BUFF
|
||||
;POP HL
|
||||
|
||||
; HL - points to file path name
|
||||
.OLF_SKP_CP
|
||||
LD A, (WORK_MODE)
|
||||
CP WM_UPLOAD
|
||||
JR Z,.OLF_UPL
|
||||
IF_UPLOAD_GO .OLF_UPL
|
||||
|
||||
; create new file for write
|
||||
XOR A
|
||||
PUSH HL, HL
|
||||
PRINT MSG_LFN_CR
|
||||
POP HL
|
||||
CALL PRINT_FILENAME
|
||||
POP HL
|
||||
|
||||
XOR A
|
||||
PUSH HL
|
||||
LD C,DSS_CREATE_FILE
|
||||
RST DSS
|
||||
POP HL
|
||||
JR NC,.OLF_END
|
||||
CP 0x07 ; file exists?
|
||||
JP NZ,DSS_ERROR.PRINT ; print error and exit
|
||||
PUSH HL
|
||||
PRINTLN MSG_OF_EXISTS
|
||||
POP HL
|
||||
LD A,FM_WRITE
|
||||
JR .OLF_FOW
|
||||
|
||||
; open existing file for read
|
||||
.OLF_UPL
|
||||
PUSH HL, HL
|
||||
PRINT MSG_LFN_OP
|
||||
POP HL
|
||||
CALL PRINT_FILENAME
|
||||
POP HL
|
||||
LD A,FM_READ
|
||||
.OLF_FOW
|
||||
LD C,DSS_OPEN_FILE
|
||||
@ -376,11 +402,28 @@ OPEN_LOCAL_FILE
|
||||
|
||||
RET
|
||||
|
||||
PRINT_FILENAME
|
||||
DSS_EXEC DSS_PCHARS
|
||||
PRINTLN WCOMMON.LINE_END
|
||||
RET
|
||||
|
||||
|
||||
MSG_OF_EXISTS
|
||||
DB "Output file already exists!"Z
|
||||
|
||||
IFDEF TRACE
|
||||
MSG_LFN_CR
|
||||
DB "Create file: "Z
|
||||
MSG_LFN_OP
|
||||
DB "Open file: "Z
|
||||
MSG_LFN_OPEN
|
||||
DB "Local file succes open/created."Z
|
||||
DB "File successfully accessed."Z
|
||||
ENDIF
|
||||
|
||||
|
||||
; ------------------------------------------------------
|
||||
; Closes loacal file if it open
|
||||
; ------------------------------------------------------
|
||||
CLOSE_LOCAL_FILE
|
||||
LD A,(LOC_FH)
|
||||
OR A
|
||||
@ -389,28 +432,13 @@ CLOSE_LOCAL_FILE
|
||||
CALL DSS_ERROR.CHECK
|
||||
RET
|
||||
|
||||
; ------------------------------------------------------
|
||||
; Skip spaces at start of zero ended string
|
||||
; Inp: HL - pointer to string
|
||||
; Out: HL - points to first non space symbol
|
||||
; ------------------------------------------------------
|
||||
SKIP_SPACES
|
||||
LD A, (HL)
|
||||
OR A
|
||||
RET Z
|
||||
CP 0x21
|
||||
RET P
|
||||
INC HL
|
||||
JR SKIP_SPACES
|
||||
|
||||
|
||||
; ------------------------------------------------------
|
||||
; Display current working mode
|
||||
; ------------------------------------------------------
|
||||
DISPLAY_MODE
|
||||
LD A,(WORK_MODE)
|
||||
CP A,WM_UPLOAD
|
||||
JR .DM_UPLOAD
|
||||
IF_UPLOAD_GO .DM_UPLOAD
|
||||
; Download
|
||||
PRINT MSG_MODE_D
|
||||
PRINT REM_FILE
|
||||
@ -429,20 +457,6 @@ DISPLAY_MODE
|
||||
PRINTLN REM_FILE
|
||||
RET
|
||||
|
||||
MSG_MODE_D
|
||||
DB "Download file "Z
|
||||
MSG_MODE_D_S
|
||||
DB " from server "Z
|
||||
MSG_MODE_D_T
|
||||
DB " to file "Z
|
||||
|
||||
MSG_MODE_U
|
||||
DB "Upload file "Z
|
||||
MSG_MODE_U_S
|
||||
DB " to server "Z
|
||||
MSG_MODE_U_T
|
||||
DB " to file "Z
|
||||
|
||||
; ------------------------------------------------------
|
||||
; Custom messages
|
||||
; ------------------------------------------------------
|
||||
@ -454,8 +468,8 @@ MSG_ERR_CMD
|
||||
DB "Invalid command line parameters!\r\n"Z
|
||||
|
||||
MSG_HLP
|
||||
DB "\r\nUse: wtftp.exe tftp://server[:port]/filename filename - to download file from server;\r\n"
|
||||
DB " wtftp.exe filename tftp://server[:port]/filename - to upload file to server.\r\n"Z
|
||||
DB "\r\nUse:\r\n wtftp.exe tftp://server[:port]/filename filename - to download from server;\r\n"
|
||||
DB " wtftp.exe filename tftp://server[:port]/filename - to upload to server.\r\n"Z
|
||||
|
||||
MSG_TX_ERROR
|
||||
DB "Transmitter not ready"Z
|
||||
@ -477,6 +491,24 @@ MSG_ERR_RFN
|
||||
MSG_ERR_LFN
|
||||
DB "Invalid local file name!"Z
|
||||
|
||||
MSG_MODE_D
|
||||
DB "Download file "Z
|
||||
MSG_MODE_D_S
|
||||
DB " from server "Z
|
||||
MSG_MODE_D_T
|
||||
DB " to file "Z
|
||||
|
||||
MSG_MODE_U
|
||||
DB "Upload file "Z
|
||||
MSG_MODE_U_S
|
||||
DB " to server "Z
|
||||
MSG_MODE_U_T
|
||||
DB " to file "Z
|
||||
|
||||
; ------------------------------------------------------
|
||||
; Variables
|
||||
; ------------------------------------------------------
|
||||
|
||||
; Start of tftf URL
|
||||
TFTF_START
|
||||
DB "tftp://"Z
|
||||
@ -489,12 +521,12 @@ WORK_MODE
|
||||
; Name/IP of the tftp server
|
||||
SRV_NAME
|
||||
DS 128,0
|
||||
|
||||
CMDLINE
|
||||
; UDP port of the tftp server
|
||||
SRV_PORT
|
||||
DB 69,0,0,0,0,0 ; udp port number 0..65535
|
||||
|
||||
; Name of the source file
|
||||
; Name of the remote file
|
||||
REM_FILE
|
||||
DS 128,0
|
||||
|
||||
@ -506,28 +538,23 @@ LOC_FILE
|
||||
LOC_FH
|
||||
DW 0
|
||||
|
||||
; Not null if local file name contains path
|
||||
; Non zero, if local file name contains path
|
||||
HAVE_PATH
|
||||
DB 0
|
||||
|
||||
; ------------------------------------------------------
|
||||
; Custom commands
|
||||
; ------------------------------------------------------
|
||||
RX_ERR
|
||||
DB 0
|
||||
|
||||
; IFDEF DEBUG
|
||||
; CMD_TEST1 DB "ATE0\r\n"Z
|
||||
; BUFF_TEST1 DS RS_BUFF_SIZE,0
|
||||
; ENDIF
|
||||
|
||||
ENDMODULE
|
||||
; ------------------------------------------------------
|
||||
; Includes
|
||||
; ------------------------------------------------------
|
||||
|
||||
INCLUDE "wcommon.asm"
|
||||
INCLUDE "dss_error.asm"
|
||||
;INCLUDE "util.asm"
|
||||
INCLUDE "isa.asm"
|
||||
INCLUDE "tftp.asm"
|
||||
INCLUDE "esplib.asm"
|
||||
|
||||
|
||||
TMP_BUFF
|
||||
|
||||
END MAIN.START
|
||||
|
||||
Loading…
Reference in New Issue
Block a user