CLOCK W/YEAR,MONTH,DAY,HOUR,MIN Z80 ASSEMBLER PAGE 0001 ADDR CODE STMT SOURCE STATEMENT 0002 ********************************************************* 0003 * * 0004 * CLOCK FOR BIGBOARD WITH PFM-80 VERSION 3.3 * 0005 * * 0006 * 2/DEC/80 RUSSELL SMITH * 0007 * * 0008 * MODIFIED BY DON RETZLAFF - JANUARY 23, 1980 * 0009 * * 0010 * TO INCLUDE SUPPORT OF DAY, MONTH, AND YEAR * 0011 * * 0012 ********************************************************* 0013 * 0014 PSECT ABS >F900 0015 ORG 0F900H ;**TEMP** 0016 * 0017 ** ROUTINE TO PUT CLOCK ROUTINE IN PROPER PLACE 0018 ** AND TO INITALIZE VECTORS 0019 * F900 211A01 0020 MOVEUP LD HL,CLOCK-$+100H F903 111AF9 0021 LD DE,CLOCK F906 01A800 0022 LD BC,LENGTH F909 EDB0 0023 LDIR F90B F3 0024 DI F90C 2A57FF 0025 LD HL,(TIKVEC) F90F 225AF9 0026 LD (VECSAV),HL F912 211AF9 0027 LD HL,CLOCK F915 2257FF 0028 LD (TIKVEC),HL F918 FB 0029 EI F919 C9 0030 RET 0031 * 0032 ** EQUATED SYMBOLS 0033 * >FF5F 0034 YEAR EQU 0FF5FH >FF60 0035 MONTH EQU 0FF60H >FF61 0036 DAY EQU 0FF61H >FF62 0037 HRS EQU 0FF62H >FF63 0038 MINS EQU 0FF63H >FF64 0039 SECS EQU 0FF64H >FF77 0040 BASE EQU 0FF77H >FF57 0041 TIKVEC EQU 0FF57H >3000 0042 CRTMEM EQU 3000H 0043 * 0044 ** CLOCK DISPLAY ROUTINE FOR INTERRUPT DRIVEN 0045 ** TIME-OF-DAY CLOCK UTILITY 0046 * F91A 2164FF 0047 CLOCK LD HL,SECS F91D CD7EF9 0048 CALL INCTIM ;INCREMENT TIME IN BINARY F920 3A77FF 0049 LD A,(BASE) ;GET LINE # OF BOTTOM OF SCREEN F923 3C 0050 INC A ;ADD 1 TO WRAP ARND TO TOP LINE F924 FE18 0051 CP 24 F926 3801 0052 JR C,CLOCK2-$ ;WATCH FOR MODULO 24 F928 AF 0053 XOR A F929 CB3F 0054 CLOCK2 SRL A ;TRNSFRM LINE # INTO 16 BIT ADRS F92B 2E8C 0055 LD L,70*2 ; WITH COL # COMPONENT = 70 F92D CB1D 0056 RR L F92F 110030 0057 LD DE,CRTMEM ;FIND PLACE IN SCREEN MEMORY F932 B2 0058 OR D F933 67 0059 LD H,A CLOCK W/YEAR,MONTH,DAY,HOUR,MIN Z80 ASSEMBLER PAGE 0002 ADDR CODE STMT SOURCE STATEMENT F934 DB1C 0060 IN A,(1CH) F936 CBFF 0061 SET 7,A F938 D31C 0062 OUT (1CH),A F93A 1162FF 0063 LD DE,HRS ;POINT DE TO CLOCK HOURS F93D 3620 0064 LD (HL),' ' F93F CD66F9 0065 CALL PUTDEC ;DISPLAY HOURS F942 363A 0066 LD (HL),':' F944 23 0067 INC HL F945 CD66F9 0068 CALL PUTDEC ;DISPLAY MINUTES F948 363A 0069 LD (HL),':' F94A 23 0070 INC HL F94B CD66F9 0071 CALL PUTDEC ;DISPLAY SECONDS F94E 3620 0072 LD (HL),' ' F950 DB1C 0073 IN A,(1CH),A F952 CBBF 0074 RES 7,A F954 D31C 0075 OUT (1CH),A F956 2A5AF9 0076 LD HL,(VECSAV) F959 E9 0077 JP (HL) ;RETURN 0078 * F95A 0000 0079 VECSAV DEFW 0 0080 * 0081 ** PUT HRS, MINS, OR SEC ON SCREEN 0082 * F95C 1A 0083 PUTHRS LD A,(DE) F95D FE00 0084 CP 0 ;CHECK IF 0 F95F C267F9 0085 JP NZ,PUTD0 ;NO - OUTPUT IT F962 3E18 0086 LD A,24 ;YES - MAKE IT 24 F964 1801 0087 JR PUTD0-$ F966 1A 0088 PUTDEC LD A,(DE) F967 13 0089 PUTD0 INC DE F968 0E00 0090 LD C,0 F96A D60A 0091 PUTD1 SUB 10 F96C 3803 0092 JR C,PUTD2-$ F96E 0C 0093 INC C F96F 18F9 0094 JR PUTD1-$ F971 C60A 0095 PUTD2 ADD A,10 F973 F5 0096 PUSH AF F974 79 0097 LD A,C F975 CD79F9 0098 CALL PUTDIG ;DISPLAY 10'S DIGIT OF TIME F978 F1 0099 POP AF F979 F630 0100 PUTDIG OR '0' ;MAKE MSB OF ACC INTO ASCII F97B 77 0101 LD (HL),A F97C 23 0102 INC HL ;STORE CHAR AND BUMP POINTER F97D C9 0103 RET 0104 * 0105 ** INCREMENT TIME ROUTINE 0106 * F97E 34 0107 INCTIM INC (HL) F97F 7E 0108 LD A,(HL) ;BUMP CLOCK SECS AND CHECK FOR F980 FE3C 0109 CP 60 ; ROLL-OVER AT END OF MUNUTE F982 D8 0110 RET C ;EXIT IF NO CARRY TO MINUTES F983 3600 0111 LD (HL),0 ;ELSE RESET SECONDS TO ZERO F985 2B 0112 DEC HL ; AND POINT NEXT TO MINUTES F986 34 0113 INC (HL) F987 7E 0114 LD A,(HL) ;BUMP CLOCK MINS AND CHECK FOR F988 FE3C 0115 CP 60 ; ROLL OVER AT END OF HOUR F98A D8 0116 RET C ;EXIT IF NO CARRY INTO HOURS F98B 3600 0117 LD (HL),0 ;ELSE RESET MINUTES TO ZERO CLOCK W/YEAR,MONTH,DAY,HOUR,MIN Z80 ASSEMBLER PAGE 0003 ADDR CODE STMT SOURCE STATEMENT F98D 2B 0118 DEC HL ; AND POINT NEXT TO HOURS F98E 34 0119 INC (HL) F98F 7E 0120 LD A,(HL) ;BUMP HOURS AND CHECK FOR F990 FE18 0121 CP 24 ; ROLL OVER AFTER 24 HOURS F992 D8 0122 RET C ;EXIT IF NO ROLL OVER F993 3600 0123 LD (HL),0 ;ELSE RESET HOURS TO 0 AND F995 2B 0124 DEC HL ; AND POINT NEXT TO DAYS F996 34 0125 INC (HL) ;BUMP DAYS F997 DD21B6F9 0126 LD IX,DAYTAB ;GET ADRS OF DAY TABLE F99B 3A60FF 0127 LD A,(MONTH) ;GET MONTH F99E 3D 0128 DEC A ;DECREMENT DISPLACEMENT F99F 32A7F9 0129 LD (MNUM),A ;PUT MONTH # IN INSTRUCTION F9A2 3A61FF 0130 LD A,(DAY) ;GET DAY # F9A5 DDBE00 0131 CP (IX+0) ;COMPARE DAY TO TABLE >F9A7 0132 MNUM EQU $-1 F9A8 F8 0133 RET M ;RETURN IF NO ROLL OVER REQUIRED F9A9 3601 0134 LD (HL),1 ;SET DAY TO 1 F9AB 2B 0135 DEC HL ; AND POINT NEXT TO MONTH F9AC 34 0136 INC (HL) ;BUMP MONTH F9AD 7E 0137 LD A,(HL) ;GET MONTH F9AE FE0D 0138 CP 13 ;CHECK IF >12 F9B0 D8 0139 RET C ;RETURN IF NO CARRY F9B1 3601 0140 LD (HL),1 ;RESET MONTH TO 1 F9B3 2B 0141 DEC HL ;POINT TO YEAR F9B4 34 0142 INC (HL) ;INCREMENT YEAR F9B5 C9 0143 RET ;RETURN 0144 * 0145 ** TABLE OF #DAYS+1 PER MONTH 0146 * F9B6 20 0147 DAYTAB DEFB 32 ;JAN F9B7 1D 0148 DEFB 29 ;FEB F9B8 20 0149 DEFB 32 ;MAR F9B9 1F 0150 DEFB 31 ;APR F9BA 20 0151 DEFB 32 ;MAY F9BB 1F 0152 DEFB 31 ;JUN F9BC 20 0153 DEFB 32 ;JUL F9BD 20 0154 DEFB 32 ;AUG F9BE 1F 0155 DEFB 31 ;SEP F9BF 20 0156 DEFB 32 ;OCT F9C0 1F 0157 DEFB 31 ;NOV F9C1 20 0158 DEFB 32 ;DEC 0159 * >00A8 0160 LENGTH EQU $-CLOCK 0161 * 0162 END CLOCK W/YEAR,MONTH,DAY,HOUR,MIN Z80 ASSEMBLER PAGE 0004 ADDR CODE STMT SOURCE STATEMENT BASE FF77 CLOCK F91A CLOCK2 F929 CRTMEM 3000 DAY FF61 DAYTAB F9B6 HRS FF62 INCTIM F97E LENGTH 00A8 MINS FF63 MNUM F9A7 MONTH FF60 MOVEUP F900 PUTD0 F967 PUTD1 F96A PUTD2 F971 PUTDEC F966 PUTDIG F979 PUTHRS F95C SECS FF64 TIKVEC FF57 VECSAV F95A YEAR FF5F CLOCK W/YEAR,MONTH,DAY,HOUR,MIN Z80 ASSEMBLER PAGE 0005 ADDR CODE STMT SOURCE STATEMENT CROSS REFERENCE LISTING SYMBOL VALUE TYPE STMT STATEMENT REFERENCES ------ ----- ---- ---- -------------------- BASE FF77 0040 0049 CLOCK F91A 0047 0160 0027 0021 0020 CLOCK2 F929 0054 0052 CRTMEM 3000 0042 0057 DAY FF61 0036 0130 DAYTAB F9B6 0147 0126 HRS FF62 0037 0063 INCTIM F97E 0107 0048 LENGTH 00A8 0160 0022 MINS FF63 0038 MNUM F9A7 0132 0129 MONTH FF60 0035 0127 MOVEUP F900 0020 PUTD0 F967 0089 0087 0085 PUTD1 F96A 0091 0094 PUTD2 F971 0095 0092 PUTDEC F966 0088 0071 0068 0065 PUTDIG F979 0100 0098 PUTHRS F95C 0083 SECS FF64 0039 0047 TIKVEC FF57 0041 0028 0025 VECSAV F95A 0079 0076 0026 YEAR FF5F 0034 ERRORS=0000 9