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 / SIMTEL / CPMUG / CPMUG042.ARK / TIME.ASM < prev    next >
Assembly Source File  |  1984-04-29  |  3KB  |  178 lines

  1. ;    THIS PROGRAM WILL READ AND DISPLAY THE
  2. ;    TIME AND DATE FROM A COMPU/TIME BOARD
  3. ;    UNDER THE CP/M OPERATING SYSTEM
  4.     ORG    100H
  5. ;    SET UP THE NEW STACK
  6.     LXI    H,0
  7.     DAD    SP
  8.     SHLD    OLDSP
  9.     LXI    SP,STACK
  10. ;    ASSIGNMENTS
  11. ENTRY:    EQU    5    ; CP/M ENTRY
  12. CR:    EQU    0DH    ; CARRIAGE RETURN
  13. LF:    EQU    0AH    ; LINE FEED
  14. ACONT:    EQU    25H    ; PORT A CONTROL
  15. ADATA:    EQU    24H    ; PORT A DATA
  16. BCONT:    EQU    27H    ; PORT B CONTROL
  17. BDATA:    EQU    26H    ; PORT B DATA
  18. ;    DISPLAY TIME AND DATE
  19.     LXI    D,MON
  20.     CALL    DATE
  21.     LXI    D,HOUR
  22.     CALL    TIME
  23.     LXI    D,PDATE
  24.     MVI    C,9
  25.     CALL    ENTRY
  26. ;    RETURN TO CP/M THROUGH CCP
  27. RETCPM:    LHLD    OLDSP    ; GET CCP'S STACK
  28.     SPHL
  29.     RET
  30. ;    READ A DIGIT ROUTINE
  31. RDIGIT:    MOV    A,D    ; SELECT DIGIT
  32.     OUT    ADATA
  33.     IN    ADATA    ; RESET INTERRUPT
  34. DWAIT:    IN    ACONT    ; TEST FOR DIGIT PRESENT
  35.     ANI    80H    ; IS IT THERE?
  36.     JZ    DWAIT    ; NO, THEN LOOP
  37.     IN    ADATA    ; READ A DIGIT
  38.     ANI    0FH    ; MASK ZONE
  39.     ORI    30H    ; SET ASCII
  40.     RET
  41. ;    READ FOUR DIGITS ROUTINE
  42. READ4:    MVI    D,0    ; SELECT FIRST DIGIT
  43. NEXT:    CALL    RDIGIT    ; DELAY ONE DIGIT SCAN
  44.     CALL    RSDIG    ; READ AND STORE DIGIT
  45.     MOV    A,D
  46.     CPI    20H    ; TEST IF TWO DIGITS DONE
  47.     JNZ    SKIP
  48.     MOV    A,C
  49.     CPI    0    ; DATE
  50.     JNZ    COLON    ; IT'S FOR TIME
  51.     MVI    A,'/'    ; IT'S FOR DATE
  52.     JMP    DOIT
  53. COLON:    MVI    A,':'
  54. DOIT:    CALL    SDIGIT
  55. SKIP:    MOV    A,D    ; TEST FOR ALL DONE
  56.     CPI    40H
  57.     RZ
  58.     JMP    NEXT    ; GET ANOTHER DIGIT
  59. ;    STORE A DIGIT ROUTINE
  60. SDIGIT:    MOV    M,A
  61.     INX    H
  62.     RET
  63. ;    READ DATE ROUTINE
  64. DATE:    CALL    BOARD    ; IS THERE A BOARD
  65.     JZ    NOBOARD    ; NOPE
  66.     CALL    CLKINT
  67.     XCHG
  68.     MVI    A,0    ; SET DATE DISPLAY MODE
  69.     OUT    BDATA
  70.     MVI    C,0    ; TELL READ4 THIS IS DATE
  71.     CALL    READ4
  72.     MVI    A,'/'
  73.     CALL    SDIGIT
  74.     MVI    A,'7'    ; SET TENS OF YEARS
  75.     CALL    SDIGIT
  76.     MVI    A,'9'    ; SET UNITS OF YEARS
  77.     CALL    SDIGIT
  78.     RET
  79. ;    READ THE TIME
  80. TIME:    CALL    BOARD    ; CHECK IF BOARD THERE
  81.     JZ    NOBOARD
  82.     CALL    CLKINT
  83.     XCHG
  84.     MVI    A,40H    ; SET TIME DISPLAY MODE
  85.     OUT    BDATA
  86.     MVI    C,1    ; TELL READ4 THIS IS TIME
  87.     CALL    READ4
  88.     MVI    A,':'
  89.     CALL    SDIGIT
  90.     CALL    RSDIG
  91. ;    READ AND STORE A DIGIT
  92. RSDIG:    CALL    RDIGIT
  93.     CALL    SDIGIT
  94.     MOV    A,D
  95.     ADI    10H
  96.     MOV    D,A
  97.     RET
  98. ;    NO BOARD IN THE SYSTEM
  99. NOBOARD: XCHG
  100.     MVI    A,0
  101.     CALL    SDIGIT
  102.     CALL    SDIGIT
  103.     CALL    SDIGIT
  104.     CALL    SDIGIT
  105.     CALL    SDIGIT
  106.     CALL    SDIGIT
  107.     CALL    SDIGIT
  108.     CALL    SDIGIT
  109.     RET
  110. ;    SEE IF BOARD PRESENT
  111. BOARD:    IN    ADATA
  112.     CPI    0FFH
  113.     RET
  114. ;    INITIALIZE CLOCK/CALENDAR PORT
  115. CLKINT:    MVI    A,70H
  116.     OUT    ADATA
  117.     MVI    A,77H
  118.     OUT    BDATA
  119.     MVI    A,14H
  120.     OUT    ACONT
  121.     MVI    A,04
  122.     OUT    BCONT
  123.     RET
  124. ;    STORAGE AREA
  125. PDATE:    DB    CR,LF,'DATE  '
  126. MON:    DB    'XX'
  127.     DS    1
  128. DAT:    DB    'XX'
  129.     DS    3
  130. DPTIME: DB    '  TIME  '
  131. HOUR:    DB    'XX'
  132.     DS    1
  133. MIN:    DB    'XX'
  134.     DS    1
  135. SEC:    DB    'XX'
  136.     DB    CR,LF,'$'
  137. TBUFF:    DB    13,0
  138. MONI:    DS    2
  139.     DS    1
  140.     DS    2
  141.     DS    1
  142. HOURI:    DS    2
  143.     DS    1
  144.     DS    2
  145. OLDSP:    DS    2
  146.     DS    100H
  147. STACK:    DB    0
  148.