Browse Source

Preliminary integrated baud rate change

patch
b1ackmai1er 5 years ago
parent
commit
93cb50b244
  1. 298
      Source/HBIOS/updater.asm

298
Source/HBIOS/updater.asm

@ -4,7 +4,7 @@
; PROVIDES THE CAPABILTY TO UPDATE ROMWBW FROM THE SBC BOOT LOADER USING
; AN XMODEM FILE TRANSFER.
;
; THIS TOOL CAN BE LAUNCHED FROM THE ROMWBW BOOT LOADER USING OPTION 'R'.
; THIS TOOL CAN BE LAUNCHED FROM THE ROMWBW BOOT LOADER USING OPTION 'X'.
;
; OPTION (C) AND (S) - CONSOLE AND SERIAL DEVICE
;
@ -50,7 +50,7 @@
; IF THE UPDATE FAILS IT IS RECOMMENDED THAT YOU RETRY BEFORE REBOOTING OR
; EXITING TO THE SBC BOOT LOADER AS YOUR MACHINE MAY NOT BE BOOTABLE.
;
; OPTION (X) - EXIT TO THE SBC BOOT LOADER. THE SBC IS RELOADED FROM ROM AND
; OPTION (Q) - EXIT TO THE SBC BOOT LOADER. THE SBC IS RELOADED FROM ROM AND
; EXECUTED. AFTER A SUCCESSFUL UPDATE A REBOOT SHOULD BE PERFORMED. HOWEVER,
; IN THE CASE OF A FAILED UPDATE THIS OPTION COULD BE USED TO ATTEMPT TO
; LOAD CP/M AND PERFORM THE NORMAL XMODEM / FLASH PROCESS TO RECOVER.
@ -60,12 +60,13 @@
; THE CURRENT FLASH.
;
; OPTION (1) AND (2) - CALCULATE AND DISPLAY CRC32 OF 1ST OR 2ND 512K ROM.
; OPTION (3) - CALCULATE AND DISPLAY CRC32 OF A 1024K ROM.
;
; OPTION (H) - DEBUG OPTION - SWITCH ON CPU CLOCK DIVIDER ON SBC-V2-004+
; OPTION (T) - DEBUG OPTION - TEST TIMER FOR 32S, 16S, 8S, 4S, 2S & 1S
;
;
; V.DEV 18/1/2021 PHIL SUMMERS, DIFFICULTYLEVELHIGH@GMAIL.COM
; V.DEV 23/7/2021 PHIL SUMMERS, DIFFICULTYLEVELHIGH@GMAIL.COM
; b1ackmai1er ON RETROBREWCOMPUTERS.ORG
;
;
@ -164,6 +165,9 @@ BSPC: .EQU 'H'-40h ; ^H = Backspace
RST 08 ; TO USE AS
LD A,E ; DEFAULT
LD (SERDEV),A
CALL GETDINFO ; SAVE INITIAL
LD (ORISPD),A ; SERIAL SPEED
;
LD HL,msgHeader ; PRINT
CALL PRTSTR0 ; GREETING
@ -195,9 +199,20 @@ CHPFND: LD (ERATYP),A ; SAVE ERASE TYPE
LD BC,$F8F0 ; GET CPU SPEED
RST 08 ; AND MULTIPLY
LD A,L ; BY 4
PUSH AF
ADD A,A ; TO CREATE
ADD A,A ; TIMEOUT DELAY
LD (TmoFct),A ; FACTOR
POP AF
;
LD HL,CLKTBL-1 ; DETERMINE
ADD A,L ; RECOMMENDED
LD L,A ; SPEED BASED
ADC A,H ; ON CPU CLOCK
SUB L
LD H,A ; LOOK IT
LD A,(HL) ; UP IN THE
LD (RECSPD),A ; CLOCK TABLE
;
MENULP: LD DE,$0000 ; ENSURE WE ARE STARTING
LD (MD_FBAS),DE ; AT BANK 0 SECTOR 0
@ -207,6 +222,12 @@ MENULP: LD DE,$0000 ; ENSURE WE ARE STARTING
;
CALL MENU ; DISPLAY MENU
CALL GETINP ; GET SELECTION
;
CP '>' ; CHANGE TO
JP Z,OPTIONG ; RECOMMENDED BAUD RATE
;
CP '<' ; REVERT TO
JP Z,OPTIONL ; ORIGINAL BAUD RATE
;
CP 'U' ; BEGIN
JR Z,BEGUPD ; TRANSFER
@ -230,13 +251,13 @@ MENULP: LD DE,$0000 ; ENSURE WE ARE STARTING
JP Z,OPTIOND ; FLASH
;
CP '1' ; CALCULATE
JP Z,OPTION1 ; CRC 512K FLASH
JP Z,OPTION1 ; CRC FLASH #1
;
CP '2' ; CALCULATE
JP Z,OPTION2 ; CRC 1024K FLASH
JP Z,OPTION2 ; CRC FLASH #2
;
CP '3' ; CALCULATE
JP Z,OPTION3 ; CRC FLASH #2
CP '2' ; CALCULATE
JP Z,OPTION3 ; CRC 1024K FLASH
;
#IF (XFUDBG)
CP 'T' ; TEST TIMEOUT
@ -564,22 +585,6 @@ GETINP2:CALL CONIN
AND ~$20 ; CONVERT CHARACTER TO LOWER
GETINP3:RET
;
PRTSTR0:LD A,(HL) ; PRINT MESSAGE POINTED TOP HL UNTIL 0
OR A ; CHECK IF GOT ZERO?
RET Z ; IF ZERO RETURN TO CALLER
LD C,A
CALL CONOUT ; ELSE PRINT THE CHARACTER
INC HL
JP PRTSTR0
;
PRTSTRD:LD A,(HL) ; PRINT MESSAGE POINTED TOP HL UNTIL $
CP '$' ; CHECK IF GOT IT?
RET Z ; IF MATCH RETURN TO CALLER
LD C,A
CALL CONOUT ; ELSE PRINT THE CHARACTER
INC HL
JP PRTSTRD
;
MENU: CALL COUTON
LD HL,msgConsole ; DISPLAY
CALL PRTSTR0 ; CONSOLE
@ -604,6 +609,16 @@ MENU: CALL COUTON
CALL CONOUT
POP AF
CALL DISPBAUD
;
LD HL,msgSetBaud ; DISPLAY
CALL PRTSTR0 ; RECOMMENDED
LD A,(RECSPD) ; BAUD RATE
CALL DECBAUD
;
LD HL,msgRevertBaud ; DISPLAY
CALL PRTSTR0 ; ORIGINAL
LD A,(ORISPD) ; BAUD RATE
CALL DECBAUD
;
LD HL,msgWriteV ; DISPLAY
CALL PRTSTR0 ; VERIFY
@ -618,7 +633,33 @@ MENU1: CALL PRTSTR0
CALL PRTSTR0 ; MENU OPTIONS
RET
;
;======================================================================
; DISPLAY THE BAUD RATE FOR THE DEVICE SPECIFIED IN A
;======================================================================
;
DISPBAUD:
CALL GETDINFO ; GET DEVICE INFO
RET NZ ; EXIT IF NOT SERIAL
DECBAUD:;CALL PRTHEXB
BIT 4,A ; CONVERT ; IF X > 15 X=(X-15)*2
JR Z,UNDER15 ; DEVICE ; ELSE X=(X*2)-1
AND %00001111 ; BAUD
INC A ; CODE TO
ADD A,A ; TABLE
JR WASOVER ; INDEX
UNDER15:AND %00001111
ADD A,A
DEC A
WASOVER:;CALL PRTHEXB
LD DE,BAUDTBL ; DISPLAY
CALL PRTIDXDEA ; BAUD RATE
RET
;
; GET DEVICE INFO FOR DEVICE SPECIFIED IN A
; RETURN NZ FLAG IF NON SERIAL.
; RETURN Z FLAG IF SERIAL DEVICE AND A CONTAINING ENCODED BAUD BYTE
;
GETDINFO:
PUSH AF
LD C,A
LD B,$06 ; GET
@ -631,21 +672,8 @@ DISPBAUD:
LD C,B ; GET
LD B,$05 ; DEVICE
RST 08 ; INFO
XOR A
LD A,D
;
; CALL PRTHEXB
BIT 4,A ; CONVERT ; IF X > 15 X=(X-15)*2
JR Z,UNDER15 ; DEVICE ; ELSE X=(X*2)-1
AND %00001111 ; BAUD
INC A ; CODE TO
ADD A,A ; TABLE
JR WASOVER ; INDEX
UNDER15:AND %00001111
ADD A,A
DEC A
WASOVER:;CALL PRTHEXB
LD DE,BAUDTBL ; DISPLAY
CALL PRTIDXDEA ; BAUD RATE
RET
;
OPTIOND:CALL COUTON ; TURN ON OUTPUT
@ -736,6 +764,26 @@ VERF: POP BC ; EXIT WITH FAIL
POP BC ; FAIL MESSAGE AND
JP FAILWF ; RETURN TO MENU
;
OPTIONG:LD HL,msgChangeNow
CALL PRTSTR0
LD A,(RECSPD)
; CALL PRTHEXB
CALL DECBAUD
LD HL,msgPressKey
CALL PRTSTR0
CALL GETINP
JP MENULP
;
OPTIONL:LD HL,msgChangeNow
CALL PRTSTR0
LD A,(ORISPD)
; CALL PRTHEXB
CALL DECBAUD
LD HL,msgPressKey
CALL PRTSTR0
CALL GETINP
JP MENULP
;
OPTIONV:LD A,(WRTVER) ; TOGGLE
CPL ; VERIFY
LD (WRTVER),A ; FLAG
@ -862,6 +910,10 @@ OPTIONE:LD HL,msgErase ; DISPLAY
JP Done1
#ENDIF
;
;======================================================================
; CONSOLE AND SERIAL I/O ROUTINES
;======================================================================
;
SEROUT: PUSH HL ; SERIAL OUTPUT CHARACTER IN C
PUSH DE
PUSH BC
@ -943,6 +995,10 @@ CONIN: PUSH HL ; CONSOLE INPUT. WAIT FOR A CHARACTER ADD RETURN IT IN A
POP HL
RET
;
;======================================================================
; TEXT OUTPUT ROUTINES
;======================================================================
;
PRTHEXB:PUSH AF ; PRINT HEX BYTE IN A TO CONSOLE
PUSH BC
PUSH DE
@ -974,18 +1030,66 @@ HEXCONV:AND 0FH ; CONVERT LOW NIBBLE OF A TO ASCII HEX
ADC A,40H
DAA
RET
OPTION3:LD HL,$1000 ; CRC32 STARTING
LD (MD_FBAS),HL ; BANK $10 SECTOR $00
LD B,16 ; 16 BANKS (512K)
JR CALCCRC
;
; PRINT 0 TERMINATED STRING POINTED TO BY HL
;
PRTSTR0:LD A,(HL) ; PRINT MESSAGE POINTED TOP HL UNTIL 0
OR A ; CHECK IF GOT ZERO?
RET Z ; IF ZERO RETURN TO CALLER
LD C,A
CALL CONOUT ; ELSE PRINT THE CHARACTER
INC HL
JP PRTSTR0
;
; PRINT $ TERMINATED STRING POINTED TO BY HL
;
PRTSTRD:LD A,(HL) ; PRINT MESSAGE POINTED TOP HL UNTIL $
CP '$' ; CHECK IF GOT IT?
RET Z ; IF MATCH RETURN TO CALLER
LD C,A
CALL CONOUT ; ELSE PRINT THE CHARACTER
INC HL
JP PRTSTRD
;
; PRINT THE nTH STRING IN A LIST OF STRINGS WHERE EACH IS TERMINATED BY $
; A REGISTER DEFINES THE nTH STRING IN THE LIST TO PRINT AND DE POINTS
; TO THE START OF THE STRING LIST.
;
PRTIDXDEA:
PUSH BC
LD C,A ; INDEX COUNT
OR A
LD A,0
PRTIDXDEA1:
JR Z,PRTIDXDEA3
PRTIDXDEA2:
LD A,(DE) ; LOOP UNIT
INC DE ; WE REACH
CP '$' ; END OF STRING
JR NZ,PRTIDXDEA2
DEC C ; AT STRING END. SO GO
JR PRTIDXDEA1 ; CHECK FOR INDEX MATCH
PRTIDXDEA3:
POP BC
EX DE,HL
CALL PRTSTRD ; FALL THROUGH TO WRITESTR
RET
;
;======================================================================
; CRC OPTIONS AND CALCULATIONS
;======================================================================
;
OPTION1:LD HL,$0000 ; CRC32 STARTING
LD (MD_FBAS),HL ; BANK $00 SECTOR $00
LD B,16 ; 16 BANKS (512K)
JR CALCCRC
;
OPTION2:LD HL,$0000 ; CRC32 STARTING
OPTION2:LD HL,$1000 ; CRC32 STARTING
LD (MD_FBAS),HL ; BANK $10 SECTOR $00
LD B,16 ; 16 BANKS (512K)
JR CALCCRC
;
OPTION3:LD HL,$0000 ; CRC32 STARTING
LD (MD_FBAS),HL ; BANK $00 SECTOR $00
LD B,32 ; 32 BANKS (1024K)
;
@ -997,8 +1101,7 @@ CALCCRC:CALL COUTON ; TURN ON OUTPUT
LD HL,$FFFF ; SET THE
LD (CRC),HL ; START CRC
LD (CRC+2),HL ; CONDITION
; LD B,16 ;
;
CRCLP1: PUSH BC ; LOOP THROUGH ALL BANKS
LD B,8 ; LOOP THROUGH
CRCLP2: PUSH BC ; 8 SECTORS
@ -1076,37 +1179,38 @@ CLEAR: DEC B
JP NZ,BYTELP
LD (CRC),DE
LD (CRC+2),HL
;
RET
;
;======================================================================
; PRINT THE nTH STRING IN A LIST OF STRINGS WHERE EACH IS TERMINATED BY $
; A REGISTER DEFINES THE nTH STRING IN THE LIST TO PRINT AND DE POINTS
; TO THE START OF THE STRING LIST.
;======================================================================
;
PRTIDXDEA:
PUSH BC
LD C,A ; INDEX COUNT
OR A
LD A,0
; LD (PRTIDXCNT),A ; RESET CHARACTER COUNT
PRTIDXDEA1:
JR Z,PRTIDXDEA3
PRTIDXDEA2:
LD A,(DE) ; LOOP UNIT
INC DE ; WE REACH
CP '$' ; END OF STRING
JR NZ,PRTIDXDEA2
DEC C ; AT STRING END. SO GO
JR PRTIDXDEA1 ; CHECK FOR INDEX MATCH
PRTIDXDEA3:
POP BC
EX DE,HL
CALL PRTSTRD ; FALL THROUGH TO WRITESTR
; RET
;
#INCLUDE "decode.asm"
; multiply DE:HL by 10, exit wit C set if overflwo
;
multb10:call multb2 ; x2
ret c
push de
push hl
call multb2 ; x4
ret c
call multb2 ; x8
ret c
;
pop bc ; x8 + 2
add hl,bc
pop bc
jr nc,multbc
inc de
ret c
multbc: ex de,hl
add hl,bc
ex de,hl
ret
multb2: ex de,hl ; multiply by 2
add hl,hl
ret c
ex de,hl
add hl,hl
jr nc,multbnc
inc de
multbnc:ret
;
;======================================================================
; CALCULATE BANK AND ADDRESS DATA FROM MEMORY ADDRESS
@ -1223,16 +1327,20 @@ msgCRC32: .DB CR,LF,CR,LF,"CRC32 : ",0
msgFailWrt: .DB CR,LF,"FLASH WRITE FAILED",CR,LF,0
msgFailure: .DB CR,LF,"TRANSMISSION FAILED",CR,LF,0
msgCancel: .DB CR,LF,"TRANSMISSION CANCELLED",CR,LF,0
msgChangeNow: .DB CR,LF,"Change speed now to ",0
msgPressKey: .DB CR,LF,"Press a key to Resume.",CR,LF,0
msgConsole: .DB CR,LF,CR,LF,"(C) Set Console Device : ",0
msgIODevice: .DB CR,LF,"(S) Set Serial Device : ",0
msgSetBaud: .DB CR,LF,"(>) Set Recommended Baud Rate : ",0
msgRevertBaud: .DB CR,LF,"(<) Revert to Original Baud Rate : ",0
msgWriteV: .DB CR,LF,"(V) Toggle Write Verify : ",0
msgBegin: .DB CR,LF,"(R) Reboot"
.DB CR,LF,"(U) Begin Update"
.DB CR,LF,"(Q) Quit to Rom Loader"
.DB CR,LF,"(D) Duplicate Flash #1 to #2"
.DB CR,LF,"(1) CRC 512K Flash"
.DB CR,LF,"(2) CRC 1024K Flash"
.DB CR,LF,"(3) CRC Flash chip #2"
.DB CR,LF,"(1) CRC 512K Flash #1"
.DB CR,LF,"(2) CRC 512K Flash #2"
.DB CR,LF,"(3) CRC 1024K Flash"
#IF (XFUDBG)
.DB CR,LF,"(H) Select half speed"
.DB CR,LF,"(T) Test timeout"
@ -1260,6 +1368,9 @@ WRTVER: .DB $FF ; WRITE VERIFY OPTION FLAG
VERRES: .DB $00 ; WRITE VERIFY RESULT
BLKCOUT: .DB $FF ; BLOCK TEXT OUTPUT DURING TRANSFER IF ZERO
ERATYP .DB $00 ; HOLDS THE ERASE TYPE FLAG FOR VARIOUS CHIPS
;CPUSPD: .DB 0 ; HOLDS CURRENT PROCESSOR SPEED
ORISPD: .DB 0 ; HOLDS ORIGINAL BAUD RATE SPEED
RECSPD: .DB 0 ; HOLDS RECOMMENDED BAUD RATE SPEED
oldSP: .DW 0 ; The orginal SP to be restored before exiting
retrycnt: .DB 0 ; Counter for retries before giving up
chksum: .DB 0 ; For calculating the checksum of the packet
@ -1277,6 +1388,10 @@ packet: .DB 0 ; SOH
.FILL 128,0 ; data*128,
.DB 0 ; chksum
;
;======================================================================
; SUPPORTED DEVICES AND ID CODES
;======================================================================
;
DEVICES:
.DW $BFB7 ; 39SF040 0
.DW $01A4 ; 29F040 1
@ -1289,7 +1404,7 @@ DEVICES:
LSTDEV: .EQU $
;
;======================================================================
; BOARD RATE TABLE
; BAUD RATE TABLE
;======================================================================
;
BAUDTBL:.DB "75$" ; 0 0
@ -1325,6 +1440,31 @@ BAUDTBL:.DB "75$" ; 0 0
.DB "3686400$" ; 30 30
.DB "7372800$" ; 31 16
;
;======================================================================
; CLOCK SETTING TABLE
;======================================================================
;
CLKTBL: .DB 6 ; 1 4800
.DB 7 ; 2 9600
.DB 7 ; 3 9600
.DB 8 ; 4 19200
.DB 8 ; 5 19200
.DB 8 ; 6 19200
.DB 8 ; 7 19200
.DB 9 ; 8 38400
.DB 9 ; 9 38400
.DB 9 ; 10 38400
.DB 9 ; 11 38400
.DB 9 ; 12 38400
.DB 9 ; 13 38400
.DB 9 ; 14 38400
.DB 9 ; 15 38400
.DB 9 ; 16 38400
.DB 9 ; 17 38400
.DB 9 ; 18 38400
.DB 9 ; 19 38400
.DB 9 ; 20 38400
;
sector4k: .EQU $ ; 32 PACKETS GET ACCUMULATED HERE BEFORE FLASHING
;
SLACK .EQU (UPD_END - $)

Loading…
Cancel
Save