home *** CD-ROM | disk | FTP | other *** search
/ ftp.barnyard.co.uk / 2015.02.ftp.barnyard.co.uk.tar / ftp.barnyard.co.uk / cpm / walnut-creek-CDROM / CPM / PROGRAMS / CLOCKK / MDCLCK13.LBR / READTIME.AZM / READTIME.ASM
Assembly Source File  |  2000-06-30  |  4KB  |  177 lines

  1. ;    Program in 8080 assembly language to read real-time-clock located
  2. ;    at ports 30h through 33h in Morrow MD 2/3 rev. 2 main board
  3. ;        Mike Allen 7/13/86
  4. ;
  5. CLS    EQU    'Z'-40H    ;^Z TO CLEAR SCREEN
  6. HOME    EQU    '^'-40H    ;^^ TO HOME CURSOR
  7. ESC    EQU    01BH    ;ESCAPE
  8. PA    EQU    30H    ;REAL-TIME-CLOCK PORT A
  9. PB    EQU    31H    ;REAL-TIME-CLOCK PORT B
  10. PC    EQU    32H    ;REAL-TIME-CLOCK PORT C
  11. CNTRL    EQU    33H    ;REAL-TIME-CLOCK CONTROL PORT
  12. BDOS    EQU    5    ;BDOS CALL VECTOR
  13. WBOOT    EQU    0    ;BDOS WARM BOOT CODE
  14. CONOUT    EQU    2    ;BDOS CONSOLE CHARACTER OUT CODE
  15. PRTSTR    EQU    9    ;BDOS CONSOLE STRING OUT CODE
  16. CONSTAT    EQU    0BH    ;BDOS CONSOLE STATUS CODE
  17.  
  18.     ORG    100H
  19.  
  20.     LXI    D,CUROFF    ;TURN OFF THE CURSOR
  21.     MVI    C,PRTSTR
  22.     CALL    BDOS
  23.     MVI    E,CLS        ;CLEAR THE SCREEN
  24.     MVI    C,CONOUT
  25.     CALL    BDOS
  26.     MVI    A,090H        ;SET UP 8255
  27.     OUT    CNTRL
  28.     MVI    A,020H        ;PUT MSM5832 IN READ MODE
  29.     OUT    PC
  30. LOOP:    LXI    D,RTC        ;START OF REAL-TIME-CLOCK BUFFER
  31.     MVI    A,0        ;FIRST MSM5832 ADDRESS
  32. LOOP1:    MOV    B,A        ;SAVE CURRENT ADDRESS
  33.     OUT    PB        ;SEND ADDRESS TO MSM5832
  34.     NOP            ;WAIT A WHILE
  35.     NOP
  36.     NOP
  37.     NOP
  38.     IN    PA        ;GET DATA FROM MSM5832
  39.     ANI    0FH        ;MASK OFF 4 MSB
  40.     STAX    D        ;SAVE IT IN BUFFER
  41.     INX    D        ;INCREMENT BUFFER POINTER
  42.     MOV    A,B        ;GET LATEST ADDRESS
  43.     INR    A        ;INCREMENT IT
  44.     CPI    13        ;GOT ALL THE DATA?
  45.     JNZ    LOOP1        ;NOPE, SO REPEAT IT
  46.     MVI    E,HOME        ;HOME THE CURSOR
  47.     MVI    C,CONOUT
  48.     CALL    BDOS
  49.     LXI    D,DATE        ;SEND OUT THE DATE LABEL
  50.     MVI    C,PRTSTR
  51.     CALL    BDOS
  52.     MVI    H,0        ;ZERO TOP 8 BITS OF HL
  53.     LDA    RTC+6        ;GET DAY-OF-WEEK NUMBER ...
  54.     MOV    L,A        ; ... AND MULTIPLY BY 12
  55.     DAD    H    ;X2
  56.     DAD    H    ;X4
  57.     PUSH    H        ;SAVE X4 IN DE
  58.     POP    D
  59.     DAD    H    ;X8
  60.     DAD    D    ;X12
  61.     LXI    D,DAY        ;ADD TO START OF DAY STRING AREA TO ...
  62.     DAD    D        ; ... FIND PROPER DAY NAME.
  63.     XCHG            ;PRINT DAY OF WEEK.
  64.     MVI    C,PRTSTR
  65.     CALL    BDOS
  66.     LDA    RTC+0AH        ;GET MONTH X10
  67.     CALL    PNZNUM        ;PRINT IT IF NON-ZERO
  68.     LDA    RTC+9        ;GET MONTH X1
  69.     CALL    PRTNUM        ;PRINT IT
  70.     CALL    PRTSLH        ;PRINT A '/'
  71.     LDA    RTC+8        ;GET DAY X10
  72.     ANI    3        ;MASK OFF LEAP YEAR FLAG
  73.     CALL    PNZNUM        ;PRINT IT IF NON-ZERO
  74.     LDA    RTC+7        ;GET DAY X1
  75.     CALL    PRTNUM        ;PRINT IT
  76.     CALL    PRTSLH        ;PRINT A '/'
  77.     LDA    RTC+0CH        ;GET YEAR X10
  78.     CALL    PRTNUM        ;PRINT IT
  79.     LDA    RTC+0BH        ;GET YEAR X1
  80.     CALL    PRTNUM        ;PRINT IT
  81.     LXI    D,CRLF        ;PRINT CR/LF PAIR
  82.     MVI    C,PRTSTR
  83.     CALL    BDOS
  84.     LXI    D,TIME        ;SEND OUT THE TIME LABEL
  85.     MVI    C,PRTSTR
  86.     CALL    BDOS
  87.     LDA    RTC+5        ;CHECK FOR 24HR, AM OR PM
  88.     MVI    B,0
  89.     CPI    8        ;CHECK FOR 24HR
  90.     JP    SETFLG        ;YEP, FINISH IT
  91.     INR    B
  92.     CPI    4        ;CHECK FOR PM
  93.     JM    SETFLG        ;NOPE, IS AM
  94.     INR    B        ;YEP, IT IS PM
  95. SETFLG:    ANI    3        ;STRIP OFF 24HR AND PM BITS
  96.     STA    RTC+5        ;SAVE IT
  97.     MOV    A,B        ;GET FLAG
  98.     STA    FLAG        ;SAVE IT
  99.     ORA    A        ;IS IT ZERO (24HR)?
  100.     LDA    RTC+5        ;GET HR X10
  101.     CZ    PRTNUM        ;ALWAYS PRINT IF 24 HR TIME
  102.     CNZ    PNZNUM        ;DON'T PRINT IF ZERO AND NOT 24HR TIME
  103.     LDA    RTC+4        ;GET HR X1
  104.     CALL    PRTNUM        ;PRINT HR X1
  105.     CALL    PRTCOL        ;PRINT A ':'
  106.     LDA    RTC+3        ;PRINT MIN X10
  107.     CALL    PRTNUM
  108.     LDA    RTC+2        ;PRINT MIN X1
  109.     CALL    PRTNUM
  110.     CALL    PRTCOL        ;PRINT A ':'
  111.     LDA    RTC+1        ;PRINT SEC X10
  112.     CALL    PRTNUM
  113.     LDA    RTC        ;PRINT SEC X1
  114.     CALL    PRTNUM
  115.     MVI    H,0        ;ZERO TOP 8 BITS OF HL
  116.     LDA    FLAG        ;GET TAG INDEX ...
  117.     MOV    L,A        ; ... AND MULTIPLY BY 6
  118.     DAD    H    ;X2
  119.     PUSH    H        ;SAVE X2 IN DE
  120.     POP    D
  121.     DAD    H    ;X4
  122.     DAD    D    ;X6
  123.     LXI    D,TAG        ;ADD TO START OF TAG STRING AREA TO ...
  124.     DAD    D        ; ... FIND PROPER TAG.
  125.     XCHG            ;PRINT TAG.
  126.     MVI    C,PRTSTR
  127.     CALL    BDOS
  128.     MVI    C,CONSTAT    ;SEE IF KEY HAS BEEN PRESSED
  129.     CALL    BDOS
  130.     ORA    A
  131.     JZ    LOOP        ;NO KEY PRESS, REPEAT.
  132.     MVI    A,0H        ;DONE - TURN OFF THE MSM5832 READ, ...
  133.     OUT    PC
  134.     LXI    D,CURON        ; ... TURN THE CURSOR BACK ON ...
  135.     MVI    C,PRTSTR
  136.     CALL    BDOS
  137.     MVI    C,WBOOT        ;... AND WARM BOOT
  138.     CALL    BDOS
  139.  
  140. PNZNUM:    ORA    A
  141.     RZ            ;DON'T PRINT A '0'
  142. PRTNUM:    ADI    '0'        ;MAKE NUMER ASCII
  143.     MOV    E,A        ;GET READY TO PRINT
  144. PRTSYM:    MVI    C,CONOUT
  145.     JMP    BDOS        ;LET BDOS SUPPLY THE 'RET'
  146.  
  147. PRTSLH:    MVI    E,'/'
  148.     JMP    PRTSYM
  149. PRTCOL:    MVI    E,':'
  150.     JMP    PRTSYM
  151.  
  152. CUROFF:    DB    ESC,'"6$'    ;(ESC " 6) TURNS CURSOR OFF [MDT 60/70]
  153. CURON:    DB    ESC,'"0$'    ;(ESC " 0) TURNS CURSOR ON [MDT 60/70]
  154. DATE:    DB    'DATE: $'
  155. TIME:    DB    'TIME: $'
  156. DAY:    DB    'Sunday, $',0,0,0
  157.     DB    'Monday, $',0,0,0
  158.     DB    'Tuesday, $',0,0
  159.     DB    'Wednesday, $'
  160.     DB    'Thursday, $',0
  161.     DB    'Friday, $',0,0,0
  162.     DB    'Saturday, $'
  163. TAG:    DB    ' HRS.$'
  164.     DB    ' AM$',0,0
  165.     DB    ' PM$'
  166. CRLF:    DB    0DH,0AH,'$'
  167. FLAG:    DS    1
  168. RTC:    DS    13
  169.     END
  170. $',0,0,0
  171.     DB    'Saturday, $'
  172. TAG:    DB    ' HRS.$'
  173.     DB    ' AM$',0,0
  174.     DB    ' PM$'
  175. CRLF:    DB    0DH,0AH,'$'
  176. FLAG:    DS    1
  177. RTC:    DS    1