home *** CD-ROM | disk | FTP | other *** search
/ Oakland CPM Archive / oakcpm.iso / sigm / vol147 / settime.asm < prev    next >
Encoding:
Assembly Source File  |  1984-04-29  |  4.0 KB  |  283 lines

  1. ; DATE 10/07/83  10:48      last revision
  2. ;
  3.  
  4.     TITLE    'Sets Compupro Clock'
  5. ;
  6. ; SETTIME.ASM
  7. ; DATE 08/29/83  19:47
  8. ; by: H.M. Van Tassell, 120 Hill Hollow Rd, Watchung NJ  07060 (201)755-5372
  9. ;
  10. ; This is the standard Compupro program to set the system support clock and
  11. ; it has been modified to include the day of the week byte. This byte is used
  12. ; by some programs ie COMM7 to show the day of the week.
  13. ;
  14.  
  15.         BASE     EQU     50H
  16.         CLKCMD     EQU     BASE+10
  17.         CLKDATA    EQU    BASE+11
  18.         BDOS    EQU    0005H
  19.         READ     EQU     10H
  20.         WRITE    EQU     20H
  21.         HOLD    EQU     40H
  22.         
  23.         ORG    100H    
  24.  
  25.  
  26.  
  27.         LXI    SP,STACK
  28. START        LXI    D,SIGNON 
  29.         CALL    PMSG
  30.         CALL    GETCHAR
  31.         CPI    'X' 
  32.         JZ    0000H
  33.         CPI    'S'
  34.         JZ    SETTIME
  35.         CPI    'P'
  36.         JZ    PTIME
  37.         CPI    'C'
  38.         JZ    FOREVER
  39.         LXI    D,ERROR
  40.         CALL    PMSG
  41.         JMP    START
  42.  
  43. SETTIME        CALL    GETTIME
  44.         LXI    H,DTABLE
  45.         LXI    D,ATABLE
  46.         MVI    B,14
  47.         MVI    A,HOLD
  48.         OUT    CLKCMD 
  49. SET1        DCR    B
  50.         JNZ    HERE
  51.         MVI    A,0
  52.         OUT    CLKCMD
  53.         LXI    D,TIMEIS
  54.         CALL    PMSG
  55.         CALL    RDDAY
  56.         CALL    CLKPRNT
  57.         JMP    START
  58. HERE        MOV    A,M
  59.         MOV    C,A
  60.         LDAX    D
  61.         CALL    WRTDGT
  62.         INX    H
  63.         INX    D
  64.         JMP     SET1
  65.         
  66. GETTIME        LXI    D,ASKDAY
  67.         CALL    PMSG
  68.         LXI    H,DTABLE
  69. GET3        CALL    GETCHAR
  70.         CPI    '0'
  71.         JC    GET3
  72.         CPI    '6'+1
  73.         JNC    GET3
  74.         ANI    0FH
  75.         MOV    M,A
  76.         INX    H
  77. TIME         LXI    D,ASKTIME
  78.         CALL    PMSG
  79. GET1        CALL    GETNUMB
  80.         CPI    0DH
  81.         JZ    GETDATE
  82.         ANI    0FH
  83.         MOV    M,A
  84.         INX    H
  85.         JMP    GET1
  86. GETDATE        LXI    D,ASKDATE
  87.         CALL    PMSG
  88. GET2        CALL    GETNUMB
  89.         CPI    0DH
  90.         RZ
  91.         ANI    0FH
  92.         MOV    M,A
  93.         INX    H
  94.         JMP    GET2
  95.  
  96. GETNUMB        CALL    GETCHAR
  97.         CPI    0DH 
  98.         RZ
  99.         CPI    '0'
  100.         JC    GETNUMB
  101.         CPI    '9'+1
  102.         JNC    GETNUMB
  103.         RET
  104.  
  105. WRTDGT        PUSH    PSW
  106.         ADI    HOLD
  107.         OUT    CLKCMD
  108.         CPI     5+HOLD
  109.         JNZ    WRT1
  110.         MOV    A,C
  111.         ADI    08H
  112.         JMP     WRT3
  113. WRT1        CPI    8+HOLD
  114.         JNZ    WRT2
  115.         MOV    A,C
  116.         ANI    03H
  117.         JMP    WRT3
  118. WRT2        MOV    A,C
  119. WRT3        OUT    CLKDATA
  120.         POP    PSW
  121.         ADI    WRITE+HOLD
  122.         OUT    CLKCMD
  123.         SUI    WRITE
  124.         OUT    CLKCMD
  125.         RET
  126.  
  127. RDDGT        ADI    READ
  128.         OUT    CLKCMD
  129.         CPI    05H+READ
  130.         IN    CLKDATA
  131.         RNZ
  132.         SUI    08H
  133.         RET
  134.  
  135. CLKPRNT        LXI    H,RTABLE
  136.         CALL    PRINTWO 
  137.         MVI    A,'/'
  138.         CALL     PCHAR
  139.         CALL    PRINTWO
  140.         MVI    A,'/'
  141.         CALL    PCHAR
  142.         CALL    PRINTWO
  143.         MVI    A,' '
  144.         CALL    PCHAR
  145.         MVI    A,' '
  146.         CALL    PCHAR
  147.         CALL    PRINTWO
  148.         MVI    A,':'
  149.         CALL    PCHAR
  150.         CALL    PRINTWO
  151.         MVI    A,':'
  152.         CALL    PCHAR
  153.         CALL    PRINTWO
  154.         RET
  155.  
  156. PRINTWO        MOV    A,M
  157.         CALL    RDDGT
  158.         ADI    30H
  159.         CALL    PCHAR
  160.         INX    H
  161.         MOV    A,M
  162.         CALL    RDDGT
  163.         ADI    30H
  164.         CALL     PCHAR
  165.         INX    H
  166.         RET
  167.  
  168. PTIME        LXI    D,TIMEIS
  169.         CALL    PMSG
  170.         CALL    RDDAY
  171.         CALL    CLKPRNT 
  172.         JMP    START
  173.  
  174. FOREVER        MVI    A,0AH
  175.         CALL    PCHAR
  176. FOR1        MVI    A,0DH
  177.         CALL     PCHAR
  178.         CALL    CLKPRNT 
  179.         MVI    A,0
  180.         CALL    RDDGT
  181.         MOV    B,A
  182. FOR2        MVI    A,0
  183.         CALL    RDDGT
  184.         CMP    B
  185.         JZ    FOR2
  186.         JMP    FOR1
  187.  
  188. GETCHAR        PUSH    H
  189.         MVI    C,01
  190.         CALL    BDOS
  191.         POP    H
  192.         CPI    'a'
  193.         JC    SKIP
  194.         CPI    'z'+1
  195.         JNC    SKIP
  196.         ANI    5FH
  197. SKIP        ANI    7FH
  198.         CPI    03H
  199.         JZ    0000H
  200.         RET
  201.  
  202. PCHAR        PUSH    D
  203.         MOV    E,A
  204.         MVI    C,02H
  205.         PUSH    H
  206.         CALL    BDOS
  207.         MVI    C,0BH
  208.         CALL    BDOS
  209.         POP     H
  210.         POP    D
  211.         ORA    A
  212.         CNZ    GETCHAR
  213.         RET
  214.  
  215. RDDAY    MVI    A,6        ;day of week
  216.     CALL    RDDGT
  217.     RLC            ; *2 for tbl offset
  218.     LXI    H,DTBL        ;point to day table
  219.  
  220. TBLO    MOV    E,A        ;shift factor..
  221.     MVI    D,0        ;..into de-pair.
  222.     DAD    D        ;add offset to hl-pair
  223.     MOV    E,M        ;put address into..
  224.     INX    H
  225.     MOV    D,M        ;..de-pair.  then..
  226.     CALL    PMSG        ;PRINT IT
  227.     RET
  228.  
  229. PMSG        PUSH    H
  230.         MVI    C,09H
  231.         CALL    BDOS
  232.         POP    H
  233.         RET
  234.  
  235.  
  236. SIGNON        DB    0DH,0AH,0DH,0AH,'Time and date test routines for '
  237.         DB    'System Support 1',0DH,0AH,0DH,0AH
  238.         DB    'Please type one of the following commands:',0DH,0AH
  239.         DB    'S - Set the time and date',0DH,0AH
  240.         DB    'P - Print the time and date once',0DH,0AH
  241.         DB    'C - Continuously print the time and date',0DH,0AH
  242.         DB    'X - Exit to operating system',0DH,0AH
  243.         DB    0DH,0AH,'Command: $'
  244.         
  245. ERROR        DB    0DH,0AH,'That was not one of the commands.'  
  246.         DB    0DH,0AH,'Please try again $'
  247.  
  248. ASKTIME        DB    0DH,0AH,'What is the time ? (HH:MM:SS) $'
  249.  
  250. ASKDATE        DB    0DH,0AH,'What is the date ?  (MM/DD/YY) $'
  251.  
  252. ASKDAY        DB    0DH,0AH,'Day of the week ? (Sun=0,Sat=6) $'
  253.  
  254. TIMEIS        DB    0DH,0AH,'The time and date are: $'
  255.  
  256.  
  257. DTBL    DW    SUN        ;daytable
  258.     DW    MON
  259.     DW    TUE
  260.     DW    WED
  261.     DW    THU
  262.     DW    FRI
  263.     DW    SAT
  264.  
  265. SUN    DB    'Sunday $'
  266. MON    DB    'Monday $'
  267. TUE    DB    'Tuesday $'
  268. WED    DB    'Wednesday $'
  269. THU    DB    'Thursday $'
  270. FRI    DB    'Friday $'
  271. SAT    DB    'Saturday $'
  272.  
  273.  
  274. ATABLE        DB    6,5,4,3,2,1,0,10,9,8,7,12,11
  275.  
  276. RTABLE        DB    10,9,8,7,12,11,5,4,3,2,1,0
  277.  
  278. DTABLE        DS    13
  279.  
  280.         DS    32
  281. STACK
  282.