bpsize=22528
startData=511*1024 ;start data
landblitadr=startdata-1408-4 ; 40*8 adresses
landcharadr=landblitadr-2560
bplan5=landcharadr-bpsize
bplan4=bplan5-bpsize
bplan3=bplan4-bpsize
bplan2=bplan3-bpsize
bplan1=bplan2-bpsize
enddata=bplan1

vbwait=46
NULL=0
CUST=$DFF000

startddf=40 ;48 en mode scrolling / 56 en mode non-scrolling
stopddf=216 ;208
startdiw=$2c7b ; 2181
enddiw=$2cc7 ;2cc1
startwait=$2e

maxspeed=1
minspeed=0

MOVEM.L D0-D7/A0-A6,-(SP)
MOVE.L $6C,OLDIRQ
MOVE INTENAR,OLDINT
MOVE #%0111111111111111,INTENA
MOVE DMACONR,OLDDMA
MOVE #%0111111111111111,DMACON
OR.w #%1000000000000000,OLDINT
OR.w #%1000000000000000,OLDDMA

;efface memoire
 lea enddata,a0
 move.l #enddata,d0
 move.l #startdata,d7
 sub.l d0,d7
 divu #4,d7
emc1:
 clr.l (a0)+
 dbra d7,emc1

;initialise les couleurs du pic test
 lea char+102400,a0
 lea color00,a1
 move.w #31,d0
initcol1:
 move.w (a0)+,(a1)+
 dbra d0,initcol1


;routine d'initialisation des adresses blitter du landscape
 lea landblitadr,a0
 clr.l d0 ; pos x
 move.w #43,d7 ; 44*16 pixels
landinit1:
 move.l d0,-(sp)
 add.l #bplan1,d0
 move.w #7,d6 ;hauteur = 8*32 pixels
landinit2:
 move.l d0,(a0)+
 add.l #32*88,d0
 dbra d6,landinit2
 move.l (sp)+,d0
 add.l #2,d0
 dbra d7,landinit1
 move.l #$ffffffff,(a0)+

;routine d'initialisation des adresses blitter du landcharadr
 lea landcharadr,a0
 clr.l d0 ; pos x
 move.w #31,d7 ;16*16=256 (hauteur)
charinit1:
 move.l d0,-(sp)
 add.l #char,d0
 move.w #19,d6 ;20*16=320 (largeur)
charinit2:
 move.l d0,(a0)+
 add.l #2,d0
 dbra d6,charinit2
 move.l (sp)+,d0
 add.l #640,d0
 dbra d7,charinit1

 MOVE.L #newcopper,cop2lch
 MOVE.w copjmp2,D0
 MOVE.w #%1000011111000000,dmacon

 MOVE.L #newirq,$6c
 MOVE.w #%1100000000100000,intena

;----

wait:
 btst #6,$bfe001  ; linke maustaste ???
bne wait

;----

endprg:
 MOVE.w #%0111111111111111,INTENA
 MOVE.w #%0111111111111111,DMACON
 MOVE.L OLDIRQ,$6C 
 MOVE.w OLDINT,INTENA
 MOVE.w OLDDMA,DMACON
 MOVE.w COPJMP1,D0
 MOVEM.L (SP)+,D0-D7/A0-A6
 rts
pause: dc.w 3
modulo: dc.w 0
newirq:
 movem.l d0-d7/a0-a6,-(sp)

waitvb2:
; cmp.b #0,vhposr
; bne waitvb2

waitvb:
; cmp.b #vbwait,vhposr
; bne waitvb

 bsr scroland

;remet nouveau bplcon1
 move.w landscroll,d0
 move.w d0,landcon1
 lsl.w #4,d0
 or.w d0,landcon1
 
;readressage des pointeur plans
 lea copadr1+2,a0
 lea landpoint,a1
 move.l #4,d6 ; var reg !

 move.w #4,d0
reapoi1:
 move.l (a1)+,d7
 swap d7
 move.w d7,(a0)
 adda.l d6,a0
 swap d7
 move.w d7,(a0)
 adda.l d6,a0
 dbra d0,reapoi1

 ;sub.w #1,pause
 ;bne intend
 ;move.w #3,pause

 ;bsr joytst
 ;cmp.b #1,d0
 ;bne lspeed1
 ;cmp.w #minspeed,landspeed
 ;beq lspeed1
 ;sub.w #1,landspeed
;lspeed1:
; cmp.b #2,d0
; bne lspeed2
; cmp.w #maxspeed,landspeed
; beq lspeed2
; add.w #1,landspeed
;lspeed2:

intend:
 movem.l (sp)+,d0-d7/a0-a6
 move.w #$70,intreq
 rte
;variable pour scroller landscape
landstartp: dc.l bplan1-2,bplan2-2,bplan3-2,bplan4-2,bplan5-2
landpoint: dc.l bplan1-2,bplan2-2,bplan3-2,bplan4-2,bplan5-2
landscroll: dc.w 0
landposx: dc.w 353
landspeed: dc.w 1,1 ; 1er a changer
even
scroland:
;affiche 2 caracteres dans zone non-visible avec le blitter

 cmp.w #0,landspeed
 beq scroland4 

 bsr drawchar
 sub.w #1,landposx
 bne scroland1
 move.w #352,landposx
 move.l landstartp,landpoint
 move.l landstartp+4,landpoint+4
 move.l landstartp+8,landpoint+8
 move.l landstartp+12,landpoint+12
 move.l landstartp+16,landpoint+16
 bra scroland3
scroland1:
 sub.w #1,landscroll
 cmp.w #-1,landscroll
 bne scroland2
scroland5:
 move.w #15,landscroll
 move.l #2,d2
 add.l d2,landpoint
 add.l d2,landpoint+4
 add.l d2,landpoint+8
 add.l d2,landpoint+12
 add.l d2,landpoint+16
scroland2:
 sub.w #1,landspeed+2
 bne scroland
 move.w landspeed,landspeed+2
 rts
scroland3:
 sub.w #1,landscroll
 cmp.w #-1,landscroll
 bne scroland4
 bra scroland5
scroland4:
 rts

;variable pour affichage des caracteres
lposlevel: dc.l level1,level1-1
lposadr: dc.l landblitadr+704,landblitadr-4 
lmode: dc.b 0 ; 0=nouveau char 1=copie de droite a gauche 2=rien faire 
even
drawchar:

 move.w #%1110101010,bltcon0 ; use D=C
 move.w #%0,bltcon1
 move.w #86,bltdmod

 cmp.b #1,lmode
 beq copychar

 move.w #38,bltcmod
 move.l lposadr,a0
 move.l (a0)+,d0 ; d0=pointeur destination
 move.l d0,d1 ; copie
 bsr findchar
 move.w #4,d4
drawchar1:
 btst #6,$dff002 ; blitter operation finish ?
 bne drawchar1
 move.l d2,bltcpth
 move.l d0,bltdpth
 move.w #%10000000001,bltsize
 add.l #20480,d2
 add.l #bpsize,d0
 dbra d4,drawchar1
 add.l #1408,d1 ; 16 ligne plus loin
 cmp.b #$ff,(a0) ; est-ce fin de data
 bne drawchar2
 move.b #1,lmode
 move.l lposadr+4,lposadr
drawchar2:
 add.l #4,lposadr
 bsr findchar
 move.w #4,d4
drawchar3:
 btst #6,$dff002 ; blitter operation finish ?
 bne drawchar3
 move.l d2,bltcpth
 move.l d1,bltdpth
 move.w #%10000000001,bltsize
 add.l #20480,d2
 add.l #bpsize,d1
 dbra d4,drawchar3
 rts

findchar:
 move.l lposlevel,a1
 clr.l d2
 move.w (a1)+,d2
 adda.l #2,a1
 cmp.w #$ffff,(a1)
 bne findchar2
 move.l lposlevel+4,lposlevel
findchar2:
 add.l #4,lposlevel
 lsl.l #2,d2
 lea landcharadr,a1
 adda.l d2,a1
 move.l (a1),d2
 rts ; d2=adresse du character

even
copychar:
 move.w #86,bltcmod
 move.l lposadr,a0
 move.l (a0)+,d0
 move.l (a0),d1
 cmp.l landblitadr+704,d1
 bne copychar1
 move.b #0,lmode
copychar1:
 add.l #4,lposadr
 move.l d0,d1
 add.l #44,d1
 move.w #4,d3
copychar2:
 btst #6,$dff002 ; blitter operation finish ?
 bne copychar2
 move.l d1,bltcpth
 move.l d0,bltdpth
 move.w #%100000000001,bltsize
 add.l #bpsize,d1
 add.l #bpsize,d0
 dbra d3,copychar2
 rts

;ROUTINE DE TEST DE JOYSTICK DANS LE PORT 1
;au retour D0 contient: droite=2 ; gauche=1
;avant=4 ; arriere=8 ; rien=0 ;pour les autres pos., additioner!
;D0=1 si boutton est active ..
JOYTST:
 clr.l d0 ; etat du joystick a zero au debut
 move.b joy1dat,d1
 move.b joy1dat+1,d2
 btst #1,d1 ; test right
 beq joytst2
 add.b #1,d0
joytst2:
 btst #1,d2 ; test left
 beq joytst3
 add.b #2,d0
joytst3:
 move.b d1,d3
 lsl.b #1,d3
 eor.b d1,d3
 btst #1,d3 ; test back
 beq joytst4
 add.b #4,d0
joytst4:
 move.b d2,d3
 lsl.b #1,d3
 eor.b d2,d3
 btst #1,d3 ; test forward
 beq joytst5
 add.b #8,d0
joytst5: ; test fire button
 clr.b d1
 btst #7,$bfe001
 bne joyend
 move.b #1,d1
joyend:
 rts

even
newcopper:
 dc.w color00-cust,0
 dc.w BPLCON0-CUSt,%0101001000000000
 dc.w ddfstrt-cust,startddf
 dc.w ddfstop-cust,stopddf
 dc.w diwstrt-cust,startdiw
 dc.w diwstop-cust,enddiw
 dc.w bplcon2-cust,0
 dc.w spr0datb-cust,0
 dc.w spr0data-cust,0
 dc.w bplcon1-cust
landcon1: dc.w 0
 dc.w bpl1mod-cust,42
 dc.w bpl2mod-cust,42
copadr1:
 dc.w BPL1PTH-cust,bplan1/$10000,bpl1ptl-cust,bplan1&$ffff
 dc.w BPL2PTH-cust,bplan2/$10000,bpl2ptl-cust,bplan2&$ffff
 dc.w BPL3PTH-cust,bplan3/$10000,bpl3ptl-cust,bplan3&$ffff
 dc.w BPL4PTH-cust,bplan4/$10000,bpl4ptl-cust,bplan4&$ffff
 dc.w BPL5PTH-cust,bplan5/$10000,bpl5ptl-cust,bplan5&$ffff
 dc.l $fffffffe ; fin
even
oldirq: dc.l 0
oldint: dc.w 0
olddma: dc.w 0

char: blk.b 102400+64
level1: blk.b 61440
 dc.w $ffff

;=====LIStE=======REGIStRES====================
BLtDDAt=$DFF000
DMACONR=$DFF002
VPOSR=$DFF004
VHPOSR=$DFF006
DSKDAtR=$DFF008
JOY0DAt=$DFF00A
JOY1DAt=$DFF00C
CLXDAt=$DFF00E
ADKCONR=$DFF010
POt0DAt=$DFF012
POt1DAt=$DFF014
POtGOR=$DFF016
SERDAtR=$DFF018
DKSBYtR=$DFF01A 
INtENAR=$DFF01C
INtREQR=$DFF01E
DSKPtH=$DFF020
DSKPtL=$DFF022
DSKLEN=$DFF024
DSKDAt=$DFF026
REFPtR=$DFF028
VPOSW=$DFF02A
VHPOSW=$DFF02C
COPCON=$DFF02E
SERDAt=$DFF030
SERPER=$DFF032
POtGO=$DFF034
JOYtESt=$DFF036
StREQU=$DFF038
StRVBL=$DFF03A
StRHOR=$DFF03C
StRLONG=$DFF03E
BLtCON0=$DFF040
bltcon1=$DFF042
BLtAFWM=$DFF044
BLtALWM=$DFF046
BLtCPtH=$DFF048
BLtCPtL=$DFF04A
BLtBPtH=$DFF04C
BLtBPtL=$DFF04E
BLtAPtH=$DFF050
BLtAPtL=$DFF052
BLtDPtH=$DFF054
BLtDPtL=$DFF056
BLtsize=$DFF058
BLtCMOD=$DFF060
BLtBMOD=$DFF062
BLtAMOD=$DFF064
BLtDMOD=$DFF066
BLtCDAt=$DFF070
BLtBDAt=$DFF072
BLtADAt=$DFF074
DSKSYNC=$DFF07E
COP1LCH=$DFF080
COP1LCL=$DFF082
COP2LCH=$DFF084
COP2LCL=$DFF086
COPJMP1=$DFF088
COPJMP2=$DFF08A
COPINS=$DFF08C
DIWStRt=$DFF08E
DIWStOP=$DFF090
DDFStRt=$DFF092
DDFStOP=$DFF094
DMACON=$DFF096
CLXCON=$DFF098
INtENA=$DFF09A
INtREQ=$DFF09C
ADKCON=$DFF09E
AUD0LCH=$DFF0A0
AUD0LCL=$DFF0A2
AUD0LEN=$DFF0A4
AUD0PER=$DFF0A6
AUD0VOL=$DFF0A8
AUD0DAt=$DFF0AA
AUD1LCH=$DFF0B0
AUD1LCL=$DFF0B2
AUD1LEN=$DFF0B4
AUD1PER=$DFF0B6
AUD1VOL=$DFF0B8
AUD1DAt=$DFF0BA
AUD2LCH=$DFF0C0
AUD2LCL=$DFF0C2
AUD2LEN=$DFF0C4
AUD2PER=$DFF0C6
AUD2VOL=$DFF0C8
AUD2DAt=$DFF0CA
AUD3LCH=$DFF0D0
AUD3LCL=$DFF0D2
AUD3LEN=$DFF0D4
AUD3PER=$DFF0D6
AUD3VOL=$DFF0D8
AUD3DAt=$DFF0DA
BPL1PtH=$DFF0E0
BPL1PtL=$DFF0E2
BPL2PtH=$DFF0E4
BPL2PtL=$DFF0E6
BPL3PtH=$DFF0E8
BPL3PtL=$DFF0EA
BPL4PtH=$DFF0EC
BPL4PtL=$DFF0EE
BPL5PtH=$DFF0F0
BPL5PtL=$DFF0F2
BPL6PtH=$DFF0F4
BPL6PtL=$DFF0F6
BPLCON0=$DFF100
BPLCON1=$DFF102
BPLCON2=$DFF104
BPL1MOD=$DFF108
BPL2MOD=$DFF10A
BPL1DAt=$DFF110
BPL2DAt=$DFF112
BPL3DAt=$DFF114
BPL4DAt=$DFF116
BPL5DAt=$DFF118
BPL6DAt=$DFF11A
SPR0PtH=$DFF120
SPR0PtL=$DFF122
SPR1PtH=$DFF124
SPR1PtL=$DFF126
SPR2PtH=$DFF128
SPR2PtL=$DFF12A
SPR3PtH=$DFF12C
SPR3PtL=$DFF12E
SPR4PtH=$DFF130
SPR4PtL=$DFF132
SPR5PtH=$DFF134
SPR5PtL=$DFF136
SPR6PtH=$DFF138
SPR6PtL=$DFF13A
SPR7PtH=$DFF13C
SPR7PtL=$DFF13E
SPR0POS=$DFF140
SPR0CtL=$DFF142
SPR0DAtA=$DFF144
SPR0DAtB=$DFF146
SPR1POS=$DFF148
SPR1CtL=$DFF14A
SPR1DAtA=$DFF14C
SPR1DAtB=$DFF14E
SPR2POS=$DFF150
SPR2CtL=$DFF152
SPR2DAtA=$DFF154
SPR2DAtB=$DFF156
SPR3POS=$DFF158
SPR3CtL=$DFF15A
SPR3DAtA=$DFF15C
SPR3DAtB=$DFF15E
SPR4POS=$DFF160
SPR4CtL=$DFF162
SPR4DAtA=$DFF164
SPR4DAtB=$DFF166
SPR5POS=$DFF168
SPR5CtL=$DFF16A
SPR5DAtA=$DFF16C
SPR5DAtB=$DFF16E
SPR6POS=$DFF170
SPR6CtL=$DFF172
SPR6DAtA=$DFF174
SPR6DAtB=$DFF176
SPR7POS=$DFF178
SPR7CtL=$DFF17A
SPR7DAtA=$DFF17C
SPR7DAtB=$DFF17E
COLOR00=$DFF180
COLOR01=$DFF182
COLOR02=$DFF184
COLOR03=$DFF186
COLOR04=$DFF188
COLOR05=$DFF18A
COLOR06=$DFF18C
COLOR07=$DFF18E
COLOR08=$DFF190
COLOR09=$DFF192
COLOR10=$DFF194
COLOR11=$DFF196
COLOR12=$DFF198
COLOR13=$DFF19A
COLOR14=$DFF19C
COLOR15=$DFF19E
COLOR16=$DFF1A0
COLOR17=$DFF1A2
COLOR18=$DFF1A4
COLOR19=$DFF1A6
COLOR20=$DFF1A8
COLOR21=$DFF1AA
COLOR22=$DFF1AC
COLOR23=$DFF1AE
COLOR24=$DFF1B0
COLOR25=$DFF1B2
COLOR26=$DFF1B4
COLOR27=$DFF1B6
COLOR28=$DFF1B8
COLOR29=$DFF1BA
COLOR30=$DFF1BC
COLOR31=$DFF1BE
; fin des registres 
