
 ILABEL ':Includes/Amiga.L'                 
_LVOOpenLibrary   EQU -$0228
_LVOCloseLibrary  EQU -$019e
_LVOOpenScreen    EQU -$00c6
_LVOCloseScreen   EQU -$0042
_LVOOpenWindow    EQU -$00cc
_LVOCloseWindow   EQU -$0048
_LVOAllocMem      EQU -$00c6
_LVOFreeMem       EQU -210
_LVOTurnOff       EQU -132
_LVOTurnOn        EQU -138
_LVORead          EQU -42
_LVOOpen          EQU -30
_LVOClose         EQU -36
;----- Amiga function ------
_LVOOpenResource        EQU        -498
_LVOAddICRVector        EQU        -6
_LVORemICRVector        EQU        -12
;------- ExecBase ----
SysBase                 EQU     4
PAL                     EQU     50
eb_PowerSupplyFreq      EQU     531
;------- CIAA --------
CIAAPRA         EQU     $bfe001
CIABTALO        EQU     $bfd400
CIABTAHI        EQU     $bfd500
CIABICR         EQU     $bfdd00
CIABCRA         EQU     $bfde00
CIABTBLO        EQU     $bfd600
CIABTBHI        EQU     $bfd700
CIABCRB         EQU     $bfdf00
;------ Song ----------
sng_Tempo       EQU     8
sng_Instr0      EQU     10
sng_Len         EQU     1436
sng_Seq         EQU     1438
sng_Data        EQU     1566
;------ InstrData -----
MAXINSTR        EQU     30
SIZEOF_insdt    EQU     46
instr_Name      EQU     0
instr_Start     EQU     30
instr_Len       EQU     34
instr_RStart    EQU     36
instr_RLen      EQU     40
instr_Vol       EQU     42
instr_Freq      EQU     44
;------- AudioData -
SIZEOF_ad       EQU     24
ad_SampPer      EQU     0
ad_Effet        EQU     2
ad_Info         EQU     3
ad_Volume       EQU     4
ad_SmpAdr       EQU     6
ad_SmpLen       EQU     10
ad_RepAdr       EQU     12
ad_RepLen       EQU     16
ad_ArpPer       EQU     18
ad_DMABit       EQU     20
ad_PitchPer     EQU     22
;------- AudioChips -------
DMACON          EQU     $dff096
DMASET          EQU     $8000
AUD0LCH         EQU     $dff0a0
AUD1LCH         EQU     $dff0b0
AUD2LCH         EQU     $dff0c0
AUD3LCH         EQU     $dff0d0
AUDxLEN         EQU     $4
AUDxPER         EQU     $6
AUDxVOL         EQU     $8
AUDxDAT         EQU     $a
SIZEOF_AUD      EQU     $10
;------ Block ---------
NEXTTRACK       EQU     4
NEXTLINE        EQU     16
BLOCKSIZE       EQU     1024
MAXTRACK        EQU     4
;------- Notes -------
DO2             EQU     1712
SI5             EQU     113
HSTOP            EQU     $7ff
;------- Effects -----
MASK_EFF        EQU     7
MASK_VAL        EQU     $f
ARPEGGIO        EQU     0
PITCHUP         EQU     1
PITCHDOWN       EQU     2
VOLUME          EQU     3
MASTERVOL       EQU     4
TEMPO           EQU     5
JUMP            EQU     6
FILTER          EQU     7
MAX_VOL         EQU     64
BREAK           EQU     $ff
;************************************************
 INIT_AMIGA
; Open Libraries:
 LEA     GfxName,A1
 MOVEQ   #0,D0
 CALLSYS OpenLibrary
 MOVE.L  D0,GfxBase
 BEQ     EXIT

 LEA     DosName,A1
 MOVEQ   #0,D0
 CALLSYS OpenLibrary
 MOVE.L  D0,DosBase
 BEQ     EXIT

;*---ALLOCATE MEMORY FOR THE TITLE SCREEN---*
 MOVE.L  #16000,d0
 MOVE.L  #2,D1
 CALLSYS AllocMem
 MOVE.L  D0,PLANE0
 ADDI.L  #8000,D0
 MOVE.L  D0,PLANE1

;*---ALLOCATE MEMORY FOR THE WELLDONE MESSAGE ---*
 MOVE.L  #8000,D0
 MOVE.L  #2,D1
 CALLSYS AllocMem
 MOVE.L  D0,WELLDONE

;*---ALLOCATE MEMORY FOR THE PLAY SCREEN---*
 MOVE.L  #40000,d0
 MOVE.L  #2,D1
 CALLSYS AllocMem
 MOVE.L  D0,PLANE2
 ADDI.L  #8000,D0
 MOVE.L  D0,PLANE3
 ADDI.L  #8000,D0
 MOVE.L  D0,PLANE4
 ADDI.L  #8000,D0
 MOVE.L  D0,PLANE5
 ADDI.L  #8000,D0
 MOVE.L  D0,PLANE6

;*---ALLOCATE MEMORY FOR THE CHOICE SCREEN---*
 MOVE.L  #8000,d0
 MOVE.L  #2,D1
 CALLSYS AllocMem
 MOVE.L  D0,PLANE7

;*---ALLOCATE MEMORY FOR THE LOADING SCREEN---*
 MOVE.L  #8000,d0
 MOVE.L  #2,D1
 CALLSYS AllocMem
 MOVE.L  D0,PLANE8

;*---ALLOCATE MEMORY FOR THE PUZZLE---*
 MOVE.L  #12064,D0
 MOVE.L  #2,D1
 CALLSYS AllocMem
 MOVE.L  D0,PUZZLE

;*---ALLOCATE MEMORY FOR THE SONGS---*
 MOVE.L  #93660,d0
 MOVE.L  #2,D1
 CALLSYS AllocMem
 MOVE.L  D0,CHOICE_SONG

 MOVE.L  #14612,d0
 MOVE.L  #2,D1
 CALLSYS AllocMem
 MOVE.L  D0,LOADING_SONG

 MOVE.L  #48856,d0
 MOVE.L  #2,D1
 CALLSYS AllocMem
 MOVE.L  D0,TITLE_SONG

 MOVE.L  #5296,D0
 MOVE.L  #2,D1
 CALLSYS AllocMem
 MOVE.L  D0,HIT_SONG

 MOVE.L  #56576,d0
 MOVE.L  #2,D1
 CALLSYS AllocMem
 MOVE.L  D0,WINNER_SONG

 MOVE.L  #40966,d0
 MOVE.L  #2,D1
 CALLSYS AllocMem
 MOVE.L  D0,PLAY_SONG

 MOVE.L  #6388,D0
 MOVE.L  #2,D1
 CALLSYS AllocMem
 MOVE.L  D0,MOVE_SONG
;*---READ IN THE GRAPHIC FOR THE TITLE SCREEN---*
 MOVE.L  #Filename0,D1
 MOVE.L  #1005,D2
 LINKSYS Open,DosBase
 MOVE.L  D0,FileHd

 MOVE.L  FileHd,D1
 MOVE.L  PLANE0,D2
 MOVE.L  #16000,D3        ; 2 bitplanes = 16000 bytes
 LINKSYS Read,DosBase

 MOVE.L  FileHd,D1
 LINKSYS Close,DosBase

;*---READ IN THE GRAPHIC FOR THE PLAY SCREEN---*
 MOVE.L  #Filename8,D1
 MOVE.L  #1005,D2
 LINKSYS Open,DosBase
 MOVE.L  D0,FileHd

 MOVE.L  FileHd,D1
 MOVE.L  PLANE2,D2
 MOVE.L  #40000,D3        ; 5 bplns = 40000 bytes
 LINKSYS Read,DosBase

 MOVE.L  FileHd,D1
 LINKSYS Close,DosBase

;*---READ IN THE GRAPHIC FOR THE WELLDONE MESSAGE---*
 MOVE.L  #Filename9,D1
 MOVE.L  #1005,D2
 LINKSYS Open,DosBase
 MOVE.L  D0,FileHd

 MOVE.L  FileHd,D1
 MOVE.L  WELLDONE,D2
 MOVE.L  #8000,D3        ; 1 bpln = 8000 bytes
 LINKSYS Read,DosBase

 MOVE.L  FileHd,D1
 LINKSYS Close,DosBase


;*---READ IN THE GRAPHIC FOR THE CHOICE SCREEN---*
 MOVE.L  #Filename1,D1
 MOVE.L  #1005,D2
 LINKSYS Open,DosBase
 MOVE.L  D0,FileHd

 MOVE.L  FileHd,D1
 MOVE.L  PLANE7,D2
 MOVE.L  #8000,D3        ; 1 bpln = 8000 bytes
 LINKSYS Read,DosBase

 MOVE.L  FileHd,D1
 LINKSYS Close,DosBase

;*---READ IN THE GRAPHIC FOR THE LOADING SCREEN---*
 MOVE.L  #Filename2,D1
 MOVE.L  #1005,D2
 LINKSYS Open,DosBase
 MOVE.L  D0,FileHd

 MOVE.L  FileHd,D1
 MOVE.L  PLANE8,D2
 MOVE.L  #8000,D3        ; 1 bpln = 8000 bytes
 LINKSYS Read,DosBase

 MOVE.L  FileHd,D1
 LINKSYS Close,DosBase

;*---READ IN THE DATA FOR THE TITLE SONG---*
 MOVE.L  #Filename3,D1
 MOVE.L  #1005,D2
 LINKSYS Open,DosBase
 MOVE.L  D0,FileHd

 MOVE.L  FileHd,D1
 MOVE.L  TITLE_SONG,D2
 MOVE.L  #48856,D3
 LINKSYS Read,DosBase

 MOVE.L  FileHd,D1
 LINKSYS Close,DosBase

;*---READ IN THE DATA FOR THE LOADING SONG---*
 MOVE.L  #Filename4,D1
 MOVE.L  #1005,D2
 LINKSYS Open,DosBase
 MOVE.L  D0,FileHd

 MOVE.L  FileHd,D1
 MOVE.L  LOADING_SONG,D2
 MOVE.L  #14612,D3
 LINKSYS Read,DosBase

 MOVE.L  FileHd,D1
 LINKSYS Close,DosBase

;*---READ IN THE DATA FOR THE CHOICE SONG---*
 MOVE.L  #Filename5,D1
 MOVE.L  #1005,D2
 LINKSYS Open,DosBase
 MOVE.L  D0,FileHd

 MOVE.L  FileHd,D1
 MOVE.L  CHOICE_SONG,D2
 MOVE.L  #93660,D3
 LINKSYS Read,DosBase

 MOVE.L  FileHd,D1
 LINKSYS Close,DosBase

;*---READ IN THE DATA FOR THE PLAY SONG---*
 MOVE.L  #Filename6,D1
 MOVE.L  #1005,D2
 LINKSYS Open,DosBase
 MOVE.L  D0,FileHd

 MOVE.L  FileHd,D1
 MOVE.L  PLAY_SONG,D2
 MOVE.L  #40966,D3
 LINKSYS Read,DosBase

 MOVE.L  FileHd,D1
 LINKSYS Close,DosBase

;*---READ IN THE DATA FOR THE WINNER SONG---*
 MOVE.L  #Filename7,D1
 MOVE.L  #1005,D2
 LINKSYS Open,DosBase
 MOVE.L  D0,FileHd

 MOVE.L  FileHd,D1
 MOVE.L  WINNER_SONG,D2
 MOVE.L  #56576,D3
 LINKSYS Read,DosBase

 MOVE.L  FileHd,D1
 LINKSYS Close,DosBase

;*---READ IN THE DATA FOR THE HIT SONG---*
 MOVE.L  #FilenameA,D1
 MOVE.L  #1005,D2
 LINKSYS Open,DosBase
 MOVE.L  D0,FileHd

 MOVE.L  FileHd,D1
 MOVE.L  HIT_SONG,D2
 MOVE.L  #5296,D3
 LINKSYS Read,DosBase

 MOVE.L  FileHd,D1
 LINKSYS Close,DosBase

;*---READ IN THE DATA FOR THE MOVE SONG---*
 MOVE.L  #FilenameB,D1
 MOVE.L  #1005,D2
 LINKSYS Open,DosBase
 MOVE.L  D0,FileHd

 MOVE.L  FileHd,D1
 MOVE.L  MOVE_SONG,D2
 MOVE.L  #6388,D3
 LINKSYS Read,DosBase

 MOVE.L  FileHd,D1
 LINKSYS Close,DosBase

;*--- NOW, TAKE CARE OF THE COPPER LISTS ---*
 MOVE.L #816,D0
 MOVE.L #2,D1
 CALLSYS AllocMem
 MOVE.L D0,COPPER1

 MOVE.L D0,A1
 MOVE.L #COP1,A0
 MOVE.W #0,D0
CCOP1:
 MOVE.L (A0)+,(A1)+
 ADDI.W #1,D0
 CMPI.W #204,D0
 BNE    CCOP1

 MOVE.L #580,D0
 MOVE.L #2,D1
 CALLSYS AllocMem
 MOVE.L D0,COPPER2

 MOVE.L D0,A1
 MOVE.L #COP2,A0
 MOVE.W #0,D0
CCOP2:
 MOVE.L (A0)+,(A1)+
 ADDI.W #1,D0
 CMPI.W #145,D0
 BNE    CCOP2

 MOVE.L #424,D0
 MOVE.L #2,D1
 CALLSYS AllocMem
 MOVE.L D0,COPPER3

 MOVE.L D0,A1
 MOVE.L #COP3,A0
 MOVE.W #0,D0
CCOP3:
 MOVE.L (A0)+,(A1)+
 ADDI.W #1,D0
 CMPI.W #106,D0
 BNE    CCOP3

 MOVE.L #468,D0
 MOVE.L #2,D1
 CALLSYS AllocMem
 MOVE.L D0,COPPER4

 MOVE.L D0,A1
 MOVE.L #COP4,A0
 MOVE.W #0,D0
CCOP4:
 MOVE.L (A0)+,(A1)+
 ADDI.W #1,D0
 CMPI.W #117,D0
 BNE    CCOP4

 MOVE.L COPPER1,A0
 MOVE.W PLANE0,42(A0)
 MOVE.W PLANE0+2,46(A0)
 MOVE.W PLANE1,50(A0)
 MOVE.W PLANE1+2,54(A0)

 MOVE.L COPPER2,A0
 MOVE.W PLANE7,42(A0)
 MOVE.W PLANE7+2,46(A0)

 MOVE.L COPPER3,A0
 MOVE.W PLANE8,42(A0)
 MOVE.W PLANE8+2,46(A0)

 MOVE.L COPPER4,A0
 MOVE.W PLANE2,42(A0)
 MOVE.W PLANE2+2,46(A0)
 MOVE.W PLANE3,50(A0)
 MOVE.W PLANE3+2,54(A0)
 MOVE.W PLANE4,58(A0)
 MOVE.W PLANE4+2,62(A0)
 MOVE.W PLANE5,66(A0)
 MOVE.W PLANE5+2,70(A0)
 MOVE.W PLANE6,74(A0)
 MOVE.W PLANE6+2,78(A0)

;*--- START THE WHOLE DAMN THING DAMMIT! ---*
 JSR    DELAY

 CALLSYS TurnOff

 MOVE.W #$0020,$DFF096
 MOVE.L #0,$DFF144
 MOVE.L #0,$DFF14C
 MOVE.L #0,$DFF154
 MOVE.L #0,$DFF15C
BEGIN:
 MOVE.B $BFEC01,D0
 CMPI.B #$75,D0
 BEQ    BEGIN
START:
 MOVE.L TITLE_SONG,D0
 MOVE.L D0,SongPointer
 JSR    InitPlay
 MOVE.L COPPER1,$DFF080
 MOVE.L #00,$DFF088
START1:
 MOVE.W #$0020,$DFF096
 MOVE.B $BFEC01,D0
 CMPI.B #$7F,D0
 BEQ    CHOSE
 MOVE.B $BFEC01,D0
 CMPI.B #$75,D0
 BEQ    CHOSEY
 JMP    START1
;*---SET UP THE CHOICE MENU, LET CHOICE RING! ---*
CHOSE:
 JSR    RemovePlayer
 JSR    CLEARSONG
 MOVE.L COPPER2,A0
 MOVE.W #$606,470(A0)
 MOVE.W #$606,478(A0)
 MOVE.W #$606,486(A0)
 MOVE.W #$606,494(A0)
 MOVE.W #$606,502(A0)
 MOVE.W #$606,510(A0)
 MOVE.L CHOICE_SONG,D0
 MOVE.L D0,SongPointer
 JSR    InitPlay
 MOVE.L COPPER2,$DFF080
 MOVE.L #0,CHOOSE
CHOSE2:
 MOVE.B $BFEC01,D0
 CMP.B  D0,D1
 BEQ    CHOSE2
CHOSE1:
 MOVE.B $BFEC01,D1
 MOVE.L COPPER2,D0
 ADDI.L #470,D0
 ADD.L  CHOOSE,D0
 MOVE.L D0,A0
 MOVE.W #$08FF,(A0)

 MOVE.B $BFEC01,D0
 CMPI.B #$67,D0
 BEQ    CUP
 MOVE.B $BFEC01,D0
 CMPI.B #$65,D0
 BEQ    CDN
 MOVE.B $BFEC01,D0
 CMPI.B #$77,D0
 BEQ    LOADIT
 MOVE.B $BFEC01,D0
 CMPI.B #$75,D0
 BEQ    CHOSEX
 JMP    CHOSE1
;*--- RETURN TO THE PREVIOUS MENU ---*
CHOSEX:
 JSR    RemovePlayer
 JSR    CLEARSONG
 JMP    BEGIN
CHOSEY:
 JSR    RemovePlayer
 JSR    CLEARSONG
 JMP    EXIT
;*--- UP ---*
CUP:
 MOVE.B D0,D1
 MOVE.L CHOOSE,D0
 CMPI.L #0,D0
 BEQ    CUP1
 MOVE.L COPPER2,D0
 ADDI.L #470,D0
 ADD.L  CHOOSE,D0
 MOVE.L D0,A0
 MOVE.W #$0606,(A0)
 MOVE.L CHOOSE,D0
 SUBI.L #8,D0
 MOVE.L D0,CHOOSE
CUP1:
 JMP    CHOSE2
;*--- DOWN ---*
CDN:
 MOVE.B D0,D1
 MOVE.L CHOOSE,D0
 CMPI.L #40,D0
 BEQ    CDN1
 MOVE.L COPPER2,D0
 ADDI.L #470,D0
 ADD.L  CHOOSE,D0
 MOVE.L D0,A0
 MOVE.W #$0606,(A0)
 MOVE.L CHOOSE,D0
 ADDI.L #8,D0
 MOVE.L D0,CHOOSE
CDN1:
 JMP    CHOSE2
;*--- LOAD THE GOD-DAMN PICTURE DAMMIT! ---*
LOADIT:
 JSR    RemovePlayer
 JSR    CLEARSONG
 MOVE.L LOADING_SONG,D0
 MOVE.L D0,SongPointer
 JSR    InitPlay
 MOVE.L COPPER3,$DFF080
LOADPICT:
 MOVE.L #FILENAME,D1
 ADD.L CHOOSE,D1
 MOVE.L #1005,D2
 LINKSYS Open,DosBase
 MOVE.L D0,FileHd

 MOVE.L FileHd,D1
 MOVE.L PUZZLE,D2
 MOVE.L #12064,D3
 LINKSYS Read,DosBase

 MOVE.L FileHd,D1
 LINKSYS Close,DosBase

 MOVE.L COPPER4,A0
 MOVE.L PUZZLE,A1
 MOVE.W 12002(A1),334(A0)
 MOVE.W 12004(A1),338(A0)
 MOVE.W 12006(A1),342(A0)
 MOVE.W 12008(A1),346(A0)
 MOVE.W 12010(A1),350(A0)
 MOVE.W 12012(A1),354(A0)
 MOVE.W 12014(A1),358(A0)
 MOVE.W 12016(A1),362(A0)
 MOVE.W 12018(A1),366(A0)
 MOVE.W 12020(A1),370(A0)
 MOVE.W 12022(A1),374(A0)
 MOVE.W 12024(A1),378(A0)
 MOVE.W 12026(A1),382(A0)
 MOVE.W 12028(A1),386(A0)
 MOVE.W 12030(A1),390(A0)
 MOVE.W 12032(A1),394(A0)
 MOVE.W 12034(A1),398(A0)
 MOVE.W 12036(A1),402(A0)
 MOVE.W 12038(A1),406(A0)
 MOVE.W 12040(A1),410(A0)
 MOVE.W 12042(A1),414(A0)
 MOVE.W 12044(A1),418(A0)
 MOVE.W 12046(A1),422(A0)
 MOVE.W 12048(A1),426(A0)
 MOVE.W 12050(A1),430(A0)
 MOVE.W 12052(A1),434(A0)
 MOVE.W 12054(A1),438(A0)
 MOVE.W 12056(A1),442(A0)
 MOVE.W 12058(A1),446(A0)
 MOVE.W 12060(A1),450(A0)
 MOVE.W 12062(A1),454(A0)

 JSR    DELAY

 OR.B   #$88,$BFD100
 AND.B  #$F7,$BFD100
 OR.B   #$08,$BFD100

 JSR    RemovePlayer
 JSR    CLEARSONG
 MOVE.L COPPER4,$DFF080
 MOVE.L PLAY_SONG,D0
 MOVE.L D0,SongPointer
 JSR    InitPlay

 JSR    CLRSCREEN
 JSR    RESET_TILES
 JSR    DRAW_ALL

 JSR    DELAY

 JSR    RANDOMIZE_TILES
 JSR    DRAW_ALL
 MOVE.L #0,D6

;*--- MAIN PLAY ROUTINE ---*
MAIN:
 CMP.B  $BFEC01,D6
 BEQ    MAIN
 JSR    DRAW_ALL
 JSR    CHECK_TILES
 CMPI.W #0,D1
 BEQ    CONGRADS
MAIN1:
 MOVE.B $BFEC01,D6
 CMPI.B #$67,D6
 BEQ    MOVE_UP
 MOVE.B $BFEC01,D6
 CMPI.B #$65,D6
 BEQ    MOVE_DN
 MOVE.B $BFEC01,D6
 CMPI.B #$61,D6
 BEQ    MOVE_LT
 MOVE.B $BFEC01,D6
 CMPI.B #$63,D6
 BEQ    MOVE_RT
 MOVE.B $BFEC01,D6
 CMPI.B #$75,D6
 BEQ    CHOSEX
 JMP    MAIN1
;*--- DELAY ROUTINE ---*
DELAY:
 MOVE.L #0,D0
WAIT1:
 ADDI.L #1,D0
 CMPI.L #400000,D0
 BNE    WAIT1
 RTS
;*--- RANDOMIZE TILES ROUTINE ---*
RANDOMIZE_TILES:
 MOVE.W #0,D1
RANDTIL2:
 MOVE.W $DFF006,D0
 ANDI.W #$0001,D0
 CMPI.W #$0001,D0
 BEQ    UP
 BNE    DN
CKRT:
 MOVE.W $DFF006,D0
 ANDI.W #$0002,D0
 CMPI.W #$0002,D0
 BEQ    LT
 BNE    RT
RANDTIL1:
 ADDI.W #1,D1
 CMPI.W #8000,D1
 BNE    RANDTIL2
 RTS
UP:
 MOVE.L HOLE,D2
 ANDI.L #$00000030,D2
 CMPI.L #$00000030,D2
 BEQ    UPDONE
 MOVE.L #POSI,D3
 ADD.L  HOLE,D3
 MOVE.L D3,A0
 ADDI.L #16,D3
 MOVE.L D3,A1
 MOVE.L (A1),(A0)
 MOVE.L #60,(A1)
 ADDI.L #16,HOLE
UPDONE:
 JMP    CKRT
DN:
 MOVE.L HOLE,D2
 ANDI.L #$00000030,D2
 CMPI.L #$00000000,D2
 BEQ    DNDONE
 MOVE.L #POSI,D3
 ADD.L  HOLE,D3
 MOVE.L D3,A0
 SUBI.L #16,D3
 MOVE.L D3,A1
 MOVE.L (A1),(A0)
 MOVE.L #60,(A1)
 SUBI.L #16,HOLE
DNDONE:
 JMP    CKRT
LT:
 MOVE.L HOLE,D2
 ANDI.L #$0000000C,D2
 CMPI.L #$0000000C,D2
 BEQ    LTDONE
 MOVE.L #POSI,D3
 ADD.L  HOLE,D3
 MOVE.L D3,A0
 ADDI.L #4,D3
 MOVE.L D3,A1
 MOVE.L (A1),(A0)
 MOVE.L #60,(A1)
 ADDI.L #4,HOLE
LTDONE:
 JMP    RANDTIL1
RT:
 MOVE.L HOLE,D2
 ANDI.L #$0000000C,D2
 CMPI.L #$00000000,D2
 BEQ    RTDONE
 MOVE.L #POSI,D3
 ADD.L  HOLE,D3
 MOVE.L D3,A0
 SUBI.L #4,D3
 MOVE.L D3,A1
 MOVE.L (A1),(A0)
 MOVE.L #60,(A1)
 SUBI.L #4,HOLE
RTDONE:
 JMP    RANDTIL1
;*--- DRAW A SINGLE TILE ---*
DRAW_IT:
 MOVE.W #0,D3
DRWIT2:
 MOVE.W #0,D2
DRWIT1:
 MOVE.B 600(A0),32000(A1)
 MOVE.B 450(A0),24000(A1)
 MOVE.B 300(A0),16000(A1)
 MOVE.B 150(A0),8000(A1)
 MOVE.B (A0)+,(A1)+
 ADDI.W #1,D2
 CMPI.W #5,D2
 BNE    DRWIT1
 ADDI.L #40,D1
 MOVE.L D1,A1
 ADDI.W #1,D3
 CMPI.W #30,D3
 BNE    DRWIT2
 RTS
;*--- DRAW ALL OF THE TILES ---*
DRAW_ALL:
 MOVE.L #0,D4
DRAW1:
 MOVE.L #BMAP,D2
 MOVE.L #POSI,D3
 ADD.L  D4,D3
 MOVE.L D3,A3
 MOVE.L (A3),D5
 CMPI.L #60,D5
 BEQ    EH
 MOVE.L #TILE,D3
 ADD.L  D4,D2
 ADD.L  D5,D3
 MOVE.L D2,A2
 MOVE.L D3,A3
 MOVE.L PUZZLE,D0
 MOVE.L PLANE2,D1
 ADD.L  (A2),D1
 ADD.L  (A3),D0
 MOVE.L D0,A0
 MOVE.L D1,A1
 JSR    DRAW_IT
CONT_DR:
 ADDI.L #4,D4
 CMPI.L #64,D4
 BNE    DRAW1
 RTS
EH:
 ADD.L  D4,D2
 MOVE.L D2,A2
 MOVE.L PLANE2,D1
 ADD.L  (A2),D1
 MOVE.L D1,A1
 MOVE.W #0,D3
EH2:
 MOVE.W #0,D2
EH1:
 MOVE.B #$00,32000(A1)
 MOVE.B #$00,24000(A1)
 MOVE.B #$00,16000(A1)
 MOVE.B #$00,8000(A1)
 MOVE.B #$00,(A1)+
 ADDI.W #1,D2
 CMPI.W #5,D2
 BNE    EH1
 ADDI.L #40,D1
 MOVE.L D1,A1
 ADDI.W #1,D3
 CMPI.W #30,D3
 BNE    EH2
 JMP    CONT_DR
;*--- ERASE A COLUMN ---*
ERASE_COL:
 MOVE.L D0,A0
 MOVE.W #0,D2
ERASEC1:
 MOVE.B #$00,(A0)
 MOVE.B #$00,8000(A0)
 MOVE.B #$00,16000(A0)
 MOVE.B #$00,24000(A0)
 MOVE.B #$00,32000(A0)
 ADDI.L #40,D0
 MOVE.L D0,A0
 ADDI.W #1,D2
 CMPI.W #30,D2
 BNE    ERASEC1
 RTS
;*--- ERASE A ROW ---*
ERASE_ROW:
 MOVE.L D0,A0
 MOVE.W #0,D3
ERASER2:
 MOVE.W #0,D2
ERASER1:
 MOVE.B #$00,8000(A0)
 MOVE.B #$00,16000(A0)
 MOVE.B #$00,24000(A0)
 MOVE.B #$00,32000(A0)
 MOVE.B #$00,(A0)+
 ADDI.W #1,D2
 CMPI.W #5,D2
 BNE    ERASER1
 ADDI.L #40,D0
 MOVE.L D0,A0
 ADDI.W #1,D3
 CMPI.W #6,D3
 BNE    ERASER2
 RTS
;*--- RESET THE TILES ---*
RESET_TILES:
 MOVE.L #POSI,D0
 MOVE.L #0,D1
RESET1:
 MOVE.L #POSI,D0
 ADD.L  D1,D0
 MOVE.L D0,A0
 MOVE.L D1,(A0)
 ADDI.L #4,D1
 CMPI.L #64,D1
 BNE    RESET1
 MOVE.L #60,HOLE
 RTS
;*--- CONGRADULATIONS ---*
CONGRADS:
 JSR    RemovePlayer
 JSR    CLEARSONG
 MOVE.L WINNER_SONG,D0
 MOVE.L D0,SongPointer
 JSR    InitPlay
 MOVE.L WELLDONE,A0
 MOVE.L PLANE2,A1
CON2:
 MOVE.B (A0)+,(A1)+
 ADDI.W #1,D1
 CMPI.W #1280,D1
 BNE CON2
 MOVE.L PUZZLE,D0
 ADDI.L #11250,D0
 MOVE.L D0,A0
 MOVE.L PLANE2,D1
 ADDI.L #5225,D1
 MOVE.L D1,A1
 JSR    DRAW_IT
CON1:
 MOVE.W $DFF006,D0
 ANDI.W #$FF00,D0
 CMPI.W #$5000,D0
 BNE    CON1
 MOVE.L #COLORZEZ,A1
 MOVE.L #COLORZEZ+2,A2
 MOVE.W (A1),D2
 MOVE.W #0,D1
CON5:
 MOVE.W (A2)+,(A1)+
 ADDI.W #1,D1
 CMPI.W #89,D1
 BNE    CON5
 MOVE.L #COLORZEZ+174,A1
 MOVE.W D2,(A1)

 MOVE.L #COLORZEZ,A1
 MOVE.L COPPER4,A2
 MOVE.W #0,D1
CON4:
 MOVE.W (A1)+,94(A2)
 MOVE.L (A2)+,D0
 MOVE.L (A2)+,D0
 ADDI.W #1,D1
 CMPI.W #30,D1
 BNE    CON4
 MOVE.B $BFEC01,D0
 CMPI.B #$75,D0
 BEQ    CON3
 JMP    CON1

CON3:
 JSR    RemovePlayer
 JSR    CLEARSONG
 JMP    BEGIN
;*--- CHECK TO SEE IF THE PUZZLE IS DONE ---*
CHECK_TILES:
 MOVE.L #POSI,A0
 MOVE.L #NORM,A1
 MOVE.W #0,D0
 MOVE.W #0,D1
CHECK1:
 MOVE.L (A0)+,D2
 MOVE.L (A1)+,D3
 CMP.L D2,D3
 BNE   CHECK2
 ADDI.W #1,D0
 CMPI.W #16,D0
 BNE    CHECK1
 RTS
CHECK2:
 MOVE.W #1,D1
 RTS
;*--- MOVE UP, OR AT LEAST TRY TO ---*
MOVE_UP:
 MOVE.L HOLE,D2
 ANDI.L #$00000030,D2
 CMPI.L #$00000030,D2
 BEQ    PLAYBOOK
 MOVE.L #POSI,D3
 ADD.L  HOLE,D3
 MOVE.L D3,A0
 ADDI.L #16,D3
 MOVE.L D3,A1
 MOVE.L (A1),(A0)
 MOVE.L #60,(A1)
 ADDI.L #16,HOLE
MOVEUP1:
 JMP    PLAYMOVE
;*--- MOVE DOWN, OR AT LEAST TRY TO ---*
MOVE_DN:
 MOVE.L HOLE,D2
 ANDI.L #$00000030,D2
 CMPI.L #$00000000,D2
 BEQ    PLAYBOOK
 MOVE.L #POSI,D3
 ADD.L  HOLE,D3
 MOVE.L D3,A0
 SUBI.L #16,D3
 MOVE.L D3,A1
 MOVE.L (A1),(A0)
 MOVE.L #60,(A1)
 SUBI.L #16,HOLE
MOVEDN1:
 JMP    PLAYMOVE
;*--- MOVE LEFT, OR AT LEAST TRY TO ---*
MOVE_LT:
 MOVE.L HOLE,D2
 ANDI.L #$0000000C,D2
 CMPI.L #$0000000C,D2
 BEQ    PLAYBOOK
 MOVE.L #POSI,D3
 ADD.L  HOLE,D3
 MOVE.L D3,A0
 ADDI.L #4,D3
 MOVE.L D3,A1
 MOVE.L (A1),(A0)
 MOVE.L #60,(A1)
 ADDI.L #4,HOLE
MOVELT1:
 JMP    PLAYMOVE
;*--- MOVE RIGHT, OR AT LEAST TRY TO ---*
MOVE_RT:
 MOVE.L HOLE,D2
 ANDI.L #$0000000C,D2
 CMPI.L #$00000000,D2
 BEQ    PLAYBOOK
 MOVE.L #POSI,D3
 ADD.L  HOLE,D3
 MOVE.L D3,A0
 SUBI.L #4,D3
 MOVE.L D3,A1
 MOVE.L (A1),(A0)
 MOVE.L #60,(A1)
 SUBI.L #4,HOLE
MOVERT1:
 JMP    PLAYMOVE
;*--- THE PLAYER HIT A WALL! ---*
PLAYBOOK:
 JSR    RemovePlayer
 JSR    CLEARSONG
 MOVE.L HIT_SONG,D0
 MOVE.L D0,SongPointer
 JSR    InitPlay
 JMP    MAIN
;*--- THE PLAYER MOVED A TILE ---*
PLAYMOVE:
 JSR    RemovePlayer
 JSR    CLEARSONG
 MOVE.L MOVE_SONG,D0
 MOVE.L D0,SongPointer
 JSR    InitPlay
 JMP    MAIN
;*--- EXIT THE DAMN DEMO ---*
EXITDEMO:
 JMP    EXIT
;*---------------------------------------------------*
InitPlay:
        movem.l d1-d2/a0-a3/a6,-(sp)
        move.l  SysBase,a6
        lea     CiabName,a1
        moveq   #0,d0
        jsr     _LVOOpenResource(a6)
        move.l  d0,CiabBase
        beq     InitPlayError
        cmp.b   #PAL,eb_PowerSupplyFreq(a6)
        beq     initsong
        move.w  #2,IsNTSC
initsong:
        bsr     InitSampleAdr
        bsr     InitSamples
        bsr     InitInterrupt
        tst.l   d0
        beq     EndInitPlay
InitPlayError:
        moveq   #1,d0
EndInitPlay:
        movem.l (sp)+,d1-d2/a0-a3/a6
        rts
; Stop to play the module
RemovePlayer:
        movem.l d0-d1/a0-a1/a6,-(sp)
        bsr     DisablePlayer
        move.l  CiabBase,a6
        lea     TimerInt,a1
        moveq   #1,d0
        jsr     _LVORemICRVector(a6)
        bclr    #1,CIAAPRA
        movem.l (sp)+,d0-d1/a0-a1/a6
        rts
;-------------- internal functions -----------------
InitInterrupt:
        bsr     EnablePlayer
        move.l  CiabBase,a6
        lea     TimerInt,a1
        moveq   #1,d0
        jsr     _LVOAddICRVector(a6)
        tst.l   d0
        bne     InitInterruptEnd
        move.b  CIABCRB,d0
        and.b   #%10000000,d0
        or.b    #1,d0
        move.b  d0,CIABCRB
        move.b  #$82,CIABICR
        lea     TimerTable,a0
        move.w  IsNTSC,d0
        move.b  1(a0,d0),CIABTBLO
        move.b  (a0,d0),CIABTBHI
        moveq   #0,d0
InitInterruptEnd:
        rts
InitSampleAdr:
        move.l  SongPointer,a1
        lea     sng_Len(a1),a0
        move.w  (a0)+,d0
        subq.w  #1,d0
        moveq   #0,d1
        move.l  d1,d2
SeekLastBlockLoop:
        move.b  (a0)+,d2
        cmp.b   d2,d1
        bhi     NotLastBlock
        move.b  d2,d1
NotLastBlock:
        dbra    d0,SeekLastBlockLoop
        addq.w  #1,d1
        moveq   #10,d0
        lsl.l   d0,d1
        lea     sng_Data(a1),a0
        add.l   d1,a0
        lea     sng_Instr0(a1),a2
        lea     SampleAdrTable,a3
        moveq   #MAXINSTR,d0
InitAdrLoop:
        moveq   #0,d1
        move.w  instr_Len(a2),d1
        beq     InitNextAdr
InitThisAdr:
        move.l  a0,(a3)
        moveq   #0,d2
        cmp.w   #1,instr_RLen(a2)
        beq     GetSampleSize
        move.w  instr_RLen(a2),d2
        add.l   d2,d1
GetSampleSize:
        add.l   d1,d1
        bclr    #0,instr_Start+3(a2)
        add.l   instr_Start(a2),d1
        add.l   d1,a0
InitNextAdr:
        addq.l  #4,a3
        add.l   #SIZEOF_insdt,a2
        dbra    d0,InitAdrLoop
        rts
InitSamples:
        lea     SampleAdrTable,a0
        moveq   #MAXINSTR,d0
InitSamplesLoop:
        move.l  (a0)+,d1
        beq     InitSamplesLoopEnd
        move.l  d1,a1
        moveq   #3,d2
Clear4Bytes:
        clr.b   (a1)+
        dbra    d2,Clear4Bytes
InitSamplesLoopEnd:
        dbra    d0,InitSamplesLoop
        rts
DisablePlayer:
        clr.w   AUD0LCH+AUDxVOL
        clr.w   AUD1LCH+AUDxVOL
        clr.w   AUD2LCH+AUDxVOL
        clr.w   AUD3LCH+AUDxVOL
        move.w  #$0f,DMACON
        rts
EnablePlayer:
        clr.w   AUD0LCH+AUDxVOL
        clr.w   AUD1LCH+AUDxVOL
        clr.w   AUD2LCH+AUDxVOL
        clr.w   AUD3LCH+AUDxVOL
        rts
TimerIntRoutine:
        movem.l d1-d7/a0-a6,-(sp)
        bsr     PlayRoutine
        movem.l (sp)+,d1-d7/a0-a6
        moveq   #0,d0
        rts
PlayRoutine:
        move.l  SongPointer,a6
        move.w  8(a6),d0
        addq.w  #1,PlayTimer
        cmp.w   PlayTimer,d0
        bne     PlayEffects
        clr.w   PlayTimer
        bra     PlaySound
PlayEffects:
        lea     ChannelData0,a0
        lea     AUD0LCH,a1
        moveq   #MAXTRACK-1,d3
PlayEffLoop:
        move.w  (a0),d0
        and.w   #$7ff,d0
        cmp.w   #HSTOP,d0
        beq     PlayEffLoopEnd
        tst.b   ad_Info(a0)
        beq     PlayEffLoopEnd
        bsr     MakeEffects
PlayEffLoopEnd:
        add.l   #SIZEOF_ad,a0
        add.w   #SIZEOF_AUD,a1
        dbra    d3,PlayEffLoop
        rts
MakeEffects:
        move.b  ad_Effet(a0),d0
        beq     EffArpeggio
        cmp.b   #PITCHUP,d0
        beq     EffPitchUp
        cmp.b   #PITCHDOWN,d0
        beq     EffPitchDown
        rts
EffArpeggio:
        moveq   #0,d0
        move.w  PlayTimer,d0
        cmp.w   #1,d0
        beq     EffArpOne
        cmp.w   #2,d0
        beq     EffArpTwo
        cmp.w   #3,d0
        beq     EffArpThree
        cmp.w   #4,d0
        beq     EffArpTwo
        cmp.w   #5,d0
        beq     EffArpOne
        rts
EffArpOne:
        move.b  ad_Info(a0),d0
        lsr.b   #4,d0
        bra     EffArpSeek
EffArpTwo:
        move.b  ad_Info(a0),d0
        and.b   #MASK_VAL,d0
        bra     EffArpSeek
EffArpThree:
        move.w  ad_ArpPer(a0),d2
        bra     EffArpFound
EffArpSeek:
        add.w   d0,d0
        move.w  ad_ArpPer(a0),d1
        lea     NoteTable,a2
EffArpLoop:
        move.w  (a2,d0.w),d2
        cmp.w   (a2)+,d1
        bne     EffArpLoop
EffArpFound:
        move.w  d2,AUDxPER(a1)
        rts
EffPitchUp:
        moveq   #0,d0
        move.b  ad_Info(a0),d0
        sub.w   d0,ad_PitchPer(a0)
        cmp.w   #SI5,ad_PitchPer(a0)
        bpl     EffPitchOK
        move.w  #SI5,ad_PitchPer(a0)
        bra     EffPitchOK
EffPitchDown:
        moveq   #0,d0
        move.b  ad_Info(a0),d0
        add.w   d0,ad_PitchPer(a0)
        cmp.w   #DO2,ad_PitchPer(a0)
        bmi     EffPitchOK
        move.w  #DO2,ad_PitchPer(a0)
EffPitchOK:
        move.w  ad_PitchPer(a0),AUDxPER(a1)
        rts
PlaySound:
        lea     sng_Data(a6),a0
        lea     sng_Seq(a6),a1
        move.w  CurrentPos,d0
        move.w  d0,NewPosJump
        moveq   #0,d1
        move.b  0(a1,d0.w),d1
        moveq   #10,d0
        lsl.l   d0,d1
        add.l   OffsetBlock,d1
        clr.w   AudioDMA
        lea     AUD0LCH,a3
        lea     ChannelData0,a4
        moveq   #MAXTRACK-1,d7
PlayLoop:
        bsr   PlayInstr
        add.w   #SIZEOF_AUD,a3
        add.l   #SIZEOF_ad,a4
        dbra    d7,PlayLoop
        move.w  AudioDMA,d0
        or.w    #DMASET,d0
        move.w  d0,DMACON
        move.b  CIABCRA,d1
        move.b  d1,d0
        and.b   #%11000000,d0
        or.b    #%00001000,d0
        move.b  d0,CIABCRA
        move.b  #$2f,CIABTALO
        move.b  #1,CIABTAHI
PlayDelay1:
        btst    #0,CIABCRA
        bne     PlayDelay1
        move.b  d1,CIABCRA
        move.b  #%00000001,CIABICR
        lea     ChannelData0,a0
        lea     AUD0LCH,a1
        moveq   #MAXTRACK-1,d0
SetNewValue:
        move.l  ad_RepAdr(a0),(a1)
        move.w  ad_RepLen(a0),AUDxLEN(a1)
        add.l   #SIZEOF_ad,a0
        add.w   #SIZEOF_AUD,a1
        dbra    d0,SetNewValue
        cmp.l   #BLOCKSIZE-NEXTLINE,OffsetBlock
        beq     ChangePosition
        add.l   #NEXTLINE,OffsetBlock
        tst.w   BreakStatus
        beq     PlaySoundEnd
        clr.w   BreakStatus
ChangePosition:
        clr.l   OffsetBlock
        move.w  NewPosJump,CurrentPos
        addq.w  #1,CurrentPos
        move.w  sng_Len(a6),d0
        move.w  CurrentPos,d1
        cmp.w   d0,d1
        bne     PlaySoundEnd
        clr.w   CurrentPos
PlaySoundEnd:
        rts
PlayInstr:
        lea     sng_Instr0(a6),a2
        move.l  (a0,d1.l),ad_SampPer(a4)
        addq.l  #NEXTTRACK,d1
        moveq   #0,d0
        move.b  ad_SampPer(a4),d0
        lsr.b   #3,d0
        tst.b   d0
        beq     NoSampleChange
        lea     SampleAdrTable,a5
        subq.b  #1,d0
        move.l  d0,d3
        lsl.w   #2,d0
        mulu    #SIZEOF_insdt,d3
        add.l   #instr_Start,d3
        add.l   d3,a2
        move.l  (a5,d0.w),d4
        add.l   (a2)+,d4
        move.l  d4,ad_SmpAdr(a4)
        beq     NoSampleChange
        move.w  (a2)+,ad_SmpLen(a4)
        move.l  (a2)+,d5
        move.w  (a2)+,d2
        bne     SetRepeat
        moveq   #1,d2
        moveq   #0,d5
SetRepeat:
        move.w  d2,ad_RepLen(a4)
        add.l   ad_SmpAdr(a4),d5
        move.l  d5,ad_RepAdr(a4)
        move.w  (a2),ad_Volume(a4)
NoSampleChange:
        move.w  ad_SampPer(a4),d6
        and.w   #$7ff,d6
        beq     TestEffects
        move.w  d6,ad_ArpPer(a4)
        move.w  ad_DMABit(a4),d0
        move.w  d0,DMACON
        move.b  CIABCRA,d2
        move.b  d2,d3
        and.b   #%11000000,d3
        or.b    #%00001000,d3
        move.b  d3,CIABCRA
        move.b  #$2f,CIABTALO
        move.b  #1,CIABTAHI
PlayDelay2:
        btst  #0,CIABCRA
        bne   PlayDelay2
        move.b  d2,CIABCRA
        move.b  #%00000001,CIABICR
        cmp.w   #HSTOP,d6
        bne   SetPlayRegs
        clr.w   AUDxVOL(a3)
        or.w    d0,AudioDMA
        rts
SetPlayRegs:
        move.l  ad_SmpAdr(a4),(a3)
        beq   TestEffects
        move.w  ad_SmpLen(a4),AUDxLEN(a3)
        move.w  d6,AUDxPER(a3)
        or.w    d0,AudioDMA
        move.w  d6,ad_PitchPer(a4)
TestEffects:
        move.b  ad_Effet(a4),d0
        bsr   EffVolume
        tst.b   d0
        beq   TestEffectsEnd
        cmp.b   #FILTER,d0
        beq   EffFilter
        cmp.b   #MASTERVOL,d0
        beq   EffMaster
        cmp.b   #TEMPO,d0
        beq   EffSpeed
        cmp.b   #JUMP,d0
        beq   EffJump
TestEffectsEnd:
        rts
EffVolume:
        cmp.w   #VOLUME,d0
        bne   UseInstrVol
        moveq   #0,d2
        move.b  ad_Info(a4),d2
        bra   SetInstrVol
UseInstrVol:
        tst.w   d6
        beq   EffVolumeEnd
        move.w  ad_Volume(a4),d2
SetInstrVol:
        sub.w   MasterVolume,d2
        bge   SetVolumeReg
        moveq   #0,d2
SetVolumeReg:
        move.w  d2,AUDxVOL(a3)
EffVolumeEnd:
        rts
EffMaster:
        moveq   #MAX_VOL,d2
        move.b  ad_Info(a4),d0
        sub.b   d0,d2
        blt   EffMasterEnd
        move.b  d2,MasterVolume+1
EffMasterEnd:
        rts
EffSpeed:
        move.b  ad_Info(a4),d0
        beq   EffSpeedEnd
        clr.w   PlayTimer
        move.b  d0,sng_Tempo+1(a6)
EffSpeedEnd:
        rts
EffJump:
        move.w  #1,BreakStatus
        move.b  ad_Info(a4),d0
        cmp.b   #BREAK,d0
        beq   EffBreak
        subq.b  #2,d0
        ext.w   d0
        move.w  d0,NewPosJump
        rts
EffBreak:
        move.w  CurrentPos,NewPosJump
        rts
EffFilter:
        move.b  ad_Info(a4),d0
        bne   SetFilter
        bset    #1,CIAAPRA
        rts
SetFilter:
        bclr    #1,CIAAPRA
        rts
CLRSCREEN:
 MOVE.L Plane2,A0
 MOVE.W #0,D0
CLRSCN1:
 MOVE.B #$00,(A0)+
 ADDI.W #1,D0
 CMPI.W #1280,D0
 BNE    CLRSCN1
 RTS
;*--- Clear the audio register shit! ---*
CLEARSONG:
 MOVE.W #0,CurrentPos
 MOVE.W #0,PlayOn
 MOVE.W #0,PlayTimer
 MOVE.L #0,OffsetBlock
 MOVE.L #0,AudioDMA
 MOVE.W #0,MasterVolume
 MOVE.W #0,BreakStatus
 MOVE.W #0,NewPosJump
 RTS

EXIT:
 MOVE.L  GfxBase,A1
 MOVE.L  38(A1),$DFF080
 MOVE.W  #$00,$DFF088

 MOVE.L  COPPER1,A1
 MOVE.L  #816,D0
 CALLSYS FreeMem

 MOVE.L  COPPER2,A1
 MOVE.L  #580,D0
 CALLSYS FreeMem

 MOVE.L  COPPER3,A1
 MOVE.L  #424,D0
 CALLSYS FreeMem

 MOVE.L  COPPER4,A1
 MOVE.L  #468,D0
 CALLSYS FreeMem

 MOVE.L  Plane2,A1
 MOVE.L  #40000,D0
 CALLSYS FreeMem

 MOVE.L  Plane0,A1
 MOVE.L  #16000,D0
 CALLSYS FreeMem

 MOVE.L  Plane7,A1
 MOVE.L  #8000,D0
 CALLSYS FreeMem

 MOVE.L  Plane8,A1
 MOVE.L  #8000,D0
 CALLSYS FreeMem

 MOVE.L  PUZZLE,A1
 MOVE.L  #12064,D0
 CALLSYS FreeMem

 MOVE.L  CHOICE_SONG,A1
 MOVE.L  #93660,D0
 CALLSYS FreeMem

 MOVE.L  LOADING_SONG,A1
 MOVE.L  #14612,D0
 CALLSYS FreeMem

 MOVE.L  PLAY_SONG,A1
 MOVE.L  #40966,D0
 CALLSYS FreeMem

 MOVE.L  TITLE_SONG,A1
 MOVE.L  #48856,D0
 CALLSYS FreeMem

 MOVE.L  WINNER_SONG,A1
 MOVE.L  #56576,D0
 CALLSYS FreeMem

 MOVE.L  WELLDONE,A1
 MOVE.L  #8000,D0
 CALLSYS FreeMem

 MOVE.L  HIT_SONG,A1
 MOVE.L  #5296,D0
 CALLSYS FreeMem

 MOVE.L  MOVE_SONG,A1
 MOVE.L  #6388,D0
 CALLSYS FreeMem

 CALLSYS TurnOn

 MOVE.W #$8020,$DFF096

 MOVE.L GfxBase,D0
 BEQ.S ENDE
 MOVE.L D0,A1
 CALLSYS CloseLibrary

ENDE:
 EXIT_AMIGA

 DATA

TEMPORARY:DC.L 0
PUZZLE:DC.L 0
CHOICE_SONG:DC.L 0
LOADING_SONG:DC.L 0
TITLE_SONG:DC.L 0
PLAY_SONG:DC.L 0
WINNER_SONG:DC.L 0
HIT_SONG:DC.L 0
MOVE_SONG:DC.L 0
WELLDONE:DC.L 0
CHOICE:DC.L 0
CHOOSE:DC.L 0,8,16,24,32,40
HOLE:DC.L 0
POSI:DC.L 00,04,08,12
     DC.L 16,20,24,28
     DC.L 32,36,40,44
     DC.L 48,52,56,60
NORM:DC.L 00,04,08,12
     DC.L 16,20,24,28
     DC.L 32,36,40,44
     DC.L 48,52,56,60
TILE:DC.L 0000,0750,1500,2250
     DC.L 3000,3750,4500,5250
     DC.L 6000,6750,7500,8250
     DC.L 9000,9750,10500,11250
BMAP:DC.L 1610,1615,1620,1625
     DC.L 2810,2815,2820,2825
     DC.L 4010,4015,4020,4025
     DC.L 5210,5215,5220,5225
PLANE0:DC.L 0
PLANE1:DC.L 0
PLANE2:DC.L 0
PLANE3:DC.L 0
PLANE4:DC.L 0
PLANE5:DC.L 0
PLANE6:DC.L 0
PLANE7:DC.L 0
PLANE8:DC.L 0
PLANE9:DC.L 0

GfxName:DC.B 'graphics.library',0
 ALIGN
DosName:DC.B 'dos.library',0
 ALIGN
FILENAME:DC.B 'FILEPC1',0
         DC.B 'FILEPC2',0
         DC.B 'FILEPC3',0
         DC.B 'FILEPC4',0
         DC.B 'FILEPC5',0
         DC.B 'FILEPC6',0
FileName0:DC.B 'RAW_PICS/TITLE',0
 ALIGN
FileName1:DC.B 'RAW_PICS/CHOICE',0
 ALIGN
FileName2:DC.B 'RAW_PICS/LOAD',0
 ALIGN
FileName3:DC.B 'NOISE/TITLE.DSS8',0
 ALIGN
FileName4:DC.B 'NOISE/LOAD.DSS8',0
 ALIGN
FileName5:DC.B 'NOISE/CHOICE.DSS8',0
 ALIGN
FileName6:DC.B 'NOISE/PLAY.DSS8',0
 ALIGN
FileName7:DC.B 'NOISE/WINNER.DSS8',0
 ALIGN
FileName8:DC.B 'RAW_PICS/PLAYFIELD',0
 ALIGN
FileName9:DC.B 'RAW_PICS/WELLDONE',0
 ALIGN
FileNameA:DC.B 'NOISE/HIT.DSS8',0
 ALIGN
FileNameB:DC.B 'NOISE/MOVE.DSS8',0
 ALIGN
COLORZEZ:
 DC.W $0F00,$0F10,$0F20,$0F30,$0F40,$0F50,$0F60,$0F70
 DC.W $0F80,$0F90,$0FA0,$0FB0,$0FC0,$0FD0,$0FE0,$0FF0
 DC.W $0EF0,$0DF0,$0CF0,$0BF0,$0AF0,$09F0,$08F0,$07F0
 DC.W $06F0,$05F0,$04F0,$03F0,$02F0,$01F0,$00F0,$00F1
 DC.W $00F2,$00F3,$00F4,$00F5,$00F6,$00F7,$00F8,$00F9
 DC.W $00FA,$00FB,$00FC,$00FD,$00FE,$00FF,$00EF,$00DF
 DC.W $00CF,$00BF,$00AF,$009F,$008F,$007F,$006F,$005F
 DC.W $004F,$003F,$002F,$001F,$000F,$010F,$020F,$030F
 DC.W $040F,$050F,$060F,$070F,$080F,$090F,$0A0F,$0B0F
 DC.W $0C0F,$0D0F,$0E0F,$0F0F,$0F0E,$0F0D,$0F0C,$0F0B
 DC.W $0F0A,$0F09,$0F08,$0F07,$0F06,$0F05,$0F04,$0F03
 DC.W $0F02,$0F01
 DC.W 0,0,0,0,0,0,0,0,0,0
GfxBase:DC.L 0
DosBase:DC.L 0
FileHd:DC.L 0
CiabBase:       dc.l    0
IsNTSC:         dc.w    0
CiabName:       dc.b    'ciab.resource',0
TimerIntName:   dc.b    'DSS Tracker Player',0
 ALIGN
TimerInt:
        dc.l  0
        dc.l  0
        dc.b  2
        dc.b  -10
        dc.l  TimerIntName
        dc.l  0
        dc.l  TimerIntRoutine
PlayOn:         dc.w    0
PlayTimer:      dc.w    0
CurrentPos:     dc.w    0
OffsetBlock:    dc.l    0
AudioDMA:       dc.w    0
MasterVolume:   dc.w    0
BreakStatus:    dc.w    0
NewPosJump:     dc.w    0
ChannelData0:
        dc.w    0
        dc.w    0
        dc.w    0
        dc.l    0
        dc.w    0
        dc.l    0
        dc.w    0
        dc.w    0
        dc.w    1
        dc.w    0
ChannelData1:
        ds.w    10
        dc.w    2
        dc.w    0
ChannelData2:
        ds.w    10
        dc.w    4
        dc.w    0
ChannelData3:
        ds.w    10
        dc.w    8
        dc.w    0
        dc.w    1712
NoteTable:
 dc.w 1712,1616,1524,1440,1356,1280,1208,1140,1076,1016,960,906
 dc.w 856,808,762,720,678,640,604,570,538,508,480,453
 dc.w 428,404,381,360,339,320,302,285,269,254,240,226
 dc.w 214,202,190,180,170,160,151,143,135,127,120,113
 dc.w 113,113,113,113,113,113,113,113,113,113,113,113
 dc.w 113,113,113,113,113,113,113,113,113,113,113,113
 dc.w 113,113,113,113,113,113
SampleAdrTable: ds.l    31
TimerTable:     dc.w    14187,14318
SongPointer:    dc.l    0

COPPER1:DC.L 0
COPPER2:DC.L 0
COPPER3:DC.L 0
COPPER4:DC.L 0

COP1:
 DC.L $2B01FFFE ; x=0 y=43    0
 DC.L $008E2C81 ; diwstart    1
 DC.L $01000200 ; bplcon0     2
 DC.L $01040000 ; bplcon2     3
 DC.L $0090F4C1 ; diwstop     4
 DC.L $00920038 ; ddfstrt     5
 DC.L $009400D0 ; ddfstop     6
 DC.L $01020000 ; bplcon1     7
 DC.L $01080000 ; bpl1mod     8
 DC.L $010A0000 ; bpl2mod     9
 DC.L $00E00000 ; BPL0ptrh    10
 DC.L $00E20000 ; BPL0ptrl    11
 DC.L $00E40000 ; BPL1ptrh    12
 DC.L $00E60000 ; BPL1ptrl    13
 DC.L $01820000 ;
 DC.L $2E01FFFE ; x=0 y=44    14
 DC.L $01002200 ; bplcon0     15
 DC.L $01800600 ;             16
 DC.L $01860000 ;             17
 DC.L $0182000F ;             18
 DC.L $01840000 ;             19
 DC.L $3101FFFE ;             20
 DC.L $0182011F ;             21
 DC.L $3301FFFE ;             22
 DC.L $0182022F ;             23
 DC.L $3501FFFE ;             24
 DC.L $0182033F ;             25
 DC.L $3701FFFE ;             26
 DC.L $0182044F ;             27
 DC.L $3901FFFE ;             28
 DC.L $0182055F ;             29
 DC.L $3B01FFFE ;             30
 DC.L $0182066F ;             31
 DC.L $3D01FFFE ;             32
 DC.L $0182077F ;             33
 DC.L $3F01FFFE ;             34
 DC.L $0182088F ;             35
 DC.L $4101FFFE ;             36
 DC.L $0182099F ;             37
 DC.L $4301FFFE ;             38
 DC.L $01820AAF ;             39
 DC.L $4501FFFE ;             40
 DC.L $01820BBF ;             41
 DC.L $4701FFFE ;             42
 DC.L $01820CCF ;             43
 DC.L $4901FFFE ;             44
 DC.L $01820DDF ;             45
 DC.L $4B01FFFE ;             46
 DC.L $01820CCF ;             47
 DC.L $4D01FFFE ;             48
 DC.L $01820BBF ;             49
 DC.L $4F01FFFE ;             50
 DC.L $01820AAF ;             51
 DC.L $5101FFFE ;             52
 DC.L $0182099F ;             53
 DC.L $5301FFFE ;             54
 DC.L $0182088F ;             55
 DC.L $5501FFFE ;             56
 DC.L $0182077F ;             57
 DC.L $5701FFFE ;             58
 DC.L $0182066F ;             59
 DC.L $5901FFFE ;             60
 DC.L $0182055F ;             61
 DC.L $5B01FFFE ;             62
 DC.L $0182044F ;             63
 DC.L $5D01FFFE ;             64
 DC.L $0182033F ;             65
 DC.L $5F01FFFE ;             66
 DC.L $0182022F ;             67
 DC.L $6101FFFE ;             68
 DC.L $0182011F ;             69
 DC.L $6301FFFE ;             70
 DC.L $0182000F ;             71
 DC.L $6501FFFE ;             72
 DC.L $0182011F ;             73
 DC.L $6701FFFE ;             74
 DC.L $0182022F ;             75
 DC.L $6901FFFE ;             76
 DC.L $0182033F ;             77
 DC.L $6B01FFFE ;             78
 DC.L $0182044F ;             79
 DC.L $6D01FFFE ;             80
 DC.L $0182055F ;             81
 DC.L $6F01FFFE ;             82
 DC.L $0182066F ;             83
 DC.L $7101FFFE ;             84
 DC.L $0182077F ;             85
 DC.L $7301FFFE ;             86
 DC.L $0182088F ;             87
 DC.L $7501FFFE ;             88
 DC.L $0182099F ;             89
 DC.L $7701FFFE ;             90
 DC.L $01820AAF ;             91

 DC.L $8001FFFE ;             92
 DC.L $01820AA0 ;             93
 DC.L $8201FFFE ;             94
 DC.L $01820BB0 ;             95
 DC.L $8401FFFE ;             96
 DC.L $01820CC0 ;             97
 DC.L $8601FFFE ;             98
 DC.L $01820DD0 ;             99
 DC.L $8801FFFE ;             100
 DC.L $01820EE0 ;             101
 DC.L $8A01FFFE ;             102
 DC.L $01820FF0 ;             103
 DC.L $8C01FFFE ;             104
 DC.L $01820FF2 ;             105
 DC.L $8E01FFFE ;             106
 DC.L $01820FF4 ;             107
 DC.L $9001FFFE ;             108
 DC.L $01820FF6 ;             109
 DC.L $9201FFFE ;             110
 DC.L $01820FF8 ;             111
 DC.L $9401FFFE ;             112
 DC.L $01820FFA ;             113
 DC.L $9601FFFE ;             114
 DC.L $01820FF8 ;             115
 DC.L $9801FFFE ;             116
 DC.L $01820FF6 ;             117
 DC.L $9A01FFFE ;             118
 DC.L $01820FF4 ;             119
 DC.L $9C01FFFE ;             120
 DC.L $01820FF2 ;             121
 DC.L $9E01FFFE ;             122
 DC.L $01820FF0 ;             123
 DC.L $A001FFFE ;             124
 DC.L $01820EE0 ;             125
 DC.L $A201FFFE ;             126
 DC.L $01820DD0 ;             127
 DC.L $A401FFFE ;             128
 DC.L $01820CC0 ;             129
 DC.L $A601FFFE ;             130
 DC.L $01820BB0 ;             131
 DC.L $A801FFFE ;             132
 DC.L $01820AA0 ;             133
 DC.L $AA01FFFE ;             134
 DC.L $01820990 ;             135
 DC.L $AC01FFFE ;             136
 DC.L $01820880 ;             137
 DC.L $AE01FFFE ;             138
 DC.L $01820990 ;             139
 DC.L $B001FFFE ;             140
 DC.L $01820AA0 ;             141
 DC.L $B201FFFE ;             142
 DC.L $01820BB0 ;             143
 DC.L $B401FFFE ;             144
 DC.L $01820CC0 ;             145
 DC.L $B601FFFE ;             146
 DC.L $01820DD0 ;             147
 DC.L $B801FFFE ;             148
 DC.L $01820EE0 ;             149
 DC.L $BA01FFFE ;             150
 DC.L $01820FF0 ;             151
 DC.L $BC01FFFE ;             152
 DC.L $01820FF2 ;             153
 DC.L $BE01FFFE ;             154
 DC.L $01820FF4 ;             155
 DC.L $C001FFFE ;             156
 DC.L $01820FF6 ;             157
 DC.L $C201FFFE ;             158
 DC.L $01820FF8 ;             159
 DC.L $C401FFFE ;             160
 DC.L $01820FFA ;             161
 DC.L $C601FFFE ;             162
 DC.L $01820FF8 ;             163
 DC.L $C801FFFE ;             164
 DC.L $01820FF6 ;             165
 DC.L $CA01FFFE ;             166
 DC.L $01820FF4 ;             167
 DC.L $CC01FFFE ;             168
 DC.L $01820FF2 ;             169
 DC.L $CE01FFFE ;             170
 DC.L $01820FF0 ;             171
 DC.L $D001FFFE ;             172
 DC.L $01820EE0 ;             173
 DC.L $D201FFFE ;             174
 DC.L $01820DD0 ;             175
 DC.L $D401FFFE ;             176
 DC.L $01820CC0 ;             177
 DC.L $D601FFFE ;             178
 DC.L $01820BB0 ;             179
 DC.L $D801FFFE ;             180
 DC.L $01820AA0 ;             181
 DC.L $DA01FFFE ;             182
 DC.L $01820990 ;             183
 DC.L $DC01FFFE ;             184
 DC.L $01820880 ;             185

 DC.L $E301FFFE ;             186
 DC.L $018200F0 ;             187
 DC.L $E401FFFE ;             188
 DC.L $018202F2 ;             189
 DC.L $E501FFFE ;             190
 DC.L $018204F4 ;             191
 DC.L $E601FFFE ;             192
 DC.L $018206F6 ;             193
 DC.L $E701FFFE ;             194
 DC.L $018204F4 ;             195
 DC.L $E801FFFE ;             196
 DC.L $018202F2 ;             197
 DC.L $E901FFFE ;             198
 DC.L $018200F0 ;             199

 DC.L $F601FFFE ; x=0 y=244   200
 DC.L $01000200 ; bplcon0     201
 DC.L $FFFFFFFE ; waitforever 202

COP2:
 DC.L $2B01FFFE ; x=0 y=43   0

 DC.L $008E2C81 ; diwstart   1
 DC.L $01000200 ; bplcon0    2
 DC.L $01040000 ; bplcon2    3
 DC.L $0090F4C1 ; diwstop    4
 DC.L $00920038 ; ddfstrt    5
 DC.L $009400D0 ; ddfstop    6
 DC.L $01020000 ; bplcon1    7
 DC.L $01080000 ; bpl1mod    8
 DC.L $010A0000 ; bpl2mod    9

 DC.L $00E00000 ; BPL0ptrh   10
 DC.L $00E20000 ; BPL0ptrl   11
 DC.L $01800000 ;            12

 DC.L $2E01FFFE ; x=0 y=44   13
 DC.L $01001200 ;            14

 DC.L $01820600 ;            15
 DC.L $3101FFFE ;            16
 DC.L $01820700 ;            17
 DC.L $3301FFFE ;            18
 DC.L $01820800 ;            19
 DC.L $3501FFFE ;            20
 DC.L $01820900 ;            21
 DC.L $3701FFFE ;            22
 DC.L $01820A00 ;            23
 DC.L $3901FFFE ;            24
 DC.L $01820B00 ;            25
 DC.L $3B01FFFE ;            26
 DC.L $01820C00 ;            27
 DC.L $3D01FFFE ;            28
 DC.L $01820D00 ;            29
 DC.L $3F01FFFE ;            30
 DC.L $01820E00 ;            31
 DC.L $4101FFFE ;            32
 DC.L $01820F00 ;            33
 DC.L $4301FFFE ;            34
 DC.L $01820F01 ;            35
 DC.L $4501FFFE ;            36
 DC.L $01820F02 ;            37
 DC.L $4701FFFE ;            38
 DC.L $01820F03 ;            39
 DC.L $4901FFFE ;            40
 DC.L $01820F04 ;            41
 DC.L $4B01FFFE ;            42
 DC.L $01820F05 ;            43
 DC.L $4D01FFFE ;            44
 DC.L $01820F06 ;            45
 DC.L $4F01FFFE ;            46
 DC.L $01820F07 ;            47
 DC.L $5101FFFE ;            48
 DC.L $01820F08 ;            49
 DC.L $5301FFFE ;            50
 DC.L $01820F09 ;            51
 DC.L $5501FFFE ;            52
 DC.L $01820F0A ;            53
 DC.L $5701FFFE ;            54
 DC.L $01820F0B ;            55
 DC.L $5901FFFE ;            56
 DC.L $01820F0C ;            57
 DC.L $5B01FFFE ;            58
 DC.L $01820F0D ;            59
 DC.L $5D01FFFE ;            60
 DC.L $01820F0E ;            61
 DC.L $5F01FFFE ;            62
 DC.L $01820F0F ;            63
 DC.L $6101FFFE ;            64
 DC.L $01820F1F ;            65
 DC.L $6301FFFE ;            66
 DC.L $01820F2F ;            67

 DC.L $6501FFFE ;            68
 DC.L $01820411 ;            69
 DC.L $6701FFFE ;            70
 DC.L $01820521 ;            71
 DC.L $6901FFFE ;            72
 DC.L $01820632 ;            73
 DC.L $6B01FFFE ;            74
 DC.L $01820742 ;            75
 DC.L $6D01FFFE ;            76
 DC.L $01820853 ;            77
 DC.L $6F01FFFE ;            78
 DC.L $01820963 ;            79
 DC.L $7101FFFE ;            80
 DC.L $01820A74 ;            81
 DC.L $7301FFFE ;            82
 DC.L $01820B84 ;            83
 DC.L $7501FFFE ;            84
 DC.L $01820C95 ;            85
 DC.L $7701FFFE ;            86
 DC.L $01820DA5 ;            87

 DC.L $7C01FFFE ;            88
 DC.L $0182055F ;            89
 DC.L $7D01FFFE ;            90
 DC.L $0182077F ;            91
 DC.L $7E01FFFE ;            92
 DC.L $0182099F ;            93
 DC.L $7F01FFFE ;            94
 DC.L $01820BBF ;            95
 DC.L $8001FFFE ;            96
 DC.L $0182099F ;            97
 DC.L $8101FFFE ;            98
 DC.L $0182077F ;            99
 DC.L $8201FFFE ;            100
 DC.L $0182055F ;            101

 DC.L $8701FFFE ;            102
 DC.L $01820999 ;            103
 DC.L $8801FFFE ;            104
 DC.L $01820BBB ;            105
 DC.L $8901FFFE ;            106
 DC.L $01820DDD ;            107
 DC.L $8A01FFFE ;            108
 DC.L $01820FFF ;            109
 DC.L $8B01FFFE ;            110
 DC.L $01820DDD ;            111
 DC.L $8C01FFFE ;            112
 DC.L $01820BBB ;            113
 DC.L $8D01FFFE ;            114
 DC.L $01820999 ;            115

 DC.L $9001FFFE ;            116
 DC.L $018208FF ;            117 *
 DC.L $9E01FFFE ;            118
 DC.L $01820606 ;            119 *
 DC.L $AC01FFFE ;            120
 DC.L $01820606 ;            121 *
 DC.L $BA01FFFE ;            122
 DC.L $01820606 ;            123 *
 DC.L $C801FFFE ;            124
 DC.L $01820606 ;            125 *
 DC.L $D701FFFE ;            126
 DC.L $01820606 ;            127 *

 DC.L $EC01FFFE ;            128
 DC.L $018200F0 ;            129
 DC.L $ED01FFFE ;            130
 DC.L $018202F2 ;            131
 DC.L $EE01FFFE ;            132
 DC.L $018204F4 ;            133
 DC.L $EF01FFFE ;            134
 DC.L $018206F6 ;            135
 DC.L $F001FFFE ;            136
 DC.L $018204F4 ;            137
 DC.L $F101FFFE ;            138
 DC.L $018202F2 ;            139
 DC.L $F201FFFE ;            140
 DC.L $018200F0 ;            141

 DC.L $F601FFFE ; x=0 y=244  142
 DC.L $01000200 ; bplcon0    143
 DC.L $FFFFFFFE ; wait       144

COP3:
 DC.L $2B01FFFE ; x=0 y=43   0

 DC.L $008E2C81 ; diwstart   1
 DC.L $01000200 ; bplcon0    2
 DC.L $01040000 ; bplcon2    3
 DC.L $0090F4C1 ; diwstop    4
 DC.L $00920038 ; ddfstrt    5
 DC.L $009400D0 ; ddfstop    6
 DC.L $01020000 ; bplcon1    7
 DC.L $01080000 ; bpl1mod    8
 DC.L $010A0000 ; bpl2mod    9

 DC.L $00E00000 ; BPL0ptrh   10
 DC.L $00E20000 ; BPL0ptrl   11
 DC.L $01800000 ;            12

 DC.L $2E01FFFE ; x=0 y=44   13
 DC.L $01001200 ; bplcon0    14

 DC.L $6501FFFE ;            15
 DC.L $01820F00 ;            16
 DC.L $6601FFFE ;            17
 DC.L $01820F01 ;            18
 DC.L $6801FFFE ;            19
 DC.L $01820F02 ;            20
 DC.L $6A01FFFE ;            21
 DC.L $01820F03 ;            22
 DC.L $6C01FFFE ;            23
 DC.L $01820F04 ;            24
 DC.L $6E01FFFE ;            25
 DC.L $01820F05 ;            26
 DC.L $7001FFFE ;            27
 DC.L $01820F06 ;            28
 DC.L $7201FFFE ;            29
 DC.L $01820F07 ;            30
 DC.L $7401FFFE ;            31
 DC.L $01820F08 ;            32
 DC.L $7601FFFE ;            33
 DC.L $01820F09 ;            34
 DC.L $7801FFFE ;            35
 DC.L $01820F0A ;            36
 DC.L $7A01FFFE ;            37
 DC.L $01820F0B ;            38
 DC.L $7C01FFFE ;            39
 DC.L $01820F0C ;            40
 DC.L $7E01FFFE ;            41
 DC.L $01820F0D ;            42
 DC.L $8001FFFE ;            43
 DC.L $01820F0E ;            44
 DC.L $8201FFFE ;            45
 DC.L $01820F0F ;            46
 DC.L $8401FFFE ;            47
 DC.L $01820E0F ;            48
 DC.L $8601FFFE ;            49
 DC.L $01820D0F ;            50
 DC.L $8801FFFE ;            51
 DC.L $01820C0F ;            52
 DC.L $8A01FFFE ;            53
 DC.L $01820B0F ;            54
 DC.L $8C01FFFE ;            55
 DC.L $01820A0F ;            56
 DC.L $8E01FFFE ;            57
 DC.L $0182090F ;            58
 DC.L $9001FFFE ;            59
 DC.L $0182080F ;            60
 DC.L $9201FFFE ;            61
 DC.L $0182070F ;            62
 DC.L $9401FFFE ;            63
 DC.L $0182060F ;            64
 DC.L $9601FFFE ;            65
 DC.L $0182050F ;            66
 DC.L $9801FFFE ;            67
 DC.L $0182040F ;            68
 DC.L $9A01FFFE ;            69
 DC.L $0182030F ;            70
 DC.L $9C01FFFE ;            71
 DC.L $0182020F ;            72
 DC.L $9E01FFFE ;            73
 DC.L $0182010F ;            74
 DC.L $A001FFFE ;            75
 DC.L $0182000F ;            76
 DC.L $A201FFFE ;            77
 DC.L $0182001F ;            78
 DC.L $A401FFFE ;            79
 DC.L $0182002F ;            80
 DC.L $A601FFFE ;            81
 DC.L $0182003F ;            82
 DC.L $A801FFFE ;            83
 DC.L $0182004F ;            84
 DC.L $AA01FFFE ;            85
 DC.L $0182005F ;            86
 DC.L $AC01FFFE ;            87
 DC.L $0182006F ;            88
 DC.L $AE01FFFE ;            89
 DC.L $0182007F ;            90
 DC.L $B001FFFE ;            91
 DC.L $0182008F ;            92
 DC.L $B201FFFE ;            93
 DC.L $0182009F ;            94
 DC.L $B401FFFE ;            95
 DC.L $018200AF ;            96
 DC.L $B601FFFE ;            97
 DC.L $018200BF ;            98
 DC.L $B801FFFE ;            99
 DC.L $018200CF ;            100
 DC.L $BA01FFFE ;            101
 DC.L $018200DF ;            102

 DC.L $F601FFFE ; x=0 y=244  103
 DC.L $01000200 ; bplcon0    104
 DC.L $FFFFFFFE ; wait       105

COP4:
 DC.L $2B01FFFE ; x=0 y=43   0

 DC.L $008E2C81 ; diwstart   1
 DC.L $01000200 ; bplcon0    2
 DC.L $01040000 ; bplcon2    3
 DC.L $0090F4C1 ; diwstop    4
 DC.L $00920038 ; ddfstrt    5
 DC.L $009400D0 ; ddfstop    6
 DC.L $01020000 ; bplcon1    7
 DC.L $01080000 ; bpl1mod    8
 DC.L $010A0000 ; bpl2mod    9

 DC.L $00E00000 ; BPL0ptrh   10
 DC.L $00E20000 ; BPL0ptrl   11
 DC.L $00E40000 ; BPL1ptrh   12
 DC.L $00E60000 ; BPL1ptrl   13
 DC.L $00E80000 ; BPL2ptrh   14
 DC.L $00EA0000 ; BPL2ptrl   15
 DC.L $00EC0000 ; BPL3ptrh   16
 DC.L $00EE0000 ; BPL3ptrl   17
 DC.L $00F00000 ; BPL4ptrh   18
 DC.L $00F20000 ; BPL4ptrl   19
 DC.L $01800000 ; color 0    20

 DC.L $2E01FFFE ; x=0 y=44   21
 DC.L $01005200 ; bplcon0    22
 DC.L $01820FFF ; color 1    23
 DC.L $2F01FFFE ;            24
 DC.L $01820EEE ;            25
 DC.L $3001FFFE ;            26
 DC.L $01820DDD ;            27
 DC.L $3101FFFE ;            28
 DC.L $01820CCC ;            29
 DC.L $3201FFFE ;            30
 DC.L $01820BBB ;            31
 DC.L $3301FFFE ;            32
 DC.L $01820AAA ;            33
 DC.L $3401FFFE ;            34
 DC.L $01820999 ;            35
 DC.L $3501FFFE ;            36
 DC.L $01820888 ;            37
 DC.L $3601FFFE ;            38
 DC.L $01820777 ;            39
 DC.L $3701FFFE ;            40
 DC.L $01820666 ;            41
 DC.L $3801FFFE ;            42
 DC.L $01820777 ;            43
 DC.L $3901FFFE ;            44
 DC.L $01820888 ;            45
 DC.L $3A01FFFE ;            46
 DC.L $01820999 ;            47
 DC.L $3B01FFFE ;            48
 DC.L $01820AAA ;            49
 DC.L $3C01FFFE ;            50
 DC.L $01820BBB ;            51
 DC.L $3D01FFFE ;            52
 DC.L $01820CCC ;            53
 DC.L $3E01FFFE ;            54
 DC.L $01820DDD ;            55
 DC.L $3F01FFFE ;            56
 DC.L $01820EEE ;            57
 DC.L $4001FFFE ;            58
 DC.L $01820FFF ;            59
 DC.L $4101FFFE ;            60
 DC.L $01820EEE ;            61
 DC.L $4201FFFE ;            62
 DC.L $01820DDD ;            63
 DC.L $4301FFFE ;            64
 DC.L $01820CCC ;            65
 DC.L $4401FFFE ;            66
 DC.L $01820BBB ;            67
 DC.L $4501FFFE ;            68
 DC.L $01820AAA ;            69
 DC.L $4601FFFE ;            70
 DC.L $01820999 ;            71
 DC.L $4701FFFE ;            72
 DC.L $01820888 ;            73
 DC.L $4801FFFE ;            74
 DC.L $01820777 ;            75
 DC.L $4901FFFE ;            76
 DC.L $01820666 ;            77
 DC.L $4A01FFFE ;            78
 DC.L $01820777 ;            79
 DC.L $4B01FFFE ;            80
 DC.L $01820888 ;            81

 DC.L $4D01FFFE ;            82
 DC.L $01820000 ; color1     83
 DC.L $01840000 ; color 2    84
 DC.L $01860000 ; color 3    85
 DC.L $01880000 ; color 4    86
 DC.L $018A0000 ; color 5    87
 DC.L $018C0000 ; color 6    88
 DC.L $018E0000 ; color 7    89
 DC.L $01900000 ; color 8    90
 DC.L $01920000 ; color 9    91
 DC.L $01940000 ; color 10   92
 DC.L $01960000 ; color 11   93
 DC.L $01980000 ; color 12   94
 DC.L $019A0000 ; color 13   95
 DC.L $019C0000 ; color 14   96
 DC.L $019E0000 ; color 15   97
 DC.L $01A00000 ; color 16   98
 DC.L $01A20000 ; color 17   99
 DC.L $01A40000 ; color 18   100
 DC.L $01A60000 ; color 19   101
 DC.L $01A80000 ; color 20   102
 DC.L $01AA0000 ; color 21   103
 DC.L $01AC0000 ; color 22   104
 DC.L $01AE0000 ; color 23   105
 DC.L $01B00000 ; color 24   106
 DC.L $01B20000 ; color 25   107
 DC.L $01B40000 ; color 26   108
 DC.L $01B60000 ; color 27   109
 DC.L $01B80000 ; color 28   110
 DC.L $01BA0000 ; color 29   111
 DC.L $01BC0000 ; color 30   112
 DC.L $01BE0000 ; color 31   113

 DC.L $F601FFFE ; x=0 y=244  114
 DC.L $01000200 ; bplcon0    115
 DC.L $FFFFFFFE ; wait       116

 END
