*
* Zufallslinien und -muster.
*
* created on 27/10/89  18:58:58  by Holger Gzella
*

                incdir "asm:"
                include "exec/exec_lib.i"
                include "graphics/graphics_lib.i"
                include "intuition/intuition_lib.i"

*
* Libraries, Window und Screen öffnen
*
                lea     GfxName,a1              * Graphics öffnen
                moveq.l #0,d0
                CALLEXEC OpenLibrary
                move.l  d0,GfxBase

                lea     IntuiName,a1            * Intuition öffnen
                moveq.l #0,d0
                CALLEXEC OpenLibrary
                move.l  d0,IntuiBase

                move.l  d0,a6
                lea     ScreenDefs,a0           * Screen öffnen
                jsr     _LVOOpenScreen(a6)
                tst.l   d0
                beq     Fault
                move.l  d0,ScreenPtr

                lea     WindowDefs,a0           * Window öffnen
                jsr     _LVOOpenWindow(a6)
                tst.l   d0
                beq     Fault2
                move.l  d0,WindowPtr
                move.l  d0,a0
                move.l  $32(a0),RastPort

                move.l  GfxBase,a6
                moveq.w #1,d0
                move.l  RastPort,a1
                jsr     _LVOSetAPen(a6)

EternalLoop:    move.l  RastPort,a1
                move.w  #$ffff,d7
                bsr     Random
                move.w  d0,34(a1)

                move.w  #256,d7
                bsr     Random
                move.w  d0,d1

                move.w  #640,d7
                bsr     Random

                jsr     _LVOMove(a6)

                move.l  RastPort,a1
                move.w  #256,d7
                bsr     Random
                move.w  d0,d1

                move.w  #640,d7
                bsr     Random

                jsr     _LVODraw(a6)

                btst.b  #6,$bfe001
                bne.s   EternalLoop

*
* Ende - alles schließen
*

MemFault:       move.l  WindowPtr,a0
                jsr     _LVOCloseWindow(a6)

Fault2:         move.l  ScreenPtr,a0
                move.l  IntuiBase,a6
                jsr     _LVOCloseScreen(a6)

Fault:          move.l  IntuiBase,a1
                CALLEXEC CloseLibrary

                move.l  GfxBase,a1
                CALLEXEC CloseLibrary

                moveq.l #0,d0
                rts

*
* Unterprogramme ...
*

*
* Diese Routine berechnet eine Zufallszahl mit der
* Obergrenze in D7 und liefert sie in D0 zurück:
*

Random:         moveq.l  #0,d0
                move.w   $dff006,d0          * Rasterstrahl laden

DoesItFit:      cmp.w    d7,d0               * Zufallswert zu groß?
                bge.s    DidntFit            * ja!

EndIt:          rts                          * Rücksprung

DidntFit:       sub.w    d7,d0               * Obergrenze abziehen
                bra.s    DoesItFit           * und weiter!

*
* Datenteil ...
*

GfxName:        dc.b    "graphics.library",0
 even
IntuiName:      dc.b    "intuition.library",0
 even

 even
WindowDefs:     dc.w    0,0,640,256,1
                dc.l    $900,$0,0,0,0
ScreenPtr:      dc.l    0,0,0,0
                dc.w    $F

 even
ScreenDefs:     dc.w    0,0,640,256,1,1,$8000,$F,0,0
                dc.l    0,0,0

GfxBase:        dc.l    0
IntuiBase:      dc.l    0
WindowPtr:      dc.l    0
RastPort:       dc.l    0

                END

