chore: initialize age-reimpl repo
Reverse-engineering + open reimplementation workspace for Eushully's AGE/SYS4 engine (first target: Himegari). The repo root is age-reimpl/; the original game install and the extracted ALF data are siblings outside the repo and are never tracked. build/ (derived corpora) is gitignored and regenerated by the tools. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
597
tools/age_opcodes.py
Normal file
597
tools/age_opcodes.py
Normal file
@@ -0,0 +1,597 @@
|
||||
# DO NOT EDIT -- generated from vm-map/opcodes.toml by tools/opcodes_build.py --build
|
||||
|
||||
"""AGE opcode framing and operand metadata (generated canonical view)."""
|
||||
from __future__ import annotations
|
||||
|
||||
# opcode -> (historical/canonical label, argument count)
|
||||
OPCODES: dict[int, tuple[str, int]] = {
|
||||
0x0001: ('throw-exit-request', 0),
|
||||
0x0002: ('exit', 0),
|
||||
0x0003: ('call-script', 1),
|
||||
0x0004: ('u00417E30', 2),
|
||||
0x0005: ('ret', 0),
|
||||
0x0006: ('preload-script-slot', 2),
|
||||
0x0007: ('u00417F90', 1),
|
||||
0x0008: ('call-preloaded-script-slot', 1),
|
||||
0x0009: ('exit-script', 0),
|
||||
0x000a: ('u00424170', 2),
|
||||
0x000b: ('u00418090', 11),
|
||||
0x000c: ('u004149E0', 0),
|
||||
0x000d: ('u004181A0', 4),
|
||||
0x000e: ('u00418200', 12),
|
||||
0x000f: ('u00418300', 1),
|
||||
0x0010: ('u00414A00', 4),
|
||||
0x0011: ('u00418330', 9),
|
||||
0x0012: ('u004183F0', 1),
|
||||
0x0013: ('u00418420', 4),
|
||||
0x0014: ('u00414A20', 0),
|
||||
0x0015: ('u00418490', 5),
|
||||
0x0016: ('u00418520', 2),
|
||||
0x0017: ('u00418560', 2),
|
||||
0x001e: ('u004185B0', 8),
|
||||
0x001f: ('u00418690', 12),
|
||||
0x0020: ('u004187C0', 6),
|
||||
0x0021: ('u00418860', 2),
|
||||
0x0022: ('u00418920', 2),
|
||||
0x0023: ('u004189D0', 2),
|
||||
0x0024: ('u00418A90', 2),
|
||||
0x0025: ('u00418B40', 3),
|
||||
0x0026: ('u00418C00', 4),
|
||||
0x0027: ('u00418CC0', 4),
|
||||
0x0028: ('u00418D90', 4),
|
||||
0x002a: ('u00418E60', 4),
|
||||
0x002b: ('u00418F30', 5),
|
||||
0x002c: ('u00419010', 5),
|
||||
0x002d: ('u004190A0', 12),
|
||||
0x002e: ('u004194B0', 5),
|
||||
0x002f: ('u004195A0', 4),
|
||||
0x0030: ('u00419670', 5),
|
||||
0x0031: ('u00419750', 4),
|
||||
0x0032: ('u004197C0', 10),
|
||||
0x0033: ('u00419900', 6),
|
||||
0x0034: ('u004199C0', 12),
|
||||
0x0035: ('u00419AF0', 11),
|
||||
0x0036: ('u00419C00', 3),
|
||||
0x0037: ('u00419C90', 11),
|
||||
0x0038: ('u00419DA0', 12),
|
||||
0x0050: ('add', 3),
|
||||
0x0051: ('sub', 3),
|
||||
0x0052: ('mul', 3),
|
||||
0x0053: ('div', 3),
|
||||
0x0054: ('mod', 3),
|
||||
0x0055: ('mov', 2),
|
||||
0x0056: ('and', 3),
|
||||
0x0057: ('or', 3),
|
||||
0x0058: ('sar', 3),
|
||||
0x0059: ('shl', 3),
|
||||
0x005a: ('eq', 3),
|
||||
0x005b: ('ne', 3),
|
||||
0x005c: ('lt', 3),
|
||||
0x005d: ('lte', 3),
|
||||
0x005e: ('gr', 3),
|
||||
0x005f: ('gre', 3),
|
||||
0x0060: ('u0041A270', 2),
|
||||
0x0061: ('lookup-array', 3),
|
||||
0x0062: ('u0041A360', 3),
|
||||
0x0063: ('take-address', 2),
|
||||
0x0064: ('copy-inline-int-array', 2),
|
||||
0x0065: ('u00414AA0', 2),
|
||||
0x0066: ('u00414AE0', 3),
|
||||
0x0067: ('u00414B20', 3),
|
||||
0x0068: ('u00414B60', 3),
|
||||
0x0069: ('u00414BA0', 3),
|
||||
0x006a: ('u00414BE0', 3),
|
||||
0x006b: ('u00414C20', 3),
|
||||
0x006c: ('copy-to-global', 2),
|
||||
0x006d: ('u00416960', 0),
|
||||
0x006e: ('show-text', 2),
|
||||
0x006f: ('end-text-line', 1),
|
||||
0x0070: ('define-adv-text-layout', 5),
|
||||
0x0071: ('reset-adv-text-layout', 1),
|
||||
0x0072: ('wait-for-input', 1),
|
||||
0x0073: ('configure-adv-wait-indicator', 10),
|
||||
0x0074: ('u0041AC00', 1),
|
||||
0x0075: ('set-font-size', 1),
|
||||
0x0076: ('set-text-color', 1),
|
||||
0x0077: ('set-text-effect-color', 1),
|
||||
0x0078: ('set-text-render-mode', 1),
|
||||
0x0079: ('set-adv-text-reset-cursor', 3),
|
||||
0x007a: ('set-adv-text-cursor', 3),
|
||||
0x007b: ('u0041ADB0', 2),
|
||||
0x007c: ('u00416A90', 0),
|
||||
0x007d: ('u0041AE00', 2),
|
||||
0x007e: ('u0041AEA0', 1),
|
||||
0x007f: ('u00414C60', 1),
|
||||
0x0080: ('u0041AF00', 1),
|
||||
0x0081: ('u0041AF30', 1),
|
||||
0x0082: ('u0041AF80', 5),
|
||||
0x0083: ('u00414C90', 3),
|
||||
0x0084: ('u0041AFE0', 1),
|
||||
0x0085: ('clear-text-history', 0),
|
||||
0x0086: ('u0041B210', 1),
|
||||
0x0087: ('u00414D10', 0),
|
||||
0x0088: ('u0041B290', 1),
|
||||
0x0089: ('u0041B2E0', 4),
|
||||
0x008a: ('u0041B330', 6),
|
||||
0x008b: ('u0041B3D0', 1),
|
||||
0x008c: ('jmp', 1),
|
||||
0x008d: ('u0041BCE0', 2),
|
||||
0x008e: ('u0041BD60', 1),
|
||||
0x008f: ('call', 1),
|
||||
0x0090: ('u0041BEB0', 7),
|
||||
0x0091: ('u0041BFB0', 1),
|
||||
0x0092: ('u0041C030', 2),
|
||||
0x0093: ('u00415040', 0),
|
||||
0x0094: ('u00415090', 0),
|
||||
0x0095: ('u0041C0C0', 2),
|
||||
0x0096: ('u004150C0', 0),
|
||||
0x0097: ('u0041C150', 5),
|
||||
0x00a0: ('jcc', 3),
|
||||
0x00a1: ('begin-value-switch', 0),
|
||||
0x00a2: ('add-value-switch-case', 2),
|
||||
0x00a3: ('value-switch-jump', 2),
|
||||
0x00aa: ('u0041C270', 2),
|
||||
0x00ab: ('u0041C330', 2),
|
||||
0x00ac: ('u0041C3E0', 9),
|
||||
0x00ad: ('u00415110', 0),
|
||||
0x00ae: ('continue-save-load-stack-restore', 0),
|
||||
0x00af: ('u00415480', 0),
|
||||
0x00b0: ('u0041C530', 1),
|
||||
0x00b1: ('u0041C560', 1),
|
||||
0x00b2: ('u0041C590', 2),
|
||||
0x00b3: ('u004154B0', 0),
|
||||
0x00b4: ('play-sound-effect', 2),
|
||||
0x00b5: ('u0041D050', 1),
|
||||
0x00b6: ('u0041D080', 1),
|
||||
0x00b7: ('restart-bgm-loop', 1),
|
||||
0x00b8: ('stop-bgm', 0),
|
||||
0x00b9: ('restart-bgm-once', 1),
|
||||
0x00ba: ('sfx-start-loop', 1),
|
||||
0x00bb: ('u0041D250', 1),
|
||||
0x00bc: ('u0041D280', 1),
|
||||
0x00bd: ('u00415570', 1),
|
||||
0x00be: ('u004155E0', 1),
|
||||
0x00bf: ('play-bgm', 1),
|
||||
0x00c0: ('get-current-bgm-track', 1),
|
||||
0x00c1: ('u00415650', 0),
|
||||
0x00c2: ('u0041D2B0', 2),
|
||||
0x00c3: ('u0041D390', 1),
|
||||
0x00c4: ('play-voice', 1),
|
||||
0x00c5: ('get-audio-volume', 2),
|
||||
0x00c6: ('set-audio-volume', 2),
|
||||
0x00c7: ('get-audio-route-enabled', 2),
|
||||
0x00c8: ('sleep', 1),
|
||||
0x00c9: ('u00415770', 0),
|
||||
0x00ca: ('u004157A0', 0),
|
||||
0x00cb: ('u00415800', 1),
|
||||
0x00cc: ('mouse_callback', 2),
|
||||
0x00cd: ('get-input-type', 0),
|
||||
0x00ce: ('u0041E0B0', 3),
|
||||
0x00cf: ('u00416D40', 0),
|
||||
0x00d0: ('get-monotonic-time-ms', 1),
|
||||
0x00d1: ('u00415860', 0),
|
||||
0x00d2: ('u0041E110', 1),
|
||||
0x00d3: ('u00425960', 0),
|
||||
0x00d4: ('u004266F0', 4),
|
||||
0x00d5: ('u004262C0', 1),
|
||||
0x00d6: ('u004267D0', 6),
|
||||
0x00d7: ('u0041E1A0', 1),
|
||||
0x00d8: ('u0041E150', 2),
|
||||
0x00d9: ('u00415880', 0),
|
||||
0x00da: ('u004158B0', 6),
|
||||
0x00fa: ('u00415940', 0),
|
||||
0x00fb: ('joy_callback', 2),
|
||||
0x00fc: ('u004159F0', 0),
|
||||
0x00fd: ('u0041E2D0', 2),
|
||||
0x00fe: ('u0041E360', 1),
|
||||
0x00ff: ('u00415A10', 0),
|
||||
0x0100: ('u00415A60', 0),
|
||||
0x0101: ('u00415BF0', 0),
|
||||
0x0102: ('u0041E3C0', 3),
|
||||
0x0103: ('u0041E4A0', 1),
|
||||
0x0104: ('u00415C50', 0),
|
||||
0x0105: ('u0041E4D0', 1),
|
||||
0x0106: ('u00415E40', 1),
|
||||
0x0107: ('u0041E500', 2),
|
||||
0x0108: ('u00415E70', 1),
|
||||
0x0109: ('u00415EC0', 2),
|
||||
0x010a: ('u0041E540', 2),
|
||||
0x010b: ('u0041E5A0', 2),
|
||||
0x010c: ('u0041E5E0', 2),
|
||||
0x010d: ('u00415F10', 1),
|
||||
0x010e: ('u0041E650', 2),
|
||||
0x010f: ('u0041E690', 1),
|
||||
0x012c: ('lookup-array-2d', 5),
|
||||
0x012d: ('u0041E720', 7),
|
||||
0x012e: ('find-hit-rectangle', 8),
|
||||
0x012f: ('sort-indices-by-key-sum', 4),
|
||||
0x0130: ('get-initial-root-run', 1),
|
||||
0x0131: ('get-message-window-alpha', 1),
|
||||
0x0132: ('reset-int-queue', 1),
|
||||
0x0133: ('enqueue-int', 2),
|
||||
0x0134: ('try-dequeue-int', 3),
|
||||
0x0135: ('bit-set', 2),
|
||||
0x0136: ('bit-reset', 2),
|
||||
0x0137: ('reset-int-stack', 1),
|
||||
0x0138: ('push-int-stack', 2),
|
||||
0x0139: ('try-pop-int-stack', 3),
|
||||
0x013a: ('u0041F3A0', 6),
|
||||
0x013b: ('u0041F440', 7),
|
||||
0x013c: ('u0041F7E0', 1),
|
||||
0x013d: ('u0041F840', 3),
|
||||
0x013e: ('u0041F8D0', 2),
|
||||
0x013f: ('check-bit', 3),
|
||||
0x0140: ('u0041F9C0', 4),
|
||||
0x0141: ('set-message-window-alpha', 1),
|
||||
0x0142: ('set-system-menu-enabled', 1),
|
||||
0x0143: ('u00415FB0', 0),
|
||||
0x0144: ('edit-fullwidth-string-dialog', 2),
|
||||
0x0145: ('u00416040', 1),
|
||||
0x0146: ('u0041FB40', 1),
|
||||
0x0147: ('u0041FB80', 6),
|
||||
0x0148: ('get-system-menu-show-delay', 1),
|
||||
0x0149: ('set-system-menu-show-delay', 1),
|
||||
0x014a: ('u0041FD10', 7),
|
||||
0x014b: ('u0041FF50', 1),
|
||||
0x014c: ('set-agerc-export', 2),
|
||||
0x014d: ('call-agerc-export', 6),
|
||||
0x0190: ('u0041C5E0', 2),
|
||||
0x0191: ('absolute-value', 2),
|
||||
0x0192: ('set-string', 2),
|
||||
0x0193: ('concat', 3),
|
||||
0x0194: ('string-equals', 3),
|
||||
0x0195: ('string-not-equals', 3),
|
||||
0x0196: ('display-furigana', 3),
|
||||
0x0197: ('set-ruby-font-size', 1),
|
||||
0x0198: ('set-adv-text-layout-origin', 3),
|
||||
0x0199: ('u00414D50', 0),
|
||||
0x019a: ('u00414E50', 1),
|
||||
0x019b: ('u00414E80', 0),
|
||||
0x019c: ('u00414EC0', 0),
|
||||
0x019d: ('is-catalog-resource-unlocked', 2),
|
||||
0x019e: ('save-numbered-slot', 2),
|
||||
0x019f: ('load-numbered-slot-data-only', 2),
|
||||
0x01a0: ('query-numbered-save-metadata', 9),
|
||||
0x01a1: ('load-numbered-slot-and-resume', 2),
|
||||
0x01a2: ('store-shared-profile-int', 1),
|
||||
0x01a3: ('load-shared-profile-int', 1),
|
||||
0x01a4: ('set-text-effect-offset', 2),
|
||||
0x01a5: ('set-font', 1),
|
||||
0x01a6: ('halve-strlen', 2),
|
||||
0x01a7: ('comment', 1),
|
||||
0x01a8: ('dev_ukn', 0),
|
||||
0x01a9: ('store-shared-profile-string', 1),
|
||||
0x01aa: ('load-shared-profile-string', 1),
|
||||
0x01ab: ('delete-numbered-save', 2),
|
||||
0x01ac: ('copy-numbered-save', 3),
|
||||
0x01ad: ('mark-save-resume-frame', 0),
|
||||
0x01ae: ('write-numbered-save-thumbnail', 3),
|
||||
0x01af: ('load-numbered-save-thumbnail', 3),
|
||||
0x01b0: ('copy-dwords', 3),
|
||||
0x01b1: ('u0041B5C0', 1),
|
||||
0x01b2: ('u00425790', 1),
|
||||
0x01b3: ('u004257D0', 0),
|
||||
0x01b4: ('u004237C0', 0),
|
||||
0x01b5: ('u0041B5F0', 1),
|
||||
0x01b6: ('u00414F60', 1),
|
||||
0x01b7: ('u0041B640', 1),
|
||||
0x01b8: ('u0041B670', 2),
|
||||
0x01b9: ('u0041B710', 2),
|
||||
0x01ba: ('set-audio-route-enabled', 2),
|
||||
0x01bb: ('set-text-history-recording', 1),
|
||||
0x01bc: ('u00415670', 0),
|
||||
0x01bd: ('u0041D910', 1),
|
||||
0x01be: ('u0041D9D0', 2),
|
||||
0x01bf: ('u004156C0', 0),
|
||||
0x01c0: ('u0041DB70', 1),
|
||||
0x01c1: ('set-adv-text-bounds', 3),
|
||||
0x01c2: ('u0041B860', 2),
|
||||
0x01c3: ('u0041B8A0', 2),
|
||||
0x01c4: ('u00415720', 1),
|
||||
0x01c5: ('u00425800', 4),
|
||||
0x01c6: ('u0041DD80', 2),
|
||||
0x01c7: ('get-message-skip', 1),
|
||||
0x01c8: ('toString', 2),
|
||||
0x01c9: ('u0041B8E0', 3),
|
||||
0x01ca: ('u0041B9B0', 1),
|
||||
0x01cb: ('u00414FD0', 1),
|
||||
0x01cc: ('get-adv-read-skip-state', 1),
|
||||
0x01cd: ('u0041A560', 2),
|
||||
0x01ce: ('u0041B9F0', 1),
|
||||
0x01cf: ('set-voice-bgm-duck-control', 1),
|
||||
0x01d0: ('step-text-history', 3),
|
||||
0x01d1: ('u0041BAE0', 5),
|
||||
0x01d2: ('append-text-history-metadata', 2),
|
||||
0x01d3: ('find-text-history-value', 5),
|
||||
0x01d4: ('find-text-history-pair', 4),
|
||||
0x01d5: ('u00415700', 0),
|
||||
0x01d6: ('u0041DA40', 2),
|
||||
0x01d7: ('u0041DA80', 2),
|
||||
0x01d8: ('u0041DAD0', 3),
|
||||
0x01d9: ('u0041DB20', 2),
|
||||
0x01f4: ('u004160D0', 0),
|
||||
0x01f5: ('u00416120', 0),
|
||||
0x01f6: ('clear-retained-gfx-objects', 0),
|
||||
0x01f7: ('gfx-elem-erase', 2),
|
||||
0x01f8: ('create-texture', 4),
|
||||
0x01f9: ('set-texture', 3),
|
||||
0x01fa: ('gfx-elem-release', 1),
|
||||
0x01fb: ('draw-texture', 8),
|
||||
0x01fc: ('u004205F0', 1),
|
||||
0x01fd: ('u00420620', 4),
|
||||
0x01fe: ('set-current-rotation-axis-angle', 5),
|
||||
0x01ff: ('set-gfx-geom3-c', 4),
|
||||
0x0200: ('u00420800', 1),
|
||||
0x0201: ('u00416190', 1),
|
||||
0x0202: ('gfx-blit-color', 5),
|
||||
0x0203: ('gfx-draw-color', 4),
|
||||
0x0204: ('draw-string', 4),
|
||||
0x0205: ('u00420A60', 6),
|
||||
0x0206: ('u004161C0', 7),
|
||||
0x0207: ('copy-surface-rect', 8),
|
||||
0x0208: ('get-texture-size', 3),
|
||||
0x0209: ('u00420C50', 5),
|
||||
0x020a: ('u00420CE0', 1),
|
||||
0x020b: ('fill-surface-rect', 7),
|
||||
0x020c: ('present-frame', 0),
|
||||
0x020d: ('select-render-target', 1),
|
||||
0x020e: ('clear-render-target', 0),
|
||||
0x020f: ('play-modal-movie-to-surface', 3),
|
||||
0x0210: ('u00420FF0', 1),
|
||||
0x0211: ('u00421060', 1),
|
||||
0x0212: ('set-adv-wait-indicator-handle', 2),
|
||||
0x0213: ('set-adv-text-object-range', 3),
|
||||
0x0214: ('u00421120', 2),
|
||||
0x0215: ('query-gfx-object?', 2),
|
||||
0x0216: ('query-gfx-field?', 2),
|
||||
0x0217: ('set-gfx-geom3', 4),
|
||||
0x0218: ('get-gfx-geom3?', 4),
|
||||
0x0219: ('set-gfx-geom3-b', 4),
|
||||
0x021a: ('get-gfx-geom3-b?', 4),
|
||||
0x021b: ('u004213E0', 1),
|
||||
0x021c: ('mark-frame-yield', 0),
|
||||
0x021d: ('clone-gfx-object', 2),
|
||||
0x021e: ('set-anim-transform-norm', 6),
|
||||
0x021f: ('set-anim-rotation-axis-angle', 7),
|
||||
0x0220: ('set-anim-transform-abs', 6),
|
||||
0x0221: ('u00421670', 4),
|
||||
0x0222: ('present-gfx-object-range', 2),
|
||||
0x0223: ('queue-surface-alpha-transition', 8),
|
||||
0x0224: ('clear-gfx-command-queue', 0),
|
||||
0x0225: ('u00421780', 2),
|
||||
0x0226: ('u004217D0', 5),
|
||||
0x0227: ('u00421880', 6),
|
||||
0x0228: ('u00421940', 5),
|
||||
0x0229: ('set-gfx-range-transform', 5),
|
||||
0x022a: ('set-gfx-range-scale-current', 3),
|
||||
0x022b: ('u00421B30', 4),
|
||||
0x022c: ('set-gfx-range-translation-current', 3),
|
||||
0x022d: ('set-gfx-range-scale-target', 5),
|
||||
0x022e: ('u00421D10', 6),
|
||||
0x022f: ('u00421DD0', 5),
|
||||
0x0230: ('u00421E70', 1),
|
||||
0x0231: ('u00421EA0', 4),
|
||||
0x0232: ('u00421EF0', 4),
|
||||
0x0233: ('set-scale-cycle', 5),
|
||||
0x0234: ('anim-start', 5),
|
||||
0x0235: ('u00422100', 5),
|
||||
0x0236: ('play-movie-to-surface', 4),
|
||||
0x0237: ('u00422350', 2),
|
||||
0x0238: ('set-anim-clock', 1),
|
||||
0x0239: ('u004223C0', 6),
|
||||
0x023a: ('query-movie-surface-active', 2),
|
||||
0x023b: ('u00422460', 7),
|
||||
0x023c: ('sample-frame-time', 0),
|
||||
0x023d: ('release-transient-surfaces', 0),
|
||||
0x023e: ('u004228C0', 2),
|
||||
0x023f: ('u00422930', 2),
|
||||
0x0240: ('u004229A0', 4),
|
||||
0x0241: ('play-movie-to-surface-at-position', 5),
|
||||
0x0242: ('set-object-animation-detached', 2),
|
||||
0x0243: ('reset-anim-clock', 0),
|
||||
0x0244: ('u00416360', 0),
|
||||
0x0245: ('u00422DA0', 2),
|
||||
0x0246: ('u00422E10', 2),
|
||||
0x0247: ('u00416390', 1),
|
||||
0x0248: ('set-tiled-surface-edge-length', 1),
|
||||
0x0249: ('load-raw-texture-surface', 3),
|
||||
0x024a: ('u004163C0', 3),
|
||||
0x024d: ('play-movie-mask-transition', 12),
|
||||
0x024e: ('set-gfx-animation-service-flags', 1),
|
||||
0x024f: ('u00422ED0', 10),
|
||||
0x0250: ('u00422F60', 10),
|
||||
0x0251: ('u00422FF0', 12),
|
||||
0x0252: ('u00423000', 1),
|
||||
0x0253: ('u00423019', 2),
|
||||
0x0254: ('u00423049', 5),
|
||||
0x0256: ('u00423050', 5),
|
||||
0x0257: ('257', 5),
|
||||
0x0258: ('set-surface-persistence-flags', 2),
|
||||
0x0259: ('script-entry', 0),
|
||||
0x025a: ('u00423120', 1),
|
||||
0x025b: ('25B', 1),
|
||||
0x025c: ('u00423122', 8),
|
||||
0x025d: ('u00423123', 3),
|
||||
0x025e: ('u00423124', 5),
|
||||
0x025f: ('u00423125', 4),
|
||||
0x0260: ('u00423126', 4),
|
||||
0x0261: ('u00423127', 1),
|
||||
0x0262: ('262', 1),
|
||||
0x0263: ('263', 1),
|
||||
0x0264: ('264', 5),
|
||||
0x02bc: ('u00423020', 11),
|
||||
0x02bd: ('set-font-bold', 1),
|
||||
0x02be: ('u00423140', 1),
|
||||
0x02bf: ('schedule-sfx-start', 3),
|
||||
0x02c0: ('schedule-voice-playback', 3),
|
||||
0x02c1: ('u00425BC0', 1),
|
||||
0x02c2: ('u00425CD0', 6),
|
||||
0x02c3: ('u00423200', 2),
|
||||
0x02c4: ('u00416450', 0),
|
||||
0x02c5: ('strlen', 2),
|
||||
0x02c6: ('cp932-character-length', 2),
|
||||
0x02c7: ('u0042B5F0', 4),
|
||||
0x02c8: ('cp932-substring', 4),
|
||||
0x02c9: ('2C9', 3),
|
||||
0x02cc: ('2CC', 1),
|
||||
0x02cd: ('2CD', 1),
|
||||
0x02ce: ('u0042B616', 1),
|
||||
0x02cf: ('u0042B617', 1),
|
||||
0x02d0: ('u0042B940', 3),
|
||||
0x02d1: ('u0042B950', 3),
|
||||
0x02d2: ('u0042B960', 3),
|
||||
0x02d3: ('u0042B970', 3),
|
||||
0x02d5: ('u0042B990', 2),
|
||||
0x02d7: ('u0042B9B0', 2),
|
||||
0x02d8: ('set-array-to', 3),
|
||||
0x02d9: ('u0042BA30', 2),
|
||||
0x02da: ('u004234E0', 8),
|
||||
0x02db: ('u004235C0', 1),
|
||||
0x02dc: ('u0042BA80', 1),
|
||||
0x02dd: ('u0042D880', 2),
|
||||
0x02de: ('u0042BAC0', 2),
|
||||
0x02df: ('u0042BAC1', 3),
|
||||
0x02e0: ('u0042CE0F', 3),
|
||||
0x02e1: ('u0042CE10', 3),
|
||||
0x02e2: ('u0042CE11', 3),
|
||||
0x02e3: ('u0042CE30', 3),
|
||||
0x02e4: ('u0042CE31', 3),
|
||||
0x02e5: ('u0042CE50', 1),
|
||||
0x02e6: ('u0042CE60', 2),
|
||||
0x02e7: ('u0042CE70', 2),
|
||||
0x02e8: ('u0042CE80', 1),
|
||||
0x02e9: ('u0042CE90', 1),
|
||||
0x02ea: ('u0042CEA0', 1),
|
||||
0x02eb: ('u0042CEB0', 1),
|
||||
0x02ec: ('u0042CEC0', 2),
|
||||
0x02ee: ('u0042CEC2', 1),
|
||||
0x02ef: ('u0042CEC3', 11),
|
||||
0x02f0: ('u0042CEC4', 9),
|
||||
0x02f1: ('u0042CEC5', 7),
|
||||
0x02f2: ('u0042CEC6', 6),
|
||||
0x02f3: ('2F3', 6),
|
||||
0x02f4: ('2F4', 3),
|
||||
0x02f5: ('2F5', 4),
|
||||
0x02f6: ('2F6', 1),
|
||||
0x02f7: ('2F7', 1),
|
||||
0x02f8: ('2F8', 2),
|
||||
0x02f9: ('2F9', 7),
|
||||
0x02fa: ('2FA', 1),
|
||||
0x02fb: ('2FB', 1),
|
||||
0x02fc: ('2FC', 5),
|
||||
0x02fd: ('2FD', 6),
|
||||
0x02fe: ('2FE', 1),
|
||||
0x02ff: ('2FF', 2),
|
||||
0x0300: ('300', 3),
|
||||
0x0301: ('301', 1),
|
||||
0x0302: ('302', 2),
|
||||
0x0303: ('303', 3),
|
||||
0x0304: ('304', 0),
|
||||
0x0305: ('305', 0),
|
||||
0x0306: ('306', 1),
|
||||
0x0307: ('307', 1),
|
||||
0x0308: ('308', 1),
|
||||
0x030a: ('30A', 2),
|
||||
0x030c: ('30C', 1),
|
||||
0x0320: ('u0043AA20', 10),
|
||||
0x0321: ('u0043AA30', 3),
|
||||
0x0322: ('u0043AA40', 4),
|
||||
0x0323: ('u0043AA50', 5),
|
||||
0x0324: ('u0043AA60', 0),
|
||||
0x0325: ('u0043AA70', 2),
|
||||
0x0326: ('u0043AA80', 4),
|
||||
0x0327: ('u0043AA90', 1),
|
||||
0x0328: ('u0043AAA0', 3),
|
||||
0x0329: ('u0043AAB0', 2),
|
||||
0x032a: ('32A', 1),
|
||||
0x032b: ('u0043AAD0', 0),
|
||||
0x032c: ('u0043AAE0', 6),
|
||||
0x032d: ('u0043AAF0', 2),
|
||||
0x032e: ('u0043AB10', 11),
|
||||
0x032f: ('u0043AB11', 1),
|
||||
0x0330: ('u0043AB12', 2),
|
||||
0x0332: ('u0043AB14', 4),
|
||||
0x0334: ('u0043AB16', 1),
|
||||
0x0335: ('u0043AB17', 4),
|
||||
0x0337: ('u0043AB19', 4),
|
||||
0x033b: ('u0043AB1D', 4),
|
||||
0x033d: ('u0043AB1E', 3),
|
||||
0x033e: ('u0043AB1F', 5),
|
||||
0x033f: ('u0043AB20', 3),
|
||||
0x0340: ('340', 1),
|
||||
0x0341: ('341', 2),
|
||||
0x0342: ('342', 1),
|
||||
0x0344: ('344', 2),
|
||||
0x0345: ('345', 3),
|
||||
0x0349: ('349', 4),
|
||||
0x034d: ('34D', 6),
|
||||
0x034e: ('34E', 4),
|
||||
0x0352: ('352', 3),
|
||||
0x0353: ('353', 2),
|
||||
0x0354: ('354', 2),
|
||||
0x0358: ('358', 5),
|
||||
0x035a: ('35A', 5),
|
||||
0x035b: ('35B', 2),
|
||||
0x035c: ('35C', 2),
|
||||
0x035d: ('35D', 3),
|
||||
0x035f: ('35F', 3),
|
||||
0x0360: ('360', 3),
|
||||
0x0361: ('361', 2),
|
||||
0x0363: ('363', 3),
|
||||
0x0364: ('364', 3),
|
||||
0x0384: ('384', 3),
|
||||
0x0386: ('386', 11),
|
||||
0x0387: ('387', 8),
|
||||
0x0388: ('388', 3),
|
||||
0x0389: ('389', 6),
|
||||
0x038f: ('38F', 6),
|
||||
0x0390: ('390', 7),
|
||||
0x0391: ('391', 2),
|
||||
0x0392: ('392', 1),
|
||||
0x0393: ('393', 6),
|
||||
0x0396: ('396', 5),
|
||||
0x0398: ('398', 3),
|
||||
0x0399: ('399', 7),
|
||||
0x039b: ('39B', 5),
|
||||
}
|
||||
|
||||
# argument type tag -> disassembly label
|
||||
ARG_TYPES: dict[int, str] = {
|
||||
0x0000: 'imm',
|
||||
0x0001: 'float',
|
||||
0x0002: 'string',
|
||||
0x0003: 'global-int',
|
||||
0x0004: 'global-float',
|
||||
0x0005: 'global-string',
|
||||
0x0006: 'global-ptr',
|
||||
0x0008: 'global-string-ptr',
|
||||
0x0009: 'local-int',
|
||||
0x000a: 'local-float',
|
||||
0x000b: 'local-string',
|
||||
0x000c: 'local-ptr',
|
||||
0x000d: 'local-float-ptr',
|
||||
0x000e: 'local-string-ptr',
|
||||
0x8003: 'type-0x8003',
|
||||
0x8005: 'type-0x8005',
|
||||
0x8009: 'type-0x8009',
|
||||
0x800b: 'type-0x800B',
|
||||
}
|
||||
|
||||
# One-based operand indices whose raw values are code offsets.
|
||||
CODE_TARGET_ARGS: dict[int, frozenset[int]] = {
|
||||
0x007b: frozenset((1, 2)),
|
||||
0x008c: frozenset((1,)),
|
||||
0x008f: frozenset((1,)),
|
||||
0x0090: frozenset((5, 6, 7)),
|
||||
0x00a0: frozenset((2, 3)),
|
||||
0x00cc: frozenset((2,)),
|
||||
0x00d4: frozenset((3, 4)),
|
||||
0x00fb: frozenset((2,)),
|
||||
}
|
||||
CONTROL_FLOW = frozenset(CODE_TARGET_ARGS)
|
||||
ARRAY_OPCODE = 0x64
|
||||
|
||||
def is_label_argument(op: int, arg_index: int, raw_value: int) -> bool:
|
||||
"""Return whether a zero-based operand is a non-fallthrough code target."""
|
||||
return (raw_value != 0xFFFFFFFF
|
||||
and arg_index + 1 in CODE_TARGET_ARGS.get(op, ()))
|
||||
Reference in New Issue
Block a user