home *** CD-ROM | disk | FTP | other *** search
- ; CPMDATE for Turbo-ARC, TR 031189
- .z80
- extrn inarray,datout,timout
-
- ; Inarray (5 Byte) : date (2), hour, minute, second
- ; Datout (3 Byte) : day, month, year
- ; Timout (3 Byte) : hour, minute, second
-
- ld ix,(inarray) ; ^Inarray
- ld iy,(datout) ; ^Datout
- ld l,(ix)
- ld h,(ix+1) ; HL = Datum (Word)
- ld de,365
- ld b,00100010b ; Bitmaske erzeugt CARRY bei Schaltjahr
- ld a,78 ; Anzahl Tage ab 1978
- cyloop: rlc b
- sbc hl,de ; 365 bzw. 366 abziehen
- jr c,cyexit
- jr z,cyexit ; bis negativ oder null
- inc a ; Jahr inc.
- jr cyloop
- cyexit: rrc b
- adc hl,de ; Tageszahl korrigieren
- ld (iy+2),a ; Jahr speichern
- bit 7,b ; in B noch Schaltjahr-Maske
- ld de,dnosw
- jr z,nosw
- ld de,dsw ; DE mit Zeiger auf entspr. Tabelle laden
- nosw: ld a,1
- ld b,0 ; High-Byte f}r Subtraktion immer 0
- cmloop: ex de,hl
- ld c,(hl) ; Tageszahl des entspr. Monats lesen
- inc hl
- ex de,hl
- or a
- sbc hl,bc ; und von Gesamtzahl abziehen
- jr c,cmexit
- jr z,cmexit ; bis 0 oder negativ
- inc a ; Monat inkrementieren
- jr cmloop
- cmexit: add hl,bc ; Korrekturaddition
- ld (iy+1),a ; Monat speichern
- ld (iy),l ; Tage speichern (Rest)
-
- ld hl,(timout) ; ^Timout
- ld b,3
- timlp: ld d,(ix+2) ; BCD-Wert
- ld a,d
- and 0Fh
- ld e,a ; Einer in E
- ld a,d
- sub e
- rrca
- rrca
- add a,d
- add a,e
- rra ; BCD ---> bin{r
- ld (hl),a ; Wert speichern
- inc ix
- inc hl
- djnz timlp ; alle 3 Werte BCD-bin{r
- ret
-
- dnosw: defb 31,28,31,30,31,30,31,31,30,31,30,31
- dsw: defb 31,29,31,30,31,30,31,31,30,31,30,31
-
- end
-