mirror of
https://github.com/open-goal/jak-project
synced 2026-08-21 23:00:45 -04:00
[decomp] jak2: sprite, sprite-distort, some of sprite-glow (#1814)
* Decompile sprite-distort * Revert matrix, sprite-vec-data-2d changes * Sprite distort ref test * Sprite distort docs * Better sprite-distort docs * Jak2 sprite distort VU * sprite decomp * Some of sprite-glow * Clean up
This commit is contained in:
+125
-140
@@ -17960,6 +17960,9 @@
|
||||
(pad uint128 4 :offset-assert 32) ;; guessed by decompiler
|
||||
(data uint128 1 :offset-assert 96) ;; guessed by decompiler
|
||||
)
|
||||
(:methods
|
||||
(new (symbol type int int) _type_ 0)
|
||||
)
|
||||
:method-count-assert 9
|
||||
:size-assert #x70
|
||||
:flag-assert #x900000070
|
||||
@@ -17998,6 +18001,9 @@
|
||||
(adgif-data (inline-array adgif-shader) :offset-assert 24) ;; guessed by decompiler
|
||||
(data uint128 1 :offset-assert 32) ;; guessed by decompiler
|
||||
)
|
||||
(:methods
|
||||
(new (symbol type int int) _type_ 0)
|
||||
)
|
||||
:method-count-assert 9
|
||||
:size-assert #x30
|
||||
:flag-assert #x900000030
|
||||
@@ -18038,9 +18044,9 @@
|
||||
:size-assert #x8
|
||||
:flag-assert #xc00000008
|
||||
(:methods
|
||||
(simple-sprite-system-method-9 () none 9)
|
||||
(simple-sprite-system-method-10 () none 10)
|
||||
(simple-sprite-system-method-11 () none 11)
|
||||
(add! () none 9)
|
||||
(simple-sprite-system-method-10 (_type_ dma-buffer) none 10)
|
||||
(clear! (_type_) none 11)
|
||||
)
|
||||
)
|
||||
|
||||
@@ -18395,7 +18401,7 @@
|
||||
(bit3 3)
|
||||
(bit4 4)
|
||||
(ready-to-launch 6) ;; maybe just just death?
|
||||
(bit7 7)
|
||||
(distort 7) ;; distort sprite
|
||||
(aux-list 8) ;; prevents relaunch, adds to aux
|
||||
(bit9 9)
|
||||
(level0 10)
|
||||
@@ -18403,6 +18409,7 @@
|
||||
(bit12 12) ;; required to relaunch
|
||||
(bit13 13)
|
||||
(bit14 14)
|
||||
(glow 15) ;; glow sprite
|
||||
(use-global-acc 16)
|
||||
(launch-along-z 17)
|
||||
(left-multiply-quat 18)
|
||||
@@ -18410,6 +18417,7 @@
|
||||
(set-conerot 20)
|
||||
)
|
||||
|
||||
(declare-type sparticle-system basic)
|
||||
(deftype sparticle-cpuinfo (structure)
|
||||
((sprite sprite-vec-data-2d :offset-assert 0)
|
||||
(adgif adgif-shader :offset-assert 4)
|
||||
@@ -18433,7 +18441,7 @@
|
||||
(user-pntr uint32 :offset 108)
|
||||
(user-object basic :offset 108)
|
||||
(user-sprite sprite-vec-data-2d :offset 108)
|
||||
(sp-func basic :offset-assert 112)
|
||||
(sp-func (function sparticle-system sparticle-cpuinfo sprite-vec-data-3d uint none) :offset-assert 112)
|
||||
(next-time uint32 :offset-assert 116)
|
||||
(next-launcher basic :offset-assert 120)
|
||||
(cache-alpha float :offset-assert 124)
|
||||
@@ -21180,90 +21188,80 @@
|
||||
;; sprite ;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
#|
|
||||
(deftype sprite-header (structure)
|
||||
((header qword 1 :offset-assert 0) ;; guessed by decompiler
|
||||
(num-sprites int32 :offset-assert 0)
|
||||
((header qword 1 :inline :offset-assert 0)
|
||||
(num-sprites int32 :offset 0)
|
||||
)
|
||||
:method-count-assert 9
|
||||
:size-assert #x10
|
||||
:flag-assert #x900000010
|
||||
)
|
||||
|#
|
||||
|
||||
#|
|
||||
(deftype sprite-hvdf-data (structure)
|
||||
((data qword 76 :offset-assert 0) ;; guessed by decompiler
|
||||
((data qword 76 :inline :offset-assert 0)
|
||||
)
|
||||
:method-count-assert 9
|
||||
:size-assert #x4c0
|
||||
:flag-assert #x9000004c0
|
||||
)
|
||||
|#
|
||||
|
||||
#|
|
||||
(deftype sprite-hvdf-control (structure)
|
||||
((alloc int8 76 :offset-assert 0) ;; guessed by decompiler
|
||||
((alloc int8 76 :offset-assert 0)
|
||||
)
|
||||
:method-count-assert 9
|
||||
:size-assert #x4c
|
||||
:flag-assert #x90000004c
|
||||
)
|
||||
|#
|
||||
|
||||
#|
|
||||
(defenum sprite-aux-type
|
||||
:bitfield #f
|
||||
:type uint32
|
||||
(distort 0)
|
||||
(glow 1)
|
||||
)
|
||||
|
||||
(deftype sprite-aux-elem (structure)
|
||||
((aux-type uint32 :offset-assert 0)
|
||||
(data UNKNOWN 3 :offset-assert 4)
|
||||
(vec-data sprite-vec-data-2d :offset-assert 4)
|
||||
(gif-data adgif-shader :offset-assert 8)
|
||||
(aux-data sparticle-cpuinfo :offset-assert 12)
|
||||
((aux-type sprite-aux-type :offset-assert 0)
|
||||
(data vector 3 :offset-assert 4)
|
||||
(vec-data sprite-vec-data-2d :offset 4)
|
||||
(gif-data adgif-shader :offset 8)
|
||||
(aux-data sparticle-cpuinfo :offset 12)
|
||||
)
|
||||
:pack-me
|
||||
:method-count-assert 9
|
||||
:size-assert #x10
|
||||
:flag-assert #x900000010
|
||||
)
|
||||
|#
|
||||
|
||||
#|
|
||||
(deftype sprite-aux-list (basic)
|
||||
((num-entries int32 :offset-assert 4)
|
||||
(entry int32 :offset-assert 8)
|
||||
(data sprite-vec-data-2d :dynamic :offset-assert 12) ;; guessed by decompiler
|
||||
((num-entries int32 :offset-assert 4)
|
||||
(entry int32 :offset-assert 8)
|
||||
(data sprite-aux-elem :dynamic :inline :offset-assert 12)
|
||||
)
|
||||
(:methods
|
||||
(new (symbol type int) _type_ 0)
|
||||
)
|
||||
:method-count-assert 9
|
||||
:size-assert #xc
|
||||
:flag-assert #x90000000c
|
||||
)
|
||||
|#
|
||||
|
||||
#|
|
||||
(deftype sprite-aux-list (basic)
|
||||
()
|
||||
:method-count-assert 9
|
||||
:size-assert #xc
|
||||
:flag-assert #x90000000c
|
||||
;; Failed to read fields.
|
||||
)
|
||||
|#
|
||||
|
||||
#|
|
||||
(deftype sprite-frame-data (structure)
|
||||
((data UNKNOWN 42 :offset-assert 0)
|
||||
(cdata vector 16 :offset-assert 0) ;; guessed by decompiler
|
||||
(fdata UNKNOWN 26 :offset-assert 256)
|
||||
(xy-array UNKNOWN 8 :offset-assert 0)
|
||||
(st-array UNKNOWN 4 :offset-assert 128)
|
||||
(xyz-array UNKNOWN 4 :offset-assert 192)
|
||||
(hmge-scale vector :inline :offset-assert 256)
|
||||
(consts vector :inline :offset-assert 272)
|
||||
(pfog0 float :offset-assert 272)
|
||||
(deg-to-rad float :offset-assert 276)
|
||||
(min-scale float :offset-assert 280)
|
||||
(inv-area float :offset-assert 284)
|
||||
(adgif-giftag qword :inline :offset-assert 288) ;; gs-gif-tag :inline
|
||||
(sprite-2d-giftag qword :inline :offset-assert 304) ;; gs-gif-tag :inline
|
||||
(sprite-2d-giftag-2 qword :inline :offset-assert 320) ;; gs-gif-tag :inline
|
||||
(;;(data UNKNOWN 42 :offset-assert 0)
|
||||
(cdata vector 16 :inline :offset 0)
|
||||
;;(fdata UNKNOWN 26 :offset-assert 256)
|
||||
(xy-array vector 8 :inline :offset 0) ;; 0 - 32
|
||||
(st-array vector 4 :inline :offset 128) ;; 128 - 144
|
||||
(xyz-array vector 4 :inline :offset 192) ;; 192 - 208
|
||||
(hmge-scale vector :inline :offset 256)
|
||||
(consts vector :inline :offset 272 :score -1)
|
||||
(pfog0 float :offset 272)
|
||||
(deg-to-rad float :offset 276)
|
||||
(min-scale float :offset 280)
|
||||
(inv-area float :offset 284)
|
||||
(adgif-giftag gs-gif-tag :inline :offset-assert 288)
|
||||
(sprite-2d-giftag gs-gif-tag :inline :offset-assert 304)
|
||||
(sprite-2d-giftag-2 gs-gif-tag :inline :offset-assert 320)
|
||||
(sincos-01 vector :inline :offset-assert 336)
|
||||
(sincos-23 vector :inline :offset-assert 352)
|
||||
(sincos-45 vector :inline :offset-assert 368)
|
||||
@@ -21271,88 +21269,84 @@
|
||||
(sincos-89 vector :inline :offset-assert 400)
|
||||
(basis-x vector :inline :offset-assert 416)
|
||||
(basis-y vector :inline :offset-assert 432)
|
||||
(sprite-3d-giftag qword :inline :offset-assert 448) ;; gs-gif-tag :inline
|
||||
(sprite-3d-giftag-2 qword :inline :offset-assert 464)
|
||||
(sprite-3d-giftag gs-gif-tag :inline :offset-assert 448)
|
||||
(sprite-3d-giftag-2 gs-gif-tag :inline :offset-assert 464)
|
||||
(screen-shader adgif-shader :inline :offset-assert 480)
|
||||
(inv-hmge-scale vector :inline :offset-assert 576)
|
||||
(inv-hmge-scale vector :inline :offset 576)
|
||||
(stq-offset vector :inline :offset-assert 592)
|
||||
(stq-scale vector :inline :offset-assert 608)
|
||||
(rgba-plain qword :inline :offset-assert 624)
|
||||
(warp-giftag qword :inline :offset-assert 640) ;; gs-gif-tag :inline
|
||||
(warp-giftag gs-gif-tag :inline :offset-assert 640)
|
||||
(fog-clamp vector :inline :offset-assert 656)
|
||||
(fog-min float :offset-assert 656)
|
||||
(fog-max float :offset-assert 660)
|
||||
(max-scale float :offset-assert 664)
|
||||
(fog-min float :offset 656)
|
||||
(fog-max float :offset 660)
|
||||
(max-scale float :offset 664 :score 1)
|
||||
)
|
||||
:method-count-assert 9
|
||||
:size-assert #x2a0
|
||||
:flag-assert #x9000002a0
|
||||
)
|
||||
|#
|
||||
|
||||
;; (define-extern sprite-setup-header function) ;; (function sprite-header int none)
|
||||
;; (define-extern clear-sprite-aux-list function) ;; (function none)
|
||||
;; (define-extern add-to-sprite-aux-list function) ;; (function sparticle-system sparticle-cpuinfo sprite-vec-data-3d none)
|
||||
;; (define-extern sprite-setup-frame-data function) ;; (function sprite-frame-data int none)
|
||||
;; (define-extern sprite-vu1-block object) ;; vu-function
|
||||
;; (define-extern sprite-set-3d-quaternion! function) ;; (function sprite-vec-data-3d quaternion quaternion)
|
||||
;; (define-extern sprite-get-3d-quaternion! function) ;; (function quaternion sprite-vec-data-3d quaternion)
|
||||
;; (define-extern sprite-add-matrix-data function) ;; (function dma-buffer uint none)
|
||||
;; (define-extern sprite-add-frame-data function) ;; (function dma-buffer uint none)
|
||||
;; (define-extern sprite-add-2d-chunk function) ;; (function sprite-array-2d int int dma-buffer int none)
|
||||
;; (define-extern sprite-add-2d-all function) ;; (function sprite-array-2d dma-buffer int none)
|
||||
;; (define-extern sprite-add-3d-chunk function) ;; (function sprite-array-3d int int dma-buffer none)
|
||||
;; (define-extern sprite-add-3d-all function) ;; (function sprite-array-3d dma-buffer int none)
|
||||
(define-extern sprite-setup-header (function sprite-header int none))
|
||||
(define-extern clear-sprite-aux-list (function none))
|
||||
(define-extern add-to-sprite-aux-list (function sparticle-system sparticle-cpuinfo sprite-vec-data-3d uint none))
|
||||
(define-extern sprite-setup-frame-data (function sprite-frame-data uint none))
|
||||
(define-extern sprite-vu1-block vu-function)
|
||||
(define-extern sprite-set-3d-quaternion! (function sprite-vec-data-3d quaternion quaternion))
|
||||
(define-extern sprite-get-3d-quaternion! (function quaternion sprite-vec-data-3d quaternion))
|
||||
(define-extern sprite-add-matrix-data (function dma-buffer uint none))
|
||||
(define-extern sprite-add-frame-data (function dma-buffer uint none))
|
||||
(define-extern sprite-add-2d-chunk (function sprite-array-2d int int dma-buffer int none))
|
||||
(define-extern sprite-add-2d-all (function sprite-array-2d dma-buffer int none))
|
||||
(define-extern sprite-add-3d-chunk (function sprite-array-3d int int dma-buffer none))
|
||||
(define-extern sprite-add-3d-all (function sprite-array-3d dma-buffer int none))
|
||||
(define-extern sprite-draw (function display none))
|
||||
;; (define-extern sprite-allocate-user-hvdf function) ;; (function int)
|
||||
;; (define-extern sprite-release-user-hvdf function) ;; (function int none)
|
||||
;; (define-extern sprite-get-user-hvdf function) ;; (function int vector)
|
||||
;; (define-extern *sprite-hvdf-data* object) ;; sprite-hvdf-data
|
||||
;; (define-extern *sprite-hvdf-control* object) ;; sprite-hvdf-control
|
||||
;; (define-extern *sprite-aux-list* object) ;; sprite-aux-list
|
||||
;; (define-extern *sprite-array-2d* object) ;; sprite-array-2d
|
||||
;; (define-extern *sprite-array-3d* object) ;; sprite-array-3d
|
||||
(define-extern sprite-allocate-user-hvdf (function int))
|
||||
(define-extern sprite-release-user-hvdf (function int none))
|
||||
(define-extern sprite-get-user-hvdf (function int vector))
|
||||
(define-extern *sprite-hvdf-data* sprite-hvdf-data)
|
||||
(define-extern *sprite-hvdf-control* sprite-hvdf-control)
|
||||
(define-extern *sprite-aux-list* sprite-aux-list)
|
||||
(define-extern *sprite-array-2d* sprite-array-2d)
|
||||
(define-extern *sprite-array-3d* sprite-array-3d)
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; sprite-distort ;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
#|
|
||||
(deftype sprite-distorter-sine-tables (basic)
|
||||
((aspx float :offset-assert 4)
|
||||
(aspy float :offset-assert 8)
|
||||
(entry vector 128 :offset-assert 16) ;; guessed by decompiler
|
||||
(ientry qword 9 :offset-assert 2064) ;; guessed by decompiler
|
||||
(giftag qword :inline :offset-assert 2208) ;; gs-gif-tag :inline
|
||||
(color qword :inline :offset-assert 2224)
|
||||
((aspx float :offset-assert 4)
|
||||
(aspy float :offset-assert 8)
|
||||
(entry vector 128 :inline :offset-assert 16)
|
||||
(ientry qword 9 :inline :offset-assert 2064)
|
||||
(giftag gs-gif-tag :inline :offset-assert 2208)
|
||||
(color qword :inline :offset-assert 2224)
|
||||
)
|
||||
:method-count-assert 9
|
||||
:size-assert #x8c0
|
||||
:flag-assert #x9000008c0
|
||||
)
|
||||
|#
|
||||
|
||||
;; (define-extern *sprite-distorter-sine-tables* object) ;; sprite-distorter-sine-tables
|
||||
(define-extern *sprite-distorter-sine-tables* sprite-distorter-sine-tables)
|
||||
(define-extern sprite-distorter-generate-tables (function none))
|
||||
;; (define-extern sprite-distort-vu1-block object) ;; vu-function
|
||||
;; (define-extern sprite-init-distorter function) ;; (function dma-buffer uint none)
|
||||
;; (define-extern sprite-draw-distorters function) ;; (function dma-buffer none)
|
||||
(define-extern sprite-distort-vu1-block vu-function)
|
||||
(define-extern sprite-init-distorter (function dma-buffer none))
|
||||
(define-extern sprite-draw-distorters (function dma-buffer none))
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; sprite-glow ;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
#|
|
||||
(deftype sprite-glow-template (structure)
|
||||
((clear-init-giftag gs-gif-tag :inline :offset-assert 0)
|
||||
(clear-init-adcmds UNKNOWN 5 :offset-assert 16)
|
||||
(clear-init-adcmds vector4w 5 :inline :offset-assert 16) ;; gs-adcmd?
|
||||
(clear-draw-giftag gs-gif-tag :inline :offset-assert 96)
|
||||
(clear-draw-clr-0 gs-packed-rgba :inline :offset-assert 112)
|
||||
(clear-draw-xyz-0 UNKNOWN 2 :offset-assert 128)
|
||||
(clear-draw-xyz-0 vector 2 :inline :offset-assert 128)
|
||||
(clear-draw-clr-1 gs-packed-rgba :inline :offset-assert 160)
|
||||
(clear-draw-xyz-1 UNKNOWN 2 :offset-assert 176)
|
||||
(clear-draw-xyz-1 vector 2 :inline :offset-assert 176)
|
||||
(offscr-setup-giftag gs-gif-tag :inline :offset-assert 208)
|
||||
(offscr-setup-adcmds UNKNOWN 8 :offset-assert 224)
|
||||
(offscr-setup-adcmds vector4w 8 :inline :offset-assert 224) ;; gs-adcmd?
|
||||
(offscr-first-giftag gs-gif-tag :inline :offset-assert 352)
|
||||
(offscr-first-clr gs-packed-rgba :inline :offset-assert 368)
|
||||
(offscr-first-uv-0 gs-packed-uv :inline :offset-assert 384)
|
||||
@@ -21360,7 +21354,7 @@
|
||||
(offscr-first-uv-1 gs-packed-uv :inline :offset-assert 416)
|
||||
(offscr-first-xyzw-1 gs-packed-xyzw :inline :offset-assert 432)
|
||||
(repeat-draw-giftag gs-gif-tag :inline :offset-assert 448)
|
||||
(repeat-draw-adcmds UNKNOWN 29 :offset-assert 464)
|
||||
(repeat-draw-adcmds vector4w 29 :inline :offset-assert 464) ;; gs-adcmd?
|
||||
(flare-alpha-giftag gs-gif-tag :inline :offset-assert 928)
|
||||
(flare-alpha-clr gs-packed-rgba :inline :offset-assert 944)
|
||||
(flare-alpha-uv gs-packed-uv :inline :offset-assert 960)
|
||||
@@ -21369,7 +21363,7 @@
|
||||
(flare-alpha-xyzw-2 gs-packed-xyzw :inline :offset-assert 1008)
|
||||
(flare-alpha-xyzw-3 gs-packed-xyzw :inline :offset-assert 1024)
|
||||
(flare-init-giftag gs-gif-tag :inline :offset-assert 1040)
|
||||
(flare-init-adcmds UNKNOWN 8 :offset-assert 1056)
|
||||
(flare-init-adcmds vector4w 8 :inline :offset-assert 1056) ;; gs-adcmd?
|
||||
(flare-draw-giftag gs-gif-tag :inline :offset-assert 1184)
|
||||
(flare-draw-clr gs-packed-rgba :inline :offset-assert 1200)
|
||||
(flare-draw-stq-0 gs-packed-stq :inline :offset-assert 1216)
|
||||
@@ -21385,37 +21379,33 @@
|
||||
:size-assert #x540
|
||||
:flag-assert #x900000540
|
||||
)
|
||||
|#
|
||||
|
||||
#|
|
||||
(deftype sprite-glow-consts (structure)
|
||||
((camera matrix :inline :offset-assert 0)
|
||||
(perspective matrix :inline :offset-assert 64)
|
||||
(hvdf-offset vector :inline :offset-assert 128)
|
||||
(hmge-scale vector :inline :offset-assert 144)
|
||||
(consts vector :inline :offset-assert 160)
|
||||
(pfog0 float :offset-assert 160)
|
||||
(deg-to-rad float :offset-assert 164)
|
||||
(min-scale float :offset-assert 168)
|
||||
(inv-area float :offset-assert 172)
|
||||
(sincos-01 vector :inline :offset-assert 176)
|
||||
(sincos-23 vector :inline :offset-assert 192)
|
||||
(sincos-45 vector :inline :offset-assert 208)
|
||||
(sincos-67 vector :inline :offset-assert 224)
|
||||
(sincos-89 vector :inline :offset-assert 240)
|
||||
(basis-x vector :inline :offset-assert 256)
|
||||
(basis-y vector :inline :offset-assert 272)
|
||||
(xy-array UNKNOWN 4 :offset-assert 288)
|
||||
(clamp-min vector :inline :offset-assert 352)
|
||||
(clamp-max vector :inline :offset-assert 368)
|
||||
((camera matrix :inline :offset-assert 0)
|
||||
(perspective matrix :inline :offset-assert 64)
|
||||
(hvdf-offset vector :inline :offset-assert 128)
|
||||
(hmge-scale vector :inline :offset-assert 144)
|
||||
(consts vector :inline :offset-assert 160 :score -1)
|
||||
(pfog0 float :offset 160)
|
||||
(deg-to-rad float :offset 164)
|
||||
(min-scale float :offset 168)
|
||||
(inv-area float :offset 172)
|
||||
(sincos-01 vector :inline :offset-assert 176)
|
||||
(sincos-23 vector :inline :offset-assert 192)
|
||||
(sincos-45 vector :inline :offset-assert 208)
|
||||
(sincos-67 vector :inline :offset-assert 224)
|
||||
(sincos-89 vector :inline :offset-assert 240)
|
||||
(basis-x vector :inline :offset-assert 256)
|
||||
(basis-y vector :inline :offset-assert 272)
|
||||
(xy-array vector 4 :inline :offset-assert 288)
|
||||
(clamp-min vector :inline :offset-assert 352)
|
||||
(clamp-max vector :inline :offset-assert 368)
|
||||
)
|
||||
:method-count-assert 9
|
||||
:size-assert #x180
|
||||
:flag-assert #x900000180
|
||||
)
|
||||
|#
|
||||
|
||||
#|
|
||||
(deftype sprite-glow-dma-packet-data (structure)
|
||||
((control-packet dma-packet :inline :offset-assert 0)
|
||||
(vecdata-packet dma-packet :inline :offset-assert 16)
|
||||
@@ -21427,13 +21417,11 @@
|
||||
:size-assert #x50
|
||||
:flag-assert #x900000050
|
||||
)
|
||||
|#
|
||||
|
||||
#|
|
||||
(deftype sprite-glow-cnt-template (structure)
|
||||
((control-packet dma-packet :inline :offset-assert 0)
|
||||
(num-sprites uint32 :offset-assert 16)
|
||||
(dummys UNKNOWN 3 :offset-assert 20)
|
||||
(dummys uint32 3 :offset-assert 20)
|
||||
(vecdata-packet dma-packet :inline :offset-assert 32)
|
||||
(vecdata sprite-glow-data :inline :offset-assert 48)
|
||||
(shader-packet dma-packet :inline :offset-assert 112)
|
||||
@@ -21444,13 +21432,11 @@
|
||||
:size-assert #xe0
|
||||
:flag-assert #x9000000e0
|
||||
)
|
||||
|#
|
||||
|
||||
#|
|
||||
(deftype sprite-glow-ref-template (structure)
|
||||
((control-packet dma-packet :inline :offset-assert 0)
|
||||
(num-sprites uint32 :offset-assert 16)
|
||||
(dummys UNKNOWN 3 :offset-assert 20)
|
||||
(dummys uint32 3 :offset-assert 20)
|
||||
(vecdata-packet dma-packet :inline :offset-assert 32)
|
||||
(vecdata sprite-glow-data :inline :offset-assert 48)
|
||||
(shader-packet dma-packet :inline :offset-assert 112)
|
||||
@@ -21460,18 +21446,17 @@
|
||||
:size-assert #x90
|
||||
:flag-assert #x900000090
|
||||
)
|
||||
|#
|
||||
|
||||
;; (define-extern *sprite-glow-template* object)
|
||||
;; (define-extern sprite-glow-vu1-block object)
|
||||
;; (define-extern sprite-glow-init-consts function)
|
||||
;; (define-extern sprite-glow-init-engine function)
|
||||
;; (define-extern *sprite-glow-dma-packet-data* object)
|
||||
;; (define-extern sprite-glow-add-sprite function)
|
||||
(define-extern *sprite-glow-template* sprite-glow-template)
|
||||
(define-extern sprite-glow-vu1-block vu-function)
|
||||
(define-extern sprite-glow-init-consts (function sprite-glow-consts none))
|
||||
(define-extern sprite-glow-init-engine (function dma-buffer none))
|
||||
(define-extern *sprite-glow-dma-packet-data* sprite-glow-dma-packet-data)
|
||||
(define-extern sprite-glow-add-sprite (function dma-buffer sprite-vec-data-2d float float float adgif-shader none))
|
||||
;; (define-extern sprite-glow-add-simple-sprite function)
|
||||
;; (define-extern sprite-glow-draw function)
|
||||
;; (define-extern add-shader-to-dma function)
|
||||
;; (define-extern *simple-sprite-system* object)
|
||||
(define-extern sprite-glow-draw (function dma-buffer none))
|
||||
(define-extern add-shader-to-dma (function dma-buffer pointer))
|
||||
(define-extern *simple-sprite-system* simple-sprite-system)
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; debug-sphere ;;
|
||||
|
||||
@@ -226,6 +226,8 @@
|
||||
|
||||
"real-main-draw-hook": [114, 115, 116, 118],
|
||||
|
||||
"sprite-draw-distorters": [4,5],
|
||||
|
||||
"(method 12 perf-stat)": [0],
|
||||
"(method 11 perf-stat)": [0]
|
||||
},
|
||||
|
||||
@@ -62,6 +62,9 @@
|
||||
"joint-mod-h": [["L43", "(inline-array vector)", 6]],
|
||||
"rigid-body": [["L163", "rigid-body-object-constants"]],
|
||||
"rigid-body-plat": [["L47", "rigid-body-platform-constants"]],
|
||||
"sprite": [["L51", "vu-function"]],
|
||||
"sprite-distort": [["L27", "vu-function"]],
|
||||
"sprite-glow": [["L29", "vu-function"]],
|
||||
"mood-funcs": [
|
||||
["L231", "vector"],
|
||||
["L358", "(pointer uint64)", 1],
|
||||
|
||||
@@ -572,6 +572,85 @@
|
||||
[3, "v1", "target"],
|
||||
[14, "a0", "target"]
|
||||
],
|
||||
// sprite
|
||||
"sprite-add-matrix-data": [
|
||||
[[5, 15], "a2", "dma-packet"],
|
||||
[[24, 28], "a1", "matrix"],
|
||||
[[47, 57], "a2", "dma-packet"],
|
||||
[[70, 97], "a2", "vector"],
|
||||
[[98, 113], "a1", "vector"],
|
||||
[[119, 133], "a1", "vector"]
|
||||
],
|
||||
"sprite-add-frame-data": [
|
||||
[[8, 16], "a0", "dma-packet"]
|
||||
],
|
||||
"sprite-add-2d-chunk": [
|
||||
[[12, 20], "a0", "dma-packet"],
|
||||
[[45, 52], "a0", "dma-packet"],
|
||||
[[69, 76], "a0", "dma-packet"],
|
||||
[[80, 87], "v1", "dma-packet"],
|
||||
[65, "a3", "int"]
|
||||
],
|
||||
"sprite-add-3d-chunk": [
|
||||
[[11, 19], "a0", "dma-packet"],
|
||||
[[44, 51], "a0", "dma-packet"],
|
||||
[[68, 75], "a0", "dma-packet"],
|
||||
[[79, 87], "v1", "dma-packet"],
|
||||
[65, "a3", "int"]
|
||||
],
|
||||
"sprite-draw": [
|
||||
[[33, 38], "a0", "dma-packet"],
|
||||
[[41, 48], "a0", "gs-gif-tag"],
|
||||
[52, "a0", "(pointer gs-test)"],
|
||||
[54, "a0", "(pointer gs-reg64)"],
|
||||
[56, "a0", "(pointer gs-clamp)"],
|
||||
[58, "a0", "(pointer gs-reg64)"],
|
||||
[[73, 82], "a0", "dma-packet"],
|
||||
[[87, 92], "a0", "dma-packet"],
|
||||
[[111, 115], "a0", "dma-packet"],
|
||||
[[129, 133], "a0", "dma-packet"],
|
||||
[[150, 154], "a0", "dma-packet"],
|
||||
[[159, 162], "v1", "dma-packet"]
|
||||
],
|
||||
// sprite-distort
|
||||
"sprite-init-distorter": [
|
||||
[[3, 7], "a1", "dma-packet"],
|
||||
[[13, 16], "a1", "gs-gif-tag"],
|
||||
[21, "a1", "(pointer gs-zbuf)"],
|
||||
[23, "a1", "(pointer gs-reg64)"],
|
||||
[25, "a1", "(pointer gs-tex0)"],
|
||||
[27, "a1", "(pointer gs-reg64)"],
|
||||
[29, "a1", "(pointer gs-tex1)"],
|
||||
[31, "a1", "(pointer gs-reg64)"],
|
||||
[32, "a1", "(pointer gs-miptbp)"],
|
||||
[34, "a1", "(pointer gs-reg64)"],
|
||||
[36, "a1", "(pointer gs-clamp)"],
|
||||
[38, "a1", "(pointer gs-reg64)"],
|
||||
[40, "a1", "(pointer gs-alpha)"],
|
||||
[42, "a1", "(pointer gs-reg64)"],
|
||||
[50, "a3", "uint"],
|
||||
[[53, 58], "a1", "dma-packet"]
|
||||
],
|
||||
"sprite-draw-distorters": [
|
||||
[[73, 93], "a0", "vector"],
|
||||
[75, "v1", "vector"],
|
||||
[87, "v1", "vector"],
|
||||
[96, "v1", "vector"],
|
||||
[100, "v1", "vector"],
|
||||
[123, "a0", "(pointer int32)"],
|
||||
[128, "v1", "vector"],
|
||||
[130, "v1", "vector"],
|
||||
[136, "v1", "vector"],
|
||||
[157, "v1", "vector"],
|
||||
[[175, 192], "a1", "dma-packet"],
|
||||
[[200, 206], "a0", "dma-packet"],
|
||||
[[210, 214], "a0", "vector4w"],
|
||||
[[219, 224], "a0", "dma-packet"],
|
||||
[[252, 269], "a1", "dma-packet"],
|
||||
[[277, 281], "a1", "dma-packet"],
|
||||
[[285, 289], "a1", "vector4w"],
|
||||
[[293, 298], "v1", "dma-packet"]
|
||||
],
|
||||
"(method 10 history)": [[[8, 10], "a1", "history-elt"]],
|
||||
"(method 10 history-iterator)": [[[20, 35], "a2", "history-elt"]],
|
||||
"command-get-time": [[119, "gp", "(pointer float)"]],
|
||||
|
||||
@@ -40,6 +40,181 @@
|
||||
}
|
||||
},
|
||||
|
||||
// sprite
|
||||
"(method 0 sprite-aux-list)": {
|
||||
"args": ["allocation", "type-to-make", "size"]
|
||||
},
|
||||
|
||||
"(method 0 sprite-array-2d)": {
|
||||
"args": ["allocation", "type-to-make", "group-0-size", "group-1-size"],
|
||||
"vars": {
|
||||
"v1-0": "sprite-count",
|
||||
"s4-0": "vec-data-size",
|
||||
"a2-3": "adgif-data-size"
|
||||
}
|
||||
},
|
||||
|
||||
"(method 0 sprite-array-3d)": {
|
||||
"args": ["allocation", "type-to-make", "group-0-size", "group-1-size"],
|
||||
"vars": {
|
||||
"v1-0": "sprite-count",
|
||||
"s4-0": "vec-data-size",
|
||||
"a2-3": "adgif-data-size"
|
||||
}
|
||||
},
|
||||
|
||||
"sprite-setup-header": {
|
||||
"args": ["hdr", "num-sprites"]
|
||||
},
|
||||
|
||||
"add-to-sprite-aux-list": {
|
||||
"args": ["system", "sprite-info", "sprite-vec", "arg3"],
|
||||
"vars": {
|
||||
"v1-3": "aux-list"
|
||||
}
|
||||
},
|
||||
|
||||
"sprite-setup-frame-data": {
|
||||
"args": ["data", "tbp-offset"]
|
||||
},
|
||||
|
||||
"sprite-set-3d-quaternion!": {
|
||||
"args": ["sprite", "quat"]
|
||||
},
|
||||
|
||||
"sprite-get-3d-quaternion!": {
|
||||
"args": ["out", "sprite"]
|
||||
},
|
||||
|
||||
"sprite-add-matrix-data": {
|
||||
"args": ["dma-buff", "matrix-mode"],
|
||||
"vars": {
|
||||
"v1-0": "count",
|
||||
"a2-1": ["pkt1", "dma-packet"],
|
||||
"a1-2": ["mtx", "matrix"],
|
||||
"a2-9": ["pkt2", "dma-packet"],
|
||||
"a1-11": ["mtx2", "matrix"],
|
||||
"a1-20": "hvdf-idx"
|
||||
}
|
||||
},
|
||||
|
||||
"sprite-add-frame-data": {
|
||||
"args": ["dma-buff", "tbp-offset"],
|
||||
"vars": {
|
||||
"a0-1": ["pkt", "dma-packet"]
|
||||
}
|
||||
},
|
||||
|
||||
"sprite-add-2d-chunk": {
|
||||
"args": [
|
||||
"sprites",
|
||||
"start-sprite-idx",
|
||||
"num-sprites",
|
||||
"dma-buff",
|
||||
"mscal-addr"
|
||||
],
|
||||
"vars": {
|
||||
"a0-1": ["pkt1", "dma-packet"],
|
||||
"s1-0": "qwc-pkt1",
|
||||
"a1-7": "qwc-pkt2",
|
||||
"a0-5": ["pkt2", "dma-packet"],
|
||||
"a1-11": "qwc-pkt3",
|
||||
"a0-7": ["pkt3", "dma-packet"],
|
||||
"v1-7": ["pkt4", "dma-packet"]
|
||||
}
|
||||
},
|
||||
|
||||
"sprite-add-2d-all": {
|
||||
"args": ["sprites", "dma-buff", "group-idx"],
|
||||
"vars": {
|
||||
"s4-0": "current-sprite-idx",
|
||||
"s2-0": "remaining-sprites",
|
||||
"s3-0": "mscal-addr"
|
||||
}
|
||||
},
|
||||
|
||||
"sprite-add-3d-chunk": {
|
||||
"args": ["sprites", "start-sprite-idx", "num-sprites", "dma-buff"],
|
||||
"vars": {
|
||||
"a0-1": ["pkt1", "dma-packet"],
|
||||
"s2-0": "qwc-pkt1",
|
||||
"a1-7": "qwc-pkt2",
|
||||
"a0-5": ["pkt2", "dma-packet"],
|
||||
"a1-11": "qwc-pkt3",
|
||||
"a0-7": ["pkt3", "dma-packet"],
|
||||
"v1-7": ["pkt4", "dma-packet"]
|
||||
}
|
||||
},
|
||||
|
||||
"sprite-add-3d-all": {
|
||||
"args": ["sprites", "dma-buff", "group-idx"],
|
||||
"vars": {
|
||||
"s4-0": "current-sprite-idx",
|
||||
"s3-0": "remaining-sprites"
|
||||
}
|
||||
},
|
||||
|
||||
"sprite-draw": {
|
||||
"args": ["disp"],
|
||||
"vars": {
|
||||
"gp-0": "dma-mem-begin",
|
||||
"s4-0": "dma-buff",
|
||||
"s5-0": "dma-bucket-begin",
|
||||
"a0-6": ["pkt1", "dma-packet"],
|
||||
"a0-8": "giftag",
|
||||
"a0-14": ["pkt2", "dma-packet"],
|
||||
"a0-16": ["pkt3", "dma-packet"],
|
||||
"a0-21": ["pkt4", "dma-packet"],
|
||||
"a0-25": ["pkt5", "dma-packet"],
|
||||
"a0-30": ["pkt6", "dma-packet"],
|
||||
"v1-27": ["pkt7", "dma-packet"],
|
||||
"v1-34": "mem-use"
|
||||
}
|
||||
},
|
||||
|
||||
"sprite-release-user-hvdf": {
|
||||
"args": ["idx"]
|
||||
},
|
||||
|
||||
"sprite-get-user-hvdf": {
|
||||
"args": ["idx"]
|
||||
},
|
||||
|
||||
// sprite-distort
|
||||
"sprite-distorter-generate-tables": {
|
||||
"vars": {
|
||||
"gp-0": "tbls",
|
||||
"f28-0": "cam-aspx",
|
||||
"f30-0": "cam-aspy",
|
||||
"f26-0": "rot",
|
||||
"s4-0": "turns",
|
||||
"s2-0": "turn",
|
||||
"s3-0": "entry-idx",
|
||||
"s5-0": "ientry-idx"
|
||||
}
|
||||
},
|
||||
|
||||
"sprite-init-distorter": {
|
||||
"args": ["dma-buff"]
|
||||
},
|
||||
|
||||
"sprite-draw-distorters": {
|
||||
"args": ["dma-buff"],
|
||||
"vars": {
|
||||
"s0-0": "dma-chunk-start",
|
||||
"s1-0": "i",
|
||||
"s2-0": "num-entries",
|
||||
"v1-5": "aux-elem",
|
||||
"sv-16": "sprite",
|
||||
"a0-3": "dma-position",
|
||||
"sv-32": "dma-st-flag",
|
||||
"sv-48": "dma-color",
|
||||
"s4-0": "chunk-sprite-count",
|
||||
"s5-0": "draw-sprite-count",
|
||||
"v1-26": "clip-result"
|
||||
}
|
||||
},
|
||||
|
||||
"(method 18 mood-control)": {
|
||||
"vars": {
|
||||
"v0-3": ["lightning-sound-id", "sound-id"]
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
|
||||
// if you want to filter to only some object names.
|
||||
// it will make the decompiler much faster.
|
||||
"allowed_objects": [],
|
||||
"allowed_objects": ["mood-tables"],
|
||||
"banned_objects": ["effect-control"],
|
||||
|
||||
////////////////////////////
|
||||
|
||||
@@ -5,6 +5,8 @@
|
||||
;; name in dgo: sparticle-h
|
||||
;; dgos: ENGINE, GAME
|
||||
|
||||
(declare-type sparticle-system basic)
|
||||
|
||||
(defenum sp-cpuinfo-flag
|
||||
:bitfield #t
|
||||
:type uint32
|
||||
@@ -14,7 +16,7 @@
|
||||
(bit3 3)
|
||||
(bit4 4)
|
||||
(ready-to-launch 6) ;; maybe just just death?
|
||||
(bit7 7)
|
||||
(distort 7) ;; distort sprite
|
||||
(aux-list 8) ;; prevents relaunch, adds to aux
|
||||
(bit9 9)
|
||||
(level0 10)
|
||||
@@ -22,6 +24,7 @@
|
||||
(bit12 12) ;; required to relaunch
|
||||
(bit13 13)
|
||||
(bit14 14)
|
||||
(glow 15) ;; glow sprite
|
||||
(use-global-acc 16)
|
||||
(launch-along-z 17)
|
||||
(left-multiply-quat 18)
|
||||
@@ -40,41 +43,41 @@
|
||||
(define *sp-60-hz* #t)
|
||||
|
||||
(deftype sparticle-cpuinfo (structure)
|
||||
((sprite sprite-vec-data-2d :offset-assert 0)
|
||||
(adgif adgif-shader :offset-assert 4)
|
||||
(radius float :offset-assert 8)
|
||||
(omega float :offset-assert 12)
|
||||
(vel-sxvel vector :inline :offset-assert 16)
|
||||
(rot-syvel vector :inline :offset-assert 32)
|
||||
(fade rgbaf :inline :offset-assert 48)
|
||||
(acc vector :inline :offset-assert 64)
|
||||
(rotvel3d quaternion :inline :offset-assert 80)
|
||||
(vel vector3s :inline :offset 16)
|
||||
(accel vector3s :inline :offset 64)
|
||||
(scalevelx float :offset 28)
|
||||
(scalevely float :offset 44)
|
||||
(friction float :offset-assert 96)
|
||||
(timer int32 :offset-assert 100)
|
||||
(flags sp-cpuinfo-flag :offset-assert 104)
|
||||
(user-int32 int32 :offset-assert 108)
|
||||
(user-uint32 uint32 :offset 108)
|
||||
(user-float float :offset 108)
|
||||
(user-pntr uint32 :offset 108)
|
||||
(user-object basic :offset 108)
|
||||
(user-sprite sprite-vec-data-2d :offset 108)
|
||||
(sp-func basic :offset-assert 112)
|
||||
(next-time uint32 :offset-assert 116)
|
||||
(next-launcher basic :offset-assert 120)
|
||||
(cache-alpha float :offset-assert 124)
|
||||
(valid uint8 :offset-assert 128)
|
||||
(clock-index uint8 :offset-assert 129)
|
||||
(user1-int16 uint16 :offset-assert 130)
|
||||
(key sparticle-launch-control :offset-assert 132)
|
||||
(binding sparticle-launch-state :offset-assert 136)
|
||||
(data uint32 1 :offset 12)
|
||||
(datab uint8 4 :offset 12)
|
||||
(dataf float 1 :offset 12)
|
||||
(datac uint8 1 :offset 12)
|
||||
((sprite sprite-vec-data-2d :offset-assert 0)
|
||||
(adgif adgif-shader :offset-assert 4)
|
||||
(radius float :offset-assert 8)
|
||||
(omega float :offset-assert 12)
|
||||
(vel-sxvel vector :inline :offset-assert 16)
|
||||
(rot-syvel vector :inline :offset-assert 32)
|
||||
(fade rgbaf :inline :offset-assert 48)
|
||||
(acc vector :inline :offset-assert 64)
|
||||
(rotvel3d quaternion :inline :offset-assert 80)
|
||||
(vel vector3s :inline :offset 16)
|
||||
(accel vector3s :inline :offset 64)
|
||||
(scalevelx float :offset 28)
|
||||
(scalevely float :offset 44)
|
||||
(friction float :offset-assert 96)
|
||||
(timer int32 :offset-assert 100)
|
||||
(flags sp-cpuinfo-flag :offset-assert 104)
|
||||
(user-int32 int32 :offset-assert 108)
|
||||
(user-uint32 uint32 :offset 108)
|
||||
(user-float float :offset 108)
|
||||
(user-pntr uint32 :offset 108)
|
||||
(user-object basic :offset 108)
|
||||
(user-sprite sprite-vec-data-2d :offset 108)
|
||||
(sp-func (function sparticle-system sparticle-cpuinfo sprite-vec-data-3d uint none) :offset-assert 112)
|
||||
(next-time uint32 :offset-assert 116)
|
||||
(next-launcher basic :offset-assert 120)
|
||||
(cache-alpha float :offset-assert 124)
|
||||
(valid uint8 :offset-assert 128)
|
||||
(clock-index uint8 :offset-assert 129)
|
||||
(user1-int16 uint16 :offset-assert 130)
|
||||
(key sparticle-launch-control :offset-assert 132)
|
||||
(binding sparticle-launch-state :offset-assert 136)
|
||||
(data uint32 1 :offset 12)
|
||||
(datab uint8 4 :offset 12)
|
||||
(dataf float 1 :offset 12)
|
||||
(datac uint8 1 :offset 12)
|
||||
)
|
||||
:method-count-assert 9
|
||||
:size-assert #x8c
|
||||
|
||||
@@ -46,8 +46,8 @@
|
||||
:size-assert #x8
|
||||
:flag-assert #xc00000008
|
||||
(:methods
|
||||
(simple-sprite-system-method-9 () none 9)
|
||||
(simple-sprite-system-method-10 () none 10)
|
||||
(simple-sprite-system-method-11 () none 11)
|
||||
(add! () none 9)
|
||||
(simple-sprite-system-method-10 (_type_ dma-buffer) none 10)
|
||||
(clear! (_type_) none 11)
|
||||
)
|
||||
)
|
||||
|
||||
@@ -5,5 +5,471 @@
|
||||
;; name in dgo: sprite-distort
|
||||
;; dgos: ENGINE, GAME
|
||||
|
||||
;; Works just like Jak 1 with some exceptions:
|
||||
;; - Sprite texture source doesn't seem to be the current framebuffer, instead tbp0 is hardcoded to #x3300.
|
||||
;; - The sprite-aux-list contains more than just distort sprites. Instead of containing sprite-vec-data-2d's
|
||||
;; directly, it's now a list of sprite-aux-elem. If the aux-type is 0, then that element is a distort sprite.
|
||||
;; - No longer takes *video-params* screen-sy into account.
|
||||
|
||||
;; Sprite distort works by drawing a circle for each sprite whose texture is the framebuffer contents of what's
|
||||
;; been drawn so far. The texture coordinates are off slightly to give a "distortion" effect as the sprite moves
|
||||
;; across the screen. The resolution of the circle is defined by the number of "turns", which can range between
|
||||
;; 3 and 11. Turns basically define the number of edges that make up the circle, so 3 turns will create a triangle,
|
||||
;; 5 will create a pentagon, etc. The sprite-vec-data-2d 'warp-turns'/'flag' field contains the number of turns.
|
||||
|
||||
;; DECOMP BEGINS
|
||||
|
||||
;; Contains the base mesh of each possible distort sprite shape. Everything excluding aspx and aspy
|
||||
;; are uploaded to VU memory.
|
||||
;;
|
||||
;; See sprite-distorter-generate-tables.
|
||||
(deftype sprite-distorter-sine-tables (basic)
|
||||
((aspx float :offset-assert 4)
|
||||
(aspy float :offset-assert 8)
|
||||
(entry vector 128 :inline :offset-assert 16)
|
||||
(ientry qword 9 :inline :offset-assert 2064)
|
||||
(giftag gs-gif-tag :inline :offset-assert 2208)
|
||||
(color qword :inline :offset-assert 2224)
|
||||
)
|
||||
:method-count-assert 9
|
||||
:size-assert #x8c0
|
||||
:flag-assert #x9000008c0
|
||||
)
|
||||
|
||||
(defmethod inspect sprite-distorter-sine-tables ((obj sprite-distorter-sine-tables))
|
||||
(when (not obj)
|
||||
(set! obj obj)
|
||||
(goto cfg-4)
|
||||
)
|
||||
(format #t "[~8x] ~A~%" obj (-> obj type))
|
||||
(format #t "~1Taspx: ~f~%" (-> obj aspx))
|
||||
(format #t "~1Taspy: ~f~%" (-> obj aspy))
|
||||
(format #t "~1Tentry[128] @ #x~X~%" (-> obj entry))
|
||||
(format #t "~1Tientry[9] @ #x~X~%" (-> obj ientry))
|
||||
(format #t "~1Tgiftag: #<qword @ #x~X>~%" (-> obj giftag))
|
||||
(format #t "~1Tcolor: #<qword @ #x~X>~%" (-> obj color))
|
||||
(label cfg-4)
|
||||
obj
|
||||
)
|
||||
|
||||
(kmemopen global "sprite-distort-tables")
|
||||
(define *sprite-distorter-sine-tables* (new 'global 'sprite-distorter-sine-tables))
|
||||
(kmemclose)
|
||||
|
||||
;; Called from update-math-camera.
|
||||
;; Whenever the camera's aspect ratio changes, recalculates the *sprite-distorter-sine-tables*.
|
||||
;;
|
||||
;; Every two vectors in 'entry' contain the position and texture coordinates for a vertex.
|
||||
;; The vertices for each circular shape made up of a given number of turns/edges are placed into this
|
||||
;; list. For example, the first 6 vectors in entry will be the 3 vertices of a circle made up of 3 turns.
|
||||
;; Then the next 8 vectors will be the 4 vertices of one made up of 4 turns, and so on until (and including) 11 turns.
|
||||
;;
|
||||
;; This list also cheats a little. When the VU program goes to render one of these shapes, the final vertex
|
||||
;; of the shape will be connected to the first vertex of the next shape. In other words, when rendering the
|
||||
;; shape of 3 turns, the final vertex will be connected to the first vertex of the vertices for 4 turns.
|
||||
;; Because of this, a single extra vertex is added after the 11 turns shape, totalling the 128 vectors.
|
||||
;; This works because the first vertex is always the same top-center position.
|
||||
;;
|
||||
;; The ientry list is given VU memory addresses into the entry list for each shape.
|
||||
;; For example, ientry[0] is 352 which is the vertex data for 3 turns, ientry[1] is 358 which is the
|
||||
;; vertex data for 4 turns, etc.
|
||||
;;
|
||||
;; Additionally, a giftag is pre-calculated for rendering each shape along with a color. But the giftag
|
||||
;; never changes and the color is always (1.0, 1.0, 1.0, 1.0).
|
||||
(defun sprite-distorter-generate-tables ()
|
||||
(let ((tbls *sprite-distorter-sine-tables*))
|
||||
(let ((entry-idx 0)
|
||||
(ientry-idx 0)
|
||||
(turns 3)
|
||||
(cam-aspx (- (-> *math-camera* perspective data 0)))
|
||||
(cam-aspy (- (-> *math-camera* perspective data 5)))
|
||||
)
|
||||
(when (or (!= cam-aspx (-> tbls aspx)) (!= cam-aspy (-> tbls aspy)))
|
||||
(set! (-> tbls aspx) cam-aspx)
|
||||
(set! (-> tbls aspy) cam-aspy)
|
||||
(while (< turns 12)
|
||||
(set! (-> tbls ientry ientry-idx vector4w x) (+ entry-idx 352))
|
||||
(+! ientry-idx 1)
|
||||
(dotimes (turn turns)
|
||||
(let ((rot (* 65536.0 (/ (the float turn) (the float turns)))))
|
||||
(set-vector! (-> tbls entry entry-idx) (* (sin rot) cam-aspx) (* (cos rot) cam-aspy) 0.0 0.0)
|
||||
(let ((s3-1 (+ entry-idx 1)))
|
||||
(set-vector!
|
||||
(-> tbls entry s3-1)
|
||||
(* 0.001953125 cam-aspx (sin rot))
|
||||
(* 0.001953125 cam-aspy (cos rot))
|
||||
0.0
|
||||
0.0
|
||||
)
|
||||
(set! entry-idx (+ s3-1 1))
|
||||
)
|
||||
)
|
||||
)
|
||||
(+! turns 1)
|
||||
)
|
||||
(set-vector! (-> tbls entry entry-idx) 0.0 cam-aspy 0.0 0.0)
|
||||
(let ((v1-20 (+ entry-idx 1)))
|
||||
(set-vector! (-> tbls entry v1-20) 0.0 (* 0.001953125 cam-aspy) 0.0 0.0)
|
||||
(+ v1-20 1)
|
||||
)
|
||||
)
|
||||
)
|
||||
(set! (-> tbls giftag tag) (new 'static 'gif-tag64
|
||||
:nloop #x1
|
||||
:eop #x1
|
||||
:pre #x1
|
||||
:prim (new 'static 'gs-prim :prim (gs-prim-type tri-strip) :tme #x1)
|
||||
:nreg #xf
|
||||
)
|
||||
)
|
||||
(set! (-> tbls giftag regs) (new 'static 'gif-tag-regs
|
||||
:regs0 (gif-reg-id st)
|
||||
:regs1 (gif-reg-id rgbaq)
|
||||
:regs2 (gif-reg-id xyzf2)
|
||||
:regs3 (gif-reg-id st)
|
||||
:regs4 (gif-reg-id rgbaq)
|
||||
:regs5 (gif-reg-id xyzf2)
|
||||
:regs6 (gif-reg-id st)
|
||||
:regs7 (gif-reg-id rgbaq)
|
||||
:regs8 (gif-reg-id xyzf2)
|
||||
:regs9 (gif-reg-id st)
|
||||
:regs10 (gif-reg-id rgbaq)
|
||||
:regs11 (gif-reg-id xyzf2)
|
||||
:regs12 (gif-reg-id st)
|
||||
:regs13 (gif-reg-id rgbaq)
|
||||
:regs14 (gif-reg-id xyzf2)
|
||||
)
|
||||
)
|
||||
(set! (-> tbls color vector4w x) 128)
|
||||
(set! (-> tbls color vector4w y) 128)
|
||||
(set! (-> tbls color vector4w z) 128)
|
||||
(set! (-> tbls color vector4w w) 128)
|
||||
)
|
||||
0
|
||||
(none)
|
||||
)
|
||||
|
||||
(define sprite-distort-vu1-block (new 'static 'vu-function :length 63 :qlength 32))
|
||||
|
||||
;; Sets up GS registers, adds a reference to *sprite-distorter-sine-tables*, and loads the VU program.
|
||||
(defun sprite-init-distorter ((dma-buff dma-buffer))
|
||||
(let* ((v1-0 dma-buff)
|
||||
(a1-0 (the-as object (-> v1-0 base)))
|
||||
)
|
||||
(set! (-> (the-as dma-packet a1-0) dma) (new 'static 'dma-tag :qwc #x7 :id (dma-tag-id cnt)))
|
||||
(set! (-> (the-as dma-packet a1-0) vif0) (new 'static 'vif-tag))
|
||||
(set! (-> (the-as dma-packet a1-0) vif1) (new 'static 'vif-tag :imm #x7 :cmd (vif-cmd direct) :msk #x1))
|
||||
(set! (-> v1-0 base) (&+ (the-as pointer a1-0) 16))
|
||||
)
|
||||
(let* ((v1-1 dma-buff)
|
||||
(a1-2 (the-as object (-> v1-1 base)))
|
||||
)
|
||||
(set! (-> (the-as gs-gif-tag a1-2) tag) (new 'static 'gif-tag64 :nloop #x1 :eop #x1 :nreg #x6))
|
||||
(set! (-> (the-as gs-gif-tag a1-2) regs) (new 'static 'gif-tag-regs
|
||||
:regs0 (gif-reg-id a+d)
|
||||
:regs1 (gif-reg-id a+d)
|
||||
:regs2 (gif-reg-id a+d)
|
||||
:regs3 (gif-reg-id a+d)
|
||||
:regs4 (gif-reg-id a+d)
|
||||
:regs5 (gif-reg-id a+d)
|
||||
:regs6 (gif-reg-id a+d)
|
||||
:regs7 (gif-reg-id a+d)
|
||||
:regs8 (gif-reg-id a+d)
|
||||
:regs9 (gif-reg-id a+d)
|
||||
:regs10 (gif-reg-id a+d)
|
||||
:regs11 (gif-reg-id a+d)
|
||||
:regs12 (gif-reg-id a+d)
|
||||
:regs13 (gif-reg-id a+d)
|
||||
:regs14 (gif-reg-id a+d)
|
||||
:regs15 (gif-reg-id a+d)
|
||||
)
|
||||
)
|
||||
(set! (-> v1-1 base) (&+ (the-as pointer a1-2) 16))
|
||||
)
|
||||
(let* ((v1-2 dma-buff)
|
||||
(a1-4 (-> v1-2 base))
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-zbuf) a1-4) 0) (new 'static 'gs-zbuf :zbp #x130 :psm (gs-psm ct24) :zmsk #x1))
|
||||
(set! (-> (the-as (pointer gs-reg64) a1-4) 1) (gs-reg64 zbuf-1))
|
||||
(set! (-> (the-as (pointer gs-tex0) a1-4) 2) (new 'static 'gs-tex0 :tbp0 #x3300 :tbw #x8 :tw #x9 :th #x9))
|
||||
(set! (-> (the-as (pointer gs-reg64) a1-4) 3) (gs-reg64 tex0-1))
|
||||
(set! (-> (the-as (pointer gs-tex1) a1-4) 4) (new 'static 'gs-tex1 :mmag #x1 :mmin #x1))
|
||||
(set! (-> (the-as (pointer gs-reg64) a1-4) 5) (gs-reg64 tex1-1))
|
||||
(set! (-> (the-as (pointer gs-miptbp) a1-4) 6) (new 'static 'gs-miptbp))
|
||||
(set! (-> (the-as (pointer gs-reg64) a1-4) 7) (gs-reg64 miptbp1-1))
|
||||
(set! (-> (the-as (pointer gs-clamp) a1-4) 8) (new 'static 'gs-clamp
|
||||
:wms (gs-tex-wrap-mode region-clamp)
|
||||
:wmt (gs-tex-wrap-mode region-clamp)
|
||||
:maxu #x1ff
|
||||
:maxv #x19f
|
||||
)
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-reg64) a1-4) 9) (gs-reg64 clamp-1))
|
||||
(set! (-> (the-as (pointer gs-alpha) a1-4) 10) (new 'static 'gs-alpha :b #x1 :d #x1))
|
||||
(set! (-> (the-as (pointer gs-reg64) a1-4) 11) (gs-reg64 alpha-1))
|
||||
(set! (-> v1-2 base) (&+ a1-4 96))
|
||||
)
|
||||
(let* ((v1-3 dma-buff)
|
||||
(a1-6 (the-as object (-> v1-3 base)))
|
||||
)
|
||||
(set! (-> (the-as dma-packet a1-6) dma)
|
||||
(new 'static 'dma-tag
|
||||
:qwc #x8b
|
||||
:id (dma-tag-id ref)
|
||||
:addr (the-as uint (-> *sprite-distorter-sine-tables* entry))
|
||||
)
|
||||
)
|
||||
(set! (-> (the-as dma-packet a1-6) vif0) (new 'static 'vif-tag :imm #x404 :cmd (vif-cmd stcycl)))
|
||||
(set! (-> (the-as dma-packet a1-6) vif1)
|
||||
(new 'static 'vif-tag :imm #x160 :num #x8b :cmd (vif-cmd unpack-v4-32))
|
||||
)
|
||||
(set! (-> v1-3 base) (&+ (the-as pointer a1-6) 16))
|
||||
)
|
||||
(dma-buffer-add-vu-function dma-buff sprite-distort-vu1-block 1)
|
||||
0
|
||||
(none)
|
||||
)
|
||||
|
||||
;; Calculates per-sprite data like positions and texture coordinates, puts each sprite onto
|
||||
;; the DMA chain in chunks, and calls into the VU program to draw.
|
||||
;;
|
||||
;; - Only aux sprites with an aux-type of 0 are processed.
|
||||
;; - Sprites will be skipped if their 'warp-turns'/'flag' is 0 or if they fail the clipping test.
|
||||
;; - Sprite coordinates are transformed into screen-coordinates ahead of time in GOAL.
|
||||
;; - If the sprite's 'matrix' field is 1, then the sprite is in screen-space,
|
||||
;; otherwise it's in world-space.
|
||||
;; - Sprites are uploaded in chunks of 85.
|
||||
;; - For every 2 chunks, a call into the VU program is added.
|
||||
(defun sprite-draw-distorters ((dma-buff dma-buffer))
|
||||
(local-vars
|
||||
(v1-15 float)
|
||||
(v1-21 float)
|
||||
(clip-result int)
|
||||
(v1-63 float)
|
||||
(sprite sprite-vec-data-2d)
|
||||
(dma-st-flag pointer)
|
||||
(dma-color pointer)
|
||||
)
|
||||
(rlet ((acc :class vf)
|
||||
(Q :class vf)
|
||||
(vf0 :class vf)
|
||||
(vf1 :class vf)
|
||||
(vf10 :class vf)
|
||||
(vf2 :class vf)
|
||||
(vf3 :class vf)
|
||||
(vf4 :class vf)
|
||||
(vf5 :class vf)
|
||||
(vf6 :class vf)
|
||||
(vf8 :class vf)
|
||||
(vf9 :class vf)
|
||||
)
|
||||
(init-vf0-vector)
|
||||
(.lvf vf8 (&-> *math-camera* hmge-scale quad))
|
||||
(let ((dma-chunk-start (-> dma-buff base))
|
||||
(chunk-sprite-count 0)
|
||||
(draw-sprite-count 0)
|
||||
)
|
||||
(&+! (-> dma-buff base) 16)
|
||||
(let* ((s3-0 *sprite-aux-list*)
|
||||
(num-entries (-> s3-0 entry))
|
||||
)
|
||||
(dotimes (i num-entries)
|
||||
(let ((aux-elem (-> s3-0 data i)))
|
||||
(when (= (-> aux-elem aux-type) (sprite-aux-type distort))
|
||||
(set! sprite (-> aux-elem vec-data))
|
||||
(let ((dma-position (the-as object (-> dma-buff base))))
|
||||
(set! dma-st-flag (&+ (the-as pointer dma-position) 16))
|
||||
(set! dma-color (&+ (the-as pointer dma-position) 32))
|
||||
(cond
|
||||
((= (-> sprite flag-rot-sy y) 1)
|
||||
(.lvf vf3 (&-> *math-camera* sprite-2d vector 0 quad))
|
||||
(.lvf vf4 (&-> *math-camera* sprite-2d vector 1 quad))
|
||||
(.lvf vf5 (&-> *math-camera* sprite-2d vector 2 quad))
|
||||
(.lvf vf6 (&-> *math-camera* sprite-2d trans quad))
|
||||
(.lvf vf9 (&-> *math-camera* sprite-2d-hvdf quad))
|
||||
(.mov v1-15 vf9)
|
||||
)
|
||||
(else
|
||||
(.lvf vf3 (&-> *math-camera* camera-temp vector 0 quad))
|
||||
(.lvf vf4 (&-> *math-camera* camera-temp vector 1 quad))
|
||||
(.lvf vf5 (&-> *math-camera* camera-temp vector 2 quad))
|
||||
(.lvf vf6 (&-> *math-camera* camera-temp trans quad))
|
||||
(.lvf vf9 (&-> *math-camera* hvdf-off quad))
|
||||
(.mov v1-21 vf9)
|
||||
)
|
||||
)
|
||||
(.lvf vf1 (&-> sprite x-y-z-sx quad))
|
||||
(.lvf vf2 (&-> sprite r-g-b-a quad))
|
||||
(.mul.w.vf acc vf6 vf0)
|
||||
(.add.mul.x.vf acc vf3 vf1 acc)
|
||||
(.add.mul.y.vf acc vf4 vf1 acc)
|
||||
(.add.mul.z.vf vf1 vf5 vf1 acc)
|
||||
(.mul.vf vf10 vf1 vf8)
|
||||
(.div.vf Q vf0 vf10 :fsf #b11 :ftf #b11)
|
||||
;;(TODO.VCLIP vf10 vf10)
|
||||
(b! (zero? (-> sprite flag-rot-sy x)) cfg-22 :delay (nop!))
|
||||
(.wait.vf)
|
||||
(.mul.vf vf1 vf1 Q :mask #b111)
|
||||
(.mul.vf vf2 vf2 Q :mask #b111)
|
||||
;;(.cfc2.i clip-result Clipping)
|
||||
(set! clip-result (vu-clip vf10 0)) ;; safe to just drop the higher bits.
|
||||
(b! (logtest? clip-result 63) cfg-22 :delay (.add.vf vf1 vf1 vf9))
|
||||
(.max.x.vf vf1 vf1 vf0 :mask #b1000)
|
||||
(.svf (&-> (the-as vector dma-position) quad) vf1)
|
||||
(.svf (&-> (the-as vector dma-color) quad) vf2)
|
||||
(set! (-> (the-as vector dma-position) w) 255.0)
|
||||
(set! (-> (the-as vector dma-st-flag) x) (* 0.001953125 (+ -1792.0 (-> (the-as vector dma-position) x))))
|
||||
(set! (-> (the-as vector dma-st-flag) y) (* 0.001953125 (+ -1840.0 (-> (the-as vector dma-position) y))))
|
||||
)
|
||||
(set! (-> (the-as vector dma-st-flag) z) 1.0)
|
||||
(when (or (< (the-as int (-> sprite flag-rot-sy x)) 3) (< 11 (the-as int (-> sprite flag-rot-sy x))))
|
||||
(format 0 "Turns = ~D!!!~%" (-> sprite flag-rot-sy x))
|
||||
(set! (-> sprite flag-rot-sy x) (the-as float #xb))
|
||||
)
|
||||
(set! (-> (the-as (pointer int32) dma-st-flag) 3) (the-as int (-> sprite flag-rot-sy x)))
|
||||
(let* ((f1-4 (- (-> *math-camera* perspective data 5)))
|
||||
(f2-2 (-> (the-as vector dma-st-flag) y))
|
||||
(f4-0 (+ f2-2 (* (-> (the-as vector dma-color) x) f1-4)))
|
||||
(f3-0 256.0)
|
||||
(f0-9 (-> (the-as vector dma-color) x))
|
||||
)
|
||||
(if (< 416.0 f4-0)
|
||||
(set! f3-0 (/ (- 416.0 f2-2) f1-4))
|
||||
)
|
||||
(if (< 128.0 f3-0)
|
||||
(set! f3-0 128.0)
|
||||
)
|
||||
(when (< f3-0 f0-9)
|
||||
(let ((v1-61 (/ f3-0 f0-9)))
|
||||
(.mov vf1 v1-61)
|
||||
)
|
||||
(.mul.x.vf vf2 vf2 vf1)
|
||||
(.svf (&-> (the-as vector dma-color) quad) vf2)
|
||||
(.mov v1-63 vf2)
|
||||
)
|
||||
)
|
||||
(&+! (-> dma-buff base) 48)
|
||||
(+! chunk-sprite-count 1)
|
||||
(when (= chunk-sprite-count 85)
|
||||
(let ((v1-68 (-> dma-buff base)))
|
||||
(set! (-> dma-buff base) dma-chunk-start)
|
||||
(let* ((a0-10 dma-buff)
|
||||
(a1-3 (the-as object (-> a0-10 base)))
|
||||
)
|
||||
(set! (-> (the-as dma-packet a1-3) dma)
|
||||
(new 'static 'dma-tag :id (dma-tag-id cnt) :qwc (* 3 chunk-sprite-count))
|
||||
)
|
||||
(set! (-> (the-as dma-packet a1-3) vif0) (new 'static 'vif-tag))
|
||||
(set! (-> (the-as dma-packet a1-3) vif1) (new 'static 'vif-tag
|
||||
:cmd (vif-cmd unpack-v4-32)
|
||||
:imm (shr (shl (+ (* 3 draw-sprite-count) 512) 54) 54)
|
||||
:num (* 3 chunk-sprite-count)
|
||||
)
|
||||
)
|
||||
(set! (-> a0-10 base) (&+ (the-as pointer a1-3) 16))
|
||||
)
|
||||
(set! (-> dma-buff base) v1-68)
|
||||
)
|
||||
(set! chunk-sprite-count 0)
|
||||
(+! draw-sprite-count 85)
|
||||
(when (= draw-sprite-count 170)
|
||||
(let* ((v1-71 dma-buff)
|
||||
(a0-11 (the-as object (-> v1-71 base)))
|
||||
)
|
||||
(set! (-> (the-as dma-packet a0-11) dma) (new 'static 'dma-tag :qwc #x1 :id (dma-tag-id cnt)))
|
||||
(set! (-> (the-as dma-packet a0-11) vif0) (new 'static 'vif-tag))
|
||||
(set! (-> (the-as dma-packet a0-11) vif1)
|
||||
(new 'static 'vif-tag :imm #x1ff :num #x1 :cmd (vif-cmd unpack-v4-32))
|
||||
)
|
||||
(set! (-> v1-71 base) (&+ (the-as pointer a0-11) 16))
|
||||
)
|
||||
(let* ((v1-72 dma-buff)
|
||||
(a0-13 (the-as object (-> v1-72 base)))
|
||||
)
|
||||
(set! (-> (the-as vector4w a0-13) x) draw-sprite-count)
|
||||
(set! (-> (the-as vector4w a0-13) y) 0)
|
||||
(set! (-> (the-as vector4w a0-13) z) 0)
|
||||
(set! (-> (the-as vector4w a0-13) w) 0)
|
||||
(set! (-> v1-72 base) (&+ (the-as pointer a0-13) 16))
|
||||
)
|
||||
(let* ((v1-73 dma-buff)
|
||||
(a0-15 (the-as object (-> v1-73 base)))
|
||||
)
|
||||
(set! (-> (the-as dma-packet a0-15) dma) (new 'static 'dma-tag :id (dma-tag-id cnt)))
|
||||
(set! (-> (the-as dma-packet a0-15) vif0) (new 'static 'vif-tag :cmd (vif-cmd mscalf) :msk #x1))
|
||||
(set! (-> (the-as dma-packet a0-15) vif1) (new 'static 'vif-tag :cmd (vif-cmd flush) :msk #x1))
|
||||
(set! (-> v1-73 base) (&+ (the-as pointer a0-15) 16))
|
||||
)
|
||||
(set! draw-sprite-count 0)
|
||||
)
|
||||
(set! dma-chunk-start (-> dma-buff base))
|
||||
(&+! (-> dma-buff base) 16)
|
||||
)
|
||||
)
|
||||
)
|
||||
(label cfg-22)
|
||||
0
|
||||
)
|
||||
)
|
||||
(cond
|
||||
((zero? chunk-sprite-count)
|
||||
(set! (-> dma-buff base) dma-chunk-start)
|
||||
(nop!)
|
||||
0
|
||||
)
|
||||
(else
|
||||
(let ((v1-81 (-> dma-buff base)))
|
||||
(set! (-> dma-buff base) dma-chunk-start)
|
||||
(let* ((a0-17 dma-buff)
|
||||
(a1-10 (the-as object (-> a0-17 base)))
|
||||
)
|
||||
(set! (-> (the-as dma-packet a1-10) dma)
|
||||
(new 'static 'dma-tag :id (dma-tag-id cnt) :qwc (* 3 chunk-sprite-count))
|
||||
)
|
||||
(set! (-> (the-as dma-packet a1-10) vif0) (new 'static 'vif-tag))
|
||||
(set! (-> (the-as dma-packet a1-10) vif1) (new 'static 'vif-tag
|
||||
:cmd (vif-cmd unpack-v4-32)
|
||||
:imm (shr (shl (+ (* 3 draw-sprite-count) 512) 54) 54)
|
||||
:num (* 3 chunk-sprite-count)
|
||||
)
|
||||
)
|
||||
(set! (-> a0-17 base) (&+ (the-as pointer a1-10) 16))
|
||||
)
|
||||
(set! (-> dma-buff base) v1-81)
|
||||
)
|
||||
)
|
||||
)
|
||||
(let ((v1-82 (+ chunk-sprite-count draw-sprite-count)))
|
||||
(when (nonzero? v1-82)
|
||||
(let* ((a0-19 dma-buff)
|
||||
(a1-12 (the-as object (-> a0-19 base)))
|
||||
)
|
||||
(set! (-> (the-as dma-packet a1-12) dma) (new 'static 'dma-tag :qwc #x1 :id (dma-tag-id cnt)))
|
||||
(set! (-> (the-as dma-packet a1-12) vif0) (new 'static 'vif-tag))
|
||||
(set! (-> (the-as dma-packet a1-12) vif1)
|
||||
(new 'static 'vif-tag :imm #x1ff :num #x1 :cmd (vif-cmd unpack-v4-32))
|
||||
)
|
||||
(set! (-> a0-19 base) (&+ (the-as pointer a1-12) 16))
|
||||
)
|
||||
(let* ((a0-20 dma-buff)
|
||||
(a1-14 (the-as object (-> a0-20 base)))
|
||||
)
|
||||
(set! (-> (the-as vector4w a1-14) x) v1-82)
|
||||
(set! (-> (the-as vector4w a1-14) y) 0)
|
||||
(set! (-> (the-as vector4w a1-14) z) 0)
|
||||
(set! (-> (the-as vector4w a1-14) w) 0)
|
||||
(set! (-> a0-20 base) (&+ (the-as pointer a1-14) 16))
|
||||
)
|
||||
(let ((v1-84 (the-as object (-> dma-buff base))))
|
||||
(set! (-> (the-as dma-packet v1-84) dma) (new 'static 'dma-tag :id (dma-tag-id cnt)))
|
||||
(set! (-> (the-as dma-packet v1-84) vif0) (new 'static 'vif-tag :cmd (vif-cmd mscalf) :msk #x1))
|
||||
(set! (-> (the-as dma-packet v1-84) vif1) (new 'static 'vif-tag :cmd (vif-cmd flush) :msk #x1))
|
||||
(set! (-> dma-buff base) (&+ (the-as pointer v1-84) 16))
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
0
|
||||
(none)
|
||||
)
|
||||
)
|
||||
|
||||
@@ -5,6 +5,11 @@
|
||||
;; name in dgo: sprite-h
|
||||
;; dgos: ENGINE, GAME
|
||||
|
||||
(define-extern sprite-init-distorter (function dma-buffer none))
|
||||
(define-extern sprite-draw-distorters (function dma-buffer none))
|
||||
(define-extern sprite-glow-init-engine (function dma-buffer none))
|
||||
(define-extern sprite-glow-draw (function dma-buffer none))
|
||||
|
||||
;; DECOMP BEGINS
|
||||
|
||||
(deftype sprite-vec-data-2d (structure)
|
||||
@@ -45,6 +50,9 @@
|
||||
:method-count-assert 9
|
||||
:size-assert #x70
|
||||
:flag-assert #x900000070
|
||||
(:methods
|
||||
(new (symbol type int int) _type_ 0)
|
||||
)
|
||||
)
|
||||
|
||||
(deftype sprite-vec-data-3d (structure)
|
||||
@@ -83,4 +91,7 @@
|
||||
:method-count-assert 9
|
||||
:size-assert #x30
|
||||
:flag-assert #x900000030
|
||||
(:methods
|
||||
(new (symbol type int int) _type_ 0)
|
||||
)
|
||||
)
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
+35
-35
@@ -6,41 +6,41 @@
|
||||
|
||||
;; definition of type sparticle-cpuinfo
|
||||
(deftype sparticle-cpuinfo (structure)
|
||||
((sprite sprite-vec-data-2d :offset-assert 0)
|
||||
(adgif adgif-shader :offset-assert 4)
|
||||
(radius float :offset-assert 8)
|
||||
(omega float :offset-assert 12)
|
||||
(vel-sxvel vector :inline :offset-assert 16)
|
||||
(rot-syvel vector :inline :offset-assert 32)
|
||||
(fade rgbaf :inline :offset-assert 48)
|
||||
(acc vector :inline :offset-assert 64)
|
||||
(rotvel3d quaternion :inline :offset-assert 80)
|
||||
(vel vector3s :inline :offset 16)
|
||||
(accel vector3s :inline :offset 64)
|
||||
(scalevelx float :offset 28)
|
||||
(scalevely float :offset 44)
|
||||
(friction float :offset-assert 96)
|
||||
(timer int32 :offset-assert 100)
|
||||
(flags sp-cpuinfo-flag :offset-assert 104)
|
||||
(user-int32 int32 :offset-assert 108)
|
||||
(user-uint32 uint32 :offset 108)
|
||||
(user-float float :offset 108)
|
||||
(user-pntr uint32 :offset 108)
|
||||
(user-object basic :offset 108)
|
||||
(user-sprite sprite-vec-data-2d :offset 108)
|
||||
(sp-func basic :offset-assert 112)
|
||||
(next-time uint32 :offset-assert 116)
|
||||
(next-launcher basic :offset-assert 120)
|
||||
(cache-alpha float :offset-assert 124)
|
||||
(valid uint8 :offset-assert 128)
|
||||
(clock-index uint8 :offset-assert 129)
|
||||
(user1-int16 uint16 :offset-assert 130)
|
||||
(key sparticle-launch-control :offset-assert 132)
|
||||
(binding sparticle-launch-state :offset-assert 136)
|
||||
(data uint32 1 :offset 12)
|
||||
(datab uint8 4 :offset 12)
|
||||
(dataf float 1 :offset 12)
|
||||
(datac uint8 1 :offset 12)
|
||||
((sprite sprite-vec-data-2d :offset-assert 0)
|
||||
(adgif adgif-shader :offset-assert 4)
|
||||
(radius float :offset-assert 8)
|
||||
(omega float :offset-assert 12)
|
||||
(vel-sxvel vector :inline :offset-assert 16)
|
||||
(rot-syvel vector :inline :offset-assert 32)
|
||||
(fade rgbaf :inline :offset-assert 48)
|
||||
(acc vector :inline :offset-assert 64)
|
||||
(rotvel3d quaternion :inline :offset-assert 80)
|
||||
(vel vector3s :inline :offset 16)
|
||||
(accel vector3s :inline :offset 64)
|
||||
(scalevelx float :offset 28)
|
||||
(scalevely float :offset 44)
|
||||
(friction float :offset-assert 96)
|
||||
(timer int32 :offset-assert 100)
|
||||
(flags sp-cpuinfo-flag :offset-assert 104)
|
||||
(user-int32 int32 :offset-assert 108)
|
||||
(user-uint32 uint32 :offset 108)
|
||||
(user-float float :offset 108)
|
||||
(user-pntr uint32 :offset 108)
|
||||
(user-object basic :offset 108)
|
||||
(user-sprite sprite-vec-data-2d :offset 108)
|
||||
(sp-func (function sparticle-system sparticle-cpuinfo sprite-vec-data-3d uint none) :offset-assert 112)
|
||||
(next-time uint32 :offset-assert 116)
|
||||
(next-launcher basic :offset-assert 120)
|
||||
(cache-alpha float :offset-assert 124)
|
||||
(valid uint8 :offset-assert 128)
|
||||
(clock-index uint8 :offset-assert 129)
|
||||
(user1-int16 uint16 :offset-assert 130)
|
||||
(key sparticle-launch-control :offset-assert 132)
|
||||
(binding sparticle-launch-state :offset-assert 136)
|
||||
(data uint32 1 :offset 12)
|
||||
(datab uint8 4 :offset 12)
|
||||
(dataf float 1 :offset 12)
|
||||
(datac uint8 1 :offset 12)
|
||||
)
|
||||
:method-count-assert 9
|
||||
:size-assert #x8c
|
||||
|
||||
+3
-7
@@ -67,9 +67,9 @@
|
||||
:size-assert #x8
|
||||
:flag-assert #xc00000008
|
||||
(:methods
|
||||
(simple-sprite-system-method-9 () none 9)
|
||||
(simple-sprite-system-method-10 () none 10)
|
||||
(simple-sprite-system-method-11 () none 11)
|
||||
(add! () none 9)
|
||||
(simple-sprite-system-method-10 (_type_ dma-buffer) none 10)
|
||||
(clear! (_type_) none 11)
|
||||
)
|
||||
)
|
||||
|
||||
@@ -89,7 +89,3 @@
|
||||
|
||||
;; failed to figure out what this is:
|
||||
0
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
+442
@@ -0,0 +1,442 @@
|
||||
;;-*-Lisp-*-
|
||||
(in-package goal)
|
||||
|
||||
;; definition of type sprite-distorter-sine-tables
|
||||
(deftype sprite-distorter-sine-tables (basic)
|
||||
((aspx float :offset-assert 4)
|
||||
(aspy float :offset-assert 8)
|
||||
(entry vector 128 :inline :offset-assert 16)
|
||||
(ientry qword 9 :inline :offset-assert 2064)
|
||||
(giftag gs-gif-tag :inline :offset-assert 2208)
|
||||
(color qword :inline :offset-assert 2224)
|
||||
)
|
||||
:method-count-assert 9
|
||||
:size-assert #x8c0
|
||||
:flag-assert #x9000008c0
|
||||
)
|
||||
|
||||
;; definition for method 3 of type sprite-distorter-sine-tables
|
||||
(defmethod inspect sprite-distorter-sine-tables ((obj sprite-distorter-sine-tables))
|
||||
(when (not obj)
|
||||
(set! obj obj)
|
||||
(goto cfg-4)
|
||||
)
|
||||
(format #t "[~8x] ~A~%" obj (-> obj type))
|
||||
(format #t "~1Taspx: ~f~%" (-> obj aspx))
|
||||
(format #t "~1Taspy: ~f~%" (-> obj aspy))
|
||||
(format #t "~1Tentry[128] @ #x~X~%" (-> obj entry))
|
||||
(format #t "~1Tientry[9] @ #x~X~%" (-> obj ientry))
|
||||
(format #t "~1Tgiftag: #<qword @ #x~X>~%" (-> obj giftag))
|
||||
(format #t "~1Tcolor: #<qword @ #x~X>~%" (-> obj color))
|
||||
(label cfg-4)
|
||||
obj
|
||||
)
|
||||
|
||||
;; failed to figure out what this is:
|
||||
(kmemopen global "sprite-distort-tables")
|
||||
|
||||
;; definition for symbol *sprite-distorter-sine-tables*, type sprite-distorter-sine-tables
|
||||
(define *sprite-distorter-sine-tables* (new 'global 'sprite-distorter-sine-tables))
|
||||
|
||||
;; failed to figure out what this is:
|
||||
(kmemclose)
|
||||
|
||||
;; definition for function sprite-distorter-generate-tables
|
||||
;; INFO: Return type mismatch int vs none.
|
||||
(defun sprite-distorter-generate-tables ()
|
||||
(let ((tbls *sprite-distorter-sine-tables*))
|
||||
(let ((entry-idx 0)
|
||||
(ientry-idx 0)
|
||||
(turns 3)
|
||||
(cam-aspx (- (-> *math-camera* perspective data 0)))
|
||||
(cam-aspy (- (-> *math-camera* perspective data 5)))
|
||||
)
|
||||
(when (or (!= cam-aspx (-> tbls aspx)) (!= cam-aspy (-> tbls aspy)))
|
||||
(set! (-> tbls aspx) cam-aspx)
|
||||
(set! (-> tbls aspy) cam-aspy)
|
||||
(while (< turns 12)
|
||||
(set! (-> tbls ientry ientry-idx vector4w x) (+ entry-idx 352))
|
||||
(+! ientry-idx 1)
|
||||
(dotimes (turn turns)
|
||||
(let ((rot (* 65536.0 (/ (the float turn) (the float turns)))))
|
||||
(set-vector! (-> tbls entry entry-idx) (* (sin rot) cam-aspx) (* (cos rot) cam-aspy) 0.0 0.0)
|
||||
(let ((s3-1 (+ entry-idx 1)))
|
||||
(set-vector!
|
||||
(-> tbls entry s3-1)
|
||||
(* 0.001953125 cam-aspx (sin rot))
|
||||
(* 0.001953125 cam-aspy (cos rot))
|
||||
0.0
|
||||
0.0
|
||||
)
|
||||
(set! entry-idx (+ s3-1 1))
|
||||
)
|
||||
)
|
||||
)
|
||||
(+! turns 1)
|
||||
)
|
||||
(set-vector! (-> tbls entry entry-idx) 0.0 cam-aspy 0.0 0.0)
|
||||
(let ((v1-20 (+ entry-idx 1)))
|
||||
(set-vector! (-> tbls entry v1-20) 0.0 (* 0.001953125 cam-aspy) 0.0 0.0)
|
||||
(+ v1-20 1)
|
||||
)
|
||||
)
|
||||
)
|
||||
(set! (-> tbls giftag tag) (new 'static 'gif-tag64
|
||||
:nloop #x1
|
||||
:eop #x1
|
||||
:pre #x1
|
||||
:prim (new 'static 'gs-prim :prim (gs-prim-type tri-strip) :tme #x1)
|
||||
:nreg #xf
|
||||
)
|
||||
)
|
||||
(set! (-> tbls giftag regs) (new 'static 'gif-tag-regs
|
||||
:regs0 (gif-reg-id st)
|
||||
:regs1 (gif-reg-id rgbaq)
|
||||
:regs2 (gif-reg-id xyzf2)
|
||||
:regs3 (gif-reg-id st)
|
||||
:regs4 (gif-reg-id rgbaq)
|
||||
:regs5 (gif-reg-id xyzf2)
|
||||
:regs6 (gif-reg-id st)
|
||||
:regs7 (gif-reg-id rgbaq)
|
||||
:regs8 (gif-reg-id xyzf2)
|
||||
:regs9 (gif-reg-id st)
|
||||
:regs10 (gif-reg-id rgbaq)
|
||||
:regs11 (gif-reg-id xyzf2)
|
||||
:regs12 (gif-reg-id st)
|
||||
:regs13 (gif-reg-id rgbaq)
|
||||
:regs14 (gif-reg-id xyzf2)
|
||||
)
|
||||
)
|
||||
(set! (-> tbls color vector4w x) 128)
|
||||
(set! (-> tbls color vector4w y) 128)
|
||||
(set! (-> tbls color vector4w z) 128)
|
||||
(set! (-> tbls color vector4w w) 128)
|
||||
)
|
||||
0
|
||||
(none)
|
||||
)
|
||||
|
||||
;; definition for symbol sprite-distort-vu1-block, type vu-function
|
||||
(define sprite-distort-vu1-block (new 'static 'vu-function :length 63 :qlength 32))
|
||||
|
||||
;; definition for function sprite-init-distorter
|
||||
;; INFO: Return type mismatch int vs none.
|
||||
(defun sprite-init-distorter ((dma-buff dma-buffer))
|
||||
(let* ((v1-0 dma-buff)
|
||||
(a1-0 (the-as object (-> v1-0 base)))
|
||||
)
|
||||
(set! (-> (the-as dma-packet a1-0) dma) (new 'static 'dma-tag :qwc #x7 :id (dma-tag-id cnt)))
|
||||
(set! (-> (the-as dma-packet a1-0) vif0) (new 'static 'vif-tag))
|
||||
(set! (-> (the-as dma-packet a1-0) vif1) (new 'static 'vif-tag :imm #x7 :cmd (vif-cmd direct) :msk #x1))
|
||||
(set! (-> v1-0 base) (&+ (the-as pointer a1-0) 16))
|
||||
)
|
||||
(let* ((v1-1 dma-buff)
|
||||
(a1-2 (the-as object (-> v1-1 base)))
|
||||
)
|
||||
(set! (-> (the-as gs-gif-tag a1-2) tag) (new 'static 'gif-tag64 :nloop #x1 :eop #x1 :nreg #x6))
|
||||
(set! (-> (the-as gs-gif-tag a1-2) regs) (new 'static 'gif-tag-regs
|
||||
:regs0 (gif-reg-id a+d)
|
||||
:regs1 (gif-reg-id a+d)
|
||||
:regs2 (gif-reg-id a+d)
|
||||
:regs3 (gif-reg-id a+d)
|
||||
:regs4 (gif-reg-id a+d)
|
||||
:regs5 (gif-reg-id a+d)
|
||||
:regs6 (gif-reg-id a+d)
|
||||
:regs7 (gif-reg-id a+d)
|
||||
:regs8 (gif-reg-id a+d)
|
||||
:regs9 (gif-reg-id a+d)
|
||||
:regs10 (gif-reg-id a+d)
|
||||
:regs11 (gif-reg-id a+d)
|
||||
:regs12 (gif-reg-id a+d)
|
||||
:regs13 (gif-reg-id a+d)
|
||||
:regs14 (gif-reg-id a+d)
|
||||
:regs15 (gif-reg-id a+d)
|
||||
)
|
||||
)
|
||||
(set! (-> v1-1 base) (&+ (the-as pointer a1-2) 16))
|
||||
)
|
||||
(let* ((v1-2 dma-buff)
|
||||
(a1-4 (-> v1-2 base))
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-zbuf) a1-4) 0) (new 'static 'gs-zbuf :zbp #x130 :psm (gs-psm ct24) :zmsk #x1))
|
||||
(set! (-> (the-as (pointer gs-reg64) a1-4) 1) (gs-reg64 zbuf-1))
|
||||
(set! (-> (the-as (pointer gs-tex0) a1-4) 2) (new 'static 'gs-tex0 :tbp0 #x3300 :tbw #x8 :tw #x9 :th #x9))
|
||||
(set! (-> (the-as (pointer gs-reg64) a1-4) 3) (gs-reg64 tex0-1))
|
||||
(set! (-> (the-as (pointer gs-tex1) a1-4) 4) (new 'static 'gs-tex1 :mmag #x1 :mmin #x1))
|
||||
(set! (-> (the-as (pointer gs-reg64) a1-4) 5) (gs-reg64 tex1-1))
|
||||
(set! (-> (the-as (pointer gs-miptbp) a1-4) 6) (new 'static 'gs-miptbp))
|
||||
(set! (-> (the-as (pointer gs-reg64) a1-4) 7) (gs-reg64 miptbp1-1))
|
||||
(set! (-> (the-as (pointer gs-clamp) a1-4) 8) (new 'static 'gs-clamp
|
||||
:wms (gs-tex-wrap-mode region-clamp)
|
||||
:wmt (gs-tex-wrap-mode region-clamp)
|
||||
:maxu #x1ff
|
||||
:maxv #x19f
|
||||
)
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-reg64) a1-4) 9) (gs-reg64 clamp-1))
|
||||
(set! (-> (the-as (pointer gs-alpha) a1-4) 10) (new 'static 'gs-alpha :b #x1 :d #x1))
|
||||
(set! (-> (the-as (pointer gs-reg64) a1-4) 11) (gs-reg64 alpha-1))
|
||||
(set! (-> v1-2 base) (&+ a1-4 96))
|
||||
)
|
||||
(let* ((v1-3 dma-buff)
|
||||
(a1-6 (the-as object (-> v1-3 base)))
|
||||
)
|
||||
(set! (-> (the-as dma-packet a1-6) dma)
|
||||
(new 'static 'dma-tag
|
||||
:qwc #x8b
|
||||
:id (dma-tag-id ref)
|
||||
:addr (the-as uint (-> *sprite-distorter-sine-tables* entry))
|
||||
)
|
||||
)
|
||||
(set! (-> (the-as dma-packet a1-6) vif0) (new 'static 'vif-tag :imm #x404 :cmd (vif-cmd stcycl)))
|
||||
(set! (-> (the-as dma-packet a1-6) vif1)
|
||||
(new 'static 'vif-tag :imm #x160 :num #x8b :cmd (vif-cmd unpack-v4-32))
|
||||
)
|
||||
(set! (-> v1-3 base) (&+ (the-as pointer a1-6) 16))
|
||||
)
|
||||
(dma-buffer-add-vu-function dma-buff sprite-distort-vu1-block 1)
|
||||
0
|
||||
(none)
|
||||
)
|
||||
|
||||
;; definition for function sprite-draw-distorters
|
||||
;; INFO: Used lq/sq
|
||||
;; INFO: Return type mismatch int vs none.
|
||||
;; ERROR: Inline assembly instruction marked with TODO - [TODO.VCLIP]
|
||||
;; ERROR: Unsupported inline assembly instruction kind - [cfc2.i v1, Clipping]
|
||||
(defun sprite-draw-distorters ((dma-buff dma-buffer))
|
||||
(local-vars
|
||||
(v1-15 float)
|
||||
(v1-21 float)
|
||||
(clip-result int)
|
||||
(v1-63 float)
|
||||
(sprite sprite-vec-data-2d)
|
||||
(dma-st-flag pointer)
|
||||
(dma-color pointer)
|
||||
)
|
||||
(rlet ((acc :class vf)
|
||||
(Q :class vf)
|
||||
(vf0 :class vf)
|
||||
(vf1 :class vf)
|
||||
(vf10 :class vf)
|
||||
(vf2 :class vf)
|
||||
(vf3 :class vf)
|
||||
(vf4 :class vf)
|
||||
(vf5 :class vf)
|
||||
(vf6 :class vf)
|
||||
(vf8 :class vf)
|
||||
(vf9 :class vf)
|
||||
)
|
||||
(init-vf0-vector)
|
||||
(.lvf vf8 (&-> *math-camera* hmge-scale quad))
|
||||
(let ((dma-chunk-start (-> dma-buff base))
|
||||
(chunk-sprite-count 0)
|
||||
(draw-sprite-count 0)
|
||||
)
|
||||
(&+! (-> dma-buff base) 16)
|
||||
(let* ((s3-0 *sprite-aux-list*)
|
||||
(num-entries (-> s3-0 entry))
|
||||
)
|
||||
(dotimes (i num-entries)
|
||||
(let ((aux-elem (-> s3-0 data i)))
|
||||
(when (= (-> aux-elem aux-type) (sprite-aux-type distort))
|
||||
(set! sprite (-> aux-elem vec-data))
|
||||
(let ((dma-position (the-as object (-> dma-buff base))))
|
||||
(set! dma-st-flag (&+ (the-as pointer dma-position) 16))
|
||||
(set! dma-color (&+ (the-as pointer dma-position) 32))
|
||||
(cond
|
||||
((= (-> sprite flag-rot-sy y) 1)
|
||||
(.lvf vf3 (&-> *math-camera* sprite-2d vector 0 quad))
|
||||
(.lvf vf4 (&-> *math-camera* sprite-2d vector 1 quad))
|
||||
(.lvf vf5 (&-> *math-camera* sprite-2d vector 2 quad))
|
||||
(.lvf vf6 (&-> *math-camera* sprite-2d trans quad))
|
||||
(.lvf vf9 (&-> *math-camera* sprite-2d-hvdf quad))
|
||||
(.mov v1-15 vf9)
|
||||
)
|
||||
(else
|
||||
(.lvf vf3 (&-> *math-camera* camera-temp vector 0 quad))
|
||||
(.lvf vf4 (&-> *math-camera* camera-temp vector 1 quad))
|
||||
(.lvf vf5 (&-> *math-camera* camera-temp vector 2 quad))
|
||||
(.lvf vf6 (&-> *math-camera* camera-temp trans quad))
|
||||
(.lvf vf9 (&-> *math-camera* hvdf-off quad))
|
||||
(.mov v1-21 vf9)
|
||||
)
|
||||
)
|
||||
(.lvf vf1 (&-> sprite x-y-z-sx quad))
|
||||
(.lvf vf2 (&-> sprite r-g-b-a quad))
|
||||
(.mul.w.vf acc vf6 vf0)
|
||||
(.add.mul.x.vf acc vf3 vf1 acc)
|
||||
(.add.mul.y.vf acc vf4 vf1 acc)
|
||||
(.add.mul.z.vf vf1 vf5 vf1 acc)
|
||||
(.mul.vf vf10 vf1 vf8)
|
||||
(.div.vf Q vf0 vf10 :fsf #b11 :ftf #b11)
|
||||
(TODO.VCLIP vf10 vf10)
|
||||
(b! (zero? (-> sprite flag-rot-sy x)) cfg-22 :delay (nop!))
|
||||
(.wait.vf)
|
||||
(.mul.vf vf1 vf1 Q :mask #b111)
|
||||
(.mul.vf vf2 vf2 Q :mask #b111)
|
||||
(.cfc2.i clip-result Clipping)
|
||||
(b! (logtest? clip-result 63) cfg-22 :delay (.add.vf vf1 vf1 vf9))
|
||||
(.max.x.vf vf1 vf1 vf0 :mask #b1000)
|
||||
(.svf (&-> (the-as vector dma-position) quad) vf1)
|
||||
(.svf (&-> (the-as vector dma-color) quad) vf2)
|
||||
(set! (-> (the-as vector dma-position) w) 255.0)
|
||||
(set! (-> (the-as vector dma-st-flag) x) (* 0.001953125 (+ -1792.0 (-> (the-as vector dma-position) x))))
|
||||
(set! (-> (the-as vector dma-st-flag) y) (* 0.001953125 (+ -1840.0 (-> (the-as vector dma-position) y))))
|
||||
)
|
||||
(set! (-> (the-as vector dma-st-flag) z) 1.0)
|
||||
(when (or (< (the-as int (-> sprite flag-rot-sy x)) 3) (< 11 (the-as int (-> sprite flag-rot-sy x))))
|
||||
(format 0 "Turns = ~D!!!~%" (-> sprite flag-rot-sy x))
|
||||
(set! (-> sprite flag-rot-sy x) (the-as float #xb))
|
||||
)
|
||||
(set! (-> (the-as (pointer int32) dma-st-flag) 3) (the-as int (-> sprite flag-rot-sy x)))
|
||||
(let* ((f1-4 (- (-> *math-camera* perspective data 5)))
|
||||
(f2-2 (-> (the-as vector dma-st-flag) y))
|
||||
(f4-0 (+ f2-2 (* (-> (the-as vector dma-color) x) f1-4)))
|
||||
(f3-0 256.0)
|
||||
(f0-9 (-> (the-as vector dma-color) x))
|
||||
)
|
||||
(if (< 416.0 f4-0)
|
||||
(set! f3-0 (/ (- 416.0 f2-2) f1-4))
|
||||
)
|
||||
(if (< 128.0 f3-0)
|
||||
(set! f3-0 128.0)
|
||||
)
|
||||
(when (< f3-0 f0-9)
|
||||
(let ((v1-61 (/ f3-0 f0-9)))
|
||||
(.mov vf1 v1-61)
|
||||
)
|
||||
(.mul.x.vf vf2 vf2 vf1)
|
||||
(.svf (&-> (the-as vector dma-color) quad) vf2)
|
||||
(.mov v1-63 vf2)
|
||||
)
|
||||
)
|
||||
(&+! (-> dma-buff base) 48)
|
||||
(+! chunk-sprite-count 1)
|
||||
(when (= chunk-sprite-count 85)
|
||||
(let ((v1-68 (-> dma-buff base)))
|
||||
(set! (-> dma-buff base) dma-chunk-start)
|
||||
(let* ((a0-10 dma-buff)
|
||||
(a1-3 (the-as object (-> a0-10 base)))
|
||||
)
|
||||
(set! (-> (the-as dma-packet a1-3) dma)
|
||||
(new 'static 'dma-tag :id (dma-tag-id cnt) :qwc (* 3 chunk-sprite-count))
|
||||
)
|
||||
(set! (-> (the-as dma-packet a1-3) vif0) (new 'static 'vif-tag))
|
||||
(set! (-> (the-as dma-packet a1-3) vif1) (new 'static 'vif-tag
|
||||
:cmd (vif-cmd unpack-v4-32)
|
||||
:imm (shr (shl (+ (* 3 draw-sprite-count) 512) 54) 54)
|
||||
:num (* 3 chunk-sprite-count)
|
||||
)
|
||||
)
|
||||
(set! (-> a0-10 base) (&+ (the-as pointer a1-3) 16))
|
||||
)
|
||||
(set! (-> dma-buff base) v1-68)
|
||||
)
|
||||
(set! chunk-sprite-count 0)
|
||||
(+! draw-sprite-count 85)
|
||||
(when (= draw-sprite-count 170)
|
||||
(let* ((v1-71 dma-buff)
|
||||
(a0-11 (the-as object (-> v1-71 base)))
|
||||
)
|
||||
(set! (-> (the-as dma-packet a0-11) dma) (new 'static 'dma-tag :qwc #x1 :id (dma-tag-id cnt)))
|
||||
(set! (-> (the-as dma-packet a0-11) vif0) (new 'static 'vif-tag))
|
||||
(set! (-> (the-as dma-packet a0-11) vif1)
|
||||
(new 'static 'vif-tag :imm #x1ff :num #x1 :cmd (vif-cmd unpack-v4-32))
|
||||
)
|
||||
(set! (-> v1-71 base) (&+ (the-as pointer a0-11) 16))
|
||||
)
|
||||
(let* ((v1-72 dma-buff)
|
||||
(a0-13 (the-as object (-> v1-72 base)))
|
||||
)
|
||||
(set! (-> (the-as vector4w a0-13) x) draw-sprite-count)
|
||||
(set! (-> (the-as vector4w a0-13) y) 0)
|
||||
(set! (-> (the-as vector4w a0-13) z) 0)
|
||||
(set! (-> (the-as vector4w a0-13) w) 0)
|
||||
(set! (-> v1-72 base) (&+ (the-as pointer a0-13) 16))
|
||||
)
|
||||
(let* ((v1-73 dma-buff)
|
||||
(a0-15 (the-as object (-> v1-73 base)))
|
||||
)
|
||||
(set! (-> (the-as dma-packet a0-15) dma) (new 'static 'dma-tag :id (dma-tag-id cnt)))
|
||||
(set! (-> (the-as dma-packet a0-15) vif0) (new 'static 'vif-tag :cmd (vif-cmd mscalf) :msk #x1))
|
||||
(set! (-> (the-as dma-packet a0-15) vif1) (new 'static 'vif-tag :cmd (vif-cmd flush) :msk #x1))
|
||||
(set! (-> v1-73 base) (&+ (the-as pointer a0-15) 16))
|
||||
)
|
||||
(set! draw-sprite-count 0)
|
||||
)
|
||||
(set! dma-chunk-start (-> dma-buff base))
|
||||
(&+! (-> dma-buff base) 16)
|
||||
)
|
||||
)
|
||||
)
|
||||
(label cfg-22)
|
||||
0
|
||||
)
|
||||
)
|
||||
(cond
|
||||
((zero? chunk-sprite-count)
|
||||
(set! (-> dma-buff base) dma-chunk-start)
|
||||
(nop!)
|
||||
0
|
||||
)
|
||||
(else
|
||||
(let ((v1-81 (-> dma-buff base)))
|
||||
(set! (-> dma-buff base) dma-chunk-start)
|
||||
(let* ((a0-17 dma-buff)
|
||||
(a1-10 (the-as object (-> a0-17 base)))
|
||||
)
|
||||
(set! (-> (the-as dma-packet a1-10) dma)
|
||||
(new 'static 'dma-tag :id (dma-tag-id cnt) :qwc (* 3 chunk-sprite-count))
|
||||
)
|
||||
(set! (-> (the-as dma-packet a1-10) vif0) (new 'static 'vif-tag))
|
||||
(set! (-> (the-as dma-packet a1-10) vif1) (new 'static 'vif-tag
|
||||
:cmd (vif-cmd unpack-v4-32)
|
||||
:imm (shr (shl (+ (* 3 draw-sprite-count) 512) 54) 54)
|
||||
:num (* 3 chunk-sprite-count)
|
||||
)
|
||||
)
|
||||
(set! (-> a0-17 base) (&+ (the-as pointer a1-10) 16))
|
||||
)
|
||||
(set! (-> dma-buff base) v1-81)
|
||||
)
|
||||
)
|
||||
)
|
||||
(let ((v1-82 (+ chunk-sprite-count draw-sprite-count)))
|
||||
(when (nonzero? v1-82)
|
||||
(let* ((a0-19 dma-buff)
|
||||
(a1-12 (the-as object (-> a0-19 base)))
|
||||
)
|
||||
(set! (-> (the-as dma-packet a1-12) dma) (new 'static 'dma-tag :qwc #x1 :id (dma-tag-id cnt)))
|
||||
(set! (-> (the-as dma-packet a1-12) vif0) (new 'static 'vif-tag))
|
||||
(set! (-> (the-as dma-packet a1-12) vif1)
|
||||
(new 'static 'vif-tag :imm #x1ff :num #x1 :cmd (vif-cmd unpack-v4-32))
|
||||
)
|
||||
(set! (-> a0-19 base) (&+ (the-as pointer a1-12) 16))
|
||||
)
|
||||
(let* ((a0-20 dma-buff)
|
||||
(a1-14 (the-as object (-> a0-20 base)))
|
||||
)
|
||||
(set! (-> (the-as vector4w a1-14) x) v1-82)
|
||||
(set! (-> (the-as vector4w a1-14) y) 0)
|
||||
(set! (-> (the-as vector4w a1-14) z) 0)
|
||||
(set! (-> (the-as vector4w a1-14) w) 0)
|
||||
(set! (-> a0-20 base) (&+ (the-as pointer a1-14) 16))
|
||||
)
|
||||
(let ((v1-84 (the-as object (-> dma-buff base))))
|
||||
(set! (-> (the-as dma-packet v1-84) dma) (new 'static 'dma-tag :id (dma-tag-id cnt)))
|
||||
(set! (-> (the-as dma-packet v1-84) vif0) (new 'static 'vif-tag :cmd (vif-cmd mscalf) :msk #x1))
|
||||
(set! (-> (the-as dma-packet v1-84) vif1) (new 'static 'vif-tag :cmd (vif-cmd flush) :msk #x1))
|
||||
(set! (-> dma-buff base) (&+ (the-as pointer v1-84) 16))
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
0
|
||||
(none)
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
|
||||
|
||||
+6
-4
@@ -72,6 +72,9 @@
|
||||
:method-count-assert 9
|
||||
:size-assert #x70
|
||||
:flag-assert #x900000070
|
||||
(:methods
|
||||
(new (symbol type int int) _type_ 0)
|
||||
)
|
||||
)
|
||||
|
||||
;; definition for method 3 of type sprite-array-2d
|
||||
@@ -159,6 +162,9 @@
|
||||
:method-count-assert 9
|
||||
:size-assert #x30
|
||||
:flag-assert #x900000030
|
||||
(:methods
|
||||
(new (symbol type int int) _type_ 0)
|
||||
)
|
||||
)
|
||||
|
||||
;; definition for method 3 of type sprite-array-3d
|
||||
@@ -179,7 +185,3 @@
|
||||
|
||||
;; failed to figure out what this is:
|
||||
0
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
+993
@@ -0,0 +1,993 @@
|
||||
;;-*-Lisp-*-
|
||||
(in-package goal)
|
||||
|
||||
;; definition of type sprite-header
|
||||
(deftype sprite-header (structure)
|
||||
((header qword 1 :inline :offset-assert 0)
|
||||
(num-sprites int32 :offset 0)
|
||||
)
|
||||
:method-count-assert 9
|
||||
:size-assert #x10
|
||||
:flag-assert #x900000010
|
||||
)
|
||||
|
||||
;; definition for method 3 of type sprite-header
|
||||
(defmethod inspect sprite-header ((obj sprite-header))
|
||||
(when (not obj)
|
||||
(set! obj obj)
|
||||
(goto cfg-4)
|
||||
)
|
||||
(format #t "[~8x] ~A~%" obj 'sprite-header)
|
||||
(format #t "~1Theader[1] @ #x~X~%" (-> obj header))
|
||||
(format #t "~1Tnum-sprites: ~D~%" (-> obj num-sprites))
|
||||
(label cfg-4)
|
||||
obj
|
||||
)
|
||||
|
||||
;; definition for function sprite-setup-header
|
||||
;; INFO: Return type mismatch int vs none.
|
||||
(defun sprite-setup-header ((hdr sprite-header) (num-sprites int))
|
||||
(set! (-> hdr num-sprites) num-sprites)
|
||||
(none)
|
||||
)
|
||||
|
||||
;; definition of type sprite-hvdf-data
|
||||
(deftype sprite-hvdf-data (structure)
|
||||
((data qword 76 :inline :offset-assert 0)
|
||||
)
|
||||
:method-count-assert 9
|
||||
:size-assert #x4c0
|
||||
:flag-assert #x9000004c0
|
||||
)
|
||||
|
||||
;; definition for method 3 of type sprite-hvdf-data
|
||||
(defmethod inspect sprite-hvdf-data ((obj sprite-hvdf-data))
|
||||
(when (not obj)
|
||||
(set! obj obj)
|
||||
(goto cfg-4)
|
||||
)
|
||||
(format #t "[~8x] ~A~%" obj 'sprite-hvdf-data)
|
||||
(format #t "~1Tdata[76] @ #x~X~%" (-> obj data))
|
||||
(label cfg-4)
|
||||
obj
|
||||
)
|
||||
|
||||
;; definition of type sprite-hvdf-control
|
||||
(deftype sprite-hvdf-control (structure)
|
||||
((alloc int8 76 :offset-assert 0)
|
||||
)
|
||||
:method-count-assert 9
|
||||
:size-assert #x4c
|
||||
:flag-assert #x90000004c
|
||||
)
|
||||
|
||||
;; definition for method 3 of type sprite-hvdf-control
|
||||
(defmethod inspect sprite-hvdf-control ((obj sprite-hvdf-control))
|
||||
(when (not obj)
|
||||
(set! obj obj)
|
||||
(goto cfg-4)
|
||||
)
|
||||
(format #t "[~8x] ~A~%" obj 'sprite-hvdf-control)
|
||||
(format #t "~1Talloc[76] @ #x~X~%" (-> obj alloc))
|
||||
(label cfg-4)
|
||||
obj
|
||||
)
|
||||
|
||||
;; definition of type sprite-aux-elem
|
||||
(deftype sprite-aux-elem (structure)
|
||||
((aux-type sprite-aux-type :offset-assert 0)
|
||||
(data vector 3 :offset-assert 4)
|
||||
(vec-data sprite-vec-data-2d :offset 4)
|
||||
(gif-data adgif-shader :offset 8)
|
||||
(aux-data sparticle-cpuinfo :offset 12)
|
||||
)
|
||||
:pack-me
|
||||
:method-count-assert 9
|
||||
:size-assert #x10
|
||||
:flag-assert #x900000010
|
||||
)
|
||||
|
||||
;; definition for method 3 of type sprite-aux-elem
|
||||
(defmethod inspect sprite-aux-elem ((obj sprite-aux-elem))
|
||||
(when (not obj)
|
||||
(set! obj obj)
|
||||
(goto cfg-4)
|
||||
)
|
||||
(format #t "[~8x] ~A~%" obj 'sprite-aux-elem)
|
||||
(format #t "~1Taux-type: ~D~%" (-> obj aux-type))
|
||||
(format #t "~1Tdata[3] @ #x~X~%" (-> obj data))
|
||||
(format #t "~1Tvec-data: #<sprite-vec-data-2d @ #x~X>~%" (-> obj vec-data))
|
||||
(format #t "~1Tgif-data: #<adgif-shader @ #x~X>~%" (-> obj gif-data))
|
||||
(format #t "~1Taux-data: #<sparticle-cpuinfo @ #x~X>~%" (-> obj aux-data))
|
||||
(label cfg-4)
|
||||
obj
|
||||
)
|
||||
|
||||
;; definition of type sprite-aux-list
|
||||
(deftype sprite-aux-list (basic)
|
||||
((num-entries int32 :offset-assert 4)
|
||||
(entry int32 :offset-assert 8)
|
||||
(data sprite-aux-elem :inline :dynamic :offset-assert 12)
|
||||
)
|
||||
:method-count-assert 9
|
||||
:size-assert #xc
|
||||
:flag-assert #x90000000c
|
||||
(:methods
|
||||
(new (symbol type int) _type_ 0)
|
||||
)
|
||||
)
|
||||
|
||||
;; definition for method 3 of type sprite-aux-list
|
||||
;; INFO: this function exists in multiple non-identical object files
|
||||
(defmethod inspect sprite-aux-list ((obj sprite-aux-list))
|
||||
(when (not obj)
|
||||
(set! obj obj)
|
||||
(goto cfg-4)
|
||||
)
|
||||
(format #t "[~8x] ~A~%" obj (-> obj type))
|
||||
(format #t "~1Tnum-entries: ~D~%" (-> obj num-entries))
|
||||
(format #t "~1Tentry: ~D~%" (-> obj entry))
|
||||
(format #t "~1Tdata[0] @ #x~X~%" (-> obj data))
|
||||
(label cfg-4)
|
||||
obj
|
||||
)
|
||||
|
||||
;; definition for method 0 of type sprite-aux-list
|
||||
(defmethod new sprite-aux-list ((allocation symbol) (type-to-make type) (size int))
|
||||
(let ((v0-0 (object-new allocation type-to-make (the-as int (+ (-> type-to-make size) (* size 16))))))
|
||||
(set! (-> v0-0 num-entries) size)
|
||||
(set! (-> v0-0 entry) 0)
|
||||
v0-0
|
||||
)
|
||||
)
|
||||
|
||||
;; definition for method 3 of type sprite-aux-list
|
||||
;; INFO: this function exists in multiple non-identical object files
|
||||
;; INFO: Return type mismatch symbol vs sprite-aux-list.
|
||||
(defmethod inspect sprite-aux-list ((obj sprite-aux-list))
|
||||
(format #t "[~X] sprite-aux-list:~%" obj)
|
||||
(format #t "~Tnum-entries: ~D~%" (-> obj num-entries))
|
||||
(format #t "~Tentry: ~D~%" (-> obj entry))
|
||||
(dotimes (s5-0 (-> obj entry))
|
||||
(format #t "~T~D : ~X~%" s5-0 (-> obj data s5-0))
|
||||
)
|
||||
(the-as sprite-aux-list #f)
|
||||
)
|
||||
|
||||
;; definition for function clear-sprite-aux-list
|
||||
;; INFO: Return type mismatch int vs none.
|
||||
(defun clear-sprite-aux-list ()
|
||||
(set! (-> *sprite-aux-list* entry) 0)
|
||||
0
|
||||
(none)
|
||||
)
|
||||
|
||||
;; definition for function add-to-sprite-aux-list
|
||||
;; INFO: Return type mismatch int vs none.
|
||||
(defun add-to-sprite-aux-list ((system sparticle-system) (sprite-info sparticle-cpuinfo) (sprite-vec sprite-vec-data-3d) (arg3 uint))
|
||||
(let ((s2-0 (-> sprite-info sp-func)))
|
||||
(if (and (nonzero? s2-0) (not (paused?)))
|
||||
(s2-0 system sprite-info sprite-vec arg3)
|
||||
)
|
||||
)
|
||||
(let ((aux-list *sprite-aux-list*))
|
||||
(when (< (-> aux-list entry) (-> aux-list num-entries))
|
||||
(cond
|
||||
((logtest? (-> sprite-info flags) (sp-cpuinfo-flag distort))
|
||||
(set! (-> aux-list data (-> aux-list entry) aux-type) (sprite-aux-type distort))
|
||||
(set! (-> aux-list data (-> aux-list entry) vec-data) (-> sprite-info sprite))
|
||||
(+! (-> aux-list entry) 1)
|
||||
(set! (-> sprite-vec r-g-b-a w) 0.0)
|
||||
)
|
||||
((logtest? (-> sprite-info flags) (sp-cpuinfo-flag glow))
|
||||
(let ((a0-18 (-> system cpuinfo-table arg3))
|
||||
(a1-11 (-> aux-list data (-> aux-list entry)))
|
||||
)
|
||||
(set! (-> a1-11 aux-type) (sprite-aux-type glow))
|
||||
(set! (-> a1-11 vec-data) (-> sprite-info sprite))
|
||||
(set! (-> a1-11 gif-data) (-> sprite-info adgif))
|
||||
(set! (-> a1-11 aux-data) a0-18)
|
||||
)
|
||||
(+! (-> aux-list entry) 1)
|
||||
(set! (-> sprite-vec qx-qy-qz-sy y) (the-as float #xffffffff))
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
0
|
||||
(none)
|
||||
)
|
||||
|
||||
;; definition of type sprite-frame-data
|
||||
(deftype sprite-frame-data (structure)
|
||||
((cdata vector 16 :inline :offset 0)
|
||||
(xy-array vector 8 :inline :offset 0)
|
||||
(st-array vector 4 :inline :offset 128)
|
||||
(xyz-array vector 4 :inline :offset 192)
|
||||
(hmge-scale vector :inline :offset 256)
|
||||
(consts vector :inline :offset 272)
|
||||
(pfog0 float :offset 272)
|
||||
(deg-to-rad float :offset 276)
|
||||
(min-scale float :offset 280)
|
||||
(inv-area float :offset 284)
|
||||
(adgif-giftag gs-gif-tag :inline :offset-assert 288)
|
||||
(sprite-2d-giftag gs-gif-tag :inline :offset-assert 304)
|
||||
(sprite-2d-giftag-2 gs-gif-tag :inline :offset-assert 320)
|
||||
(sincos-01 vector :inline :offset-assert 336)
|
||||
(sincos-23 vector :inline :offset-assert 352)
|
||||
(sincos-45 vector :inline :offset-assert 368)
|
||||
(sincos-67 vector :inline :offset-assert 384)
|
||||
(sincos-89 vector :inline :offset-assert 400)
|
||||
(basis-x vector :inline :offset-assert 416)
|
||||
(basis-y vector :inline :offset-assert 432)
|
||||
(sprite-3d-giftag gs-gif-tag :inline :offset-assert 448)
|
||||
(sprite-3d-giftag-2 gs-gif-tag :inline :offset-assert 464)
|
||||
(screen-shader adgif-shader :inline :offset-assert 480)
|
||||
(inv-hmge-scale vector :inline :offset 576)
|
||||
(stq-offset vector :inline :offset-assert 592)
|
||||
(stq-scale vector :inline :offset-assert 608)
|
||||
(rgba-plain qword :inline :offset-assert 624)
|
||||
(warp-giftag gs-gif-tag :inline :offset-assert 640)
|
||||
(fog-clamp vector :inline :offset-assert 656)
|
||||
(fog-min float :offset 656)
|
||||
(fog-max float :offset 660)
|
||||
(max-scale float :offset 664)
|
||||
)
|
||||
:method-count-assert 9
|
||||
:size-assert #x2a0
|
||||
:flag-assert #x9000002a0
|
||||
)
|
||||
|
||||
;; definition for method 3 of type sprite-frame-data
|
||||
(defmethod inspect sprite-frame-data ((obj sprite-frame-data))
|
||||
(when (not obj)
|
||||
(set! obj obj)
|
||||
(goto cfg-4)
|
||||
)
|
||||
(format #t "[~8x] ~A~%" obj 'sprite-frame-data)
|
||||
(format #t "~1Tdata[42] @ #x~X~%" (-> obj cdata))
|
||||
(format #t "~1Tcdata[16] @ #x~X~%" (-> obj cdata))
|
||||
(format #t "~1Tfdata[26] @ #x~X~%" (-> obj hmge-scale))
|
||||
(format #t "~1Txy-array[8] @ #x~X~%" (-> obj cdata))
|
||||
(format #t "~1Tst-array[4] @ #x~X~%" (-> obj st-array))
|
||||
(format #t "~1Txyz-array[4] @ #x~X~%" (-> obj xyz-array))
|
||||
(format #t "~1Thmge-scale: #<vector @ #x~X>~%" (-> obj hmge-scale))
|
||||
(format #t "~1Tconsts: #<vector @ #x~X>~%" (&-> obj pfog0))
|
||||
(format #t "~1Tpfog0: ~f~%" (-> obj pfog0))
|
||||
(format #t "~1Tdeg-to-rad: ~f~%" (-> obj deg-to-rad))
|
||||
(format #t "~1Tmin-scale: ~f~%" (-> obj min-scale))
|
||||
(format #t "~1Tinv-area: ~f~%" (-> obj inv-area))
|
||||
(format #t "~1Tadgif-giftag: #<qword @ #x~X>~%" (-> obj adgif-giftag))
|
||||
(format #t "~1Tsprite-2d-giftag: #<qword @ #x~X>~%" (-> obj sprite-2d-giftag))
|
||||
(format #t "~1Tsprite-2d-giftag-2: #<qword @ #x~X>~%" (-> obj sprite-2d-giftag-2))
|
||||
(format #t "~1Tsincos-01: #<vector @ #x~X>~%" (-> obj sincos-01))
|
||||
(format #t "~1Tsincos-23: #<vector @ #x~X>~%" (-> obj sincos-23))
|
||||
(format #t "~1Tsincos-45: #<vector @ #x~X>~%" (-> obj sincos-45))
|
||||
(format #t "~1Tsincos-67: #<vector @ #x~X>~%" (-> obj sincos-67))
|
||||
(format #t "~1Tsincos-89: #<vector @ #x~X>~%" (-> obj sincos-89))
|
||||
(format #t "~1Tbasis-x: #<vector @ #x~X>~%" (-> obj basis-x))
|
||||
(format #t "~1Tbasis-y: #<vector @ #x~X>~%" (-> obj basis-y))
|
||||
(format #t "~1Tsprite-3d-giftag: #<qword @ #x~X>~%" (-> obj sprite-3d-giftag))
|
||||
(format #t "~1Tsprite-3d-giftag-2: #<qword @ #x~X>~%" (-> obj sprite-3d-giftag-2))
|
||||
(format #t "~1Tscreen-shader: #<adgif-shader @ #x~X>~%" (-> obj screen-shader))
|
||||
(format #t "~1Tinv-hmge-scale: #<vector @ #x~X>~%" (-> obj inv-hmge-scale))
|
||||
(format #t "~1Tstq-offset: #<vector @ #x~X>~%" (-> obj stq-offset))
|
||||
(format #t "~1Tstq-scale: #<vector @ #x~X>~%" (-> obj stq-scale))
|
||||
(format #t "~1Trgba-plain: #<qword @ #x~X>~%" (-> obj rgba-plain))
|
||||
(format #t "~1Twarp-giftag: #<qword @ #x~X>~%" (-> obj warp-giftag))
|
||||
(format #t "~1Tfog-clamp: #<vector @ #x~X>~%" (-> obj fog-clamp))
|
||||
(format #t "~1Tfog-min: ~f~%" (-> obj fog-clamp x))
|
||||
(format #t "~1Tfog-max: ~f~%" (-> obj fog-clamp y))
|
||||
(format #t "~1Tmax-scale: ~f~%" (-> obj max-scale))
|
||||
(label cfg-4)
|
||||
obj
|
||||
)
|
||||
|
||||
;; definition for function sprite-setup-frame-data
|
||||
;; INFO: Used lq/sq
|
||||
;; INFO: Return type mismatch float vs none.
|
||||
(defun sprite-setup-frame-data ((data sprite-frame-data) (tbp-offset uint))
|
||||
(set! (-> data hmge-scale quad) (-> *math-camera* hmge-scale quad))
|
||||
(set! (-> data inv-hmge-scale quad) (-> *math-camera* inv-hmge-scale quad))
|
||||
(set! (-> data pfog0) (-> *math-camera* pfog0))
|
||||
(set! (-> data deg-to-rad) 0.000095873795)
|
||||
(set! (-> data adgif-giftag tag) (new 'static 'gif-tag64 :nloop #x1 :nreg #x5))
|
||||
(set! (-> data adgif-giftag regs)
|
||||
(new 'static 'gif-tag-regs
|
||||
:regs0 (gif-reg-id a+d)
|
||||
:regs1 (gif-reg-id a+d)
|
||||
:regs2 (gif-reg-id a+d)
|
||||
:regs3 (gif-reg-id a+d)
|
||||
:regs4 (gif-reg-id a+d)
|
||||
)
|
||||
)
|
||||
(set! (-> data sprite-2d-giftag tag)
|
||||
(new 'static 'gif-tag64
|
||||
:nloop #x1
|
||||
:eop #x1
|
||||
:pre #x1
|
||||
:prim (new 'static 'gs-prim :prim (gs-prim-type tri-fan) :tme #x1 :fge #x1 :abe #x1)
|
||||
:nreg #x9
|
||||
)
|
||||
)
|
||||
(set! (-> data sprite-2d-giftag regs)
|
||||
(new 'static 'gif-tag-regs
|
||||
:regs0 (gif-reg-id rgbaq)
|
||||
:regs1 (gif-reg-id st)
|
||||
:regs2 (gif-reg-id xyzf2)
|
||||
:regs3 (gif-reg-id st)
|
||||
:regs4 (gif-reg-id xyzf2)
|
||||
:regs5 (gif-reg-id st)
|
||||
:regs6 (gif-reg-id xyzf2)
|
||||
:regs7 (gif-reg-id st)
|
||||
:regs8 (gif-reg-id xyzf2)
|
||||
)
|
||||
)
|
||||
(set! (-> data sprite-2d-giftag-2 tag)
|
||||
(new 'static 'gif-tag64
|
||||
:nloop #x1
|
||||
:eop #x1
|
||||
:pre #x1
|
||||
:prim (new 'static 'gs-prim :prim (gs-prim-type tri-fan) :tme #x1 :abe #x1)
|
||||
:nreg #x9
|
||||
)
|
||||
)
|
||||
(set! (-> data sprite-2d-giftag-2 regs)
|
||||
(new 'static 'gif-tag-regs
|
||||
:regs0 (gif-reg-id rgbaq)
|
||||
:regs1 (gif-reg-id st)
|
||||
:regs2 (gif-reg-id xyzf2)
|
||||
:regs3 (gif-reg-id st)
|
||||
:regs4 (gif-reg-id xyzf2)
|
||||
:regs5 (gif-reg-id st)
|
||||
:regs6 (gif-reg-id xyzf2)
|
||||
:regs7 (gif-reg-id st)
|
||||
:regs8 (gif-reg-id xyzf2)
|
||||
)
|
||||
)
|
||||
(set! (-> data sprite-3d-giftag tag)
|
||||
(new 'static 'gif-tag64
|
||||
:nloop #x4
|
||||
:eop #x1
|
||||
:pre #x1
|
||||
:prim (new 'static 'gs-prim :prim (gs-prim-type tri-fan) :tme #x1 :fge #x1 :abe #x1)
|
||||
:nreg #x3
|
||||
)
|
||||
)
|
||||
(set! (-> data sprite-3d-giftag regs)
|
||||
(new 'static 'gif-tag-regs :regs0 (gif-reg-id st) :regs1 (gif-reg-id rgbaq) :regs2 (gif-reg-id xyzf2))
|
||||
)
|
||||
(set! (-> data sprite-3d-giftag-2 tag)
|
||||
(new 'static 'gif-tag64
|
||||
:nloop #x4
|
||||
:eop #x1
|
||||
:pre #x1
|
||||
:prim (new 'static 'gs-prim :prim (gs-prim-type tri-fan) :tme #x1 :abe #x1)
|
||||
:nreg #x3
|
||||
)
|
||||
)
|
||||
(set! (-> data sprite-3d-giftag-2 regs)
|
||||
(new 'static 'gif-tag-regs :regs0 (gif-reg-id st) :regs1 (gif-reg-id rgbaq) :regs2 (gif-reg-id xyzf2))
|
||||
)
|
||||
(set! (-> data warp-giftag tag) (new 'static 'gif-tag64
|
||||
:nloop #x1
|
||||
:eop #x1
|
||||
:pre #x1
|
||||
:prim (new 'static 'gs-prim :prim (gs-prim-type tri) :tme #x1 :abe #x1)
|
||||
:nreg #xc
|
||||
)
|
||||
)
|
||||
(set! (-> data warp-giftag regs) (new 'static 'gif-tag-regs
|
||||
:regs0 (gif-reg-id st)
|
||||
:regs1 (gif-reg-id rgbaq)
|
||||
:regs2 (gif-reg-id xyzf2)
|
||||
:regs3 (gif-reg-id st)
|
||||
:regs4 (gif-reg-id rgbaq)
|
||||
:regs5 (gif-reg-id xyzf2)
|
||||
:regs6 (gif-reg-id st)
|
||||
:regs7 (gif-reg-id rgbaq)
|
||||
:regs8 (gif-reg-id xyzf2)
|
||||
)
|
||||
)
|
||||
(set! (-> data screen-shader prims 1) (gs-reg64 tex0-1))
|
||||
(set! (-> data screen-shader tex0) (new 'static 'gs-tex0 :tbw #x8 :tw #xa :th #x8 :tbp0 (* tbp-offset 32)))
|
||||
(set! (-> data screen-shader prims 3) (gs-reg64 tex1-1))
|
||||
(set! (-> data screen-shader tex1) (new 'static 'gs-tex1 :mmag #x1 :mmin #x1))
|
||||
(set! (-> data screen-shader prims 5) (gs-reg64 miptbp1-1))
|
||||
(set! (-> data screen-shader miptbp1) (new 'static 'gs-miptbp))
|
||||
(set! (-> data screen-shader clamp-reg) (gs-reg64 clamp-1))
|
||||
(set! (-> data screen-shader clamp) (new 'static 'gs-clamp
|
||||
:wms (gs-tex-wrap-mode region-clamp)
|
||||
:wmt (gs-tex-wrap-mode region-clamp)
|
||||
:maxu #x27f
|
||||
:maxv #xef
|
||||
)
|
||||
)
|
||||
(set! (-> data screen-shader prims 9) (gs-reg64 alpha-1))
|
||||
(set! (-> data screen-shader alpha) (new 'static 'gs-alpha :b #x1 :d #x1))
|
||||
(set! (-> data sincos-01 z) 0.999998)
|
||||
(set! (-> data sincos-23 z) -0.16666014)
|
||||
(set! (-> data sincos-45 z) 0.008326521)
|
||||
(set! (-> data sincos-67 z) -0.0001956241)
|
||||
(set! (-> data sincos-89 z) 0.0000023042373)
|
||||
(set! (-> data sincos-01 w) 1.0)
|
||||
(set! (-> data sincos-23 w) -0.49998003)
|
||||
(set! (-> data sincos-45 w) 0.041620404)
|
||||
(set! (-> data sincos-67 w) -0.0013636408)
|
||||
(set! (-> data sincos-89 w) 0.000020170546)
|
||||
(set! (-> data basis-x quad) (the-as uint128 0))
|
||||
(set! (-> data basis-x x) (- (-> *math-camera* perspective data 0)))
|
||||
(set! (-> data basis-y quad) (the-as uint128 0))
|
||||
(set! (-> data basis-y y) (- (-> *math-camera* perspective data 5)))
|
||||
(set! (-> data min-scale) (sqrtf (* (/ 1.0 (-> data basis-x x)) (/ 1.0 (-> data basis-y y)))))
|
||||
(set! (-> data inv-area) (/ 1.0 (* (-> data min-scale) (-> data min-scale))))
|
||||
(set-vector! (-> data cdata 0) -0.5 -0.5 0.0 0.0)
|
||||
(set-vector! (-> data cdata 1) 0.5 -0.5 0.0 0.0)
|
||||
(set-vector! (-> data cdata 2) 0.5 0.5 0.0 0.0)
|
||||
(set-vector! (-> data cdata 3) -0.5 0.5 0.0 0.0)
|
||||
(set-vector! (-> data cdata 4) 0.0 -0.5 0.0 0.0)
|
||||
(set-vector! (-> data cdata 5) 1.0 -0.5 0.0 0.0)
|
||||
(set-vector! (-> data cdata 6) 1.0 0.5 0.0 0.0)
|
||||
(set-vector! (-> data cdata 7) 0.0 0.5 0.0 0.0)
|
||||
(set-vector! (-> data st-array 0) 0.0 0.0 1.0 0.0)
|
||||
(set-vector! (-> data cdata 9) 1.0 0.0 1.0 0.0)
|
||||
(set-vector! (-> data cdata 10) 1.0 1.0 1.0 0.0)
|
||||
(set-vector! (-> data cdata 11) 0.0 1.0 1.0 0.0)
|
||||
(set-vector! (-> data xyz-array 0) -0.5 0.0 -0.5 0.0)
|
||||
(set-vector! (-> data cdata 13) 0.5 0.0 -0.5 0.0)
|
||||
(set-vector! (-> data cdata 14) 0.5 0.0 0.5 0.0)
|
||||
(set-vector! (-> data cdata 15) -0.5 0.0 0.5 0.0)
|
||||
(set-vector! (-> data stq-offset) -1792.0 -1840.0 0.0 0.0)
|
||||
(set-vector! (-> data stq-scale) 0.0009765625 0.00390625 1.0 1.0)
|
||||
(set! (-> data rgba-plain vector4w x) 128)
|
||||
(set! (-> data rgba-plain vector4w y) 128)
|
||||
(set! (-> data rgba-plain vector4w z) 128)
|
||||
(set! (-> data rgba-plain vector4w w) 64)
|
||||
(set! (-> data fog-clamp x) (-> *math-camera* fog-min))
|
||||
(set! (-> data fog-clamp y) (-> *math-camera* fog-max))
|
||||
(set! (-> data max-scale) 2048.0)
|
||||
(none)
|
||||
)
|
||||
|
||||
;; definition for symbol sprite-vu1-block, type vu-function
|
||||
(define sprite-vu1-block (new 'static 'vu-function :length #x35f :qlength #x1b0))
|
||||
|
||||
;; definition for method 0 of type sprite-array-2d
|
||||
(defmethod new sprite-array-2d ((allocation symbol) (type-to-make type) (group-0-size int) (group-1-size int))
|
||||
(let* ((sprite-count (+ group-0-size group-1-size))
|
||||
(vec-data-size (* 3 sprite-count))
|
||||
(adgif-data-size (* 5 sprite-count))
|
||||
(v0-0 (object-new
|
||||
allocation
|
||||
type-to-make
|
||||
(the-as int (+ (-> type-to-make size) (* (+ adgif-data-size -1 vec-data-size) 16)))
|
||||
)
|
||||
)
|
||||
)
|
||||
(set! (-> v0-0 num-sprites 0) group-0-size)
|
||||
(set! (-> v0-0 num-sprites 1) group-1-size)
|
||||
(set! (-> v0-0 num-valid 0) 0)
|
||||
(set! (-> v0-0 num-valid 1) 0)
|
||||
(set! (-> v0-0 vec-data) (-> v0-0 data))
|
||||
(set! (-> v0-0 adgif-data) (the-as (inline-array adgif-shader) (&-> v0-0 data vec-data-size)))
|
||||
v0-0
|
||||
)
|
||||
)
|
||||
|
||||
;; definition for method 0 of type sprite-array-3d
|
||||
(defmethod new sprite-array-3d ((allocation symbol) (type-to-make type) (group-0-size int) (group-1-size int))
|
||||
(let* ((sprite-count (+ group-0-size group-1-size))
|
||||
(vec-data-size (* 3 sprite-count))
|
||||
(adgif-data-size (* 5 sprite-count))
|
||||
(v0-0 (object-new
|
||||
allocation
|
||||
type-to-make
|
||||
(the-as int (+ (-> type-to-make size) (* (+ adgif-data-size -1 vec-data-size) 16)))
|
||||
)
|
||||
)
|
||||
)
|
||||
(set! (-> v0-0 num-sprites 0) group-0-size)
|
||||
(set! (-> v0-0 num-sprites 1) group-1-size)
|
||||
(set! (-> v0-0 num-valid 0) 0)
|
||||
(set! (-> v0-0 num-valid 1) 0)
|
||||
(set! (-> v0-0 vec-data) (-> v0-0 data))
|
||||
(set! (-> v0-0 adgif-data) (the-as (inline-array adgif-shader) (&-> v0-0 data vec-data-size)))
|
||||
v0-0
|
||||
)
|
||||
)
|
||||
|
||||
;; definition for function sprite-set-3d-quaternion!
|
||||
(defun sprite-set-3d-quaternion! ((sprite sprite-vec-data-3d) (quat quaternion))
|
||||
(local-vars (v1-0 float) (v1-1 float))
|
||||
(rlet ((vf0 :class vf)
|
||||
(vf1 :class vf)
|
||||
(vf2 :class vf)
|
||||
)
|
||||
(init-vf0-vector)
|
||||
(cond
|
||||
((< (-> quat w) 0.0)
|
||||
(.lvf vf1 (&-> sprite qx-qy-qz-sy quad))
|
||||
(.lvf vf2 (&-> quat vec quad))
|
||||
(.sub.vf vf1 vf0 vf2 :mask #b111)
|
||||
(.svf (&-> sprite qx-qy-qz-sy quad) vf1)
|
||||
(.mov v1-0 vf1)
|
||||
)
|
||||
(else
|
||||
(.lvf vf1 (&-> sprite qx-qy-qz-sy quad))
|
||||
(.lvf vf2 (&-> quat vec quad))
|
||||
(.add.vf vf1 vf0 vf2 :mask #b111)
|
||||
(.svf (&-> sprite qx-qy-qz-sy quad) vf1)
|
||||
(.mov v1-1 vf1)
|
||||
)
|
||||
)
|
||||
quat
|
||||
)
|
||||
)
|
||||
|
||||
;; definition for function sprite-get-3d-quaternion!
|
||||
(defun sprite-get-3d-quaternion! ((out quaternion) (sprite sprite-vec-data-3d))
|
||||
(let ((f0-0 (-> sprite qx-qy-qz-sy x))
|
||||
(f1-0 (-> sprite qx-qy-qz-sy y))
|
||||
(f2-0 (-> sprite qx-qy-qz-sy z))
|
||||
)
|
||||
(set! (-> out x) f0-0)
|
||||
(set! (-> out y) f1-0)
|
||||
(set! (-> out z) f2-0)
|
||||
(set! (-> out w) (sqrtf (- (- (- 1.0 (* f2-0 f2-0)) (* f1-0 f1-0)) (* f0-0 f0-0))))
|
||||
)
|
||||
out
|
||||
)
|
||||
|
||||
;; definition for function sprite-add-matrix-data
|
||||
;; INFO: Used lq/sq
|
||||
;; INFO: Return type mismatch int vs none.
|
||||
(defun sprite-add-matrix-data ((dma-buff dma-buffer) (matrix-mode uint))
|
||||
(let ((count 900))
|
||||
(cond
|
||||
((zero? matrix-mode)
|
||||
(let* ((a1-1 dma-buff)
|
||||
(pkt1 (the-as dma-packet (-> a1-1 base)))
|
||||
)
|
||||
(set! (-> pkt1 dma) (new 'static 'dma-tag :qwc #x5 :id (dma-tag-id cnt)))
|
||||
(set! (-> pkt1 vif0) (new 'static 'vif-tag :imm #x404 :cmd (vif-cmd stcycl)))
|
||||
(set! (-> pkt1 vif1) (new 'static 'vif-tag :num #x5 :cmd (vif-cmd unpack-v4-32) :imm (shr (shl count 54) 54)))
|
||||
(set! (-> a1-1 base) (&+ (the-as pointer pkt1) 16))
|
||||
)
|
||||
(let* ((mtx (the-as matrix (-> dma-buff base)))
|
||||
(t1-0 (-> *math-camera* camera-temp))
|
||||
(a2-4 (-> t1-0 vector 0 quad))
|
||||
(a3-4 (-> t1-0 vector 1 quad))
|
||||
(t0-4 (-> t1-0 vector 2 quad))
|
||||
(t1-1 (-> t1-0 trans quad))
|
||||
)
|
||||
(set! (-> mtx vector 0 quad) a2-4)
|
||||
(set! (-> mtx vector 1 quad) a3-4)
|
||||
(set! (-> mtx vector 2 quad) t0-4)
|
||||
(set! (-> mtx trans quad) t1-1)
|
||||
)
|
||||
(&+! (-> dma-buff base) 64)
|
||||
(let ((v1-1 (+ count 4)))
|
||||
(set! (-> (the-as (pointer uint128) (-> dma-buff base))) (-> *math-camera* hvdf-off quad))
|
||||
(&+! (-> dma-buff base) 16)
|
||||
(+ v1-1 1)
|
||||
)
|
||||
)
|
||||
((= matrix-mode 1)
|
||||
(let* ((a1-10 dma-buff)
|
||||
(pkt2 (the-as dma-packet (-> a1-10 base)))
|
||||
)
|
||||
(set! (-> pkt2 dma) (new 'static 'dma-tag :qwc #x50 :id (dma-tag-id cnt)))
|
||||
(set! (-> pkt2 vif0) (new 'static 'vif-tag :imm #x404 :cmd (vif-cmd stcycl)))
|
||||
(set! (-> pkt2 vif1)
|
||||
(new 'static 'vif-tag :num #x50 :cmd (vif-cmd unpack-v4-32) :imm (shr (shl count 54) 54))
|
||||
)
|
||||
(set! (-> a1-10 base) (&+ (the-as pointer pkt2) 16))
|
||||
)
|
||||
(let ((mtx2 (the-as matrix (-> dma-buff base)))
|
||||
(f1-0 (-> *math-camera* perspective data 0))
|
||||
(f2-0 (-> *math-camera* perspective data 5))
|
||||
(f0-1 (* -1.9996 (-> *math-camera* perspective data 0)))
|
||||
)
|
||||
(set-vector! (the-as vector (&+ (the-as pointer mtx2) 0)) f0-1 0.0 0.0 0.0)
|
||||
(set-vector! (the-as vector (&+ (the-as pointer mtx2) 16)) 0.0 (- (* (/ f2-0 f1-0) f0-1)) 0.0 0.0)
|
||||
(set-vector! (the-as vector (&+ (the-as pointer mtx2) 32)) 0.0 0.0 (- f0-1) 0.0)
|
||||
(set-vector!
|
||||
(the-as vector (&+ (the-as pointer mtx2) 48))
|
||||
0.0
|
||||
0.0
|
||||
(* 500000000.0 f0-1)
|
||||
(* 60.0 f0-1 (-> *math-camera* pfog0))
|
||||
)
|
||||
)
|
||||
(&+! (-> dma-buff base) 64)
|
||||
(let ((v1-2 (+ count 4)))
|
||||
(let ((a1-16 (the-as vector (-> dma-buff base))))
|
||||
(set! (-> a1-16 quad) (-> *math-camera* hvdf-off quad))
|
||||
(set! (-> a1-16 x) 2048.0)
|
||||
(set! (-> a1-16 y) 2048.0)
|
||||
(set! (-> a1-16 z) (-> *math-camera* hvdf-off z))
|
||||
)
|
||||
(&+! (-> dma-buff base) 16)
|
||||
(let ((v1-3 (+ v1-2 1)))
|
||||
(dotimes (hvdf-idx 75)
|
||||
(set! (-> (the-as (pointer uint128) (-> dma-buff base))) (-> *sprite-hvdf-data* data (+ hvdf-idx 1) quad))
|
||||
(&+! (-> dma-buff base) 16)
|
||||
(+! v1-3 1)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
0
|
||||
(none)
|
||||
)
|
||||
|
||||
;; definition for function sprite-add-frame-data
|
||||
;; INFO: Return type mismatch pointer vs none.
|
||||
(defun sprite-add-frame-data ((dma-buff dma-buffer) (tbp-offset uint))
|
||||
(let ((s5-0 42))
|
||||
(let* ((v1-0 dma-buff)
|
||||
(pkt (the-as dma-packet (-> v1-0 base)))
|
||||
)
|
||||
(set! (-> pkt dma) (new 'static 'dma-tag :id (dma-tag-id cnt) :qwc s5-0))
|
||||
(set! (-> pkt vif0) (new 'static 'vif-tag :imm #x404 :cmd (vif-cmd stcycl)))
|
||||
(set! (-> pkt vif1) (new 'static 'vif-tag :imm #x3d4 :cmd (vif-cmd unpack-v4-32) :num s5-0))
|
||||
(set! (-> v1-0 base) (&+ (the-as pointer pkt) 16))
|
||||
)
|
||||
(sprite-setup-frame-data (the-as sprite-frame-data (-> dma-buff base)) tbp-offset)
|
||||
(&+! (-> dma-buff base) (* s5-0 16))
|
||||
)
|
||||
(none)
|
||||
)
|
||||
|
||||
;; definition for function sprite-add-2d-chunk
|
||||
;; INFO: Return type mismatch pointer vs none.
|
||||
(defun sprite-add-2d-chunk ((sprites sprite-array-2d) (start-sprite-idx int) (num-sprites int) (dma-buff dma-buffer) (mscal-addr int))
|
||||
(let ((qwc-pkt1 1))
|
||||
(let* ((v1-0 dma-buff)
|
||||
(pkt1 (the-as dma-packet (-> v1-0 base)))
|
||||
)
|
||||
(set! (-> pkt1 dma) (new 'static 'dma-tag :id (dma-tag-id cnt) :qwc qwc-pkt1))
|
||||
(set! (-> pkt1 vif0) (new 'static 'vif-tag :imm #x404 :cmd (vif-cmd stcycl)))
|
||||
(set! (-> pkt1 vif1) (new 'static 'vif-tag :imm #x8000 :cmd (vif-cmd unpack-v4-32) :num qwc-pkt1))
|
||||
(set! (-> v1-0 base) (&+ (the-as pointer pkt1) 16))
|
||||
)
|
||||
(sprite-setup-header (the-as sprite-header (-> dma-buff base)) num-sprites)
|
||||
(&+! (-> dma-buff base) (* qwc-pkt1 16))
|
||||
)
|
||||
(let* ((qwc-pkt2 (* 3 num-sprites))
|
||||
(v1-4 dma-buff)
|
||||
(pkt2 (the-as dma-packet (-> v1-4 base)))
|
||||
)
|
||||
(set! (-> pkt2 dma) (new 'static 'dma-tag
|
||||
:id (dma-tag-id ref)
|
||||
:addr (the-as int (&+ (-> sprites vec-data) (* 48 start-sprite-idx)))
|
||||
:qwc qwc-pkt2
|
||||
)
|
||||
)
|
||||
(set! (-> pkt2 vif0) (new 'static 'vif-tag))
|
||||
(set! (-> pkt2 vif1) (new 'static 'vif-tag :imm #x8001 :cmd (vif-cmd unpack-v4-32) :num qwc-pkt2))
|
||||
(set! (-> v1-4 base) (&+ (the-as pointer pkt2) 16))
|
||||
)
|
||||
(let* ((qwc-pkt3 (* 5 num-sprites))
|
||||
(v1-6 dma-buff)
|
||||
(pkt3 (the-as dma-packet (-> v1-6 base)))
|
||||
)
|
||||
(set! (-> pkt3 dma) (new 'static 'dma-tag
|
||||
:id (dma-tag-id ref)
|
||||
:addr (+ (the-as int (-> sprites adgif-data)) (* 80 start-sprite-idx))
|
||||
:qwc qwc-pkt3
|
||||
)
|
||||
)
|
||||
(set! (-> pkt3 vif0) (new 'static 'vif-tag))
|
||||
(set! (-> pkt3 vif1) (new 'static 'vif-tag :imm #x8091 :cmd (vif-cmd unpack-v4-32) :num qwc-pkt3))
|
||||
(set! (-> v1-6 base) (&+ (the-as pointer pkt3) 16))
|
||||
)
|
||||
(let ((pkt4 (the-as dma-packet (-> dma-buff base))))
|
||||
(set! (-> pkt4 dma) (new 'static 'dma-tag :id (dma-tag-id cnt)))
|
||||
(set! (-> pkt4 vif0) (new 'static 'vif-tag))
|
||||
(set! (-> pkt4 vif1) (new 'static 'vif-tag :cmd (vif-cmd mscal) :msk #x1 :imm mscal-addr))
|
||||
(set! (-> dma-buff base) (&+ (the-as pointer pkt4) 16))
|
||||
)
|
||||
(none)
|
||||
)
|
||||
|
||||
;; definition for function sprite-add-2d-all
|
||||
(defun sprite-add-2d-all ((sprites sprite-array-2d) (dma-buff dma-buffer) (group-idx int))
|
||||
(when (> (-> sprites num-valid group-idx) 0)
|
||||
(let ((current-sprite-idx 0)
|
||||
(mscal-addr 3)
|
||||
)
|
||||
(when (= group-idx 1)
|
||||
(set! current-sprite-idx (-> sprites num-sprites 0))
|
||||
(set! mscal-addr 115)
|
||||
)
|
||||
(let ((remaining-sprites (-> sprites num-valid group-idx)))
|
||||
(while (< 48 remaining-sprites)
|
||||
(sprite-add-2d-chunk sprites current-sprite-idx 48 dma-buff mscal-addr)
|
||||
(+! current-sprite-idx 48)
|
||||
(+! remaining-sprites -48)
|
||||
)
|
||||
(sprite-add-2d-chunk sprites current-sprite-idx remaining-sprites dma-buff mscal-addr)
|
||||
)
|
||||
)
|
||||
)
|
||||
(none)
|
||||
)
|
||||
|
||||
;; definition for function sprite-add-3d-chunk
|
||||
;; INFO: Return type mismatch pointer vs none.
|
||||
(defun sprite-add-3d-chunk ((sprites sprite-array-3d) (start-sprite-idx int) (num-sprites int) (dma-buff dma-buffer))
|
||||
(let ((qwc-pkt1 1))
|
||||
(let* ((v1-0 dma-buff)
|
||||
(pkt1 (the-as dma-packet (-> v1-0 base)))
|
||||
)
|
||||
(set! (-> pkt1 dma) (new 'static 'dma-tag :id (dma-tag-id cnt) :qwc qwc-pkt1))
|
||||
(set! (-> pkt1 vif0) (new 'static 'vif-tag :imm #x404 :cmd (vif-cmd stcycl)))
|
||||
(set! (-> pkt1 vif1) (new 'static 'vif-tag :imm #x8000 :cmd (vif-cmd unpack-v4-32) :num qwc-pkt1))
|
||||
(set! (-> v1-0 base) (&+ (the-as pointer pkt1) 16))
|
||||
)
|
||||
(sprite-setup-header (the-as sprite-header (-> dma-buff base)) num-sprites)
|
||||
(&+! (-> dma-buff base) (* qwc-pkt1 16))
|
||||
)
|
||||
(let* ((qwc-pkt2 (* 3 num-sprites))
|
||||
(v1-4 dma-buff)
|
||||
(pkt2 (the-as dma-packet (-> v1-4 base)))
|
||||
)
|
||||
(set! (-> pkt2 dma) (new 'static 'dma-tag
|
||||
:id (dma-tag-id ref)
|
||||
:addr (the-as int (&+ (-> sprites vec-data) (* 48 start-sprite-idx)))
|
||||
:qwc qwc-pkt2
|
||||
)
|
||||
)
|
||||
(set! (-> pkt2 vif0) (new 'static 'vif-tag))
|
||||
(set! (-> pkt2 vif1) (new 'static 'vif-tag :imm #x8001 :cmd (vif-cmd unpack-v4-32) :num qwc-pkt2))
|
||||
(set! (-> v1-4 base) (&+ (the-as pointer pkt2) 16))
|
||||
)
|
||||
(let* ((qwc-pkt3 (* 5 num-sprites))
|
||||
(v1-6 dma-buff)
|
||||
(pkt3 (the-as dma-packet (-> v1-6 base)))
|
||||
)
|
||||
(set! (-> pkt3 dma) (new 'static 'dma-tag
|
||||
:id (dma-tag-id ref)
|
||||
:addr (the-as int (-> sprites adgif-data start-sprite-idx))
|
||||
:qwc qwc-pkt3
|
||||
)
|
||||
)
|
||||
(set! (-> pkt3 vif0) (new 'static 'vif-tag))
|
||||
(set! (-> pkt3 vif1) (new 'static 'vif-tag :imm #x8091 :cmd (vif-cmd unpack-v4-32) :num qwc-pkt3))
|
||||
(set! (-> v1-6 base) (&+ (the-as pointer pkt3) 16))
|
||||
)
|
||||
(let ((pkt4 (the-as dma-packet (-> dma-buff base))))
|
||||
(set! (-> pkt4 dma) (new 'static 'dma-tag :id (dma-tag-id cnt)))
|
||||
(set! (-> pkt4 vif0) (new 'static 'vif-tag))
|
||||
(set! (-> pkt4 vif1) (new 'static 'vif-tag :cmd (vif-cmd mscal) :msk #x1 :imm #xd9))
|
||||
(set! (-> dma-buff base) (&+ (the-as pointer pkt4) 16))
|
||||
)
|
||||
(none)
|
||||
)
|
||||
|
||||
;; definition for function sprite-add-3d-all
|
||||
(defun sprite-add-3d-all ((sprites sprite-array-3d) (dma-buff dma-buffer) (group-idx int))
|
||||
(when (> (-> sprites num-valid group-idx) 0)
|
||||
(let ((current-sprite-idx (if (zero? group-idx)
|
||||
0
|
||||
(-> sprites num-sprites 0)
|
||||
)
|
||||
)
|
||||
(remaining-sprites (-> sprites num-valid group-idx))
|
||||
)
|
||||
(while (< 48 remaining-sprites)
|
||||
(sprite-add-3d-chunk sprites current-sprite-idx 48 dma-buff)
|
||||
(+! current-sprite-idx 48)
|
||||
(+! remaining-sprites -48)
|
||||
)
|
||||
(sprite-add-3d-chunk sprites current-sprite-idx remaining-sprites dma-buff)
|
||||
)
|
||||
)
|
||||
(none)
|
||||
)
|
||||
|
||||
;; definition for function sprite-draw
|
||||
;; INFO: Return type mismatch int vs none.
|
||||
(defun sprite-draw ((disp display))
|
||||
(let ((dma-mem-begin (-> *display* frames (-> *display* on-screen) global-buf base)))
|
||||
(let* ((dma-buff (-> *display* frames (-> *display* on-screen) global-buf))
|
||||
(dma-bucket-begin (-> dma-buff base))
|
||||
)
|
||||
(when (or (zero? *screen-shot-work*) (= (-> *screen-shot-work* count) -1))
|
||||
(sprite-init-distorter dma-buff)
|
||||
(sprite-draw-distorters dma-buff)
|
||||
)
|
||||
(let* ((v1-17 dma-buff)
|
||||
(pkt1 (the-as dma-packet (-> v1-17 base)))
|
||||
)
|
||||
(set! (-> pkt1 dma) (new 'static 'dma-tag :qwc #x3 :id (dma-tag-id cnt)))
|
||||
(set! (-> pkt1 vif0) (new 'static 'vif-tag))
|
||||
(set! (-> pkt1 vif1) (new 'static 'vif-tag :imm #x3 :cmd (vif-cmd direct) :msk #x1))
|
||||
(set! (-> v1-17 base) (&+ (the-as pointer pkt1) 16))
|
||||
)
|
||||
(let* ((v1-18 dma-buff)
|
||||
(giftag (the-as gs-gif-tag (-> v1-18 base)))
|
||||
)
|
||||
(set! (-> giftag tag) (new 'static 'gif-tag64 :nloop #x1 :eop #x1 :nreg #x2))
|
||||
(set! (-> giftag regs)
|
||||
(new 'static 'gif-tag-regs
|
||||
:regs0 (gif-reg-id a+d)
|
||||
:regs1 (gif-reg-id a+d)
|
||||
:regs2 (gif-reg-id a+d)
|
||||
:regs3 (gif-reg-id a+d)
|
||||
:regs4 (gif-reg-id a+d)
|
||||
:regs5 (gif-reg-id a+d)
|
||||
:regs6 (gif-reg-id a+d)
|
||||
:regs7 (gif-reg-id a+d)
|
||||
:regs8 (gif-reg-id a+d)
|
||||
:regs9 (gif-reg-id a+d)
|
||||
:regs10 (gif-reg-id a+d)
|
||||
:regs11 (gif-reg-id a+d)
|
||||
:regs12 (gif-reg-id a+d)
|
||||
:regs13 (gif-reg-id a+d)
|
||||
:regs14 (gif-reg-id a+d)
|
||||
:regs15 (gif-reg-id a+d)
|
||||
)
|
||||
)
|
||||
(set! (-> v1-18 base) (the-as pointer (&+ giftag 16)))
|
||||
)
|
||||
(let* ((v1-19 dma-buff)
|
||||
(a0-10 (-> v1-19 base))
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-test) a0-10) 0)
|
||||
(new 'static 'gs-test
|
||||
:ate #x1
|
||||
:atst (gs-atest greater-equal)
|
||||
:aref #x26
|
||||
:afail #x1
|
||||
:zte #x1
|
||||
:ztst (gs-ztest greater-equal)
|
||||
)
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-reg64) a0-10) 1) (gs-reg64 test-1))
|
||||
(set! (-> (the-as (pointer gs-clamp) a0-10) 2)
|
||||
(new 'static 'gs-clamp :wms (gs-tex-wrap-mode clamp) :wmt (gs-tex-wrap-mode clamp))
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-reg64) a0-10) 3) (gs-reg64 clamp-1))
|
||||
(set! (-> v1-19 base) (&+ a0-10 32))
|
||||
)
|
||||
(dma-buffer-add-vu-function dma-buff sprite-vu1-block 1)
|
||||
(sprite-add-frame-data dma-buff (the-as uint 408))
|
||||
(let* ((v1-20 dma-buff)
|
||||
(pkt2 (the-as dma-packet (-> v1-20 base)))
|
||||
)
|
||||
(set! (-> pkt2 dma) (new 'static 'dma-tag :id (dma-tag-id cnt)))
|
||||
(set! (-> pkt2 vif0) (new 'static 'vif-tag :cmd (vif-cmd mscalf) :msk #x1 :imm #x0))
|
||||
(set! (-> pkt2 vif1) (new 'static 'vif-tag :cmd (vif-cmd flushe) :msk #x1))
|
||||
(set! (-> v1-20 base) (&+ (the-as pointer pkt2) 16))
|
||||
)
|
||||
(let* ((v1-21 dma-buff)
|
||||
(pkt3 (the-as dma-packet (-> v1-21 base)))
|
||||
)
|
||||
(set! (-> pkt3 dma) (new 'static 'dma-tag :id (dma-tag-id cnt)))
|
||||
(set! (-> pkt3 vif0) (new 'static 'vif-tag :cmd (vif-cmd base)))
|
||||
(set! (-> pkt3 vif1) (new 'static 'vif-tag :imm #x190 :cmd (vif-cmd offset)))
|
||||
(set! (-> v1-21 base) (&+ (the-as pointer pkt3) 16))
|
||||
)
|
||||
(sprite-add-matrix-data dma-buff (the-as uint 0))
|
||||
(sprite-add-3d-all *sprite-array-3d* dma-buff 0)
|
||||
(sprite-add-2d-all *sprite-array-2d* dma-buff 0)
|
||||
(let* ((v1-22 dma-buff)
|
||||
(pkt4 (the-as dma-packet (-> v1-22 base)))
|
||||
)
|
||||
(set! (-> pkt4 dma) (new 'static 'dma-tag :id (dma-tag-id cnt)))
|
||||
(set! (-> pkt4 vif0) (new 'static 'vif-tag))
|
||||
(set! (-> pkt4 vif1) (new 'static 'vif-tag :cmd (vif-cmd flushe) :msk #x1))
|
||||
(set! (-> v1-22 base) (&+ (the-as pointer pkt4) 16))
|
||||
)
|
||||
(sprite-add-matrix-data dma-buff (the-as uint 1))
|
||||
(sprite-add-2d-all *sprite-array-2d* dma-buff 1)
|
||||
(let* ((v1-23 dma-buff)
|
||||
(pkt5 (the-as dma-packet (-> v1-23 base)))
|
||||
)
|
||||
(set! (-> pkt5 dma) (new 'static 'dma-tag :id (dma-tag-id cnt)))
|
||||
(set! (-> pkt5 vif0) (new 'static 'vif-tag))
|
||||
(set! (-> pkt5 vif1) (new 'static 'vif-tag :cmd (vif-cmd flushe) :msk #x1))
|
||||
(set! (-> v1-23 base) (&+ (the-as pointer pkt5) 16))
|
||||
)
|
||||
(sprite-glow-init-engine dma-buff)
|
||||
(sprite-glow-draw dma-buff)
|
||||
(simple-sprite-system-method-10 *simple-sprite-system* dma-buff)
|
||||
(let* ((v1-26 dma-buff)
|
||||
(pkt6 (the-as dma-packet (-> v1-26 base)))
|
||||
)
|
||||
(set! (-> pkt6 dma) (new 'static 'dma-tag :id (dma-tag-id cnt)))
|
||||
(set! (-> pkt6 vif0) (new 'static 'vif-tag))
|
||||
(set! (-> pkt6 vif1) (new 'static 'vif-tag :cmd (vif-cmd flushe) :msk #x1))
|
||||
(set! (-> v1-26 base) (&+ (the-as pointer pkt6) 16))
|
||||
)
|
||||
(let ((a3-0 (-> dma-buff base)))
|
||||
(let ((pkt7 (the-as dma-packet (-> dma-buff base))))
|
||||
(set! (-> pkt7 dma) (new 'static 'dma-tag :id (dma-tag-id next)))
|
||||
(set! (-> pkt7 vif0) (new 'static 'vif-tag))
|
||||
(set! (-> pkt7 vif1) (new 'static 'vif-tag))
|
||||
(set! (-> dma-buff base) (&+ (the-as pointer pkt7) 16))
|
||||
)
|
||||
(dma-bucket-insert-tag
|
||||
(the-as (inline-array dma-bucket) (-> *display* frames (-> *display* on-screen) bucket-group))
|
||||
(bucket-id bucket-313)
|
||||
dma-bucket-begin
|
||||
(the-as (pointer dma-tag) a3-0)
|
||||
)
|
||||
)
|
||||
)
|
||||
(let ((mem-use *dma-mem-usage*))
|
||||
(when (nonzero? mem-use)
|
||||
(set! (-> mem-use length) (max 86 (-> mem-use length)))
|
||||
(set! (-> mem-use data 85 name) "sprite")
|
||||
(+! (-> mem-use data 85 count) 1)
|
||||
(+! (-> mem-use data 85 used)
|
||||
(&- (-> *display* frames (-> *display* on-screen) global-buf base) (the-as uint dma-mem-begin))
|
||||
)
|
||||
(set! (-> mem-use data 85 total) (-> mem-use data 85 used))
|
||||
)
|
||||
)
|
||||
)
|
||||
0
|
||||
(none)
|
||||
)
|
||||
|
||||
;; definition for function sprite-allocate-user-hvdf
|
||||
(defun sprite-allocate-user-hvdf ()
|
||||
(dotimes (v1-0 76)
|
||||
(when (zero? (-> *sprite-hvdf-control* alloc v1-0))
|
||||
(set! (-> *sprite-hvdf-control* alloc v1-0) 1)
|
||||
(return v1-0)
|
||||
)
|
||||
)
|
||||
0
|
||||
)
|
||||
|
||||
;; definition for function sprite-release-user-hvdf
|
||||
;; INFO: Return type mismatch int vs none.
|
||||
(defun sprite-release-user-hvdf ((idx int))
|
||||
(when (and (>= idx 1) (< idx 76))
|
||||
(set! (-> *sprite-hvdf-control* alloc idx) 0)
|
||||
0
|
||||
)
|
||||
0
|
||||
(none)
|
||||
)
|
||||
|
||||
;; definition for function sprite-get-user-hvdf
|
||||
;; INFO: Return type mismatch qword vs vector.
|
||||
(defun sprite-get-user-hvdf ((idx int))
|
||||
(the-as vector (-> *sprite-hvdf-data* data idx))
|
||||
)
|
||||
|
||||
;; failed to figure out what this is:
|
||||
(kmemopen global "sprite-tables")
|
||||
|
||||
;; definition for symbol *sprite-hvdf-data*, type sprite-hvdf-data
|
||||
(define *sprite-hvdf-data* (new 'global 'sprite-hvdf-data))
|
||||
|
||||
;; definition for symbol *sprite-hvdf-control*, type sprite-hvdf-control
|
||||
(define *sprite-hvdf-control* (new 'global 'sprite-hvdf-control))
|
||||
|
||||
;; failed to figure out what this is:
|
||||
(dotimes (v1-25 76)
|
||||
(set! (-> *sprite-hvdf-control* alloc v1-25) 0)
|
||||
)
|
||||
|
||||
;; failed to figure out what this is:
|
||||
(set! (-> *sprite-hvdf-control* alloc 0) 1)
|
||||
|
||||
;; definition for symbol *sprite-aux-list*, type sprite-aux-list
|
||||
(define *sprite-aux-list* (new 'global 'sprite-aux-list 256))
|
||||
|
||||
;; definition for symbol *sprite-array-2d*, type sprite-array-2d
|
||||
(define *sprite-array-2d* (new 'global 'sprite-array-2d 1920 128))
|
||||
|
||||
;; definition for symbol *sprite-array-3d*, type sprite-array-3d
|
||||
(define *sprite-array-3d* (new 'global 'sprite-array-3d 256 0))
|
||||
|
||||
;; failed to figure out what this is:
|
||||
(kmemclose)
|
||||
@@ -30,6 +30,27 @@ std::string get_expected(const std::string& name) {
|
||||
}
|
||||
} // namespace
|
||||
|
||||
TEST(VuDisasm, Sprite_Jak2) {
|
||||
auto data = get_test_data("jak2/sprite");
|
||||
VuDisassembler disasm(VuDisassembler::VuKind::VU1);
|
||||
auto prog = disasm.disassemble(data.data(), data.size() * 4, false);
|
||||
EXPECT_EQ(disasm.to_string(prog), get_expected("jak2/sprite"));
|
||||
}
|
||||
|
||||
TEST(VuDisasm, SpriteDistort_Jak2) {
|
||||
auto data = get_test_data("jak2/sprite-distort");
|
||||
VuDisassembler disasm(VuDisassembler::VuKind::VU1);
|
||||
auto prog = disasm.disassemble(data.data(), data.size() * 4, false);
|
||||
EXPECT_EQ(disasm.to_string(prog), get_expected("jak2/sprite-distort"));
|
||||
}
|
||||
|
||||
TEST(VuDisasm, SpriteGlow_Jak2) {
|
||||
auto data = get_test_data("jak2/sprite-glow");
|
||||
VuDisassembler disasm(VuDisassembler::VuKind::VU1);
|
||||
auto prog = disasm.disassemble(data.data(), data.size() * 4, false);
|
||||
EXPECT_EQ(disasm.to_string(prog), get_expected("jak2/sprite-glow"));
|
||||
}
|
||||
|
||||
TEST(VuDisasm, SpriteDistort) {
|
||||
auto data = get_test_data("sprite-distort");
|
||||
VuDisassembler disasm(VuDisassembler::VuKind::VU1);
|
||||
@@ -215,4 +236,4 @@ TEST(VuDisasm, MercToC) {
|
||||
auto prog = disasm.disassemble(data.data(), data.size() * 4, false);
|
||||
// fmt::print("{}\n", disasm.to_string_with_cpp(prog));
|
||||
// EXPECT_EQ(disasm.to_string_with_cpp(prog), get_expected("merc"));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,65 @@
|
||||
lq.xyzw vf01, 489(vi00) | nop
|
||||
lq.xyzw vf05, 490(vi00) | nop
|
||||
ilw.x vi01, 511(vi00) | nop
|
||||
iaddiu vi04, vi00, 0x200 | nop
|
||||
iaddi vi02, vi00, 0x0 | nop
|
||||
L1:
|
||||
ilw.w vi07, 1(vi04) | nop
|
||||
ior vi05, vi02, vi00 | nop
|
||||
ilw.x vi06, 477(vi07) | nop
|
||||
sqi.xyzw vf01, vi05 | nop
|
||||
iaddiu vi08, vi07, 0x4000 | nop
|
||||
iaddiu vi08, vi08, 0x4000 | nop
|
||||
isw.x vi08, -1(vi05) | nop
|
||||
lqi.xyzw vf02, vi04 | nop
|
||||
lqi.xyzw vf03, vi04 | nop
|
||||
lqi.xyzw vf04, vi04 | nop
|
||||
nop | ftoi4.xyzw vf14, vf02
|
||||
L2:
|
||||
lqi.xyzw vf06, vi06 | nop
|
||||
lqi.xyzw vf07, vi06 | nop
|
||||
lq.xyzw vf08, 0(vi06) | nop
|
||||
lq.xyzw vf09, 1(vi06) | nop
|
||||
iaddi vi07, vi07, -0x1 | muly.xyzw vf10, vf06, vf04
|
||||
nop | mulz.xyzw vf11, vf07, vf04
|
||||
nop | muly.xyzw vf12, vf08, vf04
|
||||
nop | mulz.xyzw vf13, vf09, vf04
|
||||
nop | mulx.xyzw vf06, vf06, vf04
|
||||
nop | mulx.xyzw vf07, vf07, vf04
|
||||
nop | mulx.xyzw vf08, vf08, vf04
|
||||
nop | mulx.xyzw vf09, vf09, vf04
|
||||
nop | add.xyzw vf10, vf10, vf02
|
||||
nop | add.xyzw vf11, vf11, vf03
|
||||
nop | add.xyzw vf12, vf12, vf02
|
||||
nop | add.xyzw vf13, vf13, vf03
|
||||
nop | add.xyzw vf06, vf06, vf02
|
||||
nop | add.xyzw vf07, vf07, vf03
|
||||
nop | add.xyzw vf08, vf08, vf02
|
||||
nop | add.xyzw vf09, vf09, vf03
|
||||
nop | ftoi4.xyzw vf10, vf10
|
||||
nop | ftoi4.xyzw vf12, vf12
|
||||
nop | ftoi4.xyzw vf06, vf06
|
||||
nop | ftoi4.xyzw vf08, vf08
|
||||
sqi.xyzw vf07, vi05 | nop
|
||||
sqi.xyzw vf05, vi05 | nop
|
||||
sqi.xyzw vf06, vi05 | nop
|
||||
sqi.xyzw vf09, vi05 | nop
|
||||
sqi.xyzw vf05, vi05 | nop
|
||||
sqi.xyzw vf08, vi05 | nop
|
||||
sqi.xyzw vf11, vi05 | nop
|
||||
sqi.xyzw vf05, vi05 | nop
|
||||
sqi.xyzw vf10, vi05 | nop
|
||||
sqi.xyzw vf13, vi05 | nop
|
||||
sqi.xyzw vf05, vi05 | nop
|
||||
sqi.xyzw vf12, vi05 | nop
|
||||
sqi.xyzw vf03, vi05 | nop
|
||||
sqi.xyzw vf05, vi05 | nop
|
||||
ibne vi00, vi07, L2 | nop
|
||||
sqi.xyzw vf14, vi05 | nop
|
||||
xgkick vi02 | nop
|
||||
iaddi vi01, vi01, -0x1 | nop
|
||||
iaddiu vi03, vi00, 0xb0 | nop
|
||||
ibne vi00, vi01, L1 | nop
|
||||
isub vi02, vi03, vi02 | nop
|
||||
nop | nop :e
|
||||
nop | nop
|
||||
@@ -0,0 +1,126 @@
|
||||
.word 0x1e101e9
|
||||
.word 0x2ff
|
||||
.word 0x1e501ea
|
||||
.word 0x2ff
|
||||
.word 0x90101ff
|
||||
.word 0x2ff
|
||||
.word 0x10040200
|
||||
.word 0x2ff
|
||||
.word 0x80020032
|
||||
.word 0x2ff
|
||||
.word 0x8272001
|
||||
.word 0x2ff
|
||||
.word 0x80001175
|
||||
.word 0x2ff
|
||||
.word 0x90639dd
|
||||
.word 0x2ff
|
||||
.word 0x81e50b7d
|
||||
.word 0x2ff
|
||||
.word 0x11083800
|
||||
.word 0x2ff
|
||||
.word 0x11084000
|
||||
.word 0x2ff
|
||||
.word 0xb082fff
|
||||
.word 0x2ff
|
||||
.word 0x81e2237c
|
||||
.word 0x2ff
|
||||
.word 0x81e3237c
|
||||
.word 0x2ff
|
||||
.word 0x81e4237c
|
||||
.word 0x2ff
|
||||
.word 0x80000030
|
||||
.word 0x1ee117d
|
||||
.word 0x81e6337c
|
||||
.word 0x2ff
|
||||
.word 0x81e7337c
|
||||
.word 0x2ff
|
||||
.word 0x1e83000
|
||||
.word 0x2ff
|
||||
.word 0x1e93001
|
||||
.word 0x2ff
|
||||
.word 0x80073ff2
|
||||
.word 0x1e43299
|
||||
.word 0x80000030
|
||||
.word 0x1e43ada
|
||||
.word 0x80000030
|
||||
.word 0x1e44319
|
||||
.word 0x80000030
|
||||
.word 0x1e44b5a
|
||||
.word 0x80000030
|
||||
.word 0x1e43198
|
||||
.word 0x80000030
|
||||
.word 0x1e439d8
|
||||
.word 0x80000030
|
||||
.word 0x1e44218
|
||||
.word 0x80000030
|
||||
.word 0x1e44a58
|
||||
.word 0x80000030
|
||||
.word 0x1e252a8
|
||||
.word 0x80000030
|
||||
.word 0x1e35ae8
|
||||
.word 0x80000030
|
||||
.word 0x1e26328
|
||||
.word 0x80000030
|
||||
.word 0x1e36b68
|
||||
.word 0x80000030
|
||||
.word 0x1e231a8
|
||||
.word 0x80000030
|
||||
.word 0x1e339e8
|
||||
.word 0x80000030
|
||||
.word 0x1e24228
|
||||
.word 0x80000030
|
||||
.word 0x1e34a68
|
||||
.word 0x80000030
|
||||
.word 0x1ea517d
|
||||
.word 0x80000030
|
||||
.word 0x1ec617d
|
||||
.word 0x80000030
|
||||
.word 0x1e6317d
|
||||
.word 0x80000030
|
||||
.word 0x1e8417d
|
||||
.word 0x81e53b7d
|
||||
.word 0x2ff
|
||||
.word 0x81e52b7d
|
||||
.word 0x2ff
|
||||
.word 0x81e5337d
|
||||
.word 0x2ff
|
||||
.word 0x81e54b7d
|
||||
.word 0x2ff
|
||||
.word 0x81e52b7d
|
||||
.word 0x2ff
|
||||
.word 0x81e5437d
|
||||
.word 0x2ff
|
||||
.word 0x81e55b7d
|
||||
.word 0x2ff
|
||||
.word 0x81e52b7d
|
||||
.word 0x2ff
|
||||
.word 0x81e5537d
|
||||
.word 0x2ff
|
||||
.word 0x81e56b7d
|
||||
.word 0x2ff
|
||||
.word 0x81e52b7d
|
||||
.word 0x2ff
|
||||
.word 0x81e5637d
|
||||
.word 0x2ff
|
||||
.word 0x81e51b7d
|
||||
.word 0x2ff
|
||||
.word 0x81e52b7d
|
||||
.word 0x2ff
|
||||
.word 0x52003fd9
|
||||
.word 0x2ff
|
||||
.word 0x81e5737d
|
||||
.word 0x2ff
|
||||
.word 0x800016fc
|
||||
.word 0x2ff
|
||||
.word 0x80010ff2
|
||||
.word 0x2ff
|
||||
.word 0x100300b0
|
||||
.word 0x2ff
|
||||
.word 0x52000fc9
|
||||
.word 0x2ff
|
||||
.word 0x800218b1
|
||||
.word 0x2ff
|
||||
.word 0x80000030
|
||||
.word 0x400002ff
|
||||
.word 0x80000030
|
||||
.word 0x2ff
|
||||
@@ -0,0 +1,136 @@
|
||||
iaddiu vi05, vi00, 0x320 | nop
|
||||
lq.xyzw vf25, 988(vi00) | nop
|
||||
lq.xyzw vf26, 989(vi00) | nop
|
||||
lq.xyzw vf27, 990(vi00) | nop
|
||||
lq.xyzw vf30, 996(vi00) | nop
|
||||
lq.xyzw vf31, 997(vi00) | nop
|
||||
lq.xyzw vf28, 1002(vi00) | nop
|
||||
lq.xyzw vf29, 1003(vi00) | nop
|
||||
nop | nop :e
|
||||
nop | nop
|
||||
xtop vi02 | nop
|
||||
nop | nop
|
||||
ilwr.x vi03, vi02 | nop
|
||||
iaddi vi02, vi02, 0x1 | nop
|
||||
iaddiu vi04, vi02, 0x90 | nop
|
||||
L1:
|
||||
lq.xyzw vf03, 2(vi02) | nop
|
||||
lq.xyzw vf02, 1(vi02) | nop
|
||||
lq.xyzw vf01, 0(vi02) | nop
|
||||
lq.xyzw vf24, 983(vi00) | nop
|
||||
lq.xyzw vf21, 980(vi00) | nop
|
||||
lq.xyzw vf22, 981(vi00) | nop
|
||||
lq.xyzw vf23, 982(vi00) | nop
|
||||
lq.xyzw vf04, 3(vi02) | mulaw.xyz ACC, vf24, vf00
|
||||
lq.xyzw vf24, 987(vi00) | maddax.xyz ACC, vf21, vf01
|
||||
lq.xyzw vf21, 984(vi00) | madday.xyz ACC, vf22, vf01
|
||||
lq.xyzw vf22, 985(vi00) | maddz.xyz vf01, vf23, vf01
|
||||
lq.xyzw vf23, 986(vi00) | nop
|
||||
lq.xyzw vf09, 0(vi04) | nop
|
||||
lq.xyzw vf10, 1(vi04) | mulw.xyz vf03, vf03, vf03
|
||||
div Q, vf02.y, vf01.z | mulz.x vf04, vf04, vf01
|
||||
lq.xyzw vf11, 2(vi04) | nop
|
||||
0.0078125 | nop :i
|
||||
lq.xyzw vf12, 3(vi04) | nop
|
||||
lq.xyzw vf13, 4(vi04) | addy.x vf04, vf04, vf04
|
||||
sq.xyzw vf09, 68(vi05) | muly.z vf05, vf02, vf27
|
||||
move.w vf05, vf00 | addw.z vf02, vf00, vf01
|
||||
sq.xyzw vf10, 69(vi05) | mul.w vf09, vf00, Q
|
||||
sq.xyzw vf11, 70(vi05) | nop
|
||||
sq.xyzw vf12, 71(vi05) | miniw.x vf04, vf04, vf00
|
||||
sq.xyzw vf13, 72(vi05) | nop
|
||||
nop | subw.w vf09, vf00, vf09
|
||||
nop | maxx.x vf04, vf04, vf00
|
||||
nop | mulw.xyz vf01, vf01, vf09
|
||||
nop | mulx.xyz vf03, vf03, vf04
|
||||
nop | mulaw.xyzw ACC, vf24, vf00
|
||||
nop | maddax.xyzw ACC, vf21, vf01
|
||||
nop | madday.xyzw ACC, vf22, vf01
|
||||
nop | muli.xyz vf03, vf03, I
|
||||
nop | maddz.xyzw vf01, vf23, vf01
|
||||
nop | nop
|
||||
iaddi vi03, vi03, -0x1 | mulz.z vf06, vf05, vf05
|
||||
lq.xyzw vf15, 991(vi00) | nop
|
||||
iaddi vi02, vi02, 0x3 | nop
|
||||
fcset 0x0 | mul.xyzw vf07, vf01, vf26
|
||||
nop | mulz.zw vf09, vf05, vf06
|
||||
lq.xyzw vf15, 992(vi00) | mula.zw ACC, vf05, vf15
|
||||
nop | nop
|
||||
div Q, vf00.w, vf07.w | clipw.xyz vf07, vf07
|
||||
nop | mulz.zw vf10, vf09, vf06
|
||||
lq.xyzw vf15, 993(vi00) | madda.zw ACC, vf09, vf15
|
||||
nop | nop
|
||||
fcand vi01, 0x3f | nop
|
||||
ibne vi00, vi01, L2 | mulz.zw vf09, vf10, vf06
|
||||
lq.xyzw vf15, 994(vi00) | madda.zw ACC, vf10, vf15
|
||||
nop | mul.xyz vf01, vf01, Q
|
||||
nop | mul.xyzw vf02, vf02, Q
|
||||
nop | mulz.zw vf10, vf09, vf06
|
||||
lq.xyzw vf15, 995(vi00) | madda.zw ACC, vf09, vf15
|
||||
nop | add.xyzw vf01, vf01, vf25
|
||||
nop | maxw.x vf02, vf02, vf00
|
||||
nop | miniw.x vf02, vf02, vf29
|
||||
nop | miniz.zw vf02, vf02, vf29
|
||||
nop | madd.zw vf05, vf10, vf15
|
||||
nop | ftoi0.xyzw vf03, vf03
|
||||
nop | addx.xy vf09, vf28, vf02
|
||||
nop | subx.xy vf11, vf01, vf02
|
||||
nop | addx.xy vf12, vf01, vf02
|
||||
nop | subx.xy vf10, vf29, vf02
|
||||
nop | mulaz.xyzw ACC, vf30, vf05
|
||||
nop | msubw.xyzw vf15, vf31, vf05
|
||||
nop | max.xy vf20, vf01, vf09
|
||||
nop | addx.zw vf11, vf01, vf00
|
||||
nop | addx.zw vf12, vf01, vf00
|
||||
nop | subw.xy vf17, vf28, vf00
|
||||
nop | mulz.xyzw vf15, vf15, vf02
|
||||
nop | addw.xy vf18, vf28, vf00
|
||||
nop | ftoi4.xyzw vf11, vf11
|
||||
nop | ftoi4.xyzw vf12, vf12
|
||||
nop | mini.xy vf20, vf20, vf10
|
||||
nop | mulaw.xyzw ACC, vf30, vf05
|
||||
sq.xyzw vf03, 75(vi05) | maddz.xyzw vf16, vf31, vf05
|
||||
sq.xyz vf11, 11(vi05) | sub.xy vf17, vf20, vf17
|
||||
sq.xyz vf12, 12(vi05) | sub.xy vf18, vf20, vf18
|
||||
lq.xyzw vf11, 998(vi00) | subx.xy vf19, vf20, vf02
|
||||
lq.xyzw vf12, 999(vi00) | mulw.xyzw vf16, vf16, vf02
|
||||
lq.xyzw vf13, 1000(vi00) | addx.xy vf20, vf20, vf02
|
||||
lq.xyzw vf14, 1001(vi00) | mulaw.xyzw ACC, vf01, vf00
|
||||
nop | maddax.xyzw ACC, vf15, vf11
|
||||
nop | maddy.xyzw vf11, vf16, vf11
|
||||
nop | mulaw.xyzw ACC, vf01, vf00
|
||||
nop | maddax.xyzw ACC, vf15, vf12
|
||||
nop | maddy.xyzw vf12, vf16, vf12
|
||||
nop | mulaw.xyzw ACC, vf01, vf00
|
||||
nop | maddax.xyzw ACC, vf15, vf13
|
||||
nop | maddy.xyzw vf13, vf16, vf13
|
||||
nop | mulaw.xyzw ACC, vf01, vf00
|
||||
nop | maddax.xyzw ACC, vf15, vf14
|
||||
nop | maddy.xyzw vf14, vf16, vf14
|
||||
nop | subx.xy vf17, vf17, vf02
|
||||
nop | addx.xy vf18, vf18, vf02
|
||||
iaddiu vi04, vi04, 0x50 | subw.xy vf19, vf19, vf00
|
||||
nop | addw.xy vf20, vf20, vf00
|
||||
nop | ftoi4.xyzw vf11, vf11
|
||||
nop | ftoi4.xyzw vf12, vf12
|
||||
nop | ftoi4.xyzw vf13, vf13
|
||||
nop | ftoi4.xyzw vf14, vf14
|
||||
sq.xy vf11, 61(vi05) | ftoi4.xyzw vf17, vf17
|
||||
sq.xy vf12, 62(vi05) | ftoi4.xyzw vf18, vf18
|
||||
sq.xy vf13, 63(vi05) | ftoi4.xyzw vf19, vf19
|
||||
sq.xy vf14, 64(vi05) | ftoi4.xyzw vf20, vf20
|
||||
sq.xy vf17, 24(vi05) | nop
|
||||
sq.xy vf18, 26(vi05) | nop
|
||||
sq.xy vf19, 8(vi05) | nop
|
||||
sq.xy vf20, 9(vi05) | nop
|
||||
sq.xy vf11, 77(vi05) | nop
|
||||
sq.xy vf12, 79(vi05) | nop
|
||||
sq.xy vf13, 81(vi05) | nop
|
||||
sq.xy vf14, 83(vi05) | nop
|
||||
xgkick vi05 | nop
|
||||
L2:
|
||||
iaddiu vi01, vi00, 0x694 | nop
|
||||
ibne vi00, vi03, L1 | nop
|
||||
isub vi05, vi01, vi05 | nop
|
||||
nop | nop :e
|
||||
nop | nop
|
||||
@@ -0,0 +1,268 @@
|
||||
.word 0x10050320
|
||||
.word 0x2ff
|
||||
.word 0x1f903dc
|
||||
.word 0x2ff
|
||||
.word 0x1fa03dd
|
||||
.word 0x2ff
|
||||
.word 0x1fb03de
|
||||
.word 0x2ff
|
||||
.word 0x1fe03e4
|
||||
.word 0x2ff
|
||||
.word 0x1ff03e5
|
||||
.word 0x2ff
|
||||
.word 0x1fc03ea
|
||||
.word 0x2ff
|
||||
.word 0x1fd03eb
|
||||
.word 0x2ff
|
||||
.word 0x80000030
|
||||
.word 0x400002ff
|
||||
.word 0x80000030
|
||||
.word 0x2ff
|
||||
.word 0x800206bc
|
||||
.word 0x2ff
|
||||
.word 0x80000030
|
||||
.word 0x2ff
|
||||
.word 0x810313fe
|
||||
.word 0x2ff
|
||||
.word 0x80021072
|
||||
.word 0x2ff
|
||||
.word 0x10041090
|
||||
.word 0x2ff
|
||||
.word 0x1e31002
|
||||
.word 0x2ff
|
||||
.word 0x1e21001
|
||||
.word 0x2ff
|
||||
.word 0x1e11000
|
||||
.word 0x2ff
|
||||
.word 0x1f803d7
|
||||
.word 0x2ff
|
||||
.word 0x1f503d4
|
||||
.word 0x2ff
|
||||
.word 0x1f603d5
|
||||
.word 0x2ff
|
||||
.word 0x1f703d6
|
||||
.word 0x2ff
|
||||
.word 0x1e41003
|
||||
.word 0x1c0c1bf
|
||||
.word 0x1f803db
|
||||
.word 0x1c1a8bc
|
||||
.word 0x1f503d8
|
||||
.word 0x1c1b0bd
|
||||
.word 0x1f603d9
|
||||
.word 0x1c1b84a
|
||||
.word 0x1f703da
|
||||
.word 0x2ff
|
||||
.word 0x1e92000
|
||||
.word 0x2ff
|
||||
.word 0x1ea2001
|
||||
.word 0x1c318db
|
||||
.word 0x812113bc
|
||||
.word 0x101211a
|
||||
.word 0x1eb2002
|
||||
.word 0x2ff
|
||||
.word 0x3c000000
|
||||
.word 0x800002ff
|
||||
.word 0x1ec2003
|
||||
.word 0x2ff
|
||||
.word 0x1ed2004
|
||||
.word 0x1042101
|
||||
.word 0x3e54844
|
||||
.word 0x5b1159
|
||||
.word 0x8025033c
|
||||
.word 0x410083
|
||||
.word 0x3e55045
|
||||
.word 0x20025c
|
||||
.word 0x3e55846
|
||||
.word 0x2ff
|
||||
.word 0x3e56047
|
||||
.word 0x1002117
|
||||
.word 0x3e56848
|
||||
.word 0x2ff
|
||||
.word 0x80000030
|
||||
.word 0x290247
|
||||
.word 0x80000030
|
||||
.word 0x1002110
|
||||
.word 0x80000030
|
||||
.word 0x1c9085b
|
||||
.word 0x80000030
|
||||
.word 0x1c418d8
|
||||
.word 0x80000030
|
||||
.word 0x1e0c1bf
|
||||
.word 0x80000030
|
||||
.word 0x1e1a8bc
|
||||
.word 0x80000030
|
||||
.word 0x1e1b0bd
|
||||
.word 0x80000030
|
||||
.word 0x1c018de
|
||||
.word 0x80000030
|
||||
.word 0x1e1b84a
|
||||
.word 0x80000030
|
||||
.word 0x2ff
|
||||
.word 0x80031ff2
|
||||
.word 0x45299a
|
||||
.word 0x1ef03df
|
||||
.word 0x2ff
|
||||
.word 0x800210f2
|
||||
.word 0x2ff
|
||||
.word 0x22000000
|
||||
.word 0x1fa09ea
|
||||
.word 0x80000030
|
||||
.word 0x662a5a
|
||||
.word 0x1ef03e0
|
||||
.word 0x6f2abe
|
||||
.word 0x80000030
|
||||
.word 0x2ff
|
||||
.word 0x81e703bc
|
||||
.word 0x1c739ff
|
||||
.word 0x80000030
|
||||
.word 0x664a9a
|
||||
.word 0x1ef03e1
|
||||
.word 0x6f4abd
|
||||
.word 0x80000030
|
||||
.word 0x2ff
|
||||
.word 0x2400003f
|
||||
.word 0x2ff
|
||||
.word 0x52000842
|
||||
.word 0x66525a
|
||||
.word 0x1ef03e2
|
||||
.word 0x6f52bd
|
||||
.word 0x80000030
|
||||
.word 0x1c0085c
|
||||
.word 0x80000030
|
||||
.word 0x1e0109c
|
||||
.word 0x80000030
|
||||
.word 0x664a9a
|
||||
.word 0x1ef03e3
|
||||
.word 0x6f4abd
|
||||
.word 0x80000030
|
||||
.word 0x1f90868
|
||||
.word 0x80000030
|
||||
.word 0x1001093
|
||||
.word 0x80000030
|
||||
.word 0x11d1097
|
||||
.word 0x80000030
|
||||
.word 0x7d1096
|
||||
.word 0x80000030
|
||||
.word 0x6f5169
|
||||
.word 0x80000030
|
||||
.word 0x1e3197c
|
||||
.word 0x80000030
|
||||
.word 0x182e240
|
||||
.word 0x80000030
|
||||
.word 0x1820ac4
|
||||
.word 0x80000030
|
||||
.word 0x1820b00
|
||||
.word 0x80000030
|
||||
.word 0x182ea84
|
||||
.word 0x80000030
|
||||
.word 0x1e5f1be
|
||||
.word 0x80000030
|
||||
.word 0x1e5fbcf
|
||||
.word 0x80000030
|
||||
.word 0x1890d2b
|
||||
.word 0x80000030
|
||||
.word 0x600ac0
|
||||
.word 0x80000030
|
||||
.word 0x600b00
|
||||
.word 0x80000030
|
||||
.word 0x180e447
|
||||
.word 0x80000030
|
||||
.word 0x1e27bda
|
||||
.word 0x80000030
|
||||
.word 0x180e483
|
||||
.word 0x80000030
|
||||
.word 0x1eb597d
|
||||
.word 0x80000030
|
||||
.word 0x1ec617d
|
||||
.word 0x80000030
|
||||
.word 0x18aa52f
|
||||
.word 0x80000030
|
||||
.word 0x1e5f1bf
|
||||
.word 0x3e5184b
|
||||
.word 0x1e5fc0a
|
||||
.word 0x3c5580b
|
||||
.word 0x191a46c
|
||||
.word 0x3c5600c
|
||||
.word 0x192a4ac
|
||||
.word 0x1eb03e6
|
||||
.word 0x182a4c4
|
||||
.word 0x1ec03e7
|
||||
.word 0x1e2841b
|
||||
.word 0x1ed03e8
|
||||
.word 0x182a500
|
||||
.word 0x1ee03e9
|
||||
.word 0x1e009bf
|
||||
.word 0x80000030
|
||||
.word 0x1eb78bc
|
||||
.word 0x80000030
|
||||
.word 0x1eb82c9
|
||||
.word 0x80000030
|
||||
.word 0x1e009bf
|
||||
.word 0x80000030
|
||||
.word 0x1ec78bc
|
||||
.word 0x80000030
|
||||
.word 0x1ec8309
|
||||
.word 0x80000030
|
||||
.word 0x1e009bf
|
||||
.word 0x80000030
|
||||
.word 0x1ed78bc
|
||||
.word 0x80000030
|
||||
.word 0x1ed8349
|
||||
.word 0x80000030
|
||||
.word 0x1e009bf
|
||||
.word 0x80000030
|
||||
.word 0x1ee78bc
|
||||
.word 0x80000030
|
||||
.word 0x1ee8389
|
||||
.word 0x80000030
|
||||
.word 0x1828c44
|
||||
.word 0x80000030
|
||||
.word 0x1829480
|
||||
.word 0x10042050
|
||||
.word 0x1809cc7
|
||||
.word 0x80000030
|
||||
.word 0x180a503
|
||||
.word 0x80000030
|
||||
.word 0x1eb597d
|
||||
.word 0x80000030
|
||||
.word 0x1ec617d
|
||||
.word 0x80000030
|
||||
.word 0x1ed697d
|
||||
.word 0x80000030
|
||||
.word 0x1ee717d
|
||||
.word 0x385583d
|
||||
.word 0x1f1897d
|
||||
.word 0x385603e
|
||||
.word 0x1f2917d
|
||||
.word 0x385683f
|
||||
.word 0x1f3997d
|
||||
.word 0x3857040
|
||||
.word 0x1f4a17d
|
||||
.word 0x3858818
|
||||
.word 0x2ff
|
||||
.word 0x385901a
|
||||
.word 0x2ff
|
||||
.word 0x3859808
|
||||
.word 0x2ff
|
||||
.word 0x385a009
|
||||
.word 0x2ff
|
||||
.word 0x385584d
|
||||
.word 0x2ff
|
||||
.word 0x385604f
|
||||
.word 0x2ff
|
||||
.word 0x3856851
|
||||
.word 0x2ff
|
||||
.word 0x3857053
|
||||
.word 0x2ff
|
||||
.word 0x80002efc
|
||||
.word 0x2ff
|
||||
.word 0x10010694
|
||||
.word 0x2ff
|
||||
.word 0x52001f8c
|
||||
.word 0x2ff
|
||||
.word 0x80050971
|
||||
.word 0x2ff
|
||||
.word 0x80000030
|
||||
.word 0x400002ff
|
||||
.word 0x80000030
|
||||
.word 0x2ff
|
||||
@@ -0,0 +1,908 @@
|
||||
lq.xyzw vf29, 996(vi00) | nop
|
||||
lq.xyzw vf31, 997(vi00) | nop :e
|
||||
iaddiu vi15, vi00, 0x320 | nop
|
||||
xtop vi02 | nop
|
||||
nop | nop
|
||||
ilwr.x vi04, vi02 | nop
|
||||
iaddi vi02, vi02, 0x1 | nop
|
||||
iaddiu vi03, vi02, 0x90 | nop
|
||||
L1:
|
||||
ilw.y vi08, 1(vi02) | nop
|
||||
lq.xyzw vf25, 900(vi00) | nop
|
||||
lq.xyzw vf26, 901(vi00) | nop
|
||||
lq.xyzw vf27, 902(vi00) | nop
|
||||
lq.xyzw vf28, 903(vi00) | nop
|
||||
lq.xyzw vf30, 904(vi00) | nop
|
||||
lqi.xyzw vf01, vi02 | nop
|
||||
lqi.xyzw vf05, vi02 | nop
|
||||
lqi.xyzw vf11, vi02 | nop
|
||||
lq.xyzw vf12, 1021(vi00) | mulaw.xyzw ACC, vf28, vf00
|
||||
nop | maddax.xyzw ACC, vf25, vf01
|
||||
nop | madday.xyzw ACC, vf26, vf01
|
||||
nop | maddz.xyzw vf02, vf27, vf01
|
||||
move.w vf05, vf00 | addw.z vf01, vf00, vf05
|
||||
nop | nop
|
||||
div Q, vf31.x, vf02.w | muly.z vf05, vf05, vf31
|
||||
nop | mul.xyzw vf03, vf02, vf29
|
||||
nop | nop
|
||||
nop | nop
|
||||
nop | mulz.z vf04, vf05, vf05
|
||||
lq.xyzw vf14, 1001(vi00) | clipw.xyz vf03, vf03
|
||||
iaddi vi06, vi00, 0x1 | adda.xyzw ACC, vf11, vf11
|
||||
L2:
|
||||
ior vi05, vi15, vi00 | mul.zw vf01, vf01, Q
|
||||
lq.xyzw vf06, 998(vi00) | mulz.xyzw vf15, vf05, vf04
|
||||
lq.xyzw vf14, 1002(vi00) | mula.xyzw ACC, vf05, vf14
|
||||
fmand vi01, vi06 | mul.xyz vf02, vf02, Q
|
||||
ibne vi00, vi01, L6 | addz.x vf01, vf00, vf01
|
||||
lqi.xyzw vf07, vi03 | mulz.xyzw vf16, vf15, vf04
|
||||
lq.xyzw vf14, 1003(vi00) | madda.xyzw ACC, vf15, vf14
|
||||
lqi.xyzw vf08, vi03 | add.xyzw vf10, vf02, vf30
|
||||
lqi.xyzw vf09, vi03 | mulw.x vf01, vf01, vf01
|
||||
sqi.xyzw vf06, vi05 | mulz.xyzw vf15, vf16, vf04
|
||||
lq.xyzw vf14, 1004(vi00) | madda.xyzw ACC, vf16, vf14
|
||||
sqi.xyzw vf07, vi05 | maxx.w vf10, vf10, vf12
|
||||
sqi.xyzw vf08, vi05 | maxz.zw vf01, vf01, vf31
|
||||
sqi.xyzw vf09, vi05 | mulz.xyzw vf16, vf15, vf04
|
||||
lq.xyzw vf14, 1005(vi00) | madda.xyzw ACC, vf15, vf14
|
||||
ilw.x vi07, -2(vi02) | mulw.x vf01, vf01, vf31
|
||||
lqi.xyzw vf06, vi03 | miniy.w vf10, vf10, vf12
|
||||
lqi.xyzw vf07, vi03 | miniz.zw vf01, vf01, vf12
|
||||
lq.xyzw vf08, 999(vi08) | madd.xyzw vf05, vf16, vf14
|
||||
lqi.xyzw vf23, vi02 | miniw.x vf01, vf01, vf00
|
||||
ibltz vi08, L4 | suby.w vf02, vf10, vf12
|
||||
lqi.xyzw vf24, vi02 | mulx.w vf11, vf11, vf01
|
||||
fcand vi01, 0x3f | mulaw.xyzw ACC, vf28, vf00
|
||||
lq.xyzw vf17, 1006(vi00) | maddax.xyzw ACC, vf25, vf23
|
||||
fmand vi09, vi06 | nop
|
||||
ibne vi00, vi09, L7 | nop
|
||||
lq.xyzw vf18, 1007(vi00) | madday.xyzw ACC, vf26, vf23
|
||||
L3:
|
||||
lq.xyzw vf19, 980(vi07) | ftoi0.xyzw vf11, vf11
|
||||
lq.xyzw vf20, 981(vi07) | maddz.xyzw vf02, vf27, vf23
|
||||
lq.xyzw vf21, 982(vi07) | mulaw.xyzw ACC, vf17, vf05
|
||||
lq.xyzw vf22, 983(vi07) | msubz.xyzw vf12, vf18, vf05
|
||||
sq.xyzw vf11, 3(vi05) | mulaz.xyzw ACC, vf17, vf05
|
||||
lqi.xyzw vf11, vi02 | maddw.xyzw vf13, vf18, vf05
|
||||
move.w vf24, vf00 | addw.z vf23, vf00, vf24
|
||||
div Q, vf31.x, vf02.w | mulw.xyzw vf12, vf12, vf01
|
||||
ibne vi00, vi01, L5 | muly.z vf24, vf24, vf31
|
||||
ilw.y vi08, -2(vi02) | mulz.xyzw vf13, vf13, vf01
|
||||
sqi.xyzw vf06, vi05 | mul.xyzw vf03, vf02, vf29
|
||||
sqi.xyzw vf07, vi05 | mulaw.xyzw ACC, vf10, vf00
|
||||
sqi.xyzw vf08, vi05 | maddax.xyzw ACC, vf12, vf19
|
||||
lq.xyzw vf06, 988(vi00) | maddy.xyzw vf19, vf13, vf19
|
||||
lq.xyzw vf07, 989(vi00) | mulaw.xyzw ACC, vf10, vf00
|
||||
lq.xyzw vf08, 990(vi00) | maddax.xyzw ACC, vf12, vf20
|
||||
lq.xyzw vf09, 991(vi00) | maddy.xyzw vf20, vf13, vf20
|
||||
sq.xyzw vf06, 1(vi05) | mulaw.xyzw ACC, vf10, vf00
|
||||
sq.xyzw vf07, 3(vi05) | maddax.xyzw ACC, vf12, vf21
|
||||
sq.xyzw vf08, 5(vi05) | maddy.xyzw vf21, vf13, vf21
|
||||
sq.xyzw vf09, 7(vi05) | mulaw.xyzw ACC, vf10, vf00
|
||||
nop | maddax.xyzw ACC, vf12, vf22
|
||||
nop | maddy.xyzw vf22, vf13, vf22
|
||||
lq.xyzw vf12, 1021(vi00) | ftoi4.xyzw vf19, vf19
|
||||
lq.xyzw vf14, 1001(vi00) | ftoi4.xyzw vf20, vf20
|
||||
move.xyzw vf05, vf24 | ftoi4.xyzw vf21, vf21
|
||||
move.xyzw vf01, vf23 | ftoi4.xyzw vf22, vf22
|
||||
sq.xyzw vf19, 2(vi05) | mulz.z vf04, vf24, vf24
|
||||
sq.xyzw vf20, 4(vi05) | clipw.xyz vf03, vf03
|
||||
sq.xyzw vf21, 6(vi05) | nop
|
||||
sq.xyzw vf22, 8(vi05) | nop
|
||||
xgkick vi15 | nop
|
||||
iaddi vi04, vi04, -0x1 | nop
|
||||
iaddiu vi01, vi00, 0x672 | nop
|
||||
ibne vi00, vi04, L2 | nop
|
||||
isub vi15, vi01, vi15 | adda.xyzw ACC, vf11, vf11
|
||||
nop | nop :e
|
||||
nop | nop
|
||||
L4:
|
||||
iaddi vi04, vi04, -0x1 | nop
|
||||
iaddi vi02, vi02, -0x2 | nop
|
||||
ibne vi00, vi04, L1 | nop
|
||||
nop | nop
|
||||
nop | nop :e
|
||||
nop | nop
|
||||
L5:
|
||||
iaddi vi04, vi04, -0x1 | nop
|
||||
iaddi vi02, vi02, -0x3 | nop
|
||||
ibne vi00, vi04, L1 | nop
|
||||
nop | nop
|
||||
nop | nop :e
|
||||
nop | nop
|
||||
L6:
|
||||
iaddi vi04, vi04, -0x1 | nop
|
||||
iaddi vi03, vi03, 0x4 | nop
|
||||
ibne vi00, vi04, L1 | nop
|
||||
nop | nop
|
||||
nop | nop :e
|
||||
nop | nop
|
||||
L7:
|
||||
b L3 | nop
|
||||
lq.xyzw vf08, 1000(vi00) | nop
|
||||
xtop vi02 | nop
|
||||
nop | nop
|
||||
ilwr.x vi04, vi02 | nop
|
||||
iaddi vi02, vi02, 0x1 | nop
|
||||
iaddiu vi03, vi02, 0x90 | nop
|
||||
L8:
|
||||
ilw.y vi08, 1(vi02) | nop
|
||||
lq.xyzw vf25, 900(vi00) | nop
|
||||
lq.xyzw vf26, 901(vi00) | nop
|
||||
lq.xyzw vf27, 902(vi00) | nop
|
||||
lq.xyzw vf28, 903(vi00) | nop
|
||||
lq.xyzw vf30, 904(vi08) | nop
|
||||
lqi.xyzw vf01, vi02 | nop
|
||||
lqi.xyzw vf05, vi02 | nop
|
||||
lqi.xyzw vf11, vi02 | nop
|
||||
lq.xyzw vf12, 1021(vi00) | mulaw.xyzw ACC, vf28, vf00
|
||||
ilw.y vi08, 1(vi02) | maddax.xyzw ACC, vf25, vf01
|
||||
nop | madday.xyzw ACC, vf26, vf01
|
||||
nop | maddz.xyzw vf02, vf27, vf01
|
||||
move.w vf05, vf00 | addw.z vf01, vf00, vf05
|
||||
nop | nop
|
||||
div Q, vf31.x, vf02.w | muly.z vf05, vf05, vf31
|
||||
nop | mul.xyzw vf03, vf02, vf29
|
||||
nop | nop
|
||||
nop | nop
|
||||
nop | mulz.z vf04, vf05, vf05
|
||||
lq.xyzw vf14, 1001(vi00) | clipw.xyz vf03, vf03
|
||||
iaddi vi06, vi00, 0x1 | adda.xyzw ACC, vf11, vf11
|
||||
L9:
|
||||
ior vi05, vi15, vi00 | mul.zw vf01, vf01, Q
|
||||
lq.xyzw vf06, 998(vi00) | mulz.xyzw vf15, vf05, vf04
|
||||
lq.xyzw vf14, 1002(vi00) | mula.xyzw ACC, vf05, vf14
|
||||
fmand vi01, vi06 | mul.xyz vf02, vf02, Q
|
||||
ibne vi00, vi01, L11 | addz.x vf01, vf00, vf01
|
||||
lqi.xyzw vf07, vi03 | mulz.xyzw vf16, vf15, vf04
|
||||
lq.xyzw vf14, 1003(vi00) | madda.xyzw ACC, vf15, vf14
|
||||
lqi.xyzw vf08, vi03 | add.xyzw vf10, vf02, vf30
|
||||
lqi.xyzw vf09, vi03 | mulw.x vf01, vf01, vf01
|
||||
sqi.xyzw vf06, vi05 | mulz.xyzw vf15, vf16, vf04
|
||||
lq.xyzw vf14, 1004(vi00) | madda.xyzw ACC, vf16, vf14
|
||||
sqi.xyzw vf07, vi05 | maxx.w vf10, vf10, vf12
|
||||
sqi.xyzw vf08, vi05 | maxz.zw vf01, vf01, vf31
|
||||
sqi.xyzw vf09, vi05 | mulz.xyzw vf16, vf15, vf04
|
||||
lq.xyzw vf14, 1005(vi00) | madda.xyzw ACC, vf15, vf14
|
||||
lqi.xyzw vf06, vi03 | mulw.x vf01, vf01, vf31
|
||||
lqi.xyzw vf07, vi03 | miniy.w vf10, vf10, vf12
|
||||
lq.xyzw vf08, 1000(vi00) | nop
|
||||
ilw.x vi07, -2(vi02) | madd.xyzw vf05, vf16, vf14
|
||||
lq.xyzw vf30, 904(vi08) | nop
|
||||
lqi.xyzw vf23, vi02 | miniw.x vf01, vf01, vf00
|
||||
lqi.xyzw vf24, vi02 | mulx.w vf11, vf11, vf01
|
||||
fcand vi01, 0x3f | mulaw.xyzw ACC, vf28, vf00
|
||||
lq.xyzw vf17, 1006(vi00) | maddax.xyzw ACC, vf25, vf23
|
||||
lq.xyzw vf18, 1007(vi00) | madday.xyzw ACC, vf26, vf23
|
||||
lq.xyzw vf19, 980(vi07) | ftoi0.xyzw vf11, vf11
|
||||
lq.xyzw vf20, 981(vi07) | maddz.xyzw vf02, vf27, vf23
|
||||
lq.xyzw vf21, 982(vi07) | mulaw.xyzw ACC, vf17, vf05
|
||||
lq.xyzw vf22, 983(vi07) | msubz.xyzw vf12, vf18, vf05
|
||||
sq.xyzw vf11, 3(vi05) | mulaz.xyzw ACC, vf17, vf05
|
||||
lqi.xyzw vf11, vi02 | maddw.xyzw vf13, vf18, vf05
|
||||
move.w vf24, vf00 | addw.z vf23, vf00, vf24
|
||||
div Q, vf31.x, vf02.w | mulw.xyzw vf12, vf12, vf01
|
||||
ibne vi00, vi01, L10 | muly.z vf24, vf24, vf31
|
||||
ilw.y vi08, 1(vi02) | mulz.xyzw vf13, vf13, vf01
|
||||
sqi.xyzw vf06, vi05 | mul.xyzw vf03, vf02, vf29
|
||||
sqi.xyzw vf07, vi05 | mulaw.xyzw ACC, vf10, vf00
|
||||
sqi.xyzw vf08, vi05 | maddax.xyzw ACC, vf12, vf19
|
||||
lq.xyzw vf06, 988(vi00) | maddy.xyzw vf19, vf13, vf19
|
||||
lq.xyzw vf07, 989(vi00) | mulaw.xyzw ACC, vf10, vf00
|
||||
lq.xyzw vf08, 990(vi00) | maddax.xyzw ACC, vf12, vf20
|
||||
lq.xyzw vf09, 991(vi00) | maddy.xyzw vf20, vf13, vf20
|
||||
sq.xyzw vf06, 1(vi05) | mulaw.xyzw ACC, vf10, vf00
|
||||
sq.xyzw vf07, 3(vi05) | maddax.xyzw ACC, vf12, vf21
|
||||
sq.xyzw vf08, 5(vi05) | maddy.xyzw vf21, vf13, vf21
|
||||
sq.xyzw vf09, 7(vi05) | mulaw.xyzw ACC, vf10, vf00
|
||||
nop | maddax.xyzw ACC, vf12, vf22
|
||||
nop | maddy.xyzw vf22, vf13, vf22
|
||||
lq.xyzw vf12, 1021(vi00) | ftoi4.xyzw vf19, vf19
|
||||
lq.xyzw vf14, 1001(vi00) | ftoi4.xyzw vf20, vf20
|
||||
move.xyzw vf05, vf24 | ftoi4.xyzw vf21, vf21
|
||||
move.xyzw vf01, vf23 | ftoi4.xyzw vf22, vf22
|
||||
sq.xyzw vf19, 2(vi05) | mulz.z vf04, vf24, vf24
|
||||
sq.xyzw vf20, 4(vi05) | clipw.xyz vf03, vf03
|
||||
sq.xyzw vf21, 6(vi05) | nop
|
||||
sq.xyzw vf22, 8(vi05) | nop
|
||||
xgkick vi15 | nop
|
||||
iaddi vi04, vi04, -0x1 | nop
|
||||
iaddiu vi01, vi00, 0x672 | nop
|
||||
ibne vi00, vi04, L9 | nop
|
||||
isub vi15, vi01, vi15 | adda.xyzw ACC, vf11, vf11
|
||||
nop | nop :e
|
||||
nop | nop
|
||||
L10:
|
||||
iaddi vi04, vi04, -0x1 | nop
|
||||
iaddi vi02, vi02, -0x3 | nop
|
||||
ibne vi00, vi04, L8 | nop
|
||||
nop | nop
|
||||
nop | nop :e
|
||||
nop | nop
|
||||
L11:
|
||||
iaddi vi04, vi04, -0x1 | nop
|
||||
iaddi vi03, vi03, 0x4 | nop
|
||||
ibne vi00, vi04, L8 | nop
|
||||
nop | nop
|
||||
nop | nop :e
|
||||
nop | nop
|
||||
lq.xyzw vf25, 900(vi00) | nop
|
||||
lq.xyzw vf26, 901(vi00) | nop
|
||||
lq.xyzw vf27, 902(vi00) | nop
|
||||
lq.xyzw vf28, 903(vi00) | nop
|
||||
lq.xyzw vf30, 904(vi00) | nop
|
||||
xtop vi02 | nop
|
||||
nop | nop
|
||||
ilwr.x vi04, vi02 | nop
|
||||
iaddi vi02, vi02, 0x1 | nop
|
||||
iaddiu vi03, vi02, 0x90 | nop
|
||||
lq.xyzw vf23, 1021(vi00) | nop
|
||||
iaddi vi06, vi00, 0x1 | nop
|
||||
L12:
|
||||
lq.xyzw vf06, 1(vi02) | nop
|
||||
lq.xyzw vf07, 2(vi02) | nop
|
||||
iaddi vi01, vi00, 0x2 | nop
|
||||
nop | nop
|
||||
nop | mul.xyzw vf05, vf06, vf06
|
||||
nop | addw.y vf08, vf00, vf06
|
||||
nop | subw.w vf06, vf06, vf06
|
||||
nop | adda.xyzw ACC, vf07, vf07
|
||||
nop | addy.x vf05, vf05, vf05
|
||||
nop | nop
|
||||
nop | nop
|
||||
fmand vi01, vi06 | nop
|
||||
ibne vi00, vi01, L16 | addz.x vf05, vf05, vf05
|
||||
nop | nop
|
||||
nop | nop
|
||||
nop | nop
|
||||
nop | subx.w vf05, vf00, vf05
|
||||
nop | nop
|
||||
nop | nop
|
||||
nop | nop
|
||||
sqrt Q, vf05.w | nop
|
||||
nop | nop
|
||||
nop | nop
|
||||
nop | nop
|
||||
nop | nop
|
||||
nop | nop
|
||||
nop | nop
|
||||
nop | addq.w vf06, vf06, Q
|
||||
nop | nop
|
||||
nop | nop
|
||||
nop | nop
|
||||
nop | add.xyzw vf13, vf06, vf06
|
||||
nop | addw.x vf09, vf00, vf06
|
||||
nop | addz.y vf09, vf00, vf06
|
||||
nop | suby.z vf09, vf00, vf06
|
||||
nop | subw.w vf09, vf00, vf00
|
||||
nop | subz.x vf10, vf00, vf06
|
||||
nop | addw.y vf10, vf00, vf06
|
||||
nop | addx.z vf10, vf00, vf06
|
||||
nop | subw.w vf10, vf00, vf00
|
||||
nop | addy.x vf11, vf00, vf06
|
||||
nop | subx.y vf11, vf00, vf06
|
||||
nop | addw.z vf11, vf00, vf06
|
||||
nop | subw.w vf11, vf00, vf00
|
||||
L13:
|
||||
lq.xyzw vf12, 0(vi02) | opmula.xyz ACC, vf13, vf09
|
||||
lq.xyzw vf07, 2(vi02) | opmsub.xyz vf09, vf09, vf13
|
||||
iaddi vi02, vi02, 0x3 | opmula.xyz ACC, vf13, vf10
|
||||
lq.xyzw vf06, 1(vi02) | opmsub.xyz vf10, vf10, vf13
|
||||
ior vi05, vi15, vi00 | opmula.xyz ACC, vf13, vf11
|
||||
lq.xyzw vf01, 998(vi00) | opmsub.xyz vf11, vf11, vf13
|
||||
iaddi vi01, vi00, 0x1 | nop
|
||||
mtir vi12, vf07.x | nop
|
||||
iand vi12, vi12, vi01 | nop
|
||||
lqi.xyzw vf02, vi03 | addw.x vf09, vf09, vf00
|
||||
lqi.xyzw vf03, vi03 | addw.y vf10, vf10, vf00
|
||||
lqi.xyzw vf04, vi03 | addw.z vf11, vf11, vf00
|
||||
sqi.xyzw vf01, vi05 | mul.xyzw vf05, vf06, vf06
|
||||
move.w vf12, vf00 | mulw.xyzw vf09, vf09, vf12
|
||||
iaddi vi06, vi00, 0x1 | muly.xyzw vf11, vf11, vf08
|
||||
lq.xyzw vf14, 992(vi00) | adda.xyzw ACC, vf07, vf07
|
||||
lq.xyzw vf15, 993(vi00) | ftoi0.xyzw vf07, vf07
|
||||
lq.xyzw vf16, 994(vi00) | addw.y vf08, vf00, vf06
|
||||
lq.xyzw vf17, 995(vi00) | subw.w vf06, vf06, vf06
|
||||
fmand vi01, vi06 | mulax.xyzw ACC, vf09, vf14
|
||||
ibne vi00, vi01, L15 | madday.xyzw ACC, vf10, vf14
|
||||
sq.xyzw vf07, 7(vi05) | maddaz.xyzw ACC, vf11, vf14
|
||||
sq.xyzw vf07, 10(vi05) | maddw.xyzw vf14, vf12, vf00
|
||||
sqi.xyzw vf02, vi05 | addy.x vf05, vf05, vf05
|
||||
sq.xyzw vf07, 12(vi05) | mulax.xyzw ACC, vf09, vf15
|
||||
sq.xyzw vf07, 15(vi05) | madday.xyzw ACC, vf10, vf15
|
||||
sqi.xyzw vf03, vi05 | maddaz.xyzw ACC, vf11, vf15
|
||||
sqi.xyzw vf04, vi05 | addz.x vf05, vf05, vf05
|
||||
lqi.xyzw vf01, vi03 | maddw.xyzw vf15, vf12, vf00
|
||||
lqi.xyzw vf02, vi03 | mulax.xyzw ACC, vf09, vf16
|
||||
lq.xyzw vf03, 1008(vi12) | madday.xyzw ACC, vf10, vf16
|
||||
nop | subx.w vf05, vf00, vf05
|
||||
sqi.xyzw vf01, vi05 | maddaz.xyzw ACC, vf11, vf16
|
||||
sqi.xyzw vf02, vi05 | maddw.xyzw vf16, vf12, vf00
|
||||
sqi.xyzw vf03, vi05 | mulax.xyzw ACC, vf09, vf17
|
||||
sqrt Q, vf05.w | madday.xyzw ACC, vf10, vf17
|
||||
nop | maddaz.xyzw ACC, vf11, vf17
|
||||
nop | maddw.xyzw vf17, vf12, vf00
|
||||
lq.xyzw vf18, 988(vi00) | mulax.xyzw ACC, vf25, vf14
|
||||
lq.xyzw vf19, 989(vi00) | madday.xyzw ACC, vf26, vf14
|
||||
lq.xyzw vf20, 990(vi00) | maddaz.xyzw ACC, vf27, vf14
|
||||
lq.xyzw vf21, 991(vi00) | maddw.xyzw vf14, vf28, vf00
|
||||
nop | addq.w vf06, vf06, Q
|
||||
nop | mulax.xyzw ACC, vf25, vf15
|
||||
nop | madday.xyzw ACC, vf26, vf15
|
||||
nop | maddaz.xyzw ACC, vf27, vf15
|
||||
div Q, vf31.x, vf14.w | mul.xyzw vf09, vf14, vf29
|
||||
nop | maddw.xyzw vf15, vf28, vf00
|
||||
nop | mulax.xyzw ACC, vf25, vf16
|
||||
nop | madday.xyzw ACC, vf26, vf16
|
||||
nop | maddaz.xyzw ACC, vf27, vf16
|
||||
nop | mul.xyzw vf10, vf15, vf29
|
||||
nop | maddw.xyzw vf16, vf28, vf00
|
||||
div Q, vf31.x, vf15.w | mul.xyz vf14, vf14, Q
|
||||
nop | mul.xyzw vf18, vf18, Q
|
||||
nop | mulax.xyzw ACC, vf25, vf17
|
||||
nop | madday.xyzw ACC, vf26, vf17
|
||||
nop | maddaz.xyzw ACC, vf27, vf17
|
||||
sq.xyzw vf18, 0(vi05) | mul.xyzw vf11, vf16, vf29
|
||||
nop | maddw.xyzw vf17, vf28, vf00
|
||||
div Q, vf31.x, vf16.w | mul.xyz vf15, vf15, Q
|
||||
nop | mul.xyzw vf19, vf19, Q
|
||||
nop | add.xyzw vf14, vf14, vf30
|
||||
nop | add.xyzw vf15, vf15, vf30
|
||||
nop | mul.xyzw vf12, vf17, vf29
|
||||
sq.xyzw vf19, 3(vi05) | clipw.xyz vf09, vf09
|
||||
nop | clipw.xyz vf10, vf10
|
||||
div Q, vf31.x, vf17.w | mul.xyz vf16, vf16, Q
|
||||
nop | mul.xyzw vf20, vf20, Q
|
||||
nop | clipw.xyz vf11, vf11
|
||||
nop | clipw.xyz vf12, vf12
|
||||
nop | add.xyzw vf16, vf16, vf30
|
||||
sq.xyzw vf20, 6(vi05) | maxx.w vf14, vf14, vf23
|
||||
nop | maxx.w vf15, vf15, vf23
|
||||
fcand vi01, 0x410410 | mul.xyz vf17, vf17, Q
|
||||
ibne vi00, vi01, L14 | mul.xyzw vf21, vf21, Q
|
||||
fcand vi01, 0xffffff | maxx.w vf16, vf16, vf23
|
||||
ibne vi00, vi01, L17 | miniy.w vf14, vf14, vf23
|
||||
nop | add.xyzw vf17, vf17, vf30
|
||||
sq.xyzw vf21, 9(vi05) | miniy.w vf15, vf15, vf23
|
||||
nop | miniy.w vf16, vf16, vf23
|
||||
nop | ftoi4.xyzw vf14, vf14
|
||||
nop | maxx.w vf17, vf17, vf23
|
||||
nop | ftoi4.xyzw vf15, vf15
|
||||
nop | ftoi4.xyzw vf16, vf16
|
||||
sq.xyzw vf14, 2(vi05) | add.xyzw vf13, vf06, vf06
|
||||
nop | miniy.w vf17, vf17, vf23
|
||||
sq.xyzw vf15, 5(vi05) | addw.x vf09, vf00, vf06
|
||||
sq.xyzw vf16, 8(vi05) | addz.y vf09, vf00, vf06
|
||||
nop | suby.z vf09, vf00, vf06
|
||||
nop | ftoi4.xyzw vf17, vf17
|
||||
nop | subw.w vf09, vf00, vf00
|
||||
nop | subz.x vf10, vf00, vf06
|
||||
nop | addw.y vf10, vf00, vf06
|
||||
sq.xyzw vf17, 11(vi05) | addx.z vf10, vf00, vf06
|
||||
xgkick vi15 | subw.w vf10, vf00, vf00
|
||||
iaddi vi04, vi04, -0x1 | addy.x vf11, vf00, vf06
|
||||
iaddiu vi01, vi00, 0x672 | subx.y vf11, vf00, vf06
|
||||
ibne vi00, vi04, L13 | addw.z vf11, vf00, vf06
|
||||
isub vi15, vi01, vi15 | subw.w vf11, vf00, vf00
|
||||
nop | nop :e
|
||||
nop | nop
|
||||
L14:
|
||||
iaddi vi04, vi04, -0x1 | nop
|
||||
nop | nop
|
||||
ibne vi00, vi04, L12 | nop
|
||||
nop | nop
|
||||
nop | nop :e
|
||||
nop | nop
|
||||
L15:
|
||||
iaddi vi04, vi04, -0x1 | nop
|
||||
iaddi vi03, vi03, 0x2 | nop
|
||||
ibne vi00, vi04, L12 | nop
|
||||
nop | nop
|
||||
nop | nop :e
|
||||
nop | nop
|
||||
L16:
|
||||
iaddi vi04, vi04, -0x1 | nop
|
||||
iaddi vi03, vi03, 0x5 | nop
|
||||
ibne vi00, vi04, L12 | nop
|
||||
iaddi vi02, vi02, 0x3 | nop
|
||||
nop | nop :e
|
||||
nop | nop
|
||||
L17:
|
||||
fcor vi01, 0x7df7df | nop
|
||||
ibne vi00, vi01, L14 | nop
|
||||
fcor vi01, 0xdf7df7 | nop
|
||||
ibne vi00, vi01, L14 | nop
|
||||
fcor vi01, 0xefbefb | nop
|
||||
ibne vi00, vi01, L14 | nop
|
||||
fcor vi01, 0xf7df7d | nop
|
||||
ibne vi00, vi01, L14 | nop
|
||||
fcor vi01, 0xfbefbe | nop
|
||||
ibne vi00, vi01, L14 | nop
|
||||
ior vi07, vi05, vi00 | nop
|
||||
nop | itof0.xyzw vf07, vf07
|
||||
sq.xyzw vf09, 2(vi07) | nop
|
||||
sq.xyzw vf10, 5(vi07) | nop
|
||||
sq.xyzw vf11, 8(vi07) | nop
|
||||
sq.xyzw vf12, 11(vi07) | nop
|
||||
sq.xyzw vf09, 14(vi07) | nop
|
||||
lq.xyzw vf18, 988(vi00) | nop
|
||||
lq.xyzw vf19, 989(vi00) | nop
|
||||
lq.xyzw vf20, 990(vi00) | nop
|
||||
lq.xyzw vf21, 991(vi00) | nop
|
||||
sq.xyzw vf18, 0(vi07) | nop
|
||||
sq.xyzw vf19, 3(vi07) | nop
|
||||
sq.xyzw vf20, 6(vi07) | nop
|
||||
sq.xyzw vf21, 9(vi07) | nop
|
||||
sq.xyzw vf18, 12(vi07) | nop
|
||||
sq.xyzw vf07, 1(vi07) | nop
|
||||
sq.xyzw vf07, 4(vi07) | nop
|
||||
sq.xyzw vf07, 7(vi07) | nop
|
||||
sq.xyzw vf07, 10(vi07) | nop
|
||||
sq.xyzw vf07, 13(vi07) | nop
|
||||
iaddi vi09, vi00, 0x4 | nop
|
||||
bal vi11, L19 | nop
|
||||
nop | nop
|
||||
lq.xyzw vf01, 1008(vi00) | nop
|
||||
ibeq vi00, vi09, L14 | nop
|
||||
iaddiu vi10, vi09, 0x4000 | nop
|
||||
iaddiu vi10, vi10, 0x4000 | nop
|
||||
sqd.xyzw vf01, vi05 | nop
|
||||
iswr.x vi10, vi05 | nop
|
||||
iaddi vi05, vi05, 0x1 | nop
|
||||
lq.xyzw vf29, 1016(vi00) | nop
|
||||
L18:
|
||||
lqi.xyzw vf17, vi05 | nop
|
||||
lqi.xyzw vf20, vi05 | nop
|
||||
lqi.xyzw vf14, vi05 | nop
|
||||
nop | nop
|
||||
nop | nop
|
||||
nop | nop
|
||||
div Q, vf00.w, vf14.w | mul.xyzw vf14, vf14, vf29
|
||||
nop | nop
|
||||
nop | nop
|
||||
nop | nop
|
||||
nop | nop
|
||||
nop | nop
|
||||
nop | nop
|
||||
nop | mul.xyz vf14, vf14, Q
|
||||
nop | mul.xyzw vf17, vf17, Q
|
||||
nop | nop
|
||||
nop | nop
|
||||
nop | add.xyzw vf14, vf14, vf30
|
||||
nop | nop
|
||||
nop | nop
|
||||
nop | nop
|
||||
nop | maxx.w vf14, vf14, vf23
|
||||
nop | nop
|
||||
nop | nop
|
||||
nop | nop
|
||||
nop | miniy.w vf14, vf14, vf23
|
||||
nop | nop
|
||||
nop | nop
|
||||
nop | ftoi0.xyzw vf20, vf20
|
||||
nop | ftoi4.xyzw vf14, vf14
|
||||
nop | nop
|
||||
sq.xyzw vf17, -3(vi05) | nop
|
||||
sq.xyzw vf20, -2(vi05) | nop
|
||||
sq.xyzw vf14, -1(vi05) | nop
|
||||
iaddi vi09, vi09, -0x1 | nop
|
||||
nop | nop
|
||||
ibne vi00, vi09, L18 | nop
|
||||
nop | nop
|
||||
lq.xyzw vf29, 996(vi00) | nop
|
||||
xgkick vi15 | nop
|
||||
iaddi vi04, vi04, -0x1 | nop
|
||||
iaddiu vi01, vi00, 0x672 | nop
|
||||
ibne vi00, vi04, L12 | nop
|
||||
isub vi15, vi01, vi15 | nop
|
||||
nop | nop :e
|
||||
nop | nop
|
||||
L19:
|
||||
ior vi08, vi07, vi00 | nop
|
||||
lq.xyzw vf14, 2(vi07) | nop
|
||||
ior vi10, vi09, vi00 | nop
|
||||
lq.xyzw vf17, 0(vi07) | nop
|
||||
lq.xyzw vf20, 1(vi07) | nop
|
||||
iaddi vi07, vi07, 0x3 | clipw.xyz vf14, vf14
|
||||
L20:
|
||||
lq.xyzw vf15, 2(vi07) | nop
|
||||
lq.xyzw vf18, 0(vi07) | nop
|
||||
lq.xyzw vf21, 1(vi07) | nop
|
||||
iaddi vi07, vi07, 0x3 | nop
|
||||
nop | clipw.xyz vf15, vf15
|
||||
nop | nop
|
||||
nop | nop
|
||||
nop | nop
|
||||
fcor vi01, 0xfff7df | nop
|
||||
ibne vi00, vi01, L31 | nop
|
||||
fcand vi01, 0x20 | nop
|
||||
ibne vi00, vi01, L32 | nop
|
||||
fcand vi01, 0x800 | nop
|
||||
ibne vi00, vi01, L33 | nop
|
||||
nop | nop
|
||||
sqi.xyzw vf17, vi08 | nop
|
||||
sqi.xyzw vf20, vi08 | nop
|
||||
sqi.xyzw vf14, vi08 | nop
|
||||
L21:
|
||||
move.xyzw vf17, vf18 | nop
|
||||
iaddi vi09, vi09, -0x1 | nop
|
||||
move.xyzw vf20, vf21 | nop
|
||||
ibne vi00, vi09, L20 | nop
|
||||
move.xyzw vf14, vf15 | nop
|
||||
lq.xyzw vf17, 0(vi05) | nop
|
||||
lq.xyzw vf20, 1(vi05) | nop
|
||||
lq.xyzw vf14, 2(vi05) | nop
|
||||
ior vi07, vi05, vi00 | nop
|
||||
sqi.xyzw vf17, vi08 | nop
|
||||
sqi.xyzw vf20, vi08 | nop
|
||||
sqi.xyzw vf14, vi08 | nop
|
||||
ibeq vi00, vi10, L30 | nop
|
||||
ior vi09, vi10, vi00 | nop
|
||||
ior vi08, vi07, vi00 | nop
|
||||
lq.xyzw vf14, 2(vi07) | nop
|
||||
ior vi10, vi09, vi00 | nop
|
||||
lq.xyzw vf17, 0(vi07) | nop
|
||||
lq.xyzw vf20, 1(vi07) | nop
|
||||
iaddi vi07, vi07, 0x3 | clipw.xyz vf14, vf14
|
||||
L22:
|
||||
lq.xyzw vf15, 2(vi07) | nop
|
||||
lq.xyzw vf18, 0(vi07) | nop
|
||||
lq.xyzw vf21, 1(vi07) | nop
|
||||
iaddi vi07, vi07, 0x3 | nop
|
||||
nop | clipw.xyz vf15, vf15
|
||||
nop | nop
|
||||
nop | nop
|
||||
nop | nop
|
||||
fcor vi01, 0xfffdf7 | nop
|
||||
ibne vi00, vi01, L34 | nop
|
||||
fcand vi01, 0x8 | nop
|
||||
ibne vi00, vi01, L35 | nop
|
||||
fcand vi01, 0x200 | nop
|
||||
ibne vi00, vi01, L36 | nop
|
||||
nop | nop
|
||||
sqi.xyzw vf17, vi08 | nop
|
||||
sqi.xyzw vf20, vi08 | nop
|
||||
sqi.xyzw vf14, vi08 | nop
|
||||
L23:
|
||||
move.xyzw vf17, vf18 | nop
|
||||
iaddi vi09, vi09, -0x1 | nop
|
||||
move.xyzw vf20, vf21 | nop
|
||||
ibne vi00, vi09, L22 | nop
|
||||
move.xyzw vf14, vf15 | nop
|
||||
lq.xyzw vf17, 0(vi05) | nop
|
||||
lq.xyzw vf20, 1(vi05) | nop
|
||||
lq.xyzw vf14, 2(vi05) | nop
|
||||
ior vi07, vi05, vi00 | nop
|
||||
sqi.xyzw vf17, vi08 | nop
|
||||
sqi.xyzw vf20, vi08 | nop
|
||||
sqi.xyzw vf14, vi08 | nop
|
||||
ibeq vi00, vi10, L30 | nop
|
||||
ior vi09, vi10, vi00 | nop
|
||||
ior vi08, vi07, vi00 | nop
|
||||
lq.xyzw vf14, 2(vi07) | nop
|
||||
ior vi10, vi09, vi00 | nop
|
||||
lq.xyzw vf17, 0(vi07) | nop
|
||||
lq.xyzw vf20, 1(vi07) | nop
|
||||
iaddi vi07, vi07, 0x3 | clipw.xyz vf14, vf14
|
||||
L24:
|
||||
lq.xyzw vf15, 2(vi07) | nop
|
||||
lq.xyzw vf18, 0(vi07) | nop
|
||||
lq.xyzw vf21, 1(vi07) | nop
|
||||
iaddi vi07, vi07, 0x3 | nop
|
||||
nop | clipw.xyz vf15, vf15
|
||||
nop | nop
|
||||
nop | nop
|
||||
nop | nop
|
||||
fcor vi01, 0xfffefb | nop
|
||||
ibne vi00, vi01, L37 | nop
|
||||
fcand vi01, 0x4 | nop
|
||||
ibne vi00, vi01, L38 | nop
|
||||
fcand vi01, 0x100 | nop
|
||||
ibne vi00, vi01, L39 | nop
|
||||
nop | nop
|
||||
sqi.xyzw vf17, vi08 | nop
|
||||
sqi.xyzw vf20, vi08 | nop
|
||||
sqi.xyzw vf14, vi08 | nop
|
||||
L25:
|
||||
move.xyzw vf17, vf18 | nop
|
||||
iaddi vi09, vi09, -0x1 | nop
|
||||
move.xyzw vf20, vf21 | nop
|
||||
ibne vi00, vi09, L24 | nop
|
||||
move.xyzw vf14, vf15 | nop
|
||||
lq.xyzw vf17, 0(vi05) | nop
|
||||
lq.xyzw vf20, 1(vi05) | nop
|
||||
lq.xyzw vf14, 2(vi05) | nop
|
||||
ior vi07, vi05, vi00 | nop
|
||||
sqi.xyzw vf17, vi08 | nop
|
||||
sqi.xyzw vf20, vi08 | nop
|
||||
sqi.xyzw vf14, vi08 | nop
|
||||
ibeq vi00, vi10, L30 | nop
|
||||
ior vi09, vi10, vi00 | nop
|
||||
ior vi08, vi07, vi00 | nop
|
||||
lq.xyzw vf14, 2(vi07) | nop
|
||||
ior vi10, vi09, vi00 | nop
|
||||
lq.xyzw vf17, 0(vi07) | nop
|
||||
lq.xyzw vf20, 1(vi07) | nop
|
||||
iaddi vi07, vi07, 0x3 | clipw.xyz vf14, vf14
|
||||
L26:
|
||||
lq.xyzw vf15, 2(vi07) | nop
|
||||
lq.xyzw vf18, 0(vi07) | nop
|
||||
lq.xyzw vf21, 1(vi07) | nop
|
||||
iaddi vi07, vi07, 0x3 | nop
|
||||
nop | clipw.xyz vf15, vf15
|
||||
nop | nop
|
||||
nop | nop
|
||||
nop | nop
|
||||
fcor vi01, 0xffff7d | nop
|
||||
ibne vi00, vi01, L40 | nop
|
||||
fcand vi01, 0x2 | nop
|
||||
ibne vi00, vi01, L41 | nop
|
||||
fcand vi01, 0x80 | nop
|
||||
ibne vi00, vi01, L42 | nop
|
||||
nop | nop
|
||||
sqi.xyzw vf17, vi08 | nop
|
||||
sqi.xyzw vf20, vi08 | nop
|
||||
sqi.xyzw vf14, vi08 | nop
|
||||
L27:
|
||||
move.xyzw vf17, vf18 | nop
|
||||
iaddi vi09, vi09, -0x1 | nop
|
||||
move.xyzw vf20, vf21 | nop
|
||||
ibne vi00, vi09, L26 | nop
|
||||
move.xyzw vf14, vf15 | nop
|
||||
lq.xyzw vf17, 0(vi05) | nop
|
||||
lq.xyzw vf20, 1(vi05) | nop
|
||||
lq.xyzw vf14, 2(vi05) | nop
|
||||
ior vi07, vi05, vi00 | nop
|
||||
sqi.xyzw vf17, vi08 | nop
|
||||
sqi.xyzw vf20, vi08 | nop
|
||||
sqi.xyzw vf14, vi08 | nop
|
||||
ibeq vi00, vi10, L30 | nop
|
||||
ior vi09, vi10, vi00 | nop
|
||||
ior vi08, vi07, vi00 | nop
|
||||
lq.xyzw vf14, 2(vi07) | nop
|
||||
ior vi10, vi09, vi00 | nop
|
||||
lq.xyzw vf17, 0(vi07) | nop
|
||||
lq.xyzw vf20, 1(vi07) | nop
|
||||
iaddi vi07, vi07, 0x3 | clipw.xyz vf14, vf14
|
||||
L28:
|
||||
lq.xyzw vf15, 2(vi07) | nop
|
||||
lq.xyzw vf18, 0(vi07) | nop
|
||||
lq.xyzw vf21, 1(vi07) | nop
|
||||
iaddi vi07, vi07, 0x3 | nop
|
||||
nop | clipw.xyz vf15, vf15
|
||||
nop | nop
|
||||
nop | nop
|
||||
nop | nop
|
||||
fcor vi01, 0xffffbe | nop
|
||||
ibne vi00, vi01, L43 | nop
|
||||
fcand vi01, 0x1 | nop
|
||||
ibne vi00, vi01, L44 | nop
|
||||
fcand vi01, 0x40 | nop
|
||||
ibne vi00, vi01, L45 | nop
|
||||
nop | nop
|
||||
sqi.xyzw vf17, vi08 | nop
|
||||
sqi.xyzw vf20, vi08 | nop
|
||||
sqi.xyzw vf14, vi08 | nop
|
||||
L29:
|
||||
move.xyzw vf17, vf18 | nop
|
||||
iaddi vi09, vi09, -0x1 | nop
|
||||
move.xyzw vf20, vf21 | nop
|
||||
ibne vi00, vi09, L28 | nop
|
||||
move.xyzw vf14, vf15 | nop
|
||||
lq.xyzw vf17, 0(vi05) | nop
|
||||
lq.xyzw vf20, 1(vi05) | nop
|
||||
lq.xyzw vf14, 2(vi05) | nop
|
||||
ior vi07, vi05, vi00 | nop
|
||||
sqi.xyzw vf17, vi08 | nop
|
||||
sqi.xyzw vf20, vi08 | nop
|
||||
sqi.xyzw vf14, vi08 | nop
|
||||
ibeq vi00, vi10, L30 | nop
|
||||
ior vi09, vi10, vi00 | nop
|
||||
L30:
|
||||
jr vi11 | nop
|
||||
nop | nop
|
||||
L31:
|
||||
b L21 | nop
|
||||
iaddi vi10, vi10, -0x1 | nop
|
||||
L32:
|
||||
sqi.xyzw vf17, vi08 | sub.xyzw vf16, vf15, vf14
|
||||
sqi.xyzw vf20, vi08 | sub.xyzw vf19, vf18, vf17
|
||||
sqi.xyzw vf14, vi08 | sub.xyzw vf22, vf21, vf20
|
||||
ibeq vi07, vi08, L21 | nop
|
||||
nop | addz.w vf13, vf16, vf16
|
||||
nop | addw.z vf13, vf14, vf14
|
||||
div Q, vf13.z, vf13.w | nop
|
||||
waitq | nop
|
||||
nop | mul.xyzw vf19, vf19, Q
|
||||
nop | mul.xyzw vf22, vf22, Q
|
||||
nop | mul.xyzw vf16, vf16, Q
|
||||
nop | sub.xyzw vf19, vf17, vf19
|
||||
nop | sub.xyzw vf22, vf20, vf22
|
||||
nop | sub.xyzw vf16, vf14, vf16
|
||||
iaddi vi10, vi10, 0x1 | nop
|
||||
sqi.xyzw vf19, vi08 | nop
|
||||
sqi.xyzw vf22, vi08 | nop
|
||||
b L21 | nop
|
||||
sqi.xyzw vf16, vi08 | nop
|
||||
L33:
|
||||
nop | sub.xyzw vf16, vf14, vf15
|
||||
nop | sub.xyzw vf19, vf17, vf18
|
||||
nop | sub.xyzw vf22, vf20, vf21
|
||||
nop | addz.w vf13, vf16, vf16
|
||||
nop | addw.z vf13, vf15, vf15
|
||||
div Q, vf13.z, vf13.w | nop
|
||||
waitq | nop
|
||||
nop | mul.xyzw vf19, vf19, Q
|
||||
nop | mul.xyzw vf22, vf22, Q
|
||||
nop | mul.xyzw vf16, vf16, Q
|
||||
nop | sub.xyzw vf19, vf18, vf19
|
||||
nop | sub.xyzw vf22, vf21, vf22
|
||||
nop | sub.xyzw vf16, vf15, vf16
|
||||
sqi.xyzw vf19, vi08 | nop
|
||||
sqi.xyzw vf22, vi08 | nop
|
||||
b L21 | nop
|
||||
sqi.xyzw vf16, vi08 | nop
|
||||
L34:
|
||||
b L23 | nop
|
||||
iaddi vi10, vi10, -0x1 | nop
|
||||
L35:
|
||||
sqi.xyzw vf17, vi08 | sub.xyzw vf16, vf15, vf14
|
||||
sqi.xyzw vf20, vi08 | sub.xyzw vf19, vf18, vf17
|
||||
sqi.xyzw vf14, vi08 | sub.xyzw vf22, vf21, vf20
|
||||
ibeq vi07, vi08, L23 | nop
|
||||
nop | addy.w vf13, vf16, vf16
|
||||
nop | addw.y vf13, vf14, vf14
|
||||
div Q, vf13.y, vf13.w | nop
|
||||
waitq | nop
|
||||
nop | mul.xyzw vf19, vf19, Q
|
||||
nop | mul.xyzw vf22, vf22, Q
|
||||
nop | mul.xyzw vf16, vf16, Q
|
||||
nop | sub.xyzw vf19, vf17, vf19
|
||||
nop | sub.xyzw vf22, vf20, vf22
|
||||
nop | sub.xyzw vf16, vf14, vf16
|
||||
iaddi vi10, vi10, 0x1 | nop
|
||||
sqi.xyzw vf19, vi08 | nop
|
||||
sqi.xyzw vf22, vi08 | nop
|
||||
b L23 | nop
|
||||
sqi.xyzw vf16, vi08 | nop
|
||||
L36:
|
||||
nop | sub.xyzw vf16, vf14, vf15
|
||||
nop | sub.xyzw vf19, vf17, vf18
|
||||
nop | sub.xyzw vf22, vf20, vf21
|
||||
nop | addy.w vf13, vf16, vf16
|
||||
nop | addw.y vf13, vf15, vf15
|
||||
div Q, vf13.y, vf13.w | nop
|
||||
waitq | nop
|
||||
nop | mul.xyzw vf19, vf19, Q
|
||||
nop | mul.xyzw vf22, vf22, Q
|
||||
nop | mul.xyzw vf16, vf16, Q
|
||||
nop | sub.xyzw vf19, vf18, vf19
|
||||
nop | sub.xyzw vf22, vf21, vf22
|
||||
nop | sub.xyzw vf16, vf15, vf16
|
||||
sqi.xyzw vf19, vi08 | nop
|
||||
sqi.xyzw vf22, vi08 | nop
|
||||
b L23 | nop
|
||||
sqi.xyzw vf16, vi08 | nop
|
||||
L37:
|
||||
b L25 | nop
|
||||
iaddi vi10, vi10, -0x1 | nop
|
||||
L38:
|
||||
sqi.xyzw vf17, vi08 | sub.xyzw vf16, vf15, vf14
|
||||
sqi.xyzw vf20, vi08 | sub.xyzw vf19, vf18, vf17
|
||||
sqi.xyzw vf14, vi08 | sub.xyzw vf22, vf21, vf20
|
||||
ibeq vi07, vi08, L25 | nop
|
||||
nop | suby.w vf13, vf16, vf16
|
||||
nop | subw.y vf13, vf14, vf14
|
||||
div Q, vf13.y, vf13.w | nop
|
||||
waitq | nop
|
||||
nop | mul.xyzw vf19, vf19, Q
|
||||
nop | mul.xyzw vf22, vf22, Q
|
||||
nop | mul.xyzw vf16, vf16, Q
|
||||
nop | add.xyzw vf19, vf17, vf19
|
||||
nop | add.xyzw vf22, vf20, vf22
|
||||
nop | add.xyzw vf16, vf14, vf16
|
||||
iaddi vi10, vi10, 0x1 | nop
|
||||
sqi.xyzw vf19, vi08 | nop
|
||||
sqi.xyzw vf22, vi08 | nop
|
||||
b L25 | nop
|
||||
sqi.xyzw vf16, vi08 | nop
|
||||
L39:
|
||||
nop | sub.xyzw vf16, vf14, vf15
|
||||
nop | sub.xyzw vf19, vf17, vf18
|
||||
nop | sub.xyzw vf22, vf20, vf21
|
||||
nop | suby.w vf13, vf16, vf16
|
||||
nop | subw.y vf13, vf15, vf15
|
||||
div Q, vf13.y, vf13.w | nop
|
||||
waitq | nop
|
||||
nop | mul.xyzw vf19, vf19, Q
|
||||
nop | mul.xyzw vf22, vf22, Q
|
||||
nop | mul.xyzw vf16, vf16, Q
|
||||
nop | add.xyzw vf19, vf18, vf19
|
||||
nop | add.xyzw vf22, vf21, vf22
|
||||
nop | add.xyzw vf16, vf15, vf16
|
||||
sqi.xyzw vf19, vi08 | nop
|
||||
sqi.xyzw vf22, vi08 | nop
|
||||
b L25 | nop
|
||||
sqi.xyzw vf16, vi08 | nop
|
||||
L40:
|
||||
b L27 | nop
|
||||
iaddi vi10, vi10, -0x1 | nop
|
||||
L41:
|
||||
sqi.xyzw vf17, vi08 | sub.xyzw vf16, vf15, vf14
|
||||
sqi.xyzw vf20, vi08 | sub.xyzw vf19, vf18, vf17
|
||||
sqi.xyzw vf14, vi08 | sub.xyzw vf22, vf21, vf20
|
||||
ibeq vi07, vi08, L27 | nop
|
||||
nop | addx.w vf13, vf16, vf16
|
||||
nop | addw.x vf13, vf14, vf14
|
||||
div Q, vf13.x, vf13.w | nop
|
||||
waitq | nop
|
||||
nop | mul.xyzw vf19, vf19, Q
|
||||
nop | mul.xyzw vf22, vf22, Q
|
||||
nop | mul.xyzw vf16, vf16, Q
|
||||
nop | sub.xyzw vf19, vf17, vf19
|
||||
nop | sub.xyzw vf22, vf20, vf22
|
||||
nop | sub.xyzw vf16, vf14, vf16
|
||||
iaddi vi10, vi10, 0x1 | nop
|
||||
sqi.xyzw vf19, vi08 | nop
|
||||
sqi.xyzw vf22, vi08 | nop
|
||||
b L27 | nop
|
||||
sqi.xyzw vf16, vi08 | nop
|
||||
L42:
|
||||
nop | sub.xyzw vf16, vf14, vf15
|
||||
nop | sub.xyzw vf19, vf17, vf18
|
||||
nop | sub.xyzw vf22, vf20, vf21
|
||||
nop | addx.w vf13, vf16, vf16
|
||||
nop | addw.x vf13, vf15, vf15
|
||||
div Q, vf13.x, vf13.w | nop
|
||||
waitq | nop
|
||||
nop | mul.xyzw vf19, vf19, Q
|
||||
nop | mul.xyzw vf22, vf22, Q
|
||||
nop | mul.xyzw vf16, vf16, Q
|
||||
nop | sub.xyzw vf19, vf18, vf19
|
||||
nop | sub.xyzw vf22, vf21, vf22
|
||||
nop | sub.xyzw vf16, vf15, vf16
|
||||
sqi.xyzw vf19, vi08 | nop
|
||||
sqi.xyzw vf22, vi08 | nop
|
||||
b L27 | nop
|
||||
sqi.xyzw vf16, vi08 | nop
|
||||
L43:
|
||||
b L29 | nop
|
||||
iaddi vi10, vi10, -0x1 | nop
|
||||
L44:
|
||||
sqi.xyzw vf17, vi08 | sub.xyzw vf16, vf15, vf14
|
||||
sqi.xyzw vf20, vi08 | sub.xyzw vf19, vf18, vf17
|
||||
sqi.xyzw vf14, vi08 | sub.xyzw vf22, vf21, vf20
|
||||
ibeq vi07, vi08, L29 | nop
|
||||
nop | subx.w vf13, vf16, vf16
|
||||
nop | subw.x vf13, vf14, vf14
|
||||
div Q, vf13.x, vf13.w | nop
|
||||
waitq | nop
|
||||
nop | mul.xyzw vf19, vf19, Q
|
||||
nop | mul.xyzw vf22, vf22, Q
|
||||
nop | mul.xyzw vf16, vf16, Q
|
||||
nop | add.xyzw vf19, vf17, vf19
|
||||
nop | add.xyzw vf22, vf20, vf22
|
||||
nop | add.xyzw vf16, vf14, vf16
|
||||
iaddi vi10, vi10, 0x1 | nop
|
||||
sqi.xyzw vf19, vi08 | nop
|
||||
sqi.xyzw vf22, vi08 | nop
|
||||
b L29 | nop
|
||||
sqi.xyzw vf16, vi08 | nop
|
||||
L45:
|
||||
nop | sub.xyzw vf16, vf14, vf15
|
||||
nop | sub.xyzw vf19, vf17, vf18
|
||||
nop | sub.xyzw vf22, vf20, vf21
|
||||
nop | subx.w vf13, vf16, vf16
|
||||
nop | subw.x vf13, vf15, vf15
|
||||
div Q, vf13.x, vf13.w | nop
|
||||
waitq | nop
|
||||
nop | mul.xyzw vf19, vf19, Q
|
||||
nop | mul.xyzw vf22, vf22, Q
|
||||
nop | mul.xyzw vf16, vf16, Q
|
||||
nop | add.xyzw vf19, vf18, vf19
|
||||
nop | add.xyzw vf22, vf21, vf22
|
||||
nop | add.xyzw vf16, vf15, vf16
|
||||
sqi.xyzw vf19, vi08 | nop
|
||||
sqi.xyzw vf22, vi08 | nop
|
||||
b L29 | nop
|
||||
sqi.xyzw vf16, vi08 | nop
|
||||
File diff suppressed because it is too large
Load Diff
@@ -35,6 +35,11 @@
|
||||
"(method 3 sky-vertex)",
|
||||
// cache asm
|
||||
"invalidate-cache-line",
|
||||
// sprite
|
||||
// multiple defined
|
||||
"(method 3 sprite-aux-list)",
|
||||
// sprite-distort
|
||||
"sprite-draw-distorters", // uses clipping flag.
|
||||
// asm, weird vector dot
|
||||
"(method 17 trsqv)",
|
||||
// history - rgba issues
|
||||
|
||||
Reference in New Issue
Block a user