home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga MA Magazine 1998 #6
/
amigamamagazinepolishissue1998.iso
/
coders
/
sources
/
8planes
/
8bitplane-screen.s
next >
Wrap
Text File
|
1980-01-10
|
5KB
|
291 lines
ùúùúÿ÷ÿ÷ÿ÷ÿ÷ÿ÷ÿ÷ÿ÷ÿ÷ÿ÷ section prg,code_c
include "df1:sources/registres.s"
;*************** INDEX FONCTIONS ***************
openlib=-552
closelib=-414
allocmem=-198
freemem=-210
permit=-138
forbid=-132
;*************** PARAMETRES DE L'ECRAN ***************
nbplane=8
sizex=320
sizey=256
startx=129 ;depart horizontal du tracé
starty=45 ;depart vertical du tracé
tracex=320 ;largeur de l'image a tracer à ...
;... partir de startx
displayx=320 ;largeur de l'image a visualiser à ...
;... partir de startdisplayx
displayy=sizey ;hauteur de l'image a visualiser à ...
;... partir de starty
startdisplayx=129 ;debut horizontal visible de l'image
stopx=displayx+startdisplayx-256 ;fin horizontale visible de l'image
stopy=displayy+starty-256 ;fin verticale visible de l'image
ddf_strt=(startx-17)/2
ddf_stop=ddf_strt+(tracex/2-8)
modulo_pair=(sizex-tracex)/8
modulo_impair=(sizex-tracex)/8
planesize=sizey*sizex/8
;*************** CONSTANTES ***************
;----- pas d'incrementation des couleurs -----
step_R=1
step_G=1
step_B=0
;----- divers -----
execbase=$4
memory=2+$10000
copsize=8*2*(32+1)*4+10*4+8*nbplane+4
;8*2*(32+1)*4 (palette de 256 couleurs)
;10*4 (parametres ecran)
;8*nbplane (adresses bitplanes)
;4 (FFFFFFFE)
;*************** PROGRAMME PRINCIPAL ***************
bsr.w init
;----- attente -----
boucle:
btst #6,$bfe001
bne boucle
bsr fin
rts
;*************** INITIALISATION ***************
init:
;----- forbid -----
move.l execbase,a6
jsr forbid(a6)
;----- reservation de la memoire copper -----
move.l execbase,a6
move.l #copsize,d0
move.l #memory,d1
jsr allocmem(a6)
move.l d0,copadr
;----- creation de la copperlist -----
move.l copadr,a0
moveq #0,d0 ;R
moveq #0,d1 ;G
moveq #0,d2 ;B
movea.l a0,a1
add.w #8*(32+1)*4,a0
moveq #8-1,d7
coploop1:
move.w buffer,d6
move.w #$0106,(a1)+
move.w d6,(a1)+
move.w #$0106,(a0)+
or.w #$0200,d6
move.w d6,(a0)+
add.w #$2000,buffer
move.w #$0180,d3
moveq #32-1,d6
coploop0:
move.w d3,(a1)+
move.w d0,d4
and.w #$00F0,d4
lsl.w #4,d4
move.w d1,d5
and.w #$00F0,d5
or.w d5,d4
move.w d2,d5
and.w #$00F0,d5
lsr.w #4,d5
or.w d5,d4
move.w d4,(a1)+
move.w d3,(a0)+
move.w d0,d4
and.w #$000F,d4
lsl.w #8,d4
move.w d1,d5
and.w #$000F,d5
lsl.w #4,d5
or.w d5,d4
move.w d2,d5
and.w #$000F,d5
or.w d5,d4
move.w d4,(a0)+
addq.w #step_R,d0
addq.w #step_G,d1
; addq.w #step_B,d2
addq.w #2,d3
dbf d6,coploop0
dbf d7,coploop1
move.w #$008E,(a0)+ ;DIWSTRT
move.w #starty*256+startdisplayx,(a0)+
move.w #$0090,(a0)+ ;DIWSTOP
move.w #stopy*256+stopx,(a0)+
move.w #$0100,(a0)+ ;BPLCON0
moveq #0,d0
bset #4,d0
bset #9,d0
move.w d0,(a0)+
move.w #$0102,(a0)+ ;BPLCON1
move.w #$0000,(a0)+
move.w #$0104,(a0)+ ;BPLCON2
move.w #$0000,(a0)+
move.w #$0092,(a0)+ ;DDFSTRT
move.w #ddf_strt,(a0)+
move.w #$0094,(a0)+ ;DDFSTOP
move.w #ddf_stop,(a0)+
move.w #$0108,(a0)+ ;BPL1MOD
move.w #modulo_pair,(a0)+
move.w #$010A,(a0)+ ;BPL2MOD
move.w #modulo_impair,(a0)+
move.l #$01FC0000,(a0)+
move.l #plane0adr,d0
move.w #$E0,(a0)+
swap d0
move.w d0,(a0)+
move.w #$E2,(a0)+
swap d0
move.w d0,(a0)+
move.l #plane1adr,d0
move.w #$E4,(a0)+
swap d0
move.w d0,(a0)+
move.w #$E6,(a0)+
swap d0
move.w d0,(a0)+
move.l #plane2adr,d0
move.w #$E8,(a0)+
swap d0
move.w d0,(a0)+
move.w #$EA,(a0)+
swap d0
move.w d0,(a0)+
move.l #plane3adr,d0
move.w #$EC,(a0)+
swap d0
move.w d0,(a0)+
move.w #$EE,(a0)+
swap d0
move.w d0,(a0)+
move.l #plane4adr,d0
move.w #$F0,(a0)+
swap d0
move.w d0,(a0)+
move.w #$F2,(a0)+
swap d0
move.w d0,(a0)+
move.l #plane5adr,d0
move.w #$F4,(a0)+
swap d0
move.w d0,(a0)+
move.w #$F6,(a0)+
swap d0
move.w d0,(a0)+
move.l #plane6adr,d0
move.w #$F8,(a0)+
swap d0
move.w d0,(a0)+
move.w #$FA,(a0)+
swap d0
move.w d0,(a0)+
move.l #plane7adr,d0
move.w #$FC,(a0)+
swap d0
move.w d0,(a0)+
move.w #$FE,(a0)+
swap d0
move.w d0,(a0)+
move.l #$FFFFFFFE,(a0)
;modif DMA,...
move.w #$03F0,dmacon ;couper tous les DMA
move.l copadr,cop1lch ;adresse coplist1
clr.w copjmp1 ;copjump1
move.w #$87C0,dmacon ;COPEN et BPLEN et BLTPRI et BLTEN
rts
;*************** FIN DE PROGRAMME ***************
fin:
;----- restaurer la copperlist dos -----
move.l execbase,a6
move.l #gfxname,a1
jsr openlib(a6)
move.l d0,a1
move.l 38(a1),cop1lch
clr.w copjmp1
jsr closelib(a6)
;----- liberation de la memoire copper -----
move.l copadr,a1
move.l #copsize,d0
jsr freemem(a6)
;----- restaurer les canaux DMA -----
move.w #$83F0,dmacon
;----- permit -----
jsr permit(a6)
rts
;*************** VARIABLES ***************
buffer: dc.w 0
plane0adr: incbin "df1:graphics/plane0.raw"
plane1adr: incbin "df1:graphics/plane1.raw"
plane2adr: incbin "df1:graphics/plane2.raw"
plane3adr: incbin "df1:graphics/plane3.raw"
plane4adr: incbin "df1:graphics/plane4.raw"
plane5adr: incbin "df1:graphics/plane5.raw"
plane6adr: incbin "df1:graphics/plane6.raw"
plane7adr: incbin "df1:graphics/plane7.raw"
copadr: dc.l 0
gfxname: dc.b "graphics.library",0
even