home *** CD-ROM | disk | FTP | other *** search
/ Oakland CPM Archive / oakcpm.iso / sigm / vol147 / t.asm < prev    next >
Encoding:
Assembly Source File  |  1985-02-10  |  4.5 KB  |  209 lines

  1. ****************************************************************************
  2.  
  3. *         Read the Calendar/clock on the TimEPROMmer Board                 *  
  4. *       from Optronics Technology, POB 81, Pittsford, NY 14534             *
  5. *       by D. Mc Lanahan, POB 17, Marlow, NH 03456, 1 Feb 1983              *
  6. *           3-char month spelled out, week-day spelled out           *       
  7.  
  8. ****************************************************************************
  9.  
  10.  
  11. CPM$BASE    EQU    0        ; BASE ADDRESS OF CP/M SYSTEM
  12.     CLK    EQU    40        ; BASE ADDRESS OF TP-100 CLOCK
  13.     BDOS    EQU    CPM$BASE+5    ; ADDRESS OF BDOS ENTRY
  14.     CR    EQU    0DH
  15.     LF    EQU    0AH
  16.         SPACE   EQU     20H
  17.         PERIOD  EQU     2EH
  18.         COMMA   EQU     2CH
  19.     COLON    EQU    3AH
  20.     DLYL    EQU    1        ;ONLY IF INITIAL SPACES DROPPED
  21.                     ;-BUT <>0 IF ROUTINE REMAINS
  22.     ORG    CPM$BASE+100H
  23.  
  24.     MVI     A,10H
  25.     OUT    CLK            ;OUTPUT HOLD BIT
  26.     MVI    A,SPACE
  27.     CALL    COUT
  28.     MVI    A,SPACE
  29.     CALL    COUT
  30.     MVI    A,SPACE
  31.     CALL    COUT
  32.     MVI    A,SPACE
  33.     CALL    COUT
  34.     MVI    A,SPACE
  35.     CALL    COUT
  36.         MVI    C,DLYL
  37.         MVI     A,48
  38.     OUT    CLK    ;OUTPUT HOLD AND READ BITS
  39.     NOP
  40.     NOP
  41.         
  42.  
  43. DA10:   MVI     A,56            ;ASK FOR DECADE DATE
  44.     MVI    C,03        ;NOT OVER 3
  45.     CALL    READ
  46.  
  47. DA1:    MVI     A,55            ;ASK FOR UNIT DATE
  48.     CALL    READ
  49.  
  50.     MVI    A,SPACE
  51.     CALL    COUT
  52.  
  53. MON1:   MVI     A,58            ;ASK FOR DECADE MONTH
  54.     OUT    CLK
  55.         NOP
  56.         NOP
  57.         LXI     D,00            ;CLEAR REGISTER
  58.         IN      CLK+1           ;GET DECADE MONTH    
  59.         ANI    01H        ;KILL LEAP YEAR BIT
  60.     JZ      MON2            ;IF DECADE IS ZERO
  61.         MVI    D,10        ;IF NOT LOAD 10
  62. MON2    MVI     A,57        ;ASK FOR UNIT MONTH
  63.         OUT     CLK
  64.         NOP
  65.         MVI     H,0        ;HOUSEKEEP
  66.         IN      CLK+1        ;GET UNIT MONTH
  67.         ANI     0FH        ;KILL HIGH NIBBLE
  68.         ADD     D        ;COMB. TENS & UNITS
  69.         DCR     A               ;0 to 11 from 1 to 12
  70.         ADD    A        ;MULTIPLY BY TWO
  71.         ADD    A        ;AND AGAIN (4x-each month
  72.         MOV     L,A        ;is 4 bytes in table)
  73.         LXI     D,MONTH        ;
  74.         DAD     D        ;
  75.         CALL    PRINT        ;PRINT MO. FROM TABLE
  76.     MVI    A,SPACE    
  77.     CALL    COUT
  78.  
  79. YRHD:    MVI    A,31H        ;PRINT 1 <--\
  80.     CALL    COUT        ;change these in 1999
  81.     MVI     A,39H        ;PRINT 9 <--/
  82.     CALL    COUT        ; -DON'T FORGET!-
  83.  
  84. YR10:    MVI     A,60            ;ASK FOR DECADE YEAR
  85.     CALL     READ
  86.  
  87. YR1:    MVI     A,59        ;ASK FOR UNIT YEAR
  88.     CALL    READ
  89.     
  90.         CALL    PRCSP
  91.  
  92.  
  93. WKDAY:  MVI     A,54        ;ASK FOR WKDAY NO.
  94.         OUT     CLK
  95.         NOP
  96.         MVI     H,0
  97.         IN      CLK+1        ;GET WKDAY NO.
  98.         ANI     07H        ;LESS THAN 7
  99.         ADD     A        ;MULT. BY 8
  100.         ADD    A        ;8 bytes per day
  101.         ADD    A        ;in table
  102.         MOV     L,A
  103.         LXI     D,DAY
  104.         DAD     D
  105.         CALL    PRINT
  106.     LXI    H,00
  107.     LXI    H,WKD        ;Now print 'day'-
  108.     CALL     PRINT        ;(saves table space)
  109.  
  110.     CALL    PRCSP
  111.  
  112. HR10:   MVI     A,53            ;ASK FOR DECADE HOUR
  113.         MVI    C,03        ;KILL AM/PM BIT 
  114.         CALL    READ        ;PRINT DECADE HOUR
  115.  
  116. HR1:    MVI     A,52            ;ASK FOR UNIT HOUR
  117.         CALL    READ        ;PRINT UNIT HOUR
  118.     
  119.     MVI    A,COLON
  120.     CALL     COUT
  121.  
  122. MIN10:    MVI     A,51            ;ASK FOR DECADE MINUTES
  123.     MVI    C,07        ;NOT OVER 6
  124.         CALL     READ
  125.  
  126. MIN1:    MVI     A,50        ;ASK FOR UNIT MINUTES
  127.     CALL    READ
  128.  
  129.     MVI    A,COLON
  130.     CALL    COUT
  131.  
  132. SEC10:    MVI     A,49            ;ASK FOR DECADE SECONDS
  133.     MVI    C,07
  134.         CALL     READ
  135.  
  136. SEC1:    MVI     A,48        ;ASK FOR UNIT SECONDS
  137.     CALL    READ
  138.  
  139.  
  140.     MVI    A,00        ;RELEASE CLOCK HOLD
  141.     OUT    CLK
  142.     RET
  143.  
  144. READ:    OUT CLK
  145.     NOP        ;a bit of wheelspinning while
  146.     NOP        ;the chip gets 'it' together
  147.     IN    CLK+1
  148.     ANA    C    ;CLEAN IT UP
  149.     ADI    '0'    ;CONVERT 0-9 TO '0'-'9'
  150.     CALL     COUT
  151.         MVI    C,0FH    ;READY FOR NEXT CLEANING
  152.     RET
  153.     
  154. PRCSP:    MVI    A,COMMA     ;PRINT COMMA
  155.     CALL    COUTè    MVI    A,SPACE        ;PRINT SPACE
  156.         CALL    COUT
  157.     RET
  158.  
  159. *  PRINT STRING ENDING IN 0 PTED TO BY H & L
  160. PRINT:    MOV    A,M    ; GET BYTE
  161.     INX    H    ; PT TO NEXT
  162.     ORA    A    ; DONE?
  163.         RZ
  164.     CALL    COUT    ; PRINT IT
  165.     JMP    PRINT
  166.  
  167. *  PRINT CHAR IN REG A ON CONSOLE
  168. COUT:
  169.     PUSH    H    ; SAVE REGS
  170.     PUSH    D
  171.     PUSH    B
  172.     MOV    E,A
  173.     MVI    C,2    ; CONSOLE OUTPUT
  174.     CALL    BDOS
  175.     POP    B    ; RESTORE REGS
  176.     POP    D
  177.     POP    H
  178.     RET
  179.  
  180. DELAY:  DCR    C
  181.     JNZ    DELAY
  182.     RET
  183.  
  184. WKD:    DB    'day',0
  185.  
  186. DAY:    DB    'Sun',0,0,0,0,0
  187.     DB    'Mon',0,0,0,0,0
  188.     DB    'Tues',0,0,0,0
  189.     DB    'Wednes',0,0
  190.     DB    'Thurs',0,0,0
  191.     DB    'Fri',0,0,0,0,0
  192.     DB    'Satur',0,0,0
  193.  
  194. MONTH:    DB    'Jan',0
  195.     DB     'Feb',0
  196.     DB    'Mar',0
  197.     DB    'Apr',0
  198.     DB    'May',0
  199.     DB    'Jun',0
  200.     DB    'Jul',0
  201.     DB    'Aug',0
  202.     DB    'Sep',0
  203.     DB    'Oct',0
  204.     DB    'Nov',0
  205.     DB    'Dec',0
  206.  
  207.  
  208.     END
  209.