Browse Source

hbios - dbgmon hxload

pull/61/head
Phillip Stevens 6 years ago
parent
commit
c60c8394b3
  1. 113
      Source/HBIOS/dbgmon.asm

113
Source/HBIOS/dbgmon.asm

@ -239,63 +239,47 @@ KLOP1:
; ;
HXLOAD: HXLOAD:
CALL NEWLINE ; SHOW READY CALL NEWLINE ; SHOW READY
HXLOAD0:
CALL KIN ; GET THE FIRST CHARACTER, EXPECTING A ':'
HXLOAD1:
CP 03Ah ; IS IT COLON ':'? START OF LINE OF INTEL HEX FILE
JR NZ,HXLOADERR ; IF NOT, MUST BE ERROR, ABORT ROUTINE
LD E,0 ; FIRST TWO CHARACTERS IS THE RECORD LENGTH FIELD
CALL HEXINS ; GET US TWO CHARACTERS INTO BC, CONVERT IT TO A BYTE <A>
CALL HXCHKSUM ; UPDATE HEX CHECK SUM
HXLOADLINE:
CALL CIN ; GET THE FIRST CHARACTER, EXPECTING A ':'
CP ':' ; IS IT COLON ':'? WAIT FOR START OF NEXT LINE OF INTEL HEX FILE
JR NZ,HXLOADLINE ; IF NOT, GO BACK TO WAIT
LD E,0 ; RESET THE CHECKSUM BYTE <E>
CALL HEXINS ; FIRST TWO CHARACTERS IS THE RECORD LENGTH FIELD <D>
LD D,A ; LOAD RECORD LENGTH COUNT INTO D LD D,A ; LOAD RECORD LENGTH COUNT INTO D
CALL HEXINS ; GET NEXT TWO CHARACTERS, MEMORY LOAD ADDRESS <H> CALL HEXINS ; GET NEXT TWO CHARACTERS, MEMORY LOAD ADDRESS <H>
CALL HXCHKSUM ; UPDATE HEX CHECK SUM
LD H,A ; PUT VALUE IN H REGISTER LD H,A ; PUT VALUE IN H REGISTER
CALL HEXINS ; GET NEXT TWO CHARACTERS, MEMORY LOAD ADDRESS <L> CALL HEXINS ; GET NEXT TWO CHARACTERS, MEMORY LOAD ADDRESS <L>
CALL HXCHKSUM ; UPDATE HEX CHECK SUM
LD L,A ; PUT VALUE IN L REGISTER LD L,A ; PUT VALUE IN L REGISTER
CALL HEXINS ; GET NEXT TWO CHARACTERS, RECORD FIELD TYPE CALL HEXINS ; GET NEXT TWO CHARACTERS, RECORD FIELD TYPE
CALL HXCHKSUM ; UPDATE HEX CHECK SUM
CP 001h ; RECORD FIELD TYPE 00 IS DATA, 01 IS END OF FILE
JR NZ,HXLOAD2 ; MUST BE THE END OF THAT FILE
DEC A ; RECORD FIELD TYPE 01 IS END OF FILE
JR Z,HXLOADEXIT ; MUST BE THE END OF THAT FILE
INC A ; RECORD FIELD TYPE 00 IS DATA
JR NZ,HXLOADTYPERR ; RECORD TYPE IS INCORRECT, ERROR OUT
HXLOADDATA:
CALL HEXINS ; GET NEXT TWO CHARACTERS, ASSEMBLE INTO BYTE CALL HEXINS ; GET NEXT TWO CHARACTERS, ASSEMBLE INTO BYTE
CALL HXCHKSUM ; UPDATE HEX CHECK SUM
LD A,E ; RECALL THE CHECKSUM BYTE
AND A ; IS IT ZERO?
JR Z,HXLOADEXIT ; MUST BE O K., GO BACK FOR SOME MORE, ELSE
JR HXLOADERR ; CHECKSUMS DON'T ADD UP, ERROR OUT
HXLOAD2:
LD A,D ; RETRIEVE LINE CHARACTER COUNTER
AND A ; ARE WE DONE WITH THIS LINE?
JR Z,HXLOAD3 ; GET TWO MORE ASCII CHARACTERS, BUILD A BYTE AND CHECKSUM
CALL HEXINS ; GET NEXT TWO CHARS, CONVERT TO BYTE IN A, CHECKSUM IT
CALL HXCHKSUM ; UPDATE HEX CHECK SUM
LD (HL),A ; CHECKSUM OK, MOVE CONVERTED BYTE IN A TO MEMORY LOCATION
LD (HL),A ; MOVE CONVERTED BYTE IN A TO MEMORY LOCATION
INC HL ; INCREMENT POINTER TO NEXT MEMORY LOCATION INC HL ; INCREMENT POINTER TO NEXT MEMORY LOCATION
DEC D ; DECREMENT LINE CHARACTER COUNTER DEC D ; DECREMENT LINE CHARACTER COUNTER
JR HXLOAD2 ; AND KEEP LOADING INTO MEMORY UNTIL LINE IS COMPLETE
HXLOAD3:
CALL HEXINS ; GET TWO CHARS, BUILD BYTE AND CHECKSUM
CALL HXCHKSUM ; UPDATE HEX CHECK SUM
LD A,E ; CHECK THE CHECKSUM VALUE
AND A ; IS IT ZERO?
JR Z,HXLOADAGAIN ; IF THE CHECKSUM IS STILL OK, CONTINUE ON, ELSE
HXLOADERR:
JR NZ,HXLOADDATA ; AND KEEP LOADING INTO MEMORY UNTIL LINE IS COMPLETE
CALL HEXINS ; GET NEXT TWO CHARACTERS, ASSEMBLE INTO CHECKSUM BYTE
LD A,E ; RECALL THE CHECKSUM BYTE
OR A ; IT SHOULD BE ZERO
JR Z,HXLOADLINE ; ZERO, SO WE HAVE NO ERROR, GO GET ANOTHER LINE
HXLOADCHKERR:
LD HL,TXT_CKSUMERR ; GET "CHECKSUM ERROR" MESSAGE LD HL,TXT_CKSUMERR ; GET "CHECKSUM ERROR" MESSAGE
CALL PRTSTR ; PRINT MESSAGE FROM (HL) AND TERMINATE THE LOAD CALL PRTSTR ; PRINT MESSAGE FROM (HL) AND TERMINATE THE LOAD
JR HXLOADEXIT ; RETURN TO PROMPT
HXCHKSUM:
LD C,A ; BUILD THE CHECKSUM
LD A,E ;
SUB C ; THE CHECKSUM SHOULD ALWAYS .EQUAL ZERO WHEN CHECKED
LD E,A ; SAVE THE CHECKSUM BACK WHERE IT CAME FROM
LD A,C ; RETRIEVE THE BYTE AND GO BACK
RET ; BACK TO CALLER
HXLOADAGAIN:
CALL KIN ; CATCH THE TRAILING CARRIAGE RETURN
JR HXLOAD0 ; LOAD ANOTHER LINE OF DATA
JP SERIALCMDLOOP ; RETURN TO PROMPT
HXLOADTYPERR:
LD HL,TXT_RECORDERR ; GET "RECORD TYPE ERROR" MESSAGE
CALL PRTSTR ; PRINT MESSAGE FROM (HL) AND TERMINATE THE LOAD
JP SERIALCMDLOOP ; RETURN TO PROMPT
HXLOADEXIT: HXLOADEXIT:
CALL KIN ; CATCH ANY STRAY TRAILING CHARACTERS
CALL HEXINS ; GET LAST TWO CHARACTERS, ASSEMBLE INTO CHECKSUM BYTE
LD A,E ; RECALL THE CHECKSUM BYTE
OR A ; IT SHOULD BE ZERO
JR NZ,HXLOADCHKERR ; CHECKUM IS INCORRECT, ERROR OUT
LD HL,TXT_LOADED ; GET "LOADED" MESSAGE
CALL PRTSTR ; PRINT MESSAGE FROM (HL)
JP SERIALCMDLOOP ; RETURN TO PROMPT JP SERIALCMDLOOP ; RETURN TO PROMPT
; ;
;__POUT_______________________________________________________________________ ;__POUT_______________________________________________________________________
@ -702,27 +686,30 @@ ALPH:
; ;
;__HEXINS_____________________________________________________________________ ;__HEXINS_____________________________________________________________________
; ;
; GET ONE BYTE OF HEX DATA FROM SERIAL PORT, RETURN IN A
; GET ONE BYTE OF HEX DATA FROM SERIAL PORT, CHECKSUM IN E, RETURN IN A
;_____________________________________________________________________________ ;_____________________________________________________________________________
; ;
HEXINS: HEXINS:
PUSH BC ; SAVE BC REGS
CALL NIBLS ; DO A NIBBLE
RLC A ; MOVE FIRST BYTE UPPER NIBBLE
RLC A ;
RLC A ;
RLC A ;
LD B,A ; SAVE ROTATED BYTE
CALL NIBLS ; DO NEXT NIBBLE
ADD A,B ; COMBINE NIBBLES IN ACC
POP BC ; RESTORE BC
RET ; DONE
CALL NIBLS ; DO A NIBBLE
RLCA ; MOVE FIRST BYTE UPPER NIBBLE
RLCA ;
RLCA ;
RLCA ;
LD B,A ; SAVE ROTATED NIBBLE
CALL NIBLS ; DO NEXT NIBBLE
OR A,B ; COMBINE NIBBLES IN ACC TO BYTE
LD B,A ; SAVE BYTE
ADD A,E ; ADD TO CHECKSUM
LD E,A ; SAVE CHECKSUM
LD A,B ; RECOVER BYTE
RET ; DONE
NIBLS: NIBLS:
CALL KIN ; GET K B. DATA
CP 40H ; TEST FOR ALPHA
JR NC,ALPH ;
AND 0FH ; GET THE BITS
RET ;
CALL CIN ; GET K B. DATA
SUB '0'
CP 10 ; TEST FOR ALPHA
RET C ; IF A<10 JUST RETURN
SUB 7 ; ELSE SUBTRACT 'A'-'0' (17) AND ADD 10
RET
; ;
;__PHL________________________________________________________________________ ;__PHL________________________________________________________________________
; ;
@ -907,6 +894,8 @@ TXT_READY .TEXT "\r\nMonitor Ready$"
TXT_COMMAND .TEXT "\r\nUnknown Command$" TXT_COMMAND .TEXT "\r\nUnknown Command$"
TXT_ERR .TEXT "\r\nSyntax Error$" TXT_ERR .TEXT "\r\nSyntax Error$"
TXT_CKSUMERR .TEXT "\r\nChecksum Error$" TXT_CKSUMERR .TEXT "\r\nChecksum Error$"
TXT_RECORDERR .TEXT "\r\nRecord Type Error$"
TXT_LOADED .TEXT "\r\nLoaded$"
TXT_BADNUM .TEXT " *Invalid Hex Byte Value*$" TXT_BADNUM .TEXT " *Invalid Hex Byte Value*$"
TXT_MINIHELP .TEXT " (H for Help)$" TXT_MINIHELP .TEXT " (H for Help)$"
TXT_HELP .TEXT "\r\nMonitor Commands (all values in hex):" TXT_HELP .TEXT "\r\nMonitor Commands (all values in hex):"

Loading…
Cancel
Save