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 / CLKROM.ASM < prev    next >
Assembly Source File  |  1984-04-29  |  2KB  |  129 lines

  1. ;    THIS PROGRAM WILL READ AND DISPLAY THE
  2. ;    TIME AND DATE FROM A COMPU/TIME BOARD
  3. ;    ASSIGNMENTS
  4. CR:    EQU    0DH    ; CARRIAGE RETURN
  5. LF:    EQU    0AH    ; LINE FEED
  6. ACONT:    EQU    25H    ; PORT A CONTROL
  7. ADATA:    EQU    24H    ; PORT A DATA
  8. BCONT:    EQU    27H    ; PORT B CONTROL
  9. BDATA:    EQU    26H    ; PORT B DATA
  10. ;    ENTRY VECTORS
  11.     JMP    DATE    ; GET THE DATE
  12.     JMP    TIME    ; GET THE TIME
  13. ;    READ A DIGIT ROUTINE
  14. RDIGIT:    MOV    A,D    ; SELECT DIGIT
  15.     OUT    ADATA
  16.     IN    ADATA    ; RESET INTERRUPT
  17. DWAIT:    IN    ACONT    ; TEST FOR DIGIT PRESENT
  18.     ANI    80H    ; IS IT THERE?
  19.     JZ    DWAIT    ; NO, THEN LOOP
  20.     IN    ADATA    ; READ A DIGIT
  21.     ANI    0FH    ; MASK ZONE
  22.     ORI    30H    ; SET ASCII
  23.     RET
  24. ;    READ FOUR DIGITS ROUTINE
  25. READ4:    MVI    D,0    ; SELECT FIRST DIGIT
  26. NEXT:    CALL    RDIGIT    ; DELAY ONE DIGIT SCAN
  27.     CALL    RSDIG    ; READ AND STORE DIGIT
  28.     MOV    A,D
  29.     CPI    20H    ; TEST IF TWO DIGITS DONE
  30.     JNZ    SKIP
  31.     MOV    A,C
  32.     CPI    0    ; DATE
  33.     JNZ    COLON    ; IT'S FOR TIME
  34.     MVI    A,'/'    ; IT'S FOR DATE
  35.     JMP    DOIT
  36. COLON:    MVI    A,':'
  37. DOIT:    CALL    SDIGIT
  38. SKIP:    MOV    A,D    ; TEST FOR ALL DONE
  39.     CPI    40H
  40.     RZ
  41.     JMP    NEXT    ; GET ANOTHER DIGIT
  42. ;    STORE A DIGIT ROUTINE
  43. SDIGIT:    MOV    M,A
  44.     INX    H
  45.     RET
  46. ;    READ DATE ROUTINE
  47. DATE:    CALL    BOARD    ; IS THERE A BOARD
  48.     JZ    NOBOARD    ; NOPE
  49.     CALL    CLKINT
  50.     XCHG
  51.     MVI    A,0    ; SET DATE DISPLAY MODE
  52.     OUT    BDATA
  53.     MVI    C,0    ; TELL READ4 THIS IS DATE
  54.     CALL    READ4
  55.     MVI    A,'/'
  56.     CALL    SDIGIT
  57.     MVI    A,'7'    ; SET TENS OF YEARS
  58.     CALL    SDIGIT
  59.     MVI    A,'9'    ; SET UNITS OF YEARS
  60.     CALL    SDIGIT
  61.     RET
  62. ;    READ THE TIME
  63. TIME:    CALL    BOARD    ; CHECK IF BOARD THERE
  64.     JZ    NOBOARD
  65.     CALL    CLKINT
  66.     XCHG
  67.     MVI    A,40H    ; SET TIME DISPLAY MODE
  68.     OUT    BDATA
  69.     MVI    C,1    ; TELL READ4 THIS IS TIME
  70.     CALL    READ4
  71.     MVI    A,':'
  72.     CALL    SDIGIT
  73.     CALL    RSDIG
  74. ;    READ AND STORE A DIGIT
  75. RSDIG:    CALL    RDIGIT
  76.     CALL    SDIGIT
  77.     MOV    A,D
  78.     ADI    10H
  79.     MOV    D,A
  80.     RET
  81. ;    NO BOARD IN THE SYSTEM
  82. NOBOARD: XCHG
  83.     MVI    A,0
  84.     CALL    SDIGIT
  85.     CALL    SDIGIT
  86.     CALL    SDIGIT
  87.     CALL    SDIGIT
  88.     CALL    SDIGIT
  89.     CALL    SDIGIT
  90.     CALL    SDIGIT
  91.     CALL    SDIGIT
  92.     RET
  93. ;    SEE IF BOARD PRESENT
  94. BOARD:    IN    ADATA
  95.     CPI    0FFH
  96.     RET
  97. ;    INITIALIZE CLOCK/CALENDAR PORT
  98. CLKINT:    MVI    A,70H
  99.     OUT    ADATA
  100.     MVI    A,77H
  101.     OUT    BDATA
  102.     MVI    A,14H
  103.     OUT    ACONT
  104.     MVI    A,04
  105.     OUT    BCONT
  106.     RET
  107.