Browse Source

Merge pull request #180 from b1ackmai1er/dev

updater bank select fix
pull/199/head
Wayne Warthen 5 years ago
committed by GitHub
parent
commit
0e3cdaa15d
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 2
      Source/HBIOS/asci.asm
  2. 201
      Source/HBIOS/updater.asm

2
Source/HBIOS/asci.asm

@ -87,7 +87,7 @@ ASCI1_IVT .EQU IVT(INT_SER1)
ASCI_PREINIT:
;
; SETUP THE DISPATCH TABLE ENTRIES
; NOTE: INTS WILL BE DISABLED WHEN PREINIT IS CALLED AND THEY MUST REMIAIN
; NOTE: INTS WILL BE DISABLED WHEN PREINIT IS CALLED AND THEY MUST REMAIN
; DISABLED.
;
LD B,ASCI_CFGCNT ; LOOP CONTROL

201
Source/HBIOS/updater.asm

@ -62,11 +62,13 @@
; ONTO FLASH #2. THE PURPOSE OF THIS IS TO ENABLE MAKING A BACKUP COPY OF
; THE CURRENT FLASH.
;
; 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
;
;
; V.DEV 8/1/2021 PHIL SUMMERS, DIFFICULTYLEVELHIGH@GMAIL.COM
; V.DEV 13/1/2021 PHIL SUMMERS, DIFFICULTYLEVELHIGH@GMAIL.COM
; b1ackmai1er ON RETROBREWCOMPUTERS.ORG
;
;
@ -80,12 +82,14 @@
;
; MAXIMUM SERIAL SPEED LIMITATIONS
;
; SBC-V2 UART NO FLOW CONTROL 2MHZ | 9600
; SBC-V2 UART NO FLOW CONTROL 4MHZ | 19200
; SBC-V2 UART NO FLOW CONTROL 5MHZ | 19200
; SBC-V2 UART NO FLOW CONTROL 8MHZ | 38400
; SBC-V2 UART NO FLOW CONTROL 10MHZ | 38400
; SBC-V2 USB-FIFO 2MHZ+ | N/A
; SBC-V2 UART NO FLOW CONTROL 2MHZ | 9600
; SBC-V2 UART NO FLOW CONTROL 4MHZ | 19200
; SBC-V2 UART NO FLOW CONTROL 5MHZ | 19200
; SBC-V2 UART NO FLOW CONTROL 8MHZ | 38400
; SBC-V2 UART NO FLOW CONTROL 10MHZ | 38400
; SBC-V2 USB-FIFO 2MHZ+ | N/A
; SBC-MK4 ASCI NO FLOW CONTROL 18.432MHZ | 9600
; SBC-MK4 ASCI WITH FLOW CONTROL 18.432MHZ | 38400
;
; ACKNOWLEDGEMENTS:
;
@ -97,6 +101,8 @@
; md.asm - ROMWBW memory disk driver
; https://github.com/wwarthen/RomWBW/blob/master/Source/HBIOS/md.asm
;
; CRC32 - J.G. HARSTON - mdfs.net/Info/Comp/Comms/CRC32.htm
;
;*****************************************************************************
;
#INCLUDE "std.asm"
@ -152,11 +158,8 @@ BSPC: .EQU 'H'-40h ; ^H = Backspace
LD (SERDEV),A
;
RESTART:
; LD DE,$0000 ; SET UP
; LD HL,$0000 ; START
; CALL MD_CALBAS ; BANK AND SECTOR
LD DE,$0000
LD (MD_FBAS),DE
LD DE,$0000 ; SET UP START
LD (MD_FBAS),DE ; BANK AND SECTOR
LD HL,MD_FIDEN ; IDENTIFY CHIP
CALL MD_FNCALL ; AT THIS BANK/SECTOR
@ -172,7 +175,29 @@ RESTART:
ADD A,A ; TIMOUT DELAY
LD (TmoFct),A ; FACTOR
;
MENULP: CALL MENU ; DISPLAY MENU
MENULP: LD DE,$0000 ; ENSURE WE ARE STARTING
LD (MD_FBAS),DE ; AT BANK 0 SECTOR 0
;
LD HL,msgCRLF
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
@ -195,6 +220,12 @@ MENULP: CALL MENU ; DISPLAY MENU
;
CP 'D' ; DUPLICATE
JP Z,OPTIOND ; FLASH
;
CP '1' ; CALCULATE
JP Z,OPTION1 ; CRC FLASH #1
;
CP '2' ; CALCULATE
JP Z,OPTION2 ; CRC FLASH #2
;
#IF (XFUDBG)
CP 'T' ; TEST TIMEOUT
@ -233,22 +264,22 @@ GetNewPacket:
;
NPloop: LD B,5 ; 5 SECONDS OF TIMEOUT BEFORE EACH NEW BLOCK
CALL GetCharTmo
jp NC,NotPacketTimeout
JP NC,NotPacketTimeout
;
LD HL,retrycnt ; REACHED MAX NUMBER OF RETRIES?
dec (HL)
jp Z,FAILRT ; YES, PRINT MESSAGE AND EXIT
JP Z,FAILRT ; YES, PRINT MESSAGE AND EXIT
;
LD C,NAK ; SEND A NAK TO THE UPLOADER
CALL SEROUT
JR NPloop
;
NotPacketTimeout:
cp EOT ; DID UPLOADER SAY WE'RE FINISHED?
CP EOT ; DID UPLOADER SAY WE'RE FINISHED?
JP Z,Done ; YES, THEN WE'RE DONE
cp CAN ; UPLOADER WANTS TO FAIL TRANSFER?
jp Z,FAILCN ; YES, THEN WE'RE ALSO DONE
cp SOH ; DID WE GET A START-OF-NEW-PACKET?
CP CAN ; UPLOADER WANTS TO FAIL TRANSFER?
JP Z,FAILCN ; YES, THEN WE'RE ALSO DONE
CP SOH ; DID WE GET A START-OF-NEW-PACKET?
JR NZ,NPloop ; NO, GO BACK AND TRY AGAIN
;
LD HL,packet ; SAVE THE RECEIVED CHAR INTO THE...
@ -285,7 +316,7 @@ GetRestOfPacket:
LD HL,packet+3 ; CALCULATE CHECKSUM FROM 128 BYTES OF DATA
LD B,128
XOR A
csloop: add A,(HL) ; JUST ADD UP THE BYTES
csloop: ADD A,(HL) ; JUST ADD UP THE BYTES
INC HL
DJNZ csloop
;
@ -298,8 +329,9 @@ csloop: add A,(HL) ; JUST ADD UP THE BYTES
SBC HL,BC ; NUMBERS
JP NZ,FAILPN
;
LD HL,pktNo ; HAVE WE RECEIVED
LD A,(HL) ; A BLOCK OF 32
; LD HL,pktNo ; HAVE WE RECEIVED
; LD A,(HL) ; A BLOCK OF 32
LD A,C
DEC A ; XMODEM PACKETS?
AND %00011111 ; IF YES THEN WERE WE
CP %00011111 ; HAVE ENOUGH TO
@ -308,7 +340,7 @@ csloop: add A,(HL) ; JUST ADD UP THE BYTES
;
OR A ; EXIT IF WE GOT A
JP NZ,FAILWF ; WRITE VERIFICATION ERROR
;
LD HL,pktNo ; UPDATE THE PACKET COUNTERS
INC (HL)
INC HL
@ -328,7 +360,7 @@ Done: LD C,ACK ; TELL UPLOADER
Done1: LD HL,msgSuccess ; BACK TO
JR MSGRS ; MENU
;
FAILTO: LD HL,msgTimout ; TIMOUT WAITING
FAILTO: LD HL,msgTimout ; TIMEOUT WAITING
JR ERRRX ; FOR CHARACTER
;
FAILWF: LD HL,msgFailWrt ; FLASH
@ -457,7 +489,7 @@ GetCharTmo:
CALL SERST ; IF THERE IS A
OR A ; CHARACTER AVAILABLE
JR NZ,GotChrX ; EXIT NOW OTHERWISE POLL
PUSH BC
GCtmoa: PUSH BC
LD BC,255 ; C=CONSTANT (255) FOR INNER TIMING LOOP
TmoFct: .EQU $-1 ; B=SPEED FACTOR WHICH GETS UPDATED AT START
GCtmob: PUSH BC
@ -748,7 +780,7 @@ CONIN: PUSH HL ; CONSOLE INPUT. WAIT FOR A CHARACTER ADD RETURN IT IN A
POP HL
RET
;
PRTHEXB:PUSH AF ; PRINT HEX BYTE IN A TO CONSOLE
PRTHEXB:PUSH AF ; PRINT HEX BYTE IN A TO CONSOLE
PUSH DE
CALL HEXASC
LD C,D
@ -771,12 +803,111 @@ HEXASC: LD D,A
LD D,A
RET
;
HEXCONV:AND 0FH ; CONVERT LOW NIBBLE OF A TO ASCII HEX
HEXCONV:AND 0FH ; CONVERT LOW NIBBLE OF A TO ASCII HEX
ADD A,90H
DAA
ADC A,40H
DAA
RET
OPTION1:LD HL,$0000
LD (MD_FBAS),HL
LD C,$00
JR CALCCRC
;
OPTION2:LD HL,$1000
LD (MD_FBAS),HL
LD C,$10
;
CALCCRC:CALL COUTON ; TURN ON OUTPUT
;
LD HL,msgCalc
CALL PRTSTR0
;
LD HL,$FFFF ; SET THE
LD (CRC),HL ; START CRC
LD (CRC+2),HL ; CONDITION
LD B,16 ; LOOP THROUGH
CRCLP1: PUSH BC ; 16 BANKS
LD B,8 ; LOOP THROUGH
CRCLP2: PUSH BC ; 8 SECTORS
;
PUSH BC
CALL DISPROG ; DISPLAY PROGRESS
;
LD IX,sector4k ; READ
LD HL,MD_FREAD ; A SECTOR
CALL MD_FNCALL
CALL CRC32 ; CALCULATE CRC
POP BC
;
LD A,(MD_SECT) ; POINT
ADD A,$10 ; TO NEXT
LD (MD_SECT),A ; SECTOR
POP BC ; NEXT
DJNZ CRCLP2 ; SECTOR
XOR A ; RESET SECTOR
LD (MD_SECT),A ; START
LD HL,MD_BANK ; POINT TO
INC (HL) ; NEXT BANK
POP BC ; NEXT
DJNZ CRCLP1 ; BANK
;
LD HL,msgCRC32 ; DISPLAY
CALL PRTSTR0 ; RESULT
LD HL,CRC+3
LD B,4
DISPCRC:LD A,$FF
XOR (HL)
CALL PRTHEXB
DEC HL
DJNZ DISPCRC
;
JP MENULP
;
CRC32: LD IX,sector4k ; CALCULATE
LD BC,4096 ; CRC32 OF
LD DE,(CRC) ; EACH SECTOR
LD HL,(CRC+2)
BYTELP: PUSH BC
LD A,(IX)
XOR E
LD B,8
ROTLP: SRL H
RR L
RR D
RRA
JP NC,CLEAR
LD E,A
LD A,H
XOR $ED
LD H,A
LD A,L
XOR $B8
LD L,A
LD A,D
XOR $83
LD D,A
LD A,E
XOR $20
CLEAR: DEC B
JP NZ,ROTLP
LD E,A
INC IX
POP BC
DEC BC
LD A,B
OR C
JP NZ,BYTELP
LD (CRC),DE
LD (CRC+2),HL
RET
;
;======================================================================
; CALCULATE BANK AND ADDRESS DATA FROM MEMORY ADDRESS
@ -982,14 +1113,16 @@ MD_FREAD_R: ; THIS CODE GETS RELOCATED TO HIGH MEMORY
LD L,D ; ADDRESS
;
EX AF,AF' ; PUT DESTINATION BANK IN AF'
LD A,B ; PUT SOURCE BANK IN AF
;
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
LD (IX+0),C ; WRITE BYTE
EX AF,AF' ; ; PUT SOURCE BANK IN AF
;
@ -1031,7 +1164,9 @@ MD_FVE1:
LD A,(HL) ; READ BYTE
;
EX AF,AF' ; SELECT BANK ; SWITCH TO RAM BANK
PUSH AF
CALL HBX_BNKSEL ; TO VERIFY AGAINST
POP AF
EX AF,AF'
;
SUB (IX+0) ; COMPARE BYTE
@ -1072,7 +1207,9 @@ MD_FWRIT_R: ; THIS CODE GETS RELOCATED TO HIGH MEMORY
LD L,D ; ADDRESS
;
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
@ -1128,6 +1265,8 @@ msgBank: .DB CR,LF,"BANK ",0
msgUnsupC: .DB CR,LF,"FLASH CHIP NOT SUPPORTED",CR,LF,0
msgReboot: .DB CR,LF,"REBOOTING ...",CR,LF,0
msgCopying: .DB CR,LF,"COPYING ...",CR,LF,0
msgCalc: .DB CR,LF,"CALCULATING CRC32 ...",CR,LF,0
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
@ -1138,6 +1277,8 @@ msgBegin: .DB CR,LF,"(R) Reboot"
.DB CR,LF,"(U) Begin Update"
.DB CR,LF,"(X) Exit to Rom Loader"
.DB CR,LF,"(D) Duplicate Flash #1 to #2"
.DB CR,LF,"(1) CRC Flash #1"
.DB CR,LF,"(2) CRC Flash #2"
#IF (XFUDBG)
.DB CR,LF,"(H) Select half speed"
.DB CR,LF,"(T) Test 20s timeout"
@ -1150,7 +1291,7 @@ msgYES: .DB "YES",0
msgNO: .DB "NO",0
msgPacErr: .DB CR,LF,"PACKET COUNT MISMATCH ERROR",CR,LF,0
msgChkSum .DB CR,LF,"CHECKSUM ERROR",CR,LF,0
msgRetry .DB CR,LF,"ERROR, RETRY COUNT EXCEED",CR,LF,0
msgRetry .DB CR,LF,"ERROR, RETRY COUNT EXCEEDED",CR,LF,0
msgTimout .DB CR,LF,"ERROR, RECEIVE TIMEOUT",CR,LF,0
;
; Variables
@ -1168,6 +1309,8 @@ pktNo1c: .DB 0 ; Current packet Number 1-complemented
MD_FBAS .DW $FFFF ; CURRENT BANK AND SECTOR
MD_SECT .EQU MD_FBAS ; BANK BYTE
MD_BANK .EQU MD_FBAS+1 ; SECTOR BYTE
CRC .DW $FFFF ; CRC32
.DW $FFFF
;
packet: .DB 0 ; SOH
.DB 0 ; PacketN

Loading…
Cancel
Save