Clock time print string.... 1062 c2da 43 4c 4f 43 4b 20 MSG3 FCC 'CLOCK VALUE IS NOW:' 56 41 4c 55 45 20 49 53 20 4e 4f 57 3a 1063 c2ed 0d 04 FCB CR,04 Stuff Deleted..... 1091 c434 0d 04 FCB CR,4 1092 c436 44 55 4d 4d 59 20 MSG17 FCC 'DUMMY ' 1093 c43c 00 00 NEXTLOC FDB 0 1094 c43e 00 00 OLDLOC FDB 0 1095 c440 PRTCLK EQU * 1096 c440 ce c2 da LDX #MSG3 1097 c443 bd e4 fd JSR OUTSTRG0 1098 c446 bd c4 71 JSR READCLK 1099 c449 ce c4 d5 LDX #YEAR 1100 c44c bd e4 e4 JSR OUT1BSP 1101 c44f ce c4 d4 LDX #MONTH 1102 c452 bd e4 e4 JSR OUT1BSP 1103 c455 ce c4 d3 LDX #DATE 1104 c458 bd e4 e4 JSR OUT1BSP 1105 c45b ce c4 d1 LDX #HOURS 1106 c45e bd e4 e4 JSR OUT1BSP 1107 c461 ce c4 d0 LDX #MINS 1108 c464 bd e4 e4 JSR OUT1BSP 1109 c467 ce c4 cf LDX #SECS 1110 c46a bd e4 e4 JSR OUT1BSP 1111 c46d bd e4 ed JSR OUTCRLF 1112 c470 39 RTS This is the tricky part - if you got here from an interrupt, you COULD have been in the process of reading the clock, which means the door is open - if you then access that memory location, the value in memory and/or clock will be scrambled - so make SURE that before you do anything else, you reset the access to start from the beginning of the sequence -- this hung me up for weeks! --BW 1113 c471 READCLK EQU * This section opens the door to the clock - note the funnyness of stuffing bits into the right location - not bytes.... 1114 c471 18 ce 00 64 LDY #100 1115 c475 b6 7f f0 RC1 LDAA CLOCK MAKE SURE CLOCK ACCESS OFF - COULD BE 1116 c478 18 09 DEY STILL OPEN IF HERE AFTER SW RESET... 1117 c47a 26 f9 BNE RC1 1118 c47c 18 ce 00 00 LDY #0 ZERO WRITE COUNTER 1119 c480 ce c4 c5 LDX #ATABLE-1 POINT X TO 1 BYTE BEFORE ACCESS TABLE 1120 c483 86 a3 LDAA #$A3 1121 c485 b7 c4 c8 STAA THEA3 ENABLE ACCESS TABLE 1122 c488 b6 7f f0 LDAA CLOCK RESET COMPARISON REGISTER 1123 c48b LOOP10 EQU * 1124 c48b 08 INX 1125 c48c 8c c4 ce CPX #ETABLE 1126 c48f 27 0f BEQ ENDACC POINT X AT NEXT BYTE OF ACCESS CODE 1127 c491 c6 08 LDAB #8 1128 c493 a6 00 LDAA 0,X GET NEXT BYTE OF ACCESS CODE 1129 c495 LOOP12 EQU * 1130 c495 b7 7f f0 STAA CLOCK STORE BIT INTO D0 OF CLOCK ADDRESS 1131 c498 46 RORA 1132 c499 LOOP13 EQU * 1133 c499 18 08 INY INCREMENT WRITE COUNTER 1134 c49b 5a DECB DECREMENT COUNTER IN B 1135 c49c 26 f7 BNE LOOP12 IF NOT WRITTEN 8 TIMES, CONTINUE 1136 c49e 20 eb BRA LOOP10 OTHERWISE, GET NEXT BYTE OF ACCESS CODE 1137 c4a0 ENDACC EQU * Once the door is open, we can now read the time - setting it is essentially the reverse procedure.... 1138 c4a0 READC EQU * READ THE CLOCK AFTER ACCESS SET 1139 c4a0 86 00 LDAA #0 1140 c4a2 97 00 STAA COUNT 1141 c4a4 ce c4 cd LDX #CDATO-1 1142 c4a7 RL10 EQU * 1143 c4a7 08 INX 1144 c4a8 8c c4 d6 CPX #COEND 1145 c4ab 27 16 BEQ ENDREAD END OF READ CLOCK ROUTINE 1146 c4ad 18 ce 00 08 LDY #8 1147 c4b1 86 00 LDAA #0 CLEAR REGISTER A 1148 c4b3 RL11 EQU * 1149 c4b3 f6 7f f0 LDAB CLOCK READ BYTE (BIT IN POSITION 0 WITH A2 HIGH) 1150 c4b6 56 RORB ROTATE LS BIT INTO CARRY FROM REG B 1151 c4b7 46 RORA ROTATE CARRY INTO LS BIT POSITION REG A 1152 c4b8 7c 00 00 INC COUNT INCREMENT CYCLE COUNTER 1153 c4bb 18 09 DEY DECREMENT Y 1154 c4bd 26 f4 BNE RL11 IF NOT DONE 8 TIMES, DO IT AGAIN 1155 c4bf a7 00 STAA 0,X STORE INTO CLOCK DATA OUT TABLE 1156 c4c1 20 e4 BRA RL10 GO GET NEXT BYTE 1157 c4c3 ENDREAD EQU * 1158 c4c3 39 RTS 1159 c4c4 00 00 NOVALS FDB 0 1160 c4c6 ATABLE EQU * CLOCK ACCESS TABLE 1161 c4c6 c5 3a FCB $C5,$3A 1162 c4c8 a3 5c c5 3a a3 5c THEA3 FCB $A3,$5C,$C5,$3A,$A3,$5C 1163 c4ce ETABLE EQU * 1164 1165 c4ce CDATO EQU * 1166 c4ce 00 SEC10S FCB 0 1167 c4cf 00 SECS FCB 0 1168 c4d0 00 MINS FCB 0 1169 c4d1 00 HOURS FCB 0 1170 c4d2 00 DAY FCB 0 1171 c4d3 00 DATE FCB 0 1172 c4d4 00 MONTH FCB 0 1173 c4d5 00 YEAR FCB 0 1174 c4d6 COEND EQU * 1175 c4d6 ESN EQU * 1176 c4d6 BUFFER EQU * 1177 c4d6 RMB 100 1178 c53a ENDBUF EQU * 1179 c53a DATASTRT EQU * 1180 de00 ENDDATA EQU $DE00