rout ;when this is off, the routine-file will be ;assembled, on=testing ;debug ;when this is on, colors in the background will ;show how much time the routine needs. ;ntsctest ;when this is on, the routineplayer is in ntsc-mode ;ocs ;off=AGA,on=OCS, testing not possible on OCS ! routinemode equ 300 ;the routinemode ! ; VideoTracker AGA developer source 25-12-93 ; 24-bits colors, Super-HiRes, HAM8, maximum burstmode (64 pixels aligned) ; wich makes low-resolution overscan a bit ugly. ; no "interactive" support anymore, it's only used by Kick 1.3 users. ; the first part of the source handles the things that are necessary to ; show the picture/copper and playing of the routine. ; the part between the "***" lines is the routine-source. ; at the bottom of the file, there are the necessary incbin-files who ; are needed to test the routine. ; these are saved with "save effect" in videotracker. they are raw ; data files which can be fonts,pictures,landscapes,vectorobjects ; etcetra. ; the incbin-files are put in the "variables" table, in the routine- ; player-handler ; the place where it's done can be found by searching for "!!!" ; opt a+ ;devpac 3 optimize opt o+ vew_wid equ 48 vew_hgt equ 290 win_hgt equ 117 win_str equ $1a ifd ocs pic_wid equ 4 ;wide in bytes pic_hgt equ 6 ;hoogte pic_dpt equ 8 ;number planes pic_ani equ 10 ;aantal effes (anim) pic_vew equ 12 ;viewmode pic_cycstr equ 14 ;cycle start (*4) pic_cycend equ 15 ;cycle end (*4) pic_cycspd equ 16 ;cycle speed (*4) pic_cycadd equ 17 ;cycle add (*4) pic_palnum equ 30 ;aantal kleuren pic_pal equ 32 ;palette start pic_palsiz equ 256*2 ;vaste palette size pic_raw equ pic_pal+pic_palsiz ;palette start endc ifnd ocs pic_wid equ 4 ;wide in bytes pic_hgt equ 6 ;hoogte pic_dpt equ 8 ;number planes pic_ani equ 10 ;aantal effes (anim) pic_vew equ 12 ;viewmode pic_cycstr equ 14 ;cycle start (*8) pic_cycend equ 15 ;cycle end (*8) pic_cycspd equ 16 ;cycle speed (*8) pic_cycadd equ 17 ;cycle add (*8) pic_widmod equ 46 ;animation-width modulo pic_future equ 50 ;free future space pic_palnum equ 62 ;aantal kleuren pic_pal equ 64 ;palette start pic_palsiz equ 256*4 ;vaste palette size (longwords) pic_raw equ pic_pal+pic_palsiz ;palette start endc var_len equ $300 ;lengte vartabel var__GfxBase equ $000 ;graphics lib var_pic1 equ $004 ;current picture var_anispd1 equ $008 ;animspeed var_anitel1 equ $00c ;animcount var_cprbck equ $010 ;copperback var_bck equ $014 ;background var_pic2 equ $018 ;current picture var_ntsc equ $01c ;ntsc/pal frequence var_lnd equ $020 ;landscape var_anilop1 equ $024 var_rottrg equ $028 ;effect trigger var_txt1 equ $040 ;text var_txt16 equ 15*4+var_txt1 var_vec1 equ $080 ;vectors var_vec16 equ 15*4+var_vec1 var_fon1 equ $0c0 ;fonts var_fon16 equ 15*4+var_fon1 var_cols1 equ $100 ;colorsets var_cols16 equ 15*4+var_cols1 var_obj1 equ $180 ;objects var_obj16 equ 15*4+var_obj1 var_audstr equ $1c0 ; start (*4) .l var_audlen equ $1c4 ; length (*4) .w var_audper equ $1c8 ; period (*4) .w var_audcnt equ $1cc ; counter (*4) .w var_audlopstr equ $1d0 ; loop (*4) .w var_audreplen equ $1d4 ; loopstart (*4) .w var_end equ $240 ifd rout ;videotracker routine-test incdir "w:include/" include "exec/types.i" include "graphics/gfxbase.i" include "lvo/graphics_lib.i" incdir 'videotracker:effect/' SECTION 1,CODE_C tus ; move.l #rotpt1,curpic1 ;picture !!! ; move.l #rotpt1,curpal1 ;picture !!! bsr paltabres move.l ($4).w,a6 sub.l a1,a1 jsr -$126(a6) ;findtask move.l d0,curtsk move.l d0,a0 move.l $b8(a0),tskpri lea dosnam,a1 ;doslib openen moveq.l #0,d0 move.l (4).w,a6 jsr -408(a6) ;openlib move.l d0,doslib bsr.s label5 ;videotracker opstarten move.l curtsk,a0 move.l tskpri,$b8(a0) move.l ($4).w,a6 jsr -$84(a6) ;forbid move.l doslib,a1 move.l (4).w,a6 jsr -414(a6) ;closelib moveq.l #0,d0 rts label5 move.l (4).w,a6 ;workbench gedoe move.b 530(a6),ntscmode ;50/60 hertz halen ifd ntsctest move.b #60,ntscmode ;60 hertz (ntsc) endc cmp.b #50,ntscmode ;ntsc ? beq.s str.ntsc move.l #vew_hgt-56,hogscr ;set NTSC screen hight str.ntsc lea cprjmp,a2 ;copjmp zetten ! move.l #cprbck-8,d0 move.w d0,6(a2) swap d0 move.w d0,2(a2) lea cprbck-8,a2 ;copstr zetten ! move.l #cpr,d0 move.w d0,6(a2) swap d0 move.w d0,2(a2) bsr cprsprrem ;sprites legen lea gfxnam,a1 ;graphics lib openen move.l (4).w,a6 jsr -408(a6) ;openlib move.l d0,a6 move.l d0,gfxlib move.l 38(a6),oldcprlist bset #1,$bfe001 bsr copbuf ;copper vullen bsr sysoff gadrun btst #6,($bfe001).l bne gadrun scrend scrend.play bsr syson move.l gfxlib,a1 move.l (4).w,a6 jsr -414(a6) ;closelib scrend.qb moveq.l #0,d0 rts ;vertical blank interrupt, no blits. ;handles counters,interlace,sprite ;level 3 intvb bra.s intvb.cnt dc.l 'VIDU' dc.l 'LOOP' intvb.cnt movem.l d0-d7/a0-a6,-(sp) lea ($dff000).l,a6 move.w $01e(a6),d0 btst #5,d0 ;vblank ? bne.s intvb.vb bra.s intcop.end intvb.vb bsr grap bsr palctr ;palette zetten bsr.s copbuf ;copper vullen intvb.end move.w #$0020,$09c(a6) ;vb bit wissen movem.l (sp)+,d0-d7/a0-a6 ;multitask uit, shit ! rte intcop.end movem.l (sp)+,d0-d7/a0-a6 move.l intvbold,-(sp) rts ;transmission buffer empty routine, BLIT ! ;handles routines,animations inttbe ;tbe interrupt movem.l d0-d7/a0-a6,-(sp) lea ($dff000).l,a6 move.w $01e(a6),d0 btst #0,d0 ;no tbe ? beq.s intdskblk btst #6,($bfe001).l ;muis ingedrukt ? beq.s inttbe.cop btst #2,($dff016).l beq.s inttbe.cop ifd debug move.w #$700,$dff180 endc bsr rotply ;routineplayer BLIT ! bsr.s copbuf ;copper vullen ifd debug move.w #$070,$dff180 endc inttbe.cop inttbe.end move.w #$0001,$09c(a6) movem.l (sp)+,d0-d7/a0-a6 rte intdskblk move.w #$0001,$09c(a6) ;be sure for no tbe handling movem.l (sp)+,d0-d7/a0-a6 move.l inttbeold,-(sp) rts ;moves the copperbuffer to the copperlist ;sort of double buffering copbuf movem.l d0-d7/a0-a6,-(sp) lea ($dff000).l,a6 copbuf.novb ;copperchange overslaan moveq.l #0,d0 move.b $005(a6),d0 lsl.w #8,d0 moveq.l #0,d1 move.b $006(a6),d1 add.w d1,d0 cmp.w #$4,d0 ;lower limit, all stations 100% blt copbuf.novb cmp.b #50,ntscmode beq.s copbuf.pal cmp.w #$133-72-8,d0 ;ntsc grens bge copbuf.novb bra.s copbuf.cont copbuf.pal cmp.w #$133-8,d0 ;pal grens bge copbuf.novb copbuf.cont lea gra.s,a0 ;buffer copieren lea cprbuf,a1 copbuf_aga ;AGA stuff :) move.l #(gra.ql)/4-1,d0 copbuf.a move.w 2(a0),2(a1) add.l #4,a0 add.l #4,a1 dbra d0,copbuf.a copbuf.end movem.l (sp)+,d0-d7/a0-a6 rts ;goes back to the workbench syson movem.l d0-d7/a0-a6,-(sp) move.w #$0001,$dff09a ;tbeint uit move.l intvbold,($6c).w move.l inttbeold,($64).w move.l 4,a6 jsr -138(a6) ;permit move.l gfxlib,a6 jsr -462(a6) ;disownblitter move.l wbview,a1 move.l gfxlib,a6 jsr _LVOLoadView(a6) ; Fix view jsr _LVOWaitTOF(a6) jsr _LVOWaitTOF(a6) ; wait for LoadView() syson.ras cmp.b #$c0,$dff006 ;prevent copperjump bne syson.ras move.l gfxlib,a6 move.l gb_copinit(a6),$dff080 ; Kick it into life movem.l (sp)+,d0-d7/a0-a6 rts ;goes back to the gadgetscreen sysoff movem.l d0-d7/a0-a6,-(sp) move.l gfxlib,a6 move.l gb_ActiView(a6),wbview ;current view sub.l a1,a1 ; clear a1 jsr _LVOLoadView(a6) ; Flush View to nothing jsr _LVOWaitTOF(a6) ; Wait once jsr _LVOWaitTOF(a6) ; Wait again. move.l gfxlib,a6 jsr -456(a6) ;ownblitter move.l 4,a6 jsr -132(a6) ;forbid move.l ($6c).w,intvbold move.l #intvb,($6c).w move.l ($64).w,inttbeold move.l #inttbe,($64).w move.w #$8001,$dff09a ;tbeint aan bsr gracpr ;reset copper bsr copbuf ;copy copper move.l #cpr,$dff080 movem.l (sp)+,d0-d7/a0-a6 rts cprsprrem movem.l d0-d7/a0-a6,-(sp) lea cprspr,a0 move.l #sprdat,d0 move.w #7,d1 cprsprrem.a move.w d0,3*2(a0) swap d0 move.w d0,1*2(a0) swap d0 add.l #8,a0 dbra d1,cprsprrem.a movem.l (sp)+,d0-d7/a0-a6 rts varset ;variablen neerzetten movem.l d0-d7/a0-a6,-(sp) move.l #var,a0 move.l #cprbck,var_cprbck(a0) move.l gfxlib,var__GfxBase(a0) move.b ntscmode,var_ntsc(a0) move.l curpic1,var_pic1(a0) ;variabel move.l curpic2,var_pic2(a0) ;variabel move.w anispd1,var_anispd1(a0) move.w anitel1,var_anitel1(a0) move.b anilop1,var_anilop1(a0) move.l #rottrg,var_rottrg(a0) movem.l (sp)+,d0-d7/a0-a6 rts ;this routine handles all videotracker-routines rotply movem.l d0-d7/a0-a6,-(sp) moveq.l #0,d0 lea currot1,a2 ;routine 1 move.w rotinf1,d0 ;routine info bsr.s rotplyr rotply.end movem.l (sp)+,d0-d7/a0-a6 rts ;this routine handles 1 routine, BLIT ! rotplyr movem.l d0-d7/a1-a6,-(sp) move.l #rot,(a2) ;routinestart address !!! ; move.b #50,ntscmode ;ntsc/pal hz clr.l curpic2 ;background picture move.w #1,anispd1 ;animationspeed clr.w anitel1 ;animation position lea var,a0 ;communication-table ; move.l #rotsrc,var_bck(a0) ;colorset !!! ; move.l #rotst1,var_cols1+4(a0) ;colorset !!! ; move.l #rotpt1,curpic1 ;picture !!! ; move.l #rotpt1,curpal1 ;picture !!! ; move.b #0,anilop1 ;animloop off/on !!! ; move.w #32,anispd1 ;animdelay !!! move.l #routinemode,d0 ;routinemode !!! sub.l a0,a0 ;picture info legen tst.l (a2) ;is er een routine ? beq rotplyr.end ;interlace handling move.l intdel,d2 ;delay move.l inttel,d1 ;teller cmp.w d2,d1 blt rotplyr.end clr.l inttel bsr varset ;variabelen updaten move.l (a2),a1 ;routine halen move.l #var,a0 ;variablen tabel movem.l d3-d7/a1-a6,-(sp) moveq.l #0,d1 ;vars wissen moveq.l #0,d2 moveq.l #0,d3 moveq.l #0,d4 moveq.l #0,d5 moveq.l #0,d6 moveq.l #0,d7 sub.l a2,a2 sub.l a3,a3 sub.l a4,a4 sub.l a5,a5 jsr 4(a1) ;routine afwerken movem.l (sp)+,d3-d7/a1-a6 ;Routine: ; ;Input: ;a0=variabelentabel ;d0=routinemode ; ;Output: ;a0=picture ;d1=copperlist ;d2=interruptdelay (NOT used till now) move.w #$0020,$dff09a ;vb off ! move.l d2,intdel ;delay lea cprjmp,a3 move.l #cprbck-8,d0 cmp.l (a2),a1 ;routine ondertussen gewipt ? bne.s rotplyr.nocop tst.l d1 ;copperlist ? beq.s rotplyr.nocop move.l d1,d0 rotplyr.nocop move.w d0,6(a3) swap d0 move.w d0,2(a3) cmp.l #0,a0 ;picture ? ; beq.s rotplyr.endvb beq.s rotplyr.set move.l a0,curpal1 ;current palette ; move.l #rotpt1,a0 ;picture !!! move.l (a0),a1 cmp.l #'PALE',(a1) ;palette ? beq rotplyr.set move.l a0,curpic1 ;current picture (cycle) tst.b rotdpl ;plane is geleverd beq.s rotplyr.set clr.l cycdel1 ;cycle info wissen clr.l 4+cycdel1 clr.l curfrm1 ;curfrm1, altijd planes zetten rotplyr.set clr.b rotdpl clr.b dplctr bsr.s grap bsr grac ;colorset rotplyr.endvb move.w #$8020,$dff09a rotplyr.end movem.l (sp)+,d0-d7/a1-a6 rts ;removes possible routine-coppers gracpr movem.l d0-d7/a0-a6,-(sp) lea cprjmp,a3 move.l #cprbck-8,d0 ;copperlist resetten move.w d0,6(a3) swap d0 move.w d0,2(a3) movem.l (sp)+,d0-d7/a0-a6 rts grap ;d7=anim movem.l d0-d7/a0-a6,-(sp) clr.l d7 tst.l curpic1 ;current picture ? beq grap.end move.l curpic1,a2 ;normal pic halen lea gracprscr,a1 ;window neerzetten move.l hogscr,d1 move.w pic_hgt(a2),d3 ;pic hoogte move.w pic_vew(a2),d5 btst #2,d5 ;interlace ? beq.s grap.nohi4 lsr.w #1,d3 ;/2 grap.nohi4 cmp.w d3,d1 bge.s grap.hog move.w d1,d3 grap.hog sub.w d3,d1 lsr.w #1,d1 add.w #win_str,d1 move.w d1,d2 add.w d3,d2 move.b d1,2(a1) ;y start move.b d2,6(a1) ;y end move.w pic_wid(a2),d4 ;pic breedte in bytes lsl.l #3,d4 move.l #vew_wid*8,d0 move.l #0,d1 move.l #$61,d6 cmp.w #40,pic_wid(a2) ;overscan ? ble.s grap.noov1 move.l #$41,d6 grap.noov1 move.w pic_vew(a2),d5 btst #15,d5 ;hires ? beq.s grap.nohi2 move.l #(vew_wid)*8*2,d0 move.l #1,d1 move.l #$61,d6 cmp.w #80,pic_wid(a2) ;overscan ? ble.s grap.nohi2 move.l #(vew_wid)*8*2,d0 move.l #$51,d6 bra.s grap.noshi2 grap.nohi2 btst #6,d5 ;super hires ? beq.s grap.noshi2 move.l #(vew_wid)*8*4,d0 move.l #2,d1 move.l #$61,d6 cmp.w #80*2,pic_wid(a2) ;overscan ? ble.s grap.noshi2 move.l #(vew_wid)*8*4,d0 move.l #$51,d6 grap.noshi2 clr.w d5 cmp.w d0,d4 ;breeder dan scherm ? ble.s grap.c move.w d4,d5 move.w d0,d4 sub.w d0,d5 ;modulo lsr.w #3,d5 ;/8 grap.c lsr.w d1,d0 lsr.w d1,d4 move.w d0,d2 sub.w d4,d2 lsr.w #1,d2 ;/2 add.w d6,d2 move.b d2,3(a1) ;x start move.w d2,d3 ;d3 bewaren ! add.w d4,d2 ;d4 bewaren ! move.b d2,7(a1) ;x end move.w pic_vew(a2),d6 btst #15,d6 ;hires ? beq.s grap.nohi5 add.l d4,d4 ;*2 bra.s grap.noshi5 grap.nohi5 btst #6,d6 ;super hires ? beq.s grap.noshi5 add.l d4,d4 ;*4 add.l d4,d4 grap.noshi5 move.l d7,-(sp) move.w pic_vew(a2),d6 move.l #17,d0 move.l #4,d1 ;ecs 1 move.l #3,d7 btst #15,d6 ;hires ? beq.s grap.nohi3 move.l #17,d0 ;ecs 9 move.l #4,d1 ;ecs 2 move.l #2,d7 bra.s grap.noshi3 grap.nohi3 btst #6,d6 ;super hires ? beq.s grap.noshi3 move.l #17,d0 ;ecs 9 move.l #4,d1 ;ecs 2 move.l #1,d7 grap.noshi3 sub.w d0,d3 lsr.w #1,d3 move.w d3,10(a1) ;ddfstrt move.w d4,d2 ;pic breedte in pixels lsr.w #4,d2 ;/16 sub.w d1,d2 ;-1 lsl.w d7,d2 ;*8 add.w d2,d3 move.w d3,14(a1) ;ddfstop move.l (sp)+,d7 lea pic_raw(a2),a0 moveq.l #0,d2 move.w pic_dpt(a2),d2 sub.l #1,d2 muls pic_wid(a2),d2 add.w d2,d5 move.w pic_vew(a2),d2 ;viewmode add btst #2,d2 beq.s grap.nolace4 moveq.l #0,d2 move.w pic_dpt(a2),d2 muls pic_wid(a2),d2 add.w d2,d5 ;interlace gedoe grap.nolace4 lea gracprbpl,a4 ;iffpln neerzetten lea gracprpln,a0 ;iffpln neerzetten moveq.l #0,d2 move.w pic_dpt(a2),d2 ;plnnummer 1 halen move.l #8,d6 ;copper step ! tst.l curpic2 ;2de picture ? bne.s grap.pic2 grap.nopic2 move.w d5,34(a1) ;modulo oneven zetten bra grap.nodpl grap.pic2 move.l curpic2,a3 ;oneven plane move.l curpic2+4,a6 ;oneven plane move.l currot2,a5 ;oneven plane clr.l curpic2 ;mischien niet goed clr.l curpic2+4 ;mischien niet goed clr.l curpal2 ;mischien niet goed clr.l currot2 ;mischien niet goed cmp.l curpic1,a3 ;picture hetzelfde ? beq.s grap.nopic2 cmp.l #0,currot1 ;routine ? beq.s grap.norot cmp.l currot1,a5 ;routine hetzelfde ? beq.s grap.nopic2 grap.norot cmp.b #4,d2 ;> 16 kleuren ? (AGA) bgt grap.nopic2 move.w pic_dpt(a3),d3 ;plnnummer 2 halen cmp.b d2,d3 ;gelijke plnummers ? bne.s grap.nopic2 move.w pic_vew(a2),d1 cmp.w pic_vew(a3),d1 ;view gelijk ? bne.s grap.nopic2 move.w pic_vew(a2),d1 ;groter dan view test btst #6,d1 ;super hires ? beq.s grap.nohi2a move.l #vew_wid*4,d1 bra.s grap.nohi2b grap.nohi2a btst #15,d1 ;hires ? beq.s grap.noshi2a move.l #vew_wid*2,d1 bra.s grap.nohi2b grap.noshi2a move.l #vew_wid,d1 grap.nohi2b cmp.w pic_wid(a2),d1 ;breder dan view ? bgt.s grap.small cmp.w pic_wid(a3),d1 ;breder dan view ? bgt.s grap.small move.w pic_vew(a2),d1 btst #2,d1 beq.s grap.nolace8a move.l hogscr,d1 add.l d1,d1 bra.s grap.nolace8b grap.nolace8a move.l hogscr,d1 grap.nolace8b cmp.w pic_hgt(a2),d1 ;hoger dan view ? bgt.s grap.small cmp.w pic_hgt(a3),d1 ;hoger dan view ? bgt.s grap.small bra.s grap.big grap.small move.w pic_hgt(a2),d1 ;wid+hgt1 copieren move.w 6(a0),14(a0) move.w 18(a0),26(a0) ;plane 2>3 copieren move.w 22(a0),30(a0) move.w 34(a0),42(a0) ;plane 4>5 copieren move.w 38(a0),46(a0) move.w 50(a0),58(a0) ;plane 6>7 copieren move.w 54(a0),62(a0) bra.s grap.tb grap.ta move.w 24(a0),58(a0) ;plane 3>7 copieren move.w 28(a0),62(a0) move.w 18(a0),42(a0) ;plane 2>5 copieren move.w 22(a0),46(a0) move.w 10(a0),26(a0) ;plane 1>3 copieren move.w 14(a0),30(a0) move.w 2(a0),10(a0) ;plane 0>1 copieren move.w 6(a0),14(a0) grap.tb move.l #palette,a3 ;palette copieren move.w #16-1,d1 grap.pal move.l (a3)+,60(a3) dbra d1,grap.pal grap.nocop add.w d3,d2 ;aantal bitplanes cmp.w #8,d2 ;8 bitplanes ? blt grap.no8planes2 move.w #%10000,d2 ;only bit 4 bra grap.8planes2 grap.no8planes2 lsl.w #8,d2 lsl.w #4,d2 grap.8planes2 or.w #$400,d2 ;dual playfield aan move.w d2,2(a4) ;bplcon0 movem.l d0-d7/a0-a6,-(sp) move.l curpic,a2 ;animpic ? move.l curfrm,d7 cmp.l #0,a2 bne.s grap.noanipic move.l curpic2,a2 ;normal pic ? move.l curfrm2,d7 cmp.l #0,a2 beq.s grap.nodplpic grap.noanipic add.l d6,a0 add.w d6,d6 bsr.s grappln ;a2,d6,d7,d0 grap.nodplpic movem.l (sp)+,d0-d7/a0-a6 add.w d6,d6 bra.s grap.nodpla grap.nodpl ;geen dual playfield cmp.w #8,d2 ;8 bitplanes ? blt grap.no8planes move.w #%10000,d2 ;only bit 4 bra grap.8planes grap.no8planes lsl.w #8,d2 lsl.w #4,d2 grap.8planes move.w d2,2(a4) ;bplcon0 grap.nodpla move.w d5,30(a1) ;modulo even moveq.l #0,d3 add.w pic_vew(a2),d3 ;viewmode add moveq.l #0,d2 move.w 2(a4),d2 or.l d3,d2 ifd gui tst.b genlck bne grap.genset endc or.l #$100,d2 ;genlock off ($302) ifd gui bra grap.gencont grap.genset or.l #$102,d2 ;genlock on ($302) grap.gencont endc move.w d2,2(a4) bsr.s grappln ;a2,d6,d7,d0 grap.end movem.l (sp)+,d0-d7/a0-a6 rts ;sets on of the 2 possible pictures to the copper ;handles interlace ;d7=framenummer ;d6=copperliststap ;d0=raw planes positie ;a2=current picture grappln ;planes invullen movem.l d0-d7/a0-a6,-(sp) lea pic_raw(a2),a1 move.l a1,d0 ;raw planes moveq.l #0,d2 ;x*y move.w pic_wid(a2),d2 lsr.l #1,d2 ;/2 moveq.l #0,d3 move.w pic_hgt(a2),d3 muls d3,d2 move.l d2,d4 add.l d2,d2 move.w pic_dpt(a2),d3 muls d3,d4 ;hele picture size muls d7,d4 ;frame*size d7 ! add.l d4,d4 add.l d4,d0 move.l #vew_wid,d5 ;max x view move.l hogscr,d4 ;max y view move.w pic_vew(a2),d1 ;viewmode add btst #2,d1 beq.s grappln.nolace add.l d4,d4 ;max y view grappln.nolace btst #15,d1 ;hires ? beq.s grappln.nohi move.l #vew_wid*2,d5 ;max x view bra.s grappln.noshi grappln.nohi btst #6,d1 ;super hires ? beq.s grappln.noshi move.l #vew_wid*4,d5 ;max x view grappln.noshi moveq.l #0,d3 ;scherm centreren move.w pic_wid(a2),d3 ;pic breedte in bytes cmp.w d5,d3 ;breder dan scherm ? ble.s grappln.qa sub.w d5,d3 ;-scherm breedte lsr.w #2,d3 ;/4 add.l d3,d3 add.l d3,d0 grappln.qa move.w pic_hgt(a2),d3 ;pic hoogte in bytes cmp.w d4,d3 ;hoger dan scherm ? ble.s grappln.qb sub.w d4,d3 ;-scherm breedte lsr.w #1,d3 ;/2 moveq.l #0,d5 move.w pic_wid(a2),d5 ;pic breedte in bytes muls pic_dpt(a2),d5 muls d5,d3 add.l d3,d0 grappln.qb moveq.l #0,d2 move.w pic_wid(a2),d2 move.w pic_vew(a2),d5 ;interlace flipping ? btst #2,d5 beq.s grappln.nolac7b move.w $04(a6),d5 ;even/oneven ? btst #15,d5 beq.s grappln.nolac7b moveq.l #0,d3 move.w pic_wid(a2),d3 muls pic_dpt(a2),d3 add.l d3,d0 grappln.nolac7b move.w pic_dpt(a2),d1 ;plnnummer 1 halen tst.w d1 ;0 planes ? beq grappln.end sub.w #1,d1 grappln.a move.w d0,3*2(a0) swap d0 move.w d0,1*2(a0) swap d0 add.l d6,a0 ;d6=copper step ! add.l d2,d0 dbra d1,grappln.a cmp.w #8,pic_dpt(a2) ;8 planes ? bne grappln.noham8 btst #3,pic_vew(a2) ;ham ? beq grappln.noham8 move.w -14(a0),d0 ;get 6 move.w -10(a0),d1 move.w -6(a0),d2 ;get 7 move.w -2(a0),d3 move.w -18(a0),-2(a0) ;5>7 move.w -22(a0),-6(a0) ;5>7 move.w -26(a0),-10(a0) ;4>6 move.w -30(a0),-14(a0) ;4>6 move.w -34(a0),-18(a0) ;3>5 move.w -38(a0),-22(a0) ;3>5 move.w -42(a0),-26(a0) ;2>4 move.w -46(a0),-30(a0) ;2>4 move.w -50(a0),-34(a0) ;1>3 move.w -54(a0),-38(a0) ;1>3 move.w -58(a0),-42(a0) ;0>2 move.w -62(a0),-46(a0) ;0>2 move.w d0,-62(a0) ;6>0 move.w d1,-58(a0) ;6>0 move.w d2,-54(a0) ;7>1 move.w d3,-50(a0) ;7>1 grappln.noham8 grappln.end movem.l (sp)+,d0-d7/a0-a6 rts ;sets palettes to palette-buffer grac movem.l d0-d7/a0-a6,-(sp) lea curpal1,a3 ;palette 1 move.l #palette,a1 bsr.s gracfrm lea curpal2,a3 ;palette 2 (dpl) move.l #16*4+palette,a1 bsr.s gracfrm bsr palctr ;palette-buffer to copper grac.end movem.l (sp)+,d0-d7/a0-a6 rts ;moves palette from picture to palette-buffer gracfrm movem.l d0-d7/a0-a6,-(sp) tst.l (a3) ;palette aanwezig ? beq.s gracfrm.end move.l (a3),a2 ;current palette cmp.l #'PALE',(a2) ;palette ? bne.s gracfrm.pict lea 6(a2),a0 ;palette move.w 4(a2),d0 ;aantal kleuren bra.s gracfrm.col gracfrm.pict cmp.l #'ANIM',(a2) ;animatie ? bne.s gracfrm.noanim moveq.l #0,d1 move.w pic_ani(a2),d1 bclr #7,d1 ;behandelbit weghalen moveq.l #0,d3 move.w pic_wid(a2),d3 lsr.w #1,d3 ;/2 muls pic_hgt(a2),d3 muls pic_dpt(a2),d3 add.l d3,d3 add.l #pic_raw,d3 move.l d3,d5 btst #0,d1 bne.s gracfrm.buf2 moveq.l #0,d5 gracfrm.buf2 add.l d5,a2 gracfrm.noanim lea pic_pal(a2),a0 ;palette move.w pic_palnum(a2),d0 tst.w d0 ;0 planes ? beq.s gracfrm.end gracfrm.col gracfrm.fa move.l (a0)+,(a1)+ dbra d0,gracfrm.fa gracfrm.end movem.l (sp)+,d0-d7/a0-a6 rts ;handles colorcycling in the palette-buffer palcycctr movem.l d0-d7/a0-a6,-(sp) move.l curpic1,a2 ;current raw cmp.l #0,a2 beq.s palcycctr.qb lea cycdel1,a3 ;cycle delays move.l #paltab,a4 bsr palcyc palcycctr.qb move.l curpic2,a2 ;current raw cmp.l #0,a2 beq.s palcycctr.c lea cycdel2,a3 ;cycle delays move.l #16*2+paltab,a4 bsr palcyc palcycctr.c movem.l (sp)+,d0-d7/a0-a6 rts ;copies palette-buffer to copper palctr movem.l d0-d7/a0-a6,-(sp) lea gracprcol,a1 ;AGA move.l #palette,a0 move.l #paltab,a2 move.w #8-1,d6 palctr.e move.w #32-1,d7 palctr.d move.w (a2)+,d0 ;get cycle-position move.w (a0,d0),6(a1) ;high RGB bits move.w 2(a0,d0),((32+1)*4)+6(a1) ;low RGB bits add.l #4,a1 dbra d7,palctr.d add.l #((32+2)*4),a1 dbra d6,palctr.e palctr.end movem.l (sp)+,d0-d7/a0-a6 rts ;reset palette tabel, for proper color cycling paltabres movem.l d0-d7/a0-a6,-(sp) lea paltab,a0 clr.l d0 move.w #256-1,d1 paltabres.a move.w d0,(a0)+ add.w #4,d0 ;aga color words, high RGB + low RGB dbra d1,paltabres.a paltabres.end movem.l (sp)+,d0-d7/a0-a6 rts ;colorcyclinghandling of a palette palcyc movem.l d0-d7/a0-a6,-(sp) move.w #4-1,d7 ;4 cycles palcyc.d tst.w (a3)+ ;delay klaar ? bne.s palcyc.c moveq.l #0,d1 move.b pic_cycstr(a2),d1 ;start color lsl.b #1,d1 ;*2 moveq.l #0,d2 move.b pic_cycend(a2),d2 ;end color lsl.b #1,d2 ;*2 moveq.l #0,d3 move.b pic_cycadd(a2),d3 ;richting move.l a4,a0 ;palette pointer move.l a0,a1 add.l d1,a0 ;startcolor add.l d2,a1 ;endcolor cmp.b #1,d3 ;omhoog beq.s palcyc.up cmp.b #3,d3 ;omlaag beq.s palcyc.down bra.s palcyc.i palcyc.up ;kleuren copieren move.w (a1),d4 ;laatst color bewaren palcyc.f ;kleuren copieren cmp.l a0,a1 beq.s palcyc.fa move.w -(a1),2(a1) bra.s palcyc.f palcyc.fa move.w d4,(a1) bra.s palcyc.g palcyc.down move.w (a0),d4 ;laatst color bewaren palcyc.h ;kleuren copieren cmp.l a0,a1 beq.s palcyc.ha move.w 2(a0),(a0)+ bra.s palcyc.h palcyc.ha move.w d4,(a1) palcyc.g move.b pic_cycspd(a2),-1(a3) ;delay zetten bra.s palcyc.i palcyc.c sub.w #1,-2(a3) ;cycle delay aftellen palcyc.i add.l #4,a2 ;next cycle info dbra d7,palcyc.d palcyc.qb movem.l (sp)+,d0-d7/a0-a6 rts ; SECTION variabelen,DATA_c cnop 0,2 curtsk dc.l 0 tskpri dc.l 0 duplok dc.l 0 inttel dc.l 0 intdel dc.l 0 form dc.l 0 ifffil dc.l 0 intvbold dc.l 0 inttbeold dc.l 0 patpos dc.l 0 gfxlib dc.l 0 doslib dc.l 0 wbview dc.l 0 mt_data dc.l 0 memvid dc.l 0 oldcprlist dc.l 0 hogscr dc.l vew_hgt inspos dc.l -1 anispd1 dc.w 1 ;nooit op 0 ! anispd2 dc.w 1 cnop 0,2 varclr.s ;start wissen oldrot dc.l 0 curpic dc.l 0 curfrm dc.l 0 cycdel1 ds.w 4 cycdel2 ds.w 4 rotinf1 dc.w 0 rotinf2 dc.w 0 effspd dc.w 0 efflop dc.b 0 anilop1 dc.b 0 anilop2 dc.b 0 anipal1 dc.b 0 anipal2 dc.b 0 rotdpl dc.b 1 rottrg dc.b 1 dplctr dc.b 0 cnop 0,2 insdat ds.l 4 inspri dc.l 0 instel dc.w 0 cureff dc.l 0 efftel dc.w 0 curpal1 dc.l 0 curpal2 dc.l 0 currot1 dc.l 0 currot2 dc.l 0 curpic1 dc.l 0 curpic2 dc.l 0 anitel1 dc.w 0 anitel2 dc.w 0 curfrm1 dc.l 0 curfrm2 dc.l 0 oldfrm1 dc.l 0 oldfrm2 dc.l 0 varclr.e dc.l 0 ;wisruimte varclr.ql equ varclr.e-varclr.s ;wislengte ntscmode dc.b 0 end dc.b 0 pronam dc.b 'VideoTracker',0 cnop 0,2 dosnam dc.b 'dos.library',0 cnop 0,4 gfxnam dc.b 'graphics.library',0 cnop 0,4 cnop 0,4 gra.s ;copperlist edit buffer gracprscr dc.w $8e,$3381,$90,$81c1,$92,$003c,$94,$00d0 gracprbpl dc.w $100,$0000,$102,$0000,$104,$0020 dc.w $108,$0000,$10a,$0000,$1fc,$0003 gracprpln dc.w $e0,$0000,$e2,$0000 ;1 dc.w $e4,$0000,$e6,$0000 ;2 dc.w $e8,$0000,$ea,$0000 ;3 dc.w $ec,$0000,$ee,$0000 ;4 dc.w $f0,$0000,$f2,$0000 ;5 dc.w $f4,$0000,$f6,$0000 ;6 dc.w $f8,$0000,$fa,$0000 ;7 dc.w $fc,$0000,$fe,$0000 ;8 gracprcol dc.w $106,$0000 dc.w $180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0 dc.w $190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0 dc.w $1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0 dc.w $1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0 dc.w $106,$0200 dc.w $180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0 dc.w $190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0 dc.w $1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0 dc.w $1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0 dc.w $106,$2000 dc.w $180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0 dc.w $190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0 dc.w $1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0 dc.w $1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0 dc.w $106,$2200 dc.w $180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0 dc.w $190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0 dc.w $1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0 dc.w $1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0 dc.w $106,$4000 dc.w $180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0 dc.w $190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0 dc.w $1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0 dc.w $1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0 dc.w $106,$4200 dc.w $180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0 dc.w $190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0 dc.w $1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0 dc.w $1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0 dc.w $106,$6000 dc.w $180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0 dc.w $190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0 dc.w $1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0 dc.w $1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0 dc.w $106,$6200 dc.w $180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0 dc.w $190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0 dc.w $1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0 dc.w $1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0 dc.w $106,$8000 dc.w $180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0 dc.w $190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0 dc.w $1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0 dc.w $1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0 dc.w $106,$8200 dc.w $180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0 dc.w $190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0 dc.w $1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0 dc.w $1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0 dc.w $106,$a000 dc.w $180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0 dc.w $190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0 dc.w $1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0 dc.w $1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0 dc.w $106,$a200 dc.w $180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0 dc.w $190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0 dc.w $1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0 dc.w $1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0 dc.w $106,$c000 dc.w $180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0 dc.w $190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0 dc.w $1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0 dc.w $1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0 dc.w $106,$c200 dc.w $180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0 dc.w $190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0 dc.w $1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0 dc.w $1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0 dc.w $106,$e000 dc.w $180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0 dc.w $190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0 dc.w $1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0 dc.w $1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0 dc.w $106,$e200 dc.w $180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0 dc.w $190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0 dc.w $1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0 dc.w $1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0 dc.w $106,$1000 cprjmp dc.w $080,0,$082,0 gra.e gra.ql equ gra.e-gra.s ;block lengte cpr ;real copperlist dc.w $0001,$fffe dc.w $09c,$8001 ;tbeint cprspr dc.w $120,$0000,$122,$0000 dc.w $124,$0000,$126,$0000 dc.w $128,$0000,$12a,$0000 dc.w $12c,$0000,$12e,$0000 dc.w $130,$0000,$132,$0000 dc.w $134,$0000,$136,$0000 dc.w $138,$0000,$13a,$0000 dc.w $13c,$0000,$13e,$0000 cprbuf dc.w $8e,$3381,$90,$81c1,$92,$003c,$94,$00d0 dc.w $100,$9000,$102,$0000,$104,$0020 dc.w $108,$0000,$10a,$0000,$1fc,$0003 dc.w $e0,$0000,$e2,$0000 ;0 dc.w $e4,$0000,$e6,$0000 ;1 dc.w $e8,$0000,$ea,$0000 ;2 dc.w $ec,$0000,$ee,$0000 ;3 dc.w $f0,$0000,$f2,$0000 ;4 dc.w $f4,$0000,$f6,$0000 ;5 dc.w $f8,$0000,$fa,$0000 ;6 dc.w $fc,$0000,$fe,$0000 ;7 dc.w $106,$0000 dc.w $180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0 dc.w $190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0 dc.w $1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0 dc.w $1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0 dc.w $106,$0200 dc.w $180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0 dc.w $190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0 dc.w $1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0 dc.w $1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0 dc.w $106,$2000 dc.w $180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0 dc.w $190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0 dc.w $1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0 dc.w $1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0 dc.w $106,$2200 dc.w $180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0 dc.w $190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0 dc.w $1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0 dc.w $1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0 dc.w $106,$4000 dc.w $180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0 dc.w $190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0 dc.w $1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0 dc.w $1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0 dc.w $106,$4200 dc.w $180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0 dc.w $190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0 dc.w $1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0 dc.w $1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0 dc.w $106,$6000 dc.w $180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0 dc.w $190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0 dc.w $1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0 dc.w $1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0 dc.w $106,$6200 dc.w $180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0 dc.w $190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0 dc.w $1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0 dc.w $1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0 dc.w $106,$8000 dc.w $180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0 dc.w $190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0 dc.w $1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0 dc.w $1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0 dc.w $106,$8200 dc.w $180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0 dc.w $190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0 dc.w $1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0 dc.w $1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0 dc.w $106,$a000 dc.w $180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0 dc.w $190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0 dc.w $1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0 dc.w $1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0 dc.w $106,$a200 dc.w $180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0 dc.w $190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0 dc.w $1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0 dc.w $1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0 dc.w $106,$c000 dc.w $180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0 dc.w $190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0 dc.w $1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0 dc.w $1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0 dc.w $106,$c200 dc.w $180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0 dc.w $190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0 dc.w $1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0 dc.w $1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0 dc.w $106,$e000 dc.w $180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0 dc.w $190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0 dc.w $1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0 dc.w $1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0 dc.w $106,$e200 dc.w $180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0 dc.w $190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0 dc.w $1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0 dc.w $1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0 dc.w $106,$1000 dc.w $080,0,$082,0 cprbuf.e dc.w $088,$0000 ;copjmp2 dc.w $080,0,$082,0 ;moet achter cprbck blijven ! cprbck sprdat dc.w $ffff,$fffe palette ds.l 256 ;palette 24-bits, far out ! paltab ds.w 256 ;palette cycle-tabel cnop 0,2 var ds.b $300 ;variabelen voor routines ; SECTION 10,CODE_C endc ; this is the routine-source ;********************************************************************** rotpic_x equ 40 rotpic_y equ vew_hgt rotpic_d equ 1 rotcop_y equ vew_hgt ; Input: ; a0=variabelen tabel ; d0=routinfo ; Output: ; a0=picture ; d1=copperlist SECTION 3,CODE cnop 0,8 rot rotp ifnd ocs dc.l 'ROTA' endc ifd ocs dc.l 'ROTO' endc movem.l d2-d7/a1-a6,-(sp) lea ($dff000).l,a6 ;hardware lea rot(pc),a5 ;prog base ifd rout move.l #rotc,a2 endc move.l a2,rotchp-rot(a5) ; move.l #32768,d2 ; bsr getd7 ;rot.ea ; move.l #4,d2 ;hoogte ; bsr getd7 ; muls #1380,d7 ; move.l d7,variabele1-rot(a5) ; move.l #1,d2 ;breedte ; bsr getd7 ; muls #6,d7 ; move.l d7,variabele7-rot(a5) rot.end ; move.l var_cprbck(a0),d1 ; sub.l #8,d1 ; lea rotcop1,a1 ;copperjump adres zetten ; move.l rotbuf-rot(a5),d2 ;double buffer ; add.l d2,a1 ; move.w d1,6(a1) ; swap d1 ; move.w d1,2(a1) ; move.l a1,a2 ; add.l #rotcprbck1ntsc,a2 ; move.l a1,a3 ; add.l #rotcprend1ntsc,a3 ; move.l a1,a4 ; add.l #rotcprbck1,a4 ;cop_str equ win_str-2 ;rotcprbck1_v equ (cop_str+rotpic_y-124)*$1000000+$29fffe ;rotcprbck1ntsc_v equ (cop_str+rotpic_y-180)*$1000000+$29fffe ;rotcprend1ntsc_v equ (cop_str+rotpic_y-60)*$1000000+$29fffe ; cmp.b #50,var_ntsc(a0) ;ntsc/pal frequence ; bne rot.ntsc ; move.l #rotcprbck1ntsc_v,(a2) ;reset ntsc split (cprbck1ntsc) ; move.l #rotcprend1ntsc_v,(a3) ;reset ntsc end (cprend1ntsc) ; add.l #rotcprbck1,a1 ; move.l #rotcprbck1_v,d0 ;pal split (cprbck1) ; bra rot.split ;rot.ntsc ; move.l #rotcprbck1_v,(a4) ;reset pal split (cprbck1) ; move.l #$00880000,(a3) ;set ntsc end (cprend1ntsc) ; add.l #rotcprbck1ntsc,a1 ; move.l #rotcprbck1ntsc_v,d0 ;(cprbck1ntsc) ;rot.split ; move.l #$00880000,(a1) ;set break ; move.l var_cprbck(a0),a2 ; cmp.b #$ff,(a2) ;menu uit ? ; bne rot.a ; move.l d0,(a1) ;rot.a ; bsr rotint ;eventueel init bsr rotvew move.l rotchp-rot(a5),a0 add.l #rotpic-rotc,a0 ;picture add.l rotbuf-rot(a5),a0 eor.l #rotpic.e-rotpic,rotbuf-rot(a5) clr.l d1 ; move.l a5,d1 ; add.l #rotcop1-rot,d1 ;copperlist movem.l (sp)+,d2-d7/a1-a6 rts getd7 move.w d0,d1 divs d2,d1 and.l #$ffff,d1 move.l d1,d7 muls d2,d1 sub.w d1,d0 move.l d0,d6 add.l #1,d7 rts ;rotint ; movem.l d0-d7/a0-a6,-(sp) ; ; move.l a5,a1 ; add.l #rotcoptus.s-rot,a1 ; tst.b (a1) ;init copper ? ; bne rotint.end ; ; move.l #cop_str,d1 ; ; move.w #rotcop_y-1,d0 ;rotint.g ; move.b d1,(a1) ;y-raster ; ; add.l #rotcoptus_l,a1 ; add.l #1,d1 ; ; dbra d0,rotint.g ; ;rotint.end ; movem.l (sp)+,d0-d7/a0-a6 ; rts rotvew movem.l d0-d7/a0-a6,-(sp) move.l rotchp-rot(a5),a3 add.l #rotpic-rotc,a3 add.l rotbuf-rot(a5),a3 lea pic_raw(a3),a3 move.w #0,$042(a6) ;clear screen move.w #$100+$f0,$040(a6) move.w #0,$064(a6) move.w #0,$066(a6) move.w #0,$074(a6) ;a dat move.l #0,$044(a6) ;mask move.l a3,$054(a6) ;destination move.w #rotpic_y*64+(rotpic_x/2),$058(a6) rotvew.wblit btst #6,$002(a6) bne rotvew.wblit bsr rotpix rotvew.end movem.l (sp)+,d0-d7/a0-a6 rts rotpix movem.l d0-d7/a0-a6,-(sp) ; move.l a5,d7 ; add.l #rotemp-rot,d7 move.l var_audstr(a0),a2 move.l var_audreplen(a0),d3 cmp.l #1,d3 bne rotpix.d1 move.l var_audlen(a0),d3 rotpix.d1 add.l d3,d3 add.l var_audlopstr(a0),d3 move.l #34642*2,d2 tst.l var_audper(a0) beq rotpix.c1 divs.w 2+var_audper(a0),d2 ext.l d2 add.l d2,var_audcnt(a0) move.l var_audcnt(a0),d2 add.l d2,a2 rotpix.c1 move.l var_audstr+$20(a0),a4 move.l var_audreplen+$20(a0),d4 cmp.l #1,d4 bne rotpix.d2 move.l var_audlen+$20(a0),d4 rotpix.d2 add.l d4,d4 add.l var_audlopstr+$20(a0),d4 move.l #34642*2,d2 tst.l var_audper+$20(a0) beq rotpix.c2 divs.w 2+var_audper+$20(a0),d2 ext.l d2 add.l d2,var_audcnt+$20(a0) move.l var_audcnt+$20(a0),d2 add.l d2,a4 rotpix.c2 move.l var_audstr+$40(a0),a5 move.l var_audreplen+$40(a0),d5 cmp.l #1,d5 bne rotpix.d3 move.l var_audlen+$40(a0),d5 rotpix.d3 add.l d5,d5 add.l var_audlopstr+$40(a0),d5 move.l #34642*2,d2 tst.l var_audper+$40(a0) beq rotpix.c3 divs.w 2+var_audper+$40(a0),d2 ext.l d2 add.l d2,var_audcnt+$40(a0) move.l var_audcnt+$40(a0),d2 add.l d2,a5 rotpix.c3 move.l var_audstr+$60(a0),a6 move.l var_audreplen+$60(a0),d6 cmp.l #1,d6 bne rotpix.d4 move.l var_audlen+$60(a0),d6 rotpix.d4 add.l d6,d6 add.l var_audlopstr+$60(a0),d6 move.l #34642*2,d2 tst.l var_audper+$60(a0) beq rotpix.c4 divs.w 2+var_audper+$60(a0),d2 ext.l d2 add.l d2,var_audcnt+$60(a0) move.l var_audcnt+$60(a0),d2 add.l d2,a6 rotpix.c4 tst.w d0 bne rotpix.g1 bsr rot4 bra rotpix.end rotpix.g1 cmp.w #1,d0 bne rotpix.g2 bsr rotall bra rotpix.end rotpix.g2 rotpix.end movem.l (sp)+,d0-d7/a0-a6 rts rot4 movem.l d0-d7/a0-a6,-(sp) add.l #(rotpic_y/4)*rotpic_x*rotpic_d+1,a3 move.l a3,a1 add.l #(rotpic_y/2)*rotpic_x*rotpic_d,a1 move.w #(rotpic_x/2)-3,d1 ;bytes rot4.c move.w #8-1,d0 ;bits rot4.a clr.l d2 cmp.l a2,d3 bgt rot4.a1 cmp.l #1,var_audreplen(a0) beq rot4.b1 move.l var_audlopstr(a0),a2 sub.l var_audstr(a0),a2 move.l a2,var_audcnt(a0) move.l var_audlopstr(a0),a2 move.l var_audreplen(a0),d3 add.l d3,d3 add.l a2,d3 rot4.a1 move.b (a2)+,d2 ext.w d2 lsr.l #1,d2 ext.w d2 ext.l d2 muls.w #rotpic_x*rotpic_d,d2 rot4.b1 bset d0,(a3,d2) clr.l d2 cmp.l a4,d4 bgt rot4.a2 cmp.l #1,var_audreplen+$20(a0) beq rot4.b2 move.l var_audlopstr+$20(a0),a4 sub.l var_audstr+$20(a0),a4 move.l a4,var_audcnt+$20(a0) move.l var_audlopstr+$20(a0),a4 move.l var_audreplen+$20(a0),d4 add.l d4,d4 add.l a4,d4 rot4.a2 move.b (a4)+,d2 ext.w d2 lsr.l #1,d2 ext.w d2 ext.l d2 muls.w #rotpic_x*rotpic_d,d2 rot4.b2 bset d0,rotpic_x/2(a3,d2) clr.l d2 cmp.l a5,d5 bgt rot4.a3 cmp.l #1,var_audreplen+$40(a0) beq rot4.b3 move.l var_audlopstr+$40(a0),a5 sub.l var_audstr+$40(a0),a5 move.l a5,var_audcnt+$40(a0) move.l var_audlopstr+$40(a0),a5 move.l var_audreplen+$40(a0),d5 add.l d5,d5 add.l a5,d5 rot4.a3 move.b (a5)+,d2 ext.w d2 lsr.l #1,d2 ext.w d2 ext.l d2 muls.w #rotpic_x*rotpic_d,d2 rot4.b3 bset d0,rotpic_x/2(a1,d2) clr.l d2 cmp.l a6,d6 bgt rot4.a4 cmp.l #1,var_audreplen+$60(a0) beq rot4.b4 move.l var_audlopstr+$60(a0),a6 sub.l var_audstr+$60(a0),a6 move.l a6,var_audcnt+$60(a0) move.l var_audlopstr+$60(a0),a6 move.l var_audreplen+$60(a0),d6 add.l d6,d6 add.l a6,d6 rot4.a4 move.b (a6)+,d2 ext.w d2 lsr.l #1,d2 ext.w d2 ext.l d2 muls.w #rotpic_x*rotpic_d,d2 rot4.b4 bset d0,(a1,d2) dbra d0,rot4.a add.l #1,a3 ;next byte add.l #1,a1 ;next byte dbra d1,rot4.c rot4.end movem.l (sp)+,d0-d7/a0-a6 rts rotall movem.l d0-d7/a0-a6,-(sp) add.l #(rotpic_y/2)*rotpic_x*rotpic_d,a3 move.w #rotpic_x-1,d1 ;bytes rotall.c move.w #8-1,d0 ;bits rotall.a clr.l d2 cmp.l a2,d3 bgt rotall.a1 cmp.l #1,var_audreplen(a0) beq rotall.b1 move.l var_audlopstr(a0),a2 sub.l var_audstr(a0),a2 move.l a2,var_audcnt(a0) move.l var_audlopstr(a0),a2 move.l var_audreplen(a0),d3 add.l d3,d3 add.l a2,d3 rotall.a1 move.b (a2)+,d2 ext.w d2 ext.l d2 muls.w #rotpic_x*rotpic_d,d2 rotall.b1 bset d0,(a3,d2) clr.l d2 cmp.l a4,d4 bgt rotall.a2 cmp.l #1,var_audreplen+$20(a0) beq rotall.b2 move.l var_audlopstr+$20(a0),a4 sub.l var_audstr+$20(a0),a4 move.l a4,var_audcnt+$20(a0) move.l var_audlopstr+$20(a0),a4 move.l var_audreplen+$20(a0),d4 add.l d4,d4 add.l a4,d4 rotall.a2 move.b (a4)+,d2 ext.w d2 ext.l d2 muls.w #rotpic_x*rotpic_d,d2 rotall.b2 bset d0,(a3,d2) clr.l d2 cmp.l a5,d5 bgt rotall.a3 cmp.l #1,var_audreplen+$40(a0) beq rotall.b3 move.l var_audlopstr+$40(a0),a5 sub.l var_audstr+$40(a0),a5 move.l a5,var_audcnt+$40(a0) move.l var_audlopstr+$40(a0),a5 move.l var_audreplen+$40(a0),d5 add.l d5,d5 add.l a5,d5 rotall.a3 move.b (a5)+,d2 ext.w d2 ext.l d2 muls.w #rotpic_x*rotpic_d,d2 rotall.b3 bset d0,(a3,d2) clr.l d2 cmp.l a6,d6 bgt rotall.a4 cmp.l #1,var_audreplen+$60(a0) beq rotall.b4 move.l var_audlopstr+$60(a0),a6 sub.l var_audstr+$60(a0),a6 move.l a6,var_audcnt+$60(a0) move.l var_audlopstr+$60(a0),a6 move.l var_audreplen+$60(a0),d6 add.l d6,d6 add.l a6,d6 rotall.a4 move.b (a6)+,d2 ext.w d2 ext.l d2 muls.w #rotpic_x*rotpic_d,d2 rotall.b4 bset d0,(a3,d2) dbra d0,rotall.a add.l #1,a3 ;next byte dbra d1,rotall.c rotall.end movem.l (sp)+,d0-d7/a0-a6 rts rotchp dc.l 0 rotbuf dc.l 0 rotcopbuf dc.l 0 rotbck dc.l 0 rotpos dc.l 0 rotcopstr dc.l $73 ;rotemp ds.b rotpic_x*4 rotp.e SECTION 4,CODE_c cnop 0,8 rotc ifnd ocs dc.l 'ROTA' endc ifd ocs dc.l 'ROTO' endc rts cnop 0,8 rotpic ifnd ocs dc.l 'PICT' dc.w rotpic_x,rotpic_y,rotpic_d,1,0 ds.b 8*4 ds.b 16 dc.w 2-1 dc.w $000,0,$fff,0 ds.l 256-2 ds.b rotpic_x*rotpic_y*rotpic_d endc ifd ocs dc.l 'PICT' dc.w rotpic_x,rotpic_y,rotpic_d,1,0 ds.b 4*4 dc.w 2-1 dc.w $000,$fff ds.w 256-2 ds.b rotpic_x*rotpic_y*rotpic_d endc rotpic.e rotpic2 ifnd ocs dc.l 'PICT' dc.w rotpic_x,rotpic_y,rotpic_d,1,0 ds.b 8*4 ds.b 16 dc.w 2-1 dc.w $000,0,$fff,0 ds.l 256-2 ds.b rotpic_x*rotpic_y*rotpic_d endc ifd ocs dc.l 'PICT' dc.w rotpic_x,rotpic_y,rotpic_d,1,0 ds.b 4*4 dc.w 2-1 dc.w $000,$fff ds.w 256-2 ds.b rotpic_x*rotpic_y*rotpic_d endc ;rotcop1 ; dc.w $80,0,$82,0 ; ;rotcoptus.s ; dc.w $003d,$fffe ; dc.w $180,0,$180,0,$180,0,$180,0,$180,0,$180,0,$180,0,$180,0 ; dc.w $180,0,$180,0,$180,0,$180,0,$180,0,$180,0,$180,0,$180,0 ; dc.w $180,0,$180,0,$180,0,$180,0,$180,0,$180,0,$180,0,$180,0 ; dc.w $180,0,$180,0,$180,0,$180,0,$180,0,$180,0,$180,0,$180,0 ; dc.w $180,0,$180,0,$180,0,$180,0,$180,0,$180,0,$180,0,$180,0 ;rotcoptus.e ; ; rept rotcop_y-1 ; dc.w $003d,$fffe ; dc.w $180,0,$180,0,$180,0,$180,0,$180,0,$180,0,$180,0,$180,0 ; dc.w $180,0,$180,0,$180,0,$180,0,$180,0,$180,0,$180,0,$180,0 ; dc.w $180,0,$180,0,$180,0,$180,0,$180,0,$180,0,$180,0,$180,0 ; dc.w $180,0,$180,0,$180,0,$180,0,$180,0,$180,0,$180,0,$180,0 ; dc.w $180,0,$180,0,$180,0,$180,0,$180,0,$180,0,$180,0,$180,0 ; endr ; dc.w $088,$000 ;rotcoptus_l equ rotcoptus.e-rotcoptus.s ;rotcprbck1 equ (rotcoptus_l*(rotpic_y-124))+8 ;rotcprbck1ntsc equ (rotcoptus_l*(rotpic_y-180))+8 ;rotcprend1ntsc equ (rotcoptus_l*(rotpic_y-60))+8 rotc.e rot.e ;**********************************************************************