home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Fujiology Archive
/
fujiology_archive_v1_0.iso
/
!FALCON
/
AGGRESSN
/
MOTION.ZIP
/
MOTION
/
DSP
/
GT_MAP8.S56
< prev
next >
Wrap
Text File
|
1995-12-26
|
9KB
|
491 lines
;--------------------------------------------------------------
; Texture-mapping with multible GouraUd-shades by WizTom of AGGRESSION
; 25k pixel a frame, 1.25M a second!
; neliopiirtotestaus..
; flippizekki, flipatussa toka piste vasemmalla, muuten oikealla
; Gshade X sukka hiukan
PBC equ $ffe0
HSR equ $ffe9
HTX equ $ffeb
v1 equ 0
v1b equ $003f80
v2 equ 0
v2b equ 0
v3 equ 0
v3b equ 0
v4 equ 0
v4b equ 0
org p:$0
jmp start
dc 0,0,0,0,0,0,0,0,0,0
dc 0,0,0,0,0,0,0,0,0,0
dc 0,0,0,0,0,0,0,0,0,0
dc 0,0,0,0,0,0,0,0,0,0
dc 0,0,0,0,0,0,0,0,0,0
dc 0,0,0,0,0,0,0,0,0,0
dc 0,0,0,0
start
move #>$ffff,m0
jsr fixvakiot
move m0,m1
move m0,m2
move m0,m3
move m0,m4
move m0,m5
move m0,m6
move m0,m7
jsr geninvert
movep #0,x:$fffe ;fix read
move #>$babe,x0
x_ready jclr #1,X:HSR,x_ready
move x0,X:HTX
kasky movep #1,X:PBC
jclr #0,x:HSR,kasky
move x:HTX,a
tst a #>1,x0
jeq key0 ;feed texture
sub x0,a
jeq key1 ;render test
; sub x0,a
; jeq key2
; sub x0,a
; jeq key3
jmp start
;---------------------------------------
key1
jsr getvalues
jsr createginc
jsr renderpoly
jmp start
;-----------------------------
renderpoly
move #TXTlineinc,r0 ;y7.7 - x7.16 Tinc
move #vakio,r1 ;v4b (maski)
move #HTX,r3
move #texture,r2 ;
move #invert,r6
move #GincY,r5
move x:Ysize,a
tst a
jle zeroekapartti
move a1,x0
jsr drawhalfpoly
zeroekapartti
move x:Ysize2,a
tst a
jle zerotokapartti
move #POLYbase,r4
move x:flip,b
tst b
jeq noflip
;---
move x:POLYbase2,x0
move x0,x:(r4)+ ;flipattu poly muuta vasen laita
move x:POLYinc2,x0
move x0,x:(r4)+
move l:(r4)+,x ;txt alin
move x,l:TXTvasen
move l:(r4),x ;txt alin inc
move x,l:TXTvaseninc
move a1,x0
jsr drawhalfpoly
zerotokapartti
rts
;---
noflip
move x:POLYbase2,x0 ;default polu, muuta oikea laita
move x0,y:(r4)+
move x:POLYinc2,x0
move x0,y:(r4)+
move l:(r4)+,x ;txt alin
move x,l:TXToikea
move l:(r4),x ;txt alin inc
move x,l:TXToikeainc
move a1,x0
jsr drawhalfpoly
rts
;--------
Drawhalfpoly
do x0,lines
; Y-------
move #-3,n4
move #txtoikea,r4
move l:POLYbase,x ;
move l:POLYinc,a
add x,a #>2048,y0 ;inc seuraavalle scanlinelle
mpy y0,x1,a a,l:POLYbase ;
mpy y0,x0,a a,y0 ;
move #>0,a0
Wxoff jclr #1,X:HSR,Wxoff
move y0,X:HTX ;linen alku Xoffset
sub y0,a #>$40000,y0
jle zeroline
move a,x0
mpy y0,x0,b a1,n6
Wwide jclr #1,X:HSR,Wwide
move b1,X:HTX ;scanlinen dbf
move #>$1f,b
and x0,b #>32,y0
neg b
add y0,b
Wwide2 jclr #1,X:HSR,Wwide2
move b1,X:HTX ;scanlinen jmp
;-------
move l:(r4)+,b ;oikea
move l:(r4)+,a ;oikeainc
add b,a l:(r4)+,x ;vasen
move a,l:(r4+n4) ;oikea
move l:(r4)-,a ;vaseninc
add x,a
sub x,b a,l:(r4) ;txt wide?, vasen
move y:(r6+n6),y0
move b1,y1
mpy y0,y1,b b0,y1 ;scale y
move x:(r6+n6),y0
mpy y0,y1,a
move a1,b0 ;scale x
move b10,l:(r0) ;lineinc
move x1,b
rep #9
asr b
move b1,x1
move #GincX,r4 ;Gshade inc table (alkuun joka scanline)
move y:(r5)+,b ;Gbase
;fix eka pixel
move x1,a
move y:(r1),y1
and y1,a #>128,y0 ;vakio
mac y0,x0,a #>0,y1
move a1,n2
do n6,scanline ;(feed cpu start,wide)
; X-----------------
add y1,b l:(r0),a ; inc G, get YX inc
add x,a y:(r1),y1 ; inc TXTbase, get mask
and y1,a a,x1 y:(r2+n2),y1 ; crop Y, get GFX
mac y0,x0,a a0,x0 ; Y+X old
add y1,b a1,n2 ; mix GFX+G
sync jclr #1,x:HSR,sync
sub y1,b b,x:(r3) y:(r4)+,y1 ; get G, feed CPU, get G inc
scanline
;------------
zeroback
nop
nop
lines
rts
;---------------
zeroline
clr b #>32,a
Wwide3 jclr #1,X:HSR,Wwide3
move b1,X:HTX ;scanlinen dbf
Wwide4 jclr #1,X:HSR,Wwide4
move a1,X:HTX ;scanlinen dbf
move l:(r4)+,b ;oikea
move l:(r4)+,a ;oikeainc
add b,a l:(r4)+,x ;vasen
move a,l:(r4+n4) ;oikea
move l:(r4)-,a ;vaseninc
add x,a y:(r5)+,b ;Gbase
move a,l:(r4) ;vasen
jmp zeroback
;------------------------------------
createginc
move x:Ysize,a
move x:Ysize2,x0
move x:flip,b
tst b
jeq eiflipGshade
;------------------------ Y table split
move #GincY,n3
tst a
jle eiGXeka
move a1,n0
move #Geka,r0
move #Gtoka,r1
jsr GenGtable
move r3,n3 ;ekan partin loppuosoite
eiGxeka
move x:Ysize2,a
tst a
jle creaGX
move a1,n0
move #Gtoka,r0
move #Gkolmas,r1
jsr GenGtable
;------------------------ X table flip
creaGX move #GincX,n3
move x:Xwide,a
tst a
jle creaGover
move a1,n0
move #Gtoka,r0
move #Ghalf,r1
jsr GenGtable
jmp creaGover
;------------------------ Y table
eiflipGshade
add x0,a
move a1,n0 ;kokonaiskorkeus
move #GincY,n3
move #Geka,r0
move #Gkolmas,r1
jsr GenGtable
;----------------------- X table
move #GincX,n3
move x:Xwide,a
tst a
jle creaGover
move a1,n0
move #Ghalf,r0
move #Gtoka,r1
jsr GenGtable
;----------------------- X delta
creaGover
move n3,r3
do n0,deltaconv
move y:(r3)+,x0
move y:(r3)-,a
sub x0,a
move a1,y:(r3)+
clr a
deltaconv
rep #10 ;hiukka heittovaraa deltalle..
move a,y:(r3)+
rts
;----------------------------------
GenGtable
clr a n3,r3
rep n0
move a,y:(r3)+
move n3,r3
move x:(r0),y0
move x:(r1),y1
move #>128,x1
mpy x1,y0,a #GxB,r7
mpy x1,y1,b a0,a
move b0,b
jsr Gslide
move n3,r3
move #GxG,r7
move x:(r0),a
move x:(r1),b
jsr Gslide
move x:(r0),y0
move x:(r1),y1
move #>$8000,x1
mpy x1,y0,a n3,r3
mpy x1,y1,b #GxR,r7
jsr Gslide
rts
;------------------
Gslide
move #>$007f00,x1
and x1,a
and x1,b a1,x1
move b1,b
sub x1,b #>$40,y1 ;G delta
move b1,x0
mpy x0,y1,a n0,x0
andi #$fe,ccr ;clear carry
rep #24
div x0,a
asl a
move a0,x0 ;inc
move x1,a ;base
rep #7
asl a
do n0,gloopy
move a1,y0
mpy y1,y0,b
move b1,n7
move y:(r3),b
move x:(r7+n7),y0 ;get 16 bit val
or y0,b
add x0,a b1,y:(r3)+ ;step
gloopy
rts
;----------------
getvalues
move #TXToikea,r0
do #8,qq2
qq movep #1,X:PBC
jclr #0,x:HSR,qq
move x:HTX,x:(r0)
qq3 movep #1,X:PBC
jclr #0,x:HSR,qq3
move x:HTX,y:(r0)+
qq2
do #10,qq4
qq5 movep #1,X:PBC
jclr #0,x:HSR,qq5
move x:HTX,x:(r0)+
qq4
rts
;------------------------------------
key0
move #texture,r0
move #>128*120,x0
do x0,gettxt
getone
movep #1,X:PBC
jclr #0,x:HSR,getone
move x:HTX,y:(r0)+
gettxt
jmp start
;------------------------------------
geninvert
move #invert,r0
clr b #>1,x1
do #300,genloop
move b1,x0
add x1,b
move #>1,a
andi #$fe,ccr ;clear carry
rep #24
div x0,a
asl a
asr a
move a0,x:(r0)
move #>1,a
andi #$fe,ccr ;clear carry
rep #24
div x0,a
asl a
move a0,a
rep #10
asr a
move a1,y:(r0)+
genloop
move #GxB,r2
move #GxG,r1
move #GxR,r0
clr a #>$0001,x0
clr b #>$0020,y0
move #>$0800,x1
do #16,genG
move a0,x:(r2)+
move b1,x:(r1)+
move a1,x:(r0)+
add y0,b ;6 bit green!
move a0,x:(r2)+
move b1,x:(r1)+
move a1,x:(r0)+
add y0,b
add x,a
genG
rts
;------------------------------------
fixvakiot
move #vakio,r0
move #>v1,x1
move #>v1b,x0
move x,l:(r0)+
move #>v2,x1
move #>v2b,x0
move x,l:(r0)+
; move #>v3,x1
; move #>v1b,x0
; move x,l:(r0)+
; move #>v4,x1
; move #>v4b,x0
; move x,l:(r0)+
rts
;------------------------------------
;read_one
; movep #1,X:PBC
; jclr #0,x:HSR,read_one
; move x:HTX,a1
;write_one
; jclr #1,X:HSR,write_one
; move a1,X:HTX
;---------------------
;----------------------
;jako ;divs x0,a (signed $123.456)
; rep #12
; asr a
; andi #$fe,ccr ;clear carry
; rep #24
; div x0,a
; asl a
; jclr #23,x0,pos_diver
; neg a
;pos_diver
; rts ;signed result in a0 (finally WORKS!!!)
;---------------------------------
org x:$0
vakio ds 4
TXTlineinc ds 1
TXToikea ds 1 ;y.7 - x.16
TXToikeainc ds 1
TXTvasen ds 1
TXTvaseninc ds 1
POLYbase ds 1 ;vasen.12 - oikea.12
POLYinc ds 1
TXTalin ds 1
TXTalininc ds 1
POLYbase2 ds 1
POLYinc2 ds 1
Geka ds 1
Gtoka ds 1
Gkolmas ds 1
Ysize ds 1
Ysize2 ds 1
Xwide ds 1
Ghalf ds 1
flip ds 1
invert ds 300
GxR ds 32 ;slidetablet
GxG ds 32
GxB ds 32
org y:$0
vakiob ds 4
ds 19
ds 300
gincx ds 300 ;relativ gshade(max gshade size)
gincy ds 256
texture ;128*120 (?), 350 vapaata
end