Browse Source

Merge pull request #61 from feilipu/master

[hbios] dbgmon hxload rework
pull/80/head
Wayne Warthen 6 years ago
committed by GitHub
parent
commit
2610fd5be7
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 195
      Source/HBIOS/dbgmon.asm

195
Source/HBIOS/dbgmon.asm

@ -8,7 +8,7 @@
; THOMAS SCHERRER BASIC HAR.DWARE TEST ASSEMBLER SOURCES FROM THE Z80 INFO PAGE ; THOMAS SCHERRER BASIC HAR.DWARE TEST ASSEMBLER SOURCES FROM THE Z80 INFO PAGE
; INCLUDING ORIGINAL SCHEMATIC CONCEPT ; INCLUDING ORIGINAL SCHEMATIC CONCEPT
; HTTP://Z80.INFO/Z80SOURC.TXT ; HTTP://Z80.INFO/Z80SOURC.TXT
; CODE SAMPLES FROM BRUCE JONES PUBLIC DOMAIN ROM MONITOR FOR THE SBC-200C
; CODE SAMPLES FROM BRUCE JONES PUBLIC DOMAIN ROM MONITOR FOR THE SBC-200C
; HTTP://WWW.RETROTECHNOLOGY.COM/HERBS_STUFF/SD_BRUCE_CODE.ZIP ; HTTP://WWW.RETROTECHNOLOGY.COM/HERBS_STUFF/SD_BRUCE_CODE.ZIP
; INSPIRATION FROM JOEL OWENS "Z-80 SPACE-TIME PRODUCTIONS SINGLE BOARD COMPUTER" ; INSPIRATION FROM JOEL OWENS "Z-80 SPACE-TIME PRODUCTIONS SINGLE BOARD COMPUTER"
; HTTP://WWW.JOELOWENS.ORG/Z80/Z80INDEX.HTML ; HTTP://WWW.JOELOWENS.ORG/Z80/Z80INDEX.HTML
@ -213,7 +213,7 @@ KLOP1:
JP Z,SERIALCMDLOOP ; IF SO, ALL DONE JP Z,SERIALCMDLOOP ; IF SO, ALL DONE
CALL COUT ; OUTPUT KEY TO SCREEN CALL COUT ; OUTPUT KEY TO SCREEN
JR KLOP1 ; LOOP JR KLOP1 ; LOOP
;
;
;__HXLOAD_____________________________________________________________________ ;__HXLOAD_____________________________________________________________________
; ;
; LOAD INTEL HEX FORMAT FILE FROM THE SERIAL PORT, USER OPTION "H" ; LOAD INTEL HEX FORMAT FILE FROM THE SERIAL PORT, USER OPTION "H"
@ -224,7 +224,7 @@ KLOP1:
; 3) LOAD ADDRESS FIELD (FRAMES 3,4,5,6) ; 3) LOAD ADDRESS FIELD (FRAMES 3,4,5,6)
; 4) RECORD TYPE FIELD (FRAMES 7 AND 8) ; 4) RECORD TYPE FIELD (FRAMES 7 AND 8)
; 5) DATA FIELD (FRAMES 9 TO 9+2*(RECORD LENGTH)-1 ; 5) DATA FIELD (FRAMES 9 TO 9+2*(RECORD LENGTH)-1
; 6) CHECKSUM FIELD - SUM OF ALL BYTE VALUES FROM RECORD LENGTH TO AND
; 6) CHECKSUM FIELD - SUM OF ALL BYTE VALUES FROM RECORD LENGTH TO AND
; INCLUDING CHECKSUM FIELD = 0 ] ; INCLUDING CHECKSUM FIELD = 0 ]
; ;
; EXAMPLE OF INTEL HEX FORMAT FILE ; EXAMPLE OF INTEL HEX FORMAT FILE
@ -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
INC HL ; INCREMENT POINTER TO NEXT MEMORY LOCATION
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 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_______________________________________________________________________
@ -355,7 +339,7 @@ DUMPMEM:
GDATA: GDATA:
INC DE ; BUMP DE FOR LATER COMPARE INC DE ; BUMP DE FOR LATER COMPARE
CALL NEWLINE ;
CALL NEWLINE ;
BLKRD: BLKRD:
CALL PHL ; PRINT START LOCATION CALL PHL ; PRINT START LOCATION
CALL PC_COLON CALL PC_COLON
@ -375,7 +359,7 @@ NXTONE:
LD A,(HL) ; GET BYTE LD A,(HL) ; GET BYTE
CALL PRTHEXBYTE ; DISPLAY IT CALL PRTHEXBYTE ; DISPLAY IT
CALL PC_SPACE ; CALL PC_SPACE ;
UPDH:
UPDH:
INC HL ; POINT NEXT INC HL ; POINT NEXT
DEC C ; DEC LOC COUNT DEC C ; DEC LOC COUNT
JR NZ,NXTONE ; IF LINE NOT DONE JR NZ,NXTONE ; IF LINE NOT DONE
@ -390,10 +374,10 @@ PCRLF0:
LD A,(HL) ; O K. TO GET LD A,(HL) ; O K. TO GET
JR NZ,PDOT ; JR NZ,PDOT ;
DOT: DOT:
LD A,2EH ; LOAD A DOT
LD A,2EH ; LOAD A DOT
PDOT: PDOT:
CALL COUT ; PRINT IT CALL COUT ; PRINT IT
INC HL ;
INC HL ;
LD A,D ; LD A,D ;
CP H ; CP H ;
JR NZ,UPDH1 ; JR NZ,UPDH1 ;
@ -440,7 +424,7 @@ MOVEMEM1:
LD A,(HL) ; GET SOURCE VAUEE LD A,(HL) ; GET SOURCE VAUEE
LD (DE),A ; WRITE TO TARGET LOC LD (DE),A ; WRITE TO TARGET LOC
LD A,H ; CHECK MSB OF END ADR LD A,H ; CHECK MSB OF END ADR
CP B ;
CP B ;
JR NZ,MOVEMEM1 ; NO MATCH, LOOP JR NZ,MOVEMEM1 ; NO MATCH, LOOP
LD A,L ; CHECK LSB OF END ADR LD A,L ; CHECK LSB OF END ADR
CP C ; CP C ;
@ -475,7 +459,7 @@ FILLMEM1:
LD A,C ; FILL VALUE TO A LD A,C ; FILL VALUE TO A
LD (HL),A ; WRITE FILL VALUE TO CUR ADR (HL) LD (HL),A ; WRITE FILL VALUE TO CUR ADR (HL)
LD A,H ; CHECK MSB OF END ADR LD A,H ; CHECK MSB OF END ADR
CP D ;
CP D ;
JR NZ,FILLMEM1 ; NO MATCH, LOOP JR NZ,FILLMEM1 ; NO MATCH, LOOP
LD A,L ; CHECK LSB OF END ADR LD A,L ; CHECK LSB OF END ADR
CP E ; CP E ;
@ -533,7 +517,7 @@ WORDPARM:
; ;
;__GETLN______________________________________________________________________ ;__GETLN______________________________________________________________________
; ;
; READ A LINE OF TEXT FROM THE SERIAL PORT, HANDLE <BS>, TERM ON <CR>
; READ A LINE OF TEXT FROM THE SERIAL PORT, HANDLE <BS>, TERM ON <CR>
; EXIT IF TOO MANY CHARS STORE RESULT IN HL. CHAR COUNT IN C. ; EXIT IF TOO MANY CHARS STORE RESULT IN HL. CHAR COUNT IN C.
;_____________________________________________________________________________ ;_____________________________________________________________________________
; ;
@ -544,7 +528,7 @@ GETLNLOP:
; ENTRY LOOP ; ENTRY LOOP
CALL KIN ; GET A KEY CALL KIN ; GET A KEY
CP CHR_CR ; IS <CR>? CP CHR_CR ; IS <CR>?
JR Z,GETLNDONE ; YES, EXIT
JR Z,GETLNDONE ; YES, EXIT
CP CHR_BS ; IS <BS>? CP CHR_BS ; IS <BS>?
JR Z,GETLNBS ; IF SO, HANDLE IT JR Z,GETLNBS ; IF SO, HANDLE IT
CP ' ' ; UNEXPECTED CONTROL CHAR? CP ' ' ; UNEXPECTED CONTROL CHAR?
@ -557,7 +541,7 @@ GETLNLOP:
CALL COUT ; OUTPUT KEY TO SCREEN CALL COUT ; OUTPUT KEY TO SCREEN
LD (HL),A ; STORE CHAR IN BUFFER LD (HL),A ; STORE CHAR IN BUFFER
INC HL ; INC POINTER INC HL ; INC POINTER
INC C ; INC CHAR COUNTER
INC C ; INC CHAR COUNTER
JR GETLNLOP ; GET NEXT CHAR JR GETLNLOP ; GET NEXT CHAR
GETLNOVF: GETLNOVF:
; OVERFLOW ; OVERFLOW
@ -692,37 +676,40 @@ NIBL:
LD A,(HL) ; GET K B. DATA LD A,(HL) ; GET K B. DATA
INC HL ; INC KB POINTER INC HL ; INC KB POINTER
CP 40H ; TEST FOR ALPHA CP 40H ; TEST FOR ALPHA
JR NC,ALPH ;
JR NC,ALPH
AND 0FH ; GET THE BITS AND 0FH ; GET THE BITS
RET ;
RET
ALPH: ALPH:
AND 0FH ; GET THE BITS AND 0FH ; GET THE BITS
ADD A,09H ; MAKE IT HEX A-F ADD A,09H ; MAKE IT HEX A-F
RET ;
RET
; ;
;__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 CALL NIBLS ; DO A NIBBLE
RLC A ; MOVE FIRST BYTE UPPER NIBBLE
RLC A ;
RLC A ;
RLC A ;
LD B,A ; SAVE ROTATED BYTE
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
ADD A,B ; COMBINE NIBBLES IN ACC
POP BC ; RESTORE BC
RET ; DONE
OR 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________________________________________________________________________
; ;
@ -815,7 +802,7 @@ CST:
POP DE POP DE
POP BC POP BC
RET RET
;
;
#ELSE #ELSE
; ;
;__COUT_______________________________________________________________________ ;__COUT_______________________________________________________________________
@ -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):"
@ -943,7 +932,7 @@ DSKY_ENTRY:
; ;
;__FRONT_PANEL_STARTUP________________________________________________________ ;__FRONT_PANEL_STARTUP________________________________________________________
; ;
; START UP THE SYSTEM WITH THE FRONT PANEL INTERFACE
; START UP THE SYSTEM WITH THE FRONT PANEL INTERFACE
;_____________________________________________________________________________ ;_____________________________________________________________________________
; ;
CALL DSKY_INIT ; INIT 8255 CALL DSKY_INIT ; INIT 8255
@ -975,7 +964,7 @@ FRONTPANELLOOP1:
JR FRONTPANELLOOP ; LOOP JR FRONTPANELLOOP ; LOOP
EXIT: EXIT:
RET
RET
; ;
;__DOBOOT_____________________________________________________________________ ;__DOBOOT_____________________________________________________________________
; ;
@ -994,7 +983,7 @@ DOBOOT:
; POS 01234567 ; POS 01234567
;_____________________________________________________________________________ ;_____________________________________________________________________________
; ;
DOPORTREAD:
DOPORTREAD:
CALL GETPORT ; GET PORT INTO A CALL GETPORT ; GET PORT INTO A
PORTREADLOOP: PORTREADLOOP:
LD C,A ; STORE PORT IN "C" LD C,A ; STORE PORT IN "C"
@ -1016,7 +1005,7 @@ PORTREADGETKEY:
; POS 01234567 ; POS 01234567
;_____________________________________________________________________________ ;_____________________________________________________________________________
; ;
DOPORTWRITE:
DOPORTWRITE:
CALL GETPORT ; GET PORT INTO A CALL GETPORT ; GET PORT INTO A
PORTWRITELOOP: PORTWRITELOOP:
LD L,A ; SAVE PORT NUM LD L,A ; SAVE PORT NUM
@ -1077,11 +1066,11 @@ EXAMINELOOP:
EXAMINEGETKEY: EXAMINEGETKEY:
CALL KB_GET ; GET KEY FROM KB CALL KB_GET ; GET KEY FROM KB
CP KY_EN ; [EN] PRESSED, INC ADDRESS AND LOOP CP KY_EN ; [EN] PRESSED, INC ADDRESS AND LOOP
JR Z,EXAMINEFW ;
JR Z,EXAMINEFW ;
JR EXAMINEGETKEY ; NO VALID KEY, LOOP JR EXAMINEGETKEY ; NO VALID KEY, LOOP
EXAMINEFW: EXAMINEFW:
INC HL ; HL++ INC HL ; HL++
JR EXAMINELOOP ;
JR EXAMINELOOP ;
; ;
;__DODEPOSIT__________________________________________________________________ ;__DODEPOSIT__________________________________________________________________
; ;
@ -1110,11 +1099,11 @@ DEPOSITLOOP:
DEPOSITGETKEY: DEPOSITGETKEY:
CALL KB_GET ; GET KEY FROM KB CALL KB_GET ; GET KEY FROM KB
CP KY_EN ; [EN] PRESSED, INC ADDRESS AND LOOP CP KY_EN ; [EN] PRESSED, INC ADDRESS AND LOOP
JR Z,DEPOSITFW ;
JR Z,DEPOSITFW ;
JR DEPOSITGETKEY ; NO VALID KEY, LOOP JR DEPOSITGETKEY ; NO VALID KEY, LOOP
DEPOSITFW: DEPOSITFW:
INC HL ; INC HL ;
JR DEPOSITLOOP ;
JR DEPOSITLOOP ;
; ;
;__GETADDR____________________________________________________________________ ;__GETADDR____________________________________________________________________
; ;
@ -1142,9 +1131,9 @@ GETVALW:
LD (DISPLAYBUF+6),A ; LD (DISPLAYBUF+6),A ;
LD (DISPLAYBUF+7),A ; LD (DISPLAYBUF+7),A ;
GETVALW1: GETVALW1:
CALL ENCDISPLAY ;
CALL ENCDISPLAY ;
GETVALWLOOP: GETVALWLOOP:
CALL KB_GET ;
CALL KB_GET ;
CP $10 ; CP $10 ;
JP M,GETVALWNUM ; NUMBER PRESSED, STORE IT JP M,GETVALWNUM ; NUMBER PRESSED, STORE IT
CP KY_EN ; [EN] PRESSED, DONE CP KY_EN ; [EN] PRESSED, DONE
@ -1155,9 +1144,9 @@ GETVALWNUM:
LD C,A ; LD C,A ;
LD A,(DISPLAYBUF+5) ; SHIFT BYTES IN DISPLAY BUF TO THE LEFT LD A,(DISPLAYBUF+5) ; SHIFT BYTES IN DISPLAY BUF TO THE LEFT
LD (DISPLAYBUF+4),A ; LD (DISPLAYBUF+4),A ;
LD A,(DISPLAYBUF+6) ;
LD A,(DISPLAYBUF+6) ;
LD (DISPLAYBUF+5),A ; LD (DISPLAYBUF+5),A ;
LD A,(DISPLAYBUF+7) ;
LD A,(DISPLAYBUF+7) ;
LD (DISPLAYBUF+6),A ; LD (DISPLAYBUF+6),A ;
LD A,C ; DISPLAY KEYSTROKE IN RIGHT MOST DISPLAY (0) LD A,C ; DISPLAY KEYSTROKE IN RIGHT MOST DISPLAY (0)
LD (DISPLAYBUF+7),A ; LD (DISPLAYBUF+7),A ;
@ -1169,7 +1158,7 @@ GETVALWDONE:
SLA A ; SLA A ;
SLA A ; SLA A ;
SLA A ; SLA A ;
LD C,A ; STORE IT IN "C"
LD C,A ; STORE IT IN "C"
LD A,(DISPLAYBUF+7) ; GET DIGIT IN DISPLAY 7 LD A,(DISPLAYBUF+7) ; GET DIGIT IN DISPLAY 7
AND $0F AND $0F
OR C ; ADD IN NIBBLE STORED IN C OR C ; ADD IN NIBBLE STORED IN C
@ -1180,7 +1169,7 @@ GETVALWDONE:
SLA A ; SLA A ;
SLA A ; SLA A ;
SLA A ; SLA A ;
LD C,A ; STORE IT IN "C"
LD C,A ; STORE IT IN "C"
LD A,(DISPLAYBUF+5) ; GET DIGIT IN DISPLAY 5 LD A,(DISPLAYBUF+5) ; GET DIGIT IN DISPLAY 5
AND $0F AND $0F
OR C ; ADD IN NIBBLE STORED IN "C" OR C ; ADD IN NIBBLE STORED IN "C"
@ -1211,9 +1200,9 @@ GETVALUE:
LD (DISPLAYBUF+6),A ; LD (DISPLAYBUF+6),A ;
LD (DISPLAYBUF+7),A ; LD (DISPLAYBUF+7),A ;
GETVALUE1: GETVALUE1:
CALL ENCDISPLAY ;
CALL ENCDISPLAY ;
GETVALUELOOP: GETVALUELOOP:
CALL KB_GET ;
CALL KB_GET ;
CP $10 ; CP $10 ;
JP M,GETVALUENUM ; NUMBER PRESSED, STORE IT JP M,GETVALUENUM ; NUMBER PRESSED, STORE IT
CP KY_EN ; [EN] PRESSED, DONE CP KY_EN ; [EN] PRESSED, DONE
@ -1222,7 +1211,7 @@ GETVALUELOOP:
GETVALUENUM: GETVALUENUM:
OR $80 ; SET DP OR $80 ; SET DP
LD C,A ; LD C,A ;
LD A,(DISPLAYBUF+7) ;
LD A,(DISPLAYBUF+7) ;
LD (DISPLAYBUF+6),A ; LD (DISPLAYBUF+6),A ;
LD A,C ; LD A,C ;
LD (DISPLAYBUF+7),A ; LD (DISPLAYBUF+7),A ;
@ -1234,7 +1223,7 @@ GETVALUEDONE:
RLCA ; RLCA ;
RLCA ; RLCA ;
RLCA ; RLCA ;
LD C,A ;
LD C,A ;
LD A,(DISPLAYBUF+7) ; LD A,(DISPLAYBUF+7) ;
AND $0F AND $0F
OR C ; OR C ;
@ -1265,7 +1254,7 @@ PUTVALUE:
;__KB_GET_____________________________________________________________________ ;__KB_GET_____________________________________________________________________
; ;
; GET A SINGLE KEY AND DECODE ; GET A SINGLE KEY AND DECODE
;
;
;_____________________________________________________________________________ ;_____________________________________________________________________________
; ;
KB_GET: KB_GET:
@ -1280,7 +1269,7 @@ KB_GET:
; NOT A DIGIT OR [EN], BAIL OUT TO MAIN LOOP TO HANDLE IT ; NOT A DIGIT OR [EN], BAIL OUT TO MAIN LOOP TO HANDLE IT
LD SP,MON_STACK ; CLEAR STACK LD SP,MON_STACK ; CLEAR STACK
JP FRONTPANELLOOP1 ; RESTART AT MAIN LOOP JP FRONTPANELLOOP1 ; RESTART AT MAIN LOOP
KB_GET1:
KB_GET1:
POP HL ; RESTORE HL POP HL ; RESTORE HL
POP DE POP DE
POP BC POP BC
@ -1353,19 +1342,19 @@ PORT .DB $13,$14,$15,$16,$10,$10,$00,$00 ; "Port 00" (ENCODED)
GOTO .DB $1A,$14,$10,$10,$00,$00,$00,$00 ; "Go 0000" (ENCODED) GOTO .DB $1A,$14,$10,$10,$00,$00,$00,$00 ; "Go 0000" (ENCODED)
; ;
;_HEX_7_SEG_DECODE_TABLE______________________________________________________ ;_HEX_7_SEG_DECODE_TABLE______________________________________________________
;
;
; SET BIT 7 TO DISPLAY W/ DECIMAL POINT ; SET BIT 7 TO DISPLAY W/ DECIMAL POINT
;_____________________________________________________________________________ ;_____________________________________________________________________________
; ;
SEGDECODE: SEGDECODE:
; POS $00 $01 $02 $03 $04 $05 $06 $07 ; POS $00 $01 $02 $03 $04 $05 $06 $07
; GLYPH '0' '1' '2' '3' '4' '5' '6' '7'
; GLYPH '0' '1' '2' '3' '4' '5' '6' '7'
.DB $7B, $30, $6D, $75, $36, $57, $5F, $70 .DB $7B, $30, $6D, $75, $36, $57, $5F, $70
;
;
; POS $08 $09 $0A $0B $0C $0D $0E $0F ; POS $08 $09 $0A $0B $0C $0D $0E $0F
; GLYPH '8' '9' 'A' 'B' 'C' 'D' 'E' 'F' ; GLYPH '8' '9' 'A' 'B' 'C' 'D' 'E' 'F'
.DB $7F, $77, $7E, $1F, $4B, $3D, $4F, $4E .DB $7F, $77, $7E, $1F, $4B, $3D, $4F, $4E
;
;
; POS $10 $11 $12 $13 $14 $15 $16 $17 $18 $19 $1A ; POS $10 $11 $12 $13 $14 $15 $16 $17 $18 $19 $1A
; GLYPH ' ' '-' '.' 'P' 'o' 'r' 't' 'A' 'd' 'r' 'G' ; GLYPH ' ' '-' '.' 'P' 'o' 'r' 't' 'A' 'd' 'r' 'G'
.DB $00, $04, $00, $6E, $1D, $0C, $0F, $7E, $3D, $0C, $5B .DB $00, $04, $00, $6E, $1D, $0C, $0F, $7E, $3D, $0C, $5B

Loading…
Cancel
Save