Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ;
- ; circles of dots
- ; code by gloky / mjj prod
- ;
- ;
- ;
- TEXT
- standalone EQU 1 ; cette ligne en rem: source utilis dans un merge de plusieur effet
- ; cette ligne activ: le source fonctionne en standalone
- DELAYVECTOR equ 1
- TYPEDELAYVECTOR equ 4 ; pour 4 plan de delay vector 0..3
- ; equ 3 ; pour 3 plan 0..2
- ; 2 pour 2 plan 0..1
- ; 1 inutilis
- NBSCREEN equ 2
- CONFIG equ 1
- ifeq CONFIG
- NBDOTPERCIRCLE equ 32
- NB_POSDOTPERCIRCLE equ 32*8
- NBCIRCLES equ 90
- RAYON_START equ 10
- RAYONMIN equ RAYON_START
- ANGLEWRAP equ 8 ; combien de version du cercle pour angle
- endc
- ifeq (CONFIG-1)
- NBDOTPERCIRCLE equ 32
- NB_POSDOTPERCIRCLE equ 32*16
- NBCIRCLES equ 54 52 38
- RAYON_START equ 20 6 20
- RAYON_STEP equ 2
- RAYONMIN equ RAYON_START
- ANGLEWRAP equ 16 ; combien de version du cercle pour angle
- endc
- CERC6_depart
- ifne STANDALONE
- clr.l -(sp)
- move.w #$20,-(sp)
- trap #1
- addq.l #6,sp
- ENDC
- jsr inittiles
- lea ptrscr,a0
- move.l #screen+256,d0
- clr.b d0
- move.l d0,(a0)+
- add.l #32000,d0
- move.l d0,(a0)
- jsr wvbl
- move.b #0,$ffff8260.w
- MOVE.L ptrscr,a0
- moveq.l #0,d0
- move.w #7999,d1
- cls move.l d0,(a0)+
- move.l d0,(a0)+
- dbf d1,cls
- LEA PICTURE+36,A1
- MOVE.L ptrscr,a0
- lea 32000(a0),a2
- move.w #3999,d1
- moveq #0,d4
- affpic move.w (a1)+,d2
- ;or.w (a1)+,d2
- ;or.w (a1)+,d2
- ;or.w (a1)+,d2
- addq.l #6,a1
- move.w d4,(a0)+
- move.l d4,(a0)+
- move.w d2,(a0)+
- move.w d4,(a2)+
- move.l d4,(a2)+
- move.w d2,(a2)+
- dbf d1,affpic
- jsr initsomething
- jsr initWaves ; doit etre lancé apres initsomething
- movem.l $ffff8240.w,d0-d7
- movem.l d0-d7,oldpalette
- ifne standalone
- move.w #$135,$ffff8240.w
- move.w #$777,$ffff8242.w
- endc
- move.w #100,d0
- .clearpos:
- move.w d0,-(sp)
- jsr calcSpot
- move.w (sp)+,d0
- dbf d0,.clearpos
- ifeq STANDALONE
- rts
- endc
- CIRCLE_main
- ifeq standalone
- move.w #$135,$ffff8240.w
- move.w #$777,$ffff8242.w
- endc
- jsr majscroll
- ifne DELAYVECTOR
- jsr selplan
- move.w selplan0+2,d0
- lea palpatine,a0
- add.w d0,d0
- ;add.w d0,d0
- add.w d0,a0
- move.l (a0),a0
- movem.l (a0)+,d0-d7
- movem.l d0-d7,$ffff8240.w
- endc
- ;movem.l palette00,d0-d7
- ;movem.l d0-d7,$ffff8240.w
- cmp.b #$b9,$fffffc02.w
- beq.w .fin
- ;move.l ptrscr,a0
- ;ifne blitter_cls
- ;jsr gloky_blitter_clear
- ;endc
- ;ifeq blitter_cls
- ;jsr clear_circle
- ;endc
- *move.w #$11,$ffff8240.w
- ;not.b $ffff8240.w
- jsr cleartiles
- ;not.b $ffff8240.w
- jsr calcwave
- ;move.w #0,$ffff8240.w
- move.l ptrscr,a4
- ;addq #6,a4
- ifne DELAYVECTOR
- move.w selplan0+2,d0
- lsr #1,d0
- and.b #$FE,d0
- ext.l d0
- add.l d0,a4
- endc
- jsr displaytiles
- ;move.w #$134,$ffff8240.w
- *not.w $ffff8240.w
- move.l ptrscr,d0
- lsr.w #8,d0
- move.l d0,$ffff8200.w
- move.l ptrscr,d0
- move.l ptrscr+4,d1
- move.l d1,ptrscr
- move.l d0,ptrscr+4
- not $ffff8240.w
- ;not $ffff8240.w
- ifne STANDALONE
- jsr wvbl
- endc
- not $ffff8240.w
- IFNE STANDALONE
- bra CIRCLE_main
- ENDC
- .fin
- ifeq STANDALONE
- rts
- endc
- movem.l oldpalette,d0-d7
- movem.l d0-d7,$ffff8240.w
- move.l $44e.w,d0
- lsr.w #8,d0
- move.l d0,$ffff8200.w
- move.w #$777,$ffff8240.w
- move.b #1,$ffff8260.w
- clr.w -(sp)
- trap #1
- palette00
- dc.w $FFF,$000,0,$0e,$1
- wvbl: move.l $466.w,d0
- .loop cmp.l $466.w,d0
- beq.s .loop
- rts
- selplan0 dc.w 0
- dc.w 8
- selplan move.w selplan0+2,d0
- ;not.w selplan0
- ;tst.w selplan0
- ;beq.s .1b
- ;move.w selplan0+2,d0
- addq #2,d0
- cmp.w #12,d0
- blt.s .ss
- moveq #0,d0
- .ss
- .1 move.w d0,selplan0+2
- ; lsr #1,d0
- ; lsl #1,d0
- .1b
- rts
- init_generatedCode
- *;_mkconvx
- * lea convX,a0
- * moveq #0,d1
- * move.w #$0200,d2 +0200= or.b d1,dep(a0) puis or.b d2,dep(a0), etc..
- *
- *.0 move #$8128,d0
- *.1
- * move.w d0,(a0)+
- * move.w d1,(a0)+
- * add d2,d0
- * cmp.w #$8128+8*$200,d0
- * bne.s .1
- *
- * addq #1,d1
- * move.w #$8128,d0
- *.2
- * move.w d0,(a0)+
- * move.w d1,(a0)+
- *
- * add d2,d0
- * cmp.w #$8128+8*$200,d0
- * bne.s .2
- * addq #7,d1
- *
- * cmp.w #8*20,d1
- * bne.s .0
- ;*_mkconvx fin
- lea convX,a0
- moveq #0,d0
- move.w #19,d1
- moveq #0,d2
- .0
- move.w d0,(a0)+
- addq #2,d0
- move.w d2,(a0)+ ; offset
- cmp.w #32,d0
- bne.s .0
- addq #2,d2 ; 2 au lieu de 8 offset +16 pixel
- and.w #7*2,d2 ;***
- moveq #0,d0
- dbf d1,.0
- lea lstptrcode,a3
- lea bsscode,a1
- lea convX,a2
- lea lstorcount,a4
- lea lstor0,a5
- moveq #NBCIRCLES-1,d7
- .looptaille:
- move.w d7,d6
- add #RAYON_START,d6 ; =1,
- add d6,d6 ; d6=64*2 au depart
- ;ADD D6,D6
- ;ADD D7,D6
- move.w #ANGLEWRAP-1,d5 ; 8-1
- lea circletable,a0
- .loopAngle:
- ifeq STANDALONE
- jsr test_exit_demo
- endc
- move.w d5,-(sp)
- ;move.l a1,(a3)+
- moveq #0,d0
- lea lstorcount,a4
- rept 8
- move.l d0,(a4)+
- endr ; effacer les 16 compteurs
- lea lstorcount,a4
- lea lstor0,a5
- move.w #NBDOTPERCIRCLE-1,d5 ; 32-1 calcul d'un cercle de 32 dot
- .loopCircle
- ifeq STANDALONE
- jsr test_exit_demo
- endc
- move.w (a0)+,d0 ; x
- move.w (a0)+,d1 ; y
- ext.l d0
- ext.l d1
- muls d6,d0
- muls d6,d1
- swap d0
- swap d1
- ;add.w #96-48,d0 ; + centre
- lsr #1,d6
- add d6,d0
- add d6,d1
- add d6,d6
- tst.w d0
- bpl.s .okok1
- add.w #128*10,d0
- .okok1
- tst.w d1
- bpl.s .okok2
- add.w #128*10,d1
- .okok2
- and.w #127,d0 nombre periodique sur le tile
- and.w #127,d1
- ;add.w #96,d0
- ;add.w #96,d1
- ;move.w d6,d3
- ;lsr #2,d3
- ;add d3,d0
- ; now a partir de d2 et d3 on creer un or.b dn,dep(a0)
- ; a2 = convX 1 pixel (pas de subpixel)
- ; d0 = x
- move.w d0,d3
- add d3,d3
- add d3,d3
- move.w (a2,d3),-(sp) ; numero de bit*2
- move.w 2(a2,d3),d4 ; offset x
- ; calcul de l'offset adequat: int(d2/16)*2+d3* 256 oixel/16
- ; mulu #160,d1
- lsl #5,d1 *32 octect =256 pix (16 pix *16 word=32 octet
- ;move.w d1,d3
- ; * 128 + *32
- ;lsl #2,d3 *128;
- ;add d3,d3
- ;add d3,d3
- ;add d3,d1 *160
- add d1,d4 ; d4 = offsetx+y
- ; move.l d4,(a1)+
- ;a4 = lstorcount
- ;a5 = lstor0
- move.w (sp)+,d1 ; numero de bit*2
- move.w (a4,d1),d3 ; count lstX (*2)
- move.w d1,d0
- lsl #5,d0
- lea (a5,d0),a6 ; a6=lstX
- add d3,a6 ; + countlstx
- move.w d4,(a6) ; lstX+count*2=offsettotal
- addq #2,d3
- move.w d3,(a4,d1)
- dbra d5,.loopCircle
- ;****** now on a 16 liste d'offsets ; on genere les 16 routine qui affiche le cercle
- ; a4 = count lstX
- ; a5 = lst0
- ;
- ;lea whereIScode,a6
- lea lstorcount+32,a4
- move.w #15,d5 ; 16 decalage/routine
- move.l a1,a6
- .loopcgmake1
- move.l a1,(a3)+ ; a3 = lstptrroutine
- *move.l a6,(a3)+
- lea lstor0,a5
- move d5,d0
- lsl #6,d0 ; *64
- add d0,a5 ; a5 = lstF puis lstE etc // deprecated: puis lst1 puis lst2 etc
- move.w -(a4),d4 ; d4 = countX
- bne.s .dot
- ; nodot:
- ** a a modifier ici
- ; move.l #routinevide,-4(a3)
- bra.s .nodot
- .dot
- lsr #1,d4
- subq #1,d4
- .bcl
- move.w #$8168,(a1)+ ;$8128 or.w d0,$1234(a0)
- move.w (a5)+,(a1)+
- dbf d4,.bcl
- .nodot
- ;move.w #RTS,(a1)+
- move.w #$D040,(a1)+ ; add d0,d0 pour prochain points
- dbf d5,.loopcgmake1
- move.l rtsjmp,(a1)+
- move.w rtsjmp+4,(a1)+
- ; move.w #$4e75,(a1)+
- ; ***
- ;********
- move.w (sp)+,d5
- dbra d5,.loopAngle
- ifeq STANDALONE
- jsr test_exit_demo
- endc
- dbra d7,.looptaille
- routinevide rts
- initOneWave
- ; d0 = rayon
- ; d1 = pas interne
- lea sinwave,a0
- lea buffer1,a1
- move.w #511,d7
- move.w d0,d2
- add d2,d2
- .loop
- move.w (a0)+,d4
- muls d2,d4
- swap d4
- add d0,d4
- add d4,d4
- add d4,d4
- move.w d4,(a1)+
- dbf d7,.loop
- lea buffer1,a0
- move.l a6,a1 ; reftablesinus
- move.w d1,d0 ; pas interne
- move.w #NBCIRCLES,d1 ; NBCIRCLES=96
- move.w #512,d2
- bsr createSpecialSin
- rts
- initWaves
- move.w #150,d0
- move.w #512-17,d1
- LEA memoire,a2
- lea refs1,a6
- bsr initOneWave
- move.w #200,d0
- move.w #2,d1
- lea refs2,a6
- bsr initOneWave
- move.w #283,d0
- move.w #512-5,d1
- lea refs3,a6
- bsr initOneWave
- move.w #224,d0
- move.w #4,d1
- lea refs4,a6
- bsr initOneWave
- rts
- calcwave
- lea refs1,a6
- move.w curangle1,d0
- add d0,d0
- add d0,d0
- move.l (a6,d0),a0
- lea refs2,a6
- move.w curangle2,d0
- add d0,d0
- add d0,d0
- move.l (a6,d0),a1
- lea refs3,a6
- move.w curangle3,d0
- add d0,d0
- add d0,d0
- move.l (a6,d0),a2
- lea refs4,a6
- move.w curangle4,d0
- add d0,d0
- add d0,d0
- move.l (a6,d0),a3
- ;lea result,a6
- lea calcsinbuffer,a5 ; buffer de 96 word
- move.w #NBCIRCLES-1,d7 ; 96-1
- ifeq (ANGLEWRAP-8)
- move.w #%000000111000000,d6
- endc
- ifeq (ANGLEWRAP-16)
- move.w #%000001111000000,d6
- endc
- .loooop
- move.w (a0)+,d0
- add (a1)+,d0
- add (a2)+,d0
- add (a3)+,d0
- * lsr #3,d0
- * and #%0000000000011100,d0
- ; d0 =angle*2 ,
- * lsl #5,d0 ; *32 ; angle*32 long
- ;add d0,d0
- ;add d0,d0
- and d6,d0
- move.w d0,(a5)+
- dbf d7,.loooop
- *lea (a5,d0),a4
- *move.l (a4)+,(a6)+ ; adresse appel ; A MODIF
- *move.l (a4)+,(a6)+ ; adresse ou il faut placer le rts
- *lea 32*4(a5),a5 ; passer au cercle suivant
- *dbf d7,.loooop
- ; now dans calcsinbuffer on a 96 valeur correspondant au sinus
- jsr calcSpot ; calcul de spot+scroll+realposition
- move.w #NBCIRCLES-1,d7 ;96-1
- lea realposition,a6
- lea calcsinbuffer,a5
- lea lstptrcode,a4
- move.w #$4e75,d6
- ;move.w #$8168,d5 la plupart du temps c'est 8168 sinon c'est un rts
- move.l #$4ed1,d6 jmp (a1)
- move.l #autototo,a1
- loooop2
- move.w (a5)+,d0 ; angle*16*4
- lea (a4,d0),a2 ; a2 = lstptrcode[cercle+angle]
- move.l (a6)+,a0 ; adresse ecran resultat fonction
- ;lea 8(a0),a1
- move.l (a2),a3
- add.w (a6)+,a2 ; decalage*8
- ;add d1,a2
- move.l (a2),a2 ; adresse routine
- moveq #1,d0
- jmp (a2)
- autoto2:
- addq.l #2,a0
- move.w (a2),d5
- move.w d6,(a2) ; d6=rts
- jmp (a3)
- autototo:
- move.w d5,(a2)
- ;move.w d5,-4(a2) ; d5=add d0,d0
- ; changement de cercle
- lea 4*16*ANGLEWRAP(a4),a4 *8
- dbf d7,loooop2
- move.w curangle1,d0
- add #15,d0
- and #511,d0
- move.w d0,curangle1
- move.w curangle2,d0
- add #512-9,d0
- and #511,d0
- move.w d0,curangle2
- move.w curangle3,d0
- add #3,d0
- and #511,d0
- move.w d0,curangle3
- move.w curangle4,d0
- add #2,d0
- and #511,d0
- move.w d0,curangle4
- rts
- rtsjmp jmp autoto2
- prepareScaleTable
- lea superScaleTable,a0 ; buffer de 200 word *96
- move.w #NBCIRCLES-1,d7
- .loop0
- move.w d7,d2
- add #RAYONMIN,d2
- ;move.w #96,d2
- ;sub d7,d2 ; taille du cercle correspondant
- ;sub #1,d2
- add d2,d2
- move.w #200,d3
- sub d2,d3 ; 199-taille du cercle = nb de pixel max
- ; scale[100] doit placer le cercle au milieu
- ; d2 = taille du cercle
- ; en 100, placer en 100-d2/2
- ; en 0 placer en 0
- ; en 200 placer en 200-d2
- ; donc de 0 a 200 = 0 a 200-d2
- ; il faut ajouter a chaque fois (200-d2)/200 = d3/200
- moveq #0,d4
- move.w d3,d4
- swap d4 d3*65536
- divu #200,d4 ;/200
- swap d4
- clr.w d4
- swap d4
- move.w #199,d1
- moveq #0,d6
- moveq #0,d5
- .oneTable:
- move.w d5,d0
- and.w #127*2,d0
- move.w d0,(a0)+
- add.l d4,d6
- swap d6
- move.w d6,d5
- swap d6
- add d5,d5
- dbf d1,.oneTable
- dbf d7,.loop0
- rts
- initsomething
- lea posSpot,a0
- move.w #100*2,d0
- move.w #100*2,d1
- move.w #NBCIRCLES-1,d7
- .bcl
- move.w d0,(a0)+
- move.w d1,(a0)+
- dbf d7,.bcl
- jsr prepareScaleTable
- jsr init_generatedCode
- lea convX2,a0
- moveq #0,d0
- moveq #19,d7
- moveq #0,d1
- .loop
- move.w d0,(a0)+ ; decalage
- move.w d1,(a0)+ ; offset
- add.w #4,d0 ; decalage*8
- cmp.w #16*4,d0
- bne.s .loop
- moveq #0,d0
- add.w #2,d1 ;was 8
- and.w #7*2,d1
- dbf d7,.loop
- lea convY,a0
- move.w #0,d0
- move.w #32,d1 ; 256 pix 1 plan
- move.w #255,d7
- .loop2
- move.w d0,(a0)+
- add d1,d0
- and.w #127*32,d0
- dbf d7,.loop2
- rts
- majscroll:
- lea scrollX,a0
- move.w (a0),d0
- add.w #5,d0
- move.w #2047,d1
- and.w d1,d0
- move.w d0,(a0)+
- move.w (a0),d0
- add.w #2040,d0
- and.w d1,d0
- move.w d0,(a0)+
- rts
- scrollX dc.w 0
- scrollY dc.w 0
- calcSpot:
- bsr scroll_posSpot ; positione a2 a la fin du posSpot
- lea cosinusSpot,a0
- lea sinusSpot,a1
- move.w cspot,d0 ; angle cosinus spot
- addq.w #2,d0
- and.w #511,d0
- move.w d0,cspot
- add d0,d0 ; angle*2
- move.w (a0,d0),d1 ; d1 = (100+100*cos(angle))*2
- move.w sspot,d0
- addq.w #3,d0
- and.w #511,d0
- move.w d0,sspot
- add d0,d0
- move.w (a1,d0),d2 ; d2 = 100+100*sin(angle)
- lea cosinusSpot,a0
- move.w cspot+2,d0 ; angle cosinus spot
- add.w #512-2,d0
- and.w #511,d0
- move.w d0,cspot+2
- add d0,d0 ; angle*2
- add.w (a0,d0),d1 ; d1 = (100+100*cos(angle))*2
- move.w sspot+2,d0
- addq.w #5,d0
- and.w #511,d0
- move.w d0,sspot+2
- add d0,d0
- add.w (a1,d0),d2 ; d2 = 100+100*sin(angle)
- lsr #1,d1
- lsr #1,d2
- and.w #$FFFE,d1
- and.w #$FFFE,d2
- ;lea posSpot,a0
- move.w d1,(a2)+
- move.w d2,(a2)+
- ; *********
- ; conversion de posSpot a realposition:
- ; ********
- lea superScaleTable,a0 ; buffer de 200 word *96
- lea posSpot,a1
- lea realposition,a2 ; buffer: offset,decalage
- titi:
- lea convX2,a3
- movem.w scrollX,d0/d1
- lsr #3,d0
- lsr #3,d1
- move.w #127*2,d2
- and d2,d0
- and d2,d1
- add d0,d0
- add d0,a3
- lea convY,a4
- add d1,a4
- ;add.w scrollY,a4
- ;move.l ptrscr,a5 ; ecran courant ; a modifier pour pointer sur buffer de 256x256 pix 1 plan
- lea buffertile,a5
- ;move #320,d5
- ;sub NBCIRCLES*4-40(a1),d5
- ;move #200,d6
- ;sub NBCIRCLES*4-38(a1),d6
- ;move.w scrollX,d0
- ;move.w scrollY,d1
- move.w #NBCIRCLES-1,d7
- .bcl
- move.w (a1)+,d2 ; premiere coord , cercle de rayon 1
- ;add d5,d0
- ;add d0,d0
- move.w (a0,d2),d2 ; superScaleTable[d0]
- ;and.w #127*2,d2
- ;add d0,D2
- add d2,d2
- move.l (a3,d2),d3 ; d3 = decalage,offsetX
- move.w (a1)+,d2 ; y
- ;add d6,d1
- ;add d1,d1
- move.w (a0,d2),d4 ; superscaleTable[d1]
- ;ADD d1,D4
- ;and.w #127*2,d4
- add.w (a4,d4),d3 ; d3= decalage,offsetX+offsetY
- lea (a5,d3.w),a6
- move.l a6,(a2)+ ; adresse ecran+offset
- swap d3
- move.w d3,(a2)+
- lea 400(a0),a0 ; passage au 'scaleur' suivant
- dbf d7,.bcl
- ; now realposition = liste de 96 (adresse ecran, decalage)
- rts
- dsptiledata2
- move.w d0,$0(a4)
- move.w d1,8(a4)
- move.w d2,16(a4)
- move.w d3,24(a4)
- move.w d4,32(a4)
- move.w d5,40(a4)
- move.w d6,48(a4)
- move.w d7,56(a4)
- dsptiledata3
- lea 32(a0),a0 ; +32
- lea 32(a2),a2
- lea 32(a1),a1
- lea 32(a3),a3
- ;add d1,a3
- flag dc.b 0
- even
- copyadd
- tst.b flag
- bne.s .1
- lea dsptiledata3,a4
- move.l (a4)+,(a1)+
- move.l (a4)+,(a1)+
- bra.s .2
- .1 lea dsptiledata3+8,a4
- move.l (a4)+,(a1)+
- move.l (a4)+,(a1)+
- .2 not.b flag
- rts
- inittiles:
- lea bsstileram,a1
- moveq #127,d4
- moveq #0,d6
- bra .loopligne
- .loopligne0:
- jsr copyadd
- .loopligne:
- jsr cpdsptiledata4
- lea dsptiledata2,a5
- moveq #7,d7
- .loop:
- move.l d6,d3
- moveq #0,d5
- move.w (a5)+,d0
- move.w (a5)+,d1 ; d1 = 0..56
- .lp move.w d1,d2
- move.w d0,(a1)+
- move.w d1,(a1)
- add.w d6,(a1)+
- add.w #64,d1
- move.w d0,(a1)+
- move.w d1,(a1)
- add.w d6,(a1)+
- add.w #64,d1
- cmp.w #160,d1
- bpl.s .skip
- move.w d0,(a1)+
- move.w d1,(a1)
- add d6,(a1)+
- .skip
- sub.l #128,d1
- add.l #128*160,d6
- cmp.l #32000-160,d6
- bpl.s .skip2
- bra.s .lp
- .skip2
- move.l d3,d6
- ;sub.l #256*160,d6
- dbf d7,.loop
- add.l #160,d6
- dbf d4,.loopligne0
- move.w #$4e75,(a1)+
- rts
- cpdsptiledata4
- ;move.l a4,-(sp)
- lea dsptiledata4,a6
- lea findsp4,a4
- .1 move.w (a6)+,(a1)+
- cmp.l a6,a4
- bne.s .1
- rts
- dsptiledata4
- movem.w (a0)+,d0-d7
- or.w (a1)+,d0
- or.w (a1)+,d1
- or.w (a1)+,d2
- or.w (a1)+,d3
- or.w (a1)+,d4
- or.w (a1)+,d5
- or.w (a1)+,d6
- or.w (a1)+,d7
- or.w (a2)+,d0
- or.w (a2)+,d1
- or.w (a2)+,d2
- or.w (a2)+,d3
- or.w (a2)+,d4
- or.w (a2)+,d5
- or.w (a2)+,d6
- or.w (a2)+,d7
- or.w (a3)+,d0
- or.w (a3)+,d1
- or.w (a3)+,d2
- or.w (a3)+,d3
- or.w (a3)+,d4
- or.w (a3)+,d5
- or.w (a3)+,d6
- or.w (a3)+,d7
- findsp4
- cleartiles
- lea buffertile+8192,a0
- moveq #0,d1
- move.l d1,d2
- move.l d1,d3
- move.l d1,d4
- move.l d1,d5
- move.l d1,d6
- move.l d1,d7
- move.l d1,d0
- move.l d0,a1
- move.l d0,a2
- move.l d0,a3
- move.l d0,a4
- move.l d0,a5
- move.l d0,a6
- rept 146
- movem.l d0-d7/a1-a6,-(a0)
- endr
- movem.l d0-d3,-(a0)
- rts
- displaytiles:
- ; a4 = ecran logique
- lea buffertile,a0
- lea 16(a0),a1
- lea 128*32(a0),a2
- lea 128*32+16(a0),a3
- jmp bsstileram
- scroll_posSpot:
- lea posSpot,a1
- lea 4(a1),a0
- move.w #NBCIRCLES-2,d7
- .1 move.l (a0)+,(a1)+
- dbf d7,.1
- move.l a1,a2
- rts
- ifne STANDALONE
- createSpecialSin
- ; a0 = table sinus de n element
- ; a1 = reftablesinus
- ; a2 = buffer resultat
- ; d0 = pas interne
- ; d1 = nombre de copie de valeur
- ; d2 = nombre n d'element de la table sinus
- ; retour = d1 : nombre de memoire occupé sur buffer resultat
- move.w d2,d3
- lea bufferFlag,a3
- subq #1,d3
- .clrflag
- clr.b (a3)+
- dbra d3,.clrflag
- move.w d2,d3 ; 512 ou 1024
- subq #1,d3 ; 511 ou 1023 pour le and de l'angle
- lea bufferFlag,a3
- subq #1,d2 ; 511 ou 1023 iteration
- moveq #0,d4 ; angle
- .loop
- tst.b (a3,d4) ; flag a 1 ?
- bne.s .flagA1
- .flagA0
- move.w d4,d5
- add d5,d5
- move.w (a0,d5),(a2)
- add d5,d5
- move.l a2,(a1,d5) ; a2 referencer en reftable+angle*4
- addq.l #2,a2
- st (a3,d4) positione flag(angle) a 1
- add d0,d4 ; pas interne
- and d2,d4 ; mod 512 ou 1022
- bra.s .loop
- .flagA1 ; copier d1 fois les valeurs suivante
- move.w d4,d5 ; angle courant copier sur d5
- move.w d1,d7
- subq #1,d7
- .cpy
- move.w d5,d6
- add d6,d6
- move.w (a0,d6),(a2)+
- add d0,d5
- and d2,d5
- dbf d7,.cpy
- sub d0,d4
- addq #1,d4
- and d2,d4
- tst.b (a3,d4)
- bne.s .fin
- bra .flagA0
- .fin
- rts
- endc
- DATA
- sinwave: incbin 'sinwave.dat'
- circletable:
- ifeq CONFIG
- incbin 'cercle.dat'
- endc
- ifeq (CONFIG-1)
- incbin 'cerc512.dat'
- endc
- curangle1 dc.w 0
- curangle2 dc.w 2
- curangle3 dc.w 10
- curangle4 dc.w 100
- cspot dc.w 10
- dc.w 22
- sspot dc.w 60
- dc.w 40
- cosinusSpot: incbin 'cosinus' ; 100+100*cos(angle de 0 a 511)
- sinusSpot: incbin 'sinus'
- ;col0 equ $777 12 $653
- colA equ $750 $347
- colB equ $540 $236
- colC equ $320 $125
- colD equ $420 $014
- col0 equ $11 775
- col1 equ $7 17 colA
- col2 equ $5 colB
- col3 equ $3 colC
- ;col4 equ $07 colD
- col00 equ $0
- ;palpatine dc.l palplan3,palplan0,palplan0,palplan1,palplan1,palplan2,palplan2,palplan3
- ;palplan0 dc.w col0,colA,colD,colA,colC,colA,colC,colA,colB,colA,colB,colA,colB,colA,colB,colA
- ;palplan1 dc.w col0,colB,colA,colA,colD,colB,colA,colA,colC,colB,colA,colA,colC,colB,colA,colA
- ;palplan2 dc.w col0,colC,colB,colB,colA,colA,colA,colA,colD,colC,colB,colC,colA,colA,colA,colA
- ;palplan3 dc.w col0,colD,colC,colC,colB,colB,colB,colB,colA,colA,colA,colA,colA,colA,colA,colA
- colA0 equ 0 $775 111
- colAA equ $700 27 730
- colAB equ $601 24
- colAC equ $302 30 320
- palpatine dc.l palplan0,palplan0,palplan1,palplan1,palplan2,palplan2
- palplan0 dc.w col0,col1,col3,col1,col2,col1,col2,col1,colA0,colAA,colAC,colAA,colAB,colAA,colAB,colAA
- palplan1 dc.w col0,col2,col1,col1,col3,col2,col1,col1,colA0,colAB,colAA,colAA,colAC,colAB,colAA,colAA
- palplan2 dc.w col0,col3,col2,col2,col1,col1,col1,col1,colA0,colAC,colAB,colAB,colAA,colAA,colAA,colAA
- PICTURE incbin 'PYRA.PI1'
- BSS
- ptrscr
- ds.l 2
- screen ds.b 256
- ds.b 32000
- ds.b 32000
- ;ds.w 32000
- ;ds.w 32000
- superScaleTable: ds.w 200*NBCIRCLES ;200*96 un peu moins de 40 000 octet
- ******
- realposition
- buffer1 ds.w 512 ; 1.5k et on peut pas le metre dans memoire
- ifne standalone
- bufferFlag ds.b 512 ; parce que c'est utilisé en meme temps
- endc
- ifeq standalone
- ds.b 512
- endc
- ;realposition:
- ;ds.l 96
- ;ds.w 96
- calcsinbuffer equ realposition+NBCIRCLES*6 ; ds.w 96
- ********
- lstptrcode ds.l ANGLEWRAP*NBCIRCLES*16 ; 8*96*32
- ; 16 adresse d'appel
- ; puis 16 adresse ou il faut placer les rts
- ; format: (adresse appel, adresse retour)*16
- ;
- refs1 ds.l 512
- refs2 ds.l 512
- refs3 ds.l 512
- refs4 ds.l 512
- convX2 ds.l 320
- convY ds.w 256
- memoire ds.w 5000
- convX ds.l 320
- lstor0 ds.w NBDOTPERCIRCLE ; max 32 point par cercle
- lstor1 ds.w NBDOTPERCIRCLE ; max 32 point par cercle
- lstor2 ds.w NBDOTPERCIRCLE ; max 32 point par cercle
- lstor3 ds.w NBDOTPERCIRCLE ; max 32 point par cercle
- lstor4 ds.w NBDOTPERCIRCLE ; max 32 point par cercle
- lstor5 ds.w NBDOTPERCIRCLE ; max 32 point par cercle
- lstor6 ds.w NBDOTPERCIRCLE ; max 32 point par cercle
- lstor7 ds.w NBDOTPERCIRCLE ; max 32 point par cercle
- lstor8 ds.w NBDOTPERCIRCLE ; max 32 point par cercle
- lstor9 ds.w NBDOTPERCIRCLE ; max 32 point par cercle
- lstorA ds.w NBDOTPERCIRCLE ; max 32 point par cercle
- lstorB ds.w NBDOTPERCIRCLE ; max 32 point par cercle
- lstorC ds.w NBDOTPERCIRCLE ; max 32 point par cercle
- lstorD ds.w NBDOTPERCIRCLE ; max 32 point par cercle
- lstorE ds.w NBDOTPERCIRCLE ; max 32 point par cercle
- lstorF ds.w NBDOTPERCIRCLE ; max 32 point par cercle
- lstorcount ds.w 16 ; compteur lstorX
- ds.l 768*3-320-NBDOTPERCIRCLE*8 ; a partir de memoire: 768*3 long reservé
- bsscode ds.l NBDOTPERCIRCLE*ANGLEWRAP*NBCIRCLES ; 96*32*8*2 256*96*2 ; 96 cercle de 256 or.w *2, version dep(a0) et dep+8(a0)
- ds.w ANGLEWRAP*NBCIRCLES*16 ; 8 'angle'*96 cercles * 32 add d0,d0
- ds.w ANGLEWRAP*NBCIRCLES
- ds.l ANGLEWRAP*NBCIRCLES ; 8*96 ; jmp autototo2 = 6 octet rts
- posSpot ds.l NBCIRCLES
- bsstileram ds.b 23594
- buffertile ds.w 16*256
- oldpalette ds.w 16
Add Comment
Please, Sign In to add comment