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 / ENTERPRS / CPM / UTILS / A / ARC20.ARC / ARCMACS.ARC / CPMDATE.MAC < prev    next >
Text File  |  1989-11-03  |  2KB  |  68 lines

  1. ; CPMDATE for Turbo-ARC, TR 031189
  2.     .z80
  3.     extrn    inarray,datout,timout
  4.  
  5. ; Inarray (5 Byte) : date (2), hour, minute, second
  6. ; Datout (3 Byte)  : day, month, year
  7. ; Timout (3 Byte)  : hour, minute, second
  8.  
  9.     ld    ix,(inarray)    ; ^Inarray
  10.     ld    iy,(datout)    ; ^Datout
  11.     ld    l,(ix)
  12.     ld    h,(ix+1)    ; HL = Datum (Word)
  13.     ld    de,365
  14.     ld    b,00100010b    ; Bitmaske erzeugt CARRY bei Schaltjahr
  15.     ld    a,78        ; Anzahl Tage ab 1978
  16. cyloop:    rlc    b
  17.     sbc    hl,de        ; 365 bzw. 366 abziehen
  18.     jr    c,cyexit
  19.     jr    z,cyexit    ; bis negativ oder null
  20.     inc    a        ; Jahr inc.
  21.     jr    cyloop
  22. cyexit:    rrc    b
  23.     adc    hl,de        ; Tageszahl korrigieren
  24.     ld    (iy+2),a    ; Jahr speichern
  25.     bit    7,b        ; in B noch Schaltjahr-Maske
  26.     ld    de,dnosw
  27.     jr    z,nosw
  28.     ld    de,dsw        ; DE mit Zeiger auf entspr. Tabelle laden
  29. nosw:    ld    a,1
  30.     ld    b,0        ; High-Byte f}r Subtraktion immer 0
  31. cmloop:    ex    de,hl
  32.     ld    c,(hl)        ; Tageszahl des entspr. Monats lesen
  33.     inc    hl
  34.     ex    de,hl
  35.     or    a
  36.     sbc    hl,bc        ; und von Gesamtzahl abziehen
  37.     jr    c,cmexit
  38.     jr    z,cmexit    ; bis 0 oder negativ
  39.     inc    a        ; Monat inkrementieren
  40.     jr    cmloop
  41. cmexit:    add    hl,bc        ; Korrekturaddition
  42.     ld    (iy+1),a    ; Monat speichern
  43.     ld    (iy),l        ; Tage speichern (Rest)
  44.  
  45.     ld    hl,(timout)    ; ^Timout
  46.     ld    b,3
  47. timlp:    ld    d,(ix+2)    ; BCD-Wert
  48.     ld    a,d
  49.     and    0Fh
  50.     ld    e,a        ; Einer in E
  51.     ld    a,d
  52.     sub    e
  53.     rrca
  54.     rrca
  55.     add    a,d
  56.     add    a,e
  57.     rra            ; BCD ---> bin{r
  58.     ld    (hl),a        ; Wert speichern
  59.     inc    ix
  60.     inc    hl
  61.     djnz    timlp        ; alle 3 Werte BCD-bin{r
  62.     ret
  63.  
  64. dnosw:    defb    31,28,31,30,31,30,31,31,30,31,30,31
  65. dsw:    defb    31,29,31,30,31,30,31,31,30,31,30,31
  66.  
  67.     end
  68.