SET CLOCK PROGRAM Z80 ASSEMBLER PAGE 0001 ADDR CODE STMT SOURCE STATEMENT 0002 ********************************************************* 0003 * * 0004 * SET CLOCK PROGRAM FOR BIG-BOARD * 0005 * * 0006 * PROGRAMMED BY DON RETZLAFF - 1/29/81 * 0007 * * 0008 * PROGRAM SETS YEAR, MONTH, DAY, HOUR, MIN, SEC * 0009 * TWO DIGITS MUST BE ENTERED FOLLOWING EACH QUERY * 0010 * INSERT LEADING 0 IF NECESSARY * 0011 * C/R ENTERS ZERO * 0012 * * 0013 ********************************************************* 0014 * 0015 PSECT ABS >0100 0016 ORG 0100H 0017 * 0018 ** EQUATED SYMBOLS 0019 * >F006 0020 CONST EQU 0F006H ;CONSOLE INPUT STATUS TEST >F009 0021 CONIN EQU 0F009H ;CONSOLE INPUT ROUTINE >F00C 0022 CONOUT EQU 0F00CH ;CONSOLE >000D 0023 CR EQU 0DH ;C/R >000A 0024 LF EQU 0AH ;L/F >0004 0025 EOT EQU 04H ;END OF TABLE >0007 0026 BELL EQU 07H ;BELL >0008 0027 BSPACE EQU 'H'-64 ;BACK SPACE >FF5F 0028 YEAR EQU 0FF5FH ;ADRS OF YEAR >FF60 0029 MONTH EQU 0FF60H ;ADRS OF MONTH >FF61 0030 DAY EQU 0FF61H ;ADRS OF DAY >FF62 0031 HOUR EQU 0FF62H ;ADRS OF HOU >FF63 0032 MIN EQU 0FF63H ;ADRS OF MIN >FF64 0033 SEC EQU 0FF64H ;ADRS OF SEC 0034 * 0035 ** PRINT ENTER YEAR, MONTH, DAY, HOUR, MIN 0036 * 0100 CDC801 0037 CALL PNEXT ;PRINT "ENTER YEAR" 0103 0D0A 0038 DEFB CR,LF 0105 454E5445 0039 DEFM 'ENTER YEAR ' 52205945 41522020 0111 0704 0040 DEFB BELL,EOT 0113 CD8701 0041 CALL GET2D ;GET 2 DIGITS - YEAR 0116 325FFF 0042 LD (YEAR),A ;STORE YEAR 0119 FE00 0043 CP 0 ;CHECK IF 0 011B 2832 0044 JR Z,HR-$ ;YES GO TO HOUR 0045 * 011D CDC801 0046 CALL PNEXT ;PRINT "ENTER MONTH" 0120 0D0A 0047 DEFB CR,LF 0122 454E5445 0048 DEFM 'ENTER MONTH ' 52204D4F 4E544820 012E 0704 0049 DEFB BELL,EOT 0130 CD8701 0050 CALL GET2D ;GET 2 DIGITS - MONTH 0133 3260FF 0051 LD (MONTH),A ;STORE MONTH 0052 * 0136 CDC801 0053 CALL PNEXT ;PRINT "ENTER DAY" 0139 0D0A 0054 DEFB CR,LF 013B 454E5445 0055 DEFM 'ENTER DAY ' SET CLOCK PROGRAM Z80 ASSEMBLER PAGE 0002 ADDR CODE STMT SOURCE STATEMENT 52204441 59202020 0147 0704 0056 DEFB BELL,EOT 0149 CD8701 0057 CALL GET2D ;GET 2 DIGITS - DAY 014C 3261FF 0058 LD (DAY),A ;STORE DAY 0059 * >014F 0060 HR EQU $ 014F CDC801 0061 CALL PNEXT ;PRINT "ENTER HOUR" 0152 0D0A 0062 DEFB CR,LF 0154 454E5445 0063 DEFM 'ENTER HOUR ' 5220484F 55522020 0160 0704 0064 DEFB BELL,EOT 0162 CD8701 0065 CALL GET2D ;GET 2 DIGITS - HOUR 0165 3262FF 0066 LD (HOUR),A ;STORE HOUR 0067 * 0168 CDC801 0068 CALL PNEXT ;PRINT "ENTER MIN" 016B 0D0A 0069 DEFB CR,LF 016D 454E5445 0070 DEFM 'ENTER MIN ' 52204D49 4E202020 0179 0704 0071 DEFB BELL,EOT 017B CD8701 0072 CALL GET2D ;GET 2 DIGITS - MIN 017E 3263FF 0073 LD (MIN),A ;STORE MIN 0074 * 0181 3E00 0075 LD A,0 ;CLEAR SECONDS 0183 3264FF 0076 LD (SEC),A 0186 C9 0077 RET 0078 * 0079 ** ROUTINE TO GET 2 DIGITS AND CONVERT TO BINARY 0080 * >0187 0081 GET2D EQU $ 0187 CDA501 0082 CALL GETDIG ;GET 10'S DIGIT 018A FE0D 0083 CP CR ;CHECK FOR C/R 018C 2814 0084 JR Z,CREXT-$ ;YES 018E 47 0085 LD B,A ;SAVE 10'S DIGIT 018F CDA501 0086 CALL GETDIG ;GET 1'S DIGIT 0192 FE0D 0087 CP CR ;CHECK FOR C/R 0194 280C 0088 JR Z,CREXT-$ ;YES 0196 4F 0089 LD C,A ;SAVE 1'S DIGIT 0090 * 0091 ** MULTIPLY 10'S DIGIT BY 10 0092 * 0197 78 0093 LD A,B ;GET 10'S DIGIT 0198 CB27 0094 SLA A ;MULTIPLY BY 8 019A CB27 0095 SLA A 019C CB27 0096 SLA A 019E 80 0097 ADD A,B ;ADD 10'S DIGIT TWICE 019F 80 0098 ADD A,B 0099 * 01A0 81 0100 ADD A,C ;ADD 1'S DIGIT 01A1 C9 0101 RET 0102 * >01A2 0103 CREXT EQU $ 01A2 3E00 0104 LD A,0 ;SET VALUE TO ZERO 01A4 C9 0105 RET 0106 * 0107 ** ROUTINE TO GET DIGIT SET CLOCK PROGRAM Z80 ASSEMBLER PAGE 0003 ADDR CODE STMT SOURCE STATEMENT 0108 * >01A5 0109 GETDIG EQU $ 01A5 CD09F0 0110 CALL CONIN ;INPUT A CHARACTER 01A8 F5 0111 PUSH AF 01A9 CD0CF0 0112 CALL CONOUT ;ECHO IT 01AC F1 0113 POP AF 01AD FE0D 0114 CP CR ;CHECK FOR C/R 01AF C8 0115 RET Z ;YES 01B0 FE08 0116 CP BSPACE ;CHECK FOR BACK SPACE 01B2 28D3 0117 JR Z,GET2D-$ ;YES - GET DIGITS AGAIN 01B4 FE30 0118 CP 030H ;CHECK IF >= ASCII 0 01B6 3807 0119 JR C,BADCHR-$ ;< ERROR 01B8 FE3A 0120 CP 03AH ;CHECK <= ASCII 9 01BA 3003 0121 JR NC,BADCHR-$ ;> ERROR 01BC E60F 0122 AND 0FH ;MASK OUT ASCII BITS 01BE C9 0123 RET 0124 * >01BF 0125 BADCHR EQU $ 01BF CDC801 0126 CALL PNEXT ;DELETE LAST CHARACTER 01C2 080704 0127 DEFB BSPACE,BELL,EOT 01C5 C3A501 0128 JP GETDIG ;TRY AGAIN 0129 * 0130 ** PRINT MESSAGE ROUTINE - PRINT ASCII CHARACTER STRING 0131 ** FOLLOWING CALL STMT UNTIL EOT IS ENCOUNTERED IN STRING 0132 * >01C8 0133 PNEXT EQU $ 01C8 E3 0134 EX (SP),HL ;GET RETURN ADRS 01C9 CDCE01 0135 CALL PMSG ;PRINT MESSAGE 01CC E3 0136 EX (SP),HL ;SETUP NEW RETURN ADRS 01CD C9 0137 RET 0138 * 01CE 7E 0139 PMSG LD A,(HL) ;GET CHARACTER 01CF 23 0140 INC HL ;BUMP POINTER 01D0 FE04 0141 CP EOT ;CHECK FOR END OF TABLE 01D2 C8 0142 RET Z ;DONE 01D3 CDD801 0143 CALL OUTPUT ;OUTPUT CHARACTER 01D6 18F6 0144 JR PMSG-$ ;GET NEXT CHARACTER 0145 * 0146 ** OUTPUT ROUTINE 0147 * >01D8 0148 OUTPUT EQU $ 01D8 CD0CF0 0149 CALL CONOUT ;OUTPUT CHAR 01DB CD06F0 0150 CALL CONST ;SEE IF INPUT IS PENDING 01DE 2803 0151 JR Z,OUTP01-$ ;NO - OUTPUT NEXT CHAR 01E0 CD09F0 0152 CALL CONIN ;GET CHARACTER - THROW AWAY >01E3 0153 OUTP01 EQU $ 01E3 C9 0154 RET 0155 END SET CLOCK PROGRAM Z80 ASSEMBLER PAGE 0004 ADDR CODE STMT SOURCE STATEMENT BADCHR 01BF BELL 0007 BSPACE 0008 CONIN F009 CONOUT F00C CONST F006 CR 000D CREXT 01A2 DAY FF61 EOT 0004 GET2D 0187 GETDIG 01A5 HOUR FF62 HR 014F LF 000A MIN FF63 MONTH FF60 OUTP01 01E3 OUTPUT 01D8 PMSG 01CE PNEXT 01C8 SEC FF64 YEAR FF5F SET CLOCK PROGRAM Z80 ASSEMBLER PAGE 0005 ADDR CODE STMT SOURCE STATEMENT CROSS REFERENCE LISTING SYMBOL VALUE TYPE STMT STATEMENT REFERENCES ------ ----- ---- ---- -------------------- BADCHR 01BF 0125 0121 0119 BELL 0007 0026 0127 0071 0064 0056 0049 0040 BSPACE 0008 0027 0127 0116 CONIN F009 0021 0152 0110 CONOUT F00C 0022 0149 0112 CONST F006 0020 0150 CR 000D 0023 0114 0087 0083 0069 0062 0054 0047 0038 CREXT 01A2 0103 0088 0084 DAY FF61 0030 0058 EOT 0004 0025 0141 0127 0071 0064 0056 0049 0040 GET2D 0187 0081 0117 0072 0065 0057 0050 0041 GETDIG 01A5 0109 0128 0086 0082 HOUR FF62 0031 0066 HR 014F 0060 0044 LF 000A 0024 0069 0062 0054 0047 0038 MIN FF63 0032 0073 MONTH FF60 0029 0051 OUTP01 01E3 0153 0151 OUTPUT 01D8 0148 0143 PMSG 01CE 0139 0144 0135 PNEXT 01C8 0133 0126 0068 0061 0053 0046 0037 SEC FF64 0033 0076 YEAR FF5F 0028 0042 ERRORS=0000