From 89b92be3f6bd3e6b10aed65c2add2f643de4b736 Mon Sep 17 00:00:00 2001 From: boykovra Date: Mon, 1 Jul 2024 20:39:19 +0300 Subject: [PATCH] debug tx-cmd subroutine --- .gitignore | 8 ++ Sources/ESPLib/dss.asm | 257 ++++++++++++++++++++++++++++++++++++++ Sources/ESPLib/esplib.asm | 53 ++++++-- Sources/ESPLib/espset.asm | 207 ++++++++++++++++++++++++++---- Sources/ESPLib/isa.asm | 13 +- Sources/ESPLib/util.asm | 21 ++-- 6 files changed, 501 insertions(+), 58 deletions(-) create mode 100644 .gitignore create mode 100644 Sources/ESPLib/dss.asm diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..142c793 --- /dev/null +++ b/.gitignore @@ -0,0 +1,8 @@ +*.exe +*.sld +*.labels +*.tmp +*.bak +*.lst +*.list +.tmp/ diff --git a/Sources/ESPLib/dss.asm b/Sources/ESPLib/dss.asm new file mode 100644 index 0000000..07876e5 --- /dev/null +++ b/Sources/ESPLib/dss.asm @@ -0,0 +1,257 @@ + ORG 0x0000 + +RESET: + JP NOT_IMPL + DS 5, 0xFF + +RST08: + JP NOT_IMPL + DS 5, 0xFF + + ORG 0x0010 +RST10: + JP DSS_HANDLER + DS 5, 0xFF + +RST18: + JP NOT_IMPL + DS 5, 0xFF + +RST20: + JP NOT_IMPL + DS 5, 0xFF + +RST28: + JP NOT_IMPL + DS 5, 0xFF + +RST30: + JP NOT_IMPL + DS 5, 0xFF + +RST38: + JP NOT_IMPL + DS 5, 0xFF + +DSS_HANDLER + + PUSH HL + PUSH BC + LD A, C + CP DSS_CURDISK + JP Z, _CURDISK + CP 0x0B + JP Z, _CREATE_FILE + CP 0x11 + JP Z, _OPEN_FILE + CP 0x12 + JP Z, _CLOSE_FILE + CP 0x13 + JP Z, _READ_FILE + CP 0x14 + JP Z, _WRITE_FILE + CP 0x19 + JP Z, _FIND_FIRST + CP 0x1D + JP Z, _CH_DIR + CP 0x1E + JP Z, _CURDIR + CP 0x5C + JP Z, _PCHARS + CP 0x41 + JP Z, _EXIT + + POP BC + POP HL + + +NOT_IMPL + LD A,0x01 + SCF + RET + +_PCHARS + LD BC, 0x9000 + +NXT_PCHAR + LD A, (HL) + OUT (C),A + INC HL + OR A + JR NZ, NXT_PCHAR + +NORM_EXIT + AND A ; CF=0 + POP BC + POP HL + RET + +BAD_EXIT + SCF + POP BC + POP HL + RET + + +_CURDISK + LD A, 3 + JP NORM_EXIT + +; Входные значения: +; HL - указатель на файловую спецификацию +; A - атрибут файла +; Выходные значения: +; A — код ошибки, если CF=1 +; A - файловый манипулятор, если CF=0 +_CREATE_FILE + JP _OPEN_FILE + +; Входные значения: +; HL - указатель на файловую спецификацию +; A - режим доступа +; A=0 чтение/запись +; A=1 чтение +; A=2 запись +; Выходные значения: +; A - код ошибки, если CF=1 +; A - файловый манипулятор, если CF=0 +CUR_FILE_MAN + DB 0x4F + +CUR_DIR + DB "\\FOLDER",0 +CUR_DIR_END +CUR_DIR_SIZE EQU CUR_DIR_END-CUR_DIR + +_OPEN_FILE + LD HL, CUR_FILE_MAN + INC (HL) + LD A, (HL) + JP NORM_EXIT + +_CLOSE_FILE + JP NORM_EXIT + +CUR_F_PTR + DW ZIP_FILE + +REMAINS_IN_ZIP + DW 0 + +; Входные значения: +; A - файловый манипулятор +; HL - адрес в памяти +; DE - количество читаемых байт +; Выходные значения: +; A - код ошибки, если CF=1 +; DE - реальное количество прочитанных байт +; если CF=0: +; A = 0 прочитаны все байты +; A = 0FFh прочитано меньшее число байт +_READ_FILE + OR A + JP Z, BAD_EXIT + PUSH DE + POP BC ; BC - bytes to read + PUSH HL + + LD HL, (CUR_F_PTR) ; HL -> IN ZIP_FILE + LD DE, ZIP_FILE_END + EX HL, DE + SUB HL, DE ; HL = remain bytes + LD (REMAINS_IN_ZIP), HL + SBC HL, BC + LD A, 0 + JR NC, NO_OUT_OF_ZIP + DEC A + LD HL,(REMAINS_IN_ZIP) + LD BC, HL + +NO_OUT_OF_ZIP + LD HL, (CUR_F_PTR) + POP DE ; DE - Buffer to write + PUSH BC + LDIR + POP DE ; DE = bytes read, A = 0 or 0xFF + LD (CUR_F_PTR), HL + + JP NORM_EXIT + + +; Входные значения: +; A - файловый манипулятор +; HL - адрес в памяти +; DE - количество записываемых байт +; Выходные значения: +; A - код ошибки, если CF=1 +; DE - реальное количество записанных байт +_WRITE_FILE + + PUSH DE + POP BC + LD DE,UNZIP_FILE + + PUSH BC + LDIR + POP DE + JP NORM_EXIT + +; Входные значения: +; HL - указатель на файловую спецификацию +; Выходные значения: +; A - код ошибки, если CF=1 +_CH_DIR + JP NORM_EXIT + + +; 1Eh (30) CURDIR (Информация о текущем каталоге) +; Входные значения: +; HL - буфер в памяти 256 байт +; Выходные значения: +; A - код ошибки, если CF=1 +_CURDIR + PUSH DE + LD DE, CUR_DIR + EX HL,DE + LD BC, CUR_DIR_SIZE + LDIR + POP DE + JP NORM_EXIT + +; Входные значения: +; HL - указатель на файловую спецификацию +; DE - рабочий буфер 44 байта, если B=0, иначе 256 байт +; A - атрибуты, используемые при поиске +; B = 0 - имя найденного файла в формате 11 байт "FilenameExt" +; B = 1 - имя найденного файла в формате DOS "filename.ext",0 +; C - 19h +; Выходные значения: +; A - код ошибки, если CF=1 +_FIND_FIRST + PUSH DE + LD HL, 33 ; offset of file name + ADD HL, DE + EX HL, DE + LD HL, ZIP_FILE_NAME + LD BC,9 + LDIR + POP DE + JP NORM_EXIT + + +_EXIT +; LOGPOINT STOPPED! + + HALT + JP _EXIT + + +ZIP_FILE_NAME + DB "file.zip",0 +ZIP_FILE + DS 1024,0 +ZIP_FILE_END +UNZIP_FILE + DS 1024,0 + + ALIGN 16384, 0 \ No newline at end of file diff --git a/Sources/ESPLib/esplib.asm b/Sources/ESPLib/esplib.asm index b813c9d..07f18ca 100644 --- a/Sources/ESPLib/esplib.asm +++ b/Sources/ESPLib/esplib.asm @@ -77,7 +77,32 @@ RES_DISABLED EQU 8 MODULE WIFI -RS_BUFF DS RS_BUFF_SIZE, 0 + +; ------------------------------------------------------ +; Find TL550C in ISA slot +; Out: CF=1 - Not found, CF=0 - ISA.ISA_SLOT found in slot +; ------------------------------------------------------ +UART_FIND + PUSH HL + XOR A + CALL UT_T_SLOT + JR Z, UF_T_FND + LD A,1 + CALL UT_T_SLOT + JR Z, UF_T_FND + SCF +UF_T_FND + POP HL + RET + +; Test slot, A - ISA Slot no. 0 or 1 +UT_T_SLOT + LD (ISA.ISA_SLOT), A + LD HL, REG_IER + CALL UART_READ + AND 0xF0 + RET + ; ------------------------------------------------------ ; Init UART device TL16C550 @@ -126,7 +151,8 @@ UART_READ LD (HL),BC JR UART_READ RX_RET - INC (HL) + INC HL + LD (RX_PTR),HL RET RX_PTR DW RX_MSG @@ -257,8 +283,10 @@ UVR_TO UVR_OK POP HL,BC IF DEBUG==1 -WAIT_MS DW 0 +WAIT_MS + DW 0 UART_WAIT_RS1 + AND A ; CF=0 ENDIF RET @@ -325,11 +353,16 @@ UART_TX_CMD ; HL - Buffer, BC - Size CALL UTIL.STRLEN CALL UART_TX_BUFFER - JR NC, UTC_RCV_NXT + JR NC, UTC_STRT_RX ; error, transmit timeout LD A, RES_TX_TIMEOUT JR UTC_RET +UTC_STRT_RX ; no transmit timeout, receive response + ; IX - pointer to begin of current line + LD IXH, D + LD IXL, E + LD BC,(BSIZE) UTC_RCV_NXT ; wait receiver ready ;LD BC,(WAIT_MS) @@ -338,15 +371,9 @@ UTC_RCV_NXT ; error, read timeout LD A, RES_RS_TIMEOUT JR UTC_RET - ; no receive timeout UTC_NO_RT - ; IX - pointer to begin of current line - LD IXH, D - LD IXL, E - LD BC,(BSIZE) -;UTC_RCV_NXT ; read symbol from tty LD HL, REG_RBR CALL UART_READ @@ -356,14 +383,11 @@ UTC_NO_RT JR Z, UTC_END ; LF - last symbol in responce LD (DE),A INC DE - ;LD BC,(BSIZE) DEC BC LD A, B OR C - ;LD (BSIZE),BC JR NZ, UTC_RCV_NXT - UTC_END XOR A LD (DE),A ; temporary mark end of string @@ -403,4 +427,7 @@ UTC_RET POP HL, DE, BC RET +; Buffer to receive response from ESP +RS_BUFF DS RS_BUFF_SIZE, 0 + ENDMODULE \ No newline at end of file diff --git a/Sources/ESPLib/espset.asm b/Sources/ESPLib/espset.asm index 0fff9fb..81415c9 100644 --- a/Sources/ESPLib/espset.asm +++ b/Sources/ESPLib/espset.asm @@ -6,17 +6,42 @@ ; Set to 1 to turn debug ON with DeZog VSCode plugin ; Set to 0 to compile .EXE -DEBUG EQU 1 +DEBUG EQU 0 +TRACE EQU 1 EXE_VERSION EQU 1 +DEFAULT_TIMEOUT EQU 2000 SLDOPT COMMENT WPMEM, LOGPOINT, ASSERTION DEVICE NOSLOT64K IF DEBUG == 1 - DS 0x8080, 0 + INCLUDE "dss.asm" + DB 0 + ALIGN 16384, 0 + DS 0x80, 0 ENDIF + MACRO SEND_CMD data + LD HL, data + CALL WIFI.UART_TX_CMD + CALL CHECK_ERROR + ENDM + + ; MACRO PRINT data + ; LD HL,data + ; LD C,DSS_PCHARS + ; RST DSS + ; ENDM + + MACRO PRINTLN data + LD HL,data + LD C,DSS_PCHARS + RST DSS + LD HL, LINE_END + RST DSS + ENDM + INCLUDE "dss.inc" INCLUDE "sprinter.inc" @@ -24,6 +49,7 @@ EXE_VERSION EQU 1 ORG 0x8080 +; ------------------------------------------------------ EXE_HEADER DB "EXE" DB EXE_VERSION ; EXE Version @@ -41,46 +67,165 @@ EXE_HEADER ORG 0x8100 @STACK_TOP - +; ------------------------------------------------------ START - ; IF DEBUG == 1 + IF DEBUG == 1 ; LD IX,CMD_LINE1 - ; ENDIF + LD SP, STACK_TOP + ENDIF + CALL ISA.ISA_RESET - LD HL,MSG_START - LD C,DSS_PCHARS - RST DSS + PRINTLN MSG_START - IF DEBUG==1 - LD HL, CMD_TEST1 - LD DE, BUFF_TEST1 - LD BC, 100 - CALL WIFI.UART_TX_CMD - ENDIF - ; PUSH IX ; IX ptr to cmd line - ; POP HL - ; INC HL ; Skip size of Command line - ; LD DE,ZIP_FILE - ; CALL GET_CMD_PARAM - ; JR C,INVALID_CMDLINE - ; LD DE,FILES_TO_ZIP - ; CALL GET_CMD_PARAM - ; JR C,INVALID_CMDLINE + CALL FIND_SWF + + ; Turn local echo Off + CALL INIT_ESP + + LD B,0 + JP EXIT + + +NO_TL_FOUND + PRINTLN MSG_SWF_NOF + LD B,2 + JP EXIT + +CHECK_ERROR + RET NC + ADD A,'0' + LD (COMM_ERROR_NO), A + PRINTLN MSG_COMM_ERROR + LD B,3 + POP HL ; ret addr reset EXIT - LD BC,DSS_EXIT + LD C,DSS_EXIT RST DSS +FIND_SWF + ; Find Sprinter-WiFi + CALL WIFI.UART_FIND + JP C, NO_TL_FOUND + LD A,(ISA.ISA_SLOT) + ADD A,'1' + LD (MSG_SLOT_NO),A + PRINTLN MSG_SWF_FOUND + LD C,DSS_PCHARS + RST DSS + RET + + +; ------------------------------------------------------ +; Init basic parameters of ESP +; ------------------------------------------------------ +INIT_ESP + LD DE, WIFI.RS_BUFF + LD BC, DEFAULT_TIMEOUT + + IF TRACE + PRINTLN MSG_ECHO_OFF + ENDIF + SEND_CMD CMD_ECHO_OFF + + IF TRACE + PRINTLN MSG_STATIOJN_MODE + ENDIF + SEND_CMD CMD_STATION_MODE + + IF TRACE + PRINTLN MSG_NO_SLEEP + ENDIF + SEND_CMD CMD_NO_SLEEP + + IF TRACE + PRINTLN MSG_SET_UART + ENDIF + SEND_CMD CMD_SET_SPEED + + IF TRACE + PRINTLN MSG_SET_OPT + ENDIF + SEND_CMD CMD_CWLAP_OPT + + RET + +; ------------------------------------------------------ +; Messages +; ------------------------------------------------------ MSG_START - DB "ESPSET for Sprinter by Romych's, (c) 2024\n\r\n\r", 0 + DB "ESP-Setup for Sprinter-WiFi by Romych's, (c) 2024\r\n", 0 + +MSG_SWF_NOF + DB "Sprinter-WiFi not found!",0 + +MSG_SWF_FOUND + DB "Sprinter-WiFi found in ISA#" +MSG_SLOT_NO + DB "n slot.",0 + +MSG_COMM_ERROR + DB "Error communication with Sprinter-WiFi #" +COMM_ERROR_NO + DB "n!",0 + +; ------------------------------------------------------ +; Debug messages +; ------------------------------------------------------ + IF TRACE + +MSG_ECHO_OFF + DB "Echo off",0 + +MSG_STATIOJN_MODE + DB "Station mode",0 + +MSG_NO_SLEEP + DB "No sleep",0 + +MSG_SET_UART + DB "Setup uart",0 + +MSG_SET_OPT + DB "Set options",0 + + ENDIF + + +; ------------------------------------------------------ +; Commands +; ------------------------------------------------------ +CMD_SET_SPEED + DB "AT+UART_CUR=115200,8,1,0,3\r\n",0 +CMD_ECHO_OFF + DB "ATE0\r\n",0 +CMD_STATION_MODE + DB "AT+CWMODE=1\r\n",0 +CMD_NO_SLEEP + DB "AT+SLEEP=0\r\n",0 +CMD_CHECK_CONN_AP + DB "AT+CWJAP?\r\n",0 +CMD_CWLAP_OPT + DB "AT+CWLAPOPT=1,23\r\n",0 +CMD_GET_AP_LIST + DB "AT+CWLAP\r\n",0 +CMD_GET_DHCP + DB "AT+CWDHCP?\r\n",0 +CMD_SET_DHCP + DB "AT+CWDHCP=1,1\r\n",0 +CMD_GET_IP + DB "AT+CIPSTA?\r\n",0 +LINE_END + DB "\r\n",0 + + IF DEBUG == 1 CMD_TEST1 DB "ATE0\r\n",0 BUFF_TEST1 DS RS_BUFF_SIZE,0 - ENDIF ENDMODULE @@ -90,3 +235,13 @@ BUFF_TEST1 DS RS_BUFF_SIZE,0 INCLUDE "esplib.asm" END MAIN.START + + ; PUSH IX ; IX ptr to cmd line + ; POP HL + ; INC HL ; Skip size of Command line + ; LD DE,ZIP_FILE + ; CALL GET_CMD_PARAM + ; JR C,INVALID_CMDLINE + ; LD DE,FILES_TO_ZIP + ; CALL GET_CMD_PARAM + ; JR C,INVALID_CMDLINE diff --git a/Sources/ESPLib/isa.asm b/Sources/ESPLib/isa.asm index 6a5e26a..19d9476 100644 --- a/Sources/ESPLib/isa.asm +++ b/Sources/ESPLib/isa.asm @@ -48,25 +48,22 @@ ISA_RESET ; Inp: A = 0 - ISA slot 0, 1 - ISA SLOT 1 ; ------------------------------------------------------ ISA_OPEN - PUSH BC - PUSH AF + PUSH AF,BC LD BC, PAGE3 IN A,(C) LD (SAVE_MMU3), A LD BC, PORT_SYSTEM LD A, 0x11 OUT (C), A - POP AF - AND A, 0x01 - RLCA - RLCA - OR A, 0xD0 ; 1101 - MAGIC NUMBER, 0100 - 0,ISA PORT, ISA SLOT, 0 +ISA_SLOT+* LD A,0x01 + SLA A + OR A, 0xD4 ; D4 - ISA1, D6 - ISA2 LD BC, PAGE3 OUT (C), A LD BC, PORT_ISA XOR A OUT (C), A - POP BC + POP BC,AF RET diff --git a/Sources/ESPLib/util.asm b/Sources/ESPLib/util.asm index 0d89d07..10f4d0e 100644 --- a/Sources/ESPLib/util.asm +++ b/Sources/ESPLib/util.asm @@ -36,13 +36,18 @@ DELAY_1MS ; Out: BC - length of string ; ------------------------------------------------------ STRLEN - PUSH DE,HL + PUSH DE,HL,HL LD BC,MAX_BUFF_SIZE XOR A CPIR POP DE SUB HL,DE ; llength of zero ended string LD BC,HL + LD A, B + OR C + JR Z, STRL_NCOR + DEC BC +STRL_NCOR POP HL,DE RET @@ -51,10 +56,9 @@ STRLEN ; Inp: HL, DE - pointers to strinngs to compare ; Out: CF=0 - equal, CF=1 - not equal ; ------------------------------------------------------ -STRCMP INCLUDE "util.asm" - INCLUDE "isa.asm" - INCLUDE "esplib.asm" - +STRCMP + PUSH DE,HL +STC_NEXT LD A, (DE) CP (HL) JR NZ, STC_NE @@ -66,14 +70,9 @@ STRCMP INCLUDE "util.asm" STC_NE SCF STC_EQ - POP BC,HL,DE + POP HL,DE RET - - - POP BC,HL,DE - RET - ENDMODULE \ No newline at end of file