Browse Source

Add SROM (Serial ROM) Utility

pull/360/head v3.3.0-dev.49
Wayne Warthen 2 years ago
parent
commit
e69caf5059
  1. 2
      Source/Apps/Test/I2C/Build.cmd
  2. 2
      Source/Apps/Test/I2C/Makefile
  3. 1696
      Source/Apps/Test/I2C/srom.asm
  4. 74
      Source/HBIOS/esp.asm
  5. 2
      Source/HBIOS/hbios.asm
  6. 1
      Source/HBIOS/pkd.asm
  7. 2
      Source/ver.inc
  8. 2
      Source/ver.lib

2
Source/Apps/Test/I2C/Build.cmd

@ -8,6 +8,8 @@ set TASMTABS=%TOOLS%\tasm32
tasm -t180 -g3 -fFF i2cscan.asm i2cscan.com i2cscan.lst || exit /b tasm -t180 -g3 -fFF i2cscan.asm i2cscan.com i2cscan.lst || exit /b
tasm -t180 -g3 -fFF rtcds7.asm rtcds7.com rtcds7.lst || exit /b tasm -t180 -g3 -fFF rtcds7.asm rtcds7.com rtcds7.lst || exit /b
tasm -t180 -g3 -fFF i2clcd.asm i2clcd.com i2clcd.lst || exit /b tasm -t180 -g3 -fFF i2clcd.asm i2clcd.com i2clcd.lst || exit /b
tasm -t80 -g3 -ff srom.asm srom.com srom.lst || exit /b
copy /Y i2c*.com ..\..\..\..\Binary\Apps\Test\ || exit /b copy /Y i2c*.com ..\..\..\..\Binary\Apps\Test\ || exit /b
copy /Y rtcds7*.com ..\..\..\..\Binary\Apps\Test\ || exit /b copy /Y rtcds7*.com ..\..\..\..\Binary\Apps\Test\ || exit /b
copy /Y srom.com ..\..\..\..\Binary\Apps\Test\ || exit /b

2
Source/Apps/Test/I2C/Makefile

@ -1,4 +1,4 @@
OBJECTS = i2cscan.com rtcds7.com i2clcd.com
OBJECTS = i2cscan.com rtcds7.com i2clcd.com srom.com
DEST = ../../../../Binary/Apps/Test/ DEST = ../../../../Binary/Apps/Test/
TOOLS = ../../../../Tools TOOLS = ../../../../Tools

1696
Source/Apps/Test/I2C/srom.asm

File diff suppressed because it is too large

74
Source/HBIOS/esp.asm

@ -8,7 +8,7 @@
; ;
; TODO: ; TODO:
; - CLEAR CONSOLE SCREEN AT INITIALIZATION ; - CLEAR CONSOLE SCREEN AT INITIALIZATION
; - INITIALIZE BAUD/MODE OF SERIAL INTERFACES AT INITIALIZATION
; - INITIALIZE BAUD/MODE OF SERIAL INTERFACES AT INITIALIZATION?
; ;
ESP_IOBASE .EQU $9C ESP_IOBASE .EQU $9C
ESP_0_IO .EQU ESP_IOBASE + 0 ESP_0_IO .EQU ESP_IOBASE + 0
@ -126,19 +126,52 @@ ESP_INIT6:
;================================================================================================== ;==================================================================================================
; ;
ESP_DETECT: ESP_DETECT:
; TRY TO DETECT IF PORT IS FLOATING AND
; FAIL DETECTION IF SO
LD C,(IY+ESP_CFG_ST) ; ESP STATUS PORT
IN A,(C) ; READ IT
;CALL PC_SPACE ; *DEBUG*
;CALL PRTHEXBYTE ; *DEBUG*
AND %11100000 ; ISOLATE TOP 3 BITS
CP $00 ; ALWAYS ZERO IF PRESENT
RET NZ ; ABORT ON FAILURE
;
; ESP32 PROCESSOR MAY TAKE A FEW SECONDS TO START UP, SO
; HERE WE WAIT FOR BUSY TO CLEAR WITH ABOUT A 5 SECOND TIMEOUT
LD B,0 ; LOOP UP TO 256 TIMES
LD C,(IY+ESP_CFG_ST) ; ESP STATUS PORT
ESP_DETECT1:
IN A,(C) ; GET STATUS
AND (IY+ESP_CFG_BSYMSK) ; IS ESP BUSY?
JR Z,ESP_DETECT2 ; MOVE ALONG IF NOT BUSY
LD DE,1500 ; 1500 * 16US = 24MS
CALL VDELAY ; DELAY
DJNZ ESP_DETECT1 ; LOOP
OR $FF ; SIGNAL FAILURE
RET ; DONE
;
ESP_DETECT2:
;LD A,B ; *DEBUG*
;CALL PC_SPACE ; *DEBUG*
;CALL PRTHEXBYTE ; *DEBUG*
CALL ESP_CLR ; CLEAR ANY PENDING DATA CALL ESP_CLR ; CLEAR ANY PENDING DATA
RET NZ ; IF FAILS, ASSUME NOT PRESENT
LD A,ESP_CMD_DISC ; DISCOVER COMMAND LD A,ESP_CMD_DISC ; DISCOVER COMMAND
CALL ESP_OUT ; SEND IT CALL ESP_OUT ; SEND IT
; ;
; LOOK FOR SIGNATURE STARTING WITH "ESP" ; LOOK FOR SIGNATURE STARTING WITH "ESP"
CALL ESP_INWAIT ; ATTEMPT TO GET CHAR CALL ESP_INWAIT ; ATTEMPT TO GET CHAR
;CALL PC_SPACE ; *DEBUG*
;CALL PRTHEXBYTE ; *DEBUG*
CP 'E' CP 'E'
RET NZ RET NZ
CALL ESP_INWAIT ; ATTEMPT TO GET CHAR CALL ESP_INWAIT ; ATTEMPT TO GET CHAR
;CALL PC_SPACE ; *DEBUG*
;CALL PRTHEXBYTE ; *DEBUG*
CP 'S' CP 'S'
RET NZ RET NZ
CALL ESP_INWAIT ; ATTEMPT TO GET CHAR CALL ESP_INWAIT ; ATTEMPT TO GET CHAR
;CALL PC_SPACE ; *DEBUG*
;CALL PRTHEXBYTE ; *DEBUG*
CP 'P' CP 'P'
RET RET
; ;
@ -162,13 +195,14 @@ ESP_CLR0:
; ;
ESP_PRTVER: ESP_PRTVER:
CALL ESP_CLR ; CLEAR ANY PENDING DATA CALL ESP_CLR ; CLEAR ANY PENDING DATA
;LD DE,1000 ; SMALL DELAY HERE
;CALL VDELAY ; ... SEEMS TO HELP RELIABILITY
LD A,ESP_CMD_DISC ; DISCOVER COMMAND LD A,ESP_CMD_DISC ; DISCOVER COMMAND
CALL ESP_OUT ; SEND IT CALL ESP_OUT ; SEND IT
CALL ESP_WTRDY ; WAIT FOR READY TO OUTPUT CALL ESP_WTRDY ; WAIT FOR READY TO OUTPUT
ESP_PRTVER1: ESP_PRTVER1:
CALL ESP_WTNBSY ; WAIT TILL NOT BUSY CALL ESP_WTNBSY ; WAIT TILL NOT BUSY
IN A,(ESP_STAT) ; GET STATUS IN A,(ESP_STAT) ; GET STATUS
;AND ESP_0_RDY ; ISOLATE OUTPUT READY BIT
AND (IY+ESP_CFG_RDYMSK) ; ISOLATE OUTPUT READY BIT AND (IY+ESP_CFG_RDYMSK) ; ISOLATE OUTPUT READY BIT
RET Z ; DONE IF NOTHING READY RET Z ; DONE IF NOTHING READY
CALL ESP_IN ; GET NEXT CHAR CALL ESP_IN ; GET NEXT CHAR
@ -208,19 +242,29 @@ ESP_IN1:
; ;
ESP_WTNBSY: ESP_WTNBSY:
LD B,0 ; MAX TRIES 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 LD C,(IY+ESP_CFG_ST) ; ESP STATUS PORT
IN A,(C) ; GET STATUS IN A,(C) ; GET STATUS
AND (IY+ESP_CFG_BSYMSK) ; IS ESP BUSY? AND (IY+ESP_CFG_BSYMSK) ; IS ESP BUSY?
RET Z ; RETURN IF NOT BUSY RET Z ; RETURN IF NOT BUSY
;JR Z,ESP_WTNBSY_Z ; RETURN IF NOT BUSY
DJNZ ESP_WTNBSY1 ; ELSE LOOP DJNZ ESP_WTNBSY1 ; ELSE LOOP
;DEC HL ; DEC LOOP COUNTER
;LD A,H ; CHECK FOR
;OR L ; ... TIMEOUT
;JR NZ,ESP_WTNBSY1 ; LOOP AS NEEDED
CALL PC_ASTERISK ; *DEBUG*
OR $FF ; SIGNAL TIMEOUT OR $FF ; SIGNAL TIMEOUT
;ESP_WTNBSY_Z:
;POP HL ; RECOVER HL
RET ; AND RETURN RET ; AND RETURN
; ;
; WAIT FOR ESP TO BE BUSY ; WAIT FOR ESP TO BE BUSY
; ;
ESP_WTBSY: ESP_WTBSY:
LD B,20 ; MAX TRIES
LD B,3 ; MAX TRIES
ESP_WTBSY1: ESP_WTBSY1:
LD C,(IY+ESP_CFG_ST) ; ESP STATUS PORT LD C,(IY+ESP_CFG_ST) ; ESP STATUS PORT
IN A,(C) ; GET STATUS IN A,(C) ; GET STATUS
@ -230,6 +274,27 @@ ESP_WTBSY1:
DJNZ ESP_WTBSY1 ; ELSE LOOP DJNZ ESP_WTBSY1 ; ELSE LOOP
OR $FF ; SIGNAL TIMEOUT OR $FF ; SIGNAL TIMEOUT
RET ; AND RETURN RET ; AND RETURN
;;;;
;;;; WAIT FOR ESP TO BE READY TO OUTPUT
;;;;
;;;ESP_WTRDY:
;;; PUSH HL ; SAVE HL
;;; LD HL,0 ; MAX TRIES
;;;ESP_WTRDY1:
;;; LD C,(IY+ESP_CFG_ST) ; ESP STATUS PORT
;;; IN A,(C) ; GET STATUS
;;; XOR $FF ; INVERT SO 0=READY
;;; AND (IY+ESP_CFG_RDYMSK) ; IS ESP READY TO OUTPUT
;;; JR Z,ESP_WTRDY_Z ; RETURN IF READY
;;; DEC HL ; DEC LOOP COUNTER
;;; LD A,H ; CHECK FOR
;;; OR L ; ... TIMEOUT
;;; JR NZ,ESP_WTRDY1 ; LOOP AS NEEDED
;;; CALL PC_PERIOD ; *DEBUG*
;;; OR $FF ; SIGNAL TIMEOUT
;;;ESP_WTRDY_Z:
;;; POP HL ; RECOVER HL
;;; RET ; AND RETURN
; ;
; WAIT FOR ESP TO BE READY TO OUTPUT ; WAIT FOR ESP TO BE READY TO OUTPUT
; ;
@ -242,6 +307,7 @@ ESP_WTRDY1:
AND (IY+ESP_CFG_RDYMSK) ; IS ESP READY TO OUTPUT AND (IY+ESP_CFG_RDYMSK) ; IS ESP READY TO OUTPUT
RET Z ; RETURN IF READY RET Z ; RETURN IF READY
DJNZ ESP_WTRDY1 ; ELSE LOOP DJNZ ESP_WTRDY1 ; ELSE LOOP
CALL PC_PERIOD ; *DEBUG*
OR $FF ; SIGNAL TIMEOUT OR $FF ; SIGNAL TIMEOUT
RET ; AND RETURN RET ; AND RETURN
; ;

2
Source/HBIOS/hbios.asm

@ -1118,7 +1118,7 @@ Z280_BOOTERR .TEXT "\r\n\r\n*** Application mode boot not supported under Z280 n
DJNZ $ DJNZ $
#ENDIF #ENDIF
; ;
#IF ((PLATFORM == PLT_DUO) & TRUE)
#IF ((PLATFORM == PLT_DUO) & FALSE)
; WAIT A WHILE ; WAIT A WHILE
LD HL,0 LD HL,0
BOOTWAIT: BOOTWAIT:

1
Source/HBIOS/pkd.asm

@ -371,7 +371,6 @@ PKD_KEYMAP:
; POS $18 $19 $1A $1B ; POS $18 $19 $1A $1B
; KEY [F4] [F3] [F2] [F1] ; KEY [F4] [F3] [F2] [F1]
.DB $23, $22, $21, $20 .DB $23, $22, $21, $20
; ;
;================================================================================================== ;==================================================================================================
; PKD OUTPUT ROUTINES ; PKD OUTPUT ROUTINES

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.48"
#DEFINE BIOSVER "3.3.0-dev.49"
#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.48"
db "3.3.0-dev.49"
endm endm

Loading…
Cancel
Save