; Mousepointer-Chase
;
; Programming started:    17-June-87 23:00:00
; 
; Version 1.0 completed:  18-June-87 05:23:00
;
; by Top & ThB

;================================================

execbase = 4
;exec library
openlibrary = -552
closelibrary = -414
allocmem = -198
freemem = -210
;graphics library
loadrgb4 = -192
waitof = -270
initbitmap = -390
allocraster = -492
freeraster = -498
;intuition library
remakedisplay = -384

move.l execbase,a6
lea intlib,a1
clr.l d0
jsr openlibrary(a6)
move.l d0,intbase
beq error
lea gfxlib,a1
clr.l d0
jsr openlibrary(a6)
move.l d0,gfxbase ; basisadr von gfx-library
beq error

            ; LibSize = 34 (offset vom Libbase)

move.l gfxbase,a0
move.l 38(a0),a1 ; Zeiger auf copinit
move.l a1,copinit

move.w 10(a1),d0
swap d0
move.w 14(a1),d0
move.l d0,a4

move.w 18(a1),d1
swap d1
move.w 22(a1),d1
move.l d1,defsprite ; Zeiger aufs default Sprite (=ausgeschaltet)

move.l a4,data0

move.l #$400,d0
move.l #$2,d1
jsr allocmem(a6)

; bis hier ok !

move.l d0,a0    ; pointer auf sprite 1 ...
move.l a0,data1

lea $200(a0),a2
move.l a2,d0
clr.b d0
add.l #$100,d0
move.l d0,a2
move.l a2,table ; pointer auf tabelle

lea data1,a3
move.l a4,a1 ; pointer auf sprite 0 daten
move.l #6,d0 ; Anzahl sprites-1
loop1: move.l #17,d1 ; Anzahl LW-1
move.l a0,(a3)+
loop2: move.l (a1)+,(a0)+ ; Sprites umkopieren
dbf d1,loop2
move.l a4,a1
dbf d0,loop1

; Sch-prites umkopieren o.k. ...

move.l #63,d0
fuell: move.l (a4),(a2)+
dbf d0,fuell

; Follow-Tabelle mit diskretem Wert gefuellt !! (o.k.!)

move #13,d0
move.l copinit,a1
adda.l #18,a1
lea data1,a0
lup: move.w (a0)+,(a1)
addq.l #4,a1 
dbf d0,lup

; es ist auch bis hier o.k. (spriteptr in copinit...)

; main()

jsr setcol
move.l gfxbase,a6

main:

jsr waitof(a6) ; Synchronisieren mit Rasterstrahl

move.l 38(a6),a0
move.w 10(a0),d0
swap d0
move.w 14(a0),d0
move.l d0,a1
move.l (a1),d0

; in d0: werte von spr0

move.l table,d7
add.b offset,d7
move.l d7,a2

subq.b #4,offset

move.l d0,(a2)

lea data1,a3
move.w #6,d5

labello:
add.b #32,d7
move.l d7,a2
move.l (a3)+,a4
move.l (a2),(a4)
dbf d5,labello

move.b $bfe0ff,d0
btst #7,d0


bne main

; exiting gracefully (deallocate Memory for proper Intuition)

move.l execbase,a6
move.l data1,a1
move.l #$400,d0
jsr freemem(a6)
  
; Zeiger auf viele, viele, leere Sprites stellen

move.l #6,d0 ; also insgesamt 7 Sprites
move.l copinit,a1
adda.l #18,a1
schleife: 
move.w defsprite,(a1)
addq.l #4,a1
move.w defsprite+2,(a1)
addq.l #4,a1
dbf d0, schleife

;Libraries zurueckgeben

jsr freelibs

rts

setcol:

move.l gfxbase,a6
move.l 34(a6),a0 ; View
move.l (a0),a1   ; ViewPort
move.l 4(a1),a0  ; ColorMap
move.l 4(a0),a1  ; ColorTable
adda #32,a1
move.l a1,a0
adda #8,a1
move #2,d0
initcol: move.l (a0),(a1)+
move.l 4(a0),(a1)+
dbf d0,initcol
move.l intbase,a6
jsr remakedisplay(a6)
rts


freelibs:
move.l execbase,a6     ; Libraries wieder freigeben
move.l gfxbase,a1
jsr closelibrary(a6)
move.l intbase,a1
jsr closelibrary(a6)
rts

error: illegal

;************************************************

offset:    dc.b 0

even
defsprite: dc.l 0
gfxlib:    dc.b "graphics.library",0
even
gfxbase:   dc.l 0
intlib:    dc.b "intuition.library",0
even
intbase:   dc.l 0
copinit:   dc.l 0
data0:     dc.l 0
data1:     dc.l 0
data2:     dc.l 0
data3:     dc.l 0
data4:     dc.l 0
data5:     dc.l 0
data6:     dc.l 0
data7:     dc.l 0
table:     dc.l 0
spr_base:  dc.l 0
