; ;VECTCLK PROGRAM is the code for the Doran Engineering Electronic Vector Clock. ; It draws an analogue clock-face on the unit's CRT display using ; the G02 interface originally built for the SCALE-7 micro- ; processor system. The position of the clock's hands are ; determined by the program's internal time reference, which is ; advanced by a 1 Hz external signal connected to the Z80 NMI ; input. The clock may also be stopped, and the minutes or hours ; set, by manual controls. The minute and hour setting functions ; are connected to the Z80 INT input. ; ; Revision History: ; ; 1.0 -- Basic completed program, as described above. 12-hour ; analogue clock mode only. (VECT00.MAC) 10/25/2001. ; ; 2.0 -- Added digital clock mode, and 24-hour capability for both ; analogue and digital modes. (VECT01.MAC) 11/06/2001. ; .Z80 ;program is Z80 assembly language ; ;I/O port addresses. ; XMOVE EQU 0E0H ;XMOVE port address YMOVE EQU 0E1H ;YMOVE port address XSTORE EQU 0E2H ;XSTORE port address YDRAW EQU 0E3H ;YDRAW port address RESINT EQU 00H ;WRITE resets external interrupts SWITCH EQU 00H ;READ loads manual control settings ; ;Program constants. ; TICNUM EQU 03 ;number of times to draw hours tic marks SECNUM EQU 010 ;number of times to draw sec and min hands HOUNUM EQU 05 ;number of times to draw hour hand ; ;Program code begins here. First, we initialize everything on power-up. ; ASEG ORG 0000H ;starts at absolute address zero START: DI ;with interrupts disabled LD SP,087FFH ;initialize stack to top of RAM LD A,00 ;preset default seconds, minutes, hours LD (SECONDS),A LD (AMPM),A LD A,010 LD (MINUTES),A LD (HOURS),A LD (HRS24),A LD A,02H ;set up SHORT and LONG time constants LD (SCON),A LD A,025H LD (LCON),A IM 1 ;now, enable interrupts EI JP MAIN ;and then go execute the main program ; ;EXTERNAL INTERRUPT code starts here. Ext ints, caused by operation of the SET ;HOUR or SET MIN controls, vector to absolute address 0038H. This code will ;either advance the minutes or the hours, depending upon which button was ;depressed. ; ORG 0038H ;ext int vector address EXT_INT: PUSH AF ;save the accumulator and flags CALL SET ;set the clock OUT (RESINT),A ;clear the external interrupt source POP AF ;recover the accumulator and flags IM 1 ;re-enable interrupts EI RETI ;and go back to drawing the clock ; ;NON-MASKABLE INTERRUPT code starts here. NMIs, which arrive once each second ;from the external line-operated scaler, vector to absolute address 0066H. This ;code advances the clock by one second. ; ORG 0066H ;NMI vector address NM_INT: DI ;disable maskable interrupts PUSH AF ;save the accumulator and flags CALL TIMEKPR ;advance the clock's time reference POP AF ;recover IM 1 ;re-enable maskable interrupts EI RETN ;and go back to drawing the clock ; ;MAIN PROGRAM begins here. It reads the manual controls to determine the ; correct mode of operation (ANALOGUE, DIGITAL, or CALIBRATE) and ; then calls the appropriate subroutine. Determination and ; implementation of the two sub-modes, 12-hour and 24-hour, is ; accomplished within the individual primary mode subroutines ; themselves. MAIN is a loop, which executes continuously. ; MAIN: IN A,(SWITCH) ;read the manual controls BIT 3,A ;CALIBRATE mode? JP Z,GOCAL ;then go do it BIT 2,A ;otherwise, is it DIGITAL mode? JP Z,GODIG ;then go do it ; GOANA: LD A,025 ;program optimum LONG value for analogue LD (LCON),A CALL ANALOGUE ;and do ANALOGUE mode JP MAIN ;again and again ; GODIG: LD A,030H ;program optimum LONG for digital LD (LCON),A CALL DIGITAL ;and do DIGITAL mode JP MAIN ;again and again ; GOCAL: LD A,030H ;program optimum LONG for calibrate LD (LCON),A CALL CALIBRATE ;CALIBRATE mode JP MAIN ;again and again ; ;PROGRAM SUBROUTINES follow. ; ;ANALOGUE SUBROUTINE executes the analogue clock mode of operation. It draws ; a traditional clock face on the CRT display. It calls the ; BEZEL, SECTIC, HOUTIC, NUM12, NUM24A, NUM24B, SECHAND, ; MINHAND, and HOUHAND subroutines. ; ANALOGUE: IN A,(SWITCH) ;read the manual controls BIT 1,A ;24 hour mode? JP Z,ANA24 ;if so, go execute 24-hour code ; ;the following code assumes 12-hour mode of operation. ; CALL NUM12 ;draw the numerals for a 12-hour clock JP FACE ;and then the rest of it ; ;the following code is for 24-hour mode of operation. For times classified as ;"AM" in 12-hour mode, it displays numerals 0 through 11. For "PM", it displays ;12 through 23. ; ANA24: LD A,(AMPM) ;get the AM/PM indicator CP 0FFH ;"PM"? JP Z,PMNUMS ;if so, go draw the "PM" numerals CALL NUM24A ;if not, draw numerals for "AM" JP FACE ;and go draw the rest of it PMNUMS: CALL NUM24P ;numerals for "PM" ; ;the following code draws the rest of the clock face, such as the circular ;bezel, ledger lines, and hands. It is the same for both 12-hour and 24-hour ;operation. ; FACE: CALL BEZEL ;draw the bezel CALL SECTIC ;draw the seconds tic marks CALL HOUTIC ;draw the hours tic marks CALL SECHAND ;draw the second hand CALL MINHAND ;draw the minute hand CALL HOUHAND ;draw the hour hand ; RET ;and done ; ;NUM12 SUBROUTINE provides starting coordinates and calls individual numeral- ; drawing subroutines (ZERO through NINE) to draw the clock's ; numerals. This subroutine is used for the 12-hour analogue ; clock mode, AM and PM. ; NUM12: LD B,0114 ;draw a 1 at (left digit of 12) LD C,0214 CALL ONE LD B,0129 ;draw a 2 at (right digit of 12) LD C,0214 CALL TWO ; LD B,0173 ;draw 1 LD C,0201 CALL ONE ; LD B,0210 ;draw 2 LD C,0165 CALL TWO ; LD B,0224 ;draw 3 LD C,0118 CALL THREE ; LD B,0210 ;draw 4 LD C,070 CALL FOUR ; LD B,0172 ;draw 5 LD C,034 CALL FIVE ; LD B,0122 ;draw 6 LD C,021 CALL SIX ; LD B,074 ;draw 7 LD C,034 CALL SEVEN ; LD B,036 ;draw 8 LD C,070 CALL EIGHT ; LD B,021 ;draw 9 LD C,0118 CALL NINE ; LD B,032 ;draw a 1 at (left digit of 10) LD C,0165 CALL ONE LD B,047 ;draw a 0 at (right digit of 10) LD C,0165 CALL ZERO ; LD B,069 ;draw a 1 at (left digit of 11) LD C,0201 CALL ONE LD B,082 ;draw a 1 at (right digit of 11) LD C,0201 CALL ONE ; RET ; ;NUM24A SUBROUTINE provides starting coordinates and calls individual numeral- ; drawing subroutines (ZERO through NINE) to draw the clock's ; numerals. This subroutine is used for the "AM" portion of ; the 24-hour analogue clock mode (0000 through 1200 hours). ; NUM24A: LD B,0122 ;draw 0 LD C,0214 CALL ZERO ; LD B,0173 ;draw 1 LD C,0201 CALL ONE ; LD B,0210 ;draw 2 LD C,0165 CALL TWO ; LD B,0224 ;draw 3 LD C,0118 CALL THREE ; LD B,0210 ;draw 4 LD C,070 CALL FOUR ; LD B,0172 ;draw 5 LD C,034 CALL FIVE ; LD B,0122 ;draw 6 LD C,021 CALL SIX ; LD B,074 ;draw 7 LD C,034 CALL SEVEN ; LD B,036 ;draw 8 LD C,070 CALL EIGHT ; LD B,021 ;draw 9 LD C,0118 CALL NINE ; LD B,032 ;draw a 1 at (left digit of 10) LD C,0165 CALL ONE LD B,047 ;draw a 0 at (right digit of 10) LD C,0165 CALL ZERO ; LD B,069 ;draw a 1 at (left digit of 11) LD C,0201 CALL ONE LD B,082 ;draw a 1 at (right digit of 11) LD C,0201 CALL ONE ; RET ; ;NUM24P SUBROUTINE provides starting coordinates and calls individual numeral- ; drawing subroutines (ZERO through NINE) to draw the clock's ; numerals. This subroutine is used for the "PM" portion of ; the 24-hour analogue clock mode (1200 through 2400 hours). ; NUM24P: LD B,0114 ;draw a 1 at (left digit of 12) LD C,0214 CALL ONE LD B,0129 ;draw a 2 at (right digit of 12) LD C,0214 CALL TWO ; LD B,0158 ;draw a 1 at (left digit of 13) LD C,0201 CALL ONE LD B,0173 ;draw a 3 at (right digit of 13) LD C,0201 CALL THREE ; LD B,0195 ;draw a 1 at (left digit of 14) LD C,0165 CALL ONE LD B,0210 ;draw a 4 at (right digit of 14) LD C,0165 CALL FOUR ; LD B,0209 ;draw a 1 at (left digit of 15) LD C,0118 CALL ONE LD B,0224 ;draw a 5 at (right digit of 15) LD C,0118 CALL FIVE ; LD B,0195 ;draw a 1 at (left digit of 16) LD C,070 CALL ONE LD B,0210 ;draw a 6 at (right digit of 16) LD C,070 CALL SIX ; LD B,0157 ;draw a 1 at (left digit of 17) LD C,034 CALL ONE LD B,0172 ;draw a 7 at (right digit of 17) LD C,034 CALL SEVEN ; LD B,0114 ;draw a 1 at (left digit of 18) LD C,021 CALL ONE LD B,0129 ;draw an 8 at (right digit of 18) LD C,021 CALL EIGHT ; LD B,074 ;draw a 1 at (left digit of 19) LD C,034 CALL ONE LD B,089 ;draw a 9 at (right digit of 19) LD C,034 CALL NINE ; LD B,036 ;draw a 2 at (left digit of 20) LD C,070 CALL TWO LD B,051 ;draw a 0 at (right digit of 20) LD C,070 CALL ZERO ; LD B,021 ;draw a 2 at (left digit of 21) LD C,0118 CALL TWO LD B,036 ;draw a 1 at (right digit of 21) LD C,0118 CALL ONE ; LD B,032 ;draw a 2 at (left digit of 22) LD C,0165 CALL TWO LD B,047 ;draw a 2 at (right digit of 22) LD C,0165 CALL TWO ; LD B,069 ;draw a 2 at (left digit of 23) LD C,0201 CALL TWO LD B,084 ;draw a 3 at (right digit of 23) LD C,0201 CALL THREE ; RET ; ;BEZEL SUBROUTINE draws the clock's bezel, a circle of radius 127 counts. It ; calls the SHORT and LONG subroutines, and accesses the ; coordinate table CIRC0. ; BEZEL: LD A,114 ;set origin to (move pen to) 114,253 OUT (XMOVE),A LD A,253 OUT (YMOVE),A CALL SHORT ;delay 10 us to alLow DACs to stabilize ; BEGIN0: LD B,60 ;get number of vectors to draw LD HL,CIRC0 ;point to start of vector table ; DRAW0: LD A,(HL) ;load x-coord of destination OUT (XSTORE),A INC HL LD A,(HL) ;load y-coord and draw the vector OUT (YDRAW),A INC HL CALL LONG ;wait for vector to draw ; DEC B ;draw next vector JP NZ,DRAW0 ; RET ; ;SECTIC SUBROUTINE draws the clock's seconds tic marks. It calls the SHORT and ; LONG subroutines and accesses coordinate tables CIRC0 and CIRC1. CIRC1. ; SECTIC: LD D,60 ;get number of vectors to draw LD HL,CIRC0 ;point to start of coordinate tables LD BC,CIRC1 ; DRAW1: LD A,(HL) ;move pen to vector start coordinates OUT (XMOVE),A INC HL LD A,(HL) OUT (YMOVE),A INC HL CALL SHORT ;delay 10 us to allow DACs to stabilize ; LD A,(BC) ;draw vector to endpoint coordinates OUT (XSTORE),A INC BC LD A,(BC) OUT (YDRAW),A INC BC CALL LONG ;and wait for it to be completed ; DEC D ;next vector JP NZ,DRAW1 ; RET ; ; ;HOUTIC SUBROUTINE draws the clock's hours tic marks. It essentially writes ; over every fifth seconds tic mark to make them bolder. It ; calls the SHORT and LONG subroutines and accesses coordinate ; tables CIRC0 and CIRC1. ; HOUTIC: LD E,HOUNUM ;get number of times to draw tics LOOP3: LD D,12 ;get number of vectors to draw each time LD HL,CIRC0 ;point to start of coordinate tables LD BC,CIRC1 ; DRAW2: LD A,(HL) ;move pen to vector start coordinates OUT (XMOVE),A INC HL LD A,(HL) OUT (YMOVE),A INC HL ;point to next start INC HL INC HL INC HL INC HL INC HL INC HL INC HL INC HL CALL SHORT ;delay 10 us to allow DACs to stabilize ; LD A,(BC) ;draw vector to endpoint coordinates OUT (XSTORE),A INC BC LD A,(BC) OUT (YDRAW),A INC BC ;point to next endpoint INC BC INC BC INC BC INC BC INC BC INC BC INC BC INC BC CALL LONG ;and wait for it to be completed ; DEC D ;next vector JP NZ,DRAW2 ; DEC E JP NZ,LOOP3 ;draw tics the requisite number of times RET ;before returning ; ;SECHAND SUBROUTINE draws the clock's second hand. It calls the SHORT and LONG ; subroutines and accesses coordinate table CIRC2. ; SECHAND: LD A,(SECONDS) ;take the number of seconds (0 to 59) SLA A ;multiply by two LD C,A ;put it in BC as an index LD B,0 LD HL,CIRC2 ;get base address ADD HL,BC ;generate indexed address pointing to x LD A,(HL) ;get x LD (X),A ;save it INC HL ;point to y LD A,(HL) ;get y LD (Y),A ;save it ; LD D,SECNUM ;get number of times to draw hand DRAW3: LD A,0127 ;move beam to center of dial OUT (XMOVE),A OUT (YMOVE),A CALL SHORT ;let DACs stabilize LD A,(X) ;draw the hand from center to x,y OUT (XSTORE),A LD A,(Y) OUT (YDRAW),A CALL LONG DEC D JP NZ,DRAW3 ;draw the requisite number of times RET ;before returning ; ;MINHAND SUBROUTINE draws the clock's minute hand. It calls the SHORT and LONG ; subroutines and accesses coordinate table CIRC2. ; MINHAND: LD A,(MINUTES) ;take the number of minutes (0 to 59) SLA A ;multiply by two LD C,A ;put it in BC as an index LD B,0 LD HL,CIRC2 ;get base address ADD HL,BC ;generate indexed address pointing to x LD A,(HL) ;get x LD (X),A ;save it INC HL ;point to y LD A,(HL) ;get y LD (Y),A ;save it ; LD D,SECNUM ;get number of times to draw hand DRAW4: LD A,0127 ;move beam to center of dial OUT (XMOVE),A OUT (YMOVE),A CALL SHORT ;let DACs stabilize LD A,(X) ;draw the hand from center to x,y OUT (XSTORE),A LD A,(Y) OUT (YDRAW),A CALL LONG DEC D JP NZ,DRAW4 ;draw the requisite number of times RET ;before returning ; ;HOUHAND SUBROUTINE draws the clock's hour hand. It calls the SHORT and LONG ; subroutines and accesses coordinate table CIRC3. ; HOUHAND: LD A,(HOURS) ;take the number of hours (0 to 11) SLA A ;multiply by two LD C,A ;put it in BC as an index LD B,0 LD HL,CIRC3 ;get base address ADD HL,BC ;generate indexed address pointing to x LD A,(HL) ;get x LD (X),A ;save it INC HL ;point to y LD A,(HL) ;get y LD (Y),A ;save it ; LD D,HOUNUM ;get number of times to draw hand DRAW5: LD A,0127 ;move beam to center of dial OUT (XMOVE),A OUT (YMOVE),A CALL SHORT ;let DACs stabilize LD A,(X) ;draw the hand from center to x,y OUT (XSTORE),A LD A,(Y) OUT (YDRAW),A CALL LONG DEC D JP NZ,DRAW5 ;draw the requisite number of times RET ;before returning ; ;DIGITAL SUBROUTINE implements the digital clock function. It calls the ; NUMBER, BIGAY, BIGPEE, BIGEM, and COLON subroutines to draw ; the digits and AM/PM indicators on the display. ; DIGITAL: IN A,(SWITCH) ;read the manual controls BIT 1,A ;24 hour mode? JP Z,DIG24 ;if so, go execute 24-hour code ; ;the following code assumes 12-hour operation. It displays the hours, and then ;either AM or PM. ; LD B,026 ;load BC with the coordinates for the LD C,0134 ;most-significant hours digit LD A,(HOURS) ;get the hours CALL BIN2BCD ;convert it to BCD SRL A ;retain only the most-significant digit SRL A SRL A SRL A CALL NUMBER ;put it on the display LD B,075 ;load coords for least-significant digit LD C,0134 LD A,(HOURS) ;get the hours again CALL BIN2BCD ;convert it to BCD AND 0FH ;retain only the least-significant digit CALL NUMBER ;put it on the display ; LD A,(AMPM) ;PM? CP 0FFH JP Z,PEEOUT ;if so, go draw a P AYOUT: LD B,0141 ;else it's AM. Draw an A LD C,052 CALL BIGAY JP EMOUT ;then draw the M PEEOUT: LD B,0141 ;If PM, draw the P first LD C,052 CALL BIGPEE EMOUT: LD B,0190 ;and then the M LD C,052 CALL BIGEM JP MINSEC ;then, go display minutes and seconds ; ;the following code displays the hours for 24-hour operation. ; DIG24: LD B,026 ;load BC with the coordinates for the LD C,0134 ;most-significant hours digit LD A,(HRS24) ;get the hours CALL BIN2BCD ;convert it to BCD SRL A ;retain only the most-significant digit SRL A SRL A SRL A CALL NUMBER ;put it on the display LD B,075 ;load coords for least-significant digit LD C,0134 LD A,(HRS24) ;get the hours again CALL BIN2BCD ;convert it to BCD AND 0FH ;retain only the least-significant digit CALL NUMBER ;put it on the display ; ;the following code displays the minutes and seconds. It is the same for both ;12-hour and 24-hour operation. ; MINSEC: LD B,0141 ;load BC with the coordinates for the LD C,0134 ;most-significant minutes digit LD A,(MINUTES) ;get the minutes CALL BIN2BCD ;convert it to BCD SRL A ;retain only the most-significant digit SRL A SRL A SRL A CALL NUMBER ;put it on the display LD B,0190 ;load coords for least-significant digit LD C,0134 LD A,(MINUTES) ;get the minutes again CALL BIN2BCD ;convert it to BCD AND 0FH ;retain only the least-significant digit CALL NUMBER ;put it on the display ; LD B,0121 ;load BC with the coordinates for the LD C,0134 ;colon (:) between hours and minutes CALL COLON ;and draw the colon ; LD B,026 ;load BC with the coordinates for the LD C,052 ;most-significant seconds digit LD A,(SECONDS) ;get the seconds CALL BIN2BCD ;convert it to BCD SRL A ;retain only the most-significant digit SRL A SRL A SRL A CALL NUMBER ;put it on the display LD B,075 ;load coords for least-significant digit LD C,052 LD A,(SECONDS) ;get the seconds again CALL BIN2BCD ;convert it to BCD AND 0FH ;retain only the least-significant digit CALL NUMBER ;put it on the display ; RET ;and done ; ;NUMBER SUBROUTINE accepts a BCD digit in the least-significant nybble of the ; Accumulator. It then places the corresponding numeral at ; the coordinates stored in BC. It calls individual numeral- ; drawing subroutines (BIGZERO through BIGNINE). ; NUMBER: CP 00 ;is BCD digit zero? JP Z,DRWZERO ;if so, go draw zero CP 01 ;if not zero, is it one? JP Z,DRWONE ;if so, go draw one CP 02 ;and so on JP Z,DRWTWO CP 03 JP Z,DRWTHREE CP 04 JP Z,DRWFOUR CP 05 JP Z,DRWFIVE CP 06 JP Z,DRWSIX CP 07 JP Z,DRWSEVEN CP 08 JP Z,DRWEIGHT CP 09 JP Z,DRWNINE RET ;if value is not 0-9, ignore it DRWZERO: CALL BIGZERO ;if zero, draw numeral 0 at (BC) RET ;and done DRWONE: CALL BIGONE ;if one, draw numeral 1 at (BC) RET ;done DRWTWO: CALL BIGTWO ;and so on RET DRWTHREE: CALL BIGTHREE RET DRWFOUR: CALL BIGFOUR RET DRWFIVE: CALL BIGFIVE RET DRWSIX: CALL BIGSIX RET DRWSEVEN: CALL BIGSEVEN RET DRWEIGHT: CALL BIGEIGHT RET DRWNINE: CALL BIGNINE RET ; ;BIN2BCD SUBROUTINE accepts a 6-bit binary value, right-justified in the ; Accumulator, and returns the two-digit BCD value in the ; Accumulator. The two most significant bits of the ; input byte are set to zero, so any binary value greater ; than 63 will be returned as BCD 63. The subroutine ; accesses memory locations X and Y. ; BIN2BCD: PUSH BC ;save any BC contents so we can use C LD C,06 ;set loop constant SLA A ;left-justify the input SLA A LD (X),A ;and store it away LD A,00 ;clear the output to zero LD (Y),A ; CONVLOOP: LD A,(Y) ;get the output value SRL A ;now, isolate its MS nybble SRL A SRL A SRL A SUB 05 ;is it greater than or equal to 5? JP P,ADD3MS ;if so, go add 3 to it JP CHEKLS ;if not, do nothing to it! ADD3MS: LD A,(Y) ;get output ADD A,030H ;add three to the MS nybble LD (Y),A ;and store it back ; CHEKLS: LD A,(Y) ;get the output value AND 0FH ;isolate its LS nybble SUB 05 ;is it greater than or equal to 5? JP P,ADD3LS ;if so, go add 3 to it JP SHIFT ;if not, go shift the input into output ADD3LS: LD A,(Y) ;get output ADD A,03H ;add three to the LS nybble LD (Y),A ;and store it back ; SHIFT: LD A,(Y) ;get the output SLA A ;shift it left one bit, putting 0 in LSB LD (Y),A ;store it back LD A,(X) ;get the input SLA A ;shift it left one bit, putting MSB into CF LD (X),A ;and store it back LD A,(Y) ;get the shifted output ADC A,00H ;put CF into its LSB LD (Y),A ;then store it back ; DEC C ;decrement the shift count JP Z,BCDDONE ;zero? we're done JP CONVLOOP ;otherwise, keep looping ; BCDDONE: LD A,(Y) ;get the completed BCD output POP BC ;recover old BC contents RET ;and that's it ; ;CALIBRATE SUBROUTINE draws a test pattern--a simple square, with diagonals. ; It calls the SHORT and LONG subroutines. ; CALIBRATE: LD A,037 ;set the origin at (move beam to) 37,37 OUT (XMOVE),A OUT (YMOVE),A CALL SHORT ;delay 10 us to allow DACs to stabilize ; LD A,0217 ;draw a vector from 37,37 to 217,37 OUT (XSTORE),A LD A,037 OUT (YDRAW),A CALL LONG ;delay 110 us while vector is drawn ; LD A,0217 ;draw a vector from 217,37 to 217,217 OUT (XSTORE),A LD A,0217 OUT (YDRAW),A CALL LONG ;delay 110 us while vector is drawn ; LD A,037 ;draw a vector from 217,217 to 37,217 OUT (XSTORE),A LD A,0217 OUT (YDRAW),A CALL LONG ;delay 110 us while vector is drawn ; LD A,037 ;draw a vector from 37,217 to 37,37 OUT (XSTORE),A LD A,037 OUT (YDRAW),A CALL LONG ;delay 110 us while vector is drawn ; DIAGS: LD A,0217 ;draw a vector from 37,37 to 217,217 OUT (XSTORE),A LD A,0217 OUT (YDRAW),A CALL LONG ;delay 110 us while vector is drawn ; LD A,0217 ;move beam to 217,37 OUT (XMOVE),A LD A,037 OUT (YMOVE),A CALL SHORT ;delay 10 us to allow DACs to stabilize ; LD A,037 ;draw a vector from 217,37 to 37,217 OUT (XSTORE),A LD A,0217 OUT (YDRAW),A CALL LONG ;delay 110 us while vector is drawn ; RET ;and done ; ;TIMEKPR SUBROUTINE executes the actual timekeeping function. It advances the ; clock by one second if the RUN/STOP switch is in the RUN ; position. If the switch is in the STOP position, it ; returns without advancing the clock. ; TIMEKPR: IN A,(SWITCH) ;read the manual controls BIT 0,A ;RUN set? JP NZ,ADVANCE ;if so, go advance clock RET ;if not, quit without action ; ;the following code counts seconds. It counts from 0 to 59 and then rolls over ;to 0 again, carrying over to the minutes count when rolling over. ; ADVANCE: LD A,(SECONDS) ;get the seconds CP 059 ;is it 59? JP Z,ROLLSEC ;if so, go roll over INC A ;but if not, just advance it by one LD (SECONDS),A RET ;and we're done ROLLSEC: LD A,00 ;roll it to 0 LD (SECONDS),A ; ;the following code counts minutes. It counts from 0 to 59 and then rolls over ;to 0, carrying to the hours. ; LD A,(MINUTES) ;now get the minutes CP 059 ;59? JP Z,ROLLMIN ;if so, roll over INC A ;if not, advance by one LD (MINUTES),A RET ;and done ROLLMIN: LD A,00 ;roll to zero LD (MINUTES),A ; ;the following code counts hours. There are two independent counts, one for ;use by the 12-hour mode of operation, and one for use by the 24-hour mode. ;The 12-hour code counts from 0 to 11 and rolls over to 0, toggling the AM/PM ;indicator. The 24-hour code counts from 0 to 23 and rolls over to 0. ; LD A,(HOURS) ;finally, get the hours CP 011 ;is it 11? JP Z,ROLLHOU ;if so, go roll over INC A ;else advance it by one LD (HOURS),A JP MODE24 ;then do the same for 24-hour mode value ROLLHOU: LD A,00 ;if it was 11, roll it to zero LD (HOURS),A ; LD A,(AMPM) ;and then toggle AMPM CPL LD (AMPM),A ; MODE24: LD A,(HRS24) ;now get the 24-hour hours value CP 023 ;is it 23? JP Z,ROLL24 ;if so, go roll over INC A ;else advance it by one LD (HRS24),A RET ROLL24: LD A,00 ;if it was 23, roll it to zero LD (HRS24),A RET ;then, all done ; ;SET SUBROUTINE advances the hour or minute hand as requested by the manual ; controls. There is no carry from minutes to hours as in the ; TIMEKPR subroutine. ; SET: IN A,(SWITCH) ;read the manual controls BIT 4,A ;SET_HOUR button pressed? JP NZ,SETHOU ;if so, go advance hours ; SETMIN: LD A,(MINUTES) ;otherwise, get the minutes CP 059 ;is it 59? JP Z,ROLLM ;if so, go roll over INC A ;but if not, just advance it by one LD (MINUTES),A RET ;and we're done ROLLM: LD A,00 ;if it was 59, roll it to 0 LD (MINUTES),A RET ;and we're done ; SETHOU: LD A,(HOURS) ;get the hours CP 011 ;is it 11? JP Z,ROLLH ;if so, go roll over INC A ;else advance it by one LD (HOURS),A JP SET24 ;go do the same for the 24-hour hours value ROLLH: LD A,00 ;if it was 11, roll it to zero LD (HOURS),A ; LD A,(AMPM) ;and then toggle AMPM CPL LD (AMPM),A ; SET24: LD A,(HRS24) ;now get the 24-hour hours value CP 023 ;is it 23? JP Z,R24 ;if so, go roll over INC A ;else advance it by one LD (HRS24),A ;and done RET R24: LD A,00 ;if it was 23, roll it to zero LD (HRS24),A RET ;then, all done ; ;SHORT SUBROUTINE generates a shorter delay for beam ("pen") moves. ; SHORT: LD A,(SCON) ;get time constant LOOP1: DEC A ;decrement it until zero JP NZ,LOOP1 RET ; ;LONG SUBROUTINE generates a longer delay for actual vector drawing operation. ; LONG: LD A,(LCON) ;get time constant LOOP2: DEC A ;decrement it until zero JP NZ,LOOP2 RET ; ;ZERO SUBROUTINE draws the 7-segment numeral 0 at the coordinates stored in BC. ; ZERO: LD A,B ;move to origin OUT (XMOVE),A LD A,C OUT (YMOVE),A CALL SHORT ; LD A,B ;draw stroke from origin to relative 0,9 ADD A,0 OUT (XSTORE),A LD A,C ADD A,09 OUT (YDRAW),A CALL LONG ; LD A,B ;draw stroke from 0,9 to 0,18 ADD A,0 OUT (XSTORE),A LD A,C ADD A,018 OUT (YDRAW),A CALL LONG ; LD A,B ;draw stroke from 0,18 to 9,18 ADD A,09 OUT (XSTORE),A LD A,C ADD A,018 OUT (YDRAW),A CALL LONG ; LD A,B ;draw stroke from 9,18 to 9,9 ADD A,09 OUT (XSTORE),A LD A,C ADD A,09 OUT (YDRAW),A CALL LONG ; LD A,B ;draw stroke from 9,9 to 9,0 ADD A,09 OUT (XSTORE),A LD A,C ADD A,0 OUT (YDRAW),A CALL LONG ; LD A,B ;draw stroke from 9,0 to 0,0 ADD A,0 OUT (XSTORE),A LD A,C ADD A,0 OUT (YDRAW),A CALL LONG ; RET ;done ; ;ONE SUBROUTINE draws the 7-segment numeral 1 at the coordinates stored in BC. ; ONE: LD A,B ;move to relative 6,0 ADD A,06 OUT (XMOVE),A LD A,C ADD A,0 OUT (YMOVE),A CALL SHORT ; LD A,B ;draw stroke from 6,0 to 6,9 ADD A,06 OUT (XSTORE),A LD A,C ADD A,09 OUT (YDRAW),A CALL LONG ; LD A,B ;draw stroke from 6,9 to 6,18 ADD A,06 OUT (XSTORE),A LD A,C ADD A,018 OUT (YDRAW),A CALL LONG ; RET ;done ; ;TWO SUBROUTINE draws the 7-segment numeral 2 at the coordinates stored in BC. ; TWO: LD A,B ;move to relative 9,0 ADD A,09 OUT (XMOVE),A LD A,C ADD A,0 OUT (YMOVE),A CALL SHORT ; LD A,B ;draw stroke from 9,0 to 0,0 ADD A,0 OUT (XSTORE),A LD A,C ADD A,0 OUT (YDRAW),A CALL LONG ; LD A,B ;draw stroke from 0,0 to 0,9 ADD A,0 OUT (XSTORE),A LD A,C ADD A,09 OUT (YDRAW),A CALL LONG ; LD A,B ;draw stroke from 0,9 to 9,9 ADD A,09 OUT (XSTORE),A LD A,C ADD A,09 OUT (YDRAW),A CALL LONG ; LD A,B ;draw stroke from 9,9 to 9,18 ADD A,09 OUT (XSTORE),A LD A,C ADD A,018 OUT (YDRAW),A CALL LONG ; LD A,B ;draw stroke from 9,18 to 0,18 ADD A,0 OUT (XSTORE),A LD A,C ADD A,018 OUT (YDRAW),A CALL LONG ; RET ;done ; ;THREE SUBROUTINE draws the 7-segment numeral 3 at the coordinates stored in BC. ; THREE: LD A,B ;move to origin OUT (XMOVE),A LD A,C OUT (YMOVE),A CALL SHORT ; LD A,B ;draw stroke from 0,0 to 9,0 ADD A,09 OUT (XSTORE),A LD A,C ADD A,0 OUT (YDRAW),A CALL LONG ; LD A,B ;draw stroke from 9,0 to 9,9 ADD A,09 OUT (XSTORE),A LD A,C ADD A,09 OUT (YDRAW),A CALL LONG ; LD A,B ;draw stroke from 9,9 to 9,18 ADD A,09 OUT (XSTORE),A LD A,C ADD A,018 OUT (YDRAW),A CALL LONG ; LD A,B ;draw stroke from 9,18 to 0,18 ADD A,0 OUT (XSTORE),A LD A,C ADD A,018 OUT (YDRAW),A CALL LONG ; LD A,B ;move to 0,9 ADD A,0 OUT (XMOVE),A LD A,C ADD A,09 OUT (YMOVE),A CALL SHORT ; LD A,B ;draw stroke from 0,9 to 9,9 ADD A,09 OUT (XSTORE),A LD A,C ADD A,09 OUT (YDRAW),A CALL LONG ; RET ;done ; ;FOUR SUBROUTINE draws the 7-segment numeral 4 at the coordinates stored in BC. ; FOUR: LD A,B ;move to relative 0,18 ADD A,0 OUT (XMOVE),A LD A,C ADD A,018 OUT (YMOVE),A CALL SHORT ; LD A,B ;draw stroke from 0,18 to 0,9 ADD A,0 OUT (XSTORE),A LD A,C ADD A,09 OUT (YDRAW),A CALL LONG ; LD A,B ;draw stroke from 0,9 to 9,9 ADD A,09 OUT (XSTORE),A LD A,C ADD A,09 OUT (YDRAW),A CALL LONG ; LD A,B ;move to 9,18 ADD A,09 OUT (XMOVE),A LD A,C ADD A,018 OUT (YMOVE),A CALL SHORT ; LD A,B ;draw stroke from 9,18 to 9,9 ADD A,09 OUT (XSTORE),A LD A,C ADD A,09 OUT (YDRAW),A CALL LONG ; LD A,B ;draw stroke from 9,9 to 9,0 ADD A,09 OUT (XSTORE),A LD A,C ADD A,0 OUT (YDRAW),A CALL LONG ; RET ;done ; ;FIVE SUBROUTINE draws the 7-segment numeral 5 at the coordinates stored in BC. ; FIVE: LD A,B ;move to origin OUT (XMOVE),A LD A,C OUT (YMOVE),A CALL SHORT ; LD A,B ;draw stroke from 0,0 to 9,0 ADD A,09 OUT (XSTORE),A LD A,C ADD A,0 OUT (YDRAW),A CALL LONG ; LD A,B ;draw stroke from 9,0 to 9,9 ADD A,09 OUT (XSTORE),A LD A,C ADD A,09 OUT (YDRAW),A CALL LONG ; LD A,B ;draw stroke from 9,9 to 0,9 ADD A,0 OUT (XSTORE),A LD A,C ADD A,09 OUT (YDRAW),A CALL LONG ; LD A,B ;draw stroke from 0,9 to 0,18 ADD A,0 OUT (XSTORE),A LD A,C ADD A,018 OUT (YDRAW),A CALL LONG ; LD A,B ;draw stroke from 0,18 to 9,18 ADD A,09 OUT (XSTORE),A LD A,C ADD A,018 OUT (YDRAW),A CALL LONG ; RET ;done ; ;SIX SUBROUTINE draws the 7-segment numeral 6 at the coordinates stored in BC. ; SIX: LD A,B ;move to relative 0,9 ADD A,0 OUT (XMOVE),A LD A,C ADD A,09 OUT (YMOVE),A CALL SHORT ; LD A,B ;draw stroke from 0,9 to 9,9 ADD A,09 OUT (XSTORE),A LD A,C ADD A,09 OUT (YDRAW),A CALL LONG ; LD A,B ;draw stroke from 9,9 to 9,0 ADD A,09 OUT (XSTORE),A LD A,C ADD A,0 OUT (YDRAW),A CALL LONG ; LD A,B ;draw stroke from 9,0 to 0,0 ADD A,0 OUT (XSTORE),A LD A,C ADD A,0 OUT (YDRAW),A CALL LONG ; LD A,B ;draw stroke from 0,0 to 0,9 ADD A,0 OUT (XSTORE),A LD A,C ADD A,09 OUT (YDRAW),A CALL LONG ; LD A,B ;draw stroke from 0,9 to 0,18 ADD A,0 OUT (XSTORE),A LD A,C ADD A,018 OUT (YDRAW),A CALL LONG ; LD A,B ;draw stroke from 0,18 to 9,18 ADD A,09 OUT (XSTORE),A LD A,C ADD A,018 OUT (YDRAW),A CALL LONG ; RET ;done ; ;SEVEN SUBROUTINE draws the 7-segment numeral 7 at the coordinates stored in BC. ; SEVEN: LD A,B ;move to relative 0,18 ADD A,0 OUT (XMOVE),A LD A,C ADD A,018 OUT (YMOVE),A CALL SHORT ; LD A,B ;draw stroke from 0,18 to 9,18 ADD A,09 OUT (XSTORE),A LD A,C ADD A,018 OUT (YDRAW),A CALL LONG ; LD A,B ;draw stroke from 9,18 to 9,9 ADD A,09 OUT (XSTORE),A LD A,C ADD A,09 OUT (YDRAW),A CALL LONG ; LD A,B ;draw stroke from 9,9 to 9,0 ADD A,09 OUT (XSTORE),A LD A,C ADD A,0 OUT (YDRAW),A CALL LONG ; RET ;done ; ;EIGHT SUBROUTINE draws the 7-segment numeral 8 at the coordinates stored in BC. ; EIGHT: LD A,B ;move to relative 0,9 ADD A,0 OUT (XMOVE),A LD A,C ADD A,09 OUT (YMOVE),A CALL SHORT ; LD A,B ;draw stroke from 0,9 to 0,18 ADD A,0 OUT (XSTORE),A LD A,C ADD A,018 OUT (YDRAW),A CALL LONG ; LD A,B ;draw stroke from 0,18 to 9,18 ADD A,09 OUT (XSTORE),A LD A,C ADD A,018 OUT (YDRAW),A CALL LONG ; LD A,B ;draw stroke from 9,18 to 9,9 ADD A,09 OUT (XSTORE),A LD A,C ADD A,09 OUT (YDRAW),A CALL LONG ; LD A,B ;draw stroke from 9,9 to 0,9 ADD A,0 OUT (XSTORE),A LD A,C ADD A,09 OUT (YDRAW),A CALL LONG ; LD A,B ;draw stroke from 0,9 to 0,0 ADD A,0 OUT (XSTORE),A LD A,C ADD A,0 OUT (YDRAW),A CALL LONG ; LD A,B ;draw stroke from 0,0 to 9,0 ADD A,09 OUT (XSTORE),A LD A,C ADD A,0 OUT (YDRAW),A CALL LONG ; LD A,B ;draw stroke from 9,0 to 9,9 ADD A,09 OUT (XSTORE),A LD A,C ADD A,09 OUT (YDRAW),A CALL LONG ; RET ;done ; ;NINE SUBROUTINE draws the 7-segment numeral 9 at the coordinates stored in BC. ; NINE: LD A,B ;move to origin OUT (XMOVE),A LD A,C OUT (YMOVE),A CALL SHORT ; LD A,B ;draw stroke from 0,0 to 9,0 ADD A,09 OUT (XSTORE),A LD A,C ADD A,0 OUT (YDRAW),A CALL LONG ; LD A,B ;draw stroke from 9,0 to 9,9 ADD A,09 OUT (XSTORE),A LD A,C ADD A,09 OUT (YDRAW),A CALL LONG ; LD A,B ;draw stroke from 9,9 to 9,18 ADD A,09 OUT (XSTORE),A LD A,C ADD A,018 OUT (YDRAW),A CALL LONG ; LD A,B ;draw stroke from 9,18 to 0,18 ADD A,0 OUT (XSTORE),A LD A,C ADD A,018 OUT (YDRAW),A CALL LONG ; LD A,B ;draw stroke from 0,18 to 0,9 ADD A,0 OUT (XSTORE),A LD A,C ADD A,09 OUT (YDRAW),A CALL LONG ; LD A,B ;draw stroke from 0,9 to 9,9 ADD A,09 OUT (XSTORE),A LD A,C ADD A,09 OUT (YDRAW),A CALL LONG ; RET ;done ; ;BIGZERO SUBROUTINE draws the formed numeral 0 at the coordinates stored in BC. ; BIGZERO: LD A,B ;move to origin OUT (XMOVE),A LD A,C OUT (YMOVE),A CALL SHORT ; LD A,B ;draw stroke from origin to relative 33,66 ADD A,033 OUT (XSTORE),A LD A,C ADD A,066 OUT (YDRAW),A CALL LONG ; LD A,B ;move to 33,55 ADD A,033 OUT (XMOVE),A LD A,C ADD A,055 OUT (YMOVE),A CALL SHORT ; LD A,B ;draw from 33,55 to 33,11 ADD A,033 OUT (XSTORE),A LD A,C ADD A,011 OUT (YDRAW),A CALL LONG ; LD A,B ;draw from 33,11 to 22,0 ADD A,022 OUT (XSTORE),A LD A,C ADD A,0 OUT (YDRAW),A CALL LONG ; LD A,B ;draw from 22,0 to 11,0 ADD A,011 OUT (XSTORE),A LD A,C ADD A,0 OUT (YDRAW),A CALL LONG ; LD A,B ;draw from 11,0 to 0,11 ADD A,0 OUT (XSTORE),A LD A,C ADD A,011 OUT (YDRAW),A CALL LONG ; LD A,B ;draw from 0,11 to 0,55 ADD A,0 OUT (XSTORE),A LD A,C ADD A,055 OUT (YDRAW),A CALL LONG ; LD A,B ;draw from 0,55 to 11,66 ADD A,011 OUT (XSTORE),A LD A,C ADD A,066 OUT (YDRAW),A CALL LONG ; LD A,B ;draw from 11,66 to 22,66 ADD A,022 OUT (XSTORE),A LD A,C ADD A,066 OUT (YDRAW),A CALL LONG ; LD A,B ;draw from 22,66 to 33,55 ADD A,033 OUT (XSTORE),A LD A,C ADD A,055 OUT (YDRAW),A CALL LONG ; RET ; ;BIGONE SUBROUTINE draws the formed numeral 1 at the coordinates stored in BC. ; BIGONE: LD A,B ;move to relative 11,0 ADD A,011 OUT (XMOVE),A LD A,C ADD A,0 OUT (YMOVE),A CALL SHORT ; LD A,B ;draw stroke from 11,0 to 33,0 ADD A,033 OUT (XSTORE),A LD A,C ADD A,0 OUT (YDRAW),A CALL LONG ; LD A,B ;move to 22,0 ADD A,022 OUT (XMOVE),A LD A,C ADD A,0 OUT (YMOVE),A CALL SHORT ; LD A,B ;draw stroke from 22,0 to 22,66 ADD A,022 OUT (XSTORE),A LD A,C ADD A,066 OUT (YDRAW),A CALL LONG ; LD A,B ;draw stroke from 22,66 to 11,55 ADD A,011 OUT (XSTORE),A LD A,C ADD A,055 OUT (YDRAW),A CALL LONG ; RET ; ;BIGTWO SUBROUTINE draws the formed numeral 2 at the coordinates stored in BC. ; BIGTWO: LD A,B ;move to relative 33,0 ADD A,033 OUT (XMOVE),A LD A,C ADD A,0 OUT (YMOVE),A CALL SHORT ; LD A,B ;draw stroke from 33,0 to 0,0 ADD A,0 OUT (XSTORE),A LD A,C ADD A,0 OUT (YDRAW),A CALL LONG ; LD A,B ;draw stroke from 0,0 to 0,22 ADD A,0 OUT (XSTORE),A LD A,C ADD A,022 OUT (YDRAW),A CALL LONG ; LD A,B ;draw stroke from 0,22 to 11,33 ADD A,011 OUT (XSTORE),A LD A,C ADD A,033 OUT (YDRAW),A CALL LONG ; LD A,B ;draw stroke from 11,33 to 22,33 ADD A,022 OUT (XSTORE),A LD A,C ADD A,033 OUT (YDRAW),A CALL LONG ; LD A,B ;draw stroke from 22,33 to 33,44 ADD A,033 OUT (XSTORE),A LD A,C ADD A,044 OUT (YDRAW),A CALL LONG ; LD A,B ;draw stroke from 33,44 to 33,55 ADD A,033 OUT (XSTORE),A LD A,C ADD A,055 OUT (YDRAW),A CALL LONG ; LD A,B ;draw stroke from 33,55 to 22,66 ADD A,022 OUT (XSTORE),A LD A,C ADD A,066 OUT (YDRAW),A CALL LONG ; LD A,B ;draw stroke from 22,66 to 11,66 ADD A,011 OUT (XSTORE),A LD A,C ADD A,066 OUT (YDRAW),A CALL LONG ; LD A,B ;draw stroke from 11,66 to 0,55 ADD A,0 OUT (XSTORE),A LD A,C ADD A,055 OUT (YDRAW),A CALL LONG ; RET ; ;BIGTHREE SUBROUTINE draws the formed numeral 3 at the coordinates stored in BC. ; BIGTHREE: LD A,B ;move to relative 0,11 ADD A,0 OUT (XMOVE),A LD A,C ADD A,011 OUT (YMOVE),A CALL SHORT ; LD A,B ;draw stroke from 0,11 to 11,0 ADD A,011 OUT (XSTORE),A LD A,C ADD A,0 OUT (YDRAW),A CALL LONG ; LD A,B ;draw stroke from 11,0 to 22,0 ADD A,022 OUT (XSTORE),A LD A,C ADD A,0 OUT (YDRAW),A CALL LONG ; LD A,B ;draw stroke from 22,0 to 33,11 ADD A,033 OUT (XSTORE),A LD A,C ADD A,011 OUT (YDRAW),A CALL LONG ; LD A,B ;draw stroke from 33,11 to 33,22 ADD A,033 OUT (XSTORE),A LD A,C ADD A,022 OUT (YDRAW),A CALL LONG ; LD A,B ;draw stroke from 33,22 to 22,33 ADD A,022 OUT (XSTORE),A LD A,C ADD A,033 OUT (YDRAW),A CALL LONG ; LD A,B ;draw stroke from 22,33 to 11,33 ADD A,011 OUT (XSTORE),A LD A,C ADD A,033 OUT (YDRAW),A CALL LONG ; LD A,B ;move back to 22,33 ADD A,022 OUT (XMOVE),A LD A,C ADD A,033 OUT (YMOVE),A CALL SHORT ; LD A,B ;draw stroke from 22,33 to 33,44 ADD A,033 OUT (XSTORE),A LD A,C ADD A,044 OUT (YDRAW),A CALL LONG ; LD A,B ;draw stroke from 33,44 to 33,55 ADD A,033 OUT (XSTORE),A LD A,C ADD A,055 OUT (YDRAW),A CALL LONG ; LD A,B ;draw stroke from 33,55 to 22,66 ADD A,022 OUT (XSTORE),A LD A,C ADD A,066 OUT (YDRAW),A CALL LONG ; LD A,B ;draw stroke from 22,66, to 11,66 ADD A,011 OUT (XSTORE),A LD A,C ADD A,066 OUT (YDRAW),A CALL LONG ; LD A,B ;draw stroke from 11,66 to 0,55 ADD A,0 OUT (XSTORE),A LD A,C ADD A,055 OUT (YDRAW),A CALL LONG ; RET ; ;BIGFOUR SUBROUTINE draws the formed numeral 4 at the coordinates stored in BC. ; BIGFOUR: LD A,B ;move to relative 22,0 ADD A,022 OUT (XMOVE),A LD A,C ADD A,0 OUT (YMOVE),A CALL SHORT ; LD A,B ;draw stroke from 22,0 to 22,66 ADD A,022 OUT (XSTORE),A LD A,C ADD A,066 OUT (YDRAW),A CALL LONG ; LD A,B ;move to relative 0,66 ADD A,0 OUT (XMOVE),A LD A,C ADD A,066 OUT (YMOVE),A CALL SHORT ; LD A,B ;draw stroke from 0,66 to 0,33 ADD A,0 OUT (XSTORE),A LD A,C ADD A,033 OUT (YDRAW),A CALL LONG ; LD A,B ;draw stroke from 0,33 to 33,33 ADD A,033 OUT (XSTORE),A LD A,C ADD A,033 OUT (YDRAW),A CALL LONG ; RET ; ;BIGFIVE SUBROUTINE draws the formed numeral 5 at the coordinates stored in BC. ; BIGFIVE: LD A,B ;move to relative 0,11 ADD A,0 OUT (XMOVE),A LD A,C ADD A,011 OUT (YMOVE),A CALL SHORT ; LD A,B ;draw stroke from 0,11 to 11,0 ADD A,011 OUT (XSTORE),A LD A,C ADD A,0 OUT (YDRAW),A CALL LONG ; LD A,B ;draw stroke from 11,0 to 22,0 ADD A,022 OUT (XSTORE),A LD A,C ADD A,0 OUT (YDRAW),A CALL LONG ; LD A,B ;draw stroke from 22,0 to 33,11 ADD A,033 OUT (XSTORE),A LD A,C ADD A,011 OUT (YDRAW),A CALL LONG ; LD A,B ;draw stroke from 33,11 to 33,22 ADD A,033 OUT (XSTORE),A LD A,C ADD A,022 OUT (YDRAW),A CALL LONG ; LD A,B ;draw stroke from 33,22 to 22,33 ADD A,022 OUT (XSTORE),A LD A,C ADD A,033 OUT (YDRAW),A CALL LONG ; LD A,B ;draw stroke from 22,33 to 11,33 ADD A,011 OUT (XSTORE),A LD A,C ADD A,033 OUT (YDRAW),A CALL LONG ; LD A,B ;draw stroke from 11,33 to 0,44 ADD A,0 OUT (XSTORE),A LD A,C ADD A,044 OUT (YDRAW),A CALL LONG ; LD A,B ;draw stroke from 0,44 to 0,66 ADD A,0 OUT (XSTORE),A LD A,C ADD A,066 OUT (YDRAW),A CALL LONG ; LD A,B ;draw stroke from 0,66 to 33,66 ADD A,033 OUT (XSTORE),A LD A,C ADD A,066 OUT (YDRAW),A CALL LONG ; RET ; ;BIGSIX SUBROUTINE draws the formed numeral 6 at the coordinates stored in BC. ; BIGSIX: LD A,B ;move to relative 0,22 ADD A,0 OUT (XMOVE),A LD A,C ADD A,022 OUT (YMOVE),A CALL SHORT ; LD A,B ;draw stroke from 0,22 to 11,33 ADD A,011 OUT (XSTORE),A LD A,C ADD A,033 OUT (YDRAW),A CALL LONG ; LD A,B ;draw stroke from 11,33 to 22,33 ADD A,022 OUT (XSTORE),A LD A,C ADD A,033 OUT (YDRAW),A CALL LONG ; LD A,B ;draw stroke from 22,33 to 33,22 ADD A,033 OUT (XSTORE),A LD A,C ADD A,022 OUT (YDRAW),A CALL LONG ; LD A,B ;draw stroke from 33,22 to 33,11 ADD A,033 OUT (XSTORE),A LD A,C ADD A,011 OUT (YDRAW),A CALL LONG ; LD A,B ;draw stroke from 33,11 to 22,0 ADD A,022 OUT (XSTORE),A LD A,C ADD A,0 OUT (YDRAW),A CALL LONG ; LD A,B ;draw stroke from 22,0 to 11,0 ADD A,011 OUT (XSTORE),A LD A,C ADD A,0 OUT (YDRAW),A CALL LONG ; LD A,B ;draw stroke from 11,0 to 0,11 ADD A,0 OUT (XSTORE),A LD A,C ADD A,011 OUT (YDRAW),A CALL LONG ; LD A,B ;draw stroke from 0,11 to 0,55 ADD A,0 OUT (XSTORE),A LD A,C ADD A,055 OUT (YDRAW),A CALL LONG ; LD A,B ;draw stroke from 0,55 to 11,66 ADD A,011 OUT (XSTORE),A LD A,C ADD A,066 OUT (YDRAW),A CALL LONG ; LD A,B ;draw stroke from 11,66 to 22,66 ADD A,022 OUT (XSTORE),A LD A,C ADD A,066 OUT (YDRAW),A CALL LONG ; LD A,B ;draw stroke from 22,66 to 33,55 ADD A,033 OUT (XSTORE),A LD A,C ADD A,055 OUT (YDRAW),A CALL LONG ; RET ; ;BIGSEVEN SUBROUTINE draws the formed numeral 7 at the coordinates stored in BC. ; BIGSEVEN: LD A,B ;move to origin OUT (XMOVE),A LD A,C OUT (YMOVE),A CALL SHORT ; LD A,B ;draw stroke from 0,0 to 33,66 ADD A,033 OUT (XSTORE),A LD A,C ADD A,066 OUT (YDRAW),A CALL LONG ; LD A,B ;draw stroke from 33,66 to 0,66 ADD A,0 OUT (XSTORE),A LD A,C ADD A,066 OUT (YDRAW),A CALL LONG ; LD A,B ;draw stroke from 0,66 to 0,55 ADD A,0 OUT (XSTORE),A LD A,C ADD A,055 OUT (YDRAW),A CALL LONG ; LD A,B ;move to 11,33 ADD A,011 OUT (XMOVE),A LD A,C ADD A,033 OUT (YMOVE),A CALL SHORT ; LD A,B ;draw stroke from 11,33 to 22,33 ADD A,022 OUT (XSTORE),A LD A,C ADD A,033 OUT (YDRAW),A CALL LONG ; RET ; ;BIGEIGHT SUBROUTINE draws the formed numeral 8 at the coordinates stored in BC. ; BIGEIGHT: LD A,B ;move to relative 22,33 ADD A,022 OUT (XMOVE),A LD A,C ADD A,033 OUT (YMOVE),A CALL SHORT ; LD A,B ;draw stroke from 22,33 to 33,44 ADD A,033 OUT (XSTORE),A LD A,C ADD A,044 OUT (YDRAW),A CALL LONG ; LD A,B ;draw stroke from 33,44 to 33,55 ADD A,033 OUT (XSTORE),A LD A,C ADD A,055 OUT (YDRAW),A CALL LONG ; LD A,B ;draw stroke from 33,55 to 22,66 ADD A,022 OUT (XSTORE),A LD A,C ADD A,066 OUT (YDRAW),A CALL LONG ; LD A,B ;draw stroke from 22,66 to 11,66 ADD A,011 OUT (XSTORE),A LD A,C ADD A,066 OUT (YDRAW),A CALL LONG ; LD A,B ;draw stroke from 11,66 to 0,55 ADD A,0 OUT (XSTORE),A LD A,C ADD A,055 OUT (YDRAW),A CALL LONG ; LD A,B ;draw stroke from 0,55 to 0,44 ADD A,0 OUT (XSTORE),A LD A,C ADD A,044 OUT (YDRAW),A CALL LONG ; LD A,B ;draw stroke from 0,44 to 11,33 ADD A,011 OUT (XSTORE),A LD A,C ADD A,033 OUT (YDRAW),A CALL LONG ; LD A,B ;draw stroke from 11,33 to 22,33 ADD A,022 OUT (XSTORE),A LD A,C ADD A,033 OUT (YDRAW),A CALL LONG ; LD A,B ;draw stroke from 22,33 to 33,22 ADD A,033 OUT (XSTORE),A LD A,C ADD A,022 OUT (YDRAW),A CALL LONG ; LD A,B ;draw stroke from 33,22 to 33,11 ADD A,033 OUT (XSTORE),A LD A,C ADD A,011 OUT (YDRAW),A CALL LONG ; LD A,B ;draw stroke from 33,11 to 22,0 ADD A,022 OUT (XSTORE),A LD A,C ADD A,0 OUT (YDRAW),A CALL LONG ; LD A,B ;draw stroke from 22,0 to 11,0 ADD A,011 OUT (XSTORE),A LD A,C ADD A,0 OUT (YDRAW),A CALL LONG ; LD A,B ;draw stroke from 11,0 to 0,11 ADD A,0 OUT (XSTORE),A LD A,C ADD A,011 OUT (YDRAW),A CALL LONG ; LD A,B ;draw stroke from 0,11 to 0,22 ADD A,0 OUT (XSTORE),A LD A,C ADD A,022 OUT (YDRAW),A CALL LONG ; LD A,B ;draw stroke from 0,22 to 11,33 ADD A,011 OUT (XSTORE),A LD A,C ADD A,033 OUT (YDRAW),A CALL LONG ; RET ; ;BIGNINE SUBROUTINE draws the formed numeral 9 at the coordinates stored in BC. ; BIGNINE: LD A,B ;move to relative 33,44 ADD A,033 OUT (XMOVE),A LD A,C ADD A,044 OUT (YMOVE),A CALL SHORT ; LD A,B ;draw stroke from 33,44 to 33,55 ADD A,033 OUT (XSTORE),A LD A,C ADD A,055 OUT (YDRAW),A CALL LONG ; LD A,B ;draw stroke from 33,55 to 22,66 ADD A,022 OUT (XSTORE),A LD A,C ADD A,066 OUT (YDRAW),A CALL LONG ; LD A,B ;draw stroke from 22,66 to 11,66 ADD A,011 OUT (XSTORE),A LD A,C ADD A,066 OUT (YDRAW),A CALL LONG ; LD A,B ;draw stroke from 11,66 to 0,55 ADD A,0 OUT (XSTORE),A LD A,C ADD A,055 OUT (YDRAW),A CALL LONG ; LD A,B ;draw stroke from 0,55 to 0,44 ADD A,0 OUT (XSTORE),A LD A,C ADD A,044 OUT (YDRAW),A CALL LONG ; LD A,B ;draw stroke from 0,44 to 11,33 ADD A,011 OUT (XSTORE),A LD A,C ADD A,033 OUT (YDRAW),A CALL LONG ; LD A,B ;draw stroke from 11,33 to 22,33 ADD A,022 OUT (XSTORE),A LD A,C ADD A,033 OUT (YDRAW),A CALL LONG ; LD A,B ;draw stroke from 22,33 to 33,44 ADD A,033 OUT (XSTORE),A LD A,C ADD A,044 OUT (YDRAW),A CALL LONG ; LD A,B ;draw stroke from 33,44 to 33,11 ADD A,033 OUT (XSTORE),A LD A,C ADD A,011 OUT (YDRAW),A CALL LONG ; LD A,B ;draw stroke from 33,11 to 22,0 ADD A,022 OUT (XSTORE),A LD A,C ADD A,0 OUT (YDRAW),A CALL LONG ; LD A,B ;draw stroke from 22,0 to 11,0 ADD A,011 OUT (XSTORE),A LD A,C ADD A,0 OUT (YDRAW),A CALL LONG ; LD A,B ;draw stroke from 11,0 to 0,11 ADD A,0 OUT (XSTORE),A LD A,C ADD A,011 OUT (YDRAW),A CALL LONG ; RET ; ;AY SUBROUTINE draws the small formed character A at the coordinates stored in BC. ; AY: LD A,B ;move to origin OUT (XMOVE),A LD A,C OUT (YMOVE),A CALL SHORT ; LD A,B ;draw stroke from origin to relative 0,9 ADD A,0 OUT (XSTORE),A LD A,C ADD A,09 OUT (YDRAW),A CALL LONG ; LD A,B ;draw stroke from 0,9 to 4,18 ADD A,04 OUT (XSTORE),A LD A,C ADD A,018 OUT (YDRAW),A CALL LONG ; LD A,B ;draw stroke from 4,18 to 9,9 ADD A,09 OUT (XSTORE),A LD A,C ADD A,09 OUT (YDRAW),A CALL LONG ; LD A,B ;draw stroke from 9,9 to 9,0 ADD A,09 OUT (XSTORE),A LD A,C ADD A,00 OUT (YDRAW),A CALL LONG ; LD A,B ;move to relative 0,9 ADD A,0 OUT (XMOVE),A LD A,C ADD A,09 OUT (YMOVE),A CALL SHORT ; LD A,B ;draw stroke from 0,9 to 9,9 ADD A,09 OUT (XSTORE),A LD A,C ADD A,09 OUT (YDRAW),A CALL LONG ; RET ; ;PEE SUBROUTINE draws the small formed character P at the coordinates stored in BC. ; PEE: LD A,B ;move to origin OUT (XMOVE),A LD A,C OUT (YMOVE),A CALL SHORT ; LD A,B ;draw stroke from origin to 0,9 ADD A,0 OUT (XSTORE),A LD A,C ADD A,09 OUT (YDRAW),A CALL LONG ; LD A,B ;draw stroke from 0,9 to 0,18 ADD A,0 OUT (XSTORE),A LD A,C ADD A,018 OUT (YDRAW),A CALL LONG ; LD A,B ;draw stroke from 0,18 to 6,18 ADD A,06 OUT (XSTORE),A LD A,C ADD A,018 OUT (YDRAW),A CALL LONG ; LD A,B ;draw stroke from 6,18 to 9,15 ADD A,09 OUT (XSTORE),A LD A,C ADD A,015 OUT (YDRAW),A CALL LONG ; LD A,B ;draw stroke from 9,15 to 9,12 ADD A,09 OUT (XSTORE),A LD A,C ADD A,012 OUT (YDRAW),A CALL LONG ; LD A,B ;draw stroke from 9,12 to 6,9 ADD A,06 OUT (XSTORE),A LD A,C ADD A,09 OUT (YDRAW),A CALL LONG ; LD A,B ;draw stroke from 6,9 to 0,9 ADD A,0 OUT (XSTORE),A LD A,C ADD A,09 OUT (YDRAW),A CALL LONG ; RET ; ;EM SUBROUTINE draws the small formed character M at the coordinates stored in BC. ; EM: LD A,B ;move to origin OUT (XMOVE),A LD A,C OUT (YMOVE),A CALL SHORT ; LD A,B ;draw stroke from origin to 0,9 ADD A,0 OUT (XSTORE),A LD A,C ADD A,09 OUT (YDRAW),A CALL LONG ; LD A,B ;draw stroke from 0,9 to 0,18 ADD A,0 OUT (XSTORE),A LD A,C ADD A,018 OUT (YDRAW),A CALL LONG ; LD A,B ;draw stroke from 0,18 to 4,9 ADD A,04 OUT (XSTORE),A LD A,C ADD A,09 OUT (YDRAW),A CALL LONG ; LD A,B ;draw stroke from 4,9 to 9,18 ADD A,09 OUT (XSTORE),A LD A,C ADD A,018 OUT (YDRAW),A CALL LONG ; LD A,B ;draw stroke from 9,18 to 9,9 ADD A,09 OUT (XSTORE),A LD A,C ADD A,09 OUT (YDRAW),A CALL LONG ; LD A,B ;draw stroke from 9,9 to 9,0 ADD A,09 OUT (XSTORE),A LD A,C ADD A,0 OUT (YDRAW),A CALL LONG ; RET ; ;BIGAY SUBROUTINE draws the large formed character A at the coordinates stored ; in BC. ; BIGAY: LD A,B ;move to origin OUT (XMOVE),A LD A,C OUT (YMOVE),A CALL SHORT ; LD A,B ;draw stroke from origin to relative 0,33 ADD A,0 OUT (XSTORE),A LD A,C ADD A,033 OUT (YDRAW),A CALL LONG ; LD A,B ;draw stroke from 0,33 to 16,66 ADD A,016 OUT (XSTORE),A LD A,C ADD A,066 OUT (YDRAW),A CALL LONG ; LD A,B ;draw stroke from 16,66 to 33,33 ADD A,033 OUT (XSTORE),A LD A,C ADD A,033 OUT (YDRAW),A CALL LONG ; LD A,B ;draw stroke from 33,33 to 33,0 ADD A,033 OUT (XSTORE),A LD A,C ADD A,00 OUT (YDRAW),A CALL LONG ; LD A,B ;move to relative 0,33 ADD A,0 OUT (XMOVE),A LD A,C ADD A,033 OUT (YMOVE),A CALL SHORT ; LD A,B ;draw stroke from 0,33 to 33,33 ADD A,033 OUT (XSTORE),A LD A,C ADD A,033 OUT (YDRAW),A CALL LONG ; RET ; ;BIGPEE SUBROUTINE draws the large formed character P at the coordinates stored ; in BC. ; BIGPEE: LD A,B ;move to origin OUT (XMOVE),A LD A,C OUT (YMOVE),A CALL SHORT ; LD A,B ;draw stroke from origin to 0,66 ADD A,0 OUT (XSTORE),A LD A,C ADD A,066 OUT (YDRAW),A CALL LONG ; LD A,B ;draw stroke from 0,66 to 22,66 ADD A,022 OUT (XSTORE),A LD A,C ADD A,066 OUT (YDRAW),A CALL LONG ; LD A,B ;draw stroke from 22,66 to 33,55 ADD A,033 OUT (XSTORE),A LD A,C ADD A,055 OUT (YDRAW),A CALL LONG ; LD A,B ;draw stroke from 33,55 to 33,44 ADD A,033 OUT (XSTORE),A LD A,C ADD A,044 OUT (YDRAW),A CALL LONG ; LD A,B ;draw stroke from 33,44 to 22,33 ADD A,022 OUT (XSTORE),A LD A,C ADD A,033 OUT (YDRAW),A CALL LONG ; LD A,B ;draw stroke from 22,33 to 0,33 ADD A,0 OUT (XSTORE),A LD A,C ADD A,033 OUT (YDRAW),A CALL LONG ; RET ; ;BIGEM SUBROUTINE draws the large formed character M at the coordinates stored ; in BC. ; BIGEM: LD A,B ;move to origin OUT (XMOVE),A LD A,C OUT (YMOVE),A CALL SHORT ; LD A,B ;draw stroke from origin to 0,66 ADD A,0 OUT (XSTORE),A LD A,C ADD A,066 OUT (YDRAW),A CALL LONG ; LD A,B ;draw stroke from 0,66 to 16,33 ADD A,016 OUT (XSTORE),A LD A,C ADD A,033 OUT (YDRAW),A CALL LONG ; LD A,B ;draw stroke from 16,33 to 33,66 ADD A,033 OUT (XSTORE),A LD A,C ADD A,066 OUT (YDRAW),A CALL LONG ; LD A,B ;draw stroke from 33,66 to 33,0 ADD A,033 OUT (XSTORE),A LD A,C ADD A,00 OUT (YDRAW),A CALL LONG ; RET ; ;COLON SUBROUTINE draws a colon (:) at the coordinates stored in BC. It is ; used by the DIGITAL mode of operation, and it calls the ; SHORT and LONG subroutines. ; COLON: LD A,B ;move beam to origin OUT (XMOVE),A LD A,C OUT (YMOVE),A CALL SHORT ; LD A,B ;draw stroke from origin to relative 7,0 ADD A,07 OUT (XSTORE),A LD A,C ADD A,0 OUT (YDRAW),A CALL LONG ; LD A,B ;draw stroke from 7,0 to 7,7 ADD A,07 OUT (XSTORE),A LD A,C ADD A,07 OUT (YDRAW),A CALL LONG ; LD A,B ;draw stroke from 7,7 to 0,7 ADD A,0 OUT (XSTORE),A LD A,C ADD A,07 OUT (YDRAW),A CALL LONG ; LD A,B ;draw stroke from 0,7 to 0,0 ADD A,0 OUT (XSTORE),A LD A,C ADD A,0 OUT (YDRAW),A CALL LONG ; LD A,B ;move beam to 0,31 ADD A,0 OUT (XMOVE),A LD A,C ADD A,031 OUT (YMOVE),A CALL SHORT ; LD A,B ;draw stroke from 0,31 to 7,31 ADD A,07 OUT (XSTORE),A LD A,C ADD A,031 OUT (YDRAW),A CALL LONG ; LD A,B ;draw stroke from 7,31 to 7,38 ADD A,07 OUT (XSTORE),A LD A,C ADD A,038 OUT (YDRAW),A CALL LONG ; LD A,B ;draw stroke from 7,38 to 0,38 ADD A,0 OUT (XSTORE),A LD A,C ADD A,038 OUT (YDRAW),A CALL LONG ; LD A,B ;draw stroke from 0,38 to 0,31 ADD A,0 OUT (XSTORE),A LD A,C ADD A,031 OUT (YDRAW),A CALL LONG ; RET ;and done ; ;COORDINATE DATA TABLES for the analogue clock's circles and hand endpoints ;follow. ; CIRC0: DB 0127 ;60 vectors for the outside circle DB 0254 ; DB 0140 DB 0253 ; DB 0153 DB 0251 ; DB 0166 DB 0248 ; DB 0179 DB 0243 ; DB 0191 DB 0237 ; DB 0202 DB 0230 ; DB 0212 DB 0221 ; DB 0221 DB 0212 ; DB 0230 DB 0202 ; DB 0237 DB 0190 ; DB 0243 DB 0179 ; DB 0248 DB 0166 ; DB 0251 DB 0153 ; DB 0253 DB 0140 ; DB 0254 DB 0127 ; DB 0253 DB 0114 ; DB 0251 DB 0101 ; DB 0248 DB 088 ; DB 0243 DB 075 ; DB 0237 DB 063 ; DB 0230 DB 052 ; DB 0221 DB 042 ; DB 0212 DB 033 ; DB 0202 DB 024 ; DB 0190 DB 017 ; DB 0179 DB 011 ; DB 0166 DB 06 ; DB 0153 DB 03 ; DB 0140 DB 01 ; DB 0127 DB 0 ; DB 0114 DB 01 ; DB 0101 DB 03 ; DB 088 DB 06 ; DB 075 DB 011 ; DB 063 DB 017 ; DB 052 DB 024 ; DB 042 DB 033 ; DB 033 DB 042 ; DB 024 DB 052 ; DB 017 DB 064 ; DB 011 DB 075 ; DB 06 DB 088 ; DB 03 DB 0101 ; DB 01 DB 0114 ; DB 0 DB 0127 ; DB 01 DB 0140 ; DB 03 DB 0153 ; DB 06 DB 0166 ; DB 011 DB 0179 ; DB 017 DB 0191 ; DB 024 DB 0202 ; DB 033 DB 0212 ; DB 042 DB 0221 ; DB 052 DB 0230 ; DB 064 DB 0237 ; DB 075 DB 0243 ; DB 088 DB 0248 ; DB 0101 DB 0251 ; DB 0114 DB 0253 ; CIRC1: DB 0127 ;60 coordinates for seconds tic mark endpoints DB 0243 ; DB 0139 DB 0242 ; DB 0151 DB 0240 ; DB 0163 DB 0237 ; DB 0174 DB 0233 ; DB 0185 DB 0227 ; DB 0195 DB 0221 ; DB 0205 DB 0213 ; DB 0213 DB 0205 ; DB 0221 DB 0195 ; DB 0227 DB 0185 ; DB 0233 DB 0174 ; DB 0237 DB 0163 ; DB 0240 DB 0151 ; DB 0242 DB 0139 ; DB 0243 DB 0127 ; DB 0242 DB 0115 ; DB 0240 DB 0103 ; DB 0237 DB 091 ; DB 0233 DB 080 ; DB 0227 DB 069 ; DB 0221 DB 059 ; DB 0213 DB 049 ; DB 0205 DB 041 ; DB 0195 DB 033 ; DB 0185 DB 027 ; DB 0174 DB 021 ; DB 0163 DB 017 ; DB 0151 DB 014 ; DB 0139 DB 012 ; DB 0127 DB 011 ; DB 0115 DB 012 ; DB 0103 DB 014 ; DB 091 DB 017 ; DB 080 DB 021 ; DB 069 DB 027 ; DB 059 DB 033 ; DB 049 DB 041 ; DB 041 DB 049 ; DB 033 DB 059 ; DB 027 DB 069 ; DB 021 DB 080 ; DB 017 DB 091 ; DB 014 DB 0103 ; DB 012 DB 0115 ; DB 011 DB 0127 ; DB 012 DB 0139 ; DB 014 DB 0151 ; DB 017 DB 0163 ; DB 021 DB 0174 ; DB 027 DB 0185 ; DB 033 DB 0195 ; DB 041 DB 0205 ; DB 049 DB 0213 ; DB 059 DB 0221 ; DB 069 DB 0227 ; DB 080 DB 0233 ; DB 091 DB 0237 ; DB 0103 DB 0240 ; DB 0115 DB 0242 ; CIRC2: DB 0127 ;60 coordinates for sec/min hand endpoints DB 0232 ; DB 0139 DB 0231 ; DB 0149 DB 0230 ; DB 0159 DB 0227 ; DB 0170 DB 0223 ; DB 0180 DB 0218 ; DB 0189 DB 0212 ; DB 0197 DB 0205 ; DB 0205 DB 0197 ; DB 0212 DB 0189 ; DB 0218 DB 0179 ; DB 0223 DB 0170 ; DB 0227 DB 0159 ; DB 0230 DB 0149 ; DB 0231 DB 0138 ; DB 0232 DB 0127 ; DB 0231 DB 0116 ; DB 0230 DB 0105 ; DB 0227 DB 095 ; DB 0223 DB 084 ; DB 0218 DB 074 ; DB 0212 DB 065 ; DB 0205 DB 057 ; DB 0197 DB 049 ; DB 0189 DB 042 ; DB 0179 DB 036 ; DB 0170 DB 031 ; DB 0159 DB 027 ; DB 0149 DB 024 ; DB 0138 DB 023 ; DB 0127 DB 022 ; DB 0116 DB 023 ; DB 0105 DB 024 ; DB 095 DB 027 ; DB 084 DB 031 ; DB 074 DB 036 ; DB 065 DB 042 ; DB 057 DB 049 ; DB 049 DB 057 ; DB 042 DB 065 ; DB 036 DB 075 ; DB 031 DB 084 ; DB 027 DB 095 ; DB 024 DB 0105 ; DB 023 DB 0116 ; DB 022 DB 0127 ; DB 023 DB 0138 ; DB 024 DB 0149 ; DB 027 DB 0159 ; DB 031 DB 0170 ; DB 036 DB 0180 ; DB 042 DB 0189 ; DB 049 DB 0197 ; DB 057 DB 0205 ; DB 065 DB 0212 ; DB 075 DB 0218 ; DB 084 DB 0223 ; DB 095 DB 0227 ; DB 0105 DB 0230 ; DB 0116 DB 0231 ; CIRC3: DB 0127 ;12 coordinates for hour hand endpoints DB 0201 ; DB 0164 DB 0191 ; DB 0191 DB 0164 ; DB 0201 DB 0127 ; DB 0191 DB 090 ; DB 0164 DB 063 ; DB 0127 DB 053 ; DB 090 DB 063 ; DB 063 DB 090 ; DB 053 DB 0127 ; DB 063 DB 0164 ; DB 090 DB 0191 ; HALT ;end of program code ; ;SCRATCH PAD MEMORY storage for program variables. ; ORG 08000H ;put it in RAM! SCON: DS 01 ;time constant for SHORT subroutine LCON: DS 01 ;time constant for LONG subroutine X: DS 01 ;scratch x coordinate Y: DS 01 ;scratch y coordinate SECONDS: DS 01 ;seconds (0 to 59) MINUTES: DS 01 ;minutes (0 to 59) HOURS: DS 01 ;hours (0 [12] to 11) HRS24: DS 01 ;hours (0 to 23) AMPM: DS 01 ;AM/PM indicator (00 [AM] or FF [PM]) ; END