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: ASCI_PREINIT:
; ;
; SETUP THE DISPATCH TABLE ENTRIES ; 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. ; DISABLED.
; ;
LD B,ASCI_CFGCNT ; LOOP CONTROL 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 ; ONTO FLASH #2. THE PURPOSE OF THIS IS TO ENABLE MAKING A BACKUP COPY OF
; THE CURRENT FLASH. ; 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 (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 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 ; b1ackmai1er ON RETROBREWCOMPUTERS.ORG
; ;
; ;
@ -80,12 +82,14 @@
; ;
; MAXIMUM SERIAL SPEED LIMITATIONS ; 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: ; ACKNOWLEDGEMENTS:
; ;
@ -97,6 +101,8 @@
; md.asm - ROMWBW memory disk driver ; md.asm - ROMWBW memory disk driver
; https://github.com/wwarthen/RomWBW/blob/master/Source/HBIOS/md.asm ; 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" #INCLUDE "std.asm"
@ -152,11 +158,8 @@ BSPC: .EQU 'H'-40h ; ^H = Backspace
LD (SERDEV),A LD (SERDEV),A
; ;
RESTART: 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 LD HL,MD_FIDEN ; IDENTIFY CHIP
CALL MD_FNCALL ; AT THIS BANK/SECTOR CALL MD_FNCALL ; AT THIS BANK/SECTOR
@ -172,7 +175,29 @@ RESTART:
ADD A,A ; TIMOUT DELAY ADD A,A ; TIMOUT DELAY
LD (TmoFct),A ; FACTOR 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 CALL GETINP ; GET SELECTION
; ;
CP 'U' ; BEGIN CP 'U' ; BEGIN
@ -195,6 +220,12 @@ MENULP: CALL MENU ; DISPLAY MENU
; ;
CP 'D' ; DUPLICATE CP 'D' ; DUPLICATE
JP Z,OPTIOND ; FLASH JP Z,OPTIOND ; FLASH
;
CP '1' ; CALCULATE
JP Z,OPTION1 ; CRC FLASH #1
;
CP '2' ; CALCULATE
JP Z,OPTION2 ; CRC FLASH #2
; ;
#IF (XFUDBG) #IF (XFUDBG)
CP 'T' ; TEST TIMEOUT CP 'T' ; TEST TIMEOUT
@ -233,22 +264,22 @@ GetNewPacket:
; ;
NPloop: LD B,5 ; 5 SECONDS OF TIMEOUT BEFORE EACH NEW BLOCK NPloop: LD B,5 ; 5 SECONDS OF TIMEOUT BEFORE EACH NEW BLOCK
CALL GetCharTmo CALL GetCharTmo
jp NC,NotPacketTimeout
JP NC,NotPacketTimeout
; ;
LD HL,retrycnt ; REACHED MAX NUMBER OF RETRIES? LD HL,retrycnt ; REACHED MAX NUMBER OF RETRIES?
dec (HL) 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 LD C,NAK ; SEND A NAK TO THE UPLOADER
CALL SEROUT CALL SEROUT
JR NPloop JR NPloop
; ;
NotPacketTimeout: 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 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 JR NZ,NPloop ; NO, GO BACK AND TRY AGAIN
; ;
LD HL,packet ; SAVE THE RECEIVED CHAR INTO THE... 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 HL,packet+3 ; CALCULATE CHECKSUM FROM 128 BYTES OF DATA
LD B,128 LD B,128
XOR A XOR A
csloop: add A,(HL) ; JUST ADD UP THE BYTES
csloop: ADD A,(HL) ; JUST ADD UP THE BYTES
INC HL INC HL
DJNZ csloop DJNZ csloop
; ;
@ -298,8 +329,9 @@ csloop: add A,(HL) ; JUST ADD UP THE BYTES
SBC HL,BC ; NUMBERS SBC HL,BC ; NUMBERS
JP NZ,FAILPN 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? DEC A ; XMODEM PACKETS?
AND %00011111 ; IF YES THEN WERE WE AND %00011111 ; IF YES THEN WERE WE
CP %00011111 ; HAVE ENOUGH TO 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 OR A ; EXIT IF WE GOT A
JP NZ,FAILWF ; WRITE VERIFICATION ERROR JP NZ,FAILWF ; WRITE VERIFICATION ERROR
;
LD HL,pktNo ; UPDATE THE PACKET COUNTERS LD HL,pktNo ; UPDATE THE PACKET COUNTERS
INC (HL) INC (HL)
INC HL INC HL
@ -328,7 +360,7 @@ Done: LD C,ACK ; TELL UPLOADER
Done1: LD HL,msgSuccess ; BACK TO Done1: LD HL,msgSuccess ; BACK TO
JR MSGRS ; MENU JR MSGRS ; MENU
; ;
FAILTO: LD HL,msgTimout ; TIMOUT WAITING
FAILTO: LD HL,msgTimout ; TIMEOUT WAITING
JR ERRRX ; FOR CHARACTER JR ERRRX ; FOR CHARACTER
; ;
FAILWF: LD HL,msgFailWrt ; FLASH FAILWF: LD HL,msgFailWrt ; FLASH
@ -457,7 +489,7 @@ GetCharTmo:
CALL SERST ; IF THERE IS A CALL SERST ; IF THERE IS A
OR A ; CHARACTER AVAILABLE OR A ; CHARACTER AVAILABLE
JR NZ,GotChrX ; EXIT NOW OTHERWISE POLL JR NZ,GotChrX ; EXIT NOW OTHERWISE POLL
PUSH BC
GCtmoa: PUSH BC
LD BC,255 ; C=CONSTANT (255) FOR INNER TIMING LOOP LD BC,255 ; C=CONSTANT (255) FOR INNER TIMING LOOP
TmoFct: .EQU $-1 ; B=SPEED FACTOR WHICH GETS UPDATED AT START TmoFct: .EQU $-1 ; B=SPEED FACTOR WHICH GETS UPDATED AT START
GCtmob: PUSH BC GCtmob: PUSH BC
@ -748,7 +780,7 @@ CONIN: PUSH HL ; CONSOLE INPUT. WAIT FOR A CHARACTER ADD RETURN IT IN A
POP HL POP HL
RET RET
; ;
PRTHEXB:PUSH AF ; PRINT HEX BYTE IN A TO CONSOLE
PRTHEXB:PUSH AF ; PRINT HEX BYTE IN A TO CONSOLE
PUSH DE PUSH DE
CALL HEXASC CALL HEXASC
LD C,D LD C,D
@ -771,12 +803,111 @@ HEXASC: LD D,A
LD D,A LD D,A
RET 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 ADD A,90H
DAA DAA
ADC A,40H ADC A,40H
DAA DAA
RET 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 ; 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 LD L,D ; ADDRESS
; ;
EX AF,AF' ; PUT DESTINATION BANK IN AF' EX AF,AF' ; PUT DESTINATION BANK IN AF'
LD A,B ; PUT SOURCE BANK IN AF
; ;
MD_FRD1: MD_FRD1:
LD A,B ; PUT SOURCE BANK IN AF
CALL HBX_BNKSEL ; READ ; SWITCH TO SOURCE BANK CALL HBX_BNKSEL ; READ ; SWITCH TO SOURCE BANK
LD C,(HL) ; BYTE LD C,(HL) ; BYTE
; ;
EX AF,AF' ; SELECT BANK ; SWITCH DESTINATION BANK EX AF,AF' ; SELECT BANK ; SWITCH DESTINATION BANK
PUSH AF
CALL HBX_BNKSEL ; TO WRITE CALL HBX_BNKSEL ; TO WRITE
POP AF
LD (IX+0),C ; WRITE BYTE LD (IX+0),C ; WRITE BYTE
EX AF,AF' ; ; PUT SOURCE BANK IN AF EX AF,AF' ; ; PUT SOURCE BANK IN AF
; ;
@ -1031,7 +1164,9 @@ MD_FVE1:
LD A,(HL) ; READ BYTE LD A,(HL) ; READ BYTE
; ;
EX AF,AF' ; SELECT BANK ; SWITCH TO RAM BANK EX AF,AF' ; SELECT BANK ; SWITCH TO RAM BANK
PUSH AF
CALL HBX_BNKSEL ; TO VERIFY AGAINST CALL HBX_BNKSEL ; TO VERIFY AGAINST
POP AF
EX AF,AF' EX AF,AF'
; ;
SUB (IX+0) ; COMPARE BYTE SUB (IX+0) ; COMPARE BYTE
@ -1072,7 +1207,9 @@ MD_FWRIT_R: ; THIS CODE GETS RELOCATED TO HIGH MEMORY
LD L,D ; ADDRESS LD L,D ; ADDRESS
; ;
MD_FWRI1: MD_FWRI1:
PUSH AF
CALL HBX_BNKSEL ; SELECT BANK TO READ CALL HBX_BNKSEL ; SELECT BANK TO READ
POP AF
EX AF,AF' ; SAVE CURRENT BANK EX AF,AF' ; SAVE CURRENT BANK
; ;
LD C,(IX+0) ; READ IN BYTE 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 msgUnsupC: .DB CR,LF,"FLASH CHIP NOT SUPPORTED",CR,LF,0
msgReboot: .DB CR,LF,"REBOOTING ...",CR,LF,0 msgReboot: .DB CR,LF,"REBOOTING ...",CR,LF,0
msgCopying: .DB CR,LF,"COPYING ...",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 msgFailWrt: .DB CR,LF,"FLASH WRITE FAILED",CR,LF,0
msgFailure: .DB CR,LF,"TRANSMISSION FAILED",CR,LF,0 msgFailure: .DB CR,LF,"TRANSMISSION FAILED",CR,LF,0
msgCancel: .DB CR,LF,"TRANSMISSION CANCELLED",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,"(U) Begin Update"
.DB CR,LF,"(X) Exit to Rom Loader" .DB CR,LF,"(X) Exit to Rom Loader"
.DB CR,LF,"(D) Duplicate Flash #1 to #2" .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) #IF (XFUDBG)
.DB CR,LF,"(H) Select half speed" .DB CR,LF,"(H) Select half speed"
.DB CR,LF,"(T) Test 20s timeout" .DB CR,LF,"(T) Test 20s timeout"
@ -1150,7 +1291,7 @@ msgYES: .DB "YES",0
msgNO: .DB "NO",0 msgNO: .DB "NO",0
msgPacErr: .DB CR,LF,"PACKET COUNT MISMATCH ERROR",CR,LF,0 msgPacErr: .DB CR,LF,"PACKET COUNT MISMATCH ERROR",CR,LF,0
msgChkSum .DB CR,LF,"CHECKSUM 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 msgTimout .DB CR,LF,"ERROR, RECEIVE TIMEOUT",CR,LF,0
; ;
; Variables ; Variables
@ -1168,6 +1309,8 @@ pktNo1c: .DB 0 ; Current packet Number 1-complemented
MD_FBAS .DW $FFFF ; CURRENT BANK AND SECTOR MD_FBAS .DW $FFFF ; CURRENT BANK AND SECTOR
MD_SECT .EQU MD_FBAS ; BANK BYTE MD_SECT .EQU MD_FBAS ; BANK BYTE
MD_BANK .EQU MD_FBAS+1 ; SECTOR BYTE MD_BANK .EQU MD_FBAS+1 ; SECTOR BYTE
CRC .DW $FFFF ; CRC32
.DW $FFFF
; ;
packet: .DB 0 ; SOH packet: .DB 0 ; SOH
.DB 0 ; PacketN .DB 0 ; PacketN

Loading…
Cancel
Save