home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / cpm / mex / mxc-ads1.z80 < prev    next >
Text File  |  1994-07-13  |  4KB  |  168 lines

  1. ; MXC-ADS1.Z80  Revision 1.0    Jim Lill   19 Mar 87
  2. ;
  3. ; MEXplus Clock Overlay For Apple //e using Dallas DS1216E or
  4. ; other type RTC that plug into the CD ROM socket.
  5. ;
  6. ; Requires: DSCLK.DVR (See PCPITIME.LBR)
  7. ;
  8. ;------------------------------------------------------------------------
  9. ; revision |  date  |            description        |    author
  10. ;----------+-------------------------------------------------------------
  11. ;   1.0    |19Mar87 | created original, some code from     | Jim Lill
  12. ;          |        | MXC-DS10.Z80, DSDSCLK.Z80            |
  13. ;------------------------------------------------------------------------
  14. bdos    equ    0005h
  15. cent    equ    1900        ;century
  16. dvr3    equ    0ffe3h        ;these two locations are in the 
  17. dvr0    equ    0ffe0h        ;6502 I/O area for talking to .DVR
  18. ;...............................
  19. ;
  20. ; Prtval macro prints text and value during assembly
  21. ;
  22. prtval    macro msg,n
  23.     .printx    msg n
  24.     endm
  25. ;...............................
  26. ;
  27. ; start of MEX stuff....
  28.  
  29.     org    0100h
  30.     db    0C3h        ; this is for 8080 processor
  31. ;...............................
  32. ;
  33. ; JMP table for clock overlay
  34. ;
  35.     org    0E00h        ;start of clock overlay
  36.  
  37. start:    jp    gettim        ;get time
  38.     jp    getdat        ;get date
  39.     ret            ;cset processor
  40.     nop
  41.     nop
  42.     ret            ;clock overlay init
  43.     nop
  44.     nop
  45.     ret            ;clock overlay de-init
  46.     nop
  47.     nop
  48. ;...............................
  49. ;
  50. ; gettim, this routine gets the time in clktbl and readies it for MEX
  51. ;
  52. ;    B - hours (0-23)
  53. ;    C - minutes (0-59)
  54. ;    D - seconds (0-59)
  55. ;    E - hundredths of sec (0-99)
  56. ;
  57. gettim:
  58.     call    clock         ; get date and put BCD data in CLKTBL
  59.     
  60.     ld     A,(hour)    ; load packed BCD hours into A
  61.     call    bcd2bin        ; \__ place bin hours in B
  62.     ld    B,A        ; /
  63.     
  64.     ld    A,(min)        ; load packed BCD mins into A
  65.     call    bcd2bin        ; \__ place bin mins in C
  66.     ld    C,A        ; /
  67.  
  68.     ld    A,(sec)        ; load packed BCD secs into A
  69.     call    bcd2bin        ; \__ place bin secs in D
  70.     ld    D,A        ; /
  71.  
  72.     ld    A,(hsec)    ; load packed BCD hsecs into A
  73.     call    bcd2bin        ; \_ place bin hsecs in E
  74.     ld    E,A        ; /
  75.  
  76.     ret            ; back to MEX
  77. ;................................
  78. ;
  79. ; getdat, this routine gets the date in clktbl and readies it for MEX
  80. ;
  81. ;    BC - year (1985-2099)
  82. ;    D - month (1=jan, 2=feb, etc)
  83. ;    E - day of month (1-31)
  84. ;
  85. getdat:
  86.     call    clock         ; get date and put BCD data in CLKTBL
  87.                 ;
  88.     ld     A,(day)        ; load packed BCD day into A
  89.     call    bcd2bin        ; \__ place bin day in E
  90.     ld    E,A        ; /
  91.  
  92.     ld    A,(mon)        ; load packed BCD mon into A
  93.     call    bcd2bin        ; \__ place bin mon in D
  94.     ld    D,A        ; /
  95.  
  96.     ld    A,(year)    ; load packed BCD year (00-99) into A
  97.     call    bcd2bin        ; \__ place bin year in C
  98.     ld    C,A        ; /
  99.     ld    B,0        ; make a whole year value
  100.     ld    HL,cent        ; by adding cent (eg 1900)
  101.     add    HL,BC        ; to partial year
  102.     ld    C,L        ; move answer into BC
  103.     ld    B,H        ; "     "      "  "
  104.  
  105.     ret            ; back to MEX
  106. ;...............................
  107. ;
  108. ; bcd2bin --> packed BCD (A) converted to Binary (A)
  109. ;
  110. bcd2bin:
  111.     push    BC        ; be safe
  112.     ld    C,A        ; load in value from A
  113.     and    0F0h        ; mask off lower nibble
  114.     rra            ; \
  115.     rra               ;  \_/ move upper nibble
  116.     rra              ;  / \ into lower nibble 
  117.     rra            ; /
  118.     ld    B,A        ; store value *1 
  119.     add    A        ; \__ *4 
  120.     add    A        ; /  
  121.     add    B        ; now *5 
  122.     add    A        ; finally *10
  123.     ld    B,A        ; store 10's digit in B
  124.     ld    A,C        ; \__ load lower digit into A    
  125.     and    00Fh        ; /
  126.     add    B        ; combine both digs. into single byte
  127.     pop    BC        ; restore register
  128.     ret            ; 
  129. ;...............................
  130. ;
  131. ; CLOCK calls the DS1216E via the PCPI driver and puts the data into 
  132. ;       CLKTBL as BCD.    
  133.  
  134. clock:    ld    c,251        ;put command in C for call
  135.     call    dvr3          ;send the command
  136.     ld    c,16        ;get time command in C
  137.     call    dvr3        ;send it
  138.     ld    hl,clktbl    ;point at table
  139. getit:    call    dvr0        ;receive a character
  140.     cp    0AAh        ;Check to see if last character
  141.     jr    z,exit        ;if it is exit loop
  142.     ld    (hl),a        ;store data in buffer
  143.     inc    hl        ;bump buffer pointer
  144.     jr    getit        ;go get new data 
  145. exit:    ret
  146.  
  147. clktbl: 
  148. year:    ds    1        
  149. mon:    ds    1        
  150. day:    ds    1        
  151. dow:    ds    1        
  152. hour:    ds    1        
  153. min:    ds    1        
  154. sec:    ds    1        
  155. hsec:    ds    1        
  156. ;..................
  157. ;
  158. ; Assembly-time only, MEX modules have space restrictions
  159. ;
  160.     if1
  161.       .radix 16
  162.       prtval <ending address = >,%($)
  163.       prtval <  overlay size = >,%($ - start)
  164.     endif
  165. ;................................
  166.  
  167.     end            
  168.