Browse Source

Merge pull request #181 from b1ackmai1er/dev

romloader baudrate setting. updater improvements
pull/199/head
Wayne Warthen 5 years ago
committed by GitHub
parent
commit
06b9f2b882
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 75
      Source/HBIOS/romldr.asm
  2. 261
      Source/HBIOS/updater.asm

75
Source/HBIOS/romldr.asm

@ -435,7 +435,7 @@ devlst:
;
setcon:
; On entry DE is expected to be pointing to start
; of command
; of command. Get unit number.
call findws ; skip command
call skipws ; and skip it
call isnum ; do we have a number?
@ -444,19 +444,64 @@ setcon:
jp c,err_nocon ; handle overflow error
;
; Check against max char unit
PUSH DE
push af ; save requested unit
ld b,BF_SYSGET ; HBIOS func: SYS GET
ld c,BF_SYSGET_CIOCNT ; HBIOS subfunc: CIO unit count
rst 08 ; E := unit count
pop af ; restore requested unit
cp e ; compare
POP DE
jp nc,err_nocon ; handle invalid unit
ld (newcon),a ; save validated console
;
; Get baud rate
call findws
call skipws ; skip whitespace
call isnum ; do we have a number?
jp nz,docon ; if no we don't change baudrate
call getnum ; parse a number
jp c,err_invcmd ; handle overflow error
;
cp 32 ; handle invalid
jp nc,err_invcmd ; baud rate
bit 0,a
jr z,iseven ; convert sequential
inc a ; baud rate code to
srl a ; encoded baud rate
jr setspd ; 13=9600
iseven: dec a ; 15=19200
srl a ; 17=38400
add a,16 ; 20=115200
setspd: ld (newspeed),a ; save validated baud rate
;
ld hl,str_chspeed ; notify user
call pstr ; to change
call cin ; speed
;
; Get the current settings for chosen console
ld b,BF_CIOQUERY ; BIOS serial device query
ld a,(newcon) ; get device unit num
ld c,a ; ... and put in C
rst 08 ; call H/UBIOS, DE := line characteristics
jp nz,err_invcmd ; abort on error
;
ld a,d ; mask off current
and $11100000 ; baud rate
ld hl,newspeed ; and load in new
or (hl) ; baud rate
ld d,a
;
ld b,BF_CIOINIT ; BIOS serial init
ld a,(newcon) ; get serial device unit
ld c,a ; ... into C
rst 08 ; call HBIOS
jp nz,err_invcmd ; handle error
;
; Notify user, we're outta here....
push af ; save new console unit
ld hl,str_newcon ; new console msg
docon: ld hl,str_newcon ; new console msg
call pstr ; print string on cur console
pop af ; restore new console unit
ld a,(newcon) ; restore new console unit
call prtdecb ; print unit num
;
; Set console unit
@ -470,7 +515,6 @@ setcon:
call nl2 ; formatting
ld hl,str_banner ; display boot banner
call pstr ; do it
;
ret ; done
;
#endif
@ -1103,7 +1147,7 @@ rdln_nxt:
jr rdln_nxt ; loop till done
;
rdln_bs:
ld hl,cmdbuf ; start of buffer
ld hl,cmdbuf ; start of buffer
or a ; clear carry
sbc hl,de ; subtract from cur buf ptr
jr z,rdln_bel ; at buf start, just beep
@ -1508,7 +1552,7 @@ cin:
; Input character from console via hbios
ld c,CIO_CONSOLE ; console unit to c
ld b,BF_CIOIN ; HBIOS func: input char
rst 08 ; HBIOS reads charactdr
rst 08 ; HBIOS reads character
ld a,e ; move character to A for return
;
; Restore registers (AF is output)
@ -1833,7 +1877,7 @@ str_err_prefix .db bel,"\r\n\r\n*** ",0
str_err_invcmd .db "Invalid command",0
str_err_nodisk .db "Disk unit not available",0
str_err_noslice .db "Disk unit does not support slices",0
str_err_nocon .db "Invalid character unit",0
str_err_nocon .db "Invalid character unit specification",0
str_err_diskio .db "Disk I/O failure",0
str_err_sig .db "No system image on disk",0
str_err_api .db "Unexpected hardware BIOS API failure",0
@ -1872,6 +1916,7 @@ str_prompt .db "Boot [H=Help]: ",0
str_bs .db bs,' ',bs,0
str_reboot .db "\r\n\r\nRestarting System...",0
str_newcon .db "\r\n\r\n Console on Unit #",0
str_chspeed .db "\r\n\r\n Change speed now. Press a key to resume.",0
str_applst .db "\r\n\r\nROM Applications:",0
str_devlst .db "\r\n\r\nDisk Devices:",0
str_invcmd .db "\r\n\r\n*** Invalid Command ***",bel,0
@ -1889,14 +1934,14 @@ str_ldsec .db ", Sector 0x",0
str_diaglvl .db "\r\n\r\nHBIOS Diagnostic Level: ",0
;
str_help .db "\r\n"
.db "\r\n L - List ROM Applications"
.db "\r\n D - Disk Device Inventory"
.db "\r\n R - Reboot System"
.db "\r\n L - List ROM Applications"
.db "\r\n D - Disk Device Inventory"
.db "\r\n R - Reboot System"
#if (BIOS == BIOS_WBW)
.db "\r\n I <u> - Set Console Interface"
.db "\r\n V [<n>] - View/Set HBIOS Diagnostic Verbosity"
.db "\r\n I <u> [<c>] - Set Console Interface/Baud code"
.db "\r\n V [<n>] - View/Set HBIOS Diagnostic Verbosity"
#endif
.db "\r\n <u>[.<s>] - Boot Disk Unit/Slice"
.db "\r\n <u>[.<s>] - Boot Disk Unit/Slice"
.db 0
;
#if (DSKYENABLE)
@ -2023,6 +2068,8 @@ str_tbas .db "Tasty BASIC",0
str_play .db "Play a Game",0
str_user .db "User App",0
str_egg .db "",0
newcon .db 0
newspeed .db 0
;
;=======================================================================
; Pad remainder of ROM Loader

261
Source/HBIOS/updater.asm

@ -65,7 +65,7 @@
; OPTION (1) AND (2) - CALCULATE AND DISPLAY CRC32 OF 1ST OR 2ND 512K ROM.
;
; OPTION (H) - DEBUG OPTION - SWITCH ON CPU CLOCK DIVIDER ON SBC-V2-004+
; OPTION (T) - DEBUG OPTION - TEST TIMER FOR 20 SECONDS. * = START AND FINISH
; OPTION (T) - DEBUG OPTION - TEST TIMER FOR 32S, 16S, 8S, 4S, 2S & 1S
;
;
; V.DEV 13/1/2021 PHIL SUMMERS, DIFFICULTYLEVELHIGH@GMAIL.COM
@ -80,7 +80,20 @@
; TIMING BROADLY CALIBRATED ON A Z80 SBC-V2
; UNABIOS NOT SUPPORTED
;
; MAXIMUM SERIAL SPEED LIMITATIONS
; TERATERM:
;
; MACROS CAN BE USED TO AUTOMATE SENDING ROM UPDATES OR ROMS IMAGES.
; TRANSMISSION STARTUP IS MORE RELIABLE WHEN THE CHECKSUM OPTION (1) IS SPECIFIED
;
; EXAMPLE MACRO FILE TO SEND *.UPD FILE, SELECT CHECKSUM MODE AND DISPLAY CRC32
;
; ;XMODEM send, checksum, display CRC32
; xmodemsend '\\DESKTOP-FI43VI2\Users\Phillip\Documents\GitHub\RomWBW\Binary\SBC_std_cust.upd' 1
; crc32file crc '\\DESKTOP-FI43VI2\Users\Phillip\Documents\GitHub\RomWBW\Binary\SBC_std_cust.rom'
; sprintf '0x%08X' crc
; messagebox inputstr 'CRC32'
;
; MAXIMUM SERIAL SPEED LIMITATIONS:
;
; SBC-V2 UART NO FLOW CONTROL 2MHZ | 9600
; SBC-V2 UART NO FLOW CONTROL 4MHZ | 19200
@ -132,10 +145,7 @@ BSPC: .EQU 'H'-40h ; ^H = Backspace
;
LD (oldSP),SP ; SETUP STACK BELOW HBIOS
LD SP,HBX_START-MD_CSIZ ; ALLOW FOR RELOCATABLE CODE AREA
LD HL,msgHeader ; PRINT
CALL PRTSTR0 ; GREETING
;
LD HL,MD_FSTART ; COPY FLASH
LD DE,HBX_START-MD_CSIZ ; ROUTINES TO
LD BC,MD_CSIZ ; HIGH MEMORY
@ -156,6 +166,9 @@ BSPC: .EQU 'H'-40h ; ^H = Backspace
RST 08 ; TO USE AS
LD A,E ; DEFAULT
LD (SERDEV),A
;
LD HL,msgHeader ; PRINT
CALL PRTSTR0 ; GREETING
;
RESTART:
LD DE,$0000 ; SET UP START
@ -163,10 +176,47 @@ RESTART:
LD HL,MD_FIDEN ; IDENTIFY CHIP
CALL MD_FNCALL ; AT THIS BANK/SECTOR
LD HL,$B7BF ; FAIL
XOR A ; IF FLASH
SBC HL,BC ; CHIP IS
JP NZ,FAILBC ; NOT SUPPORTED
LD HL,$B7BF ; IS IT A 39SF040
XOR A
SBC HL,BC
LD A,0
JR Z,CHPFND ; YES IT IS ...
;
#IF (XFUDBG)
LD HL,$A401 ; IS IT A 29F040
XOR A
SBC HL,BC
LD A,1
JR Z,CHPFND ; YES IT IS ...
;
LD HL,$131F ; IS IT AN AT49F040
XOR A
SBC HL,BC
LD A,2
JR Z,CHPFND ; YES IT IS
;
LD HL,$A41F ; IS IT AN AT29C040
XOR A
SBC HL,BC
LD A,3
JR Z,CHPFND ; YES IT IS
;
LD HL,$E220 ; IS IT AN M29F040
XOR A
SBC HL,BC
LD A,4
JR Z,CHPFND ; YES IT IS
;
LD HL,$A4C2 ; IS IT AN MX29F040
SBC HL,BC
LD A,5
;
#ENDIF
;
JP NZ,FAILBC ; SUPPORTED CHIP NOT FOUND
;
CHPFND: LD (ERATYP),A ; SAVE ERASE TYPE
LD BC,$F8F0 ; GET CPU SPEED
RST 08 ; AND MULTIPLY
@ -182,22 +232,6 @@ MENULP: LD DE,$0000 ; ENSURE WE ARE STARTING
CALL PRTSTR0
CALL MENU ; DISPLAY MENU
;
#IF (XFUDBG)
LD C,'B'
CALL CONOUT
LD A,(MD_BANK)
CALL PRTHEXB
LD C,'S'
CALL CONOUT
LD A,(MD_SECT)
CALL PRTHEXB
LD C,'T'
CALL CONOUT
LD A,(TmoFct)
CALL PRTHEXB
LD C,':'
CALL CONOUT
#ENDIF
CALL GETINP ; GET SELECTION
;
CP 'U' ; BEGIN
@ -233,6 +267,9 @@ MENULP: LD DE,$0000 ; ENSURE WE ARE STARTING
;
CP 'H' ; HALF
JP Z,OPTIONH ; SPEED SWITCH
;
CP 'F' ; DUMP
JP Z,OPTIONF ; BUFFER
#ENDIF
;
JR MENULP
@ -259,15 +296,14 @@ SERCLR: LD HL,msgInstr ; PROVIDE
LD DE,sector4k ; POINT TO START OF SECTOR TO WRITE
;
GetNewPacket:
LD A,20 ; WE RETRY 20 TIMES BEFORE GIVING UP
LD (retrycnt),A
LD HL,retrycnt ; WE RETRY 20 TIMES BEFORE GIVING UP
LD (HL),20
;
NPloop: LD B,5 ; 5 SECONDS OF TIMEOUT BEFORE EACH NEW BLOCK
NPloop: LD B,6 ; 6 SECONDS OF TIMEOUT BEFORE EACH NEW BLOCK
CALL GetCharTmo
JP NC,NotPacketTimeout
;
LD HL,retrycnt ; REACHED MAX NUMBER OF RETRIES?
dec (HL)
DEC (HL) ; REACHED MAX NUMBER OF RETRIES?
JP Z,FAILRT ; YES, PRINT MESSAGE AND EXIT
;
LD C,NAK ; SEND A NAK TO THE UPLOADER
@ -289,17 +325,17 @@ NotPacketTimeout:
CALL GetCharTmo1 ; GET CHARACTER
LD (HL),A ; SHOULD BE PACKET NUMBER
INC HL
JP C,FAILTO
JR C,FAILTO
;
CALL GetCharTmo1 ; GET CHARACTER
LD (HL),A ; SHOULD BE PACKET NUMBER
INC HL ; COMPLEMENT
JP C,FAILTO
JR C,FAILTO
;
LD C,128 ; GET 128 MORE CHARACTERS FOR A FULL PACKET
GetRestOfPacket:
CALL GetCharTmo1 ; GET CHARACTER
JP C,FAILTO
JR C,FAILTO
;
LD (HL),A
INC HL ; SAVE THE RECEIVED CHAR INTO THE...
@ -307,11 +343,11 @@ GetRestOfPacket:
INC DE ; ...POINT TO THE NEXT LOCATION
;
DEC C
JR NZ,GetRestOfPacket
JP NZ,GetRestOfPacket
;
CALL GetCharTmo1 ; GET CHARACTER
LD (HL),A ; SHOULD BE CHECKSUM
JP C,FAILTO
JR C,FAILTO
;
LD HL,packet+3 ; CALCULATE CHECKSUM FROM 128 BYTES OF DATA
LD B,128
@ -321,17 +357,15 @@ csloop: ADD A,(HL) ; JUST ADD UP THE BYTES
DJNZ csloop
;
XOR (HL) ; HL POINTS TO THE RECEIVED CHECKSUM SO
JP NZ,FAILCS ; BY XORING IT TO OUR SUM WE CHECK FOR EQUALITY
JR NZ,FAILCS ; BY XORING IT TO OUR SUM WE CHECK FOR EQUALITY
;
LD HL,(pktNo) ; CHECK
LD BC,(packet+1) ; AGREEMENT
; XOR A ; PACKET
SBC HL,BC ; NUMBERS
JP NZ,FAILPN
JR NZ,FAILPN
;
; LD HL,pktNo ; HAVE WE RECEIVED
; LD A,(HL) ; A BLOCK OF 32
LD A,C
LD A,C ; HAVE WE RECEIVED A BLOCK OF 32
DEC A ; XMODEM PACKETS?
AND %00011111 ; IF YES THEN WERE WE
CP %00011111 ; HAVE ENOUGH TO
@ -339,7 +373,7 @@ csloop: ADD A,(HL) ; JUST ADD UP THE BYTES
CALL Z,WSEC ; ASSUME FLASH SUCCESSFUL
;
OR A ; EXIT IF WE GOT A
JP NZ,FAILWF ; WRITE VERIFICATION ERROR
JR NZ,FAILWF ; WRITE VERIFICATION ERROR
;
LD HL,pktNo ; UPDATE THE PACKET COUNTERS
INC (HL)
@ -351,6 +385,9 @@ csloop: ADD A,(HL) ; JUST ADD UP THE BYTES
;
JP GetNewPacket
;
FAILTO: LD HL,msgTimout ; TIMEOUT WAITING
JR ERRRX ; FOR CHARACTER
;
COUTON: LD A,$FF ; TURN ON
LD (BLKCOUT),A ; OUTPUT
RET
@ -360,9 +397,6 @@ Done: LD C,ACK ; TELL UPLOADER
Done1: LD HL,msgSuccess ; BACK TO
JR MSGRS ; MENU
;
FAILTO: LD HL,msgTimout ; TIMEOUT WAITING
JR ERRRX ; FOR CHARACTER
;
FAILWF: LD HL,msgFailWrt ; FLASH
JR MSGRS ; VERIFY FAIL
;
@ -407,11 +441,7 @@ Die1: LD B,BF_SYSRESET ; SYSTEM RESTART
CALL $FFF0 ; CALL HBIOS
RET
WSEC: PUSH HL ; WRITE A
PUSH BC ; FLASH
PUSH DE ; SECTOR
;
CALL DISPROG ; DISPLAY PROGRESS
WSEC: CALL DISPROG ; DISPLAY PROGRESS
;
WSEC1: LD HL,MD_FERAS ; ERASE
CALL MD_FNCALL ; AND WRITE
@ -428,9 +458,7 @@ WSEC1: LD HL,MD_FERAS ; ERASE
CALL MD_FNCALL
LD (VERRES),A ; SAVE STATUS
;
NOVER: POP DE ; POINT BACK TO
LD DE,sector4k ; START OF 4K BUFFER
PUSH DE
NOVER: LD DE,sector4k ; POINT BACK TO START OF 4K BUFFER
;
LD HL,MD_FBAS
LD A,(HL) ; DID WE JUST
@ -444,12 +472,9 @@ NOVER: POP DE ; POINT BACK TO
;
NXTS2: LD A,$10 ; NEXT SECTOR
ADD A,(HL) ; EACH SECTOR IS $1000
LD (HL),A ; BUT WE JUST INCREASE HIGH BYTE
LD (HL),A ; SO WE JUST INCREASE HIGH BYTE
;
NXTS3: LD A,(VERRES) ; EXIT WITH STATUS
POP DE
POP BC
POP HL
RET
;
DISPROG:LD A,(BLKCOUT) ; SKIP OUTPUT
@ -680,21 +705,75 @@ OPTIONS:LD HL,msgEnterUnit ; GET
JP MENULP ; BACK TO MENU
;
#IF (XFUDBG)
OPTIONT:LD HL,msgCRLF
OPTIONT:LD HL,msgCRLF ; TEST DELAY 32S, 16S, 8S, 4S, 2S, 1S
CALL PRTSTR0
LD C,'*' ; DISPLAY START
LD B,32 ; START DELAY IS 32 SECONDS
TSTDLY: PUSH BC
LD C,'>' ; DISPLAY START
CALL CONOUT ; INDICATOR
LD B,20 ; DELAY 20
CALL GetCharTmo ; SECONDS
LD C,'*' ; DISPLAY FINISH
LD A,B
CALL PRTHEXB
CALL GetCharTmo ; DELAY B SECONDS
LD C,'<' ; DISPLAY STOP
CALL CONOUT ; INDICATOR
JP MENULP ; BACK TO MENU
POP BC
SRL B ; NEXT DELAY IS HALF PREVIOUS
JR NZ,TSTDLY ; RETURN TO MENU
JP MENULP ; WHEN DELAY GETS TO 1 SECOND
;
OPTIONH:LD A,8 ; TURN ON THE SBC-V2-004+
OUT (RTCIO),A ; CLOCK DIVIDER
LD HL,TmoFct ; AND ADJUST
SRL (HL) ; DELAY FACTOR (/2)
JP MENULP ; BACK TO MENU
;
OPTIONF:LD HL,msgCRLF ; DISPLAY
CALL PRTSTR0 ; BANK
LD C,'B' ; SECTOR
CALL CONOUT ; TIMEOUT
LD A,(MD_BANK)
CALL PRTHEXB
LD C,'S'
CALL CONOUT
LD A,(MD_SECT)
CALL PRTHEXB
LD C,'T'
CALL CONOUT
LD A,(TmoFct)
CALL PRTHEXB
;
LD HL,msgCRLF ; DISPLAY
CALL PRTSTR0 ; ACK/NAK BYTE
LD HL,packet ; DISPLAY
LD B,3 ; LAST
DMPBUF2:LD A,(HL) ; NUMBERS
CALL PRTHEXB
LD C,' '
CALL CONOUT
INC HL
DJNZ DMPBUF2
LD HL,msgCRLF
CALL PRTSTR0
LD B,128 ; DISPLAY
LD HL,packet+3 ; LAST
DMPBUF: LD A,(HL) ; PACKET
CALL PRTHEXB ; CONTENTS
LD C,' '
CALL CONOUT
LD A,B
SUB 2
AND %00001111
CP %00001111
JR NZ,DMPBUF1
PUSH HL
LD HL,msgCRLF
CALL PRTSTR0
POP HL
DMPBUF1:
INC HL
DJNZ DMPBUF
JP MENULP
#ENDIF
;
SEROUT: PUSH HL ; SERIAL OUTPUT CHARACTER IN C
@ -976,19 +1055,14 @@ MD_FSTART: .EQU $ ; FLASH ROUTINES WHICH GET RELOCATED TO HIGH MEMORY
;======================================================================
;
MD_FNCALL:
LD DE,$0000
LD DE,$0000 ; PRESET DE TO SAVE SPACE
LD BC,(MD_FBAS) ; PUT BANK AND SECTOR DATA IN BC
;
EX AF,AF'
PUSH AF
LD A,(HB_CURBNK) ; WE ARE STARTING IN HB_CURBNK
;
HB_DI
CALL MD_FJPHL
HB_EI
;
POP AF
EX AF,AF'
;
LD A,C ; RETURN WITH STATUS IN A
RET
@ -1046,7 +1120,7 @@ MD_FIDEN_R: ; THIS CODE GETS RELOCATED TO HIGH MEMORY
;
MD_FERAS_R: ; THIS CODE GETS RELOCATED TO HIGH MEMORY
;
EX AF,AF' ; SAVE CURRENT BANK
PUSH AF ; SAVE CURRENT BANK
LD A,B ; SELECT BANK
CALL HBX_BNKSEL ; TO PROGRAM
;
@ -1087,7 +1161,7 @@ MD_WT4: LD A,(HL) ; DO TWO SUCCESSIVE READS
JR MD_WT6
MD_WT5: LD C,L ; SET SUCCESS STATUS
;
MD_WT6: EX AF,AF' ; RETURN TO ORIGINAL BANK
MD_WT6: POP AF ; RETURN TO ORIGINAL BANK
JP HBX_BNKSEL ; WHICH IS OUR RAM BIOS COPY
;
;======================================================================
@ -1112,19 +1186,17 @@ MD_FREAD_R: ; THIS CODE GETS RELOCATED TO HIGH MEMORY
LD H,C ; SECTOR
LD L,D ; ADDRESS
;
EX AF,AF' ; PUT DESTINATION BANK IN AF'
;
PUSH AF ; SAVE CURRENT BANK
MD_FRD1:
LD A,B ; PUT SOURCE BANK IN AF
CALL HBX_BNKSEL ; READ ; SWITCH TO SOURCE BANK
LD C,(HL) ; BYTE
;
EX AF,AF' ; SELECT BANK ; SWITCH DESTINATION BANK
PUSH AF
CALL HBX_BNKSEL ; TO WRITE
POP AF
POP AF ; RESTORE CURRENT BANK
PUSH AF ; AND SAVE A COPY FOR NEXT LOOP
CALL HBX_BNKSEL ; SELECT BANK TO WRITE TO
;
LD (IX+0),C ; WRITE BYTE
EX AF,AF' ; ; PUT SOURCE BANK IN AF
;
INC HL ; NEXT SOURCE LOCATION
INC IX ; NEXT DESTINATION LOCATION
@ -1133,6 +1205,7 @@ MD_FRD1:
BIT 4,D ; WE HAVE DONE ONE SECTOR
JR Z,MD_FRD1
;
POP AF
RET
;
;======================================================================
@ -1156,20 +1229,19 @@ MD_FVERI_R: ; THIS CODE GETS RELOCATED TO HIGH MEMORY
LD H,C ; SECTOR
LD L,D ; ADDRESS
;
EX AF,AF' ; PUT SOURCE BANK IN AF' (RAM)
;
PUSH AF ; SAVE CURRENT BANK
MD_FVE1:
LD A,B ; SELECT BANK
CALL HBX_BNKSEL ; TO READ ; SWITCH TO FLASH BANK
LD A,(HL) ; READ BYTE
CALL HBX_BNKSEL ; TO READ
LD C,(HL) ; READ BYTE
;
EX AF,AF' ; SELECT BANK ; SWITCH TO RAM BANK
PUSH AF
POP AF ; RESTORE CURRENT BANK
PUSH AF ; AND SAVE A COPY FOR NEXT LOOP
CALL HBX_BNKSEL ; TO VERIFY AGAINST
POP AF
EX AF,AF'
;
LD A,C
SUB (IX+0) ; COMPARE BYTE
LD C,A ; SET STATUS
JR NZ,MD_FVE2 ; EXIT IF MISMATCH
;
INC HL ; NEXT SOURCE LOCATION
@ -1179,10 +1251,7 @@ MD_FVE1:
BIT 4,D ; WE HAVE DONE ONE SECTOR
JR Z,MD_FVE1
;
MD_FVE2:
LD C,A ; SET STATUS
EX AF,AF'
;
MD_FVE2:POP AF
RET
;
;======================================================================
@ -1206,11 +1275,9 @@ MD_FWRIT_R: ; THIS CODE GETS RELOCATED TO HIGH MEMORY
LD H,C ; SECTOR
LD L,D ; ADDRESS
;
PUSH AF ; SAVE CURRENT BANK
MD_FWRI1:
PUSH AF
CALL HBX_BNKSEL ; SELECT BANK TO READ
POP AF
EX AF,AF' ; SAVE CURRENT BANK
;
LD C,(IX+0) ; READ IN BYTE
;
@ -1237,12 +1304,14 @@ MD_FW7: LD A,(HL) ; FROM THE SAME FLASH ADDRESS.
INC HL ; NEXT DESTINATION LOCATION
INC IX ; NEXT SOURCE LOCATION
;
EX AF,AF' ; RESTORE CURRENT BANK
POP AF ; RESTORE CURRENT BANK
PUSH AF ; AND SAVE A COPY FOR NEXT LOOP
;
INC DE ; CONTINUE WRITING UNTIL
BIT 4,D ; WE HAVE DONE ONE SECTOR
JR Z,MD_FWRI1
;
POP AF ; RESTORE CURRENT BANK
JP HBX_BNKSEL ; RETURN TO ORIGINAL BANK WHICH IS OUR RAM BIOS COPY
;
MD_FEND .EQU $
@ -1281,7 +1350,8 @@ msgBegin: .DB CR,LF,"(R) Reboot"
.DB CR,LF,"(2) CRC Flash #2"
#IF (XFUDBG)
.DB CR,LF,"(H) Select half speed"
.DB CR,LF,"(T) Test 20s timeout"
.DB CR,LF,"(T) Test timeout"
.DB CR,LF,"(F) Dump last packet"
#ENDIF
.DB CR,LF,CR,LF,"Select : ",0
msgSuccess: .DB CR,LF,CR,LF,"COMPLETED WITHOUT ERRORS ",CR,LF,0
@ -1301,6 +1371,7 @@ SERDEV: .DB $00 ; HBIOS SERIAL DEVICE NUMBER USED FOR XMODEM TRANSFER
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
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

Loading…
Cancel
Save