diff --git a/Source/HBIOS/romldr.asm b/Source/HBIOS/romldr.asm index aa8455b4..fafa28a6 100644 --- a/Source/HBIOS/romldr.asm +++ b/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 - Set Console Interface" - .db "\r\n V [] - View/Set HBIOS Diagnostic Verbosity" + .db "\r\n I [] - Set Console Interface/Baud code" + .db "\r\n V [] - View/Set HBIOS Diagnostic Verbosity" #endif - .db "\r\n [.] - Boot Disk Unit/Slice" + .db "\r\n [.] - 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 diff --git a/Source/HBIOS/updater.asm b/Source/HBIOS/updater.asm index 1d0013f4..7497bd03 100644 --- a/Source/HBIOS/updater.asm +++ b/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