|
|
@ -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 |
|
|
@ -238,49 +238,49 @@ KLOP1: |
|
|
;_____________________________________________________________________________ |
|
|
;_____________________________________________________________________________ |
|
|
; |
|
|
; |
|
|
HXLOAD: |
|
|
HXLOAD: |
|
|
CALL NEWLINE ; SHOW READY |
|
|
|
|
|
|
|
|
CALL NEWLINE ; SHOW READY |
|
|
HXLOADLINE: |
|
|
HXLOADLINE: |
|
|
CALL CIN ; GET THE FIRST CHARACTER, EXPECTING A ':' |
|
|
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 |
|
|
|
|
|
CALL HEXINS ; GET NEXT TWO CHARACTERS, MEMORY LOAD ADDRESS <H> |
|
|
|
|
|
LD H,A ; PUT VALUE IN H REGISTER |
|
|
|
|
|
CALL HEXINS ; GET NEXT TWO CHARACTERS, MEMORY LOAD ADDRESS <L> |
|
|
|
|
|
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 |
|
|
|
|
|
|
|
|
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 |
|
|
|
|
|
CALL HEXINS ; GET NEXT TWO CHARACTERS, MEMORY LOAD ADDRESS <H> |
|
|
|
|
|
LD H,A ; PUT VALUE IN H REGISTER |
|
|
|
|
|
CALL HEXINS ; GET NEXT TWO CHARACTERS, MEMORY LOAD ADDRESS <L> |
|
|
|
|
|
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 |
|
|
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 |
|
|
|
|
|
|
|
|
INC A ; RECORD FIELD TYPE 00 IS DATA |
|
|
|
|
|
JR NZ,HXLOADTYPERR ; RECORD TYPE IS INCORRECT, ERROR OUT |
|
|
HXLOADDATA: |
|
|
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 |
|
|
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: |
|
|
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: |
|
|
HXLOADTYPERR: |
|
|
LD HL,TXT_RECORDERR ; GET "RECORD TYPE ERROR" MESSAGE |
|
|
LD HL,TXT_RECORDERR ; GET "RECORD TYPE ERROR" MESSAGE |
|
|
CALL PRTSTR ; PRINT MESSAGE FROM (HL) AND TERMINATE THE LOAD |
|
|
CALL PRTSTR ; PRINT MESSAGE FROM (HL) AND TERMINATE THE LOAD |
|
|
JP SERIALCMDLOOP ; RETURN TO PROMPT |
|
|
JP SERIALCMDLOOP ; RETURN TO PROMPT |
|
|
HXLOADEXIT: |
|
|
HXLOADEXIT: |
|
|
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 |
|
|
|
|
|
|
|
|
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 |
|
|
; |
|
|
; |
|
|
;__POUT_______________________________________________________________________ |
|
|
;__POUT_______________________________________________________________________ |
|
|
; |
|
|
; |
|
|
@ -339,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 |
|
|
@ -359,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 |
|
|
@ -374,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 ; |
|
|
@ -424,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 ; |
|
|
@ -459,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 ; |
|
|
@ -517,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. |
|
|
;_____________________________________________________________________________ |
|
|
;_____________________________________________________________________________ |
|
|
; |
|
|
; |
|
|
@ -528,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? |
|
|
@ -541,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 |
|
|
@ -649,17 +649,17 @@ HEXBYTE3: |
|
|
;_____________________________________________________________________________ |
|
|
;_____________________________________________________________________________ |
|
|
; |
|
|
; |
|
|
HEXWORD: |
|
|
HEXWORD: |
|
|
LD DE,0 ; INIT WORKING VALUE |
|
|
|
|
|
|
|
|
LD DE,0 ; INIT WORKING VALUE |
|
|
HEXWORD1: |
|
|
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 |
|
|
JR NZ,HEXWORD3 ; IF NOT, WE ARE DONE |
|
|
LD B,4 ; SHIFT WORKING VALUE (DE := DE * 16) |
|
|
LD B,4 ; SHIFT WORKING VALUE (DE := DE * 16) |
|
|
HEXWORD2: |
|
|
HEXWORD2: |
|
|
SLA E ; SHIFT LSB ONE BIT |
|
|
SLA E ; SHIFT LSB ONE BIT |
|
|
RL D ; SHIFT MSB ONE BIT |
|
|
RL D ; SHIFT MSB ONE BIT |
|
|
RET C ; RETURN W/ CF SET INDICATING OVERFLOW ERROR |
|
|
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 |
|
|
OR E ; COMBINE WITH LSB |
|
|
LD E,A ; AND PUT BACK IN WROKING VALUE |
|
|
LD E,A ; AND PUT BACK IN WROKING VALUE |
|
|
JR HEXWORD1 ; DO ANOTHER CHARACTER |
|
|
JR HEXWORD1 ; DO ANOTHER CHARACTER |
|
|
@ -673,16 +673,16 @@ HEXWORD3: |
|
|
;_____________________________________________________________________________ |
|
|
;_____________________________________________________________________________ |
|
|
; |
|
|
; |
|
|
NIBL: |
|
|
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 |
|
|
|
|
|
RET ; |
|
|
|
|
|
|
|
|
ADD A,09H ; MAKE IT HEX A-F |
|
|
|
|
|
RET |
|
|
; |
|
|
; |
|
|
;__HEXINS_____________________________________________________________________ |
|
|
;__HEXINS_____________________________________________________________________ |
|
|
; |
|
|
; |
|
|
@ -690,14 +690,14 @@ ALPH: |
|
|
;_____________________________________________________________________________ |
|
|
;_____________________________________________________________________________ |
|
|
; |
|
|
; |
|
|
HEXINS: |
|
|
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 |
|
|
LD B,A ; SAVE ROTATED NIBBLE |
|
|
CALL NIBLS ; DO NEXT NIBBLE |
|
|
|
|
|
OR A,B ; COMBINE NIBBLES IN ACC TO BYTE |
|
|
|
|
|
|
|
|
CALL NIBLS ; DO NEXT NIBBLE |
|
|
|
|
|
OR B ; COMBINE NIBBLES IN ACC TO BYTE |
|
|
LD B,A ; SAVE BYTE |
|
|
LD B,A ; SAVE BYTE |
|
|
ADD A,E ; ADD TO CHECKSUM |
|
|
ADD A,E ; ADD TO CHECKSUM |
|
|
LD E,A ; SAVE CHECKSUM |
|
|
LD E,A ; SAVE CHECKSUM |
|
|
@ -802,7 +802,7 @@ CST: |
|
|
POP DE |
|
|
POP DE |
|
|
POP BC |
|
|
POP BC |
|
|
RET |
|
|
RET |
|
|
; |
|
|
|
|
|
|
|
|
; |
|
|
#ELSE |
|
|
#ELSE |
|
|
; |
|
|
; |
|
|
;__COUT_______________________________________________________________________ |
|
|
;__COUT_______________________________________________________________________ |
|
|
@ -932,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 |
|
|
@ -964,7 +964,7 @@ FRONTPANELLOOP1: |
|
|
|
|
|
|
|
|
JR FRONTPANELLOOP ; LOOP |
|
|
JR FRONTPANELLOOP ; LOOP |
|
|
EXIT: |
|
|
EXIT: |
|
|
RET |
|
|
|
|
|
|
|
|
RET |
|
|
; |
|
|
; |
|
|
;__DOBOOT_____________________________________________________________________ |
|
|
;__DOBOOT_____________________________________________________________________ |
|
|
; |
|
|
; |
|
|
@ -983,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" |
|
|
@ -1005,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 |
|
|
@ -1066,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__________________________________________________________________ |
|
|
; |
|
|
; |
|
|
@ -1099,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____________________________________________________________________ |
|
|
; |
|
|
; |
|
|
@ -1131,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 |
|
|
@ -1144,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 ; |
|
|
@ -1158,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 |
|
|
@ -1169,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" |
|
|
@ -1200,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 |
|
|
@ -1211,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 ; |
|
|
@ -1223,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 ; |
|
|
@ -1254,7 +1254,7 @@ PUTVALUE: |
|
|
;__KB_GET_____________________________________________________________________ |
|
|
;__KB_GET_____________________________________________________________________ |
|
|
; |
|
|
; |
|
|
; GET A SINGLE KEY AND DECODE |
|
|
; GET A SINGLE KEY AND DECODE |
|
|
; |
|
|
|
|
|
|
|
|
; |
|
|
;_____________________________________________________________________________ |
|
|
;_____________________________________________________________________________ |
|
|
; |
|
|
; |
|
|
KB_GET: |
|
|
KB_GET: |
|
|
@ -1269,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 |
|
|
@ -1342,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 |
|
|
|