home *** CD-ROM | disk | FTP | other *** search
- ;Dual Playfield demo.
- ;Eksempel på hvordan du kan ha to uavhengige
- ;playfields.
-
- intena= $9a
- intreqr= $1e
- dmacon= $96
- color00= $180
- vposr= $4
-
- cop1lc= $80
- cop2lc= $84
- copjmp1= $88
- copjmp2= $8a
-
- bplcon0= $100
- bplcon1= $102
- bplcon2= $104
- bpl1pth= $0e0
- bpl1ptl= $0e2
- bpl1mod= $108
- bpl2mod= $10a
- diwstrt= $08e
- diwstop= $090
- ddfstrt= $092
- ddfstop= $094
-
- ciaapra= $bfe001
-
- openlibrary= -30-522
- forbid= -30-102
- permit= -30-108
- allocmem= -30-168
- freemem= -30-180
-
- startlist= 38
-
- execbase= 4
- planesize= 52*345
- planewith= 52
- CLsize= 5*4
- chip= 2
- clear= chip+$10000
-
- start:
- move.l execbase,a6 ;reserverer hukommelse
- move.l #planesize*2,d0 ;for bitplanes og
- move.l #clear,d1 ;copper-liste
- jsr allocmem(a6)
- move.l d0,planeadr
- beq ende
- moveq #clsize,d0
- moveq #chip,d1
- jsr allocmem(a6)
- move.l d0,CLadr
- beq freeplane
-
- moveq #1,d4 ;Setter opp copper-
- move.l d0,a0 ;liste.....
- move.l planeadr,d1
- move.w #bpl1pth,d3
- makeCL: move.w d3,(a0)+
- addq.w #2,d3
- swap d1
- move.w d1,(a0)+
- move.w d3,(a0)+
- addq.w #2,d3
- swap d1
- move.w d1,(a0)+
- add.l #planesize,d1
- dbf d4,makeCL
- move.l #$fffffffe,(a0)
-
- jsr forbid(a6) ;...and initialize
- lea $dff000,a5 ;the copper-list
- move.w #$01e0,dmacon(a5)
- move.l CLadr,cop1lc(a5)
- clr.w copjmp1(a5)
-
- move.w #0,color00(a5) ;initialze the graphics
- move.w #$0f00,color00+2(a5) ;screen
- move.w #$000f,color00+18(a5)
- move.w #$1a64,diwstrt(a5) ;vert,hor start = $1a,$64
- move.w #$39d1,diwstop(a5) ;vert,hor end = $139,$1d1
- move.w #$0020,ddfstrt(a5)
- move.w #$00d8,ddfstop(a5)
- move.w #%0010011000000000,bplcon0(a5)
- clr.w bplcon1(a5)
- clr.w bplcon2(a5)
- move.w #4,bpl1mod(a5)
- move.w #4,bpl2mod(a5)
- move.w #$8180,dmacon(a5)
-
- move.l planeadr,a0
- move.w #planesize/2-1,d0
- move.w #13*16,d1
- move.l #$ffff0000,d2
- move.w d1,d3
-
- fill: ;make chessboard pattern
- move.l d2,(a0)+
- subq.w #1,d3
- bne.s continue
- swap d2
- move d1,d3
-
- continue:
- dbf d0,fill
-
- clr.l d0
- clr.l d1
- move.l CLadr,a1
- move.l planeadr,a0
-
- wait: move.l vposr(a5),d2 ;Denne rutinen får datamaskinen
- and.l #$0001ff00,d2 ;til å vente til
- cmp.l #$00001000,d2 ;vert raster pos = $10
- ; ^^
- ;Svært nyttig i mange situasjoner
-
- bne.s wait
-
- addq.b #2,d0
- cmp.w #$80,d0
- bne.s novover
- clr.l d0
- novover:move.l d0,d2
- lsr.w #2,d2
- mulu #52,d2
- add.l a0,d2
- add.l #planesize,d2
- move d2,14(a1)
- swap d2
- move d2,10(a1)
-
- addq.b #1,d1
- cmp.w #$80,d1
- bne.s nohover
- clr.l d1
- nohover:move.l d1,d2
- lsr #2,d2
- move.l d2,d3
- and #$fff0,d2
- sub d2,d3
- move d4,bplcon1(a5)
- move d3,d4
- lsr #3,d2
- add.l a0,d2
- move d2,6(a1)
- swap d2
- move d2,2(a1)
- btst #6,ciaapra
- bne.s wait
-
- move.l #grname,a1
- clr.l d0
- jsr openlibrary(a6)
- move.l d0,a4
- move.l startlist(a4),cop1lc(a5)
- clr copjmp1(a5)
- move.w #$83e0,dmacon(a5)
- jsr permit(a6)
-
- move.l CLadr,a1
- moveq #CLsize,d0
- jsr freemem(a6)
-
- freeplane:
- move.l planeadr,a1
- move.l #planesize*2,d0
- jsr freemem(a6)
-
- ende:
- clr.l d0
- rts
-
- CLadr: dc.l 0
- planeadr: dc.l 0
- test: dc.l 0
- GRname: dc.b 'graphics.library',0
-