|
|
@ -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 |
|
|
|