CLOCKASM;*************************************** ;* * ;* Programm " CLOCK" fuer KC85/3/4 * ;* * ;* Uhrenprogramm mit CTC-Kanal 3 des * ;* * ;* V 24 Moduls M003 (ADRESSE 0EH) * ;* * ;* einschliesslich Datumsausgabe * ;* * ;* (Beruecksichtigung der Schaltjahre) * ;* * ;* (c) by U. Karmrodt 07.05.1990 * ;* * ;*************************************** ; ;--------------------------------------- ; >>> Merkzellen <<< ;--------------------------------------- ; ZAE: DEFB 57 ;ZAEHLER 2 H0: DEFB 0 ;STUNDE M0: DEFB 0 ;MINUTE S0: DEFB 0 ;SEKUNDE TA: DEFB 1 ;TAG MO: DEFB 1 ;MONAT JA: DEFB 90H ;JAHR FEN1: DEFB 31 ;FENSTER FUER DEFB 0 ;DATUM DEFB 9 DEFB 1 DEFB 0 DEFB 0 DEFB 2 ;STBT FEN2: DEFB 0 ;ZU RETTENDES DEFB 0 ;FENSTER DEFB 0 DEFB 0 DEFB 0 DEFW 0 FEN3: DEFB 1 ;FENSTER FUER DEFB 0 ;ZEIT DEFB 9 DEFB 1 DEFB 0 DEFB 0 DEFB 2 UP0: DEFW 0 ;ADRESSE UP 0 UP1C: DEFW 0 ;ADRESSE UP 1CH VGL: DEFB 0 ; ;--------------------------------------- UPV: JP (HL) ;UP VERTEILER ;--------------------------------------- ; ;--------------------------------------- ; ; >>> ISR <<< ; ;--------------------------------------- ;ISR: Teil Retten und Einstellen ;--------------------------------------- ISR: CALL EIRETI ;SCHNELLER ;ABSCHLUSS DER ;ISR PUSH IX ;RETTEN PUSH HL PUSH DE PUSH BC PUSH AF LD C,88H IN A,(C) PUSH AF SET 1,A OUT (C),A LD HL,0B79CH LD DE,FEN2 ;KOPIEREN LD BC,7 ;AKTUELLES LDIR ;FENSTER LD HL,FEN1 LD DE,0B79CH ;EINTRAGEN LD BC,7 ;DATUM- LDIR ;FENSTER LD A,(H0) LD (VGL),A LD A,(ZAE) DEC A ;ZAEHLER DEC LD (ZAE),A JR NZ,ZWI ;NULL-KONTR. LD A,57 LD (ZAE),A ;ZAEHL. LADEN LD A,(S0) ADD A,1 ;SEK. HOCHZAEHL. DAA LD (S0),A CP 60H CALL Z,MIN ;KONTR. MINUT. JR WEI ; ;--------------------------------------- ; >>> Bildschirmausgabe Datum <<< ;--------------------------------------- ; DAT: LD A,25 LD HL,(UP0) CALL UPV LD A,(TA) LD HL,(UP1C) CALL UPV LD A,2EH LD HL,(UP0) CALL UPV LD A,(MO) LD HL,(UP1C) CALL UPV LD A,2EH LD HL,(UP0) CALL UPV LD A,(JA) LD HL,(UP1C) CALL UPV RET ;--------------------------------------- ZWI: JR END ;STUETZSTELLE ;--------------------------------------- ; >>> Bildschirmausgabe Zeit <<< ;--------------------------------------- WEI: LD A,(H0) LD HL,VGL CP (HL) CALL NZ,DAT LD HL,FEN3 LD DE,0B79CH LD BC,7 LDIR LD A,25 LD HL,(UP0) CALL UPV LD A,(H0) LD HL,(UP1C) CALL UPV LD A,2EH LD HL,(UP0) CALL UPV LD A,(M0) LD HL,(UP1C) CALL UPV LD A,3AH LD HL,(UP0) CALL UPV LD A,(S0) LD HL,(UP1C) CALL UPV ; ;--------------------------------------- ;ISR: Teil Rueckspeichern ;--------------------------------------- ; END: LD HL,FEN2 LD DE,0B79CH LD BC,7 LDIR POP AF LD C,88H OUT (C),A POP AF POP BC POP DE POP HL POP IX RET ;--------------------------------------- EIRETI: EI RETI ;--------------------------------------- ;ISR: Teil Std.,Min.,Sek.,Tag,Mon. ; und Jahr hochzaehlen ;--------------------------------------- ; MIN: LD A,0 LD (S0),A LD A,(M0) ADD A,1 ;MIN. HOCHZ. DAA LD (M0),A CP 60H ;TEST STUNDE CALL Z,STU RET STU: LD A,0 LD (M0),A LD A,(H0) ADD A,1 ;STUNDE HOCHZ. DAA LD (H0),A CP 24H ;TEST TAG CALL Z,TAG RET TAG: LD A,0 LD (H0),A LD A,(TA) CP 28H ;TEST TAG<28 JR C,PLUS LD A,(MO) CP 2 ;TEST FEBRUAR JR Z,FEB LD A,(TA) CP 30H ;TEST TAG<30 JR C,PLUS LD A,(MO) BIT 0,A ;TEST JR Z,MAR ;GERADER MONAT LD A,(TA) CP 31H ;TEST TAG<31 JR C,PLUS MAR: LD A,1 ;TAG AUF 1 LD (TA),A CALL MON ;SPR. AUF MONAT RET PLUS: LD A,(TA) ADD 1 ;TAG=TAG+1 DAA LD (TA),A RET FEB: LD A,(JA) BIT 4,A ;Halbbyte ger.? JR NZ,TEST1 BIT 1,A ;TEST BIT1=0 JR Z,TEST2 JR MAR TEST2: LD A,(TA) ;Test TAG=29 CP 29H JR Z,MAR LD A,(JA) BIT 0,A ;TEST BIT0=0 JR NZ,MAR JR PLUS ;BIT0 u. BIT 1 ;SIND NULL ==> ;DURCH 4 TEILBAR ;==> SCHALTJAHR TEST1: BIT 1,A JR NZ,TEST2 JR MAR MON: LD A,(MO) ADD 1 ;MO=MO+1 DAA LD (MO),A CP 13H ;TEST AUF JAHR CALL Z,JAHR RET JAHR: LD A,1 ;MO=1 LD (MO),A LD A,(JA) ADD 1 ;JA=JA+1 DAA LD (JA),A CP 100H ;TEST ;JAHRHUNDERT- ;WENDE CALL Z,NUSET RET NUSET: LD A,0 ;JA=0 LD (JA),A RET ; ;======================================= ; DEFW 7F7FH DEFM 'CLOCK' DEFB 1 LD A,(0B781H) CP 0 JR Z,STAR CP 6 ;TEST ANZ. PAR. JR NZ,ZWI1 ;PAR.<>6 SPRUNG MM1: LD B,A JR START GROESS: LD B,6 START: LD HL,0B782H LD DE,H0 SCHL1: LD A,(HL) LD (DE),A INC HL INC HL INC DE DJNZ SCHL1 ;PAR. LADEN STAR: LD B,8 MM2: LD C,80H IN A,(C) CP 0EEH ;V24 IM SYST.? JR Z,INIT INC B INC B INC B INC B ;SCHACHT HOCHZ. PUSH AF LD A,B CP 0F8H ;ENDE-TEST JR Z,SCHLUS POP AF JR MM2 SCHLUS: POP AF CALL 0F003H DEFB 23H DEFM 'Keine V24 im System !' DEFW 0D0AH DEFB 0 RET INIT: LD A,1 OUT (C),A ;V24 EINSCHALTEN LD HL,0 CALL UPIN ;UP-NR. LD (UP0),HL ;HOLEN LD HL,001CH ;UND CALL UPIN ;ABSPEICHERN LD (UP1C),HL CALL DATUM ; ;--------------------------------------- ; CTC initialisieren ;--------------------------------------- ; LD HL,ISR LD (1DCH),HL DI LD A,0D8H OUT (0CH),A LD A,0A7H OUT (0EH),A LD A,121 OUT (0EH),A IM 2 EI RET ;--------------------------------------- ZWI1: JR NC,GROESS ;PAR.>6 SPRUNG JR MM1 ;--------------------------------------- UPIN: LD DE,(0B7B0H) ;UP-ADR. SLA L ;BERECHNEN SCF CCF ADD HL,DE LD E,(HL) INC HL LD D,(HL) EX DE,HL RET ;--------------------------------------- DATUM: LD HL,0B79CH LD DE,FEN2 LD BC,7 LDIR LD HL,FEN1 LD DE,0B79CH LD BC,7 LDIR CALL DAT LD HL,FEN2 LD DE,0B79CH LD BC,7 LDIR RET