diff --git a/Source/HBIOS/dbgmon.asm b/Source/HBIOS/dbgmon.asm index c315c95e..f6e37f01 100644 --- a/Source/HBIOS/dbgmon.asm +++ b/Source/HBIOS/dbgmon.asm @@ -238,49 +238,49 @@ KLOP1: ;_____________________________________________________________________________ ; HXLOAD: - CALL NEWLINE ; SHOW READY + CALL NEWLINE ; SHOW READY 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 - CALL HEXINS ; FIRST TWO CHARACTERS IS THE RECORD LENGTH FIELD - LD D,A ; LOAD RECORD LENGTH COUNT INTO D - CALL HEXINS ; GET NEXT TWO CHARACTERS, MEMORY LOAD ADDRESS - LD H,A ; PUT VALUE IN H REGISTER - CALL HEXINS ; GET NEXT TWO CHARACTERS, MEMORY LOAD ADDRESS - LD L,A ; PUT VALUE IN L REGISTER - CALL HEXINS ; GET NEXT TWO CHARACTERS, RECORD FIELD TYPE - 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 + 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 + CALL HEXINS ; FIRST TWO CHARACTERS IS THE RECORD LENGTH FIELD + LD D,A ; LOAD RECORD LENGTH COUNT INTO D + CALL HEXINS ; GET NEXT TWO CHARACTERS, MEMORY LOAD ADDRESS + LD H,A ; PUT VALUE IN H REGISTER + CALL HEXINS ; GET NEXT TWO CHARACTERS, MEMORY LOAD ADDRESS + LD L,A ; PUT VALUE IN L REGISTER + CALL HEXINS ; GET NEXT TWO CHARACTERS, RECORD FIELD TYPE + 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 LD (HL),A ; MOVE CONVERTED BYTE IN A TO MEMORY LOCATION - INC HL ; INCREMENT POINTER TO NEXT MEMORY LOCATION - DEC D ; DECREMENT LINE CHARACTER COUNTER - 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 + INC HL ; INCREMENT POINTER TO NEXT MEMORY LOCATION + DEC D ; DECREMENT LINE CHARACTER COUNTER + 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 - CALL PRTSTR ; PRINT MESSAGE FROM (HL) AND TERMINATE THE LOAD - JP SERIALCMDLOOP ; RETURN TO PROMPT + LD HL,TXT_CKSUMERR ; GET "CHECKSUM ERROR" MESSAGE + CALL PRTSTR ; PRINT MESSAGE FROM (HL) AND TERMINATE THE LOAD + 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: - CALL HEXINS ; GET LAST TWO CHARACTERS, ASSEMBLE INTO CHECKSUM BYTE - LD A,E ; RECALL THE CHECKSUM BYTE + 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 + 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 ; ;__POUT_______________________________________________________________________ ; @@ -649,17 +649,17 @@ HEXBYTE3: ;_____________________________________________________________________________ ; HEXWORD: - LD DE,0 ; INIT WORKING VALUE + LD DE,0 ; INIT WORKING VALUE HEXWORD1: - CALL ISHEX ; DO WE HAVE A HEX CHAR? + CALL ISHEX ; DO WE HAVE A HEX CHAR? JR NZ,HEXWORD3 ; IF NOT, WE ARE DONE LD B,4 ; SHIFT WORKING VALUE (DE := DE * 16) HEXWORD2: SLA E ; SHIFT LSB ONE BIT RL D ; SHIFT MSB ONE BIT RET C ; RETURN W/ CF SET INDICATING OVERFLOW ERROR - DJNZ HEXWORD2 ; LOOP FOR 4 BITS - CALL NIBL ; CONVERT HEX CHAR TO BINARY VALUE IN A & INC HL + DJNZ HEXWORD2 ; LOOP FOR 4 BITS + CALL NIBL ; CONVERT HEX CHAR TO BINARY VALUE IN A & INC HL OR E ; COMBINE WITH LSB LD E,A ; AND PUT BACK IN WROKING VALUE JR HEXWORD1 ; DO ANOTHER CHARACTER @@ -673,7 +673,7 @@ HEXWORD3: ;_____________________________________________________________________________ ; NIBL: - LD A,(HL) ; GET K B. DATA + LD A,(HL) ; GET K B. DATA INC HL ; INC KB POINTER CP 40H ; TEST FOR ALPHA JR NC,ALPH @@ -681,7 +681,7 @@ NIBL: RET ALPH: AND 0FH ; GET THE BITS - ADD A,09H ; MAKE IT HEX A-F + ADD A,09H ; MAKE IT HEX A-F RET ; ;__HEXINS_____________________________________________________________________ @@ -690,13 +690,13 @@ ALPH: ;_____________________________________________________________________________ ; HEXINS: - CALL NIBLS ; DO A NIBBLE - RLCA ; MOVE FIRST BYTE UPPER NIBBLE - RLCA ; - RLCA ; - RLCA ; + 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 + CALL NIBLS ; DO NEXT NIBBLE OR B ; COMBINE NIBBLES IN ACC TO BYTE LD B,A ; SAVE BYTE ADD A,E ; ADD TO CHECKSUM @@ -704,7 +704,7 @@ HEXINS: LD A,B ; RECOVER BYTE RET ; DONE NIBLS: - CALL CIN ; GET K B. DATA + CALL CIN ; GET K B. DATA SUB '0' CP 10 ; TEST FOR ALPHA RET C ; IF A<10 JUST RETURN