

       NAM KTIME
*      KTIME IS AN EXAMPLE PROGRAM THAT USES THE
*      7-SEGMENT DISPLAYS TO EXHIBIT AN ELAPSED
*      TIME, OR IF PRESET, THE TIME OF DAY.  THE
*      PROGRAM USES SEVERAL JBUG ROUTINES AND THE
*      DISPLAY ROUTINE (DSPLY) CLOSELY RESEMBLES
*      THE SEQUENCE IN JBUG EXCEPT THAT IT WAS
*      MODIFIED TO TAKE A CONSTANT AMOUNT OF TIME
*      REGARDLESS OF THE NUMBERS BEING DISPLAYED.
*
*      TO OPERATE IN ELAPSED TIME MODE, TYPE
*        0010G ON THE D2 KIT KEYBOARD.
*      TO USE AS A CLOCK, INSERT THE HOUR (0-23)
*        IN LOCATION 0000, THE MINUTES IN 0001,
*        AND THE SECONDS IN 0002.  TYPE 0019G TO
*        START THE CLOCK.
       SPC 1
*      EQUATES TO JBUG
MDIS2  EQU $E29A
DLY1   EQU $E0E0
DIGTBL EQU $E3CA
DISREG EQU $8020
SCNREG EQU $8022
       SPC 1
       ORG $0000
HOUR   RMB 1 HOURS
MIN    RMB 1 MINUTES
SEC    RMB 1 SECONDS
BUFF   RMB 6 DISPLAY BUFFER
CTR    RMB 1 LOOP COUNTER
XTEMP  RMB 2 TEMP
SCNCNT RMB 1 DIGIT SELECT
       SPC 1
       ORG $0010 START OF PROGRAM
ENTRY1 CLR HOUR INIT COUNTERS
       CLR MIN
       CLR SEC
ENTRY2 LDAA #$20 DISPLAY COUNTER
       STAA SCNCNT
LOOPA  BSR SHOW SHOW THE CURRENT TIME
       LDX #SEC UPDATE CURRENT TIME
TIMA   LDAA 0,X
       ADDA #1 ADD 1 SECOND
       DAA
       STAA 0,X
       CPX #HOUR
       BEQ TIMB
       CMPA #$60
       BNE LOOPA
       CLR 0,X
       DEX
       BRA TIMA
       SPC 1
TIMB   CMPA #$24 RESET TO 0 AT MIDNITE
       BEQ ENTRY1
       BRA LOOPA
       PAGE
*      SUBR TO SHOW DATA FOR 1 SECOND
SHOW   LDAA SEC GET SECONDS
       JSR MDIS2
       STAB BUFF+5 STORE INTO BUFFER
       STAA BUFF+4
       LDAA MIN DO MINUTES
       JSR MDIS2
       STAB BUFF+3
       STAA BUFF+2
       LDAA HOUR DO HOURS
       JSR MDIS2
       STAB BUFF+1
       STAA BUFF
       LDAA #114 DELAYS PER SECOND
       STAA CTR
LOOPB  BSR DSPLY
       DEC CTR DONE?
       BNE LOOPB
       RTS
       SPC 1
*      SUBROUTINE TO DISPLAY THE BUFFER
DSPLY  LDX #BUFF GET POINTER TO BUFFER
LOOPC  LDAA 0,X GET DATA BYTE
       INCA
       INX MAKE PTR TO NEXT CHAR
       STX XTEMP SAVE IT
*      CONVERT BCD TO 7 SEGMENT
       LDX #DIGTBL-1 START OF CONV TABLE
LOOPD  INX
       DECA
       BNE LOOPF
       LDAB 0,X
LOOPF  CPX #DIGTBL+10
       BNE LOOPD
       CLR SCNREG BLANK DISPLAYS-REDUCE FLICKER
       STAB DISREG OUTPUT CHAR
       LDAA SCNCNT
       STAA SCNREG
       LDX #$4D DELAY 1 MS.
       JSR DLY1
       LDX XTEMP RESTORE BUFF PTR
       CPX #BUFF+6 DONE?
       BEQ OUT YES
       LSR SCNCNT MOVE TO NEXT CHAR
       BRA LOOPC
       SPC 1
OUT    LDAA #$20
       STAA SCNCNT
*      THIS LOOP CAN BE USED TO TWEEK THE
*      DELAY FOR A PARTICULAR CRYSTAL.
       LDAA #10 10 USEC/LOOP
LOOPE  DECA
       BNE LOOPE
       RTS
       END
