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 / NO-SLOT.LBR / DTS.Z80 < prev   
Text File  |  2000-06-30  |  3KB  |  150 lines

  1. ;
  2. ; This simplistic program sets the No-Slot Clock. It must be edited
  3. ; with the time to set in the buffer at the end, assembled, linked,
  4. ; and then run at the correct time. Dumb but fast way of getting
  5. ; the clock working. (v1.0)
  6. ;                Andrew Sopchak 5/22/87
  7. ;
  8. ;
  9. ;
  10.     .hd64
  11. ;
  12.     .xlist
  13.     maclib    ports.lib
  14.     .list
  15. ;
  16. cr    equ    13
  17. lf    equ    10
  18.  
  19. highram    equ    02000h    ; RAM address for execution of access segment
  20.  
  21.     ext    eprint,cout
  22.  
  23.     jp    start
  24.     org    highram
  25. start:
  26.     ld    (stack),sp    ; save ccp stack
  27.     ld    sp,stack    ; set up local stack
  28.  
  29.     call    eprint
  30.     db    cr,lf,'DTS v1.0 AMS 5/22/87',cr,lf
  31.     db    'Date and time are now set to:'cr,lf,0
  32.     
  33.     ld    hl,(1)        ; get base bios address
  34.     ld    bc,60        ; offset to setlatch routine
  35.     add    hl,bc        ; address now in hl
  36.     ld    (setlatch+1),hl    ; store address for readclk
  37.  
  38.     call    doclk        ; set clock info
  39.     call    dumpclk        ; print out clock data
  40.  
  41.     ld    sp,(stack)    ; restore ccp stack
  42.     ret
  43.  
  44. dumpclk:
  45.     ld    a,(buf+6)    ; month
  46.     ld    c,'/'
  47.     call    dobyte
  48.     ld    a,(buf+5)    ; date
  49.     call    dobyte
  50.     ld    a,(buf+7)    ; year
  51.     ld    c,' '
  52.     call    dobyte
  53.     ld    a,(buf+3)    ; hours (24 hour format)
  54.     ld    c,':'
  55.     call    dobyte
  56.     ld    a,(buf+2)    ; minutes
  57.     call    dobyte
  58.     ld    a,(buf+1)    ; seconds
  59.     ld    c,'.'
  60.     call    dobyte
  61.     ld    a,(buf)        ; fractional seconds (just for fun)
  62.     ld    c,'|'
  63.     call    dobyte
  64.     ld    a,(buf+4)    ; day of week (also for fun)
  65.     ld    c,' '
  66.     call    dobyte
  67.     ret            ; and we're done
  68.     
  69. dobyte:
  70.     ld    b,a
  71.     and    11110000b
  72.     srl    a        ; move to lower nibble
  73.     srl    a
  74.     srl    a
  75.     srl    a
  76.     add    a,'0'        ; convert to ascii
  77.     call    cout
  78.     ld    a,b
  79.     and    00001111b
  80.     add    a,'0'
  81.     call    cout
  82.     ld    a,c        ; get separator character
  83.     call    cout
  84.     ret
  85.  
  86. doclk:
  87.     di            ; don't bother me
  88.     in0    a,(cbar)    ; save old value
  89.     ld    (oldcbar),a
  90.     ld    a,0
  91.     call    setlatch
  92.     ld    (oldlatch),bc    ; save old value
  93.     ld    a,b        ; load latch1 to a
  94.     res    3,a        ; point to ROM
  95.     ld    b,a
  96.     ld    a,0ffh        ; set values for latch
  97.     call    setlatch    ; now we are pointing to ROM
  98.     ld    a,081h        ; set MMU for 4k common area 0
  99.     out0    (cbar),a
  100.     
  101. ; This section turns on the clock writing 8 bytes in comp reg
  102.     ld    a,(4)        ; reset clock comparator
  103.     ld    hl,compreg    ; point to bit stream
  104.     call    wrtclk        ; send stream to clock
  105.     
  106. ; This section will write out all 8 bytes of the clock
  107.     ld    hl,buf        ; point to bit stream
  108.     call    wrtclk        ; send stream to clock
  109.  
  110. ; We are all done writing, so restore values and return
  111.     ld    bc,(oldlatch)    ; restore old latch values
  112.     ld    a,0ffh
  113.     call    setlatch
  114.     ld    a,(oldcbar)    ; restore old CBAR values
  115.     out0    (cbar),a
  116.     ei            ; I can be bothered now
  117.     ret
  118.  
  119. ; This routine should be called with HL->buffer of data to 
  120. ; write out to the clock.
  121. wrtclk    ld    d,8        ; do 8 bytes
  122. nxtbyt    ld    a,(hl)        ; get first byte
  123.     ld    b,a        ; b contains byte
  124.     ld    c,8        ; do this for 8 bits
  125. nxtbit    srl    b        ; 0->b7...b0->cy
  126.     jr    c,wr1bit
  127. wr0bit    ld    a,(0)        ; write a 0 bit
  128.     jr    skip
  129. wr1bit    ld    a,(1)        ; write a 1 bit
  130. skip    dec    c
  131.     jr    nz,nxtbit    ; do all 8 bits
  132.     inc    hl        ; point to next byte
  133.     dec    d        ; done with 8 bytes?
  134.     jr    nz,nxtbyt    ; go do next byte
  135.     ret            ; all done
  136.  
  137. ; data storage and values
  138. compreg        db    0c5h,3ah,0a3h,5ch    ; comparison reg
  139.         db    0c5h,3ah,0a3h,5ch,0    ; definition
  140. buf        db    0h,0h,25h,1h        ; set HMS
  141.         db    11h,25h,5h,87h        ; set DMY
  142. oldcbar        ds    1    ; old CBAR
  143. oldlatch    ds    2    ; temp save of current latch settings
  144. setlatch    jp    0000h    ; address of BIOS setlatch routine
  145.  
  146.     ds    64        ; local stack
  147. stack    ds    2
  148.  
  149.     end
  150.