mirror of
https://github.com/romychs/ESPKit.git
synced 2025-04-18 01:52:41 +03:00
253 lines
4.6 KiB
NASM
253 lines
4.6 KiB
NASM
; ======================================================
|
|
; WTERM terminal for Sprinter-WiFi ISA Card
|
|
; For Sprinter computer DSS
|
|
; By Roman Boykov. Copyright (c) 2024
|
|
; https://github.com/romychs
|
|
; License: BSD 3-Clause
|
|
; ======================================================
|
|
|
|
; Define to turn debug ON with DeZog VSCode plugin
|
|
;DEFINE EQU 0
|
|
|
|
; Define to output TRACE messages
|
|
DEFINE TRACE
|
|
|
|
|
|
; Version of EXE file, 1 for DSS 1.70+
|
|
EXE_VERSION EQU 1
|
|
|
|
; Timeout to wait ESP response
|
|
DEFAULT_TIMEOUT EQU 2000
|
|
|
|
;DEFDEVICE SPRINTER, 0x4000, 256, 0,1,2,3
|
|
SLDOPT COMMENT WPMEM, LOGPOINT, ASSERTION
|
|
DEVICE NOSLOT64K
|
|
|
|
IFDEF DEBUG
|
|
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
|
|
|
|
IFDEF DEBUG
|
|
; LD IX,CMD_LINE1
|
|
LD SP, STACK_TOP
|
|
JP MAIN_LOOP
|
|
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
|
|
|
|
CALL @WCOMMON.INIT_ESP
|
|
|
|
PRINTLN MSG_HLP
|
|
|
|
CALL @WIFI.UART_EMPTY_RS
|
|
|
|
MAIN_LOOP
|
|
; handle key pressed
|
|
DSS_EXEC DSS_SCANKEY
|
|
JP Z,HANDLE_RECEIVE ; if no key pressed
|
|
LD A,D
|
|
CP 0xAB
|
|
JR NZ, NO_QUIT
|
|
LD A,B
|
|
AND KB_ALT
|
|
JP NZ, OK_EXIT
|
|
|
|
NO_QUIT
|
|
|
|
OUT_CHAR
|
|
LD A, E
|
|
CP CR
|
|
JR NZ, CHK_PRINTABLE
|
|
CALL PUT_A_CHAR
|
|
LD A,LF
|
|
CALL PUT_A_CHAR
|
|
JR TX_SYMBOL
|
|
|
|
CHK_PRINTABLE
|
|
CP 0x20
|
|
JP M, HANDLE_RECEIVE ; do not print < ' '
|
|
CALL PUT_A_CHAR
|
|
|
|
; transmitt symbol
|
|
TX_SYMBOL
|
|
CALL @WIFI.UART_TX_BYTE
|
|
JP C,TX_WARN
|
|
LD A, E
|
|
CP CR
|
|
JR NZ,HANDLE_RECEIVE
|
|
; Transmitt LF after CR
|
|
LD E,LF
|
|
CALL @WIFI.UART_TX_BYTE
|
|
JP C,TX_WARN
|
|
|
|
; check receiver and handle received bytes
|
|
HANDLE_RECEIVE
|
|
; check receiver status
|
|
LD HL,REG_LSR
|
|
CALL WIFI.UART_READ
|
|
LD D,A
|
|
AND LSR_RCVE
|
|
JP NZ, RX_WARN
|
|
LD A,D
|
|
AND LSR_DR
|
|
JP Z, CHECK_FOR_END
|
|
; rx queue is not empty, read
|
|
LD HL,REG_RBR
|
|
CALL WIFI.UART_READ
|
|
LD E,A
|
|
CP CR
|
|
JR NZ, CHK_1F
|
|
; print CR+LF
|
|
CALL PUT_A_CHAR
|
|
LD A,LF
|
|
CALL PUT_A_CHAR
|
|
JP CHECK_FOR_END
|
|
|
|
; check for printable symbol, and print
|
|
CHK_1F
|
|
CP 0x20
|
|
CALL P, PUT_A_CHAR
|
|
|
|
; reset error counter if received symbol withoud error
|
|
XOR A
|
|
LD (RX_ERR),A
|
|
|
|
CHECK_FOR_END
|
|
; LD A,(Q_POS)
|
|
; CP 5
|
|
; JP Z, OK_EXITDEFDEVICE <deviceid>, <slot_size $100..$10000>, <page_count 1..1024>[, <slot_0_initial_page>[, ...]]
|
|
JP MAIN_LOOP
|
|
|
|
RX_WARN
|
|
LD C,A
|
|
LD DE,MSG_LSR_VALUE
|
|
CALL @UTIL.HEXB
|
|
PRINTLN MSG_RX_ERROR
|
|
CALL WIFI.UART_EMPTY_RS
|
|
LD HL,RX_ERR
|
|
INC (HL)
|
|
LD A,(HL)
|
|
CP 100
|
|
JP M,MAIN_LOOP
|
|
; too many RX errors
|
|
PRINTLN MSG_MANY_RX_ERROR
|
|
LD B,5
|
|
JP WCOMMON.EXIT
|
|
|
|
|
|
|
|
TX_WARN
|
|
PRINTLN MSG_TX_ERROR
|
|
JP MAIN_LOOP
|
|
|
|
PUT_A_CHAR
|
|
PUSH BC,DE
|
|
DSS_EXEC DSS_PUTCHAR
|
|
POP DE,BC
|
|
RET
|
|
|
|
; ------------------------------------------------------
|
|
; Do Some
|
|
; ------------------------------------------------------
|
|
|
|
OK_EXIT
|
|
LD B,0
|
|
JP WCOMMON.EXIT
|
|
|
|
|
|
; ------------------------------------------------------
|
|
; Custom messages
|
|
; ------------------------------------------------------
|
|
|
|
MSG_START
|
|
DB "Terminal for Sprinter-WiFi by Sprinter Team. v1.0 beta3, ", __DATE__, "\r\n",0
|
|
MSG_HLP
|
|
DB"\r\nEnter ESP AT command or Alt+x to close terminal.",0
|
|
MSG_EXIT
|
|
|
|
MSG_TX_ERROR
|
|
DB "Transmitter not ready",0
|
|
|
|
MSG_RX_ERROR
|
|
DB "Receiver error LSR: 0x"
|
|
MSG_LSR_VALUE
|
|
DB "xx",0
|
|
|
|
MSG_MANY_RX_ERROR
|
|
DB "Too many receiver errors!",0
|
|
|
|
|
|
MSG_ALT
|
|
DB "Pressed ALT+"
|
|
MSG_ALT_KEY
|
|
DB "xx",0
|
|
|
|
; TX_DATA
|
|
; DB " ",0
|
|
; ------------------------------------------------------
|
|
; Custom commands
|
|
; ------------------------------------------------------
|
|
CMD_QUIT
|
|
DB "QUIT\r",0
|
|
|
|
RX_ERR
|
|
DB 0
|
|
|
|
IFDEF DEBUG
|
|
CMD_TEST1 DB "ATE0\r\n",0
|
|
BUFF_TEST1 DS RS_BUFF_SIZE,0
|
|
ENDIF
|
|
|
|
ENDMODULE
|
|
|
|
INCLUDE "wcommon.asm"
|
|
INCLUDE "dss_error.asm"
|
|
;INCLUDE "util.asm"
|
|
INCLUDE "isa.asm"
|
|
INCLUDE "esplib.asm"
|
|
|
|
END ;MAIN.START
|