@asman,
post #28
; Example of Copper-List usage (simple Cycling Colour Copper Line Effect),
; very popular in early A5oo cracktros
;
; This source is 20 years old, one of my very 1sts, intended to be a
; template for 3 part screen (logo / bar / effect area / bar / scroll)
; I tried to clean up it a bit (cut to 1 bit-plane, modulos, etc.)
;
; Assemble (a) and run (j $40000) in Thrash'm One or...
; Sorry for not relocable code, in A5oo era I didn't care...
;
; Source code for ASM68k thread in Programming forum on www.ppa.pl
;
; Have fun, Sachy ex. SKiD RoW & DiNX Project (12.02.2010)
custom: equ $dff000
dmacon: equ $096
bplcon0: equ $100
bplcon1: equ $102
bplcon2: equ $104
bpl1mod: equ $108
bpl2mod: equ $10a
bpl0pth: equ $0e0
bpl0ptl: equ $0e2
diwstrt: equ $08e
diwstop: equ $090
ddfstrt: equ $092
ddfstop: equ $094
cop1lc: equ $080
copjmp1: equ $088
intena: equ $09a
intreq: equ $09c
intreqr: equ $01e
Execbase: equ 4
forbid: equ -$84
permit: equ -$8a
oldopenlibrary: equ -$198
closelibrary: equ -$19e
org $40000
load $40000
start:
move.l (Execbase).w,a6
movem.l d0-d7/a0-a7,-(sp)
jsr forbid(a6)
bsr.l set_copper
bsr.l set_interrupt
mouse_test:
btst #6,$bfe001
bne.s mouse_test
end_demo:
move.w #$87ff,custom+dmacon
move.l old_interrupt,$6c.w
bsr.l old_copper
jsr permit(a6)
movem.l (sp)+,d0-d7/a0-a7
rts
gfxname: dc.b 'graphics.library',0,0
old_interrupt: dc.l 0
;
set_copper:
move.l #copper1,custom+cop1lc
clr.l custom+copjmp1
move.w #$7fff,custom+dmacon
move.w #$87c0,custom+dmacon
rts
old_copper:
move.l (Execbase).w,a6
lea gfxname,a1
clr.l d0
jsr oldopenlibrary(a6)
move.l d0,a4
move.l $26(a4),custom+cop1lc
clr.l copjmp1
move.l a4,a1
jsr closelibrary(a6)
rts
set_interrupt:
move.l $6c.w,old_interrupt
move.l #new_interrupt,$6c.w
move.w #$8010,custom+intena
rts
new_interrupt:
movem.l d0-d7/a0-a6,-(sp)
bsr.l make_bar
move.w intreqr(a6),intreq(a6)
movem.l (sp)+,d0-d7/a0-a6
rte
;
; COPPER LIST
;
copper1:
dc.l $01fc0000
dc.w bplcon0,$0200
dc.l $1a01fffe ;wait for line 26
dc.w diwstrt,$1e71,diwstop,$34d1 ;set diwstrt & diwstop
dc.w ddfstrt,$0030,ddfstop,$00d8 ;set ddfstrt & ddfstop
dc.w bpl0pth,logo/$10000,bpl0ptl,logo&$ffff
dc.w bpl1mod,0,bpl2mod,0 ;set modulo
dc.l $01800000 ;background colour black
dc.w $1d01,$fffe,bplcon0,$1200 ;wait for line 28, 1 bpl
dc.w $4501,$fffe,bplcon0,$200 ;wait for line 132
dc.l $4607fffe ;wait for line 134
bar1:
blk.l 46,$01800000
dc.l $4735fffe,$01800000 ;wait for line 135
dc.w bplcon0,$200
dc.w bpl0pth,draw_field/$10000,bpl0ptl,draw_field&$ffff
dc.w bpl1mod,0,bpl2mod,0,diwstrt,$2271,diwstop,$38d1
dc.w ddfstrt,$0030,ddfstop,$00d8
dc.w $8901,$fffe,bplcon0,$1200
dc.l $ffdffffe ;end of up screen
dc.l $1401fffe,$01000200
dc.l $1535fffe
bar2:
blk.l 46,$01800000
dc.l $1607fffe,$01800000
dc.w diwstrt,$2271,diwstop,$38d1 ;set diwstrt & diwstop
dc.w ddfstrt,$0030,ddfstop,$00d8 ;set ddfstrt & ddfstop
dc.w bpl1mod,0,bpl2mod,0
dc.w $1801,$fffe,bplcon0,$1200 ; 1 bit-plane
dc.l $3801fffe,bplcon0,$200 ; bit-plame off
dc.l $fffffffe ;end of copper
;
; MAKE BAR
;
mb_count1: dc.w 0
make_bar:
lea custom,a6
lea bar1(pc),a0
lea bar2(pc),a1
lea bar_colors(pc),a2
moveq #0,d0
moveq #0,d1
moveq #45,d2
move.w mb_count1(pc),d0
cmp.w #32*3,d0 ; number of colour values in tab
bne.s mb_loop3
moveq #0,d0
clr.w mb_count1
mb_loop3:
move.w #$180,d1
asl.w #1,d0
mb_loop1:
move.w d1,(a0)+
move.w d1,(a1)+
move.w (a2,d0.l),(a0)+
move.w (a2,d0.l),(a1)+
addq.w #2,d0
cmp.w #64*3,d0 ; number of colours x 2
bne.s mb_loop2
moveq #0,d0
mb_loop2:
dbf d2,mb_loop1
addq.w #1,mb_count1
rts
bar_colors:
dc.w $000,$001,$002,$003,$004,$005,$006,$007,$008,$009,$00a,$00b
dc.w $00c,$00d,$00e,$00f,$00f,$00e,$00d,$00c,$00b,$00a,$009,$008
dc.w $007,$006,$005,$004,$003,$002,$001,$000
dc.w $000,$010,$020,$030,$040,$050,$060,$070,$080,$090,$0a0,$0b0
dc.w $0c0,$0d0,$0e0,$0f0,$0f0,$0e0,$0d0,$0c0,$0b0,$0a0,$090,$080
dc.w $070,$060,$050,$040,$030,$020,$010,$000
dc.w $000,$100,$200,$300,$400,$500,$600,$700,$800,$900,$a00,$b00
dc.w $c00,$d00,$e00,$f00,$f00,$e00,$d00,$c00,$b00,$a00,$900,$800
dc.w $700,$600,$500,$400,$300,$200,$100,$000
draw_field:
blk.b 320 * 256 * 1, $00
logo:
blk.b 320 * 256 * 1, $00