home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
World of A1200
/
World_Of_A1200.iso
/
programs
/
graphics
/
animtools
/
videotrackerdev
/
source.lha
/
source
/
Landscape.s
< prev
next >
Wrap
Text File
|
1995-02-10
|
43KB
|
2,221 lines
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.
routinemode equ 64+16 ;the routinemode !
; 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+
ifd rout
;videotracker routine-test
incdir "videotracker:include/"
include "exec/types.i"
include "graphics/gfxbase.i"
include "lvo/graphics_lib.i"
incdir 'videotracker:effect/'
vew_wid equ 44
vew_hgt equ 290
win_hgt equ 117
win_str equ $1a
SECTION 1,CODE_C
tus
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
cmp.b #50,ntscmode ;ntsc ?
beq.s str.ntsc
move.l #vew_hgt-56,hogscr ;set NTSC screen hight
str.ntsc
move.l (4).w,a6 ;68030 cache off
jsr -120(a6)
btst.b #1,297(a6)
beq.s str.nfc
lea.l str.ft,a5
jsr -30(a6)
str.nfc
jsr -126(a6)
bra.s str.fc
str.ft
dc.w $4e7a,2
bclr #0,d0
bset #13,d0
dc.w $4e7b,2
rte
str.fc
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
blt copbuf.novb
cmp.b #50,ntscmode
beq.s copbuf.pal
cmp.w #$133-56-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
move.w 00*4+2(a0),00*4+2(a1)
move.w 01*4+2(a0),01*4+2(a1)
move.w 02*4+2(a0),02*4+2(a1)
move.w 03*4+2(a0),03*4+2(a1)
move.w 04*4+2(a0),04*4+2(a1)
move.w 05*4+2(a0),05*4+2(a1)
move.w 06*4+2(a0),06*4+2(a1)
move.w 07*4+2(a0),07*4+2(a1)
move.w 08*4+2(a0),08*4+2(a1)
move.w 09*4+2(a0),09*4+2(a1)
move.w 10*4+2(a0),10*4+2(a1)
move.w 11*4+2(a0),11*4+2(a1)
move.w 12*4+2(a0),12*4+2(a1)
move.w 13*4+2(a0),13*4+2(a1)
move.w 14*4+2(a0),14*4+2(a1)
move.w 15*4+2(a0),15*4+2(a1)
move.w 16*4+2(a0),16*4+2(a1)
move.w 17*4+2(a0),17*4+2(a1)
move.w 18*4+2(a0),18*4+2(a1)
move.w 19*4+2(a0),19*4+2(a1)
move.w 20*4+2(a0),20*4+2(a1)
move.w 21*4+2(a0),21*4+2(a1)
move.w 22*4+2(a0),22*4+2(a1)
move.w 23*4+2(a0),23*4+2(a1)
move.w 24*4+2(a0),24*4+2(a1)
move.w 25*4+2(a0),25*4+2(a1)
move.w 26*4+2(a0),26*4+2(a1)
move.w 27*4+2(a0),27*4+2(a1)
move.w 28*4+2(a0),28*4+2(a1)
move.w 29*4+2(a0),29*4+2(a1)
move.w 30*4+2(a0),30*4+2(a1)
move.w 31*4+2(a0),31*4+2(a1)
move.w 32*4+2(a0),32*4+2(a1)
move.w 33*4+2(a0),33*4+2(a1)
move.w 34*4+2(a0),34*4+2(a1)
move.w 35*4+2(a0),35*4+2(a1)
move.w 36*4+2(a0),36*4+2(a1)
move.w 37*4+2(a0),37*4+2(a1)
move.w 38*4+2(a0),38*4+2(a1)
move.w 39*4+2(a0),39*4+2(a1)
move.w 40*4+2(a0),40*4+2(a1)
move.w 41*4+2(a0),41*4+2(a1)
move.w 42*4+2(a0),42*4+2(a1)
move.w 43*4+2(a0),43*4+2(a1)
move.w 44*4+2(a0),44*4+2(a1)
move.w 45*4+2(a0),45*4+2(a1)
move.w 46*4+2(a0),46*4+2(a1)
move.w 47*4+2(a0),47*4+2(a1)
move.w 48*4+2(a0),48*4+2(a1)
move.w 49*4+2(a0),49*4+2(a1)
move.w 50*4+2(a0),50*4+2(a1)
move.w 51*4+2(a0),51*4+2(a1)
move.w 52*4+2(a0),52*4+2(a1)
move.w 53*4+2(a0),53*4+2(a1)
move.w 54*4+2(a0),54*4+2(a1)
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)
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 #rotinc,var_lnd(a0) ;incbinfile !!!
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
move.l a0,curpic1 ;current picture (cycle)
move.l a0,curpal1 ;current palette
tst.b rotdpl ;plane is geleverd
beq.s rotplyr.set
clr.b rotdpl
clr.l cycdel1 ;cycle info wissen
clr.l 4+cycdel1
clr.l curfrm1 ;curfrm1, altijd planes zetten
rotplyr.set
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
;picture-to-copper routine, communicates with the
;anim-player
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 #$71,d6
move.w pic_vew(a2),d5
btst #15,d5 ;hires ?
beq.s grap.nohi2
move.l #(vew_wid-4)*8*2,d0
move.l #1,d1
move.l #$81,d6
cmp.w #80,pic_wid(a2) ;overscan ?
ble.s grap.nohi2
move.l #(vew_wid)*8*2,d0
move.l #$61,d6
grap.nohi2
btst #6,d5 ;super hires ?
beq.s grap.noshi2
move.l #(vew_wid-4)*8*4,d0
move.l #2,d1
move.l #$81,d6
cmp.w #80*2,pic_wid(a2) ;overscan ?
ble.s grap.noshi2
move.l #(vew_wid)*8*4,d0
move.l #$61,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
grap.nohi5
btst #6,d6 ;super hires ?
beq.s grap.noshi5
add.l d4,d4 ;*4
grap.noshi5
move.l d7,-(sp)
move.w pic_vew(a2),d6
move.l #17,d0
move.l #1,d1
move.l #3,d7
btst #15,d6 ;hires ?
beq.s grap.nohi3
move.l #9,d0
move.l #2,d1
move.l #2,d7
grap.nohi3
btst #6,d6 ;super hires ?
beq.s grap.noshi3
move.l #9,d0
move.l #2,d1
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 currot2,a5 ;oneven plane
clr.l curpic2 ;mischien niet goed
clr.l curpal2 ;mischien niet goed
clr.l currot2 ;mischien niet goed
cmp.l curpic1,a3 ;picture hetzelfde ?
beq grap.nopic2
cmp.l #0,currot1 ;routine ?
beq.s grap.norot
cmp.l currot1,a5 ;routine hetzelfde ?
beq grap.nopic2
grap.norot
cmp.b #3,d2 ;> 8 kleuren ?
bgt grap.nopic2
move.w pic_dpt(a3),d3 ;plnnummer 2 halen
cmp.b d2,d3 ;gelijke plnummers ?
bne grap.nopic2
move.w pic_vew(a2),d1
cmp.w pic_vew(a3),d1 ;view gelijk ?
bne 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+hgt<vew
cmp.w pic_hgt(a3),d1 ;hoogte gelijk ?
bne grap.nopic2
move.w pic_wid(a2),d1
cmp.w pic_wid(a3),d1 ;breedte gelijk ?
bne grap.nopic2
grap.big
move.l a3,curpic2
move.l a3,curpal2
move.l a5,currot2
tst.b dplctr ;double playfield al gezet ?
beq.s grap.nocop
move.w 30(a1),34(a1) ;modulo copieren
move.w 2(a4),d1 ;bplcon0
btst #10,d1 ;al double playfield ?
beq.s grap.ta
move.w 2(a0),10(a0) ;plane 0>1 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)
bra.s grap.tb
grap.ta
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 #8-1,d1
grap.pal
move.w (a3)+,14(a3)
dbra d1,grap.pal
grap.nocop
add.w d3,d2
lsl.w #8,d2
lsl.w #4,d2
or.w #$400,d2
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 double playfield
lsl.w #8,d2
lsl.w #4,d2
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
or.l #$300,d2 ;genlock info
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
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.s 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
grappln.end
movem.l (sp)+,d0-d7/a0-a6
rts
;sets palettes to copper
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 #8*2+palette,a1
bsr.s gracfrm
bsr.s 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
cmp.w #32-1,d0 ;niet meer dan 32 kleuren
ble gracfrm.sub
move.w #32-1,d0
gracfrm.sub
tst.w d0 ;0 planes ?
beq.s gracfrm.end
gracfrm.col
gracfrm.fa
move.w (a0)+,(a1)+
dbra d0,gracfrm.fa
gracfrm.end
movem.l (sp)+,d0-d7/a0-a6
rts
;handles colorcycling in the palette-buffer
;and copies palette-buffer to copper
palctr
movem.l d0-d7/a0-a6,-(sp)
move.l curpic1,a2 ;current raw
cmp.l #0,a2
beq.s palctr.qb
lea cycdel1,a3 ;cycle delays
move.l #palette,a4
bsr palcyc
palctr.qb
move.l curpic2,a2 ;current raw
cmp.l #0,a2
beq.s palctr.c
lea cycdel2,a3 ;cycle delays
move.l #8*2+palette,a4
bsr palcyc
palctr.c
lea gracprcol,a1
move.l #palette,a0
move.w 00(a0),00*4+2(a1)
move.w 02(a0),01*4+2(a1)
move.w 04(a0),02*4+2(a1)
move.w 06(a0),03*4+2(a1)
move.w 08(a0),04*4+2(a1)
move.w 10(a0),05*4+2(a1)
move.w 12(a0),06*4+2(a1)
move.w 14(a0),07*4+2(a1)
move.w 16(a0),08*4+2(a1)
move.w 18(a0),09*4+2(a1)
move.w 20(a0),10*4+2(a1)
move.w 22(a0),11*4+2(a1)
move.w 24(a0),12*4+2(a1)
move.w 26(a0),13*4+2(a1)
move.w 28(a0),14*4+2(a1)
move.w 30(a0),15*4+2(a1)
move.w 32(a0),16*4+2(a1)
move.w 34(a0),17*4+2(a1)
move.w 36(a0),18*4+2(a1)
move.w 38(a0),19*4+2(a1)
move.w 40(a0),20*4+2(a1)
move.w 42(a0),21*4+2(a1)
move.w 44(a0),22*4+2(a1)
move.w 46(a0),23*4+2(a1)
move.w 48(a0),24*4+2(a1)
move.w 50(a0),25*4+2(a1)
move.w 52(a0),26*4+2(a1)
move.w 54(a0),27*4+2(a1)
move.w 56(a0),28*4+2(a1)
move.w 58(a0),29*4+2(a1)
move.w 60(a0),30*4+2(a1)
move.w 62(a0),31*4+2(a1)
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 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 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
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
;ownblit dc.b 0
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
gracprscr
dc.w $8e,$3381,$90,$81c1,$92,$003c,$94,$00d0
gracprbpl
dc.w $100,$9000,$102,$0000,$104,$0020
dc.w $108,$0000,$10a,$0000
gracprpln
dc.w $e0,$0000,$e2,$0000
dc.w $e4,$0000,$e6,$0000
dc.w $e8,$0000,$ea,$0000
dc.w $ec,$0000,$ee,$0000
dc.w $f0,$0000,$f2,$0000
dc.w $f4,$0000,$f6,$0000
gracprcol
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
cprjmp
dc.w $080,0,$082,0
gra.e
gra.ql equ gra.e-gra.s ;block lengte
cpr
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
dc.w $e0,$0000,$e2,$0000
dc.w $e4,$0000,$e6,$0000
dc.w $e8,$0000,$ea,$0000
dc.w $ec,$0000,$ee,$0000
dc.w $f0,$0000,$f2,$0000
dc.w $f4,$0000,$f6,$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 $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
prf_pat equ 7 ;pref sample size
prf_patnum equ 128 ;aantal songpos's
prf_len equ ((prf_pat*prf_patnum)+1)
prf_pos equ 0 ;eff position (teller)
prf_effs equ 1 ;start effect (*prf_patnum)
prf_effe equ 2 ;end effect (*prf_patnum)
prf_pri equ 3 ;priority (*prf_patnum)
prf_spd equ 4 ;eff speed (*prf_patnum)
prf_ani equ 5 ;ani speed (*prf_patnum)
prf_roth equ 6 ;routine info (*prf_patnum)
prf_rotl equ 7 ;routine info (*prf_patnum)
eff_num equ 256 ;aantal effects
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
fil_namlen equ 24 ;naamlengte
fil_len equ (fil_namlen+4+4) ;effect info length
fil_num equ 2+eff_num ;aantal files
fil_fil equ 0 ;file naam
fil_dir equ 24 ;pointer naar directory
fil_pnt equ 28 ;pointer naar meminfo
palette ds.w 64 ;palette
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 ;animspeed
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_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
cnop 0,2
var ds.b $300 ;variabelen voor routines
; SECTION 10,CODE_C
endc
; this is the routine-source
;**********************************************************************
ifnd rout
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
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 ;animspeed
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_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
vew_wid equ 44
vew_hgt equ 290
win_hgt equ 117
win_str equ $1a
endc
rot_vew equ 0 ;$8004 <- nog niet goed !
rot_dpt equ 1
ifeq rot_vew-0
rot_wid equ 44
rot_hgt equ 290
rot_cenx equ 0
rot_ceny equ 6
rot_siz equ -150
endc
ifeq rot_vew-$8004
rot_wid equ 44*2
rot_hgt equ 290*2
rot_cenx equ 4*8
rot_ceny equ 5
rot_siz equ -100
endc
lnd_sizx equ $4 ;size x
lnd_sizy equ $8 ;size y
lnd_palnum equ $10 ;aantal kleuren -1
lnd_pal equ $12 ;palette
lnd_wrl equ 256*2+lnd_pal ;worlddata
rot
dc.l 'ROUT'
ProgStart:
movem.l d2-d7/a1-a6,-(sp)
lea rot,a3 ;program-base
move.l d0,d1
divs #128,d1
and.l #$ffff,d1
move.l d1,d7 ;
muls #128,d1
sub.l d1,d0
move.l d0,d1
divs #64,d1
and.l #$ffff,d1
move.l d1,rotmod-rot(a3) ;mode
muls #64,d1
sub.l d1,d0
move.l d0,d1
divs #16,d1
and.l #$ffff,d1
move.l d1,d7 ;view size
lsl.l #1,d7 ;*2
lea rotsiztab,a1
move.w (a1,d7),Dif-rot(a3)
muls #16,d1
sub.l d1,d0
move.l d0,rotsintabpos-rot(a3) ;beweeg vorm
tst.l var_lnd(a0) ;is er een landfile ?
beq rot.return
move.l var_lnd(a0),a0 ;landscape data
cmp.l #'LAND',(a0) ;still active ?
bne rot.return
move.l lnd_sizx(a0),sizx-rot(a3)
move.l lnd_sizy(a0),sizy-rot(a3)
move.l lnd_sizx(a0),d0 ;bereken DifW
move.l #128,d1
clr.l d2
move.w Dif-rot(a3),d2
divs d2,d1
sub.w d1,d0
move.l d0,DifW-rot(a3)
lea lnd_wrl(a0),a0
move.l a0,d0
move.l d0,World-rot(a3)
; tst.l Ytable-rot(a3) ;al gedaan ?
; bne rot.done
lea rotytab,a0
move.l a0,d0
move.l d0,Ytable-rot(a3)
lea rotyadr,a0
move.l a0,d0
move.l d0,YTabAdr-rot(a3)
add.l #4*rot_dpt,d0
move.l d0,YTabAdrEnd-rot(a3)
lea rotdata,a0
move.l a0,d0
move.l d0,World_Data-rot(a3)
lea rotraw1,a1
add.l rotbuf-rot(a3),a1
move.l Ytable-rot(a3),a6
move.l YTabAdr-rot(a3),a5
move.w #rot_dpt-1,d1 ;depth-1
PInit_1:
move.l a6,(a5)+
move.l a1,a0 ;bitplane halen
add.l #rot_wid,a1
move.l #rot_hgt-1,d0 ;heigth-1
PInit_2:
move.l a0,(a6)+
add.l #rot_dpt*rot_wid,a0
dbra d0,PInit_2
dbra d1,PInit_1
rot.done
LoadLand: ;load landscape
StartHere: ;landscape groot laten zien
rotlop
bsr.s Hoofd3D
rot.return
lea rotpic1,a0 ;picture
add.l rotbuf-rot(a3),a0
eor.l #rotpic2-rotpic1,rotbuf-rot(a3)
move.l #0,d1 ;copper
movem.l (sp)+,d2-d7/a1-a6
rts
Hoofd3D: ;landscape 3d laten zien
move.l Ytable-rot(a3),a6
; move.l Ytable(pc),a6
; add.l YTabNr(pc),a6
bsr ScreenClear ;scherm wissen
move.l World-rot(a3),a5
lea rotsintab,a1 ;sinus add tabel
move.l rotsintabpos-rot(a3),d0
lsl.l #3,d0 ;*8
add.l d0,a1
lea rotsin,a0 ;sinus data
move.l rotsinx-rot(a3),d0 ;sinus x pos
clr.l d2
move.w (a0,d0),d2
; move.l sizx-rot(a3),d3 ;totale breedte
move.l DifW-rot(a3),d3 ;- x module
muls d3,d2 ;maal goede breedte
divs #256,d2 ;delen
move.w d2,2+AbsX-rot(a3) ;set absx
move.l rotsiny-rot(a3),d1 ;sinus y pos
clr.l d2
move.w (a0,d1),d2
; move.l sizy-rot(a3),d3 ;totale breedte
move.l DifW-rot(a3),d3 ;- x module
muls d3,d2 ;maal goede breedte
divs #256,d2 ;delen
move.w d2,2+AbsY-rot(a3) ;set ansy
move.l rotsinx-rot(a3),d0 ;change x pos
add.l (a1),d0
cmp.l #((((rotsin.e-rotsin)/8)*2)*4),d0
blt.s rot.ga
sub.l #((((rotsin.e-rotsin)/8)*2)*4),d0
rot.ga
move.l d0,rotsinx-rot(a3)
move.l rotsiny-rot(a3),d1 ;change y pos
add.l 4(a1),d1
cmp.l #((((rotsin.e-rotsin)/8)*2)*4),d1
blt.s rot.gb
sub.l #((((rotsin.e-rotsin)/8)*2)*4),d1
rot.gb
move.l d1,rotsiny-rot(a3)
move.l AbsX-rot(a3),d0 ;x,y view positie
muls (sizx+2)-rot(a3),d0
add.l d0,a5
move.l AbsY-rot(a3),d0
add.l d0,a5
move.l rotmod-rot(a3),d0 ;mode halen
tst.b d0
beq.s rotpix ;pixels ?
cmp.b #1,d0
beq rotlin ;lijntjes ?
rts
rotpix ;pixels
move.w #-64,X-rot(a3) ; -64
rotpix_LoopX:
move.w #64,Y-rot(a3)
move.l World_Data-rot(a3),a4
rotpix_LoopY:
move.w X-rot(a3),d0
move.w Y-rot(a3),d2
clr.w d1
move.b (a5)+,d1 ;z-waarde halen
lsr.b #1,d1 ;/2
ifge rot_dpt-2
move.b d1,d7
lsr.b #7-rot_dpt,d7 ;kleur
beq.s rotpixcol.da ;overslaan ?
endc
moveq.w #0,d3
move.w Hoogte-rot(a3),d4
move.w #rot_siz,d5 ; -120 -150
sub.w d5,d2
tst.w d2
beq.s rotCentProjEnd
sub.w d3,d0
sub.w d4,d1
muls d5,d0
muls d5,d1
divs d2,d0
divs d2,d1
sub.w d0,d3
sub.w d1,d4
move.w d3,d0
move.w d4,d1
neg.w d1
rotCentProjEnd:
add.w #rot_wid*4+rot_cenx,d0 ;centreer x1,y1
add.w #(rot_hgt*rot_ceny)/10,d1
ifeq rot_dpt-1 ;no-colorversion
move.w d1,d6 ;y-pos
lsl.w #2,d6 ;*4
move.l (a6,d6),a1 ;y regel halen
move.w d0,d6 ;x-pos
lsr.w #3,d6 ;/8
and.w #7,d0
eor.b #7,d0
bset d0,(a1,d6)
endc
ifge rot_dpt-2 ;color version
move.w d1,d6 ;y-pos
lsl.w #2,d6 ;*4
move.l (a6,d6),a1 ;y regel halen
move.w d0,d6 ;x-pos
lsr.w #3,d6 ;/8
and.w #7,d0
eor.b #7,d0
ifeq rot_dpt-2 ;color version 4
btst #1,d7 ;kleur
beq.s rotpixcol.ca
bset d0,(a1,d6)
rotpixcol.ca
btst #0,d7 ;kleur
beq.s rotpixcol.cb
bset d0,rot_wid(a1,d6)
rotpixcol.cb
endc
ifeq rot_dpt-3 ;color version 8
btst #2,d7 ;kleur
beq.s rotpixcol.ca
bset d0,(a1,d6)
rotpixcol.ca
btst #0,d7 ;kleur
beq.s rotpixcol.cb
bset d0,rot_wid(a1,d6)
rotpixcol.cb
btst #1,d7 ;kleur
beq.s rotpixcol.cc
bset d0,2*rot_wid(a1,d6)
rotpixcol.cc
endc
ifeq rot_dpt-5 ;color big version
add.l #rot_wid*2,a1
btst #4,d7 ;kleur
beq.s rotpixcol.ca
bset d0,-2*rot_wid(a1,d6)
rotpixcol.ca
btst #0,d7 ;kleur
beq.s rotpixcol.cb
bset d0,-1*rot_wid(a1,d6)
rotpixcol.cb
btst #1,d7 ;kleur
beq.s rotpixcol.cc
bset d0,(a1,d6)
rotpixcol.cc
btst #2,d7 ;kleur
beq.s rotpixcol.cd
bset d0,1*rot_wid(a1,d6)
rotpixcol.cd
btst #3,d7 ;kleur
beq.s rotpixcol.ce
bset d0,2*rot_wid(a1,d6)
rotpixcol.ce
endc
rotpixcol.da
endc
clr.l d0
move.w Dif-rot(a3),d0 ;stap naar volgende scherm positie
sub.w d0,Y-rot(a3)
cmp.w #-64,Y-rot(a3) ;laatste y punt ?
bne rotpix_LoopY
add.w d0,X-rot(a3)
add.l DifW-rot(a3),a5 ;stap naar volgend kaart-regel
cmp.w #64,X-rot(a3) ;laatste x punt ?
bne rotpix_LoopX
rts
rotlin ;lijntjes
move.w #-64,X-rot(a3) ; -64
rotlin_LoopX:
move.w #64,Y-rot(a3)
move.l World_Data-rot(a3),a4
rotlin_LoopY:
move.w X-rot(a3),d0
move.w Y-rot(a3),d2
clr.w d1
move.b (a5)+,d1 ;z-waarde halen
lsr.b #1,d1 ;/2
bsr CentralProj
add.w #rot_wid*4+rot_cenx,d0 ;centreer x1,y1
add.w #(rot_hgt*rot_ceny)/10,d1
move.w OldX-rot(a3),d2 ;x2,y2
move.w OldY-rot(a3),d3
move.w d0,OldX-rot(a3)
move.w d1,OldY-rot(a3)
cmp.w #64,Y-rot(a3) ;eerste y punt = overslaan
beq.s rotlin_Go_on
bsr Drawline ;lijn tekenen
rotlin_Go_on:
move.w (a4),d0
move.w 2(a4),d1
move.w OldX-rot(a3),d2
move.w OldY-rot(a3),d3
move.w d2,(a4)+
move.w d3,(a4)+
cmp.w #-64,X-rot(a3) ;eerste x punt = overslaan
beq.s rotlin_Go_On2
bsr Drawline
rotlin_Go_On2:
clr.l d0
move.w Dif-rot(a3),d0 ;stap naar volgende scherm positie
sub.w d0,Y-rot(a3)
cmp.w #-64,Y-rot(a3) ;laatste y punt ?
bne rotlin_LoopY
add.w d0,X-rot(a3)
add.l DifW-rot(a3),a5 ;stap naar volgend kaart-regel
cmp.w #64,X-rot(a3) ;laatste x punt ?
bne rotlin_LoopX
bsr.s blitwait
rts
; move.b $BFEC01,d0 ;read keyboard
; ror.b #1,d0
; cmp.b #$AF,d0 ; F1
; bne.s F2
; move.w #4,Dif
; move.l #224,DifW
;F2:
; cmp.b #$AE,d0 ; F2
; bne.s F3
; move.w #8,Dif
; move.l #240,DifW
;F3:
; cmp.b #$AD,d0 ; F3
; bne.s F4
; move.w #16,Dif
; move.l #248,DifW
;F4:
; cmp.b #$AC,d0 ; F4
; bne.s ESC
; move.w #32,Dif
; move.l #252,DifW
;ESC:
; cmp.b #$BA,d0 ; Esc
; bne.s Skey
; move.l #0,d0
; rts
;
;Skey:
; cmp.b #$DE,d0 ; 'S'
; bne.s F8
; move.l #2,d0
;F8:
; cmp.b #$A8,d0 ; F8
; bne.s F10
; move.w OldToeval(pc),Toeval
; move.w #1,d0
; rts
;F10:
; cmp.b #$A6,d0 ; F10
; bne.s T1_5
; move.w Teller(pc),Toeval
; move.w Toeval(pc),OldToeval
; move.l #1,d0
; rts
;T1_5:
; cmp.b #$FE,d0 ; 1,2,3,4,5
; bhi.s F9
; cmp.b #$F9,d0
; bls.s F9
; sub.b #$FA,d0
; move.b d0,Size
;F9:
; cmp.b #$A7,d0
; bne Loop3d_1
; move.l #1,d0
; move.w Toeval(pc),OldToeval
; rts
BlitClear:
move.l (a6),$DFF050 ;blit clear
move.l (a6),$DFF054
move.l #(rot_dpt-1)*rot_wid,$DFF064
move.w #$900,$DFF040
move.w #0,$DFF042
move.w #(rot_hgt*64)+(rot_wid/2),$DFF058
bsr.s blitwait
rts
blitwait:
btst #6,($DFF002).l ;blt wait
bne.s blitwait
rts
ScreenClear: ;clear screen
move.l YTabAdr-rot(a3),a0
move.w #rot_dpt-1,d0
LPos:
move.l (a0)+,a6
bsr.s BlitClear
dbra d0,LPos
rts
Verschil:
sub.l d2,d0
bsr.s SubM
neg.l d0
bsr.s SubM
neg.l d0
rts
SubM:
cmp.l #$7F,d0
ble.s Kleiner
move.l #$FF,d2
sub.l d2,d0
Kleiner:
rts
CentralProj:
move.w #0,d3
move.w Hoogte-rot(a3),d4
move.w #rot_siz,d5 ; -120 -150
sub.w d5,d2
tst.w d2
beq.s CentProjEnd
sub.w d3,d0
sub.w d4,d1
muls d5,d0
muls d5,d1
divs d2,d0
divs d2,d1
sub.w d0,d3
sub.w d1,d4
move.w d3,d0
move.w d4,d1
neg.w d1
CentProjEnd:
rts
Drawline:
cmp.w d0,d2
bne.s WDraw1
cmp.w d1,d3
bne.s WDraw1
rts
WDraw1:
tst.w d1
bmi.s Clipping
tst.w d3
bmi.s Clipping1
bra.s WDraw
Clipping:
tst.w d3
bpl.s Clipping1
rts
Clipping1:
move.w d0,d4
sub.w d2,d4
move.w d3,d5
muls d5,d4
sub.w d1,d5
divs d5,d4
add.w d2,d4
tst.w d1
bmi.s PKt1
move.w d4,d2
clr.w d3
bra.s Drawline
PKt1:
move.w d4,d0
clr.w d1
bra.s Drawline
WDraw:
move.w #rot_dpt*rot_wid,a1
clr.l d6
move.w d1,d6
lsl.w #2,d6
move.l 0(a6,d6.l),d4
moveq #-$10,d5
and.w d0,d5
lsr.w #3,d5
add.w d5,d4
clr.l d5
sub.w d1,d3
roxl.b #1,d5
tst.w d3
bge.s GrY
neg.w d3
GrY:
sub.w d0,d2
roxl.b #1,d5
tst.w d2
bge.s GrX
neg.w d2
GrX:
move.w d3,d1
sub.w d2,d1
bge.s Gd
exg d2,d3
Gd:
roxl.b #1,d5
move.b OktTab(pc,d5.l),d5
add.w d2,d2
move.l a5,-(sp)
move.l #$dff000,a5
WBlit:
btst #6,$002(a5)
bne.s WBlit
move.w d2,$062(a5)
sub.w d3,d2
bge.s Voorz
or.b #$40,d5
Voorz:
move.w d2,$052(a5)
sub.w d3,d2
move.w d2,$064(a5)
move.w #$8000,$074(a5)
move.w #$FFFF,$072(a5)
move.w #$FFFF,$044(a5)
and.w #15,d0
ror.w #4,d0
or.w #$BCA,d0
move.w d0,$040(a5)
move.w d5,$042(a5)
move.l d4,$048(a5)
move.l d4,$054(a5)
move.w a1,$060(a5)
move.w a1,$066(a5)
lsl.w #6,d3
addq.w #2,d3
move.w d3,$058(a5)
move.l (sp)+,a5
rts
OktTab:
dc.w $111,$915,$519,$D1D
X: dc.w 0
Y: dc.w 0
OldX: dc.w 0
OldY: dc.w 0
World_Data: dc.l 0
AbsX: dc.l 0
AbsY: dc.l 0
Hoogte: dc.w 119 ;-49 tot 119
sizx dc.l 0
sizy dc.l 0
Ytable: dc.l 0
YTabAdr: dc.l 0
YTabAdrEnd: dc.l 0
YTabNr: dc.l 0
World: dc.l 0
Dif: dc.w 8 ;4 ;8 scherm stap
DifW: dc.l 242 ;226 ;242 kaart-regel module stap
rotbuf dc.l 0
rotsinx dc.l 0
rotsiny dc.l (((rotsin.e-rotsin)/8)*2)
rotsintabpos dc.l 0
rotmod dc.l 0
; Dif Difw
rotsiztab
dc.w 16,8,4,2
; xadd yadd
rotsintab
dc.l 4*2, 4*2
dc.l 2*2, 4*2
dc.l 4*2, 6*2
rept 16-3
dc.l 2*2, 2*2
endr
rotsin
dc.w 128,129,130,131,132,134,135,136,137,138,139,140
dc.w 141,142,143,145,146,147,148,149,150,151,152,153
dc.w 154,155,157,158,159,160,161,162,163,164,165,166
dc.w 167,168,169,170,171,172,174,175,176,177,178,179
dc.w 180,181,182,183,184,185,186,187,188,189,190,191
dc.w 192,192,193,194,195,196,197,198,199,200,201,202
dc.w 203,204,204,205,206,207,208,209,210,210,211,212
dc.w 213,214,215,215,216,217,218,219,219,220,221,222
dc.w 222,223,224,225,225,226,227,227,228,229,229,230
dc.w 231,231,232,233,233,234,235,235,236,236,237,237
dc.w 238,239,239,240,240,241,241,242,242,243,243,244
dc.w 244,244,245,245,246,246,247,247,247,248,248,248
dc.w 249,249,249,250,250,250,251,251,251,251,252,252
dc.w 252,252,253,253,253,253,253,254,254,254,254,254
dc.w 254,254,255,255,255,255,255,255,255,255,255,255
dc.w 255,255,255,255,255,255,255,255,255,255,255,254
dc.w 254,254,254,254,254,254,253,253,253,253,253,252
dc.w 252,252,252,251,251,251,251,250,250,250,249,249
dc.w 249,248,248,248,247,247,247,246,246,245,245,244
dc.w 244,244,243,243,242,242,241,241,240,240,239,239
dc.w 238,237,237,236,236,235,235,234,233,233,232,231
dc.w 231,230,229,229,228,227,227,226,225,225,224,223
dc.w 222,222,221,220,219,219,218,217,216,215,215,214
dc.w 213,212,211,210,210,209,208,207,206,205,204,204
dc.w 203,202,201,200,199,198,197,196,195,194,193,192
dc.w 192,191,190,189,188,187,186,185,184,183,182,181
dc.w 180,179,178,177,176,175,174,172,171,170,169,168
dc.w 167,166,165,164,163,162,161,160,159,158,157,155
dc.w 154,153,152,151,150,149,148,147,146,145,143,142
dc.w 141,140,139,138,137,136,135,134,132,131,130,129
dc.w 128,127,126,125,124,122,121,120,119,118,117,116
dc.w 115,114,113,111,110,109,108,107,106,105,104,103
dc.w 102,101,99,98,97,96,95,94,93,92,91,90
dc.w 89,88,87,86,85,84,82,81,80,79,78,77
dc.w 76,75,74,73,72,71,70,69,68,67,66,65
dc.w 65,64,63,62,61,60,59,58,57,56,55,54
dc.w 53,52,52,51,50,49,48,47,46,46,45,44
dc.w 43,42,41,41,40,39,38,37,37,36,35,34
dc.w 34,33,32,31,31,30,29,29,28,27,27,26
dc.w 25,25,24,23,23,22,21,21,20,20,19,19
dc.w 18,17,17,16,16,15,15,14,14,13,13,12
dc.w 12,12,11,11,10,10,9,9,9,8,8,8
dc.w 7,7,7,6,6,6,5,5,5,5,4,4
dc.w 4,4,3,3,3,3,3,2,2,2,2,2
dc.w 2,2,1,1,1,1,1,1,1,1,1,1
dc.w 1,1,1,1,1,1,1,1,1,1,1,2
dc.w 2,2,2,2,2,2,3,3,3,3,3,4
dc.w 4,4,4,5,5,5,5,6,6,6,7,7
dc.w 7,8,8,8,9,9,9,10,10,11,11,12
dc.w 12,12,13,13,14,14,15,15,16,16,17,17
dc.w 18,19,19,20,20,21,21,22,23,23,24,25
dc.w 25,26,27,27,28,29,29,30,31,31,32,33
dc.w 34,34,35,36,37,37,38,39,40,41,41,42
dc.w 43,44,45,46,46,47,48,49,50,51,52,52
dc.w 53,54,55,56,57,58,59,60,61,62,63,64
dc.w 64,65,66,67,68,69,70,71,72,73,74,75
dc.w 76,77,78,79,80,81,82,84,85,86,87,88
dc.w 89,90,91,92,93,94,95,96,97,98,99,101
dc.w 102,103,104,105,106,107,108,109,110,111,113,114
dc.w 115,116,117,118,119,120,121,122,124,125,126,127
dc.w 128
rotsin.e
rotyadr ds.l rot_dpt ;plane offsets
rotytab ds.l rot_dpt*rot_hgt ;plane y offsets
rotdata ds.w 64 ;words
;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
rotpic1
dc.l 'PICT'
dc.w rot_wid,rot_hgt,rot_dpt,1,rot_vew
ds.b 4*4
ifeq rot_dpt-1
dc.w 2-1
dc.w $000,$FFF
ds.w 256-2
endc
ifeq rot_dpt-2
dc.w 4-1
dc.w $000,$0f0,$c70,$777
ds.w 256-4
endc
ifeq rot_dpt-3
dc.w 8-1
dc.w $000,$050,$0a0,$0f0
dc.w $c70,$c70,$777,$777
ds.w 256-8
endc
ifeq rot_dpt-5
dc.w 32-1
dc.w $000,$050,$060,$070,$080,$090,$0a0,$0b0
dc.w $0c0,$0d0,$0f0,$2e0,$4b0,$690,$880,$a70
dc.w $c70,$c70,$c70,$c70,$d80,$d80,$d80,$d80
dc.w $c71,$b62,$a63,$964,$866,$777,$777,$777
ds.w 256-32
endc
rotraw1
ds.b rot_wid*rot_hgt*rot_dpt
rotpic2
dc.l 'PICT'
dc.w rot_wid,rot_hgt,rot_dpt,1,rot_vew
ds.b 4*4
ifeq rot_dpt-1
dc.w 2-1
dc.w $000,$FFF
ds.w 256-2
endc
ifeq rot_dpt-2
dc.w 4-1
dc.w $000,$0f0,$c70,$777
ds.w 256-4
endc
ifeq rot_dpt-3
dc.w 8-1
dc.w $000,$050,$0a0,$0f0
dc.w $c70,$c70,$777,$777
ds.w 256-8
endc
ifeq rot_dpt-5
dc.w 32-1
dc.w $000,$050,$060,$070,$080,$090,$0a0,$0b0
dc.w $0c0,$0d0,$0f0,$2e0,$4b0,$690,$880,$a70
dc.w $c70,$c70,$c70,$c70,$d80,$d80,$d80,$d80
dc.w $c71,$b62,$a63,$964,$866,$777,$777,$777
ds.w 256-32
endc
rotraw2
ds.b rot_wid*rot_hgt*rot_dpt
rot.e
;**********************************************************************
;and here are the incbin-files....
ifd rout
cnop 0,2
rotinc
incbin 'w:effect/forest.lnd'
endc