wterm 1-st impl

This commit is contained in:
boykovra 2024-07-09 15:16:15 +03:00
parent 89b92be3f6
commit 2a422f7a39
12 changed files with 889 additions and 16526 deletions

File diff suppressed because it is too large Load Diff

View File

@ -1,10 +1,94 @@
{
"version": "0.2.0",
"configurations": [
"configurations": [
// {
// "type": "dezog",
// "request": "launch",
// "name": "WSET Internal Simulator",
// "remoteType": "zsim",
// "zsim": {
// "visualMemory": true,
// "memoryModel": "CUSTOM",
// "customMemory": {
// "slots": [
// {
// "name": "PAGE0",
// "range": ["0x0000","0x3FFF"],
// "banks": [{"index": [0, 255]}],
// "initialBank": 0
// },
// {
// "name": "PAGE1",
// "range": ["0x4000","0x7FFF"],
// "banks": [{"index": [0, 255]}],
// "initialBank": 1
// },
// {
// "name": "PAGE2",
// "range": ["0x8000","0xBFFF"],
// "banks": [{"index": [0, 255]}],
// "initialBank": 2
// },
// {
// "name": "PAGE3",
// "range": ["0xC000","0xFFFF"],
// "banks": [{"index": [0, 255]}],
// "initialBank": 3
// }
// ],
// "ioMmu": [
// "if (portAddress == 0x82) {",
// " bank = portValue;",
// " PAGE0 = bank;",
// "}",
// "if (portAddress == 0xA2) {",
// " bank = portValue;",
// " PAGE1 = bank;",
// "}",
// "if (portAddress == 0xC2) {",
// " bank = portValue;",
// " PAGE2 = bank;",
// "}",
// "if (portAddress == 0xE2) {",
// " bank = portValue;",
// " PAGE3 = bank;",
// "}"
// ]
// },
// "customCode": {
// "debug": false,
// "jsPath": "sim/ports.js"
// },
// },
// "sjasmplus": [
// {
// "path": "espset.sld"
// }
// ],
// "history": {
// "reverseDebugInstructionCount": 1000000,
// "spotCount": 10,
// "codeCoverageEnabled": true
// },
// "startAutomatically": false,
// "commandsAfterLaunch": [],
// "rootFolder": "${workspaceFolder}",
// "topOfStack": "STACK_TOP",
// "loadObjs": [
// {
// "path": "espset.exe",
// "start": "0x0000"
// }
// ],
// "execAddress": "0x8100",
// "smallValuesMaximum": 513,
// "tmpDir": ".tmp"
// },
{
"type": "dezog",
"request": "launch",
"name": "Internal Simulator",
"name": "WTERM Internal Simulator",
"remoteType": "zsim",
"zsim": {
"visualMemory": true,
@ -62,7 +146,7 @@
},
"sjasmplus": [
{
"path": "espset.sld"
"path": "wterm.sld"
}
],
"history": {
@ -76,7 +160,7 @@
"topOfStack": "STACK_TOP",
"loadObjs": [
{
"path": "espset.exe",
"path": "wterm.exe",
"start": "0x0000"
}
],
@ -84,5 +168,6 @@
"smallValuesMaximum": 513,
"tmpDir": ".tmp"
}
]
}

View File

@ -2,7 +2,7 @@
"version": "2.0.0",
"tasks": [
{
"label": "make (sjasmplus)",
"label": "make ESPSET (sjasmplus)",
"type": "shell",
"command": "sjasmplus",
"args": [
@ -28,7 +28,36 @@
"isDefault": true
}
},
{
{
"label": "make WTERM (sjasmplus)",
"type": "shell",
"command": "sjasmplus",
"args": [
"--sld=wterm.sld",
"--sym=wterm.labels",
"--raw=wterm.exe",
"--fullpath",
"wterm.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",
"command": "while true; do ./mame spectrum -window -debugger gdbstub -debug -debugger_port 12000 -verbose -resolution 512x384 ; sleep 2 ; done",

View File

@ -56,6 +56,24 @@ DSS_HANDLER
JP Z, _CH_DIR
CP 0x1E
JP Z, _CURDIR
CP DSS_WAITKEY
JP Z, _WAITKEY
CP DSS_ECHOKEY
JP Z, _ECHOKEY
CP DSS_SETVMOD
JP Z, _SETVMOD
CP DSS_GETVMOD
JP Z, _GETVMOD
CP low DSS_CLEAR
JP Z, _CLEAR
CP 0x5C
JP Z, _PCHARS
CP 0x41
@ -218,6 +236,17 @@ _CURDIR
POP DE
JP NORM_EXIT
_ECHOKEY
PUSH HL
LD HL,EC
LD C,DSS_PCHARS
RST DSS
POP HL
LD A,(EC)
JP NORM_EXIT
EC DB "3",0
; Входные значения:
; HL - указатель на файловую спецификацию
; DE - рабочий буфер 44 байта, если B=0, иначе 256 байт
@ -238,6 +267,63 @@ _FIND_FIRST
POP DE
JP NORM_EXIT
; Выходные значения:
; A - код символа
; D - позиционный код
; Е - ASCII код
; C - режим клавиатуры:
_WAITKEY
XOR A
LD D, A
LD C, A
LD E,65
LD A,65
JP NORM_EXIT
CUR_VMOD
DB 1
; 50h (80) SETVMOD (Выбор режима экрана)
; Входные значения:
; A - режим экрана:
; 02h - текстовый 40x32x16 цветов;
; 03h - текстовый 80x32x16 цветов;
; 81h - графический 320x256x256 цветов;
; 82h - графический 640x256x16 цветов;
; B - страница экрана 0/1
; C - 50h
; Выходные значения:
; A - код ошибки, если CF=1
_SETVMOD
LD (CUR_VMOD),A
JP NORM_EXIT
; 51h (81) GETVMOD (Получить текущий режим экрана)
; Входные значения:
; C - 51h
; Выходные значения:
; A - код ошибки, если CF=1
; A - текущий режим экрана, если CF=0
; B - страница экрана 0/1
_GETVMOD
LD A,(CUR_VMOD)
JP NORM_EXIT
; 56h (86) CLEAR (Очистка окна)
; Входные значения:
; D - строка левого верхнего угла окна
; E - столбец левого верхнего угла окна
; H - высота окна
; L - ширина окна
; B - атрибут заполнитель
; A - символ заполнитель
; C - 56h
; Выходные значения:
; нет
_CLEAR
JP NORM_EXIT
_EXIT
; LOGPOINT STOPPED!

View File

@ -20,9 +20,22 @@ DSS_FIND_NEXT EQU 0x011A
DSS_MKDIR EQU 0x1B
DSS_CHDIR EQU 0x1D
DSS_CURDIR EQU 0x1E
DSS_ECHOKEY EQU 0x32
DSS_EXIT EQU 0x41
DSS_WAITKEY EQU 0x48
DSS_SETVMOD EQU 0x50
DSS_GETVMOD EQU 0x51
DSS_CLEAR EQU 0x56
DSS_PCHARS EQU 0x5C
DSS_VMOD_T40 EQU 0x02 ; text 40x32, 16 colors
DSS_VMOD_T80 EQU 0x03 ; text 80x32, 16 colors
DSS_VMOD_G320 EQU 0x81 ; graphics 320x256, 256 colors
DSS_VMOD_G640 EQU 0x82 ; graphics 640x256, 16 colors
; DSS Error codes
E_FILE_EXISTS EQU 7
E_FILE_NOT_FOUND EQU 3

View File

@ -9,8 +9,8 @@ PORT_UART EQU 0x03E8 ; Базовый номер порта COM3
PORT_UART_A EQU ISA_BASE_A + PORT_UART ; Порты чипа UART в памяти
; UART TC16C550 Registers in memory
REG_RBR EQU PORT_UART_A + 0
REG_THR EQU PORT_UART_A + 0
REG_RBR EQU PORT_UART_A
REG_THR EQU PORT_UART_A
REG_IER EQU PORT_UART_A + 1
REG_IIR EQU PORT_UART_A + 2
REG_FCR EQU PORT_UART_A + 2
@ -19,10 +19,12 @@ REG_MCR EQU PORT_UART_A + 4
REG_LSR EQU PORT_UART_A + 5
REG_MSR EQU PORT_UART_A + 6
REG_SCR EQU PORT_UART_A + 7
REG_DLL EQU PORT_UART_A + 0
REG_DLL EQU PORT_UART_A
REG_DLM EQU PORT_UART_A + 1
REG_AFR EQU PORT_UART_A + 2
; UART TC16C550 Register bits
MCR_DTR EQU 0x01
MCR_RTS EQU 0x02
@ -77,6 +79,22 @@ RES_DISABLED EQU 8
MODULE WIFI
; -- UART Registers offset
_RBR EQU 0
_THR EQU 0
_IER EQU 1
_IIR EQU 2
_FCR EQU 2
_LCR EQU 3
_MCR EQU 4
_LSR EQU 5
_MSR EQU 6
_SCR EQU 7
_DLL EQU 0
_DLM EQU 1
_AFR EQU 2
; ------------------------------------------------------
; Find TL550C in ISA slot
@ -108,26 +126,27 @@ UT_T_SLOT
; Init UART device TL16C550
; ------------------------------------------------------
UART_INIT
PUSH AF
PUSH HL
PUSH AF, IX
CALL ISA.ISA_OPEN
LD A, FCR_TR14 | FCR_FIFO ; Enable FIFO buffer, trigger to 14 byte
LD (REG_FCR),A
LD IX, PORT_UART_A
LD A, FCR_TR8 | FCR_FIFO ; Enable FIFO buffer, trigger to 14 byte
LD (IX+_FCR),A
XOR A
LD (REG_IER), A ; Disable interrupts
LD (IX+_IER), A ; Disable interrupts
; Set 8bit word and Divisor for speed
LD A, LCR_DLAB | LCR_WL8
LD (REG_LCR), A ; Enable Baud rate latch
LD (IX+_LCR), A ; Enable Baud rate latch
LD A, DIVISOR
LD (REG_DLL), A ; 8 - 115200
LD (IX+_DLL), A ; 8 - 115200
XOR A
LD (REG_DLM), A
LD (IX+_DLM), A
LD A, LCR_WL8 ; 8bit word, disable latch
LD (REG_LCR), A
LD (IX+_LCR), A
CALL ISA.ISA_CLOSE
POP HL
POP AF
POP IX,AF
RET
; ------------------------------------------------------
@ -136,28 +155,10 @@ UART_INIT
; Out: A - value from register
; ------------------------------------------------------
UART_READ
IF DEBUG==0
CALL ISA.ISA_OPEN
LD A, (HL)
CALL ISA.ISA_CLOSE
RET
ELSE
; --- DEBUG
LD HL,(RX_PTR)
LD A,(HL)
OR A
JR NZ, RX_RET
LD BC, RX_MSG
LD (HL),BC
JR UART_READ
RX_RET
INC HL
LD (RX_PTR),HL
RET
RX_PTR DW RX_MSG
RX_MSG DB "WiFi module\r\nOK\r\n",0
ENDIF
; ------------------------------------------------------
; Write TL16C550 register
@ -174,23 +175,25 @@ UART_WRITE
; Out: CF=1 - tr not ready, CF=0 ready
; ------------------------------------------------------
UART_WAIT_TR
PUSH BC, HL
PUSH AF, BC, HL
CALL ISA.ISA_OPEN
LD BC, 200
LD BC, 100
LD HL, REG_LSR
WAIT_TR_R
WAIT_TR_BZY
LD A,(HL)
AND A, LSR_THRE
JP NZ,WAIT_TR_E
JR NZ,WAIT_TR_RDY
CALL UTIL.DELAY_1MS
DEC BC
LD A, C
OR B
JP NZ,WAIT_TR_R
JR NZ,WAIT_TR_BZY
SCF
WAIT_TR_E
WAIT_TR_RDY
CALL ISA.ISA_CLOSE
POP HL, BC
POP HL, BC, AF
RET
; ------------------------------------------------------
@ -212,7 +215,6 @@ UTB_NOT_R
; Inp: HL -> buffer, BC - size
; Out: CF=0 - Ok, CF=1 - Timeout
; ------------------------------------------------------
IF DEBUG==0
UART_TX_BUFFER
PUSH BC,DE,HL
LD DE, REG_THR
@ -237,22 +239,17 @@ UTX_EMP
CALL ISA.ISA_CLOSE
POP HL,DE,BC
RET
ELSE
; --- DEBUG
UART_TX_BUFFER
XOR A
RET
ENDIF
; ------------------------------------------------------
; Empty receiver FIFO buffer
; ------------------------------------------------------
UART_EMPTY_RS
PUSH AF
PUSH AF, HL
CALL ISA.ISA_OPEN
LD A, FCR_TR14 | FCR_RESET_RX | FCR_FIFO
LD (REG_FCR), A
LD A, FCR_TR8 | FCR_RESET_RX | FCR_FIFO
LD HL, REG_FCR
LD (HL), A
CALL ISA.ISA_CLOSE
POP AF
POP HL, AF
RET
; ------------------------------------------------------
@ -260,61 +257,50 @@ UART_EMPTY_RS
; Inp: BC - Wait ms
; Out: CF=1 - Timeout, FIFO is EMPTY
; ------------------------------------------------------
IF DEBUG==0
UART_WAIT_RS1
PUSH BC,HL
WAIT_MS+* LD BC,0x0000
JR UVR_NEXT
ENDIF
UART_WAIT_RS
PUSH BC,HL
UVR_NEXT
LD HL, REG_LSR
CALL UART_READ
AND LSR_DR
JR Z,UVR_OK
JR NZ,UVR_OK
CALL UTIL.DELAY_1MS
DEC BC
LD A,B
OR A,C
OR C
JR NZ,UVR_NEXT
UVR_TO
SCF
UVR_OK
POP HL,BC
IF DEBUG==1
WAIT_MS
DW 0
UART_WAIT_RS1
AND A ; CF=0
ENDIF
RET
; ------------------------------------------------------
; Reset ESP module
; Inp: A != 0 - Full Reset
; ------------------------------------------------------
ESP_RESET
PUSH HL, AF
PUSH AF,HL
CALL ISA.ISA_OPEN
AND A
JR Z, ESPR_SHRT
LD HL, REG_MCR
LD A, MCR_RST | MCR_RTS ; 0110b ESP -PGM=1, -RST=0, -RTS=0
LD (HL), A
CALL UTIL.DELAY
ESPR_SHRT
LD A, MCR_AFE | MCR_RTS ; 0x22 -RST = 1 -RTS=0 AutoFlow enabled
CALL UTIL.DELAY_1MS
;LD HL, REG_MCR
LD A, MCR_AFE | MCR_RTS ; 0x22 -RST = 1 -RTS=0 AutoFlow enabled
LD (HL), A
CALL ISA.ISA_CLOSE
POP AF
AND A
JR Z,ESPR_NW
LD HL,0xFFFF
LD HL,2000
CALL UTIL.DELAY
ESPR_NW
POP HL
POP HL,AF
RET
@ -427,6 +413,7 @@ UTC_RET
POP HL, DE, BC
RET
; Buffer to receive response from ESP
RS_BUFF DS RS_BUFF_SIZE, 0

View File

@ -7,8 +7,14 @@
; Set to 1 to turn debug ON with DeZog VSCode plugin
; Set to 0 to compile .EXE
DEBUG EQU 0
; Set to 1 to output TRACE messages
TRACE EQU 1
EXE_VERSION EQU 1
; Version of EXE file, 1 for DSS 1.70+
EXE_VERSION EQU 0
; Timeout to wait ESP response
DEFAULT_TIMEOUT EQU 2000
SLDOPT COMMENT WPMEM, LOGPOINT, ASSERTION
@ -22,26 +28,7 @@ DEFAULT_TIMEOUT EQU 2000
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 "macro.inc"
INCLUDE "dss.inc"
INCLUDE "sprinter.inc"
@ -74,7 +61,8 @@ START
; LD IX,CMD_LINE1
LD SP, STACK_TOP
ENDIF
CALL ISA.ISA_RESET
PRINTLN MSG_START
@ -84,15 +72,37 @@ START
; Turn local echo Off
CALL INIT_ESP
; Display main menu to make selection
MENU_AGAIN
CALL SELECT_MAIN_MENU
; Do somethink with selected item
AND A
JR Z, MENU_EXIT
DEC A
JP Z, MENU_SELECT_WIFI
DEC A
JP Z, MENU_CONFIGURE_IP
DEC A
JP Z, MENU_DISPLAY_INFO
JP MENU_AGAIN
MENU_EXIT
LD B,0
JP EXIT
MENU_SELECT_WIFI
MENU_CONFIGURE_IP
MENU_DISPLAY_INFO
JP MENU_AGAIN
NO_TL_FOUND
PRINTLN MSG_SWF_NOF
LD B,2
JP EXIT
CHECK_ERROR
RET NC
ADD A,'0'
@ -123,38 +133,69 @@ FIND_SWF
; Init basic parameters of ESP
; ------------------------------------------------------
INIT_ESP
PUSH BC, DE
LD DE, WIFI.RS_BUFF
LD BC, DEFAULT_TIMEOUT
IF TRACE
PRINTLN MSG_ECHO_OFF
ENDIF
TRACELN MSG_ECHO_OFF
SEND_CMD CMD_ECHO_OFF
IF TRACE
PRINTLN MSG_STATIOJN_MODE
ENDIF
TRACELN MSG_STATIOJN_MODE
SEND_CMD CMD_STATION_MODE
IF TRACE
PRINTLN MSG_NO_SLEEP
ENDIF
TRACELN MSG_NO_SLEEP
SEND_CMD CMD_NO_SLEEP
IF TRACE
PRINTLN MSG_SET_UART
ENDIF
TRACELN MSG_SET_UART
SEND_CMD CMD_SET_SPEED
IF TRACE
PRINTLN MSG_SET_OPT
ENDIF
TRACELN MSG_SET_OPT
SEND_CMD CMD_CWLAP_OPT
POP DE,BC
RET
; ------------------------------------------------------
; Messages
; Set DHCP mode
; Out: CF=1 if error
; ------------------------------------------------------
SET_DHCP_MODE
PUSH BC,DE
LD DE, WIFI.RS_BUFF
LD BC, DEFAULT_TIMEOUT
TRACELN MSG_SET_DHCP
SEND_CMD CMD_SET_DHCP
POP DE,BC
RET
; ------------------------------------------------------
; Output main menu to select user action
; Ret: A = selected menu item
; ------------------------------------------------------
SELECT_MAIN_MENU
PUSH BC
PRINTLN MSG_MAIN_MENU
SMM_L1
PRINT MSG_ENT_NO
; SCANF
LD C, DSS_ECHOKEY
RST DSS
SUB '0'
; Test A in range [0..3]
AND A
JP M, SMM_L1
CP 4
JP P, SMM_L1
POP BC
RET
; ------------------------------------------------------
; Messages DB "\r\n1 - Select WiFi Network\r\n"
DB "2 - Configure IP parameters\r\n"
DB "3 - Display info\r\n"
DB "0 - Exit",0
; ------------------------------------------------------
MSG_START
DB "ESP-Setup for Sprinter-WiFi by Romych's, (c) 2024\r\n", 0
@ -172,6 +213,14 @@ MSG_COMM_ERROR
COMM_ERROR_NO
DB "n!",0
MSG_MAIN_MENU
DB "\r\n1 - Select WiFi Network\r\n"
DB "2 - Configure IP parameters\r\n"
DB "3 - Display info\r\n"
DB "0 - Exit",0
MSG_ENT_NO
DB "\r\nEnter number 0..3: ",0
; ------------------------------------------------------
; Debug messages
; ------------------------------------------------------
@ -192,6 +241,9 @@ MSG_SET_UART
MSG_SET_OPT
DB "Set options",0
MSG_SET_DHCP
DB "Set DHCP mode",0
ENDIF

View File

@ -26,21 +26,17 @@ ISA_RST EQU 0x80
; Reset ISA device
; ------------------------------------------------------
ISA_RESET
PUSH AF
PUSH BC
PUSH HL
PUSH AF,BC,HL
LD BC, PORT_ISA
LD A,ISA_RST | ISA_AEN ; RESET=1 AEN=1
OUT (C), A
LD HL,2000
CALL UTIL.DELAY
CALL UTIL.DELAY_1MS
XOR A
OUT (C), A ; RESET=0 AEN=0
ADD HL,HL
LD HL,20
CALL UTIL.DELAY
POP HL
POP BC
POP AF
POP HL,BC,AF
RET
; ------------------------------------------------------

28
Sources/ESPLib/macro.inc Normal file
View File

@ -0,0 +1,28 @@
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 C,DSS_PCHARS
LD HL, WCOMMON.LINE_END
RST DSS
ENDM
MACRO TRACELN data
IF TRACE == 1
PUSH BC,DE
PRINTLN data
POP DE,BC
ENDIF
ENDM

View File

@ -7,27 +7,40 @@
; Inp: HL - number of cycles, if HL=0, then 2000
; ------------------------------------------------------
DELAY
PUSH AF
PUSH HL
PUSH AF,BC,HL
LD A,H
OR L
JP NZ,DELAY_L1
LD HL,2000
DELAY_L1:
JR NZ,DELAY_NXT
LD HL,20
DELAY_NXT
CALL SUB_DELAY
DEC HL
LD A,H
OR L
JP NZ,DELAY_L1
POP HL
POP AF
JP NZ,DELAY_NXT
POP HL,BC,AF
RET
SUB_DELAY
LD BC,400
SBD_NXT
DEC BC
LD A, B
OR C
JR NZ, SBD_NXT
RET
; TODO: Do it with timer
DELAY_1MS
PUSH HL
LD HL,100
CALL DELAY
POP HL
PUSH BC
CALL SUB_DELAY
POP BC
RET
; ------------------------------------------------------
@ -73,6 +86,63 @@ STC_EQ
POP HL,DE
RET
; ------------------------------------------------------
; Convert string to number
; Inp: DE - ptr to zero ended string
; Out: HL - Result
; ------------------------------------------------------
ATOU
PUSH BC
LD HL,0x0000
ATOU_L1
LD A,(DE)
AND A
JR Z, ATOU_LE
SUB 0x30
CP 10
JR NC, ATOU_LE
INC DE
LD B,H
LD C,L
ADD HL,HL
ADD HL,HL
ADD HL,BC
ADD HL,HL
ADD A,L
LD L,A
JR NC,ATOU_L1
INC H
JP ATOU_L1
ATOU_LE
POP BC
RET
; ------------------------------------------------------
; 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
; ------------------------------------------------------
STRCHR
PUSH BC
STCH_NEXT
LD C,A
LD A,(HL)
AND A
JR Z, STCH_N_FOUND
CP C
JR Z, STCH_FOUND
INC HL
JR STCH_NEXT
STCH_N_FOUND
SCF
STCH_FOUND
POP BC
RET
ENDMODULE

211
Sources/ESPLib/wcommon.asm Normal file
View File

@ -0,0 +1,211 @@
MODULE WCOMMON
; ------------------------------------------------------
; Ckeck for error (CF=1) print message and 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
CALL REST_VMODE
LD C,DSS_EXIT
RST DSS
; ------------------------------------------------------
; Search Sprinter WiFi card
; ------------------------------------------------------
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
RET
NO_TL_FOUND
POP BC
PRINTLN MSG_SWF_NOF
LD B,2
JP EXIT
; ------------------------------------------------------
; Store old video mode, set 80x32 and clear
; ------------------------------------------------------
INIT_VMODE
PUSH BC,DE,HL
; Store previous vmode
LD C,DSS_GETVMOD
RST DSS
LD (SAVE_VMODE),A
CP DSS_VMOD_T80
; Set vmode 80x32
JR Z, IVM_ALRDY_80
LD C,DSS_SETVMOD
LD A,DSS_VMOD_T80
RST DSS
IVM_ALRDY_80
; Clear screen
LD A,' '
LD B,0x07
LD C,DSS_CLEAR
LD HL,0x2050
LD DE,0x0000
RST DSS
POP HL,DE,BC
RET
; ------------------------------------------------------
; Restore saved video mode
; ------------------------------------------------------
REST_VMODE
PUSH BC
LD A,(SAVE_VMODE)
CP DSS_VMOD_T80
JR Z, RVM_SAME
; Restore mode
PRINTLN MSG_PRESS_AKEY
LD C, DSS_WAITKEY
RST DSS
LD C,DSS_SETVMOD
RST DSS
RVM_SAME
POP BC
RET
; ------------------------------------------------------
; Init basic parameters of ESP
; ------------------------------------------------------
INIT_ESP
PUSH BC, DE
LD DE, WIFI.RS_BUFF
LD BC, DEFAULT_TIMEOUT
TRACELN MSG_ECHO_OFF
SEND_CMD CMD_ECHO_OFF
TRACELN MSG_STATIOJN_MODE
SEND_CMD CMD_STATION_MODE
TRACELN MSG_NO_SLEEP
SEND_CMD CMD_NO_SLEEP
TRACELN MSG_SET_UART
SEND_CMD CMD_SET_SPEED
TRACELN MSG_SET_OPT
SEND_CMD CMD_CWLAP_OPT
POP DE,BC
RET
; ------------------------------------------------------
; Set DHCP mode
; Out: CF=1 if error
; ------------------------------------------------------
SET_DHCP_MODE
PUSH BC,DE
LD DE, WIFI.RS_BUFF
LD BC, DEFAULT_TIMEOUT
TRACELN MSG_SET_DHCP
SEND_CMD CMD_SET_DHCP
POP DE,BC
RET
; ------------------------------------------------------
; Messages
; ------------------------------------------------------
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
MSG_PRESS_AKEY
DB "Press any key to continue...",0
MSG_ESP_RESET
DB "Reset ESP module.",0
MSG_UART_INIT
DB "Reset UART.",0
LINE_END
DB "\r\n",0
SAVE_VMODE
DB 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
MSG_SET_DHCP
DB "Set DHCP mode",0
ENDIF
; ------------------------------------------------------
; Commands
; ------------------------------------------------------
CMD_QUIT
DB "QUIT\r",0
CMD_VERSION
DB "AT+GMR\r\n",0
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
ENDMODULE

192
Sources/ESPLib/wterm.asm Normal file
View File

@ -0,0 +1,192 @@
; ======================================================
; WTERM for SprinterWiFi for Sprinter computer
; By Romych, 2024
; https://github.com/romychs
; ======================================================
; Set to 1 to turn debug ON with DeZog VSCode plugin
; Set to 0 to compile .EXE
DEBUG EQU 1
; Set to 1 to output TRACE messages
TRACE EQU 1
; Version of EXE file, 1 for DSS 1.70+
EXE_VERSION EQU 0
; Timeout to wait ESP response
DEFAULT_TIMEOUT EQU 2000
SLDOPT COMMENT WPMEM, LOGPOINT, ASSERTION
DEVICE NOSLOT64K
IF DEBUG == 1
INCLUDE "dss.asm"
DB 0
ALIGN 16384, 0
DS 0x80, 0
ENDIF
INCLUDE "macro.inc"
INCLUDE "dss.inc"
INCLUDE "sprinter.inc"
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
IF DEBUG == 1
; LD IX,CMD_LINE1
LD SP, STACK_TOP
ENDIF
CALL ISA.ISA_RESET
CALL WCOMMON.INIT_VMODE
PRINTLN MSG_START
CALL WCOMMON.FIND_SWF
PRINTLN WCOMMON.MSG_UART_INIT
CALL WIFI.UART_INIT
PRINTLN WCOMMON.MSG_ESP_RESET
CALL WIFI.ESP_RESET
LD HL,REG_SCR
LD E,0x55
CALL WIFI.UART_WRITE
LD E, FCR_TR8 | FCR_FIFO
LD HL, REG_FCR
CALL WIFI.UART_WRITE
; Debug, dump all registers
LD BC, 0x0800
CALL DUMP_REGS
; Dump, page2
LD HL, REG_LCR
LD E, LCR_DLAB | LCR_WL8
CALL WIFI.UART_WRITE
LD BC, 0x0310
CALL DUMP_REGS
LD HL, REG_LCR
LD E, LCR_WL8
CALL WIFI.UART_WRITE
; Turn local echo Off
CALL WCOMMON.INIT_ESP
; ------------------------------------------------------
; Do Some
; ------------------------------------------------------
OK_EXIT
LD B,0
JP WCOMMON.EXIT
DUMP_REGS
LD HL, PORT_UART_A
DR_NEXT
LD DE,MSG_DR_RN
CALL HEXB
INC C
CALL WIFI.UART_READ
PUSH BC
LD C,A
LD DE,MSG_DR_RV
CALL HEXB
PUSH HL
PRINTLN MSG_DR
POP HL,BC
INC HL
DJNZ DR_NEXT
RET
MSG_DR
DB "Reg[0x"
MSG_DR_RN
DB "vv]=0x"
MSG_DR_RV
DB "vv",0
; ------------------------------------------------------
; Byte to hex,
; Inp: C
; Out: (DE)
; ------------------------------------------------------
HEXB
LD A,C
RRA
RRA
RRA
RRA
CALL CONV_NIBLE
LD A,C
CONV_NIBLE
AND 0x0f
ADD A,0x90
DAA
ADC A,0x40
DAA
LD (DE), A
INC DE
RET
; ------------------------------------------------------
; Custom messages
; ------------------------------------------------------
MSG_START
DB "WTerm terminal for Sprinter-WiFi by Romych's, (c) 2024\r\n", 0
; ------------------------------------------------------
; Custom commands
; ------------------------------------------------------
CMD_QUIT
DB "QUIT\r",0
IF DEBUG == 1
CMD_TEST1 DB "ATE0\r\n",0
BUFF_TEST1 DS RS_BUFF_SIZE,0
ENDIF
ENDMODULE
INCLUDE "wcommon.asm"
INCLUDE "util.asm"
INCLUDE "isa.asm"
INCLUDE "esplib.asm"
END MAIN.START