decompile display (#408)

This commit is contained in:
water111
2021-05-01 15:51:53 -04:00
committed by GitHub
parent 7c182db7ea
commit 7018827a50
15 changed files with 2583 additions and 79 deletions
+25 -4
View File
@@ -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,
+76 -13
View File
@@ -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" }
+3
View File
@@ -98,3 +98,6 @@
:size-assert #x424
:flag-assert #x900000424
)
(define-extern *math-camera* math-camera)
+10 -4
View File
@@ -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))
+89 -17
View File
@@ -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
+1
View File
@@ -47,3 +47,4 @@
)
)
(define-extern get-video-mode (function symbol))
+1 -1
View File
@@ -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
)
+20 -20
View File
@@ -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
+14 -2
View File
@@ -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);