home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Fujiology Archive
/
fujiology_archive_v1_0.iso
/
!FALCON
/
AGGRESSN
/
MOTION.ZIP
/
MOTION
/
DSP
/
GSHADE10.S56
< prev
next >
Wrap
Text File
|
1995-04-05
|
9KB
|
491 lines
;---------------------------------------------------------
; Gshade matikat by WizTom..
;--------------------------------------------
; pari vittuilua dsp:ltä..
; flagit asettuu vain accu laskuista, tst a rulz (accu move ylivuotoon)
; 32kwordia ext rammia p/x/y
; mpy kertaa vastauksen kahdella
; reunastepit, delta vasenreuna (+wide)
; entire polygon, unzekked size (toka kulma vajaa?), endaa reunojen törmätessä..
; deltaclear...
PBC equ $ffe0
HSR equ $ffe9
HTX equ $ffeb
org p:$0
jmp start
; org p:$40
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
start
secure movep #1,X:PBC
jclr #0,x:HSR,secure
move x:HTX,a
lsl a
movep #0,x:$fffe ;port a (luku tahtoo tökkiä ilman..)
secure2 jclr #1,X:HSR,secure2
move a1,X:HTX
move #$ffff,m0
move #$ffff,m1
move #$ffff,m2
move #$ffff,m3
move #$ffff,m4
move #$ffff,m5
move #$ffff,m6
move #$ffff,m7
start2
move #$123456,x0
secure3 jclr #1,X:HSR,secure3
move x0,X:HTX
kasky movep #1,X:PBC
jclr #0,x:HSR,kasky
move x:HTX,a
tst a
jne jotain
kasky_zero
jsr get_polys
jsr clear_x_buf
jsr calc_poly_steps
jsr x_delta
jsr write_result
jmp start2
jotain
move #>$fac,x0
jotain2 jclr #1,X:HSR,jotain2 ;feed object,clear x_buf
move x0,X:HTX
jmp start2
;---------------------------------------------------
get_polys
ae movep #1,X:PBC ;screen base
jclr #0,x:HSR,ae
move x:HTX,x0
move x0,x:Screen
aa movep #1,X:PBC
jclr #0,x:HSR,aa
move x:HTX,x0 ;polymäärä
move x0,x:number_of_polys
move x0,a
add x0,a
add x0,a
move a1,x0
move #cords,r0
do x0,feed_me1
aab movep #1,X:PBC ;feed x
jclr #0,x:HSR,aab
move x:HTX,x:(r0)+
ac movep #1,X:PBC ;y
jclr #0,x:HSR,ac
move x:HTX,x:(r0)+
ad movep #1,X:PBC ;z (kulman shadeval)
jclr #0,x:HSR,ad
move x:HTX,x:(r0)+
nop
feed_me1
rts
;-------------------------------------------------
write_result
move #-1,x0
move x0,x:(r4)+
move x0,x:(r4)+ ;lopeta lista
move #cpu_list,r0
move #-1,a
suck move x:(r0)+,x0
cmp x0,a
jne aba
move x:(r0),x1
cmp x1,a
jeq skriivattu_vika
aba jclr #1,X:HSR,aba
move x0,X:HTX
jmp suck
skriivattu_vika
aaa jclr #1,X:HSR,aaa
move x0,X:HTX
abc jclr #1,X:HSR,abc
move x1,X:HTX
move #x_buf_delta,r0
do #200*4,lusifer
a_666 jclr #1,X:HSR,a_666
move x:(r0)+,x0
move x0,X:HTX
nop
lusifer
rts
;---------------------------------------------------------
cleaR_x_buf
move #x_buffer1,r0
move #0,x0
rep #2*200
move x0,x:(r0)+
rts
;---------------------------------------------------------
x_delta
move #x_buffer1,r0
move #x_buffer2,r1
move #x_buf_delta,r2
do #200,elder_ones
;---------
move x:(r0)+,a ;new
move x:(r1),x0 ;old
sub x0,a a,x:(r1)+ ;new -> old
jgt amok1
move #0,a
amok1
move x0,x:(r2)+ ;x1
move a,x:(r2)+ ;wide (zero if none)
move x:(r0)+,x0
move x:(r1),a
sub x0,a x0,x:(r1)+
jgt amok2
move #0,a
amok2
move x0,x:(r2)+ ;x2
move a,x:(r2)+ ;wide2
elder_ones
rts
;---------------------------------------------------------
calc_poly_steps
move #cpu_list,r4
move #cords,r0
move #cords+1,r1 ;y cords..
move #cords+4,r2
move #cords+7,r3
move #9+1,n1
move #9+1,n2
move #9+1,n3
move #-1,n5
move x:number_of_polys,x0
do x0,step_one
;--------------------------- sort polycords
move x:(r1),a
move x:(r2),x0
cmp x0,a
jlt lame1
move x:-(r1),y0 ;jos 1<2 swap
move x:-(r2),y1
move y0,x:(r2)+
move y1,x:(r1)+
move x:(r1),y0
move x:(r2),y1
move y0,x:(r2)+
move y1,x:(r1)+
move x:(r1),y0
move x:(r2),y1
move y0,x:(r2)-
move y1,x:(r1)-
lame1
move x:(r1),a
move x:(r3),x0
cmp x0,a
jlt lame2
move x:-(r1),y0 ;jos 1<3 swap
move x:-(r3),y1
move y0,x:(r3)+
move y1,x:(r1)+
move x:(r1),y0
move x:(r3),y1
move y0,x:(r3)+
move y1,x:(r1)+
move x:(r1),y0
move x:(r3),y1
move y0,x:(r3)-
move y1,x:(r1)-
lame2
move x:(r2),a
move x:(r3),x0
cmp x0,a
jlt lame3
move x:-(r2),y0 ;jos 2<3 swap
move x:-(r3),y1
move y0,x:(r3)+
move y1,x:(r2)+
move x:(r2),y0
move x:(r3),y1
move y0,x:(r3)+
move y1,x:(r2)+
move x:(r2),y0
move x:(r3),y1
move y0,x:(r3)-
move y1,x:(r2)-
lame3
;listaan x1+y1*640.l, polyn alku, loput deltana..
move (r1)-
move (r2)-
move (r3)-
move #>640,x0
move x:(r1)+,x1 ;x
move x:(r1)-,y0 ;y
mpy y0,x0,a x:screen,y1
rep #23
asl a
add y1,a x1,x:x_start ;inc y*640, base
tfr a,b
rep #16
lsr a
move a1,x:(r4)+ ;high word
move b1,x:(r4)+ ;low word
move y0,a
lsl a
lsl a #x_buffer1,y0
add y0,a
move a1,r5 ;x_buffer (alkaa x:n alusta!)
move x:(r2)+,a
move x:(r1)+,x0
sub x0,a x:(r2)-,b ;delta x
move x:(r1)-,x0
sub x0,b ;delta y
move b1,x0
move x0,x:eka_kork ;eka korkeus
jsr jako
move a0,x1 ;eka reuna
move x:(r3)+,a
move x:(r1)+,x0
sub x0,a x:(r3)-,b ;delta x
move x:(r1)-,x0
sub x0,b ;delta y
move b1,x0
move x0,x:toka_kork
jsr jako ;toka reuna
move a0,x0 ;toka reuna
move x1,a
move x0,x:pitka_sivu
move x0,b
cmp a,b
jgt vasen_small
move a,x0
move b,x1
vasen_small
move x:x_start,a
rep #12
asl a
move #$800,y0
add y0,a a0,x:oldpixleft ;zero deltat
move a0,x:oldwide ;sortatut reunat, x+0.5
move x:eka_kork,b
tst b
jeq vain_alaosa
move b,y0
tfr a,b
do y0,end_eka_puolisko
;----------
add x1,a ;
add x0,b #$800,y0 ;stepit
move a1,x:s_eka ;
move b1,x:s_toka ;
move a1,y1 ;
mpy y0,y1,a b1,y1 ;
mpy y0,y1,b x:oldpixleft,y1 ;
move #0,a0 ;
move a1,x:d_eka ;
move #0,b0 ;
move b1,x:d_toka ;reunapisteet cleraukseen..
sub a,b a1,x:oldpixleft ;wide reunapisteista, no dec
jne ok ;
move #>$1,b ;
ok move b1,x:(r4)+ ;
move b1,x:widespare ;
sub y1,a x:oldwide,y1 ;reuna delta
sub y1,a x:widespare,y1 ;subaa oldwide
move y1,x:oldwide ;
lsl a #$280,y1 ;
add y1,a ;
move a1,x:(r4)+ ;vasen reuna screen delta
move x:d_eka,a
move x:(r5)+,y0 ;edellinen reuna..
cmp y0,a
jge alter1
move a1,x:(r5+n5)
alter1
move x:d_toka,a
move x:(r5)+,y0
cmp y0,a
jle alter2
move a1,x:(r5+n5)
alter2
move x:s_eka,a ;
move x:s_toka,b ;
end_eka_puolisko
move x0,y1
move x:eka_kork,y0
move x:toka_kork,a a,y1
sub y0,a
jeq toka_puolisko
move a1,x0
move x:(r3),a
move x:(r2),y0
sub y0,a ;
jsr jako ;kolmas reuna
move a0,x0 ;toka reuna, x0 and x1 or y1
move x:pitka_sivu,a
move x0,b
cmp a,b
jlt menee_hermot
tfr a,b x0,a
menee_hermot
move a1,x1
move b1,x0
move x:s_eka,a
move x:s_toka,b
cmp a,b
jgt vasen_small2
move b,y0
tfr a,b y0,a
vasen_small2
;---------------------------
toka_puolisko
add x1,a ;
add x0,b #$800,y0 ;stepit
move a1,x:s_eka ;
move b1,x:s_toka ;
move a1,y1 ;
mpy y0,y1,a b1,y1 ;
mpy y0,y1,b x:oldpixleft,y1 ;
move y0,a0 ;
move a1,x:d_eka ;
move y0,b0 ;
move b1,x:d_toka ;
sub a,b a1,x:oldpixleft ;wide reunapisteista, no dec
jne ok2 ;
jmi bail_out_if_negative
move #>$1,b ;
ok2 move b1,x:(r4)+ ;
move b1,x:widespare ;
sub y1,a x:oldwide,y1 ;reuna delta
sub y1,a x:widespare,y1 ;subaa oldwide
move y1,x:oldwide ;
lsl a #$280,y1 ;
add y1,a ;
move a1,x:(r4)+ ;vasen reuna screen delta
move x:d_eka,a
move x:(r5)+,y0 ;edellinen reuna..
cmp y0,a
jge alter3
move a1,x:(r5+n5)
alter3
move x:d_toka,a
move x:(r5)+,y0
cmp y0,a
jle alter4
move a1,x:(r5+n5)
alter4
move x:s_eka,a ;
move x:s_toka,b ;
jmp toka_puolisko
bail_out_if_negative
move #-1,x0
move x0,x:(r4)+ ;next poly
move (r1)+n1
move (r2)+n2
move (r3)+n3
step_one
move #-1,x0
move x0,x:(r4)+ ;end of list
rts
;----------------
vain_alaosa
move x:(r2),b
move x:(r1),a
move #>$800000,b0
move #>$800000,a0
rep #12
lsl b
rep #12
lsl a
move a,x:s_eka
jmp end_eka_puolisko
;---------------------------------------------------
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
jakospare ds 1
s_eka ds 1
s_toka ds 1
d_eka ds 1
d_toka ds 1
eka_kork ds 1
toka_kork ds 1
pitka_sivu ds 1
x_start ds 1
oldpixleft ds 1
oldwide ds 1
widespare ds 1
screen
; dc $220000
ds 1
number_of_polys
; dc 1
ds 1
cords
; dc 300,10,0
; dc 100,100,0
; dc 200,150,0
ds 9*10
x_buffer1 ds 2*200 ;objectin reunataulut x1,x2
x_buffer2 ds 2*200 ;vanha frame..
x_buf_delta ds 4*200 ;x1,wide1,x2,wide2
cpu_list ds 4*200 ;cpu listat, kaikki vapaa muisti
end