diff --git a/Doc/ChangeLog.txt b/Doc/ChangeLog.txt index 584a2981..7736a698 100644 --- a/Doc/ChangeLog.txt +++ b/Doc/ChangeLog.txt @@ -15,6 +15,7 @@ Version 3.3 - JBL: Added RCZ80 configuration for ColecoVision - WBW: Support for Z180 running interrupt mode 1 - WBW: Preliminary support for S100 Computers Z180 +- WBW: Preliminary support for Dan Werner's ESP32 MBC Module Version 3.2.1 ------------- diff --git a/Source/HBIOS/Config/MBC_std.asm b/Source/HBIOS/Config/MBC_std.asm index acb01161..bc7ede06 100644 --- a/Source/HBIOS/Config/MBC_std.asm +++ b/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 ;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) ; CVDUMON .SET CVDUMON_CGA ; CVDU: CVDU MONITOR SETUP: CVDUMON_[NONE|CGA|EGA] diff --git a/Source/HBIOS/cfg_duo.asm b/Source/HBIOS/cfg_duo.asm index d4e39f97..2e9c2e32 100644 --- a/Source/HBIOS/cfg_duo.asm +++ b/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) ; +ESPENABLE .EQU FALSE ; ESP: ENABLE ESP32 IO BOARD DRIVER (ESP.ASM) +; HDSKENABLE .EQU FALSE ; HDSK: ENABLE SIMH HDSK DISK DRIVER (HDSK.ASM) HDSKTRACE .EQU 1 ; HDSK: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) ; diff --git a/Source/HBIOS/cfg_dyno.asm b/Source/HBIOS/cfg_dyno.asm index f4607756..6d0b8edf 100644 --- a/Source/HBIOS/cfg_dyno.asm +++ b/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) ; +ESPENABLE .EQU FALSE ; ESP: ENABLE ESP32 IO BOARD DRIVER (ESP.ASM) +; HDSKENABLE .EQU FALSE ; HDSK: ENABLE SIMH HDSK DISK DRIVER (HDSK.ASM) ; PIOENABLE .EQU FALSE ; PIO: ENABLE ZILOG PIO DRIVER (PIO.ASM) diff --git a/Source/HBIOS/cfg_master.asm b/Source/HBIOS/cfg_master.asm index 56351c84..faa6d7a1 100644 --- a/Source/HBIOS/cfg_master.asm +++ b/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) 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) HDSKTRACE .EQU 1 ; HDSK: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) ; diff --git a/Source/HBIOS/cfg_mbc.asm b/Source/HBIOS/cfg_mbc.asm index a76a40c7..1ad4427e 100644 --- a/Source/HBIOS/cfg_mbc.asm +++ b/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) ; +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) HDSKTRACE .EQU 1 ; HDSK: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) ; diff --git a/Source/HBIOS/cfg_mk4.asm b/Source/HBIOS/cfg_mk4.asm index b43fc041..d66e31cb 100644 --- a/Source/HBIOS/cfg_mk4.asm +++ b/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) 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) ; PIOENABLE .EQU FALSE ; PIO: ENABLE ZILOG PIO DRIVER (PIO.ASM) diff --git a/Source/HBIOS/cfg_n8.asm b/Source/HBIOS/cfg_n8.asm index 1d4c11a2..154db6c8 100644 --- a/Source/HBIOS/cfg_n8.asm +++ b/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) ; +ESPENABLE .EQU FALSE ; ESP: ENABLE ESP32 IO BOARD DRIVER (ESP.ASM) +; HDSKENABLE .EQU FALSE ; HDSK: ENABLE SIMH HDSK DISK DRIVER (HDSK.ASM) ; PIOENABLE .EQU FALSE ; PIO: ENABLE ZILOG PIO DRIVER (PIO.ASM) diff --git a/Source/HBIOS/cfg_rcz180.asm b/Source/HBIOS/cfg_rcz180.asm index 8de5601f..8bd8a954 100644 --- a/Source/HBIOS/cfg_rcz180.asm +++ b/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) ; +ESPENABLE .EQU FALSE ; ESP: ENABLE ESP32 IO BOARD DRIVER (ESP.ASM) +; HDSKENABLE .EQU FALSE ; HDSK: ENABLE SIMH HDSK DISK DRIVER (HDSK.ASM) ; PIOENABLE .EQU FALSE ; PIO: ENABLE ZILOG PIO DRIVER (PIO.ASM) diff --git a/Source/HBIOS/cfg_rcz280.asm b/Source/HBIOS/cfg_rcz280.asm index d7886b3c..c3f83cc2 100644 --- a/Source/HBIOS/cfg_rcz280.asm +++ b/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) ; +ESPENABLE .EQU FALSE ; ESP: ENABLE ESP32 IO BOARD DRIVER (ESP.ASM) +; HDSKENABLE .EQU FALSE ; HDSK: ENABLE SIMH HDSK DISK DRIVER (HDSK.ASM) ; PIOENABLE .EQU FALSE ; PIO: ENABLE ZILOG PIO DRIVER (PIO.ASM) diff --git a/Source/HBIOS/cfg_rcz80.asm b/Source/HBIOS/cfg_rcz80.asm index bb18fa32..8e8b3834 100644 --- a/Source/HBIOS/cfg_rcz80.asm +++ b/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) ; +ESPENABLE .EQU FALSE ; ESP: ENABLE ESP32 IO BOARD DRIVER (ESP.ASM) +; HDSKENABLE .EQU FALSE ; HDSK: ENABLE SIMH HDSK DISK DRIVER (HDSK.ASM) ; PIOENABLE .EQU FALSE ; PIO: ENABLE ZILOG PIO DRIVER (PIO.ASM) diff --git a/Source/HBIOS/cfg_rph.asm b/Source/HBIOS/cfg_rph.asm index 14c7d3b6..083f40c7 100644 --- a/Source/HBIOS/cfg_rph.asm +++ b/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) ; +ESPENABLE .EQU FALSE ; ESP: ENABLE ESP32 IO BOARD DRIVER (ESP.ASM) +; HDSKENABLE .EQU FALSE ; HDSK: ENABLE SIMH HDSK DISK DRIVER (HDSK.ASM) ; PIOENABLE .EQU FALSE ; PIO: ENABLE ZILOG PIO DRIVER (PIO.ASM) diff --git a/Source/HBIOS/cfg_s100.asm b/Source/HBIOS/cfg_s100.asm index b0de78e1..485e7be4 100644 --- a/Source/HBIOS/cfg_s100.asm +++ b/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) ; +ESPENABLE .EQU FALSE ; ESP: ENABLE ESP32 IO BOARD DRIVER (ESP.ASM) +; HDSKENABLE .EQU FALSE ; HDSK: ENABLE SIMH HDSK DISK DRIVER (HDSK.ASM) ; PIOENABLE .EQU FALSE ; PIO: ENABLE ZILOG PIO DRIVER (PIO.ASM) diff --git a/Source/HBIOS/cfg_sbc.asm b/Source/HBIOS/cfg_sbc.asm index 70f548fb..8185e606 100644 --- a/Source/HBIOS/cfg_sbc.asm +++ b/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) ; +ESPENABLE .EQU FALSE ; ESP: ENABLE ESP32 IO BOARD DRIVER (ESP.ASM) +; HDSKENABLE .EQU FALSE ; HDSK: ENABLE SIMH HDSK DISK DRIVER (HDSK.ASM) HDSKTRACE .EQU 1 ; HDSK: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) ; diff --git a/Source/HBIOS/cfg_scz180.asm b/Source/HBIOS/cfg_scz180.asm index 77fea0e0..77a8c924 100644 --- a/Source/HBIOS/cfg_scz180.asm +++ b/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) ; +ESPENABLE .EQU FALSE ; ESP: ENABLE ESP32 IO BOARD DRIVER (ESP.ASM) +; HDSKENABLE .EQU FALSE ; HDSK: ENABLE SIMH HDSK DISK DRIVER (HDSK.ASM) ; PIOENABLE .EQU FALSE ; PIO: ENABLE ZILOG PIO DRIVER (PIO.ASM) diff --git a/Source/HBIOS/cfg_z80retro.asm b/Source/HBIOS/cfg_z80retro.asm index 09e3fb0e..ad7ac8f0 100644 --- a/Source/HBIOS/cfg_z80retro.asm +++ b/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) 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) ; PIOENABLE .EQU FALSE ; PIO: ENABLE ZILOG PIO DRIVER (PIO.ASM) diff --git a/Source/HBIOS/cfg_zeta.asm b/Source/HBIOS/cfg_zeta.asm index c08ebe64..e96cdc93 100644 --- a/Source/HBIOS/cfg_zeta.asm +++ b/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) 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) ; PIOENABLE .EQU FALSE ; PIO: ENABLE ZILOG PIO DRIVER (PIO.ASM) diff --git a/Source/HBIOS/cfg_zeta2.asm b/Source/HBIOS/cfg_zeta2.asm index 586409ba..4d3c2eb1 100644 --- a/Source/HBIOS/cfg_zeta2.asm +++ b/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) 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) ; PIOENABLE .EQU FALSE ; PIO: ENABLE ZILOG PIO DRIVER (PIO.ASM) diff --git a/Source/HBIOS/esp.asm b/Source/HBIOS/esp.asm new file mode 100644 index 00000000..1b2fedb1 --- /dev/null +++ b/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 +;============================================================================= +; diff --git a/Source/HBIOS/hbios.asm b/Source/HBIOS/hbios.asm index 7056487f..fcddd3df 100644 --- a/Source/HBIOS/hbios.asm +++ b/Source/HBIOS/hbios.asm @@ -3286,6 +3286,9 @@ HB_INITTBL: #IF (PPPENABLE) .DW PPP_INIT #ENDIF +#IF (ESPENABLE) + .DW ESP_INIT +#ENDIF ; HB_INITTBLLEN .EQU (($ - HB_INITTBL) / 2) ; @@ -6434,6 +6437,15 @@ SIZ_PPP .EQU $ - ORG_PPP .ECHO " bytes.\n" #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) ORG_MD .EQU $ #INCLUDE "md.asm" @@ -7104,7 +7116,7 @@ PS_PRTSC1: RET ; PS_PRTSC2: - PRTS("PropTerm$") ; ASSUME PROPELLER + PRTS("Term Module$") CALL PC_COMMA PRTS("ANSI$") RET @@ -7343,6 +7355,7 @@ PS_SDUF .TEXT "UF$" PS_SDDUART .TEXT "DUART$" PS_SDZ2U .TEXT "Z2U$" PS_SDLPT .TEXT "LPT$" +PS_SDESPCON .TEXT "ESPCON$" ; ; CHARACTER SUB TYPE STRINGS ; diff --git a/Source/HBIOS/hbios.inc b/Source/HBIOS/hbios.inc index a1c0481c..c5b12932 100644 --- a/Source/HBIOS/hbios.inc +++ b/Source/HBIOS/hbios.inc @@ -313,6 +313,7 @@ CIODEV_UF .EQU $80 CIODEV_DUART .EQU $90 CIODEV_Z2U .EQU $A0 CIODEV_LPT .EQU $B0 +CIODEV_ESPCON .EQU $C0 ; ; SUB TYPES OF CHAR DEVICES ; diff --git a/Source/HBIOS/ppp.asm b/Source/HBIOS/ppp.asm index 5d3345a7..a71369bd 100644 --- a/Source/HBIOS/ppp.asm +++ b/Source/HBIOS/ppp.asm @@ -4,7 +4,6 @@ ;================================================================================================== ; ; TODO: -; 1) ADD SUPPORT FOR DSKY ; PPP_IO .EQU PPPBASE + 0 ; PPP DATA I/O (PPI PORT A) PPP_CTL .EQU PPPBASE + 2 ; PPP CTL LINES (PPI PORT C) diff --git a/Source/HBIOS/prp.asm b/Source/HBIOS/prp.asm index 6e18d0d3..6eb7f39e 100644 --- a/Source/HBIOS/prp.asm +++ b/Source/HBIOS/prp.asm @@ -4,7 +4,6 @@ ;================================================================================================== ; ; TODO: -; 1) ADD SUPPORT FOR DSKY ; PRP_IOBASE .EQU $A8 ; diff --git a/Source/ver.inc b/Source/ver.inc index c71aee66..14e91216 100644 --- a/Source/ver.inc +++ b/Source/ver.inc @@ -2,7 +2,7 @@ #DEFINE RMN 3 #DEFINE RUP 0 #DEFINE RTP 0 -#DEFINE BIOSVER "3.3.0-dev.32" +#DEFINE BIOSVER "3.3.0-dev.33" #define rmj RMJ #define rmn RMN #define rup RUP diff --git a/Source/ver.lib b/Source/ver.lib index 7068f7ca..69b8f659 100644 --- a/Source/ver.lib +++ b/Source/ver.lib @@ -3,5 +3,5 @@ rmn equ 3 rup equ 0 rtp equ 0 biosver macro - db "3.3.0-dev.32" + db "3.3.0-dev.33" endm