mirror of
https://github.com/open-goal/jak-project
synced 2026-09-02 18:12:50 -04:00
decompile display (#408)
This commit is contained in:
@@ -15,7 +15,11 @@ namespace decompiler {
|
||||
|
||||
BitfieldStaticDefElement::BitfieldStaticDefElement(const TypeSpec& type,
|
||||
const std::vector<BitFieldDef>& field_defs)
|
||||
: m_type(type), m_field_defs(field_defs) {}
|
||||
: m_type(type), m_field_defs(field_defs) {
|
||||
for (auto& x : field_defs) {
|
||||
x.value->parent_element = this;
|
||||
}
|
||||
}
|
||||
|
||||
BitfieldStaticDefElement::BitfieldStaticDefElement(
|
||||
const TypeSpec& type,
|
||||
@@ -53,11 +57,28 @@ goos::Object BitfieldStaticDefElement::to_form_internal(const Env& env) const {
|
||||
|
||||
void BitfieldStaticDefElement::apply(const std::function<void(FormElement*)>& f) {
|
||||
f(this);
|
||||
for (auto& x : m_field_defs) {
|
||||
x.value->apply(f);
|
||||
}
|
||||
}
|
||||
|
||||
void BitfieldStaticDefElement::apply_form(const std::function<void(Form*)>&) {}
|
||||
void BitfieldStaticDefElement::collect_vars(RegAccessSet&, bool) const {}
|
||||
void BitfieldStaticDefElement::get_modified_regs(RegSet&) const {}
|
||||
void BitfieldStaticDefElement::apply_form(const std::function<void(Form*)>& f) {
|
||||
for (auto& x : m_field_defs) {
|
||||
x.value->apply_form(f);
|
||||
}
|
||||
}
|
||||
void BitfieldStaticDefElement::collect_vars(RegAccessSet& vars, bool recursive) const {
|
||||
if (recursive) {
|
||||
for (auto& x : m_field_defs) {
|
||||
x.value->collect_vars(vars, recursive);
|
||||
}
|
||||
}
|
||||
}
|
||||
void BitfieldStaticDefElement::get_modified_regs(RegSet& regs) const {
|
||||
for (auto& x : m_field_defs) {
|
||||
x.value->get_modified_regs(regs);
|
||||
}
|
||||
}
|
||||
|
||||
ModifiedCopyBitfieldElement::ModifiedCopyBitfieldElement(
|
||||
const TypeSpec& type,
|
||||
|
||||
@@ -3511,24 +3511,87 @@
|
||||
:flag-assert #x900000028
|
||||
)
|
||||
|
||||
(defenum gs-reg
|
||||
:type uint8
|
||||
(prim 0)
|
||||
(rgbaq 1)
|
||||
(st 2)
|
||||
(uv 3)
|
||||
(xyzf2 4)
|
||||
(xyz2 5)
|
||||
(tex0-1 6)
|
||||
(tex0-2 7)
|
||||
(clamp-1 8)
|
||||
(clamp-2 9)
|
||||
(fog 10)
|
||||
(xyzf3 12)
|
||||
(xyz3 13)
|
||||
(tex1-1 20)
|
||||
(tex1-2 21)
|
||||
(tex2-1 22)
|
||||
(tex2-2 23)
|
||||
(xyoffset-1 24)
|
||||
(xyoffset-2 25)
|
||||
(prmodecont 26)
|
||||
(prmode 27)
|
||||
(texclut 28)
|
||||
(scanmsk 34)
|
||||
(miptbp1-1 52)
|
||||
(miptbp1-2 53)
|
||||
(miptbp2-1 54)
|
||||
(miptbp2-2 55)
|
||||
(texa 59)
|
||||
(fogcol 61)
|
||||
(texflush 63)
|
||||
(scissor-1 64)
|
||||
(scissor-2 65)
|
||||
(alpha-1 66)
|
||||
(alpha-2 67)
|
||||
(dimx 68)
|
||||
(dthe 69)
|
||||
(colclamp 70)
|
||||
(test-1 71)
|
||||
(test-2 72)
|
||||
(pabe 73)
|
||||
(fba-1 74)
|
||||
(fba-2 75)
|
||||
(frame-1 76)
|
||||
(frame-2 77)
|
||||
(zbuf-1 78)
|
||||
(zbuf-2 79)
|
||||
(bitbltbuf 80)
|
||||
(trxpos 81)
|
||||
(trxreg 82)
|
||||
(trxdir 83)
|
||||
(hwreg 84)
|
||||
(signal 96)
|
||||
(finish 97)
|
||||
(label 98)
|
||||
)
|
||||
|
||||
(defenum gs-reg64
|
||||
:type uint64
|
||||
:copy-entries gs-reg
|
||||
)
|
||||
|
||||
;; the "addr" fields represent GS register addresses
|
||||
(deftype draw-env (structure)
|
||||
((frame1 gs-frame :offset-assert 0)
|
||||
(frame1addr int64 :offset-assert 8)
|
||||
(frame1addr gs-reg64 :offset-assert 8)
|
||||
(zbuf1 gs-zbuf :offset-assert 16)
|
||||
(zbuf1addr int64 :offset-assert 24)
|
||||
(zbuf1addr gs-reg64 :offset-assert 24)
|
||||
(xyoffset1 gs-xy-offset :offset-assert 32)
|
||||
(xyoffset1addr int64 :offset-assert 40)
|
||||
(xyoffset1addr gs-reg64 :offset-assert 40)
|
||||
(scissor1 gs-scissor :offset-assert 48)
|
||||
(scissor1addr int64 :offset-assert 56)
|
||||
(scissor1addr gs-reg64 :offset-assert 56)
|
||||
(prmodecont gs-prmode-cont :offset-assert 64)
|
||||
(prmodecontaddr int64 :offset-assert 72)
|
||||
(prmodecontaddr gs-reg64 :offset-assert 72)
|
||||
(colclamp gs-color-clamp :offset-assert 80)
|
||||
(colclampaddr int64 :offset-assert 88)
|
||||
(colclampaddr gs-reg64 :offset-assert 88)
|
||||
(dthe gs-dthe :offset-assert 96)
|
||||
(dtheaddr int64 :offset-assert 104)
|
||||
(dtheaddr gs-reg64 :offset-assert 104)
|
||||
(test1 gs-test :offset-assert 112)
|
||||
(test1addr int64 :offset-assert 120)
|
||||
(test1addr gs-reg64 :offset-assert 120)
|
||||
)
|
||||
:method-count-assert 9
|
||||
:size-assert #x80
|
||||
@@ -3575,11 +3638,11 @@
|
||||
((display-env0 display-env :inline :offset-assert 8)
|
||||
(display-env1 display-env :inline :offset-assert 48)
|
||||
(display-env2 display-env :inline :offset-assert 88)
|
||||
(gif-tag0 uint128 :offset-assert 128)
|
||||
(gif-tag0 gs-gif-tag :inline :offset-assert 128)
|
||||
(draw0 draw-env :inline :offset-assert 144)
|
||||
(gif-tag1 uint128 :offset-assert 272)
|
||||
(gif-tag1 gs-gif-tag :inline :offset-assert 272)
|
||||
(draw1 draw-env :inline :offset-assert 288)
|
||||
(gif-tag2 uint128 :offset-assert 416)
|
||||
(gif-tag2 gs-gif-tag :inline :offset-assert 416)
|
||||
(draw2 draw-env :inline :offset-assert 432)
|
||||
(on-screen int32 :offset-assert 560)
|
||||
(last-screen int32 :offset-assert 564)
|
||||
@@ -4423,7 +4486,7 @@
|
||||
(define-extern init-for-transform function)
|
||||
(define-extern move-target-from-pad (function transform int none))
|
||||
(define-extern transform-point-vector! function)
|
||||
(define-extern fog-corrector-setup (function fog-corrector math-camera float))
|
||||
(define-extern fog-corrector-setup (function fog-corrector math-camera none))
|
||||
;;(define-extern fog-corrector object) ;; unknown type
|
||||
(define-extern math-cam-start-smoothing (function float float quaternion))
|
||||
(define-extern update-math-camera (function math-camera symbol symbol math-camera))
|
||||
@@ -33318,7 +33381,7 @@
|
||||
;;(define-extern font-context object) ;; unknown type
|
||||
(define-extern *font-work* font-work) ;; unknown type
|
||||
;;(define-extern decomp-work object) ;; unknown type
|
||||
(define-extern draw-string-xy (function string dma-buffer int int int none))
|
||||
(define-extern draw-string-xy (function string dma-buffer int int int int none))
|
||||
;;(define-extern end-draw object) ;; unknown type
|
||||
(define-extern start function)
|
||||
;;(define-extern pal object) ;; unknown type
|
||||
|
||||
@@ -238,7 +238,8 @@
|
||||
["L56", "uint64", true],
|
||||
["L57", "uint64", true],
|
||||
["L58", "uint64", true],
|
||||
["L80", "rgba", true]
|
||||
["L80", "rgba", true],
|
||||
["L81", "uint64", true]
|
||||
],
|
||||
|
||||
"text-h": [["L2", "_auto_", true]],
|
||||
|
||||
@@ -146,12 +146,10 @@
|
||||
],
|
||||
|
||||
// dma-buffer
|
||||
"dma-buffer-add-vu-function": [
|
||||
[[9, 33], "t2", "dma-packet"]
|
||||
],
|
||||
"dma-buffer-add-vu-function": [[[9, 33], "t2", "dma-packet"]],
|
||||
|
||||
// dma-bucket
|
||||
"dma-buffer-add-buckets":[
|
||||
"dma-buffer-add-buckets": [
|
||||
[[1, 4], "v1", "dma-bucket"],
|
||||
[5, "v1", "pointer"],
|
||||
[[9, 11], "v1", "dma-bucket"],
|
||||
@@ -198,7 +196,7 @@
|
||||
|
||||
//[133, "v1", "(pointer uint64)"],
|
||||
[152, "v1", "(pointer uint64)"],
|
||||
|
||||
|
||||
[167, "v1", "(pointer uint64)"],
|
||||
[176, "v1", "(pointer uint64)"],
|
||||
[198, "v1", "(pointer uint64)"],
|
||||
@@ -227,7 +225,100 @@
|
||||
],
|
||||
|
||||
// DISPLAY
|
||||
"put-display-alpha-env": [
|
||||
[[0, 5], "v1", "gs-bank"]
|
||||
"put-display-alpha-env": [[[0, 5], "v1", "gs-bank"]],
|
||||
|
||||
"(method 13 profile-bar)": [
|
||||
[[27, 43], "t2", "dma-packet"],
|
||||
[[46, 56], "t2", "gs-gif-tag"],
|
||||
[[65, 67], "t3", "(pointer gs-prim)"],
|
||||
[67, "t3", "(pointer uint64)"],
|
||||
[79, "t3", "(pointer gs-xyzf)"],
|
||||
[110, "t2", "(pointer gs-xyzf)"]
|
||||
],
|
||||
|
||||
"draw-sprite2d-xy": [
|
||||
[[41, 45], "a3", "dma-packet"],
|
||||
[[51, 54], "a3", "gs-gif-tag"],
|
||||
[59, "a3", "(pointer gs-prim)"],
|
||||
[61, "a3", "(pointer gs-rgbaq)"],
|
||||
[72, "a3", "(pointer gs-xyzf)"],
|
||||
[97, "a3", "(pointer gs-xyzf)"],
|
||||
[[106, 117], "v1", "(pointer dma-tag)"],
|
||||
[109, "a2", "dma-tag"]
|
||||
],
|
||||
|
||||
"draw-quad2d": [
|
||||
[[22, 28], "t1", "dma-packet"],
|
||||
[[31, 37], "t1", "gs-gif-tag"],
|
||||
[42, "t1", "(pointer gs-prim)"],
|
||||
[44, "t1", "(pointer gs-rgbaq)"],
|
||||
[52, "t1", "(pointer gs-xyzf)"],
|
||||
[54, "t1", "(pointer gs-rgbaq)"],
|
||||
[67, "t1", "(pointer gs-xyzf)"],
|
||||
[69, "t1", "(pointer gs-rgbaq)"],
|
||||
[86, "t1", "(pointer gs-xyzf)"],
|
||||
[88, "t1", "(pointer gs-rgbaq)"],
|
||||
[110, "t1", "(pointer gs-xyzf)"],
|
||||
[111, "t1", "(pointer uint64)"],
|
||||
[[120, 131], "v1", "(pointer dma-tag)"],
|
||||
[123, "a2", "dma-tag"]
|
||||
],
|
||||
|
||||
"set-display-gs-state": [
|
||||
[[3, 10], "t3", "dma-packet"],
|
||||
[[13, 19], "t3", "gs-gif-tag"],
|
||||
[30, "t3", "(pointer gs-scissor)"],
|
||||
[32, "t3", "(pointer gs-reg64)"],
|
||||
[33, "t3", "(pointer gs-xy-offset)"],
|
||||
[35, "t3", "(pointer gs-reg64)"],
|
||||
[46, "t3", "(pointer gs-frame)"],
|
||||
[48, "t3", "(pointer gs-reg64)"],
|
||||
[50, "t3", "(pointer gs-test)"],
|
||||
[52, "t3", "(pointer gs-reg64)"],
|
||||
[54, "t3", "(pointer gs-texa)"],
|
||||
[56, "t3", "(pointer gs-reg64)"],
|
||||
[58, "t3", "(pointer gs-zbuf)"],
|
||||
[60, "t3", "(pointer gs-reg64)"],
|
||||
[61, "t3", "(pointer uint64)"],
|
||||
[63, "t3", "(pointer gs-reg64)"]
|
||||
],
|
||||
|
||||
"set-display-gs-state-offset": [
|
||||
[[3, 10], "t5", "dma-packet"],
|
||||
[[13, 19], "t5", "gs-gif-tag"],
|
||||
[30, "t5", "(pointer gs-scissor)"],
|
||||
[32, "t5", "(pointer gs-reg64)"],
|
||||
[40, "t5", "(pointer gs-xy-offset)"],
|
||||
[42, "t5", "(pointer gs-reg64)"],
|
||||
[53, "t5", "(pointer gs-frame)"],
|
||||
[55, "t5", "(pointer gs-reg64)"],
|
||||
[57, "t5", "(pointer gs-test)"],
|
||||
[59, "t5", "(pointer gs-reg64)"],
|
||||
[61, "t5", "(pointer gs-texa)"],
|
||||
[63, "t5", "(pointer gs-reg64)"],
|
||||
[65, "t5", "(pointer gs-zbuf)"],
|
||||
[67, "t5", "(pointer gs-reg64)"],
|
||||
[68, "t5", "(pointer uint64)"],
|
||||
[70, "t5", "(pointer gs-reg64)"]
|
||||
],
|
||||
|
||||
"reset-display-gs-state": [
|
||||
[[9, 16], "t0", "dma-packet"],
|
||||
[[19, 25], "t0", "gs-gif-tag"],
|
||||
[34, "a3", "(pointer gs-scissor)"],
|
||||
[36, "a3", "(pointer gs-reg64)"],
|
||||
[44, "a3", "(pointer gs-xy-offset)"],
|
||||
[46, "a3", "(pointer gs-reg64)"],
|
||||
[51, "a3", "(pointer gs-frame)"],
|
||||
[53, "a3", "(pointer gs-reg64)"],
|
||||
|
||||
[55, "a3", "(pointer gs-test)"],
|
||||
[57, "a3", "(pointer gs-reg64)"],
|
||||
[60, "a3", "(pointer gs-texa)"],
|
||||
[62, "a3", "(pointer gs-reg64)"],
|
||||
[64, "a3", "(pointer gs-zbuf)"],
|
||||
[66, "a3", "(pointer gs-reg64)"],
|
||||
[67, "a3", "(pointer uint64)"],
|
||||
[69, "a3", "(pointer gs-reg64)"]
|
||||
]
|
||||
}
|
||||
|
||||
@@ -892,31 +892,31 @@
|
||||
|
||||
"file-info-correct-version?": {
|
||||
"args": ["info", "kind", "version-override"],
|
||||
"vars": {"s5-0":"expected-version", "s4-0":"kind-name"}
|
||||
"vars": { "s5-0": "expected-version", "s4-0": "kind-name" }
|
||||
},
|
||||
|
||||
"(method 0 load-dir)": {
|
||||
"args": ["allocation", "type-to-make", "length", "unk"],
|
||||
"vars": {"s4-0": "obj"}
|
||||
"vars": { "s4-0": "obj" }
|
||||
},
|
||||
|
||||
"(method 0 load-dir-art-group)": {
|
||||
"args": ["allocation", "type-to-make", "length", "unk"],
|
||||
"vars": {"v0-0": "obj"}
|
||||
"vars": { "v0-0": "obj" }
|
||||
},
|
||||
|
||||
"(method 0 external-art-buffer)": {
|
||||
"args": ["allocation", "type-to-make", "idx"],
|
||||
"vars": {"v0-0":"obj"}
|
||||
"vars": { "v0-0": "obj" }
|
||||
},
|
||||
|
||||
"(method 0 external-art-control)": {
|
||||
"vars": {"gp-0":"obj", "s4-0":"buff-idx", "v1-9":"rec-idx"}
|
||||
"vars": { "gp-0": "obj", "s4-0": "buff-idx", "v1-9": "rec-idx" }
|
||||
},
|
||||
|
||||
"(method 9 display)": {
|
||||
"args": ["obj", "delta-seconds"],
|
||||
"vars": { "gp-0": "obj", "s5-0": "delta" }
|
||||
"args": ["obj", "slowdown"],
|
||||
"vars": { "gp-0": "obj", "s5-0": "ratio" }
|
||||
},
|
||||
|
||||
"set-draw-env-offset": {
|
||||
@@ -932,11 +932,11 @@
|
||||
},
|
||||
|
||||
"set-display": {
|
||||
"args": ["display", "psm", "w", "h", "ztest", "zpsm"]
|
||||
"args": ["disp", "psm", "w", "h", "ztest", "zpsm"]
|
||||
},
|
||||
|
||||
"set-display2": {
|
||||
"args": ["display", "psm", "w", "h", "ztest", "zpsm"]
|
||||
"args": ["disp", "psm", "w", "h", "ztest", "zpsm"]
|
||||
},
|
||||
|
||||
"(method 11 profile-bar)": {
|
||||
@@ -990,6 +990,10 @@
|
||||
"args": ["exp", "maximum", "msg-exp", "msg-max"]
|
||||
},
|
||||
|
||||
"fog-corrector-setup": {
|
||||
"args": ["corrector", "math-cam"]
|
||||
},
|
||||
|
||||
"update-math-camera": {
|
||||
"args": ["math-cam", "ignored", "aspect"],
|
||||
"vars": {
|
||||
@@ -1058,6 +1062,94 @@
|
||||
}
|
||||
},
|
||||
|
||||
"(method 13 profile-bar)": {
|
||||
"args": ["obj", "buf", "bar-pos"],
|
||||
"vars": {
|
||||
"v1-1": "height",
|
||||
"a1-4": "block-idx",
|
||||
"a2-1": "block-count",
|
||||
"t0-0": "left",
|
||||
"v1-3": "end-time",
|
||||
"s4-0": "worst-time-cache",
|
||||
"a3-1": "screen-y",
|
||||
"t2-0": ["direct-tag", "dma-packet"],
|
||||
"t2-2": ["start-gif-tag", "gs-gif-tag"],
|
||||
"t1-4": "block"
|
||||
}
|
||||
},
|
||||
|
||||
"draw-sprite2d-xy": {
|
||||
"args": ["buf", "x", "y", "w", "h", "color"],
|
||||
"vars": {
|
||||
"t2-1": "context",
|
||||
"a0-3": "draw-x",
|
||||
"a1-9": "draw-y",
|
||||
"t1-2": "draw-w",
|
||||
"t0-2": "draw-h",
|
||||
"a3-2": ["dma", "dma-packet"],
|
||||
"a3-4": ["gif", "gs-gif-tag"],
|
||||
"v1-10": ["end-dma", "dma-packet"],
|
||||
"a0-13": "total-qwc",
|
||||
"a3-6": "gif-buf"
|
||||
}
|
||||
},
|
||||
|
||||
"draw-quad2d": {
|
||||
"args": ["buf", "context"],
|
||||
"vars": {
|
||||
"a2-1": "draw-x",
|
||||
"a3-7": "draw-y",
|
||||
"t3-0": "draw-w",
|
||||
"t2-0": "draw-h",
|
||||
"v1-8": "end-dma",
|
||||
"t1-0": ["dma", "dma-packet"],
|
||||
"t1-2": ["gif", "gs-gif-tag"],
|
||||
"t1-4": "gif-buf",
|
||||
"a1-11": "total-qwc"
|
||||
}
|
||||
},
|
||||
|
||||
"set-display-gs-state": {
|
||||
"args": ["dma-buf", "fbp", "scx", "scy", "fb-msk", "psm"],
|
||||
"vars": {
|
||||
"t3-0": ["dma", "dma-packet"],
|
||||
"t3-2": ["gif", "gs-gif-tag"],
|
||||
"t3-4": "gif-buf",
|
||||
"t2-0": "fbw"
|
||||
}
|
||||
},
|
||||
|
||||
"set-display-gs-state-offset": {
|
||||
"args": [
|
||||
"dma-buf",
|
||||
"fbp",
|
||||
"width",
|
||||
"height",
|
||||
"fb-msk",
|
||||
"psm",
|
||||
"off-x",
|
||||
"off-y"
|
||||
],
|
||||
"vars": {
|
||||
"t4-0": "fbw",
|
||||
"t5-0": ["dma", "dma-packet"],
|
||||
"t5-2": ["gif", "gs-gif-tag"],
|
||||
"t5-4": ["gif-data", "(pointer uint64)"]
|
||||
}
|
||||
},
|
||||
|
||||
"reset-display-gs-state": {
|
||||
"args": ["disp", "dma-buf", "oddeven"],
|
||||
"vars": {
|
||||
"a3-0": "onscreen",
|
||||
"v1-0": "hoff",
|
||||
"a2-6": "fbp",
|
||||
"t0-0": ["dma", "dma-packet"],
|
||||
"t0-2": ["gif", "gs-gif-tag"],
|
||||
"a3-3": ["gif-data", "(pointer uint64)"]
|
||||
}
|
||||
},
|
||||
|
||||
"(method 0 engine)": {
|
||||
"args": ["allocation", "type-to-make", "name", "length"],
|
||||
"vars": { "v0-0": "obj", "v1-11": "idx-to-link", "a0-1": "end-idx" }
|
||||
|
||||
@@ -98,3 +98,6 @@
|
||||
:size-assert #x424
|
||||
:flag-assert #x900000424
|
||||
)
|
||||
|
||||
|
||||
(define-extern *math-camera* math-camera)
|
||||
|
||||
@@ -14,11 +14,17 @@
|
||||
:flag-assert #x900000008
|
||||
)
|
||||
|
||||
(defun fog-corrector-setup ((corrector fog-corrector) (math-cam math-camera))
|
||||
"Set the fog-corrector from the math camera"
|
||||
|
||||
(defun fog-corrector-setup ((arg0 fog-corrector) (arg1 math-camera))
|
||||
"Set up a fog-corrector based on the math-camera"
|
||||
(set! (-> arg0 fog-end) (* (-> arg1 fog-end) (-> arg1 fov-correction-factor)))
|
||||
(set! (-> arg0 fog-start) (* (-> arg1 fog-start) (-> arg1 fov-correction-factor)))
|
||||
;; just apply the correction factor to the value is math cam.
|
||||
(set! (-> corrector fog-end)
|
||||
(* (-> math-cam fog-end) (-> math-cam fov-correction-factor))
|
||||
)
|
||||
(set! (-> corrector fog-start)
|
||||
(* (-> math-cam fog-start) (-> math-cam fov-correction-factor))
|
||||
)
|
||||
(none)
|
||||
)
|
||||
|
||||
(define *math-camera-fog-correction* (new 'global 'fog-corrector))
|
||||
|
||||
@@ -6,6 +6,10 @@
|
||||
;; dgos: GAME, ENGINE
|
||||
|
||||
;; display-env stores the GS settings for displaying a framebuffer on screen.
|
||||
;; this is identical to the Sony sceGsDispEnv struct.
|
||||
;; you can set one of these up with set-display-env, then use it with
|
||||
;; put-display-env, which is implemented in the kernel and is a wrapper
|
||||
;; around a Sony function.
|
||||
(deftype display-env (structure)
|
||||
((pmode gs-pmode :offset-assert 0)
|
||||
(smode2 gs-smode2 :offset-assert 8)
|
||||
@@ -19,25 +23,90 @@
|
||||
:flag-assert #x900000028
|
||||
)
|
||||
|
||||
(defenum gs-reg
|
||||
:type uint8
|
||||
(prim 0)
|
||||
(rgbaq 1)
|
||||
(st 2)
|
||||
(uv 3)
|
||||
(xyzf2 4)
|
||||
(xyz2 5)
|
||||
(tex0-1 6)
|
||||
(tex0-2 7)
|
||||
(clamp-1 8)
|
||||
(clamp-2 9)
|
||||
(fog 10)
|
||||
(xyzf3 12)
|
||||
(xyz3 13)
|
||||
(tex1-1 20)
|
||||
(tex1-2 21)
|
||||
(tex2-1 22)
|
||||
(tex2-2 23)
|
||||
(xyoffset-1 24)
|
||||
(xyoffset-2 25)
|
||||
(prmodecont 26)
|
||||
(prmode 27)
|
||||
(texclut 28)
|
||||
(scanmsk 34)
|
||||
(miptbp1-1 52)
|
||||
(miptbp1-2 53)
|
||||
(miptbp2-1 54)
|
||||
(miptbp2-2 55)
|
||||
(texa 59)
|
||||
(fogcol 61)
|
||||
(texflush 63)
|
||||
(scissor-1 64)
|
||||
(scissor-2 65)
|
||||
(alpha-1 66)
|
||||
(alpha-2 67)
|
||||
(dimx 68)
|
||||
(dthe 69)
|
||||
(colclamp 70)
|
||||
(test-1 71)
|
||||
(test-2 72)
|
||||
(pabe 73)
|
||||
(fba-1 74)
|
||||
(fba-2 75)
|
||||
(frame-1 76)
|
||||
(frame-2 77)
|
||||
(zbuf-1 78)
|
||||
(zbuf-2 79)
|
||||
(bitbltbuf 80)
|
||||
(trxpos 81)
|
||||
(trxreg 82)
|
||||
(trxdir 83)
|
||||
(hwreg 84)
|
||||
(signal 96)
|
||||
(finish 97)
|
||||
(label 98)
|
||||
)
|
||||
|
||||
(defenum gs-reg64
|
||||
:type uint64
|
||||
:copy-entries gs-reg
|
||||
)
|
||||
|
||||
;; draw-env stores the GS settings for drawing to somewhere in VRAM.
|
||||
;; the "addr" fields represent GS register addresses
|
||||
;; this is identical to the Sony sceGsDrawEnv1/2 structs
|
||||
;; Internally, this is register + address GIF data.
|
||||
(deftype draw-env (structure)
|
||||
((frame1 gs-frame :offset-assert 0)
|
||||
(frame1addr int64 :offset-assert 8)
|
||||
(frame1addr gs-reg64 :offset-assert 8)
|
||||
(zbuf1 gs-zbuf :offset-assert 16)
|
||||
(zbuf1addr int64 :offset-assert 24)
|
||||
(zbuf1addr gs-reg64 :offset-assert 24)
|
||||
(xyoffset1 gs-xy-offset :offset-assert 32)
|
||||
(xyoffset1addr int64 :offset-assert 40)
|
||||
(xyoffset1addr gs-reg64 :offset-assert 40)
|
||||
(scissor1 gs-scissor :offset-assert 48)
|
||||
(scissor1addr int64 :offset-assert 56)
|
||||
(scissor1addr gs-reg64 :offset-assert 56)
|
||||
(prmodecont gs-prmode-cont :offset-assert 64)
|
||||
(prmodecontaddr int64 :offset-assert 72)
|
||||
(prmodecontaddr gs-reg64 :offset-assert 72)
|
||||
(colclamp gs-color-clamp :offset-assert 80)
|
||||
(colclampaddr int64 :offset-assert 88)
|
||||
(colclampaddr gs-reg64 :offset-assert 88)
|
||||
(dthe gs-dthe :offset-assert 96)
|
||||
(dtheaddr int64 :offset-assert 104)
|
||||
(dtheaddr gs-reg64 :offset-assert 104)
|
||||
(test1 gs-test :offset-assert 112)
|
||||
(test1addr int64 :offset-assert 120)
|
||||
(test1addr gs-reg64 :offset-assert 120)
|
||||
)
|
||||
:method-count-assert 9
|
||||
:size-assert #x80
|
||||
@@ -109,11 +178,14 @@
|
||||
((display-env0 display-env :inline :offset-assert 8)
|
||||
(display-env1 display-env :inline :offset-assert 48)
|
||||
(display-env2 display-env :inline :offset-assert 88)
|
||||
(gif-tag0 uint128 :offset-assert 128)
|
||||
;; the gif-tag + draw is a gif-packet to setting the draw-env.
|
||||
;; the draw-env is actually just a+d data.
|
||||
(gif-tag0 gs-gif-tag :inline :offset-assert 128)
|
||||
(draw0 draw-env :inline :offset-assert 144)
|
||||
(gif-tag1 uint128 :offset-assert 272)
|
||||
|
||||
(gif-tag1 gs-gif-tag :inline :offset-assert 272)
|
||||
(draw1 draw-env :inline :offset-assert 288)
|
||||
(gif-tag2 uint128 :offset-assert 416)
|
||||
(gif-tag2 gs-gif-tag :inline :offset-assert 416)
|
||||
(draw2 draw-env :inline :offset-assert 432)
|
||||
(on-screen int32 :offset-assert 560)
|
||||
(last-screen int32 :offset-assert 564)
|
||||
@@ -170,12 +242,12 @@
|
||||
(set! (-> obj frames 3 display-last) (-> obj display-env2))
|
||||
(set! (-> obj frames 4 display-last) (-> obj display-env0))
|
||||
(set! (-> obj frames 5 display-last) (-> obj display-env1))
|
||||
(set! (-> obj frames 0 gif) (&-> obj gif-tag0))
|
||||
(set! (-> obj frames 1 gif) (&-> obj gif-tag1))
|
||||
(set! (-> obj frames 2 gif) (&-> obj gif-tag2))
|
||||
(set! (-> obj frames 3 gif) (&-> obj gif-tag0))
|
||||
(set! (-> obj frames 4 gif) (&-> obj gif-tag1))
|
||||
(set! (-> obj frames 5 gif) (&-> obj gif-tag2))
|
||||
(set! (-> obj frames 0 gif) (&-> obj gif-tag0 qword))
|
||||
(set! (-> obj frames 1 gif) (&-> obj gif-tag1 qword))
|
||||
(set! (-> obj frames 2 gif) (&-> obj gif-tag2 qword))
|
||||
(set! (-> obj frames 3 gif) (&-> obj gif-tag0 qword))
|
||||
(set! (-> obj frames 4 gif) (&-> obj gif-tag1 qword))
|
||||
(set! (-> obj frames 5 gif) (&-> obj gif-tag2 qword))
|
||||
(set! (-> obj frames 0 draw) (-> obj draw0))
|
||||
(set! (-> obj frames 1 draw) (-> obj draw1))
|
||||
(set! (-> obj frames 2 draw) (-> obj draw2))
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -47,3 +47,4 @@
|
||||
)
|
||||
)
|
||||
|
||||
(define-extern get-video-mode (function symbol))
|
||||
|
||||
@@ -53,7 +53,7 @@ RegisterInfo RegisterInfo::make_register_info() {
|
||||
}
|
||||
|
||||
// todo - experiment with better orders for allocation.
|
||||
info.m_gpr_alloc_order = {RAX, RCX, RDX, RBX, RBP, RSI, RDI, R8, R9, R10, R11}; // arbitrary
|
||||
info.m_gpr_alloc_order = {RAX, RCX, RDX, RBX, RBP, RSI, RDI, R8, R9, R10}; // arbitrary
|
||||
info.m_xmm_alloc_order = {XMM0, XMM1, XMM2, XMM3, XMM4, XMM5, XMM6,
|
||||
XMM7, XMM8, XMM9, XMM10, XMM11, XMM12, XMM13};
|
||||
|
||||
|
||||
@@ -329,7 +329,75 @@
|
||||
;; loader-h
|
||||
(declare-type art-group basic)
|
||||
|
||||
;; math-camera
|
||||
(declare-type math-camera basic)
|
||||
(define-extern *math-camera* math-camera)
|
||||
|
||||
;; level-h
|
||||
(declare-type entity-links structure)
|
||||
(declare-type level-group basic)
|
||||
(define-extern *level* level-group)
|
||||
(define-extern *level* level-group)
|
||||
(define-extern log2 (function int int))
|
||||
|
||||
(defenum gs-reg
|
||||
:type uint8
|
||||
(prim 0)
|
||||
(rgbaq 1)
|
||||
(st 2)
|
||||
(uv 3)
|
||||
(xyzf2 4)
|
||||
(xyz2 5)
|
||||
(tex0-1 6)
|
||||
(tex0-2 7)
|
||||
(clamp-1 8)
|
||||
(clamp-2 9)
|
||||
(fog 10)
|
||||
(xyzf3 12)
|
||||
(xyz3 13)
|
||||
(tex1-1 20)
|
||||
(tex1-2 21)
|
||||
(tex2-1 22)
|
||||
(tex2-2 23)
|
||||
(xyoffset-1 24)
|
||||
(xyoffset-2 25)
|
||||
(prmodecont 26)
|
||||
(prmode 27)
|
||||
(texclut 28)
|
||||
(scanmsk 34)
|
||||
(miptbp1-1 52)
|
||||
(miptbp1-2 53)
|
||||
(miptbp2-1 54)
|
||||
(miptbp2-2 55)
|
||||
(texa 59)
|
||||
(fogcol 61)
|
||||
(texflush 63)
|
||||
(scissor-1 64)
|
||||
(scissor-2 65)
|
||||
(alpha-1 66)
|
||||
(alpha-2 67)
|
||||
(dimx 68)
|
||||
(dthe 69)
|
||||
(colclamp 70)
|
||||
(test-1 71)
|
||||
(test-2 72)
|
||||
(pabe 73)
|
||||
(fba-1 74)
|
||||
(fba-2 75)
|
||||
(frame-1 76)
|
||||
(frame-2 77)
|
||||
(zbuf-1 78)
|
||||
(zbuf-2 79)
|
||||
(bitbltbuf 80)
|
||||
(trxpos 81)
|
||||
(trxreg 82)
|
||||
(trxdir 83)
|
||||
(hwreg 84)
|
||||
(signal 96)
|
||||
(finish 97)
|
||||
(label 98)
|
||||
)
|
||||
|
||||
(defenum gs-reg64
|
||||
:type uint64
|
||||
:copy-entries gs-reg
|
||||
)
|
||||
@@ -29,21 +29,21 @@
|
||||
;; definition of type draw-env
|
||||
(deftype draw-env (structure)
|
||||
((frame1 gs-frame :offset-assert 0)
|
||||
(frame1addr int64 :offset-assert 8)
|
||||
(frame1addr gs-reg64 :offset-assert 8)
|
||||
(zbuf1 gs-zbuf :offset-assert 16)
|
||||
(zbuf1addr int64 :offset-assert 24)
|
||||
(zbuf1addr gs-reg64 :offset-assert 24)
|
||||
(xyoffset1 gs-xy-offset :offset-assert 32)
|
||||
(xyoffset1addr int64 :offset-assert 40)
|
||||
(xyoffset1addr gs-reg64 :offset-assert 40)
|
||||
(scissor1 gs-scissor :offset-assert 48)
|
||||
(scissor1addr int64 :offset-assert 56)
|
||||
(scissor1addr gs-reg64 :offset-assert 56)
|
||||
(prmodecont gs-prmode-cont :offset-assert 64)
|
||||
(prmodecontaddr int64 :offset-assert 72)
|
||||
(prmodecontaddr gs-reg64 :offset-assert 72)
|
||||
(colclamp gs-color-clamp :offset-assert 80)
|
||||
(colclampaddr int64 :offset-assert 88)
|
||||
(colclampaddr gs-reg64 :offset-assert 88)
|
||||
(dthe gs-dthe :offset-assert 96)
|
||||
(dtheaddr int64 :offset-assert 104)
|
||||
(dtheaddr gs-reg64 :offset-assert 104)
|
||||
(test1 gs-test :offset-assert 112)
|
||||
(test1addr int64 :offset-assert 120)
|
||||
(test1addr gs-reg64 :offset-assert 120)
|
||||
)
|
||||
:method-count-assert 9
|
||||
:size-assert #x80
|
||||
@@ -163,11 +163,11 @@
|
||||
((display-env0 display-env :inline :offset-assert 8)
|
||||
(display-env1 display-env :inline :offset-assert 48)
|
||||
(display-env2 display-env :inline :offset-assert 88)
|
||||
(gif-tag0 uint128 :offset-assert 128)
|
||||
(gif-tag0 gs-gif-tag :inline :offset-assert 128)
|
||||
(draw0 draw-env :inline :offset-assert 144)
|
||||
(gif-tag1 uint128 :offset-assert 272)
|
||||
(gif-tag1 gs-gif-tag :inline :offset-assert 272)
|
||||
(draw1 draw-env :inline :offset-assert 288)
|
||||
(gif-tag2 uint128 :offset-assert 416)
|
||||
(gif-tag2 gs-gif-tag :inline :offset-assert 416)
|
||||
(draw2 draw-env :inline :offset-assert 432)
|
||||
(on-screen int32 :offset-assert 560)
|
||||
(last-screen int32 :offset-assert 564)
|
||||
@@ -211,11 +211,11 @@
|
||||
(format #t "~Tdisplay-env0: #<display-env @ #x~X>~%" (-> obj display-env0))
|
||||
(format #t "~Tdisplay-env1: #<display-env @ #x~X>~%" (-> obj display-env1))
|
||||
(format #t "~Tdisplay-env2: #<display-env @ #x~X>~%" (-> obj display-env2))
|
||||
(format #t "~Tgif-tag0: #x~X~%" (-> obj gif-tag0))
|
||||
(format #t "~Tgif-tag0: #x~X~%" (-> obj gif-tag0 qword))
|
||||
(format #t "~Tdraw0: #<draw-env @ #x~X>~%" (-> obj draw0))
|
||||
(format #t "~Tgif-tag1: #x~X~%" (-> obj gif-tag1))
|
||||
(format #t "~Tgif-tag1: #x~X~%" (-> obj gif-tag1 qword))
|
||||
(format #t "~Tdraw1: #<draw-env @ #x~X>~%" (-> obj draw1))
|
||||
(format #t "~Tgif-tag2: #x~X~%" (-> obj gif-tag2))
|
||||
(format #t "~Tgif-tag2: #x~X~%" (-> obj gif-tag2 qword))
|
||||
(format #t "~Tdraw2: #<draw-env @ #x~X>~%" (-> obj draw2))
|
||||
(format #t "~Ton-screen: ~D~%" (-> obj on-screen))
|
||||
(format #t "~Tlast-screen: ~D~%" (-> obj last-screen))
|
||||
@@ -299,12 +299,12 @@
|
||||
(set! (-> obj frames 3 display-last) (-> obj display-env2))
|
||||
(set! (-> obj frames 4 display-last) (-> obj display-env0))
|
||||
(set! (-> obj frames 5 display-last) (-> obj display-env1))
|
||||
(set! (-> obj frames 0 gif) (&-> obj gif-tag0))
|
||||
(set! (-> obj frames 1 gif) (&-> obj gif-tag1))
|
||||
(set! (-> obj frames 2 gif) (&-> obj gif-tag2))
|
||||
(set! (-> obj frames 3 gif) (&-> obj gif-tag0))
|
||||
(set! (-> obj frames 4 gif) (&-> obj gif-tag1))
|
||||
(set! (-> obj frames 5 gif) (&-> obj gif-tag2))
|
||||
(set! (-> obj frames 0 gif) (the-as pointer (-> obj gif-tag0)))
|
||||
(set! (-> obj frames 1 gif) (the-as pointer (-> obj gif-tag1)))
|
||||
(set! (-> obj frames 2 gif) (the-as pointer (-> obj gif-tag2)))
|
||||
(set! (-> obj frames 3 gif) (the-as pointer (-> obj gif-tag0)))
|
||||
(set! (-> obj frames 4 gif) (the-as pointer (-> obj gif-tag1)))
|
||||
(set! (-> obj frames 5 gif) (the-as pointer (-> obj gif-tag2)))
|
||||
(set! (-> obj frames 0 draw) (-> obj draw0))
|
||||
(set! (-> obj frames 1 draw) (-> obj draw1))
|
||||
(set! (-> obj frames 2 draw) (-> obj draw2))
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -18,7 +18,7 @@ const std::unordered_set<std::string> g_object_files_to_decompile = {
|
||||
"euler", /* geometry, trigonometry, */
|
||||
"gsound-h", "timer-h", "timer", "vif-h", "dma-h", "video-h", "vu1-user-h", "dma", "dma-buffer",
|
||||
"dma-bucket", "dma-disasm", "pad", "gs", "display-h", "vector", "file-io", "loader-h",
|
||||
"level-h", "math-camera-h",
|
||||
"texture-h", "level-h", "math-camera-h", /* math-camera, "font-h",*/ "decomp-h", "display",
|
||||
/* gap */
|
||||
"bounding-box",
|
||||
/* gap */
|
||||
@@ -34,11 +34,16 @@ const std::vector<std::string> g_object_files_to_check_against_reference = {
|
||||
"matrix", "transform", "quaternion", "euler", /* geometry, trigonometry */
|
||||
"gsound-h", "timer-h", /* timer, */ "vif-h", "dma-h", "video-h", "vu1-user-h", "dma",
|
||||
"dma-buffer", "dma-bucket", "dma-disasm", "pad", "gs", "display-h", "vector", "file-io",
|
||||
"loader-h", "level-h", "math-camera-h",
|
||||
"loader-h", "texture-h", "level-h", "math-camera-h", /* math-camera, "font-h",*/ "decomp-h",
|
||||
"display",
|
||||
/* gap */ "bounding-box",
|
||||
/* gap */
|
||||
"sync-info-h", "sync-info"};
|
||||
|
||||
const std::unordered_set<std::string> skip_files_in_compiling = {
|
||||
"display" // interrupt handler setup
|
||||
};
|
||||
|
||||
// the functions we expect the decompiler to skip
|
||||
const std::unordered_set<std::string> expected_skip_in_decompiler = {
|
||||
// gcommon
|
||||
@@ -74,6 +79,10 @@ const std::unordered_set<std::string> expected_skip_in_decompiler = {
|
||||
// dma
|
||||
"symlink2", "symlink3", "dma-sync-hang", // handwritten asm
|
||||
"vector=", // asm branching
|
||||
// displyy
|
||||
"vblank-handler", // asm
|
||||
"vif1-handler", "vif1-handler-debug",
|
||||
|
||||
// sync-info
|
||||
"(method 15 sync-info)", // needs *res-static-buf*
|
||||
"(method 15 sync-info-eased)", // needs *res-static-buf*
|
||||
@@ -440,6 +449,9 @@ TEST_F(OfflineDecompilation, Compile) {
|
||||
Timer timer;
|
||||
int total_lines = 0;
|
||||
for (auto& file : g_object_files_to_check_against_reference) {
|
||||
if (skip_files_in_compiling.find(file) != skip_files_in_compiling.end()) {
|
||||
continue;
|
||||
}
|
||||
auto& obj_l = db->obj_files_by_name.at(file);
|
||||
ASSERT_EQ(obj_l.size(), 1);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user