; Das Uhrenproblem ist wahrlich nicht neu, aber nichts desto trotz
; insbesondere für Anfänger sehr verwirrend.
; Ich gehe deshalb nochmals auf die Uhren-Problematik ein.
;
; Durch das Setzen gewisser Register kann man die Echtzeituhr anhalten.
; Manche preferences- und setclock-Versionen nehmen nun fälschlicherweise an,
; daß gar keine Uhr vorhanden sei.
; Zum Setzen dieser Uhren-Register kann es rein zufällig bei einem bösen
; Amiga-Absturz kommen. Natürlich kann auch ein Virusprogramm mit Absicht
; diese Register beschreiben. Das war es dann aber auch schon, was ein Virus
; mit der Uhr anstellen kann.
; Einige setclock-Versionen sollen sich angeblich nicht durch eine angehaltene
; Uhr täuschen lassen. Wenn man eine solche Version besitzt, dann hat man keine
; Probleme mit angeblich nicht vorhandenen Uhren. Ich besitze zwar einige
; setclock-Versionen. Alle versagen aber bei einer angehaltenen Uhr. Die Uhr
; wird einfach nicht mehr erkannt. Ich habe daher das folgende Programm
; entwickelt, welches man auch in die startup-sequence eintragen kann.
;
; Clock-Activator aktiviert eine eventuell angehaltene Uhr.
; Ferner wird gemeldet ob ein Amiga 500 / 2000 B oder Amiga 2000 A vorliegt
; oder ob wirklich keine Uhr vorliegt.
;
; Ich habe das Programm Clock-Aktivator zusammen mit dieser Erklärung
; und dem Sourcecode in Brett Z-NETZ/AMIGA/BINAER unter dem Namen
; Clock-Activator.LZH abgelegt.
;
; so long!     Pius Nippgen,Bergstr.12,6657 Gersheim 8,Tel.06843/1522(ab18.30)
;
start:
 move.l  $4.w,a6
 jsr     -120(a6)
 bsr     synchro
 move.l  #nouhr,d2
 cmp.w   #$ffff,$d80006; wenn Amiga2000A $fffx, wobei x<$a da BCD
 bne.s   Amiga2000A
 cmp.w   #$fff0,$dc0006; wenn keine Uhr ist Customchip gespiegelt, da auf 0
 blo.s   noclock       ; gewartet habe, ist immer < 256
 clr.l   $dc0034       ; wenn Uhr >= $fff0
 clr.l   $dc0038
 clr.l   $dc003C
 move.l  #newuhr,d2
 bra.s   noclock
Amiga2000A:
 clr.l   $d80034
 clr.l   $d80038
 clr.l   $d8003C
 move.l  #olduhr,d2
noclock:
 jsr     -126(a6)

 lea     dosname(pc),a1
 jsr     -408(a6)
 move.l  d0,a6
 jsr     -60(a6)          ; outputhandle
 move.l  d0,d1
 beq.s   NoOutput
 moveq   #newuhr-nouhr,d3
 move.l  d1,-(sp)
 jsr     -48(a6)
 move.l  (sp)+,d1
 move.l  #person,d2
 moveq   #nouhr-person,d3
 jsr     -48(a6)
NoOutput:
 move.l  a6,a1
 move.l  $4.w,a6
 jsr     -414(a6)         ; CloseLibrary('dos.library',0)
 moveq   #0,d0
rrttss:                   ; und Ende
 rts

synchro:
 tst.b   $dff006          ; warten auf Rasterzeile 0 = Beginn Vertikal Blank,
 bne.s   synchro          ; kein WaitTOF(), da hierbei noch andere tasks usw.
synchro1:                 ; zuerst bedient werden, wodurch meine Zeitmessung
 tst.b   $dff005          ; durcheinanderkommen kann.
 bne.s   synchro1
 rts

person:
 dc.b "Clock-Activator - Pius Nippgen,Bergstr.12,6657 Gersheim 8,06843/1522",10
 even
nouhr:  dc.b "ich kann keine Uhr finden !",10
 even
newuhr: dc.b "Amiga 500/2000B - Uhr okay!",10
 even
olduhr: dc.b "Amiga 2000A     - Uhr okay!",10
 even
dosname:  dc.b "dos.library",0
 even
 end
