Browse Source

Preliminary Support for ESP32 Nhyodyne Module

- Initial console support for Dan Werner's ESP32 Module
pull/354/head v3.3.0-dev.33
Wayne Warthen 3 years ago
parent
commit
0395bba4f5
  1. 1
      Doc/ChangeLog.txt
  2. 2
      Source/HBIOS/Config/MBC_std.asm
  3. 2
      Source/HBIOS/cfg_duo.asm
  4. 2
      Source/HBIOS/cfg_dyno.asm
  5. 3
      Source/HBIOS/cfg_master.asm
  6. 3
      Source/HBIOS/cfg_mbc.asm
  7. 2
      Source/HBIOS/cfg_mk4.asm
  8. 2
      Source/HBIOS/cfg_n8.asm
  9. 2
      Source/HBIOS/cfg_rcz180.asm
  10. 2
      Source/HBIOS/cfg_rcz280.asm
  11. 2
      Source/HBIOS/cfg_rcz80.asm
  12. 2
      Source/HBIOS/cfg_rph.asm
  13. 2
      Source/HBIOS/cfg_s100.asm
  14. 2
      Source/HBIOS/cfg_sbc.asm
  15. 2
      Source/HBIOS/cfg_scz180.asm
  16. 2
      Source/HBIOS/cfg_z80retro.asm
  17. 2
      Source/HBIOS/cfg_zeta.asm
  18. 2
      Source/HBIOS/cfg_zeta2.asm
  19. 298
      Source/HBIOS/esp.asm
  20. 15
      Source/HBIOS/hbios.asm
  21. 1
      Source/HBIOS/hbios.inc
  22. 1
      Source/HBIOS/ppp.asm
  23. 1
      Source/HBIOS/prp.asm
  24. 2
      Source/ver.inc
  25. 2
      Source/ver.lib

1
Doc/ChangeLog.txt

@ -15,6 +15,7 @@ Version 3.3
- JBL: Added RCZ80 configuration for ColecoVision - JBL: Added RCZ80 configuration for ColecoVision
- WBW: Support for Z180 running interrupt mode 1 - WBW: Support for Z180 running interrupt mode 1
- WBW: Preliminary support for S100 Computers Z180 - WBW: Preliminary support for S100 Computers Z180
- WBW: Preliminary support for Dan Werner's ESP32 MBC Module
Version 3.2.1 Version 3.2.1
------------- -------------

2
Source/HBIOS/Config/MBC_std.asm

@ -49,6 +49,8 @@ PKDENABLE .SET TRUE ; ENABLES DSKY NG PKD DRIVER (8259)
UARTINTS .SET FALSE ; UART: INCLUDE INTERRUPT SUPPORT UNDER IM1/2/3 UARTINTS .SET FALSE ; UART: INCLUDE INTERRUPT SUPPORT UNDER IM1/2/3
;UARTCFG .SET UARTCFG | SER_RTS ;UARTCFG .SET UARTCFG | SER_RTS
; ;
ESPENABLE .SET TRUE ; ESP: ENABLE ESP32 IO BOARD DRIVER (ESP.ASM)
;
LPTENABLE .SET TRUE ; LPT: ENABLE CENTRONICS PRINTER DRIVER (LPT.ASM) LPTENABLE .SET TRUE ; LPT: ENABLE CENTRONICS PRINTER DRIVER (LPT.ASM)
; ;
CVDUMON .SET CVDUMON_CGA ; CVDU: CVDU MONITOR SETUP: CVDUMON_[NONE|CGA|EGA] CVDUMON .SET CVDUMON_CGA ; CVDU: CVDU MONITOR SETUP: CVDUMON_[NONE|CGA|EGA]

2
Source/HBIOS/cfg_duo.asm

@ -232,6 +232,8 @@ PRPCONENABLE .EQU TRUE ; PRP: ENABLE PROPIO DRIVER VIDEO/KBD SUPPORT
; ;
PPPENABLE .EQU FALSE ; PPP: ENABLE ZETA PARALLEL PORT PROPELLER BOARD DRIVER (PPP.ASM) PPPENABLE .EQU FALSE ; PPP: ENABLE ZETA PARALLEL PORT PROPELLER BOARD DRIVER (PPP.ASM)
; ;
ESPENABLE .EQU FALSE ; ESP: ENABLE ESP32 IO BOARD DRIVER (ESP.ASM)
;
HDSKENABLE .EQU FALSE ; HDSK: ENABLE SIMH HDSK DISK DRIVER (HDSK.ASM) HDSKENABLE .EQU FALSE ; HDSK: ENABLE SIMH HDSK DISK DRIVER (HDSK.ASM)
HDSKTRACE .EQU 1 ; HDSK: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) HDSKTRACE .EQU 1 ; HDSK: TRACE LEVEL (0=NO,1=ERRORS,2=ALL)
; ;

2
Source/HBIOS/cfg_dyno.asm

@ -243,6 +243,8 @@ PRPCONENABLE .EQU TRUE ; PRP: ENABLE PROPIO DRIVER VIDEO/KBD SUPPORT
; ;
PPPENABLE .EQU FALSE ; PPP: ENABLE ZETA PARALLEL PORT PROPELLER BOARD DRIVER (PPP.ASM) PPPENABLE .EQU FALSE ; PPP: ENABLE ZETA PARALLEL PORT PROPELLER BOARD DRIVER (PPP.ASM)
; ;
ESPENABLE .EQU FALSE ; ESP: ENABLE ESP32 IO BOARD DRIVER (ESP.ASM)
;
HDSKENABLE .EQU FALSE ; HDSK: ENABLE SIMH HDSK DISK DRIVER (HDSK.ASM) HDSKENABLE .EQU FALSE ; HDSK: ENABLE SIMH HDSK DISK DRIVER (HDSK.ASM)
; ;
PIOENABLE .EQU FALSE ; PIO: ENABLE ZILOG PIO DRIVER (PIO.ASM) PIOENABLE .EQU FALSE ; PIO: ENABLE ZILOG PIO DRIVER (PIO.ASM)

3
Source/HBIOS/cfg_master.asm

@ -305,6 +305,9 @@ PPPSDENABLE .EQU TRUE ; PPP: ENABLE PPP DRIVER SD CARD SUPPORT
PPPSDTRACE .EQU 1 ; PPP: SD CARD TRACE LEVEL (0=NO,1=ERRORS,2=ALL) PPPSDTRACE .EQU 1 ; PPP: SD CARD TRACE LEVEL (0=NO,1=ERRORS,2=ALL)
PPPCONENABLE .EQU TRUE ; PPP: ENABLE PPP DRIVER VIDEO/KBD SUPPORT PPPCONENABLE .EQU TRUE ; PPP: ENABLE PPP DRIVER VIDEO/KBD SUPPORT
; ;
ESPENABLE .EQU FALSE ; ESP: ENABLE ESP32 IO BOARD DRIVER (ESP.ASM)
ESPCONENABLE .EQU TRUE ; ESP: ENABLE ESP32 CONSOLE IO DRIVER VIDEO/KBD SUPPORT
;
HDSKENABLE .EQU FALSE ; HDSK: ENABLE SIMH HDSK DISK DRIVER (HDSK.ASM) HDSKENABLE .EQU FALSE ; HDSK: ENABLE SIMH HDSK DISK DRIVER (HDSK.ASM)
HDSKTRACE .EQU 1 ; HDSK: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) HDSKTRACE .EQU 1 ; HDSK: TRACE LEVEL (0=NO,1=ERRORS,2=ALL)
; ;

3
Source/HBIOS/cfg_mbc.asm

@ -229,6 +229,9 @@ PRPCONENABLE .EQU TRUE ; PRP: ENABLE PROPIO DRIVER VIDEO/KBD SUPPORT
; ;
PPPENABLE .EQU FALSE ; PPP: ENABLE ZETA PARALLEL PORT PROPELLER BOARD DRIVER (PPP.ASM) PPPENABLE .EQU FALSE ; PPP: ENABLE ZETA PARALLEL PORT PROPELLER BOARD DRIVER (PPP.ASM)
; ;
ESPENABLE .EQU FALSE ; ESP: ENABLE ESP32 IO BOARD DRIVER (ESP.ASM)
ESPCONENABLE .EQU TRUE ; ESP: ENABLE ESP32 CONSOLE IO DRIVER VIDEO/KBD SUPPORT
;
HDSKENABLE .EQU FALSE ; HDSK: ENABLE SIMH HDSK DISK DRIVER (HDSK.ASM) HDSKENABLE .EQU FALSE ; HDSK: ENABLE SIMH HDSK DISK DRIVER (HDSK.ASM)
HDSKTRACE .EQU 1 ; HDSK: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) HDSKTRACE .EQU 1 ; HDSK: TRACE LEVEL (0=NO,1=ERRORS,2=ALL)
; ;

2
Source/HBIOS/cfg_mk4.asm

@ -243,6 +243,8 @@ PPPSDENABLE .EQU TRUE ; PPP: ENABLE PPP DRIVER SD CARD SUPPORT
PPPSDTRACE .EQU 1 ; PPP: SD CARD TRACE LEVEL (0=NO,1=ERRORS,2=ALL) PPPSDTRACE .EQU 1 ; PPP: SD CARD TRACE LEVEL (0=NO,1=ERRORS,2=ALL)
PPPCONENABLE .EQU TRUE ; PPP: ENABLE PPP DRIVER VIDEO/KBD SUPPORT PPPCONENABLE .EQU TRUE ; PPP: ENABLE PPP DRIVER VIDEO/KBD SUPPORT
; ;
ESPENABLE .EQU FALSE ; ESP: ENABLE ESP32 IO BOARD DRIVER (ESP.ASM)
;
HDSKENABLE .EQU FALSE ; HDSK: ENABLE SIMH HDSK DISK DRIVER (HDSK.ASM) HDSKENABLE .EQU FALSE ; HDSK: ENABLE SIMH HDSK DISK DRIVER (HDSK.ASM)
; ;
PIOENABLE .EQU FALSE ; PIO: ENABLE ZILOG PIO DRIVER (PIO.ASM) PIOENABLE .EQU FALSE ; PIO: ENABLE ZILOG PIO DRIVER (PIO.ASM)

2
Source/HBIOS/cfg_n8.asm

@ -241,6 +241,8 @@ PRPCONENABLE .EQU TRUE ; PRP: ENABLE PROPIO DRIVER VIDEO/KBD SUPPORT
; ;
PPPENABLE .EQU FALSE ; PPP: ENABLE ZETA PARALLEL PORT PROPELLER BOARD DRIVER (PPP.ASM) PPPENABLE .EQU FALSE ; PPP: ENABLE ZETA PARALLEL PORT PROPELLER BOARD DRIVER (PPP.ASM)
; ;
ESPENABLE .EQU FALSE ; ESP: ENABLE ESP32 IO BOARD DRIVER (ESP.ASM)
;
HDSKENABLE .EQU FALSE ; HDSK: ENABLE SIMH HDSK DISK DRIVER (HDSK.ASM) HDSKENABLE .EQU FALSE ; HDSK: ENABLE SIMH HDSK DISK DRIVER (HDSK.ASM)
; ;
PIOENABLE .EQU FALSE ; PIO: ENABLE ZILOG PIO DRIVER (PIO.ASM) PIOENABLE .EQU FALSE ; PIO: ENABLE ZILOG PIO DRIVER (PIO.ASM)

2
Source/HBIOS/cfg_rcz180.asm

@ -249,6 +249,8 @@ PRPCONENABLE .EQU TRUE ; PRP: ENABLE PROPIO DRIVER VIDEO/KBD SUPPORT
; ;
PPPENABLE .EQU FALSE ; PPP: ENABLE ZETA PARALLEL PORT PROPELLER BOARD DRIVER (PPP.ASM) PPPENABLE .EQU FALSE ; PPP: ENABLE ZETA PARALLEL PORT PROPELLER BOARD DRIVER (PPP.ASM)
; ;
ESPENABLE .EQU FALSE ; ESP: ENABLE ESP32 IO BOARD DRIVER (ESP.ASM)
;
HDSKENABLE .EQU FALSE ; HDSK: ENABLE SIMH HDSK DISK DRIVER (HDSK.ASM) HDSKENABLE .EQU FALSE ; HDSK: ENABLE SIMH HDSK DISK DRIVER (HDSK.ASM)
; ;
PIOENABLE .EQU FALSE ; PIO: ENABLE ZILOG PIO DRIVER (PIO.ASM) PIOENABLE .EQU FALSE ; PIO: ENABLE ZILOG PIO DRIVER (PIO.ASM)

2
Source/HBIOS/cfg_rcz280.asm

@ -253,6 +253,8 @@ PRPCONENABLE .EQU TRUE ; PRP: ENABLE PROPIO DRIVER VIDEO/KBD SUPPORT
; ;
PPPENABLE .EQU FALSE ; PPP: ENABLE ZETA PARALLEL PORT PROPELLER BOARD DRIVER (PPP.ASM) PPPENABLE .EQU FALSE ; PPP: ENABLE ZETA PARALLEL PORT PROPELLER BOARD DRIVER (PPP.ASM)
; ;
ESPENABLE .EQU FALSE ; ESP: ENABLE ESP32 IO BOARD DRIVER (ESP.ASM)
;
HDSKENABLE .EQU FALSE ; HDSK: ENABLE SIMH HDSK DISK DRIVER (HDSK.ASM) HDSKENABLE .EQU FALSE ; HDSK: ENABLE SIMH HDSK DISK DRIVER (HDSK.ASM)
; ;
PIOENABLE .EQU FALSE ; PIO: ENABLE ZILOG PIO DRIVER (PIO.ASM) PIOENABLE .EQU FALSE ; PIO: ENABLE ZILOG PIO DRIVER (PIO.ASM)

2
Source/HBIOS/cfg_rcz80.asm

@ -247,6 +247,8 @@ PRPCONENABLE .EQU TRUE ; PRP: ENABLE PROPIO DRIVER VIDEO/KBD SUPPORT
; ;
PPPENABLE .EQU FALSE ; PPP: ENABLE ZETA PARALLEL PORT PROPELLER BOARD DRIVER (PPP.ASM) PPPENABLE .EQU FALSE ; PPP: ENABLE ZETA PARALLEL PORT PROPELLER BOARD DRIVER (PPP.ASM)
; ;
ESPENABLE .EQU FALSE ; ESP: ENABLE ESP32 IO BOARD DRIVER (ESP.ASM)
;
HDSKENABLE .EQU FALSE ; HDSK: ENABLE SIMH HDSK DISK DRIVER (HDSK.ASM) HDSKENABLE .EQU FALSE ; HDSK: ENABLE SIMH HDSK DISK DRIVER (HDSK.ASM)
; ;
PIOENABLE .EQU FALSE ; PIO: ENABLE ZILOG PIO DRIVER (PIO.ASM) PIOENABLE .EQU FALSE ; PIO: ENABLE ZILOG PIO DRIVER (PIO.ASM)

2
Source/HBIOS/cfg_rph.asm

@ -230,6 +230,8 @@ PRPCONENABLE .EQU FALSE ; PRP: ENABLE PROPIO DRIVER VIDEO/KBD SUPPORT
; ;
PPPENABLE .EQU FALSE ; PPP: ENABLE ZETA PARALLEL PORT PROPELLER BOARD DRIVER (PPP.ASM) PPPENABLE .EQU FALSE ; PPP: ENABLE ZETA PARALLEL PORT PROPELLER BOARD DRIVER (PPP.ASM)
; ;
ESPENABLE .EQU FALSE ; ESP: ENABLE ESP32 IO BOARD DRIVER (ESP.ASM)
;
HDSKENABLE .EQU FALSE ; HDSK: ENABLE SIMH HDSK DISK DRIVER (HDSK.ASM) HDSKENABLE .EQU FALSE ; HDSK: ENABLE SIMH HDSK DISK DRIVER (HDSK.ASM)
; ;
PIOENABLE .EQU FALSE ; PIO: ENABLE ZILOG PIO DRIVER (PIO.ASM) PIOENABLE .EQU FALSE ; PIO: ENABLE ZILOG PIO DRIVER (PIO.ASM)

2
Source/HBIOS/cfg_s100.asm

@ -243,6 +243,8 @@ PRPCONENABLE .EQU TRUE ; PRP: ENABLE PROPIO DRIVER VIDEO/KBD SUPPORT
; ;
PPPENABLE .EQU FALSE ; PPP: ENABLE ZETA PARALLEL PORT PROPELLER BOARD DRIVER (PPP.ASM) PPPENABLE .EQU FALSE ; PPP: ENABLE ZETA PARALLEL PORT PROPELLER BOARD DRIVER (PPP.ASM)
; ;
ESPENABLE .EQU FALSE ; ESP: ENABLE ESP32 IO BOARD DRIVER (ESP.ASM)
;
HDSKENABLE .EQU FALSE ; HDSK: ENABLE SIMH HDSK DISK DRIVER (HDSK.ASM) HDSKENABLE .EQU FALSE ; HDSK: ENABLE SIMH HDSK DISK DRIVER (HDSK.ASM)
; ;
PIOENABLE .EQU FALSE ; PIO: ENABLE ZILOG PIO DRIVER (PIO.ASM) PIOENABLE .EQU FALSE ; PIO: ENABLE ZILOG PIO DRIVER (PIO.ASM)

2
Source/HBIOS/cfg_sbc.asm

@ -228,6 +228,8 @@ PRPCONENABLE .EQU TRUE ; PRP: ENABLE PROPIO DRIVER VIDEO/KBD SUPPORT
; ;
PPPENABLE .EQU FALSE ; PPP: ENABLE ZETA PARALLEL PORT PROPELLER BOARD DRIVER (PPP.ASM) PPPENABLE .EQU FALSE ; PPP: ENABLE ZETA PARALLEL PORT PROPELLER BOARD DRIVER (PPP.ASM)
; ;
ESPENABLE .EQU FALSE ; ESP: ENABLE ESP32 IO BOARD DRIVER (ESP.ASM)
;
HDSKENABLE .EQU FALSE ; HDSK: ENABLE SIMH HDSK DISK DRIVER (HDSK.ASM) HDSKENABLE .EQU FALSE ; HDSK: ENABLE SIMH HDSK DISK DRIVER (HDSK.ASM)
HDSKTRACE .EQU 1 ; HDSK: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) HDSKTRACE .EQU 1 ; HDSK: TRACE LEVEL (0=NO,1=ERRORS,2=ALL)
; ;

2
Source/HBIOS/cfg_scz180.asm

@ -243,6 +243,8 @@ PRPCONENABLE .EQU TRUE ; PRP: ENABLE PROPIO DRIVER VIDEO/KBD SUPPORT
; ;
PPPENABLE .EQU FALSE ; PPP: ENABLE ZETA PARALLEL PORT PROPELLER BOARD DRIVER (PPP.ASM) PPPENABLE .EQU FALSE ; PPP: ENABLE ZETA PARALLEL PORT PROPELLER BOARD DRIVER (PPP.ASM)
; ;
ESPENABLE .EQU FALSE ; ESP: ENABLE ESP32 IO BOARD DRIVER (ESP.ASM)
;
HDSKENABLE .EQU FALSE ; HDSK: ENABLE SIMH HDSK DISK DRIVER (HDSK.ASM) HDSKENABLE .EQU FALSE ; HDSK: ENABLE SIMH HDSK DISK DRIVER (HDSK.ASM)
; ;
PIOENABLE .EQU FALSE ; PIO: ENABLE ZILOG PIO DRIVER (PIO.ASM) PIOENABLE .EQU FALSE ; PIO: ENABLE ZILOG PIO DRIVER (PIO.ASM)

2
Source/HBIOS/cfg_z80retro.asm

@ -203,6 +203,8 @@ PPPSDENABLE .EQU TRUE ; PPP: ENABLE PPP DRIVER SD CARD SUPPORT
PPPSDTRACE .EQU 1 ; PPP: SD CARD TRACE LEVEL (0=NO,1=ERRORS,2=ALL) PPPSDTRACE .EQU 1 ; PPP: SD CARD TRACE LEVEL (0=NO,1=ERRORS,2=ALL)
PPPCONENABLE .EQU TRUE ; PPP: ENABLE PPP DRIVER VIDEO/KBD SUPPORT PPPCONENABLE .EQU TRUE ; PPP: ENABLE PPP DRIVER VIDEO/KBD SUPPORT
; ;
ESPENABLE .EQU FALSE ; ESP: ENABLE ESP32 IO BOARD DRIVER (ESP.ASM)
;
HDSKENABLE .EQU FALSE ; HDSK: ENABLE SIMH HDSK DISK DRIVER (HDSK.ASM) HDSKENABLE .EQU FALSE ; HDSK: ENABLE SIMH HDSK DISK DRIVER (HDSK.ASM)
; ;
PIOENABLE .EQU FALSE ; PIO: ENABLE ZILOG PIO DRIVER (PIO.ASM) PIOENABLE .EQU FALSE ; PIO: ENABLE ZILOG PIO DRIVER (PIO.ASM)

2
Source/HBIOS/cfg_zeta.asm

@ -174,6 +174,8 @@ PPPSDENABLE .EQU TRUE ; PPP: ENABLE PPP DRIVER SD CARD SUPPORT
PPPSDTRACE .EQU 1 ; PPP: SD CARD TRACE LEVEL (0=NO,1=ERRORS,2=ALL) PPPSDTRACE .EQU 1 ; PPP: SD CARD TRACE LEVEL (0=NO,1=ERRORS,2=ALL)
PPPCONENABLE .EQU TRUE ; PPP: ENABLE PPP DRIVER VIDEO/KBD SUPPORT PPPCONENABLE .EQU TRUE ; PPP: ENABLE PPP DRIVER VIDEO/KBD SUPPORT
; ;
ESPENABLE .EQU FALSE ; ESP: ENABLE ESP32 IO BOARD DRIVER (ESP.ASM)
;
HDSKENABLE .EQU FALSE ; HDSK: ENABLE SIMH HDSK DISK DRIVER (HDSK.ASM) HDSKENABLE .EQU FALSE ; HDSK: ENABLE SIMH HDSK DISK DRIVER (HDSK.ASM)
; ;
PIOENABLE .EQU FALSE ; PIO: ENABLE ZILOG PIO DRIVER (PIO.ASM) PIOENABLE .EQU FALSE ; PIO: ENABLE ZILOG PIO DRIVER (PIO.ASM)

2
Source/HBIOS/cfg_zeta2.asm

@ -185,6 +185,8 @@ PPPSDENABLE .EQU TRUE ; PPP: ENABLE PPP DRIVER SD CARD SUPPORT
PPPSDTRACE .EQU 1 ; PPP: SD CARD TRACE LEVEL (0=NO,1=ERRORS,2=ALL) PPPSDTRACE .EQU 1 ; PPP: SD CARD TRACE LEVEL (0=NO,1=ERRORS,2=ALL)
PPPCONENABLE .EQU TRUE ; PPP: ENABLE PPP DRIVER VIDEO/KBD SUPPORT PPPCONENABLE .EQU TRUE ; PPP: ENABLE PPP DRIVER VIDEO/KBD SUPPORT
; ;
ESPENABLE .EQU FALSE ; ESP: ENABLE ESP32 IO BOARD DRIVER (ESP.ASM)
;
HDSKENABLE .EQU FALSE ; HDSK: ENABLE SIMH HDSK DISK DRIVER (HDSK.ASM) HDSKENABLE .EQU FALSE ; HDSK: ENABLE SIMH HDSK DISK DRIVER (HDSK.ASM)
; ;
PIOENABLE .EQU FALSE ; PIO: ENABLE ZILOG PIO DRIVER (PIO.ASM) PIOENABLE .EQU FALSE ; PIO: ENABLE ZILOG PIO DRIVER (PIO.ASM)

298
Source/HBIOS/esp.asm

@ -0,0 +1,298 @@
;
;==================================================================================================
; ESP32 DRIVER
;
; SUPPORTS DAN WERNER'S NHYODYNE (MBC) ESP32 MODULE
; https://github.com/danwerner21/nhyodyne/tree/main/Z80ESP
;==================================================================================================
;
; TODO:
;
ESP_IOBASE .EQU $9C
ESP_0_IO .EQU ESP_IOBASE + 0
ESP_1_IO .EQU ESP_IOBASE + 1
ESP_STAT .EQU ESP_IOBASE + 2
;
; ESP STATUS PORT
; MSB XX S S S S S S
; | | | | | +- ESP0 READY OUTPUT
; | | | | +--- ESP0 BUSY
; | | | +----- ESP0 SPARE
; | | +------- ESP1 READY OUTPUT
; | +--------- ESP1 BUSY
; +----------- ESP1 SPARE
;
ESP_0_RDY .EQU %00000001
ESP_0_BUSY .EQU %00000010
ESP_0_SPARE .EQU %00000100
ESP_1_RDY .EQU %00001000
ESP_1_BUSY .EQU %00010000
ESP_1_SPARE .EQU %00100000
;
; COMMAND OPCODES
;
ESP_CMD_NOP .EQU 0 ; NO OP
ESP_CMD_COUT .EQU 1 ; CHAR OUT
ESP_CMD_SOUT .EQU 2 ; STRING OUT
ESP_CMD_KIN .EQU 3 ; KEY IN
ESP_CMD_KST .EQU 4 ; KBD BUF STATUS
ESP_CMD_DISC .EQU $FF ; DISCOVER
;
; GLOBAL ESP INITIALIZATION
;
ESP_INIT:
;
CALL NEWLINE ; FORMATTING
PRTS("ESP: IO=0x$")
LD A,ESP_IOBASE
CALL PRTHEXBYTE
;
CALL ESP_DETECT
LD DE,ESP_STR_NOHW
JP NZ,WRITESTR
;
; PRINT FIRMWARE VERSION
PRTS(" F/W=$")
CALL ESP_PRTVER
;
CALL ESPCON_INIT ; CONSOLE INITIALIZATION
;
RET
;
;==================================================================================================
; ESP32 INTERFACE FUNCTIONS
;==================================================================================================
;
ESP_DETECT:
CALL ESP_CLR ; CLEAR ANY PENDING DATA
RET NZ ; IF FAILS, ASSUME NOT PRESENT
LD A,ESP_CMD_DISC ; DISCOVER COMMAND
CALL ESP_OUT ; SEND IT
LD DE,10 ; DELAY 160US
CALL VDELAY ; ... TO ENSURE OUTPUT RDY SET
IN A,(ESP_STAT) ; GET STATUS
AND ESP_0_RDY ; ISOLATE OUTPUT READY BIT
XOR ESP_0_RDY ; INVERT SO 0=FOUND
RET ; DONE
;
; CLEAR ESP INPUT QUEUE
;
ESP_CLR:
LD B,0 ; MAX CHARS TO READ
ESP_CLR0:
CALL ESP_WTNBSY ; WAIT TILL NOT BUSY
IN A,(ESP_STAT) ; GET STATUS
AND ESP_0_RDY ; IS THERE MORE DATA?
RET Z ; IF NOT, DONE
IN A,(ESP_0_IO) ; GET CHAR
DJNZ ESP_CLR0 ; LOOP TILL DONE
OR $FF ; SIGNAL FAILURE
RET
;
; PRINT ESP VERSION STRING TO CONSOLE
;
ESP_PRTVER:
CALL ESP_CLR ; CLEAR ANY PENDING DATA
LD A,ESP_CMD_DISC ; DISCOVER COMMAND
CALL ESP_OUT ; SEND IT
CALL ESP_WTRDY ; WAIT FOR READY TO OUTPUT
ESP_PRTVER1:
CALL ESP_WTNBSY ; WAIT TILL NOT BUSY
IN A,(ESP_STAT) ; GET STATUS
AND ESP_0_RDY ; ISOLATE OUTPUT READY BIT
RET Z ; DONE IF NOTHING READY
CALL ESP_IN ; GET NEXT CHAR
CALL COUT ; PRINT CHAR
JR ESP_PRTVER1 ; LOOP
;
; SEND BYTE TO ESP
;
ESP_OUT:
PUSH AF ; SAVE VALUE
CALL ESP_WTNBSY ; WAIT TILL NOT BUSY
POP AF ; POP VALUE
OUT (ESP_0_IO),A ; SEND CHARACTER
JR ESP_WTBSY ; RETURN VIA WTBSY
;
; GET BYTE FROM ESP (BLOCKING)
;
ESP_INWAIT:
CALL ESP_WTNBSY ; WAIT TILL NOT BUSY
CALL ESP_WTRDY ; WAIT FOR READY TO OUTPUT
; FALL THRU (GET CHAR VIA ESP_IN)
;
; GET BYTE FROM ESP (NON BLOCKING)
;
ESP_IN:
CALL ESP_WTNBSY ; WAIT TILL NOT BUSY
ESP_IN1:
IN A,(ESP_0_IO) ; GET BYTE
PUSH AF ; SAVE VALUE
CALL ESP_WTBSY ; WAIT TILL BUSY
POP AF ; RESTORE VALUE
RET ; AND RETURN
;
; WAIT FOR ESP TO BE NOT BUSY
;
ESP_WTNBSY:
LD B,0 ; MAX TRIES
ESP_WTNBSY1:
IN A,(ESP_STAT) ; GET STATUS
AND ESP_0_BUSY ; IS ESP BUSY?
RET Z ; RETURN IF NOT BUSY
DJNZ ESP_WTNBSY1 ; ELSE LOOP
OR $FF ; SIGNAL TIMEOUT
RET ; AND RETURN
;
; WAIT FOR ESP TO BE BUSY
;
ESP_WTBSY:
LD B,20 ; MAX TRIES
ESP_WTBSY1:
IN A,(ESP_STAT) ; GET STATUS
AND ESP_0_BUSY ; IS ESP BUSY?
XOR ESP_0_BUSY ; INVERT
RET Z ; RETURN IF BUSY
DJNZ ESP_WTBSY1 ; ELSE LOOP
OR $FF ; SIGNAL TIMEOUT
RET ; AND RETURN
;
; WAIT FOR ESP TO BE READY TO OUTPUT
;
ESP_WTRDY:
LD B,0 ; MAX TRIES
ESP_WTRDY1:
IN A,(ESP_STAT) ; GET STATUS
AND ESP_0_RDY ; IS ESP READY TO OUTPUT
XOR ESP_0_RDY ; INVERT, 0=READY
RET Z ; RETURN IF READY
DJNZ ESP_WTRDY1 ; ELSE LOOP
OR $FF ; SIGNAL TIMEOUT
RET ; AND RETURN
;
;
;
ESP_STR_NOHW .TEXT " NOT PRESENT$"
ESP_STR_UPGRADE .TEXT " !!!UPGRADE REQUIRED!!!$"
;
;==================================================================================================
; ESP32 CONSOLE DRIVER
;==================================================================================================
;
;
ESPCON_ROWS .EQU 25 ; VGA DISPLAY ROWS
ESPCON_COLS .EQU 80 ; VGA DISPLAY COLS
;
;
;
ESPCON_INIT:
;
CALL NEWLINE
PRTS("ESPCON:$")
;
; DISPLAY CONSOLE DIMENSIONS
CALL PC_SPACE
LD A,ESPCON_COLS
CALL PRTDECB
LD A,'X'
CALL COUT
LD A,ESPCON_ROWS
CALL PRTDECB
CALL PRTSTRD
.TEXT " TEXT (ANSI)$"
;
; ADD OURSELVES TO CIO DISPATCH TABLE
;
LD D,0 ; PHYSICAL UNIT IS ZERO
LD E,CIODEV_ESPCON ; DEVICE TYPE
LD BC,ESPCON_FNTBL ; BC := FUNCTION TABLE ADDRESS
CALL CIO_ADDENT ; ADD ENTRY, A := UNIT ASSIGNED
LD (HCB + HCB_CRTDEV),A ; SET OURSELVES AS THE CRT DEVICE
;
XOR A ; SIGNAL SUCCESS
RET
;
; DRIVER FUNCTION TABLE
;
ESPCON_FNTBL:
.DW ESPCON_IN
.DW ESPCON_OUT
.DW ESPCON_IST
.DW ESPCON_OST
.DW ESPCON_INITDEV
.DW ESPCON_QUERY
.DW ESPCON_DEVICE
#IF (($ - ESPCON_FNTBL) != (CIO_FNCNT * 2))
.ECHO "*** INVALID ESPCON FUNCTION TABLE ***\n"
#ENDIF
;
;
;
ESPCON_IN:
CALL ESPCON_IST
JR Z,ESPCON_IN
LD A,ESP_CMD_KIN ; KBD INPUT
CALL ESP_OUT ; SEND CMD OPCODE
CALL ESP_INWAIT ; GET KEY
LD E,A ; PUT IN E
XOR A ; SIGNAL SUCCES
RET ; AND DONE
;
;
;
ESPCON_IST:
LD A,ESP_CMD_KST ; KBD BUF STATUS
CALL ESP_OUT ; SEND CMD OPCODE
CALL ESP_INWAIT ; GET BUF SIZE
OR A ; SET FLAGS
RET Z ; AND DONE
OR A
RET
;
;
;
ESPCON_OUT:
PUSH DE
LD A,ESP_CMD_COUT ; CHAR OUT OPCODE
CALL ESP_OUT
POP DE
LD A,E
CALL ESP_OUT ; SEND CHAR VALUE
XOR A ; SIGNAL SUCCESS
RET
;
;
;
ESPCON_OST:
OR $FF ; SIGNAL OUTPUT QUEUE READY
RET ; RETURN
;
;
;
ESPCON_INITDEV:
SYSCHKERR(ERR_NOTIMPL)
RET
;
;
;
ESPCON_QUERY:
LD DE,0
LD HL,0
XOR A
RET
;
;
;
ESPCON_DEVICE:
LD D,CIODEV_ESPCON ; D := DEVICE TYPE
LD E,0 ; E := DEVICE NUM, ALWAYS 0
LD C,$BF ; C := DEVICE TYPE, 0xBF IS PROP TERM
LD H,0 ; H := 0, DRIVER HAS NO MODES
LD L,ESP_IOBASE ; L := BASE I/O ADDRESS
XOR A ; SIGNAL SUCCESS
RET
;
;=============================================================================
; DATA STORAGE
;=============================================================================
;

15
Source/HBIOS/hbios.asm

@ -3286,6 +3286,9 @@ HB_INITTBL:
#IF (PPPENABLE) #IF (PPPENABLE)
.DW PPP_INIT .DW PPP_INIT
#ENDIF #ENDIF
#IF (ESPENABLE)
.DW ESP_INIT
#ENDIF
; ;
HB_INITTBLLEN .EQU (($ - HB_INITTBL) / 2) HB_INITTBLLEN .EQU (($ - HB_INITTBL) / 2)
; ;
@ -6434,6 +6437,15 @@ SIZ_PPP .EQU $ - ORG_PPP
.ECHO " bytes.\n" .ECHO " bytes.\n"
#ENDIF #ENDIF
; ;
#IF (ESPENABLE)
ORG_ESP .EQU $
#INCLUDE "esp.asm"
SIZ_ESP .EQU $ - ORG_ESP
.ECHO "ESP occupies "
.ECHO SIZ_ESP
.ECHO " bytes.\n"
#ENDIF
;
#IF (MDENABLE) #IF (MDENABLE)
ORG_MD .EQU $ ORG_MD .EQU $
#INCLUDE "md.asm" #INCLUDE "md.asm"
@ -7104,7 +7116,7 @@ PS_PRTSC1:
RET RET
; ;
PS_PRTSC2: PS_PRTSC2:
PRTS("PropTerm$") ; ASSUME PROPELLER
PRTS("Term Module$")
CALL PC_COMMA CALL PC_COMMA
PRTS("ANSI$") PRTS("ANSI$")
RET RET
@ -7343,6 +7355,7 @@ PS_SDUF .TEXT "UF$"
PS_SDDUART .TEXT "DUART$" PS_SDDUART .TEXT "DUART$"
PS_SDZ2U .TEXT "Z2U$" PS_SDZ2U .TEXT "Z2U$"
PS_SDLPT .TEXT "LPT$" PS_SDLPT .TEXT "LPT$"
PS_SDESPCON .TEXT "ESPCON$"
; ;
; CHARACTER SUB TYPE STRINGS ; CHARACTER SUB TYPE STRINGS
; ;

1
Source/HBIOS/hbios.inc

@ -313,6 +313,7 @@ CIODEV_UF .EQU $80
CIODEV_DUART .EQU $90 CIODEV_DUART .EQU $90
CIODEV_Z2U .EQU $A0 CIODEV_Z2U .EQU $A0
CIODEV_LPT .EQU $B0 CIODEV_LPT .EQU $B0
CIODEV_ESPCON .EQU $C0
; ;
; SUB TYPES OF CHAR DEVICES ; SUB TYPES OF CHAR DEVICES
; ;

1
Source/HBIOS/ppp.asm

@ -4,7 +4,6 @@
;================================================================================================== ;==================================================================================================
; ;
; TODO: ; TODO:
; 1) ADD SUPPORT FOR DSKY
; ;
PPP_IO .EQU PPPBASE + 0 ; PPP DATA I/O (PPI PORT A) PPP_IO .EQU PPPBASE + 0 ; PPP DATA I/O (PPI PORT A)
PPP_CTL .EQU PPPBASE + 2 ; PPP CTL LINES (PPI PORT C) PPP_CTL .EQU PPPBASE + 2 ; PPP CTL LINES (PPI PORT C)

1
Source/HBIOS/prp.asm

@ -4,7 +4,6 @@
;================================================================================================== ;==================================================================================================
; ;
; TODO: ; TODO:
; 1) ADD SUPPORT FOR DSKY
; ;
PRP_IOBASE .EQU $A8 PRP_IOBASE .EQU $A8
; ;

2
Source/ver.inc

@ -2,7 +2,7 @@
#DEFINE RMN 3 #DEFINE RMN 3
#DEFINE RUP 0 #DEFINE RUP 0
#DEFINE RTP 0 #DEFINE RTP 0
#DEFINE BIOSVER "3.3.0-dev.32"
#DEFINE BIOSVER "3.3.0-dev.33"
#define rmj RMJ #define rmj RMJ
#define rmn RMN #define rmn RMN
#define rup RUP #define rup RUP

2
Source/ver.lib

@ -3,5 +3,5 @@ rmn equ 3
rup equ 0 rup equ 0
rtp equ 0 rtp equ 0
biosver macro biosver macro
db "3.3.0-dev.32"
db "3.3.0-dev.33"
endm endm

Loading…
Cancel
Save