; **************************
; *        GRID - IT       *
; *         ©  1987        *
; *     by J.T. Soft ART   *
; *    ------------------  *
; * Vers.: 060787          *
; **************************
;
; -----------------------------------------------------
;            Int.Gra.Exec - Labels
; -----------------------------------------------------
;                Exec Library
execbase = 4
openlib = -408
closelib = -414
getmsg = -372
;                  DMA Controll
ctlw  = $dff096
cothi0 = $dff0a0
cotlo0 = cothi0+2
cotl0  = cothi0+4
coper0 = cothi0+6
covol0 = cothi0+8
cothi1 = $dff0b0
cotlo1 = cothi1+2
cotl1  = cothi1+4
coper1 = cothi1+6
covol1 = cothi1+8
;               Graphic Library
clearscreen = -48
text = -60
setfont = -66
openfont = -72
closefont = -78
move = -240
draw = -246
areamove = -252
areadraw = -258
aeraend = -264
initarea = -282
setrgb4 = -288
rectfill = -306
readpixle = -318
writepixle = -324
flood = -330
polydraw = -336
setapen = -342
setbpen = -348
setdrmd = -354
scrollraster = -396
getsprite = -408
freesprite = -414
changesprite = -420
movesprite = -426
remfont =-486
scrollvport = -588
;                  INTUITION Library
setpointer = -270
closescreen = -66
closewindow = -72
closeworkbench = -78
displaybeep = -96
drawborder = -108
drawimage = -114
movescreen = -162
movewindow = -168
openscreen = -198
openwindow = -204
openworkbench = -210
printitext = -216
screentoback = -246
screentofront = -252
windowtoback = -306
windowtofront = -312
windowlimits = -318
makesreen = -378

joy = $dff00c
; ----------------------------------------------
;                  Main
; ----------------------------------------------

run:
  bsr openint
  bsr opengra
  bsr screenopen
  bsr windowopen
startg:
  bsr gameinit
  move #0,soundtrack
  move #240,timebox
  move #10,tib
  move #8000,timebase
  move #0,bum
  move.l #levelpa+22,namepa
  move #2,levelcount
  move #3,livescount
  move #0,flagc
  move #0,flag
  move #100,ax1
  move #101,ay1
  move #2,ar1
  move.l #0,scorez
  move #22,gridx
  move #26,gridy
  move #4,ar2
  move #200,ax2
  move #126,ay2
  move #80,ax3
  move #151,ay3
  move ar1,ar3
  bsr intcolors
  bsr mousepo
  bsr rand3d
  bsr titel
  bsr initsprites
  bsr painttime
  bsr tick
  move #$8201,ctlw
  bsr game
bra startg

rausg:
 bsr fire
 bsr windowclose
 bsr screenclose
 bsr closeint
 bsr closegra
rts

rand3d:
move #13,d0
move #13,d1
move #307,d2
move #187,d3
move #4,d4
move #28,d5

;                         Sub Ramen
;  - Zeichnet einen Ramen (x1,y1,x2,y2) in n-Farben
;    von Frabe a ab:
;
;  - graphik
;  - windowhd/viewport
;  - x1 => d0
;    y1 => d1
;    x2 => d2
;    y2 => d3
;    n  => d4
;    a  => d5
; --------------------------------------------------------------  
ramen:
move d5,colorrand
move d4,zahlrand
move d4,mzahl
move #3,mcount
move.l #xyrand,a1
move d0,(a1)+
move d1,(a1)+
move d0,(a1)+
move d3,(a1)+
move d2,(a1)+
move d3,(a1)+
move d2,(a1)+
move d1,(a1)+
move d0,(a1)+
move d1,(a1)+
lrand2:
 looprand:
  move.l grabase,a6
  move.l windowhd,a1
  move.l 50(a1),a1
  move colorrand,d0
  jsr setapen(a6)
  move.l grabase,a6
  move.l windowhd,a1
  move.l 50(a1),a1
  move rx1,d0
  move ry1,d1
  jsr move(a6)
  move.l grabase,a6
  move.l windowhd,a1
  move.l 50(a1),a1
  move.w #5,d0
  lea xyrand,a0
  jsr polydraw(a6) 
 bsr erline
  subq #1,zahlrand
 bne looprand
 move mzahl,zahlrand
 addq #1,colorrand
 subq #1,mcount
bne lrand2
rts
 
erline:
  sub #1,rx1
  sub #1,ry1
  sub #1,rx2
  add #1,ry2
  add #1,rx3
  add #1,ry3
  add #1,rx4
  sub #1,ry4
  sub #1,rx5
  sub #1,ry5  
rts

mcount: dc.w 0
mzahl: dc.w 0
xyrand:
rx1: dc.w 0
ry1: dc.w 0
rx2: dc.w 0
ry2: dc.w 0
rx3: dc.w 0
ry3: dc.w 0
rx4: dc.w 0
ry4: dc.w 0
rx5: dc.w 0
ry5: dc.w 0
colorrand: dc.w 0
zahlrand: dc.w 0
;------------------------------------------------------------

  
spritesaus:
move.l grabase,a6
move #1,d0
jsr freesprite(a6)
move #2,d0
jsr freesprite(a6)
move #3,d0
jsr freesprite(a6)
move #4,d0
jsr freesprite(a6)
rts

mousepo:
 move.l intbase,a6
 move.l windowhd,a0
 lea mousep,a1
 move #0,d0
 move.b #15,d1
 clr d2
 clr d3
 jsr setpointer(a6)
rts

digi:
move #0,d5
lpdigi:
 move.l #daten,cothi0
 move #ende-daten,cotl0
 move #300,coper0
 move d5,covol0
 move #$8201,ctlw
 bsr stime
 addq #1,d5
 cmp #30,d5
bne lpdigi
rts

digisilent:
move #30,d5
lpsilent:
 bsr stime
 move d5,covol0
 subq #1,d5
bne lpsilent
move #1,ctlw
rts


gameinit:
 lea scorep,a0
 move.l #$30303030,6(a0)
 move.w #$3030,10(a0)
 move.w #$3031,levelpo
 lea gridp,a0
 move.l #$20a4a4a4,9(a0)
rts

initsprites:
 move.l grabase,a6
 lea simpelsprs,a0
 move #1,d0
 jsr getsprite(a6)
 move.l grabase,a6
 lea simpelspra1,a0
 move #2,d0
 jsr getsprite(a6)
 move.l grabase,a6
 lea simpelspra2,a0
 move #3,d0
 jsr getsprite(a6)
 lea simpelspra3,a0
 move #4,d0
 jsr getsprite(a6)
rts

setsprites:
 move.l grabase,a6
 move.l viewport,a0
 lea simpelsprs,a1
 move gridx,d0
 move gridy,d1
 sub #9,d0
 sub #7,d1
 jsr movesprite(a6)
 move.l grabase,a6
 move.l viewport,a0
 lea simpelspra1,a1
 move ax1,d0
 move ay1,d1
 sub #9,d0
 sub #7,d1
 jsr movesprite(a6)
 move.l grabase,a6
 move.l viewport,a0
 lea simpelspra2,a1
 move ax2,d0
 move ay2,d1
 sub #9,d0
 sub #7,d1
 jsr movesprite(a6)
 move.l grabase,a6
 move.l viewport,a0
 lea simpelspra3,a1
 move ax3,d0
 move ay3,d1
 sub #9,d0
 sub #7,d1
 jsr movesprite(a6)
rts

game:
 bsr setsprites
 bsr joystick
 bra bonus
 boret:
 bra livecont
 liret:
 bsr alinencontroll
 bsr sound
 bsr stime
bra game

sound:
bsr tick
cmp #1,soundtrack
beq pipinit
cmp #2,soundtrack
beq pipaus
nso:
rts
pipinit:
move.l #sinus,cothi1
move #8,cotl1
move #320,coper1
move #60,covol1
move #$8203,ctlw
move #10,sotime
move #2,soundtrack
rts
pipaus:
subq #1,sotime
bne nso
move #2,ctlw
bsr nextlevel
rts
tick:
  move.l #tickl,cothi0
  move #8,cotl0
  move #14000,coper0
  move #60,covol0
rts  

bonus:
subq #1,tib
bne boret
move #10,tib
move.l grabase,a6
move.l windowhd,a0
move.l 50(a0),a1
move #0,d0
jsr setapen(a6)
move timebox,d0
move #228,d1
move.l grabase,a6
move.l windowhd,a0
move.l 50(a0),a1
jsr writepixle(a6)
move #226,d1
move timebox,d0
jsr writepixle(a6)
move #227,d1
move timebox,d0
jsr writepixle(a6)
subq #1,timebox
cmp #6,levelcount
beq le6
cmp #59,timebox
beq dda
bra boret
le6:
cmp #59,timebox
beq von6
bra boret

dda:
 bsr da
 cmp #0,livescount
 beq gameover
jmp boret


livecont:
move ax1,d0
move ay1,d1
bsr livec
move ax2,d0
move ay2,d1
bsr livec
move ax3,d0
move ay3,d1
bsr livec
cmp #0,livescount
beq gameover
bra liret
lend:
rts

livec: ; d0 => ax / d1 => ay /d2 => Nr.
 cmp #5,levelcount
 beq level6
 cmp #6,levelcount
 beq liret
 subq #6,d0
 cmp gridx,d0
 bcc lend
 add #12,d0
 cmp gridx,d0
 bcs lend
 subq #6,d1
 cmp gridy,d1
 bcc lend
 add #12,d1
 cmp gridy,d1
 bcs lend
da:
 subq #1,livescount
 lea gridp,a1
 move #200,d0
 move #200,d1
 move #0,d2
 bsr print
 lea gridp,a0
 move livescount,d1
 move.b #$20,10(a0,d1)
 lea gridp,a1
 move #200,d0
 move #200,d1
 move #4,d2
 bsr print
 bsr chrash
 move #25,d7
 move #1,d6 
 move #12,d5
 move #7,d4
 move #23,d3
 move #26,d2
 bsr grid
 move #22,gridx
 move #26,gridy
 move #100,ax1
 move #101,ay1
 move #126,ay2
 move #151,ay3
 move #2,ar1 
 bsr painttime
 bsr colorreset
 bsr tick
 move #$8201,ctlw
nomi:
rts  
 
level6: 
 cmp #1,bum
 bne nomi
 move #0,bum
bra da

chrash:
 move.l #cl,cothi0
 move #8,cotl0
 move #400,coper0
 move #60,covol0
 move #$8201,ctlw
 move #10,d5
 lpcharsh:
  bsr stime
  subq #1,d5
 bne lpcharsh
 move #1,ctlw
rts

colorreset:
lea colorliste,a5
lpcolor:
 move.l grabase,a6
 move.l viewport,a0
 move.w (a5)+,d0
 move.w (a5)+,d1
 move.w (a5)+,d2
 move.w (a5)+,d3
 cmp #20,d3
 beq crende
 jsr setrgb4(a6)
jmp lpcolor
crende:
rts

alinencontroll:
 move #0,d0
 move ar1,d1
 move ax1,d2
 move ay1,d3
 bsr acontroll
 move d2,ax1
 move d3,ay1
 move d1,ar1
 ;
 move ar2,d1
 move ax2,d2
 move ay2,d3
 bsr acontroll
 move d2,ax2
 move d3,ay2
 move d1,ar2
 ;
 move ar3,d1
 move ax3,d2
 move ay3,d3
 bsr acontroll
 move d2,ax3
 move d3,ay3
 move d1,ar3
rts

; ------------------  Alien Controll ------------
;
; Richtung des Alines  => d1
;                1
;              4 * 2
;                3
; xpos.                => d2
; ypos.                => d3
; -----------------------------------------------
acontroll:
move d1,aricht
move aricht,aaricht
move d2,ax
move ax,aax
move d3,ay
move ay,aay
cmp #1,flag
beq plus
cmp #2,flag
beq minus
clr d6
move.b $bfe801,d7
and.b #1,d7
beq minus
plus:
move #1,flag
addq #1,aricht
cmp #5,aricht
bne checka
move #1,aricht
jmp checka
minus:
move #2,flag
subq #1,aricht
bne checka
move #4,aricht
bra checka

contchecka:
 cmp #1,aricht
 beq aup
 cmp #2,aricht
 beq are
 cmp #3,aricht
 beq ado
 subq #1,ax
 rts
 aup:
 subq #1,ay
 rts
 are:
 addq #1,ax
 rts
 ado:
 addq #1,ay
 rts

checka:
 bsr contchecka
 move ax,d0
 move ay,d1
 move.l grabase,a6
 move.l windowhd,a0
 move.l 50(a0),a1
 jsr readpixle(a6)
 bsr abfa
 cmp #1,d1
 beq seta
 cmp #0,flag
 beq aende
 addq #1,flagc
 cmp #20,flagc
 bne contch
 move #0,flagc
 move #0,flag
 bra aende
 contch:
 move aaricht,aricht
 move aax,ax
 move aay,ay
 jmp checka

abfa:
clr d1
cmp #3,levelcount
beq sonderfall
ret3:
cmp #2,levelcount
beq l2
cmp #3,levelcount
beq l3
cmp #4,levelcount
beq l2
cmp #5,levelcount
beq l5
cmp #6,levelcount
beq bonusle
rts
bonusle:
 cmp #11,d0
 beq fillre

 l2:
 cmp #1,d0
 beq setd1
 cmp #8,d0
 beq setd1
 cmp #11,d0
 beq setd1
 rts
 l3:
 cmp #1,d0
 beq setd1
 cmp #11,d0
 beq setd1
 rts
setd1: move #1,d1
rts
 l5:
 cmp #8,d0
 beq bum1
 bra l2
bum1: move #1,bum
  bra l2
sonderfall:
 cmp #8,d0
 beq richtunga
 bra ret3
richtunga:
 add #2,aricht
 cmp #6,aricht
 beq set2
 cmp #5,aricht
 beq set1
 bra ret33
 set1:
 move #1,aricht
 bra ret33
 set2:
 move #2,aricht
 ret33:
 move aricht,aaricht
 bra ret3

fillre:
  move d0,fim
  move ax,xm
  move ay,ym
  move #9,cofill
  move #11,eigenc
  bsr fill
  move fim,d0
  bra l2  
fim: dc.w 0

seta:
 move.l grabase,a6
 move.l windowhd,a0
 move.l 50(a0),a1
 move #11,d0
 jsr setapen(a6)
 move.l grabase,a6
 move.l windowhd,a0
 move.l 50(a0),a1
 move ax,d0
 move ay,d1
 jsr writepixle(a6)
 move ax,aax
 move ay,aay 
 move aricht,aaricht
 

aende:
 move aaricht,d1
 move aax,d2
 move aay,d3
rts


flagc: dc.w 0
aricht: dc.w 0
aaricht: dc.w 0
ax: dc.w 0
ay: dc.w 0
aax: dc.w 0
aay: dc.w 0
flag: dc.w 0

; -----------------------------------------------

stime:
move timebase,d0
 lp15:
   subq #1,d0
 bne lp15
rts

joystick:
 move gridx,d0
 move gridy,d1
 move joy,d6
 and #%0000001100000011,d6
 cmp #$0100,d6
 beq hoch
 cmp #$0001,d6
 beq runter
 cmp #$0300,d6
 beq links
 cmp #$0003,d6
 beq rechts
 cmp #$0103,d6
 beq or
 cmp #$0002,d6
 beq ur
 cmp #$0301,d6
 beq ul
 cmp #$0200,d6
 beq ol
rts
or:
 bsr hoch
 move gridy,d1
 bsr rechts
rts
ur:
 bsr rechts
 move gridx,d0
 bsr runter
rts
ul:
 bsr runter
 move gridy,d1
 bsr links
rts
ol:
 bsr hoch
 move gridy,d1
 bsr links
rts
hoch:
 move gridy,d1
 subq #1,d1
 bsr checkpoint
rts
runter:
 move gridy,d1
 addq #1,d1
 bsr checkpoint 
rts
links:
 move gridx,d0
 subq #1,d0
 bsr checkpoint
rts
rechts:
 move gridx,d0
 addq #1,d0
 bsr checkpoint
rts

checkpoint:
 move d0,mx
 move d1,my
 move.l grabase,a6
 move.l windowhd,a0
 move.l 50(a0),a1
 jsr readpixle(a6)
 bsr abfs
 cmp #8,d0
 beq fillr
 cmp #1,d1
 beq ok 
rts
ok:
 move mx,gridx
 move my,gridy
 bsr setgrid
rts
mx: dc.w 0
my: dc.w 0
ym: dc.w 0
xm: dc.w 0

abfs:
clr d1
cmp #2,levelcount
beq ls2
cmp #6,levelcount
beq ls2
bra ls3
rts
 ls2:
 cmp #1,d0
 beq sd1
 cmp #8,d0
 beq sd1
 cmp #11,d0
 beq sd1
 rts
 ls3:
 cmp #1,d0
 beq sd1
 cmp #8,d0
 beq sd1
 rts
 sd1:
 move #1,d1
 rts

fillr:
 move mx,xm
 move my,ym
 move #9,cofill
 move #8,eigenc
 bsr fill
jmp ok

; ----------------------------------------------
;            Fill
; xm => xpos
; ym => ypos
; cofill => Farbe
; eigenc => eigenfarbe
; ----------------------------------------------
fill:
move #2,d7
move ym,mmy
sub #25,mmy
lpy:
 move #2,d6
 move xm,mmx
 sub #25,mmx
 lpx: 
  bsr initread
  add #15,d0
  add #15,d1
  jsr readpixle(a6)
  cmp cofill,d0
  beq nextx
  move #25,d5
  lpx1:
    bsr initread
    add d5,d0
    jsr readpixle(a6)
    cmp eigenc,d0
    bne nextx
  subq #1,d5
  bne lpx1
  move #25,d5
  lpx2:
    bsr initread
    add #25,d0
    add d5,d1
    jsr readpixle(a6)
    cmp eigenc,d0
    bne nextx
    subq #1,d5
  bne lpx2
  move #25,d5
  lpx3:
    bsr initread
    add #25,d1
    add d5,d0
    jsr readpixle(a6) 
    cmp eigenc,d0
    bne nextx
    subq #1,d5
  bne lpx3
  move #25,d5
  lpx4:
    bsr initread
    add d5,d1
    jsr readpixle(a6)
    cmp eigenc,d0
    bne nextx
    subq #1,d5
  bne lpx4
  bsr initread
  move cofill,d0
  jsr setapen(a6)
  bsr initread
  addq #1,d0
  addq #1,d1
  move d0,d2
  move d1,d3
  add #23,d2
  add #23,d3
  jsr rectfill(a6)
  move #1,soundtrack
  lea scorep,a1
  move #3,d0
  move #200,d1
  move #0,d2
  bsr print
  move.b #10,d5
  move #4,d2
  move.l #stelle+1,a1
  jsr count
  add.l #10,scorez
  lea scorep,a1
  move #3,d0
  move #200,d1
  move #3,d2
  bsr print
  nextx:
  add #25,mmx
  subq #1,d6
 bne lpx
 add #25,mmy
 subq #1,d7
bne lpy
rts
cofill: dc.w 0
eigenc: dc.w 0
; -----------------------------------------------

nextlevel:
 cmp #6,levelcount
 beq keinnext
 cmp.l #140,scorez
 bne keinnext
 von6:
 bsr spritesaus
 move.l #0,scorez
 move #3,ctlw
 bsr digi
 addq #1,levelcount
 cmp #7,levelcount
 bne nee
 move #2,levelcount
 move.l #levelpa,namepa
 sub.w #1000,timebase
 nee:
 move #9,d0
 move #4,d1
 bsr ausblenden
 move #8,d0
 move #3,d1
 bsr ausblenden
 move #1,d0
 move #2,d1
 bsr ausblenden
 move #11,d0
 move #5,d1
 bsr ausblenden
 move #200,d1
 move #115,d0
 move #0,d2
 lea levelp,a1
 bsr print
 move #1,d5
 move #1,d2
 move.l #levelpo,a1
 jsr count
 move.l #levelp,a1
 move #200,d1
 move #115,d0
 move #2,d2
 bsr print
 lea congra1,a1
 move #90,d1
 move #60,d0
 move #7,d2
 bsr print
 lea congra2,a1
 move #100,d1
 move #60,d0
 move #7,d2
 bsr print
 lea levelpo,a1
 move #120,d1
 move #150,d0
 move #13,d2
 bsr print
 move #145,d0
 move #123,d1
 move #175,d2
 move #143,d3
 move #13,d4
 bsr rec
 lea parole,a1
 move #40,d0
 move #60,d1
 move #12,d2
 bsr print
 move.l namepa,a1
 add.l #22,namepa
 move #100,d0
 move #60,d1
 move #12,d2
 bsr print
 move #35,d0
 move #65,d1
 move #285,d2
 move #85,d3
 move #12,d4
 bsr rec
 lea fireb,a1
 move #20,d0
 move #160,d1
 move #13,d2
 bsr print
 move #7,d0
 move #2,d1
 bsr einblenden
 move #13,d0
 move #3,d1
 bsr einblenden
 move #12,d0
 move #1,d1
 bsr einblenden
 bsr fire
 bsr painttime
 move #7,d0
 move #2,d1
 bsr ausblenden
 move #13,d0
 move #3,d1
 bsr ausblenden
 move #12,d0
 move #1,d1
 bsr ausblenden
 bsr digisilent
 bsr cls
 bsr tick
 move #$8201,ctlw
 move #25,d7
 move #1,d6
 move #12,d5
 move #7,d4
 move #23,d3
 move #26,d2
 bsr grid
 move #1,d0
 move #2,d1
 bsr einblenden
 move #22,gridx
 move #26,gridy
 move #101,ay1
 move #126,ay2
 move #151,ay3
 move.l grabase,a6
 move.l viewport,a0
 bsr initsprites
 jsr colorreset
keinnext:
rts

painttime:
 move #240,timebox
 lea timep,a1
 move #10,d0
 move #215,d1
 move #14,d2
 bsr print
 move #60,d0
 move #226,d1
 move #240,d2
 move #226,d3
 move #15,d4
 bsr line
 move #60,d0
 move #227,d1
 move #240,d2
 move #227,d3
 move #15,d4
 bsr line
 move #60,d0
 move #228,d1
 move #240,d2
 move #228,d3
 move #15,d4
 bsr line
 rts

cls:
 move.l grabase,a6
 move.l windowhd,a0
 move.l 50(a0),a1
 move #0,d0
 jsr setapen(a6)
 move.l grabase,a6
 move.l windowhd,a0
 move.l 50(a0),a1
 move #20,d0
 move #20,d1
 move #300,d2
 move #180,d3
 jsr rectfill(a6)
rts
; ------------------------------------------------------------
;                       Rec
; x1,y1,x2,y2,color => d0,d1,d2,d3,d4
; ------------------------------------------------------------
rec:
move d0,recx1
move d1,recy1
move d0,recx2
move d3,recy2
move d2,recx3
move d3,recy3
move d2,recx4
move d1,recy4
move d0,recx5
move d1,recy5
move.l grabase,a6
move.l windowhd,a0
move.l 50(a0),a1
move recx1,d0
move recy1,d1
jsr move(a6)
move.l grabase,a6
move.l windowhd,a0
move.l 50(a0),a1
move d4,d0
jsr setapen(a6)
move.l grabase,a6
move.l windowhd,a0
move.l 50(a0),a1
lea recx1,a0
move #5,d0
jsr polydraw(a6)
rts
recx1: dc.w 0
recy1: dc.w 0
recx2: dc.w 0
recy2: dc.w 0
recx3: dc.w 0
recy3: dc.w 0
recx4: dc.w 0
recy4: dc.w 0
recx5: dc.w 0
recy5: dc.w 0
; ------------------------------------------------------------
;                      Count
;   d5 = + was
;   a1 = höchste Stelle
;   d2 = anzahl der stellen
; ------------------------------------------------------------ 

count:
move.l d2,d1
lpcount:
 clr.l d4
 add.b #1,(a1,d1)
 subq #1,d5
 beq endecount
 move.b (a1,d1),d3
 cmp.b #57,d3
bne lpcount
nextstelle:
addq #1,d4
sub.b #1,d1
add.b #1,(a1,d1)
move.b (a1,d1),d3
cmp.b #57,d3
beq nextstelle
lp2count:
 add.b #1,d1
 move.b #$30,(a1,d1)
 subq #1,d4
bne lp2count
move.b #$30,(a1,d1)
subq #1,d5
beq endecount
jmp lpcount
endecount:
rts
 
initread:
 move.l windowhd,a0
 move.l 50(a0),a1
 move mmx,d0
 move mmy,d1
rts
mmx: dc.w 0
mmy: dc.w 0
 

setgrid:
 move.l grabase,a6
 move.l windowhd,a0
 move.l 50(a0),a1
 move #8,d0
 jsr setapen(a6)
 move.l grabase,a6
 move.l windowhd,a0
 move.l 50(a0),a1
 move gridx,d0
 move gridy,d1
 jsr writepixle(a6)
rts

gameover:
 bsr spritesaus
 move #3,ctlw
 bsr digi
 move #9,d0
 move #4,d1
 bsr ausblenden
 move #8,d0
 move #3,d1
 bsr ausblenden
 move #1,d0
 move #2,d1
 bsr ausblenden
 move #11,d0
 move #5,d1
 bsr ausblenden
 bsr cls
 lea gameop,a1
 move #80,d1
 move #120,d0
 move #6,d2
 bsr print
 lea fireb,a1
 move #20,d0
 move #140,d1
 move #8,d2
 bsr print
 move #110,d0
 move #85,d1
 move #205,d2 
 move #105,d3
 move #2,d4
 bsr rec 
 move #6,d0
 move #1,d1
 bsr einblenden
 move #8,d0
 move #3,d1
 bsr einblenden
 bsr fire
 move #8,d0
 move #3,d1
 bsr ausblenden
 move #6,d0
 move #1,d1
 bsr ausblenden
 bsr cls
 bsr digisilent
 move #3,d0
 move #2,d1
 bsr ausblenden
 move #2,d0
 move #4,d1
 bsr ausblenden 
 move #4,d0
 move #3,d1
 bsr ausblenden
 bsr cls2
rts

cls2:
 move.l grabase,a6
 move.l windowhd,a0
 move.l 50(a0),a1
 move #0,d0
 jsr setapen(a6)
 move #5,d0
 move #203,d1
 move #315,d2
 move #236,d3
 jsr rectfill(a6)
rts

intcolors:
 clr d6
 lp0:
  move.l grabase,a6
  move.l viewport,a0
  move d6,d0
  clr d1
  clr d2
  clr d3
  jsr setrgb4(a6)
  addq #1,d6
  cmp #8,d6
 bne lp0
 bsr colorreset
 
 
rts

titel:
 move #15,d7
 move #1,d6
 move #19,d5
 move #11,d4
 move #26,d3
 move #26,d2
 bsr grid
 move #1,d0
 move #200,d1
 move #319,d2
 move #240,d3
 move #10,d4
 bsr rec
 move #4,d0
 move #202,d1
 move #316,d2
 move #238,d3
 move #10,d4
 bsr rec
 move #4,d5
 move #5,d6
 bsr gridit
 bsr digi
 bsr copy
 bsr firep
 clr d6
 clr d7
 bsr lauf
 bsr gridita
 move #2,d0
 move #1,d1
 bsr ausblenden
 move #1,d1
 move #3,d0
 bsr ausblenden  
 move #1,d0
 move #2,d1
 bsr ausblenden
 bsr loesch
 bsr digisilent
 bsr score
 move #3,d0
 move #2,d1
 bsr einblenden
 bsr level
 move #2,d0
 move #4,d1
 bsr einblenden
 bsr lives
 move #25,d7
 move #1,d6
 move #12,d5
 move #7,d4
 move #23,d3
 move #26,d2
 bsr grid
 move #1,d0
 move #2,d1
 bsr einblenden
rts

lives:
 move #200,d0
 move #200,d1
 move #4,d2
 lea gridp,a1
 bsr print
 move #4,d0
 move #3,d1
 bsr einblenden
rts

level:
 move #115,d0
 move #200,d1
 move #2,d2
 lea levelp,a1
 bsr print
rts 

loesch:
 move #10,d0
 move #208,d1
 move #0,d2
 lea fireb,a1
 bsr print
 move #15,d0
 move #196,d1
 move #0,d2
 lea copr,a1
 bsr print
 move #15,d7
 move #0,d6
 move #19,d5
 move #10,d4
 move #26,d3
 move #26,d2
 bsr grid
rts

score:
 lea scorep,a1
 move #3,d0
 move #200,d1
 move #3,d2
 bsr print
rts
 
lauf:
eor #1,d6

lp9:
 move d7,r1
 move.l grabase,a6
 move.l viewport,a0
 move #4,d0
 clr d1
 clr d2
 move d7,d3
 jsr setrgb4(a6)
 move.l grabase,a6
 move.l viewport,a0
 move #5,d0
 move d7,d1
 clr d3
 clr d2
 jsr setrgb4(a6)
 bsr time
 andi.b #128,$bfe001
 beq raus
 cmp #1,d6
 beq pluss
 subq #1,d7
 beq lauf
 jmp lp9
 pluss:
 addq #1,d7
 cmp #15,d7
 beq lauf
 jmp lp9

raus:
rts

gridita:
 move #4,d4
 move r1,d7
 bsr ausblendenb
 move #5,d4
 move r1,d7
 bsr ausblendenr
 move #0,d5
 move #0,d6
 bsr gridit
bend:
rts

ausblendenb:
 cmp #0,d7
 beq bend
 move.l grabase,a6
 move.l viewport,a0
 move d4,d0
 clr d2
 clr d1
 move d7,d3
 jsr setrgb4(a6)
 bsr time
 subq #1,d7
bne ausblendenb
rts

ausblendenr:
 cmp #0,d7
 beq bend
 move.l grabase,a6
 move.l viewport,a0
 move d4,d0
 clr d2
 clr d3
 move d7,d1
 jsr setrgb4(a6)
 bsr time
 subq #1,d7
 bne ausblendenr
rts

gridit:
move.l grabase,a6
move.l windowhd,a0
move.l 50(a0),rastport
move.l 50(a0),a1
move d5,d0
jsr setapen(a6)
move.l #liste,a5
lp8:
  move.l grabase,a6
  move.l rastport,a1
  move.w (a5)+,d0
  move.w (a5)+,d1
  move.w (a5)+,d2
  move.w (a5)+,d3
  cmp #0,d3
  beq endliste
  cmp #1,d3
  beq nc
  jsr rectfill(a6)
jmp lp8
endliste:
rts

nc:
 move d6,d0
 move.l grabase,a6
 move.l windowhd,a0
 move.l 50(a0),a1
 jsr setapen(a6)
jmp lp8

liste:
dc.w 87,27,100,40  ; G
dc.w 72,27,85,40
dc.w 57,27,70,40
dc.w 57,42,70,55
dc.w 57,57,70,70
dc.w 57,72,70,85
dc.w 72,72,85,85
dc.w 87,72,100,85
dc.w 87,57,100,70
dc.w 117,72,130,85; R
dc.w 117,57,130,70
dc.w 117,42,130,55
dc.w 132,42,145,55
dc.w 147,57,160,70
dc.w 177,42,190,55; I
dc.w 177,57,190,70
dc.w 177,72,190,85
dc.w 237,27,250,40; D
dc.w 237,42,250,55
dc.w 237,57,250,70
dc.w 237,72,250,85
dc.w 222,72,235,85
dc.w 207,72,220,85
dc.w 207,57,220,70
dc.w 222,57,235,70
dc.w 1,1,1,1
dc.w 132,102,145,115; I
dc.w 132,132,145,145
dc.w 132,147,145,160
dc.w 132,162,145,175
dc.w 162,102,175,115; T
dc.w 162,117,175,130
dc.w 162,132,175,145
dc.w 162,147,175,160
dc.w 162,162,175,175
dc.w 177,162,190,175
dc.w 177,117,190,130
dc.w 0,0,0,0


firep:
 move.l #fireb,a1
 move #10,d0
 move #208,d1
 move #3,d2
 bsr print
 move #3,d0
 move #1,d1 
 bsr einblenden
rts

copy:
 move.l #copr,a1
 move #15,d0
 move #196,d1
 move #2,d2
 bsr print
 move #2,d0
 move #1,d1
 bsr einblenden
rts
; ----------------------------------------------------
;             einblenden
; d0 = Farbennummer
; d1 = 1 = R / 2= G / 4=B
; ----------------------------------------------------

einblenden:
move d0,colorbl
move d1,maske
clr d7
lp11:
 clr d1
 clr d2
 clr d3
 move.l grabase,a6
 move.l viewport,a0
 move colorbl,d0
 move maske,d6
 and #1,d6
 bne rotein
 rret:
 move maske,d6
 and #2,d6
 bne gruenein
 gret:
 move maske,d6
 and #4,d6
 bne blauein
 bret:
 jsr setrgb4(a6)
 bsr time
 addq #1,d7
 cmp #16,d7
bne lp11
rts
rotein:
 move d7,d1
jmp rret
gruenein:
 move d7,d2
jmp gret
blauein:
 move d7,d3
jmp bret

colorbl: dc.w 0
maske: dc.w 0

; -----------------------------------------
;             Ausblenden
;  d0 => Farbe
;  d1 => 1=R/2=G/4=B
; -----------------------------------------
ausblenden:
move d0,colorbl
move d1,maske
move #15,d7
lp12:
 clr d1
 clr d2
 clr d3
 move.l grabase,a6
 move.l viewport,a0
 move colorbl,d0
 subq #1,d7
 move maske,d6
 and #1,d6
 bne rauss
 rrret:
 move maske,d6
 and #2,d6
 bne gaus
 ggret:
 move maske,d6
 and #4,d6
 bne baus
 bbret:
 addq #1,d7
 jsr setrgb4(a6)
 bsr time
 subq #1,d7
bne lp12
rts

rauss:
 move d7,d1
jmp rrret
gaus:
 move d7,d2
jmp ggret
baus:
 move d7,d3
jmp bbret
 

time:
move.l d0,buffer
move #20000,d0
lp4:
  sub #1,d0
bne lp4
move.l buffer,d0
rts
buffer: dc.l 0

; -------------------------------------------------------------
;                             Print
; - Intuition Library
; - windowhd / text
; - x                = d0
;   y                = d1
;   Farbe            = d2
;   pointer auf Text = a1
; -------------------------------------------------------------
 
print:
 move.b d2,btext
 move.l intbase,a6
 move.l windowhd,a0
 move.l 50(a0),a0
 move.l a1,textprint
 lea btext,a1 
 jsr printitext(a6)
rts

btext:
 dc.b 0,0,0 ; Farben
even
dc.w 3,10   ; Position
dc.l 0
textprint: dc.l 0
dc.l 0
even

;------------------------------------------------------

 
grid:
 move d3,mmx 
 move d2,mmy
 move d7,my
 move d4,mx
 move d3,gx1
 move d2,gy1
 move d3,gx2
 move #175,gy2
 lp2:
    move gx1,d0
    move gy1,d1
    move gx2,d2
    move gy2,d3
    move d6,d4
    bsr line
    move my,d7
    add d7,gx1
    add d7,gx2
    subq #1,d5
 bne lp2
 sub  d7,gx2
 move mmx,gx1
 move mmy,gy1
 move mmy,gy2
 move mx,d5
 lp3:
    move gx1,d0
    move gy1,d1
    move gx2,d2
    move gy2,d3
    move d6,d4
    bsr line
    move my,d7
    add d7,gy1
    add d7,gy2
    subq #1,d5
 bne lp3
rts

gx1: dc.w 0
gx2: dc.w 0
gy1: dc.w 0
gy2: dc.w 0

; -------------------------------------------------
;                              line
; - Zeichnet eine Line x1,y2,x2,y2 in der farbe f
; - graphiks
; - windowhd
; -  x1 => d0
;    y1 => d1
;    x2 => d2
;    y2 => d3
;     f => d4
; -------------------------------------------------
line:
 move d0,lx1
 move d1,ly1
 move d2,lx2
 move d3,ly2
 move.l grabase,a6
 move.l windowhd,a1
 move.l 50(a1),a1
 move d4,d0
 jsr setapen(a6)
 move.l grabase,a6
 move.l windowhd,a1
 move.l 50(a1),a1
 move lx1,d0
 move ly1,d1
 jsr move(a6)
 move.l grabase,a6
 move.l windowhd,a1
 move.l 50(a1),a1
 move lx2,d0
 move ly2,d1
 jsr draw(a6)
rts

lx1: dc.w 0
ly1: dc.w 0
lx2: dc.w 0
ly2: dc.w 0
; ------------------------------------------------------
 
windowopen:
 move.l intbase,a6
 lea windowdef,a0
 jsr openwindow(a6)
 move.l d0,windowhd
 add.l 50,d0
 move.l d0,rastport
rts

windowclose:
 move.l intbase,a6
 move.l windowhd,a0
 jsr closewindow(a6)
rts
 
; ---------------------------------------------------------------
;                  Open Initution/Graphiks
;                  Close Intuition/Graphiks
; - Exec
; - ...
; ---------------------------------------------------------------
openint:
 move.l execbase,a6
 move.l #intname,a1
 moveq #0,d0
 jsr openlib(a6)
 move.l d0,intbase
rts

opengra:
 move.l execbase,a6
 move.l #graname,a1
 jsr openlib(a6)
 move.l d0,grabase
rts

closeint:
 move.l execbase,a6
 move.l intbase,a1
 jsr closelib(a6)
rts

closegra:
 move.l execbase,a6
 move.l grabase,a1
 jsr closelib(a6)
rts

intbase:
 dc.l 1
even
intname:
  dc.b "intuition.library",0
even
grabase: dc.l 0
graname:
 dc.b "graphics.library",0
even
;-----------------------------------------------------------------

fire:
 andi.b #128,$bfe001
bne fire
rts

screenopen:
 move.l intbase,a6
 lea screendef,a0
 jsr openscreen(a6)
 move.l d0,screenhd
 add #44,d0
 move.l d0,viewport
rts

screenclose:
 move.l intbase,a6
 move.l screenhd,a0
 jsr closescreen(a6)
rts

; ------------------------------------------------
;                  Strukturen
; ------------------------------------------------

screendef:
 dc.w 0,0,320,250,5
 dc.b 0,0
 dc.w 2,15
 dc.l 0,0,0,0

windowdef:
 dc.w 0,0,320,250
 dc.b 0,0
 dc.l $2108,$1200,0,0,0
screenhd: dc.l 0
 dc.l 0
 dc.w 0,0,0,0,15


viewport: dc.l 0
windowhd: dc.l 0
rastport: dc.l 0
copr: dc.b "      © 1987 by J.T. Soft ART",0
even
fireb: dc.b "      << Press  Fire-button >>",0
even            
r1: dc.w 0
scorep: dc.b "Score:"
stelle: dc.b "000000",0
levelp: dc.b "Level: " 
levelpo: dc.b "01",0
gridp:  dc.b "Gridders: ¤¤¤",0
gameop:  dc.b "Game Over ",0
even
gridx: dc.w 0
gridy: dc.w 0
livescount: dc.w 0
scorez: dc.l 0
even
congra1:
  dc.b "    Congratulations",0
even
congra2:
  dc.b " You reached next LEVEL",0
even
ax1: dc.w 0
ay1: dc.w 0
ar1: dc.w 0
colorliste: 
dc.w 8,15,15,0
dc.w 10,15,0,15
dc.w 9,0,0,15
dc.w 11,15,0,15
dc.w 1,0,15,0
dc.w 12,0,0,0
dc.w 13,0,0,0
dc.w 14,15,15,15
dc.w 15,5,6,10
dc.w 17,0,15,15
dc.w 18,15,0,0
dc.w 31,15,15,0
dc.w 19,15,9,0
dc.w 21,9,9,9
dc.w 22,15,5,0
dc.w 23,4,15,6
dc.w 25,9,9,9
dc.w 26,15,5,0
dc.w 27,4,15,6
dc.w 28,10,10,10
dc.w 29,7,7,7
dc.w 30,4,4,4
dc.w 20,20,20,20
levelcount: dc.w 0
parole: dc.b "Name :",0
even
timep: dc.b "Time:",0
even
levelpa:
dc.b "He would catch You   ",0
dc.b "You can block him    ",0
dc.b "He blocked You       ",0
dc.b "He hit Your penline  ",0
dc.b "   BONUS-LEVEL       ",0        
even
namepa: dc.l 0
bum: dc.w 0
timebase: dc.w 8000
timebox: dc.w 240
tib: dc.w 0
sinus:
 dc.b -40,-70,-90,-100,-90,-70,-40,0
dc.b 40,70,90,100,90,70,40,0
even
soundtrack: dc.w 0
sotime: dc.w 0
tickl:
dc.b 0,90,100,90,0,0,0,0,0,0,0,0
even
cl:
dc.b 0,20,50,100,100,90,100,80,70,60,55,40,30,20,15,10,5,0
even
mousep:
 dc.w 0
 dc.w 0
 dc.w 0
spieler:
dc.w 0,0
dc.w 0,0
dc.w 0,0
dc.w $01c0,$0140
dc.w $07f0,$0770
dc.w $07f0,$0f78
dc.w $03e0,$0f78
dc.w $01c0,$1f7c
dc.w $1ffc,0
dc.w $01c0,$1f7c
dc.w $03e0,$0f78
dc.w $07f0,$0f78
dc.w $07f0,$0770
dc.w $01c0,$0140
dc.w 0,0

alien:
dc.w 0,0
dc.w 0,0
dc.w 0,0
dc.w $0080,0
dc.w $01c0,0
dc.w $03e0,$0080
dc.w $07e0,$0090
dc.w $0fc0,$00b8
dc.w $1ff0,$07fc
dc.w $0f80,$00f8
dc.w $0680,$01f0
dc.w $0080,$03e0
dc.w $0,$01c0
dc.w 0,$0080
dc.w 0,0

simpelsprs:
 dc.l spieler
 dc.w 13
sprx: dc.w 25
spry: dc.w 25
dc.w 1
simpelspra1:
 dc.l alien
 dc.w 13,25,25,2
simpelspra2:
 dc.l alien2
 dc.w 13,25,25,3
simpelspra3:
 dc.l alien3
 dc.w 13,25,25,4

ax2: dc.w 0
ay2: dc.w 0
ar2: dc.w 0
ar3: dc.w 0
ax3: dc.w 0
ay3: dc.w 0

alien2:
dc.w 0,0
dc.w 0,0
dc.w 0,0
dc.w $0080,0
dc.w $01c0,0
dc.w $03e0,$0080
dc.w $07e0,$0090
dc.w $0fc0,$00b8
dc.w $1ff0,$07fc
dc.w $0f80,$00f8
dc.w $0680,$01f0
dc.w $0080,$03e0
dc.w $0,$01c0
dc.w $0,$0080
dc.w $0,0

alien3:
dc.w 0,0
dc.w 0,0
dc.w 0,0
dc.w $0080,0
dc.w $01c0,0
dc.w $03e0,$0080
dc.w $07e0,$0090
dc.w $0fc0,$00b8
dc.w $1ff0,$07fc
dc.w $0f80,$00f8
dc.w $0680,$01f0
dc.w $0080,$03e0
dc.w 0,$01c0
dc.w 0,$0080
dc.w 0,0

daten:
 blk.b 122000
ende:
dc.w 0
