Browse Source

Merge pull request #360 from danwerner21/dev

ESP32 Driver updates
patch
Wayne Warthen 2 years ago
committed by GitHub
parent
commit
2d470a2a90
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 52
      Source/HBIOS/esp.asm

52
Source/HBIOS/esp.asm

@ -33,7 +33,8 @@ ESP_1_SPARE .EQU %00100000
;
; COMMAND OPCODES
;
ESP_CMD_NOP .EQU 0 ; NO OP
ESP_CMD_NOP .EQU 0 ; NO OP/SYNC
ESP_CMD_SYNC .EQU 0 ; NO OP/SYNC
ESP_0_CMD_COUT .EQU 1 ; CHAR OUT
ESP_0_CMD_CSTR .EQU 2 ; STRING OUT
ESP_0_CMD_KIN .EQU 3 ; KEY IN
@ -76,11 +77,11 @@ ESP_INIT:
;
ESP_INIT1:
CALL ESP_PRTVER
LD A,(ESP_PRES)
SET 0,A
LD (ESP_PRES),A
;
ESP_INIT2:
; DETECT SECOND ESP32 MODULE
@ -151,6 +152,7 @@ ESP_DETECT1:
RET ; DONE
;
ESP_DETECT2:
CALL ESP_SYNC
;LD A,B ; *DEBUG*
;CALL PC_SPACE ; *DEBUG*
;CALL PRTHEXBYTE ; *DEBUG*
@ -178,8 +180,8 @@ ESP_DETECT2:
; CLEAR ESP INPUT QUEUE
;
ESP_CLR:
LD B,0 ; MAX CHARS TO READ
ESP_CLR0:
; LD B,0 ; MAX CHARS TO READ /Removed DDW
;ESP_CLR0: /Removed DDW
CALL ESP_WTNBSY ; WAIT TILL NOT BUSY
RET NZ ; BAIL OUT IF TIMEOUT
IN A,(ESP_STAT) ; GET STATUS
@ -187,13 +189,28 @@ ESP_CLR0:
RET Z ; IF NOT, DONE
LD C,(IY+ESP_CFG_IO) ; ESP I/O PORT
IN A,(C) ; GET BYTE
DJNZ ESP_CLR0 ; LOOP TILL DONE
OR $FF ; SIGNAL FAILURE
JP ESP_CLR
; DJNZ ESP_CLR0 ; LOOP TILL DONE /Removed DDW
; OR $FF ; SIGNAL FAILURE /Removed DDW
; RET /Removed DDW
;
; RE-SYNC ESP (added DDW)
;
ESP_SYNC:
LD B,0 ; sync count -- WORST CASE PERFORMACE COULD BE IMPROVED BY REDUCING THIS VALUE
ESP_SYNC0:
PUSH BC
LD A,ESP_CMD_SYNC ; Sync ESP
CALL ESP_OUT ; SEND CMD OPCODE
POP BC
DJNZ ESP_SYNC0 ; LOOP TILL DONE
RET
;
; PRINT ESP VERSION STRING TO CONSOLE
;
ESP_PRTVER:
CALL ESP_SYNC
CALL ESP_CLR ; CLEAR ANY PENDING DATA
;LD DE,1000 ; SMALL DELAY HERE
;CALL VDELAY ; ... SEEMS TO HELP RELIABILITY
@ -224,13 +241,13 @@ ESP_OUT:
ESP_INWAIT:
CALL ESP_WTNBSY ; WAIT TILL NOT BUSY
CALL ESP_WTRDY ; WAIT FOR READY TO OUTPUT
; FALL THRU (GET CHAR VIA ESP_IN)
JP ESP_IN1 ; Added DDW
;
; GET BYTE FROM ESP (NON BLOCKING)
;
ESP_IN:
CALL ESP_WTNBSY ; WAIT TILL NOT BUSY
ESP_IN1:
ESP_IN1:
LD C,(IY+ESP_CFG_IO) ; ESP I/O PORT
IN A,(C) ; GET BYTE
PUSH AF ; SAVE VALUE
@ -244,7 +261,7 @@ ESP_WTNBSY:
LD B,0 ; MAX TRIES
;PUSH HL ; SAVE HL
;LD HL,0 ; MAX TRIES
ESP_WTNBSY1:
ESP_WTNBSY1:
LD C,(IY+ESP_CFG_ST) ; ESP STATUS PORT
IN A,(C) ; GET STATUS
AND (IY+ESP_CFG_BSYMSK) ; IS ESP BUSY?
@ -255,7 +272,7 @@ ESP_WTNBSY1:
;LD A,H ; CHECK FOR
;OR L ; ... TIMEOUT
;JR NZ,ESP_WTNBSY1 ; LOOP AS NEEDED
CALL PC_ASTERISK ; *DEBUG*
;CALL PC_ASTERISK ; *DEBUG*
OR $FF ; SIGNAL TIMEOUT
;ESP_WTNBSY_Z:
;POP HL ; RECOVER HL
@ -265,7 +282,7 @@ ESP_WTNBSY1:
;
ESP_WTBSY:
LD B,3 ; MAX TRIES
ESP_WTBSY1:
ESP_WTBSY1:
LD C,(IY+ESP_CFG_ST) ; ESP STATUS PORT
IN A,(C) ; GET STATUS
XOR $FF ; INVERT SO 0=BUSY
@ -307,7 +324,8 @@ ESP_WTRDY1:
AND (IY+ESP_CFG_RDYMSK) ; IS ESP READY TO OUTPUT
RET Z ; RETURN IF READY
DJNZ ESP_WTRDY1 ; ELSE LOOP
CALL PC_PERIOD ; *DEBUG*
;CALL PC_PERIOD ; *DEBUG*
CALL ESP_SYNC ; SOMETHING WENT WRONG, ENSURE SYNC (Added DDW)
OR $FF ; SIGNAL TIMEOUT
RET ; AND RETURN
;
@ -393,6 +411,7 @@ ESPCON_IN:
;
;
ESPCON_IST:
CALL ESP_CLR ; CLEAR ANY PENDING DATA (Added DDW)
LD A,ESP_0_CMD_KST ; KBD BUF STATUS
CALL ESP_OUT ; SEND CMD OPCODE
CALL ESP_INWAIT ; GET BUF SIZE
@ -423,7 +442,9 @@ ESPCON_OST:
;
;
ESPCON_INITDEV:
SYSCHKERR(ERR_NOTIMPL)
CALL ESP_CLR
CALL ESP_SYNC
; SYSCHKERR(ERR_NOTIMPL) Removed DDW
RET
;
;
@ -529,6 +550,7 @@ ESPSER_IN:
;
;
ESPSER_IST:
CALL ESP_CLR ; CLEAR ANY PENDING DATA (Added DDW)
LD A,ESP_CMD_SST ; SERIAL STATUS
CALL ESP_OUT ; SEND CMD OPCODE
CALL ESP_INWAIT ; GET BUF SIZE
@ -559,6 +581,8 @@ ESPSER_OST:
;
;
ESPSER_INITDEV:
CALL ESP_CLR
CALL ESP_SYNC
PUSH DE ; SAVE INCOMING CONFIG WORD
;
; XLATE NEW LINE MODE INTO C

Loading…
Cancel
Save