;
; LowPass.asm - für den A68k-PD-Assembler von Charlie Gibbs
;               (W) 1989 by Holger Lubitz, Freeware !!!
;               Hoffentlich das KÜRZESTE Programm zum Abschalten des
;               Low-Pass-Filters in den A500/A2000 von der WB aus.
;               (Mein 1000er hat für sowas einen Schalter !)
;
; Wettbewerb: - Wer es noch kürzer hinbekommt (kleiner als 92 Bytes, aber
;               natürlich ebenfalls mit WB-Startupcode) bekommt von mir
;               eine Tüte Gummibärchen !
;
; 1> A68k LowPass.asm
; 1> BLink FROM LowPass.o Small.Lib TO LowPass
;
; Quellen: A68k von Fish 186, BLink 6.7 von Fish 110, Small.Lib von Fish 92
;

   SECTION MAIN,CODE

   XREF   _AbsExecBase
   XREF   _LVOForbid
   XREF   _LVOFindTask
   XREF   _LVOGetMsg
   XREF   _LVOReplyMsg
   XREF   _LVOWaitPort

pr_CLI:     EQU   $ac
pr_MsgPort: EQU   $5c

; Dies ist das eigentliche 'Programm'

   bchg     #1,$bfe001        ; LED umschalten

; ... und dieser ganze Müll ist nötig, damits auch von der Workbench läuft

   move.l   _AbsExecBase,a6   ; Exec-Basisadresse
   suba.l   a1,a1             ; A1 löschen
   jsr      _LVOFindTask(a6)  ; Diesen Task finden
   move.l   d0,a5             ; Taskadresse in A5
   tst.l    pr_CLI(a5)        ; Sind wir vom CLI aus gestartet worden ?
   bne.s    CLI               ; Ja, dann ab nach Hause

   lea.l    pr_MsgPort(a5),a0 ; Sonst auf die Message warten
   jsr      _LVOWaitPort(a6)  ; die die Workbench sendet
   jsr      _LVOGetMsg(a6)    ; Sie ist da, wie schön !
   move.l   d0,d4             ; d0 sichern, Forbid() änderts
   jsr      _LVOForbid(a6)    ; Wir wollen nicht zu früh von der WB
                              ; rausgeschmissen werden
   move.l   d4,a1             ; Das gesicherte D0 nach A1
   jsr      _LVOReplyMsg(a6)  ; und endlich antworten

CLI:
   moveq    #0,d0             ; Kein Fehler (woher auch)
   rts                        ; Wahnsinn, wir haben es geschafft...

   END
