# asd 33.0.4.153 -> 33.0.4.222 # branch 33.0.4, consecutive builds # # 20 functions resized, 483 new, 3 removed, 87 with body changes # total named bytes +20190 # # Normalised: tier annotations, off_/loc_/sub_ address tokens, # long hex literals and vN renumbering. Local declarations are # dropped. Raw diffs are 6-17% of lines and almost all noise. ## resized functions (byte size from the index sidecar) asd_dispatch 842 -> 1306 +464 asd_event_dispatch 618 -> 788 +170 asd_link_sub_113A0 460 -> 548 +88 asd_srm_sub_12EC4 502 -> 590 +88 asd_link_state_poll 62 -> 124 +62 asd_srm_header_check 124 -> 178 +54 asd_reg_read_BE08 64 -> 100 +36 asd_reg_read_13FD4 60 -> 96 +36 asd_hdcp_reset_all 148 -> 180 +32 asd_srm_store 350 -> 374 +24 asd_foreach_link_active 42 -> 62 +20 asd_srm_sub_12D4C 116 -> 100 -16 asd_get_connector_ids_a 128 -> 144 +16 asd_build_reg_addr_table_v2 334 -> 346 +12 asd_link_call_D49810_D49814 94 -> 106 +12 asd_count_bits_below 34 -> 44 +10 asd_srm_sub_12DB0 64 -> 54 -10 asd_build_hw_ops 720 -> 728 +8 asd_svc_sub_2794 36 -> 34 -2 asd_platform_op_403 266 -> 268 +2 ## functions present only in 33.0.4.222 + asd_align_map_range 204 bytes + asd_asic_family_lookup 40 bytes + asd_aux_idle_check 52 bytes + asd_aux_op_D1891C 48 bytes + asd_aux_transfer_block 218 bytes + asd_aux_write_block 206 bytes + asd_build_caps_blob 88 bytes + asd_build_link_map_full 674 bytes + asd_build_reg_addr_table 236 bytes + asd_call_D17BC4_if_zero 14 bytes + asd_cfg_132byte_blob 92 bytes + asd_cfg_type_2_3 72 bytes + asd_dio_apply_mask 78 bytes + asd_dio_current_instance_op 82 bytes + asd_dio_desc_D330D0 90 bytes + asd_dio_desc_D33158 326 bytes + asd_dio_desc_D331DC 334 bytes + asd_dio_desc_D33228 254 bytes + asd_dio_disable_all 74 bytes + asd_dio_enable_all 128 bytes + asd_dio_entry_present 28 bytes + asd_dio_idle_check 48 bytes + asd_dio_read_block 116 bytes + asd_dio_read_block10 124 bytes + asd_dio_read_pair 106 bytes + asd_dio_set_pair 78 bytes + asd_dio_write_clear_seq 74 bytes + asd_dio_write_packed 158 bytes + asd_dio_write_verify 96 bytes + asd_encoder_enable_seq_v3 796 bytes + asd_encoder_query 186 bytes + asd_encoder_state_check 26 bytes + asd_feature15_query_D44134 60 bytes + asd_feature_enabled 54 bytes + asd_feature_enabled_cfg0 64 bytes + asd_feature_level_check 56 bytes + asd_foreach_link_D15412 42 bytes + asd_foreach_link_D15650 38 bytes + asd_foreach_link_cb_D49824 54 bytes + asd_fw_version_gated_stream_op 30 bytes + asd_get_D49800 6 bytes + asd_get_D49810 6 bytes + asd_get_D49814 6 bytes + asd_get_D49818 6 bytes + asd_get_key_words 152 bytes + asd_get_lane_count 88 bytes + asd_get_link_caps_full 696 bytes + asd_get_link_caps_full_v2 764 bytes + asd_get_link_caps_full_v3 784 bytes + asd_get_link_info 72 bytes + asd_get_link_reg_offsets 76 bytes + asd_get_platform_info 236 bytes + asd_hdcp1_disable 242 bytes + asd_hdcp1_teardown 220 bytes + asd_hdcp2_disable 268 bytes + asd_hdcp2_stream_manage 136 bytes + asd_hdcp_version_select 62 bytes + asd_hwop_068_v0 56 bytes + asd_hwop_068_v1 56 bytes + asd_hwop_068_v2 56 bytes + asd_hwop_068_v3 58 bytes + asd_hwop_068_v4 56 bytes + asd_hwop_068_v4_0 56 bytes + asd_hwop_06C_v0 88 bytes + asd_hwop_06C_v1 354 bytes + asd_hwop_070_v0 58 bytes + asd_hwop_070_v1 56 bytes + asd_hwop_074_v0 58 bytes + asd_hwop_074_v1 56 bytes + asd_hwop_078_v0 40 bytes + asd_hwop_07C_v0 54 bytes + asd_hwop_07C_v1 54 bytes + asd_hwop_080_v0 56 bytes + asd_hwop_080_v1 54 bytes + asd_hwop_080_v2 54 bytes + asd_hwop_080_v3 56 bytes + asd_hwop_084_v0 56 bytes + asd_hwop_084_v1 58 bytes + asd_hwop_090_v0 54 bytes + asd_hwop_0D4_v1 58 bytes + asd_hwop_0D4_v2 58 bytes + asd_hwop_0DC_v0 58 bytes + asd_hwop_0DC_v1 78 bytes + asd_is_supported_asic 86 bytes + asd_link_call_D49818 80 bytes + asd_link_call_D49818_guarded 26 bytes + asd_link_callback_ok 36 bytes + asd_link_check_C930 72 bytes + asd_link_program_timing 154 bytes + asd_link_query_D49800 72 bytes + asd_link_query_a 168 bytes + asd_link_reset 48 bytes + asd_link_reset_seq 164 bytes + asd_link_set_reg42468_field 90 bytes + asd_link_status_query 70 bytes + asd_link_sub_19204 38 bytes + asd_link_sub_C930 1840 bytes + asd_link_write_quad 130 bytes + asd_load_le32 22 bytes + asd_mmio_30106AC_rmw 34 bytes + asd_op_306 34 bytes + asd_op_309 58 bytes + asd_op_801 114 bytes + asd_op_802 14 bytes + asd_opt_cb_D497F0 12 bytes + asd_opt_cb_D497F8 12 bytes + asd_opt_cb_D497FC 12 bytes + asd_opt_cb_D4980C_bounded 12 bytes + asd_opt_cb_D49824 12 bytes + asd_opt_cb_D49828 12 bytes + asd_opt_cb_D4982C 12 bytes + asd_program_key_regs 100 bytes + asd_program_link_by_signal_v2 802 bytes + asd_program_link_by_signal_v3 784 bytes + asd_query_link_state 34 bytes + asd_query_type_6_7 70 bytes + asd_read_caps_blob 136 bytes + asd_reg_clr_bit1_wait 72 bytes + asd_reg_clr_bit2_wait 66 bytes + asd_reg_offsets_init_198C0 466 bytes + asd_reg_poll_seq 136 bytes + asd_reg_read_10800 50 bytes + asd_reg_read_11B00 182 bytes + asd_reg_read_11BE4 182 bytes + asd_reg_read_1217E 12 bytes + asd_reg_read_12688 80 bytes + asd_reg_read_12688_cfg12 6 bytes + asd_reg_read_12688_cfg13 6 bytes + asd_reg_read_12688_cfg14 6 bytes + asd_reg_read_12688_cfg17 6 bytes + asd_reg_read_12688_cfg18 6 bytes + asd_reg_read_12688_cfg19 6 bytes + asd_reg_read_12688_cfg20 6 bytes + asd_reg_read_13974 110 bytes + asd_reg_read_139E4 110 bytes + asd_reg_read_13A54 110 bytes + asd_reg_read_13B74 130 bytes + asd_reg_read_13B74_cfg0 44 bytes + asd_reg_read_13BF8 110 bytes + asd_reg_read_13CDC 110 bytes + asd_reg_read_13D24 110 bytes + asd_reg_read_13D24_cfg1 52 bytes + asd_reg_read_13E14 110 bytes + asd_reg_read_13E8C 62 bytes + asd_reg_read_13ED0 112 bytes + asd_reg_read_14028 90 bytes + asd_reg_read_140AC 110 bytes + asd_reg_read_141BA_cfg0 34 bytes + asd_reg_read_15CF4 42 bytes + asd_reg_read_15D24 30 bytes + asd_reg_read_15DF0 18 bytes + asd_reg_read_15FD8 18 bytes + asd_reg_read_162C0 48 bytes + asd_reg_read_162F0 48 bytes + asd_reg_read_18898 36 bytes + asd_reg_rw_19798 126 bytes + asd_reg_write_1663C 108 bytes + asd_reg_write_19328 106 bytes + asd_reg_write_19394 106 bytes + asd_reg_write_1946C 136 bytes + asd_reg_write_1946C_cfg0 48 bytes + asd_reg_write_19524 106 bytes + asd_reg_write_19600 106 bytes + asd_reg_write_19670 106 bytes + asd_reg_write_196E4 60 bytes + asd_reg_write_19724 108 bytes + asd_reg_write_1981C 20 bytes + asd_revocation_check_ksv 70 bytes + asd_set_D33308 6 bytes + asd_set_display_params_cfg12 32 bytes + asd_set_display_params_cfg13 32 bytes + asd_set_display_params_cfg16 32 bytes + asd_set_display_params_cfg17 36 bytes + asd_set_display_params_cfg18 32 bytes + asd_set_display_params_cfg19 32 bytes + asd_set_display_params_cfg20 36 bytes + asd_set_display_params_cfg8 46 bytes + asd_set_pair_D49838_cfg14 18 bytes + asd_set_pair_D49838_cfg16 18 bytes + asd_set_pair_D49838_cfg17 18 bytes + asd_set_reg42570_field 68 bytes + asd_set_reg425E4_mode 118 bytes + asd_set_unk_D33328_cfg0 14 bytes + asd_set_unk_D33328_cfg1 14 bytes + asd_set_unk_D33328_cfg2 14 bytes + asd_set_unk_D33328_cfg3 14 bytes + asd_srm_sub_10B30 18 bytes + asd_start_link_task 60 bytes + asd_store_link_config 74 bytes + asd_stream_reset 46 bytes + asd_stream_slot_update 124 bytes + asd_tbl_get_D4238C 22 bytes + asd_tbl_get_D423A8 22 bytes + asd_tbl_get_D423B0 22 bytes + asd_tbl_get_D423B8 22 bytes + asd_tbl_get_D423BC 22 bytes + asd_tbl_get_D423C0 22 bytes + asd_tbl_get_D423C8 24 bytes + asd_tbl_get_D423CC 24 bytes + asd_topology_remove 56 bytes + asd_write_block_paged 158 bytes + asd_write_key_regs 70 bytes + j_asd_aux_op_D1891C 4 bytes + j_asd_aux_op_D1891C_0 4 bytes + j_asd_aux_op_D1891C_1 4 bytes + j_asd_aux_op_D1891C_2 4 bytes + j_asd_aux_op_D1891C_3 4 bytes + j_asd_aux_op_D1891C_4 4 bytes + j_asd_build_link_map_full 4 bytes + j_asd_build_link_map_full_0 4 bytes + j_asd_clear_link_outputs_15 4 bytes + j_asd_clear_link_outputs_16 4 bytes + j_asd_clear_link_outputs_17 4 bytes + j_asd_dio_current_instance_op 4 bytes + j_asd_dio_current_instance_op_0 4 bytes + j_asd_dio_current_instance_op_1 4 bytes + j_asd_dio_current_instance_op_2 4 bytes + j_asd_dio_current_instance_op_3 4 bytes + j_asd_dio_current_instance_op_4 4 bytes + j_asd_dio_disable_all 4 bytes + j_asd_dio_disable_all_0 4 bytes + j_asd_dio_disable_all_1 4 bytes + j_asd_dio_disable_all_2 4 bytes + j_asd_dio_enable_all 4 bytes + j_asd_dio_enable_all_0 4 bytes + j_asd_dio_enable_all_1 4 bytes + j_asd_dio_enable_all_2 4 bytes + j_asd_dio_idle_check 4 bytes + j_asd_dio_idle_check_0 4 bytes + j_asd_dio_idle_check_1 4 bytes + j_asd_dio_idle_check_2 4 bytes + j_asd_dio_idle_check_3 4 bytes + j_asd_dio_idle_check_4 4 bytes + j_asd_dio_read_block 4 bytes + j_asd_dio_read_block10 4 bytes + j_asd_dio_read_block10_0 4 bytes + j_asd_dio_read_block10_2 4 bytes + j_asd_dio_read_block_0 4 bytes + j_asd_dio_read_block_1 4 bytes + j_asd_dio_read_pair 4 bytes + j_asd_dio_read_pair_0 4 bytes + j_asd_dio_read_pair_1 4 bytes + j_asd_dio_read_pair_2 4 bytes + j_asd_dio_read_pair_3 4 bytes + j_asd_dio_read_pair_4 4 bytes + j_asd_dio_set_pair 4 bytes + j_asd_dio_set_pair_0 4 bytes + j_asd_dio_set_pair_1 4 bytes + j_asd_dio_set_pair_2 4 bytes + j_asd_dio_set_pair_3 4 bytes + j_asd_dio_set_pair_4 4 bytes + j_asd_dio_write_packed 4 bytes + j_asd_dio_write_packed_0 4 bytes + j_asd_dio_write_packed_1 4 bytes + j_asd_dio_write_packed_2 4 bytes + j_asd_encoder_enable_seq_v3 4 bytes + j_asd_encoder_enable_seq_v3_0 4 bytes + j_asd_encoder_enable_seq_v3_2 4 bytes + j_asd_encoder_query 4 bytes + j_asd_get_link_caps_full 4 bytes + j_asd_get_link_caps_full_v2 4 bytes + j_asd_get_link_caps_full_v2_0 4 bytes + j_asd_get_link_caps_full_v2_1 4 bytes + j_asd_get_link_caps_full_v2_10 4 bytes + j_asd_get_link_caps_full_v2_11 4 bytes + j_asd_get_link_caps_full_v2_12 4 bytes + j_asd_get_link_caps_full_v2_13 4 bytes + j_asd_get_link_caps_full_v2_14 4 bytes + j_asd_get_link_caps_full_v2_2 4 bytes + j_asd_get_link_caps_full_v2_3 4 bytes + j_asd_get_link_caps_full_v2_4 4 bytes + j_asd_get_link_caps_full_v2_5 4 bytes + j_asd_get_link_caps_full_v2_6 4 bytes + j_asd_get_link_caps_full_v2_7 4 bytes + j_asd_get_link_caps_full_v2_8 4 bytes + j_asd_get_link_caps_full_v2_9 4 bytes + j_asd_get_link_caps_full_v3 4 bytes + j_asd_get_link_reg_offsets 4 bytes + j_asd_get_link_reg_offsets_0 4 bytes + j_asd_get_link_reg_offsets_1 4 bytes + j_asd_get_pair_D49838_10 4 bytes + j_asd_get_pair_D49838_11 4 bytes + j_asd_get_pair_D49838_12 4 bytes + j_asd_get_pair_D49838_13 4 bytes + j_asd_get_signal_reg_15 4 bytes + j_asd_get_signal_reg_16 4 bytes + j_asd_get_signal_reg_17 4 bytes + j_asd_link_program_timing 4 bytes + j_asd_link_program_timing_0 4 bytes + j_asd_link_program_timing_1 4 bytes + j_asd_link_program_timing_10 4 bytes + j_asd_link_program_timing_11 4 bytes + j_asd_link_program_timing_12 4 bytes + j_asd_link_program_timing_13 4 bytes + j_asd_link_program_timing_14 4 bytes + j_asd_link_program_timing_15 4 bytes + j_asd_link_program_timing_16 4 bytes + j_asd_link_program_timing_17 4 bytes + j_asd_link_program_timing_2 4 bytes + j_asd_link_program_timing_3 4 bytes + j_asd_link_program_timing_4 4 bytes + j_asd_link_program_timing_5 4 bytes + j_asd_link_program_timing_6 4 bytes + j_asd_link_program_timing_7 4 bytes + j_asd_link_program_timing_8 4 bytes + j_asd_link_program_timing_9 4 bytes + j_asd_link_query_a 4 bytes + j_asd_link_query_a_0 4 bytes + j_asd_link_query_b_14 4 bytes + j_asd_link_read_pair_regs_15 4 bytes + j_asd_link_read_pair_regs_16 4 bytes + j_asd_link_read_pair_regs_17 4 bytes + j_asd_link_ready_full_check_15 4 bytes + j_asd_link_ready_full_check_16 4 bytes + j_asd_link_ready_full_check_17 4 bytes + j_asd_link_reset_seq 4 bytes + j_asd_link_reset_seq_0 4 bytes + j_asd_link_reset_seq_1 4 bytes + j_asd_link_reset_seq_10 4 bytes + j_asd_link_reset_seq_11 4 bytes + j_asd_link_reset_seq_12 4 bytes + j_asd_link_reset_seq_13 4 bytes + j_asd_link_reset_seq_14 4 bytes + j_asd_link_reset_seq_15 4 bytes + j_asd_link_reset_seq_16 4 bytes + j_asd_link_reset_seq_17 4 bytes + j_asd_link_reset_seq_2 4 bytes + j_asd_link_reset_seq_3 4 bytes + j_asd_link_reset_seq_4 4 bytes + j_asd_link_reset_seq_5 4 bytes + j_asd_link_reset_seq_6 4 bytes + j_asd_link_reset_seq_7 4 bytes + j_asd_link_reset_seq_8 4 bytes + j_asd_link_reset_seq_9 4 bytes + j_asd_link_set_reg42468_field 4 bytes + j_asd_link_set_reg42468_field_0 4 bytes + j_asd_link_set_reg42468_field_1 4 bytes + j_asd_link_set_reg42468_field_10 4 bytes + j_asd_link_set_reg42468_field_11 4 bytes + j_asd_link_set_reg42468_field_12 4 bytes + j_asd_link_set_reg42468_field_13 4 bytes + j_asd_link_set_reg42468_field_14 4 bytes + j_asd_link_set_reg42468_field_15 4 bytes + j_asd_link_set_reg42468_field_16 4 bytes + j_asd_link_set_reg42468_field_17 4 bytes + j_asd_link_set_reg42468_field_2 4 bytes + j_asd_link_set_reg42468_field_3 4 bytes + j_asd_link_set_reg42468_field_4 4 bytes + j_asd_link_set_reg42468_field_5 4 bytes + j_asd_link_set_reg42468_field_6 4 bytes + j_asd_link_set_reg42468_field_7 4 bytes + j_asd_link_set_reg42468_field_8 4 bytes + j_asd_link_set_reg42468_field_9 4 bytes + j_asd_link_set_reg4248C_half_15 4 bytes + j_asd_link_set_reg4248C_half_16 4 bytes + j_asd_link_set_reg4248C_half_17 4 bytes + j_asd_link_train_status_15 4 bytes + j_asd_link_train_status_16 4 bytes + j_asd_link_train_status_17 4 bytes + j_asd_link_wait_and_set_14 4 bytes + j_asd_link_wait_and_set_15 4 bytes + j_asd_link_wait_and_set_16 4 bytes + j_asd_link_wait_and_set_17 4 bytes + j_asd_link_write_quad 4 bytes + j_asd_link_write_quad_0 4 bytes + j_asd_link_write_quad_1 4 bytes + j_asd_link_write_quad_10 4 bytes + j_asd_link_write_quad_11 4 bytes + j_asd_link_write_quad_12 4 bytes + j_asd_link_write_quad_13 4 bytes + j_asd_link_write_quad_14 4 bytes + j_asd_link_write_quad_15 4 bytes + j_asd_link_write_quad_16 4 bytes + j_asd_link_write_quad_17 4 bytes + j_asd_link_write_quad_2 4 bytes + j_asd_link_write_quad_3 4 bytes + j_asd_link_write_quad_4 4 bytes + j_asd_link_write_quad_5 4 bytes + j_asd_link_write_quad_6 4 bytes + j_asd_link_write_quad_7 4 bytes + j_asd_link_write_quad_8 4 bytes + j_asd_link_write_quad_9 4 bytes + j_asd_pipe_enable_15 4 bytes + j_asd_pipe_enable_16 4 bytes + j_asd_pipe_enable_17 4 bytes + j_asd_pipe_lookup_15 4 bytes + j_asd_pipe_lookup_16 4 bytes + j_asd_pipe_lookup_17 4 bytes + j_asd_program_key_regs 4 bytes + j_asd_program_key_regs_0 4 bytes + j_asd_program_key_regs_1 4 bytes + j_asd_program_key_regs_10 4 bytes + j_asd_program_key_regs_11 4 bytes + j_asd_program_key_regs_12 4 bytes + j_asd_program_key_regs_13 4 bytes + j_asd_program_key_regs_14 4 bytes + j_asd_program_key_regs_2 4 bytes + j_asd_program_key_regs_3 4 bytes + j_asd_program_key_regs_4 4 bytes + j_asd_program_key_regs_5 4 bytes + j_asd_program_key_regs_6 4 bytes + j_asd_program_key_regs_7 4 bytes + j_asd_program_key_regs_8 4 bytes + j_asd_program_key_regs_9 4 bytes + j_asd_program_link_by_signal_v2 4 bytes + j_asd_program_link_by_signal_v2_2 4 bytes + j_asd_program_link_by_signal_v3 4 bytes + j_asd_query_link_config_15 4 bytes + j_asd_query_link_config_16 4 bytes + j_asd_query_link_config_17 4 bytes + j_asd_reg_read_10800 4 bytes + j_asd_reg_read_10800_2 4 bytes + j_asd_reg_read_10800_3 4 bytes + j_asd_reg_read_10800_4 4 bytes + j_asd_reg_read_13B74_cfg2_15 4 bytes + j_asd_reg_read_13B74_cfg2_16 4 bytes + j_asd_reg_read_13B74_cfg2_17 4 bytes + j_asd_reg_read_13B74_cfg3_15 4 bytes + j_asd_reg_read_13B74_cfg3_16 4 bytes + j_asd_reg_read_13B74_cfg3_17 4 bytes + j_asd_reg_read_13D24_cfg0_15 4 bytes + j_asd_reg_read_13D24_cfg0_16 4 bytes + j_asd_reg_read_13D24_cfg1 4 bytes + j_asd_session_op57_invoke_4 4 bytes + j_asd_set_reg42570_field 4 bytes + j_asd_set_reg425E4_mode 4 bytes + j_asd_set_reg425E4_mode_0 4 bytes + j_asd_set_reg425E4_mode_1 4 bytes + j_asd_set_reg425E4_mode_10 4 bytes + j_asd_set_reg425E4_mode_11 4 bytes + j_asd_set_reg425E4_mode_12 4 bytes + j_asd_set_reg425E4_mode_13 4 bytes + j_asd_set_reg425E4_mode_14 4 bytes + j_asd_set_reg425E4_mode_15 4 bytes + j_asd_set_reg425E4_mode_16 4 bytes + j_asd_set_reg425E4_mode_2 4 bytes + j_asd_set_reg425E4_mode_3 4 bytes + j_asd_set_reg425E4_mode_4 4 bytes + j_asd_set_reg425E4_mode_5 4 bytes + j_asd_set_reg425E4_mode_6 4 bytes + j_asd_set_reg425E4_mode_7 4 bytes + j_asd_set_reg425E4_mode_8 4 bytes + j_asd_set_reg425E4_mode_9 4 bytes + j_asd_signal_status_check_15 4 bytes + j_asd_signal_status_check_16 4 bytes + j_asd_signal_status_check_17 4 bytes + j_asd_state_not_1_cfg0 4 bytes + j_asd_state_not_1_cfg0_0 4 bytes + j_asd_state_not_1_cfg0_1 4 bytes + j_asd_state_not_1_cfg0_2 4 bytes + j_asd_state_not_1_cfg0_3 4 bytes + j_asd_state_not_1_cfg0_4 4 bytes + j_asd_state_not_1_cfg0_5 4 bytes + j_asd_state_not_1_cfg0_6 4 bytes + j_asd_state_not_1_cfg0_7 4 bytes + j_asd_state_not_1_cfg0_8 4 bytes + j_asd_state_not_1_cfg0_9 4 bytes + j_asd_stream_reset 4 bytes + j_asd_stream_reset_0 4 bytes + j_asd_stream_reset_1 4 bytes + j_asd_stream_reset_2 4 bytes + j_asd_stream_reset_3 4 bytes + j_asd_write_block_paged 4 bytes + j_asd_write_block_paged_0 4 bytes + j_asd_write_block_paged_1 4 bytes + j_asd_write_block_paged_10 4 bytes + j_asd_write_block_paged_11 4 bytes + j_asd_write_block_paged_12 4 bytes + j_asd_write_block_paged_13 4 bytes + j_asd_write_block_paged_14 4 bytes + j_asd_write_block_paged_15 4 bytes + j_asd_write_block_paged_16 4 bytes + j_asd_write_block_paged_17 4 bytes + j_asd_write_block_paged_2 4 bytes + j_asd_write_block_paged_3 4 bytes + j_asd_write_block_paged_4 4 bytes + j_asd_write_block_paged_5 4 bytes + j_asd_write_block_paged_6 4 bytes + j_asd_write_block_paged_7 4 bytes + j_asd_write_block_paged_8 4 bytes + j_asd_write_block_paged_9 4 bytes + memcmp_be 88 bytes + memcpy 136 bytes ## functions present only in 33.0.4.153 - asd_reg_read_188BC 30 bytes - int 322 bytes - start 3928 bytes ## body changes, per function ### asd_asic5592_call_D0BE70 - vX = sub_X(a1: vX); - if ( sub_X(a1: vX) == 0 ) + vX = asd_asic_family_lookup(a1: (int)vX); + if ( asd_asic_family_lookup(a1: (int)vX) == 0 ) { ### asd_build_hw_ops vX = off_X; - a1[21] = off_X; - a1[22] = vX; - a1[23] = vX; - a1[24] = vX; + a1[24] = off_X; a1[25] = vX; a1[26] = vX; - vX = off_X; - a1[27] = off_X; + a1[27] = vX; a1[28] = vX; a1[29] = vX; + vX = off_X; + a1[30] = off_X; + a1[31] = vX; + a1[32] = vX; vX = (int *)off_X; a1[7] = vX; - a1[30] = off_X; + a1[33] = off_X; a1[9] = off_X; - a1[31] = off_X; + a1[34] = off_X; a1[10] = off_X; a1[11] = off_X; - a1[32] = off_X; + a1[35] = off_X; vX = off_X; a1[12] = off_X; - a1[33] = off_X; - vX = off_X; - a1[45] = off_X; - a1[46] = vX; - a1[35] = vX; - a1[36] = vX; - vX = off_X; - vX = off_X; - a1[37] = off_X; - a1[49] = vX; - a1[50] = vX; + a1[36] = off_X; + vX = off_X; + a1[50] = off_X; + a1[51] = vX; + a1[40] = vX; + a1[41] = vX; + vX = off_X; + vX = off_X; + a1[42] = off_X; + a1[54] = vX; + a1[55] = vX; vX = off_X; *a1 = off_X; - a1[21] = off_X; + a1[24] = off_X; vX = off_X; *a1 = off_X; - a1[21] = off_X; + a1[24] = off_X; vX = off_X; LABEL_5: + a1[50] = vX; + a1[51] = vX; + vX = (int *)off_X; + vX = off_X; + vX = off_X; + vX = off_X; + vX = off_X; + vX = (int *)off_X; + a1[52] = off_X; + a1[53] = vX; + a1[54] = vX; + a1[41] = vX; + a1[42] = vX; + a1[43] = vX; + a1[44] = vX; a1[45] = vX; - a1[46] = vX; - vX = (int *)off_X; - vX = off_X; - vX = off_X; - vX = off_X; - vX = off_X; - vX = (int *)off_X; - a1[47] = off_X; - a1[48] = vX; - a1[49] = vX; - a1[36] = vX; - a1[37] = vX; - a1[38] = vX; - a1[39] = vX; - a1[40] = vX; goto LABEL_10; vX = off_X; - a1[21] = off_X; - a1[22] = vX; - a1[23] = vX; - a1[24] = vX; + a1[24] = off_X; a1[25] = vX; a1[26] = vX; - vX = off_X; - vX = off_X; - a1[27] = off_X; + a1[27] = vX; a1[28] = vX; + a1[29] = vX; + vX = off_X; + vX = off_X; + a1[30] = off_X; + a1[31] = vX; *a1 = vX; vX = off_X; - a1[29] = off_X; - a1[30] = vX; - vX = off_X; - a1[31] = off_X; - a1[32] = vX; + a1[32] = off_X; + a1[33] = vX; + vX = off_X; + a1[34] = off_X; + a1[35] = vX; + vX = off_X; + a1[50] = vX; + HIDWORD(vX) = off_X; a1[13] = vX; - vX = off_X; - a1[45] = off_X; - vX = off_X; - vX = off_X; - a1[34] = vX; - a1[35] = vX; - a1[36] = vX; - vX = off_X; - vX = off_X; - a1[49] = off_X; + a1[37] = off_X; + LODWORD(vX) = off_X; + *((_QWORD *)a1 + 20) = vX; + LODWORD(vX) = off_X; + vX = off_X; + a1[54] = off_X; + a1[55] = vX; + vX = (int *)off_X; +LABEL_7: + a1[45] = vX; + a1[46] = vX; + goto LABEL_10; + case 11: + a1[30] = off_X; + *a1 = off_X; + a1[24] = off_X; + vX = off_X; + a1[6] = off_X; + vX = off_X; + vX = off_X; + vX = off_X; + vX = off_X; a1[50] = vX; - vX = (int *)off_X; -LABEL_7: + a1[51] = vX; + a1[52] = vX; + a1[53] = vX; + vX = off_X; + vX = (int *)off_X; + vX = off_X; + vX = (int *)off_X; + vX = off_X; + a1[54] = off_X; a1[40] = vX; a1[41] = vX; - goto LABEL_10; - case 11: - a1[27] = off_X; - *a1 = off_X; - a1[21] = off_X; - vX = off_X; - a1[6] = off_X; - vX = off_X; - vX = off_X; - vX = off_X; - vX = off_X; + a1[42] = vX; + a1[43] = vX; + a1[44] = vX; a1[45] = vX; - a1[46] = vX; - a1[47] = vX; - a1[48] = vX; - vX = off_X; - vX = (int *)off_X; - vX = off_X; - vX = (int *)off_X; - vX = off_X; - a1[49] = off_X; - a1[35] = vX; - a1[36] = vX; - a1[37] = vX; - a1[38] = vX; - a1[39] = vX; - a1[40] = vX; goto LABEL_10; case 12: - a1[27] = off_X; + a1[30] = off_X; vX = off_X; vX = off_X; - a1[21] = off_X; + a1[24] = off_X; a1[6] = vX; vX = off_X; - a1[45] = off_X; - a1[46] = vX; - vX = off_X; - vX = off_X; - a1[47] = vX; - a1[48] = vX; - a1[49] = vX; - vX = off_X; - vX = off_X; - vX = off_X; - vX = off_X; - vX = (int *)off_X; - a1[35] = off_X; - a1[36] = vX; - a1[37] = vX; - a1[38] = vX; - a1[39] = vX; - a1[40] = vX; + a1[50] = off_X; + a1[51] = vX; + vX = off_X; + vX = off_X; + a1[52] = vX; + a1[53] = vX; + a1[54] = vX; + vX = off_X; + vX = off_X; + vX = off_X; + vX = off_X; + vX = (int *)off_X; + a1[40] = off_X; + a1[41] = vX; + a1[42] = vX; + a1[43] = vX; + a1[44] = vX; + a1[45] = vX; LABEL_10: - vX = a1 + 21; - for ( i = 0; i != 14; ++i ) + vX = a1 + 24; + for ( i = 0; i != 16; ++i ) { vX(a1: &vX); - *((_WORD *)vX + i - 14) = vX; + *((_WORD *)vX + i - 16) = vX; } } - vX = a1 + 45; + vX = a1 + 50; for ( j = 0; j != 6; ++j ) ### asd_build_reg_addr_table_v2 +// Fills a 24-entry table of register block base addresses (0xX-class values +// stepping by 0xX) used to resolve per-instance register bases. unsigned int __fastcall asd_build_reg_addr_table_v2(int a1, int a2) { vX[21] = dword_X + 4096; + vX[20] = dword_X; vX[19] = dword_X + 4096; - vX[20] = dword_X; + vX[6] = dword_X; vX[17] = dword_X + 4096; - vX[6] = dword_X; + vX = (unsigned int *)off_X; vX[15] = dword_X + 4096; - vX[12] = dword_X; + vX[18] = dword_X; vX[13] = dword_X + 4096; vX[11] = dword_X + 4096; - vX[18] = dword_X; + vX[8] = dword_X; vX[9] = dword_X + 4096; vX[12] = dword_X + 4; - vX = vX; vX[11] = dword_X; vX[8] = dword_X + 4; + vX = 0; vX[7] = dword_X; vX[4] = dword_X + 4; - vX = 0; vX[3] = dword_X; - vX = (unsigned int *)off_X; + vX = vX; vX[2] = dword_X + 4; vX[14] = dword_X; - vX[8] = dword_X; + vX[12] = dword_X; vX[0] = dword_X; break; - if ( asd_test_bit(a1: vX[1], a2: vX) != 0 ) + result = asd_test_bit(a1: vX[1], a2: vX); + if ( result != 0 ) { - vX = (_DWORD *)(a1 + 16 * vX); + if ( vX >> 30 != 0 ) + return result; vX = vX[1]; vX = vX[3]; + vX = (_DWORD *)(a1 + 16 * vX); *vX = *vX; ### asd_clear_link_outputs return 2; - vX = off_X; - if ( (sub_X(a1: 0, a2: *((_DWORD *)off_X + 6), a3: a1->field14) & 0x100) == 0 ) + vX = (int *)off_X; + if ( (asd_reg_read_13B74(a1: 0, a2: *((_DWORD *)off_X + 8), a3: a1->field14) & 0x100) == 0 ) return 1; - *(_DWORD *)a2 = sub_X(a1: 0, a2: vX[18], a3: field14); - if ( (sub_X(a1: 0, a2: vX[6], a3: field14) & 0x200) == 0 ) + *(_DWORD *)a2 = asd_reg_read_13B74(a1: 0, a2: vX[20], a3: field14); + if ( (asd_reg_read_13B74(a1: 0, a2: vX[8], a3: field14) & 0x200) == 0 ) return 1; vX = 0; - *((_DWORD *)a2 + 1) = sub_X(a1: 0, a2: vX[19], a3: field14); + *((_DWORD *)a2 + 1) = asd_reg_read_13B74(a1: 0, a2: vX[21], a3: field14); if ( a1->field40 == 2 ) { - if ( (sub_X(a1: 0, a2: vX[10], a3: field14) & 0x100) != 0 ) + if ( (asd_reg_read_13B74(a1: 0, a2: vX[12], a3: field14) & 0x100) != 0 ) { - *(_DWORD *)a3 = sub_X(a1: 0, a2: vX[32], a3: field14); - if ( (sub_X(a1: 0, a2: vX[10], a3: field14) & 0x200) != 0 ) + *(_DWORD *)a3 = asd_reg_read_13B74(a1: 0, a2: vX[34], a3: field14); + if ( (asd_reg_read_13B74(a1: 0, a2: vX[12], a3: field14) & 0x200) != 0 ) { vX = 0; - *((_DWORD *)a3 + 1) = sub_X(a1: 0, a2: vX[33], a3: field14); + *((_DWORD *)a3 + 1) = asd_reg_read_13B74(a1: 0, a2: vX[35], a3: field14); return vX; ### asd_connector_enable vX = off_X; - if ( sub_X(a1: 0, a2: *((_DWORD *)off_X + 2), a3: a1) << 31 == 0 ) + if ( asd_reg_read_13B74(a1: 0, a2: *((_DWORD *)off_X + 4), a3: a1) << 31 == 0 ) return 8; - vX = sub_X(a1: vX[40], a2: a1); - sub_X(a1: vX[40], a2: a1, a3: vX | 1); + asd_reg_read_13D24(a1: vX[42], a2: a1); + asd_reg_write_19600(a1: vX[42], a2: a1); return 0; ### asd_count_bits_below +// Counts set bits of a1 at positions [0, a2), saturating at -1. int __fastcall asd_count_bits_below(unsigned int a1, int a2) for ( i = 0; a2 != i; ++i ) - { - vX = (i < 0x20) & (a1 >> i); - result += vX; - } + result += (i < 0x20) & (a1 >> i) & (result != -1); return result; ### asd_dispatch { vX = off_X; - if ( off_X[1] != -1 ) + vX = off_X[1]; + vX = vX + 1; + if ( vX != -1 ) __asm { SVC 0x5E ; '^' } case 0x180u: - sub_X(a1: req->arg1); - break; + link_info = sub_X(a1: req->arg1, a2, a3: vX); + goto LABEL_109; case 0x181u: - sub_X(a1: req->arg1, a2: LOBYTE(req->arg2)); - break; + link_info = sub_X(a1: req->arg1, a2: LOBYTE(req->arg2), a3: vX); + goto LABEL_109; case 0x182u: - sub_X(a1: req->arg1, a2: req->arg2, a3: req->arg3, a4, a5: a3, a6: a4); - break; + link_info = sub_X(a1: req->arg1, a2: req->arg2, a3: req->arg3); + goto LABEL_109; case 0x183u: - sub_X(a1: req->arg1, a2: req->arg2, a3: req->arg3, a4, a5: a3, a6: a4); - break; + link_info = sub_X(a1: req->arg1, a2: req->arg2, a3: req->arg3); + goto LABEL_109; case 0x184u: - sub_X(a1: req->arg1, a2: req->arg2, a3: req->arg3, a4, a5: a3, a6: a4); - break; + link_info = sub_X(a1: req->arg1, a2: req->arg2, a3: req->arg3); + goto LABEL_109; case 0x185u: - sub_X(a1: req->arg1, a2: req->arg2, a3: req->arg3, a4, a5: a3, a6: a4); - break; + link_info = sub_X(a1: req->arg1, a2: req->arg2, a3: req->arg3); + goto LABEL_109; case 0x186u: - sub_X(a1: req->arg1, a2: LOWORD(req->arg2), a3: HIWORD(req->arg2), a4, a5: a3, a6: a4); - break; + link_info = sub_X(a1: req->arg1, a2: LOWORD(req->arg2), a3: HIWORD(req->arg2)); + goto LABEL_109; case 0x187u: - sub_X(a1: req->arg1); - break; + link_info = sub_X(a1: req->arg1, a2, a3: vX); + goto LABEL_109; case 0x188u: - sub_X(a1: req->arg1); - break; + link_info = sub_X(a1: req->arg1, a2, a3: vX); + goto LABEL_109; case 0x189u: - sub_X(a1: req->arg1); - break; + link_info = asd_hdcp1_disable(a1: req->arg1); + goto LABEL_109; case 0x18Au: - sub_X(a1: req->arg1, a2: LOWORD(req->arg2)); - break; + link_info = sub_X(a1: req->arg1, a2: LOWORD(req->arg2), a3: vX); + goto LABEL_109; case 0x18Bu: - sub_X(a1: req->arg1, a2: LOBYTE(req->arg2)); - break; + link_info = sub_X(a1: req->arg1, a2: LOBYTE(req->arg2), a3: vX); + goto LABEL_109; case 0x18Cu: - sub_X(a1: req->arg1, a2: req->arg2, a3: req->arg3, a4: req->arg4, a5: a3, a6: a4); - break; + link_info = sub_X(a1: req->arg1, a2: req->arg2, a3: req->arg3, a4: req->arg4); + goto LABEL_109; case 0x18Du: case 0x19Fu: - break; - case 0x18Eu: - sub_X(a1: req->arg1, a2: req->arg2, a3: LOBYTE(req->arg3), a4: req->arg4, a5: a3, a6: a4); - break; - case 0x18Fu: - sub_X(a1: req->arg1); - break; - case 0x1A0u: - sub_X(a1: req->arg1); - break; - case 0x1A1u: - sub_X(a1: req->arg1, a2: req->arg2, a3: req->arg3, a4, a5: a3, a6: a4); - break; - case 0x1A2u: - case 0x1A3u: - case 0x1A4u: - case 0x1A5u: - case 0x1A6u: - case 0x1A7u: - case 0x1A8u: - case 0x1A9u: - case 0x1AAu: case 0x1ABu: case 0x1BFu: +LABEL_104: + vX = 4; + goto LABEL_110; + case 0x18Eu: + link_info = sub_X(a1: req->arg1, a2: req->arg2, a3: LOBYTE(req->arg3), a4: req->arg4); + goto LABEL_109; + case 0x18Fu: + link_info = asd_hdcp1_teardown(a1: req->arg1); + goto LABEL_109; + case 0x1A0u: + link_info = sub_X(a1: req->arg1, a2, a3: vX); + goto LABEL_109; + case 0x1A1u: + link_info = sub_X(a1: req->arg1, a2: req->arg2, a3: req->arg3); + goto LABEL_109; + case 0x1A2u: + link_info = asd_hdcp2_disable(a1: req->arg1); + goto LABEL_109; + case 0x1A3u: + link_info = sub_X(a1: req->arg1, a2: req->arg2, a3: vX); + goto LABEL_109; + case 0x1A4u: + link_info = sub_X(a1: req->arg1, a2: req->arg2, a3: vX); + goto LABEL_109; + case 0x1A5u: + link_info = asd_hdcp2_stream_manage(a1: req->arg1, a2: req->arg2); + goto LABEL_109; + case 0x1A6u: + link_info = sub_X(a1: req->arg1, a2, a3: vX); + goto LABEL_109; + case 0x1A7u: + link_info = sub_X(a1: req->arg1, a2: (int *)req->arg2, a3: LOBYTE(req->arg3), a4: (_DWORD *)req->arg4); + goto LABEL_109; + case 0x1A8u: + link_info = sub_X(a1: req->arg1, a2, a3: vX); + goto LABEL_109; + case 0x1A9u: + link_info = sub_X(a1: req->arg1, a2: req->arg2, a3: vX); + goto LABEL_109; + case 0x1AAu: + link_info = sub_X(a1: (int *)req->arg1, a2: LOBYTE(req->arg2)); + goto LABEL_109; case 0x1C0u: - abort(); + link_info = sub_X(a1: req->arg1, a2, a3: vX); +LABEL_109: + vX = link_info; +LABEL_110: + if ( vX[1] != -1 ) + __asm { SVC 0x5F ; '_' } + if ( vX != 0 ) + { + vX = (void (__fastcall *)(int, int, int, int))off_X; + off_X(a1: 227, a2: 1, a3: 61440); + vX(a1: 227, a2: 1, a3: HIWORD(vX), a4: vX); + vX(a1: 227, a2: 1, a3: (unsigned __int16)vX, a4: vX); + if ( rpc_id <= 0xFFFE ) + asd_log_event(a1: 227, a2: 1, a3: (unsigned __int16)rpc_id, a4: vX); + } + else + { + vX = 0; + } + break; default: case 0x200u: - sub_X(a1: req->arg1); - break; + link_info = sub_X(a1: req->arg1, a2, a3: vX); + goto LABEL_109; case 0x201u: - sub_X(a1: req->arg1); - JUMPOUT(0xX); + link_info = sub_X(a1: req->arg1, a2, a3: vX); + goto LABEL_109; case 0x202u: - asd_svc_op_202(a1: req->arg1, a2: req->arg2, a3: req->arg3, a4: (unsigned int *)req->arg4); - break; + link_info = asd_svc_op_202(a1: req->arg1, a2: req->arg2, a3: req->arg3, a4: (unsigned int *)req->arg4); + goto LABEL_109; case 0x203u: - sub_X(a1: req->arg1, a2: req->arg2, a3: req->arg3, a4, a5: a3, a6: a4); - break; + link_info = sub_X(a1: req->arg1, a2: req->arg2, a3: req->arg3); + goto LABEL_109; case 0x204u: - sub_X(a1: req->arg1); - break; + link_info = sub_X(a1: req->arg1, a2, a3: vX); + goto LABEL_109; case 0x205u: - vX = sub_X(a1: req->arg1, a2: req->arg2); - if ( sub_X(a1: vX, a2: vX) == 0 && req->arg1 == 1 ) + vX = sub_X(a1: req->arg1, a2: req->arg2, a3: vX); + if ( sub_X() == 0 && req->arg1 == 1 ) asd_session_op57(); - break; + goto LABEL_110; case 0x206u: - vX = sub_X(a1: req->arg1, a2: req->arg2); - if ( sub_X(a1: vX, a2: vX) == 0 && req->arg1 == 1 && sub_X(a1: 1) == 0 ) + vX = sub_X(a1: req->arg1, a2: req->arg2, a3: vX); + if ( sub_X() == 0 && req->arg1 == 1 && !asd_dio_entry_present(a1: 1u) ) asd_session_timeout_disable(); - break; + goto LABEL_110; case 0x207u: - asd_svc_op_207(a1: req->arg1); - break; + link_info = asd_svc_op_207(a1: req->arg1); + goto LABEL_109; case 0x208u: - asd_log_event(a1: LOBYTE(req->arg1), a2: BYTE1(req->arg1), a3: HIWORD(req->arg1), a4); - break; + link_info = asd_log_event(a1: LOBYTE(req->arg1), a2: BYTE1(req->arg1), a3: HIWORD(req->arg1), a4); + goto LABEL_109; case 0x209u: - sub_X(a1: rpc_id, a2); - break; + link_info = sub_X(); + goto LABEL_109; case 0x20Au: - sub_X(a1: req->arg1, a2: req->arg2); - break; + link_info = sub_X(a1: req->arg1, a2: req->arg2, a3: vX); + goto LABEL_109; case 0x20Bu: - asd_svc_op_20B(a1: (BOOL *)req->arg1); - break; + link_info = asd_svc_op_20B(a1: (BOOL *)req->arg1); + goto LABEL_109; default: case 0x100u: - sub_X(a1: req->arg1, a2: req->arg2); - break; + link_info = sub_X(a1: req->arg1, a2: req->arg2, a3: vX); + goto LABEL_109; case 0x101u: - sub_X(a1: req->arg1); - break; + link_info = asd_topology_remove(a1: req->arg1); + goto LABEL_109; case 0x102u: - sub_X(a1: req->arg1, a2: req->arg2); - break; + link_info = sub_X(a1: req->arg1, a2: req->arg2, a3: vX); + goto LABEL_109; case 0x103u: - sub_X(a1: req->arg1, a2: req->arg2); - break; + link_info = sub_X(a1: req->arg1, a2: req->arg2, a3: vX); + goto LABEL_109; case 0x104u: - sub_X(a1: req->arg1, a2: req->arg2); - break; + link_info = sub_X(a1: req->arg1, a2: req->arg2, a3: vX); + goto LABEL_109; case 0x105u: - sub_X(a1: req->arg1, a2: req->arg2); - break; + link_info = sub_X(a1: req->arg1, a2: req->arg2, a3: vX); + goto LABEL_109; case 0x106u: - goto LABEL_95; + goto LABEL_104; case 0x107u: - sub_X(a1: req->arg1, a2: req->arg2); - break; + link_info = asd_get_link_info(a1: req->arg1, a2: (unsigned int *)req->arg2); + goto LABEL_109; case 0x108u: - sub_X(a1: req->arg1, a2: req->arg2); - break; + link_info = sub_X(a1: req->arg1, a2: req->arg2, a3: vX); + goto LABEL_109; case 0x109u: - sub_X(a1: req->arg1); - break; + link_info = sub_X(a1: req->arg1, a2, a3: vX); + goto LABEL_109; case 0x10Au: + link_info = sub_X(a1: req->arg1, a2: req->arg2, a3: vX); + goto LABEL_109; case 0x10Bu: - abort(); + link_info = sub_X(a1: LOBYTE(req->arg1), a2: req->arg2, a3: req->arg3, a4: req->arg4); + goto LABEL_109; default: case 0x300u: - asd_srm_read(a1: (int *)req->arg1, a2: req->arg2, a3: (_DWORD *)req->arg3, a4: (_BYTE *)req->arg4); + link_info = asd_srm_read( + a1: (int *)req->arg1, + a2: req->arg2, + a3: (_DWORD *)req->arg3, + a4: (_BYTE *)req->arg4); break; case 0x301u: - asd_srm_op_301( - a1: req->arg1, - a2: req->arg2, - a3: (int *)req->arg3, - a4, - a5: a3, - a6: a4, - a7: savedregs); + link_info = asd_srm_op_301( + a1: req->arg1, + a2: req->arg2, + a3: (int *)req->arg3, + a4, + a5: a2, + a6: a3, + a7: a4); break; case 0x302u: - sub_X(a1: req->arg1); + link_info = sub_X(a1: req->arg1, a2, a3: vX); break; case 0x303u: - sub_X(a1: req->arg1); + link_info = sub_X(a1: req->arg1, a2, a3: vX); break; case 0x304u: - asd_op_304(a1: rpc_id, a2); + link_info = asd_op_304(a1: rpc_id - 768, a2); break; case 0x305u: - asd_op_305(a1: req->arg1); + link_info = asd_op_305(a1: req->arg1); break; case 0x306u: - sub_X(a1: rpc_id, a2); + link_info = asd_op_306(); break; case 0x307u: - sub_X(a1: req->arg1); + link_info = asd_revocation_check_ksv(a1: req->arg1); break; case 0x308u: - asd_srm_store(a1: req->arg1, a2: req->arg2, a3: (unsigned int *)req->arg3, a4: (_BYTE *)req->arg4); + link_info = asd_srm_store( + a1: req->arg1, + a2: (int *)req->arg2, + a3: (unsigned int *)req->arg3, + a4: (_BYTE *)req->arg4); + break; + case 0x309u: + link_info = asd_op_309(a1: (unsigned int *)req->arg1); break; case 0xX: - if ( a2 == 0 ) - __asm { SVC 0x5E ; '^' } - break; - case 0xX: - if ( a2 == 0 ) - { - sub_X(a1: rpc_id, a2: 0); - __asm { SVC 0x5F ; '_' } - } - break; - case 0xX: - if ( a2 == 0 ) - sub_X(a1: rpc_id, a2: 0); - break; - case 0xX: - goto LABEL_95; - case 0xX: - if ( a2 == 0 ) - { - sub_X(a1: rpc_id, a2: 0); - __asm { SVC 0x5F ; '_' } - } - break; - case 0xX: - if ( a2 == 0 ) - { - __asm { SVC 0x5E ; '^' } - sub_X(a1: off_X[2]); - } - break; - case 0xX: - if ( a2 == 0 ) - { - sub_X(a1: rpc_id, a2: 0); - __asm { SVC 0x5F ; '_' } - } - break; + if ( a2 != 0 ) + goto LABEL_104; + __asm { SVC 0x5E ; '^' } +LABEL_29: + vX = 0; + goto LABEL_110; + case 0xX: + if ( a2 != 0 ) + goto LABEL_104; + vX = sub_X(); + __asm { SVC 0x5F ; '_' } + goto LABEL_110; + case 0xX: + if ( a2 != 0 ) + goto LABEL_104; + link_info = sub_X(); + goto LABEL_109; + case 0xX: + goto LABEL_104; + case 0xX: + if ( a2 != 0 ) + goto LABEL_104; + vX = sub_X(); + __asm { SVC 0x5F ; '_' } + goto LABEL_110; + case 0xX: + if ( a2 != 0 ) + goto LABEL_104; + __asm { SVC 0x5E ; '^' } + link_info = sub_X(a1: off_X[2], a2: 0, a3: vX); + goto LABEL_109; + case 0xX: + if ( a2 != 0 ) + goto LABEL_104; + vX = sub_X(); + __asm { SVC 0x5F ; '_' } + goto LABEL_110; default: case 0x402u: - __asm { SVC 0x8D; jumptable 00D01540 case 1026 } - if ( (rpc_id | 1) == 3 ) - asd_platform_op_402(a1: LOBYTE(req->arg1)); - break; + __asm { SVC 0x8D; jumptable 00D0157E case 1026 } + if ( ((rpc_id - 1026) | 1) != 3 ) + goto LABEL_29; + link_info = asd_platform_op_402(a1: LOBYTE(req->arg1)); + goto LABEL_109; case 0x403u: - asd_platform_op_403( - a1: LOBYTE(req->arg1), - a2: BYTE1(req->arg1), - a3: (_DWORD *)req->arg2, - a4: req->arg3, - a5: req->arg4, - a6: req->arg5); - break; + link_info = asd_platform_op_403( + a1: LOBYTE(req->arg1), + a2: BYTE1(req->arg1), + a3: (_DWORD *)req->arg2, + a4: req->arg3, + a5: req->arg4, + a6: req->arg5); + goto LABEL_109; case 0x404u: - asd_platform_op_404( - a1: LOBYTE(req->arg1), - a2: BYTE1(req->arg1), - a3: (unsigned int *)req->arg2, - a4: &req->arg3, - a5: &req->arg4, - a6: req->arg5); - break; + link_info = asd_platform_op_404( + a1: LOBYTE(req->arg1), + a2: BYTE1(req->arg1), + a3: (unsigned int *)req->arg2, + a4: &req->arg3, + a5: &req->arg4, + a6: req->arg5); + goto LABEL_109; case 0x405u: - sub_X(a1: &req->arg1, a2, a3: rpc_id - 1026, a4, a5: a3, a6: a4); - break; + link_info = sub_X(a1: &req->arg1, a2, a3: vX); + goto LABEL_109; default: case 0x160u: - sub_X(a1: req->arg1, a2: req->arg2); + link_info = asd_link_reset(a1: req->arg1, a2: req->arg2); + goto LABEL_109; + case 0x161u: + link_info = asd_get_link_status( + a1: req->arg1, + a2: (int *)req->arg2, + a3: (_DWORD *)req->arg3, + a4: (_DWORD *)req->arg4, + a5: *(_DWORD **)&req->arg5); + goto LABEL_109; + case 0x800u: + goto LABEL_29; + default: break; - case 0x161u: - asd_get_link_status( - a1: req->arg1, - a2: (int *)req->arg2, - a3: (_DWORD *)req->arg3, - a4: (_DWORD *)req->arg4, - a5: *(_DWORD **)&req->arg5); - break; - case 0x800u: -LABEL_101: - break; - default: - _ZF = rpc_id == 2049; - if ( rpc_id == 2049 ) - _ZF = a2 == 0; - if ( _ZF ) - sub_X(a1: req->arg1, a2: req->arg2); - goto LABEL_101; } + if ( rpc_id != 2049 ) + { + _ZF = rpc_id == 2050; + if ( rpc_id == 2050 ) + _ZF = a2 == 0; + if ( _ZF ) + { + link_info = asd_op_802(a1: (_DWORD *)req->arg1); + goto LABEL_109; + } + goto LABEL_104; + } + if ( a2 != 0 ) + goto LABEL_104; + link_info = asd_op_801(a1: req->arg1, a2: req->arg2); break; } - break; + goto LABEL_109; } - break; } - break; + goto LABEL_109; } - break; } - break; } -LABEL_95: - if ( vX[1] != -1 ) - __asm { SVC 0x5F ; '_' } } - __asm { POP {R2-R6,PC} } + else + { + vX = (void (__fastcall *)(int, int, int, int))off_X; + off_X(a1: 227, a2: 1, a3: 61440); + vX(a1: 227, a2: 1, a3: 0, a4: vX); + vX = 2; + vX(a1: 227, a2: 1, a3: 2, a4: vX); + } + return vX; } ### asd_encoder_enable_seq case 0x10u: - vX = off_X; - if ( sub_X(a1: 0, a2: *((_DWORD *)off_X + 2), a3: vX) << 31 != 0 ) + vX = (int *)off_X; + if ( asd_reg_read_13B74(a1: 0, a2: *((_DWORD *)off_X + 4), a3: vX) << 31 != 0 ) { - vX = sub_X(a1: vX[89], a2: HIDWORD(vX)) & 7; - vX = sub_X(a1: vX[88], a2: vX); - sub_X(a1: vX[88], a2: vX, a3: vX | 0x80); - vX = vX[91]; + vX = asd_reg_read_13974(a1: vX[95], a2: HIDWORD(vX)) & 7; + asd_reg_read_139E4(a1: vX[94], a2: vX); + asd_reg_write_19394(a1: vX[94], a2: vX); + vX = vX[97]; if ( vX != 0 ) { - vX = sub_X(a1: vX, a2: vX); - sub_X(a1: vX[91], a2: vX, a3: vX | 1); - } - vX = sub_X(a1: 0, a2: vX[38], a3: vX); - sub_X(a1: 0, a2: vX[38], a3: vX, a4: vX | 1); - sub_X(a1: 0, a2: vX[57], a3: vX); + asd_reg_read_13974(a1: vX, a2: vX); + asd_reg_write_19328(a1: vX[97], a2: vX); + } + asd_reg_read_13B74(a1: 0, a2: vX[40], a3: vX); + asd_reg_write_1946C(a1: 0, a2: vX[40], a3: vX); + asd_reg_read_13B74(a1: 0, a2: vX[59], a3: vX); if ( a1->field40 == 3 ) - sub_X(a1: 0, a2: vX[57], a3: vX, a4: (dword_X & HIDWORD(vX)) + 1114112); - sub_X(a1: 0, a2: vX[57], a3: vX, a4: HIDWORD(vX) | 0x10); + asd_reg_write_1946C(a1: 0, a2: vX[59], a3: vX); + asd_reg_write_1946C(a1: 0, a2: vX[59], a3: vX); __asm { SVC 0x56 ; 'V' } - sub_X(a1: 0, a2: vX[57], a3: vX, a4: HIDWORD(vX) & 0xX); + asd_reg_write_1946C(a1: 0, a2: vX[59], a3: vX); break; vX = off_X; - if ( sub_X(a1: *((_DWORD *)off_X + 93), a2: HIDWORD(vX)) << 31 == 0 ) + if ( asd_reg_read_13BF8(a1: *((_DWORD *)off_X + 99), a2: HIDWORD(vX)) << 31 == 0 ) return 8; - vX = (void (__fastcall *)(int, _DWORD, _DWORD, int))off_X; - off_X(a1: 2, a2: vX[71], a3: vX, a4: 16); - vX(a1: 2, a2: vX[71], a3: vX, a4: 16); + vX = (void (__fastcall *)(int, int, unsigned int))off_X; + off_X(a1: 2, a2: vX[75], a3: vX, a4: 16); + vX(a1: 2, a2: vX[75], a3: vX); __asm { SVC 0x56 ; 'V' } - vX(a1: 2, a2: vX[71], a3: vX, a4: 0); - vX = sub_X(a1: vX[94], a2: HIDWORD(vX)) & 7; - vX = sub_X(a1: vX[88], a2: vX); - sub_X(a1: vX[88], a2: vX, a3: vX | 0x80); - vX = vX[95]; + vX(a1: 2, a2: vX[75], a3: vX); + vX = asd_reg_read_13BF8(a1: vX[100], a2: HIDWORD(vX)) & 7; + asd_reg_read_139E4(a1: vX[94], a2: vX); + asd_reg_write_19394(a1: vX[94], a2: vX); + vX = vX[101]; if ( vX != 0 ) { - vX = sub_X(a1: vX, a2: vX); - sub_X(a1: vX[95], a2: vX, a3: vX | 1); + asd_reg_read_13BF8(a1: vX, a2: vX); + asd_reg_write_19524(a1: vX[101], a2: vX); } case 0x20u: - vX = off_X; - if ( sub_X(a1: 32, a2: *((_DWORD *)off_X + 80), a3: vX) << 31 == 0 ) + vX = (int *)off_X; + if ( asd_reg_read_13B74(a1: 1, a2: *((_DWORD *)off_X + 85), a3: vX) << 31 == 0 ) return 8; - vX = sub_X(a1: vX[90], a2: HIDWORD(vX)) & 7; - vX = sub_X(a1: vX[88], a2: vX); - sub_X(a1: vX[88], a2: vX, a3: vX | 0x80); - vX = vX[92]; + vX = asd_reg_read_13974(a1: vX[96], a2: HIDWORD(vX)) & 7; + asd_reg_read_139E4(a1: vX[94], a2: vX); + asd_reg_write_19394(a1: vX[94], a2: vX); + vX = vX[98]; if ( vX != 0 ) { - vX = sub_X(a1: vX, a2: 0); - sub_X(a1: vX[92], a2: 0, a3: vX | 1); + asd_reg_read_13974(a1: vX, a2: 0); + asd_reg_write_19328(a1: vX[98], a2: 0); } - vX = sub_X(a1: 32, a2: vX[64], a3: vX); - vX = (void (__fastcall *)(int, _DWORD, _DWORD, unsigned int))off_X; - vX = vX; - off_X(a1: 32, a2: vX[64], a3: vX, a4: vX | 0x10); + _13B74 = asd_reg_read_13B74(a1: 1, a2: vX[67], a3: vX); + vX = (void (__fastcall *)(int, int, unsigned int))off_X; + off_X(a1: 1, a2: vX[67], a3: vX, a4: _13B74 | 0x10); __asm { SVC 0x56 ; 'V' } - vX(a1: 32, a2: vX[64], a3: vX, a4: vX & 0xX); - vX = sub_X(a1: 32, a2: vX[82], a3: vX); - vX(a1: 32, a2: vX[82], a3: vX, a4: vX | 0x11); + vX(a1: 1, a2: vX[67], a3: vX); + asd_reg_read_13B74(a1: 1, a2: vX[87], a3: vX); + vX(a1: 1, a2: vX[87], a3: vX); break; } - vX = int((int)a1, a2, a3); + vX = ((int (__fastcall *)(struct asd_link_cfg *, char *, char *))loc_X)(a1, a2, a3); field40 = a1->field40; vX = off_X; - vX = sub_X(a1: 0, a2: *((_DWORD *)off_X + 57), a3: vX); - vX = sub_X(a1: 0, a2: vX[45], a3: vX); - field54 = a1->field54; - vX = vX | 0x100; - if ( field54 == 1 ) - vX = vX & 0xX; - sub_X(a1: 0, a2: vX[45], a3: vX, a4: vX); - vX = 512; - if ( field54 == 1 ) - vX = 256; - vX = (vX & 0xX) + vX; - vX = vX[57]; + asd_reg_read_13B74(a1: 0, a2: *((_DWORD *)off_X + 59), a3: vX); + asd_reg_read_13B74(a1: 0, a2: vX[47], a3: vX); + asd_reg_write_1946C(a1: 0, a2: vX[47], a3: vX); + vX = vX[59]; } if ( field28 != 16 ) - goto LABEL_42; + goto LABEL_32; vX = off_X; - vX = sub_X(a1: 0, a2: *((_DWORD *)off_X + 57), a3: vX); - vX = sub_X(a1: 0, a2: vX[45], a3: vX); - vX = vX & 0xX | 0x100; - if ( a1->field54 == 2 ) - vX = vX | 0x300; - sub_X(a1: 0, a2: vX[57], a3: vX, a4: vX); - vX = vX[45]; - vX = vX & 0xX; + asd_reg_read_13B74(a1: 0, a2: *((_DWORD *)off_X + 59), a3: vX); + asd_reg_read_13B74(a1: 0, a2: vX[47], a3: vX); + asd_reg_write_1946C(a1: 0, a2: vX[59], a3: vX); + vX = vX[47]; } - goto LABEL_40; + goto LABEL_30; } vX = off_X; - vX = sub_X(a1: 0, a2: *((_DWORD *)off_X + 39), a3: vX); - vX = vX | 1; - if ( a1->field54 == 1 ) - vX = vX & 0xX; - vX = vX[39]; -LABEL_40: + asd_reg_read_13B74(a1: 0, a2: *((_DWORD *)off_X + 41), a3: vX); + vX = vX[41]; +LABEL_30: vX = 0; - goto LABEL_41; + goto LABEL_31; } vX = off_X; - vX = sub_X(a1: 1, a2: *((_DWORD *)off_X + 81), a3: vX); - vX = vX | 1; - if ( a1->field54 == 1 ) - vX = vX & 0xX; - vX = vX[81]; + asd_reg_read_13B74(a1: 1, a2: *((_DWORD *)off_X + 86), a3: vX); + vX = vX[86]; vX = 1; -LABEL_41: - sub_X(a1: vX, a2: vX, a3: vX, a4: vX); - } -LABEL_42: +LABEL_31: + asd_reg_write_1946C(a1: vX, a2: vX, a3: vX); + } +LABEL_32: if ( vX == 0 ) vX = 0; - vX = sub_X(a1: 0, a2: *((_DWORD *)off_X + 57), a3: vX); - sub_X(a1: 0, a2: vX[57], a3: vX, a4: vX | 1); - vX = sub_X(a1: 0, a2: vX[57], a3: vX); + asd_reg_read_13B74(a1: 0, a2: *((_DWORD *)off_X + 59), a3: vX); + asd_reg_write_1946C(a1: 0, a2: vX[59], a3: vX); + vX = asd_reg_read_13B74(a1: 0, a2: vX[59], a3: vX); vX = off_X; __asm { SVC 0x56 ; 'V' } - vX = sub_X(a1: 0, a2: vX[57], a3: vX); + vX = asd_reg_read_13B74(a1: 0, a2: vX[59], a3: vX); ++vX; vX = off_X; - vX = sub_X(a1: 2, a2: *((_DWORD *)off_X + 71), a3: vX); - sub_X(a1: 2, a2: vX[71], a3: vX, a4: vX | 1); - vX = sub_X(a1: 2, a2: vX[71], a3: vX); + asd_reg_read_13B74(a1: 2, a2: *((_DWORD *)off_X + 75), a3: vX); + asd_reg_write_1946C(a1: 2, a2: vX[75], a3: vX); + vX = asd_reg_read_13B74(a1: 2, a2: vX[75], a3: vX); vX = off_X; __asm { SVC 0x56 ; 'V' } - vX = sub_X(a1: 2, a2: vX[71], a3: vX); + vX = asd_reg_read_13B74(a1: 2, a2: vX[75], a3: vX); ++vX; vX = off_X; - vX = sub_X(a1: 1, a2: *((_DWORD *)off_X + 64), a3: vX); - sub_X(a1: 1, a2: vX[64], a3: vX, a4: vX | 1); - vX = sub_X(a1: 1, a2: vX[64], a3: vX); + asd_reg_read_13B74(a1: 1, a2: *((_DWORD *)off_X + 67), a3: vX); + asd_reg_write_1946C(a1: 1, a2: vX[67], a3: vX); + vX = asd_reg_read_13B74(a1: 1, a2: vX[67], a3: vX); vX = off_X; __asm { SVC 0x56 ; 'V' } - vX = sub_X(a1: 1, a2: vX[64], a3: vX); + vX = asd_reg_read_13B74(a1: 1, a2: vX[67], a3: vX); ++vX; ### asd_event_dispatch -int asd_event_dispatch() +unsigned int asd_event_dispatch() { { - vX = sub_X(a1: &vX); + vX = asd_link_check_C930(a1: &vX); if ( vX == 15 ) __asm { SVC 0x5F ; '_' } - sub_X(a1: 0, a2: *vX + 1); - return 15; + asd_foreach_link_cb_D49824(a1: 0); + vX = (void (__fastcall *)(int, int, int, int))off_X; + off_X(a1: 227, a2: 1, a3: 61440); + vX(a1: 227, a2: 1, a3: 0, a4: vX); + vX = 15; + vX(a1: 227, a2: 1, a3: 15, a4: vX); } __asm { SVC 0x5F ; '_' } - sub_X(a1: 0, a2: *vX + 1); + asd_foreach_link_cb_D49824(a1: 0); } { - vX = sub_X(a1: 0, a2: vX); + vX = asd_foreach_link_cb_D49824(a1: 0); if ( vX != 0 ) { - vX = vX[1] + 1; - sub_X(a1: vX, a2: 1000); + vX = vX[1]; + vX = vX + 1; + if ( vX == -1 ) + { + vX = (void (__fastcall *)(int, int, int, int))off_X; + off_X(a1: 227, a2: 1, a3: 61440); + vX(a1: 227, a2: 1, a3: 0, a4: vX); + vX = 2; + vX(a1: 227, a2: 1, a3: 2, a4: vX); + return vX; + } + sub_X(a1: vX + 1, a2: 1000); if ( vX != 0 ) vX[1] = vX; - vX = sub_X(a1: 1, a2: vX); + vX = asd_foreach_link_cb_D49824(a1: 1u); if ( vX != 0 ) { - if ( sub_X(a1: vX, a2: vX) != 0 ) + if ( asd_feature_enabled_cfg0(a1: vX, a2: vX) != 0 ) { *vX = 1; - vX = *vX + 1; if ( *vX != -1 ) *vX = 16; - vX = *vX + 1; if ( *vX != -1 ) __asm { SVC 0x5F ; '_' } - goto LABEL_69; + goto LABEL_74; } *vX = 16; - vX = *vX + 1; if ( *vX != -1 ) __asm { SVC 0x5F ; '_' } -LABEL_69: - sub_X(a1: 0, a2: vX); - return 33; +LABEL_74: + asd_foreach_link_cb_D49824(a1: 0); + vX = (void (__fastcall *)(int, int, int, int))off_X; + off_X(a1: 227, a2: 1, a3: 61440); + vX(a1: 227, a2: 1, a3: 0, a4: vX); + vX = 33; + vX(a1: 227, a2: 1, a3: 33, a4: vX); + return vX; } { - case 0: - goto LABEL_58; - case 1: - case 2: - case 3: - goto LABEL_40; - case 4: + case 0u: + goto LABEL_61; + case 1u: + case 2u: + case 3u: + goto LABEL_43; + case 4u: vX = 3; - goto LABEL_40; - case 5: + goto LABEL_43; + case 5u: vX = 4; - goto LABEL_40; + goto LABEL_43; default: vX = 5; -LABEL_40: +LABEL_43: vX = vX[vX]; vX = (_R0 & 0xX | ((vX & 0xF) << 24)) + (unsigned __int16)((_WORD)vX << 8) + 0xX; - goto LABEL_56; + goto LABEL_59; } if ( (vX & 0xX) == 0xX ) - goto LABEL_44; + goto LABEL_47; } { -LABEL_44: +LABEL_47: vX = vX & 0xX | ((vX & 0xF) << 24); vX = vX & 0xX | ((unsigned __int8)vX << 8); -LABEL_56: +LABEL_59: vX[vX] = vX; vX = vX; -LABEL_58: - vX = sub_X(a1: vX, a2: vX); +LABEL_61: + vX = asd_foreach_link_cb_D49824(a1: vX); ++vX; } - vX = (void (__fastcall *)(int, int))off_X; + vX = (void (__fastcall *)(unsigned int))off_X; off_X(a1: 2); - vX(a1: 4, a2: vX); - vX(a1: 3, a2: vX); - vX(a1: 5, a2: vX); + vX(a1: 4u); + vX(a1: 3u); + vX(a1: 5u); if ( *vX != -1 ) __asm { SVC 0x5F ; '_' } + if ( vX == 0 ) + return 0; } } + vX = (void (__fastcall *)(int, int, int, int))off_X; + off_X(a1: 227, a2: 1, a3: 61440); + vX(a1: 227, a2: 1, a3: HIWORD(vX), a4: vX); + vX(a1: 227, a2: 1, a3: (unsigned __int16)vX, a4: vX); } *vX = 1; - vX = *vX + 1; if ( *vX != -1 ) LABEL_9: - sub_X(a1: 0, a2: vX); - return 5; + asd_foreach_link_cb_D49824(a1: 0); + vX = (void (__fastcall *)(int, int, int, int))off_X; + off_X(a1: 227, a2: 1, a3: 61440); + vX(a1: 227, a2: 1, a3: 0, a4: vX); + vX = 5; + vX(a1: 227, a2: 1, a3: 5, a4: vX); } __asm { SVC 0x5F ; '_' } - sub_X(a1: 0, a2: *vX + 1); - return 8; + asd_foreach_link_cb_D49824(a1: 0); + vX = (void (__fastcall *)(int, int, int, int))off_X; + off_X(a1: 227, a2: 1, a3: 61440); + vX(a1: 227, a2: 1, a3: 0, a4: vX); + vX = 8; + vX(a1: 227, a2: 1, a3: 8, a4: vX); } ### asd_find_active_pipe vX = off_X; - vX = off_X(a1: 2, a2: *((_DWORD *)off_X + 46), a3: vX); - vX = vX(a1: 2, a2: vX[47], a3: vX); - vX = vX(a1: 2, a2: vX[48], a3: vX); + vX = off_X(a1: 2, a2: *((_DWORD *)off_X + 48), a3: vX); vX = vX(a1: 2, a2: vX[49], a3: vX); + vX = vX(a1: 2, a2: vX[50], a3: vX); + vX = vX(a1: 2, a2: vX[51], a3: vX); if ( (vX & 0x7F00) != 0 && (vX & 7) == HIDWORD(vX) && (vX & 0x10) != 0 ### asd_foreach_dio_entry { else - return asd_link_notify_D49810(a1, a2: vX, a3: vX); + return asd_link_notify_D49810(a1); } ### asd_foreach_link_active - vX = (char *)off_X; - for ( i = 0; i != 2944; i += 92 ) + if ( asd_feature_enabled(a1: 15) ) { - if ( *(_DWORD *)&vX[i + 4] != 0 ) + vX = (char *)off_X; + for ( i = 0; i != 3072; i += 96 ) { - if ( *(_DWORD *)&vX[i + 8] == 1 ) - vX = *((void (**)(void))vX + 772); - else - vX = *((void (**)(void))vX + 766); - vX(); + if ( *(_DWORD *)&vX[i + 4] != 0 ) + { + if ( *(_DWORD *)&vX[i + 8] == 1 ) + { + asd_opt_cb_D497F8(); + } + else + { + vX = *((void (**)(void))vX + 800); + if ( vX != nullptr ) + vX(); + vX = *((void (**)(void))vX + 787); + if ( vX != nullptr ) + vX(); + } + } } ### asd_get_connector_ids_a vX = a1[13]; + vX = a1[10]; + vX = a1[5]; if ( vX == 1 ) { - vX = sub_X(a1: *((_DWORD *)off_X + 98), a2: a1[14]); + _140AC = asd_reg_read_140AC(a1: *((_DWORD *)off_X + 114), a2: a1[14]); vX = a1[13]; { - vX = 0; + _140AC = 0; } - vX = vX & 3; + vX = _140AC & 3; *a2 = vX; { - vX = (vX >> 8) & 7; + vX = (_140AC >> 8) & 7; *a3 = vX; - vX = a1[5]; - vX = vX == vX; - if ( vX == vX ) - vX = a1[10] == 48; - if ( vX ) - return 0; - return 2; + LODWORD(vX) = vX ^ vX; + HIDWORD(vX) = vX ^ 0x30; + return 2 * (vX != 0); } { - vX = (vX >> 4) & 7; + vX = (_140AC >> 4) & 7; *a3 = vX; - vX = a1[5]; - vX = vX == vX; - if ( vX == vX ) - vX = a1[10] == 32; - if ( vX ) - return 0; - return 2; + LODWORD(vX) = vX ^ vX; + HIDWORD(vX) = vX ^ 0x20; + return 2 * (vX != 0); } - if ( (vX & 3) != 0 ) + if ( (_140AC & 3) != 0 ) return 31; - result = a1[10] - 16; - if ( a1[10] != 16 ) + result = vX - 16; + if ( vX != 16 ) return 31; ### asd_get_signal_reg case 16: - vX = (char *)off_X + 228; + vX = (int *)((char *)off_X + 236); vX = 0; case 48: - vX = (char *)off_X + 284; + vX = (int *)((char *)off_X + 300); vX = 2; case 32: - vX = (char *)off_X + 256; + vX = (int *)((char *)off_X + 268); vX = 1; LABEL_9: - vX = sub_X(a1: vX, a2: *(_DWORD *)vX, a3: vX); - sub_X(a1: vX, a2: *(_DWORD *)vX, a3: vX, a4: vX & 0xX); + asd_reg_read_13B74(a1: vX, a2: *vX, a3: vX); + asd_reg_write_1946C(a1: vX, a2: *vX, a3: vX); break; ### asd_hdcp_reset_all - vX = *((_DWORD *)off_X + 8); + vX = *((_DWORD *)off_X + 4); vX = sub_X(); case 21: + case 28: sub_X(); break; + case 26: + asd_reg_read_162C0(); + break; + case 29: + case 30: + asd_reg_write_1663C(a1: vX); + break; + case 31: + asd_reg_read_15FD8(); + break; + case 32: + asd_reg_read_162F0(); + break; default: ### asd_hw_ops_init vX = (_DWORD *)((char *)off_X + 4); - bzero_core(result: (_DWORD *)off_X + 1, a2: 0xCCu); + bzero_core(result: (_DWORD *)off_X + 1, a2: 0xE0u); *vX = a1; ### asd_link_call_D49810_D49814 +// Bounds a1 <= 1 and a2 <= 3, then invokes the runtime callbacks obtained from +// asd_get_D49810 and asd_get_D49814. int __fastcall asd_link_call_D49810_D49814(unsigned int a1, unsigned int a2, int a3) { + D49810 = (int (__fastcall *)(unsigned int, unsigned int))asd_get_D49810(); + vX = 2; + D49814 = asd_get_D49814(); vX = a1 > 1; - result = 2; - if ( !vX && a2 <= 7 && a3 != 0 ) + if ( a1 <= 1 ) + vX = a2 > 3; + if ( !vX && a3 != 0 ) { - vX = (int (__fastcall **)(unsigned int, int))off_X; - result = 27; - if ( *((_DWORD *)off_X + 22) != 0 ) + vX = (int (__fastcall *)(unsigned int, unsigned int, int))D49814; + vX = D49810 == nullptr; + vX = 27; + if ( D49810 != nullptr ) + vX = D49814 == 0; + if ( !vX ) { - vX = *((_DWORD *)off_X + 21); - if ( vX != 0 ) + if ( asd_link_callback_ok(a1) && asd_opt_cb_D4980C_bounded(a1) != 0 ) { - if ( sub_X(a1, a2: vX, a3) != 0 - && (vX = vX[20]) != nullptr - && ((int (__fastcall *)(unsigned int))vX)(a1) != 0 ) - { - result = vX[22](a1, a2: a3); - if ( result == 0 ) - return vX[21](a1, a2: (16 * a2) | 0xX); - } - else - { - return 0; - } + vX = vX(a1, a2, a3); + if ( vX == 0 ) + return D49810(a1, a2: (16 * a2) | 0xX); + } + else + { + return 0; } } - return result; + return vX; } ### asd_link_notify_D49810 -int __fastcall asd_link_notify_D49810(unsigned int a1, int a2, int a3) +// Bounds a1 <= 1, fetches the runtime callback from asd_get_D49810 (status 27 if absent), +// and invokes it with (link, 0xX) when the link passes both callback gates. +int __fastcall asd_link_notify_D49810(unsigned int a1) { + D49810 = asd_get_D49810(); if ( a1 > 1 ) return 2; - vX = off_X; - if ( *((_DWORD *)off_X + 21) == 0 ) + if ( D49810 == 0 ) return 27; - if ( sub_X(a1, a2, a3) != 0 ) - { - vX = (int (__fastcall *)(unsigned int))vX[20]; - if ( vX != nullptr && vX(a1) != 0 ) - return ((int (__fastcall *)(unsigned int, int))vX[21])(a1, a2: dword_X); - } - return 0; + vX = (int (__fastcall *)(unsigned int, int))D49810; + if ( asd_link_callback_ok(a1) && asd_opt_cb_D4980C_bounded(a1) != 0 ) + return vX(a1, a2: dword_X); + else + return 0; } ### asd_link_query_b { - vX = sub_X(a1: *((_DWORD *)off_X + 93), a2: a1[6]); + _13BF8 = asd_reg_read_13BF8(a1: *((_DWORD *)off_X + 99), a2: a1[6]); } { - switch ( ((unsigned int)sub_X(a1: 0, a2: *((_DWORD *)off_X + 1), a3: a1[5]) >> 16) & 7 ) + switch ( ((unsigned int)asd_reg_read_13B74(a1: 0, a2: *((_DWORD *)off_X + 2), a3: a1[5]) >> 16) & 7 ) { } - vX = sub_X(a1: 1, a2: *((_DWORD *)off_X + 78), a3: a1[5]); + _13BF8 = asd_reg_read_13B74(a1: 1, a2: *((_DWORD *)off_X + 83), a3: a1[5]); } - if ( vX << 31 != 0 ) + if ( _13BF8 << 31 != 0 ) return 0; ### asd_link_read_pair_regs return 2; - vX = off_X; + vX = (int *)off_X; vX = 0; - *(_DWORD *)a2 = sub_X(a1: 0, a2: *((_DWORD *)off_X + 16), a3: *(_DWORD *)(a1 + 20)); - a2[4] = sub_X(a1: 0, a2: vX[17], a3: vX); + *(_DWORD *)a2 = asd_reg_read_13B74(a1: 0, a2: *((_DWORD *)off_X + 18), a3: *(_DWORD *)(a1 + 20)); + a2[4] = asd_reg_read_13B74(a1: 0, a2: vX[19], a3: vX); if ( *(_DWORD *)(a1 + 64) == 2 ) vX = 0; - *(_DWORD *)a3 = sub_X(a1: 0, a2: vX[30], a3: vX); - a3[4] = sub_X(a1: 0, a2: vX[31], a3: vX); + *(_DWORD *)a3 = asd_reg_read_13B74(a1: 0, a2: vX[32], a3: vX); + a3[4] = asd_reg_read_13B74(a1: 0, a2: vX[33], a3: vX); } ### asd_link_ready_check vX = 0; - if ( sub_X(a1: 0, a2: *((_DWORD *)off_X + 2), a3: a1) << 31 != 0 ) + if ( asd_reg_read_13B74(a1: 0, a2: *((_DWORD *)off_X + 4), a3: a1) << 31 != 0 ) return 19; - if ( sub_X(a1: vX[40], a2: a1) << 31 == 0 ) + if ( asd_reg_read_13D24(a1: vX[42], a2: a1) << 31 == 0 ) return 19; ### asd_link_ready_full_check vX = off_X; - if ( (sub_X(a1: 0, a2: *((_DWORD *)off_X + 3), a3: vX) & 0x101) != 0x101 - || (sub_X(a1: 0, a2: vX[6], a3: vX) & 0x1005) != 0x1001 ) + if ( (asd_reg_read_13B74(a1: 0, a2: *((_DWORD *)off_X + 5), a3: vX) & 0x101) != 0x101 + || (asd_reg_read_13B74(a1: 0, a2: vX[8], a3: vX) & 0x1005) != 0x1001 ) { return 0; - result = (sub_X(a1: 0, a2: vX[10], a3: vX) & 0x1005) - 4097; + result = (asd_reg_read_13B74(a1: 0, a2: vX[12], a3: vX) & 0x1005) - 4097; if ( result != 0 ) ### asd_link_set_reg4248C_half vX = 0; - vX = sub_X(a1: 0, a2: *((_DWORD *)off_X + 34), a3: vX); - sub_X(a1: 0, a2: vX[34], a3: vX, a4: (vX & 0xX) + a2); + asd_reg_read_13B74(a1: 0, a2: *((_DWORD *)off_X + 36), a3: vX); + asd_reg_write_1946C(a1: 0, a2: vX[36], a3: vX); return vX; ### asd_link_state_poll -BOOL asd_link_state_poll() +// One iteration of the link-state poll: waits (SVC 0x56), reads the link state, queries +// SYS_DRV RPC 0x1021, re-probes the power state, and reports whether dword_X has +// settled. Driven in a loop by asd_sync_link_state. +unsigned int __fastcall asd_link_state_poll() { - BOOL result; // r0 + BOOL vX; // r6 - LODWORD(vX) = 0; + vX = false; vX = 0; __asm { SVC 0x56 ; 'V' } - sub_X(a1: &vX); - HIDWORD(vX) = sysdrv_rpc_1021(a1: vX, a2: 0, a3: (int)&vX); - if ( HIDWORD(vX) == 0 ) - LODWORD(vX) = asd_probe_power_state(); - result = *((_DWORD *)off_X + 1) != 2; + asd_query_link_state(a1: &vX); + vX = sysdrv_rpc_1021(a1: vX, a2: 0, a3: (int)&vX); + if ( vX == 0 ) + vX = asd_probe_power_state(); + vX = *((_DWORD *)off_X + 1) != 2; + if ( (vX | vX) != 0 ) + vX = vX; if ( vX != 0 ) - return vX; - return result; + { + vX = (void (__fastcall *)(int, int, int, int))off_X; + off_X(a1: 227, a2: 1, a3: 61440); + vX(a1: 227, a2: 1, a3: HIWORD(vX), a4: vX); + vX(a1: 227, a2: 1, a3: (unsigned __int16)vX, a4: vX); + } + if ( vX != 0 ) + { + vX = (void (__fastcall *)(int, int, int, int))off_X; + off_X(a1: 227, a2: 1, a3: 61440); + vX(a1: 227, a2: 1, a3: HIWORD(vX), a4: vX); + vX(a1: 227, a2: 1, a3: (unsigned __int16)vX, a4: vX); + } + return vX; } ### asd_link_sub_113A0 { - vX = a1; *a2 = 0; vX = 0; + if ( !asd_feature_enabled(a1: 15) ) + return 8; if ( a1 > 0x1F ) return 5; - vX = (int (__fastcall **)(char *))off_X; - vX = (char *)off_X + 92 * a1; - if ( *((_DWORD *)vX + 1) != 1 ) + vX = off_X; + vX = (_DWORD *)((char *)off_X + 96 * a1); + if ( vX[1] != 1 ) return 5; - vX = (int *)(vX + 64); - if ( *((_DWORD *)vX + 16) == 5 ) - { - a1 = *((_DWORD *)off_X + 23 * a1 + 15); - vX = (char *)off_X + 92 * a1; + vX = vX + 16; + if ( vX[16] == 5 ) + { + a1 = vX[15]; + vX = (char *)off_X + 96 * a1; if ( *((_DWORD *)vX + 1) != 1 ) } - vX = (char *)off_X + 92 * a1; + vX = (char *)off_X + 96 * a1; *a2 = *((_DWORD *)vX + 20); { - vX = &vX[23 * vX + 2]; - if ( *vX == (int (__fastcall *)(char *))1 ) - { - vX = vX[769](a1: vX); + vX = vX + 2; + if ( vX[2] == 1 ) + { + vX = vX + 2; + vX = vX; + vX = sub_X(a1: vX); } { - vX = vX[762]; + vX = (int (__fastcall *)(char *))vX[796]; + if ( vX == nullptr || vX[791] == 0 ) + goto LABEL_28; if ( *vX == 5 ) { - if ( vX(a1: vX) != 0 ) - goto LABEL_33; - vX = *((int (__fastcall **)(char *))off_X + 757); + vX = vX; + vX = vX(a1: vX); + vX = vX; + vX = off_X; + if ( vX != 0 ) + goto LABEL_28; + vX = (*((int (__fastcall **)(_DWORD *))off_X + 791))(a1: vX); + vX = vX; + goto LABEL_21; } - vX = vX(a1: vX); - } + vX = vX + 2; + vX = vX; + vX = vX(a1: (char *)vX); + } + vX = vX; + vX = vX; +LABEL_21: + vX = off_X; if ( vX == 0 ) *a5 = 1; -LABEL_33: +LABEL_28: + if ( vX[799] == 0 ) + goto LABEL_50; if ( *vX == 5 ) *a3 = *((_DWORD *)vX + 22); - vX = (*((int (__fastcall **)(char *, int *))off_X + 765))(a1: vX, a2: &vX); + vX = (*((int (__fastcall **)(char *, int *))off_X + 799))(a1: vX, a2: &vX); } { - vX = (int (__fastcall **)(char *, _DWORD *))off_X; - vX = (char *)off_X + 92 * vX; - *a3 = *((_DWORD *)vX + 22); - if ( *vX == (int (__fastcall *)(char *))1 ) + *a3 = vX[22]; + if ( *vX == 1 ) { - vX = *((_DWORD *)vX + 21); - goto LABEL_41; + vX = vX[21]; +LABEL_49: + *a4 = vX; + goto LABEL_50; } - vX = vX[765](a1: vX, a2: &vX); + vX = (*((int (__fastcall **)(_DWORD *, int *))off_X + 799))(a1: vX, a2: &vX); } if ( vX != 0 ) - goto LABEL_54; - vX = vX; -LABEL_41: - *a4 = vX; - goto LABEL_54; + goto LABEL_50; + vX = vX; + goto LABEL_49; } result = 7; - goto LABEL_60; - } - vX = vX[759]; + goto LABEL_53; + } + vX = (int (__fastcall *)(char *))vX[793]; + if ( vX == nullptr || vX[791] == 0 || vX[779] == 0 || vX[785] == 0 ) + goto LABEL_50; if ( *vX == 5 ) { + vX = vX; if ( vX(a1: vX) != 0 ) - goto LABEL_14; - vX = *((int (__fastcall **)(char *))off_X + 757); - } - if ( vX(a1: vX) == 0 ) + goto LABEL_36; + vX = (*((int (__fastcall **)(_DWORD *))off_X + 791))(a1: vX); + } + else + { + vX = vX; + vX = vX(a1: (char *)vX); + } + if ( vX == 0 ) *a5 = 1; -LABEL_14: - vX = (unsigned int *)((char *)off_X + 92 * vX + 88); +LABEL_36: vX = *vX; + vX = vX + 22; if ( *vX == 5 ) *a3 = vX; - } - else - { - if ( vX == 3 ) - { - vX = *a2; - if ( vX == 5 ) - { - if ( vX == 2 ) - vX = *((int (__fastcall **)(char *))off_X + 753); - else - vX = *((int (__fastcall **)(char *))off_X + 747); - vX = vX; - } + goto LABEL_50; + } + vX = vX; + if ( vX == 3 ) + { + vX = *a2; + if ( vX == 5 ) + { + if ( vX == 2 ) + vX = (*((int (__fastcall **)(char *))off_X + 785))(a1: vX); else - { - if ( vX == 2 ) - vX = *((int (__fastcall **)(char *))off_X + 753); - else - vX = *((int (__fastcall **)(char *))off_X + 747); - vX = vX; - } - if ( vX(a1: vX) != 0 ) - goto LABEL_54; + vX = (*((int (__fastcall **)(char *))off_X + 779))(a1: vX); + } + else + { + if ( vX == 2 ) + vX = *((int (__fastcall **)(_DWORD *))off_X + 785); + else + vX = *((int (__fastcall **)(_DWORD *))off_X + 779); + vX = vX(a1: vX); + } + if ( vX == 0 ) + { vX = 3; - } - else - { - if ( vX != 2 ) - goto LABEL_54; - vX = vX == 5 ? vX : vX; - if ( (*((int (__fastcall **)(char *))off_X + 747))(a1: vX) != 0 ) - goto LABEL_54; + goto LABEL_73; + } + } + else if ( vX == 2 ) + { + if ( vX != 5 ) + vX = (char *)vX; + if ( (*((int (__fastcall **)(char *))off_X + 779))(a1: vX) == 0 ) + { vX = 2; - } - *a3 = vX; - } -LABEL_54: - if ( sub_X() != 0 ) +LABEL_73: + *a3 = vX; + } + } +LABEL_50: + if ( asd_link_sub_C930() != 0 ) { result = 15; -LABEL_56: - vX = a5; +LABEL_52: *a2 = 0; *a5 = 0; - goto LABEL_61; - } - if ( *((_DWORD *)vX + 1) == 1 - && *((_DWORD *)off_X + 23 * vX + 2) == 0 - && (*((int (__fastcall **)(char *))off_X + 773))(a1: vX) != 0 ) - { - result = 17; - goto LABEL_56; + goto LABEL_53; } result = 0; -LABEL_60: - vX = a5; -LABEL_61: + if ( vX[1] == 1 ) + { + vX = *((int (__fastcall **)(_DWORD *))off_X + 802); + if ( vX == nullptr ) + goto LABEL_53; + if ( vX[2] == 0 && vX(a1: vX) != 0 ) + { + result = 17; + goto LABEL_52; + } + result = 0; + } +LABEL_53: if ( *a3 != 3 ) - *vX = 0; + *a5 = 0; return result; ### asd_link_train_status vX = off_X; - if ( (sub_X(a1: 0, a2: *((_DWORD *)off_X + 6), a3: vX) & 0x1005) != 0x1001 ) + if ( (asd_reg_read_13B74(a1: 0, a2: *((_DWORD *)off_X + 8), a3: vX) & 0x1005) != 0x1001 ) return 9; return 0; - result = (sub_X(a1: 0, a2: vX[10], a3: vX) & 0x1005) - 4097; + result = (asd_reg_read_13B74(a1: 0, a2: vX[12], a3: vX) & 0x1005) - 4097; if ( result != 0 ) ### asd_link_wait_and_set vX = dword_X; - vX = off_X; - while ( (sub_X(a1: 0, a2: vX[6], a3: vX) & 0xX) == 0 && vX != 0 ) + vX = (int *)off_X; + while ( (asd_reg_read_13B74(a1: 0, a2: vX[8], a3: vX) & 0xX) == 0 && vX != 0 ) ++vX; - vX = sub_X(a1: 0, a2: vX[14], a3: vX); - sub_X(a1: 0, a2: vX[14], a3: vX, a4: (vX & 0xX) + a2); + asd_reg_read_13B74(a1: 0, a2: vX[16], a3: vX); + asd_reg_write_1946C(a1: 0, a2: vX[16], a3: vX); vX = 4; { - if ( (sub_X(a1: 0, a2: vX[6], a3: vX) & 5) == 1 ) + if ( (asd_reg_read_13B74(a1: 0, a2: vX[8], a3: vX) & 5) == 1 ) { return 0; - while ( (sub_X(a1: 0, a2: vX[10], a3: vX) & 0xX) == 0 && vX != 0 ) + while ( (asd_reg_read_13B74(a1: 0, a2: vX[12], a3: vX) & 0xX) == 0 && vX != 0 ) ++vX; - vX = sub_X(a1: 0, a2: vX[28], a3: vX); - sub_X(a1: 0, a2: vX[28], a3: vX, a4: (vX & 0xX) + a3); + asd_reg_read_13B74(a1: 0, a2: vX[30], a3: vX); + asd_reg_write_1946C(a1: 0, a2: vX[30], a3: vX); vX = 4; { - if ( (sub_X(a1: 0, a2: vX[10], a3: vX) & 5) == 1 ) + if ( (asd_reg_read_13B74(a1: 0, a2: vX[12], a3: vX) & 5) == 1 ) return vX; ### asd_lookup_by_class return result; - vX = *((_DWORD *)off_X + 20); + vX = *((_DWORD *)off_X + 22); goto LABEL_10; return result; - vX = *((_DWORD *)off_X + 19); + vX = *((_DWORD *)off_X + 20); goto LABEL_10; ### asd_pipe_enable { vX = off_X; - vX = sub_X(a1: *((_DWORD *)off_X + 89), a2: vX) & 7; - vX = sub_X(a1: vX[88], a2: vX); - sub_X(a1: vX[88], a2: vX, a3: vX | 0x80); - vX = vX[91]; + vX = asd_reg_read_13974(a1: *((_DWORD *)off_X + 95), a2: vX) & 7; + asd_reg_read_139E4(a1: vX[94], a2: vX); + asd_reg_write_19394(a1: vX[94], a2: vX); + vX = vX[97]; if ( vX != 0 ) { - vX = sub_X(a1: vX, a2: vX); - sub_X(a1: vX[91], a2: vX, a3: vX | 1); + asd_reg_read_13974(a1: vX, a2: vX); + asd_reg_write_19328(a1: vX[97], a2: vX); } vX = off_X; - vX = sub_X(a1: *((_DWORD *)off_X + 94), a2: vX) & 7; - vX = sub_X(a1: vX[88], a2: vX); - sub_X(a1: vX[88], a2: vX, a3: vX | 0x80); - vX = vX[95]; + vX = asd_reg_read_13BF8(a1: *((_DWORD *)off_X + 100), a2: vX) & 7; + asd_reg_read_139E4(a1: vX[94], a2: vX); + asd_reg_write_19394(a1: vX[94], a2: vX); + vX = vX[101]; if ( vX != 0 ) { - vX = sub_X(a1: vX, a2: vX); - sub_X(a1: vX[95], a2: vX, a3: vX | 1); + asd_reg_read_13BF8(a1: vX, a2: vX); + asd_reg_write_19524(a1: vX[101], a2: vX); } ### asd_pipe_lookup vX = off_X; - vX = off_X(a1: *((_DWORD *)off_X + 41), a2: a1[5]); - vX = vX(a1: vX[42], a2: vX); - vX = vX(a1: vX[43], a2: vX); + vX = off_X(a1: *((_DWORD *)off_X + 43), a2: a1[5]); + vX = vX(a1: vX[44], a2: vX); + vX = vX(a1: vX[45], a2: vX); if ( (vX & 7) == vX && (vX & 0x10) != 0 ### asd_platform_op_403 { - result = sub_X(a1: vX); + result = asd_asic_family_lookup(a1: (int)vX); if ( result != 0 ) { - vX = (int (__fastcall *)(unsigned __int8 *))vX[36]; + vX = (int (__fastcall *)(unsigned __int8 *))vX[41]; if ( vX != nullptr ) { - if ( 12 * *((unsigned __int16 *)vX + a1 + 30) == j ) + if ( 12 * *((unsigned __int16 *)vX + a1 + 34) == j ) return 7; ### asd_platform_op_404 { - result = sub_X(a1: vX); + result = asd_asic_family_lookup(a1: (int)vX); if ( result == 0 ) LABEL_14: - vX = a1 > 0xD; - if ( a1 <= 0xD ) + vX = a1 > 0xF; + if ( a1 <= 0xF ) vX = a2 > 7; { - for ( j = 0; *(unsigned __int16 *)&vX[2 * vX + 168] != j; ++j ) + for ( j = 0; *(unsigned __int16 *)&vX[2 * vX + 188] != j; ++j ) { - vX = *(_DWORD *)&vX[4 * vX + 144] + 8 * j; + vX = *(_DWORD *)&vX[4 * vX + 164] + 8 * j; if ( *(unsigned int **)(vX + 4) == a3 ) ### asd_program_link_by_signal { - if ( vX[4] == 0 || sub_X(a1: 0, a2: *((_DWORD *)off_X + 2), a3: vX) << 31 != 0 ) + if ( vX[4] == 0 || asd_reg_read_13B74(a1: 0, a2: *((_DWORD *)off_X + 4), a3: vX) << 31 != 0 ) { vX = off_X; - vX = sub_X(a1: *((_DWORD *)off_X + 89), a2: HIDWORD(vX)) & 7; - vX = sub_X(a1: vX[88], a2: vX); - sub_X(a1: vX[88], a2: vX, a3: vX | 0x80); - vX = vX[91]; + vX = asd_reg_read_13974(a1: *((_DWORD *)off_X + 95), a2: HIDWORD(vX)) & 7; + asd_reg_read_139E4(a1: vX[94], a2: vX); + asd_reg_write_19394(a1: vX[94], a2: vX); + vX = vX[97]; if ( vX != 0 ) { - vX = sub_X(a1: vX, a2: vX); - sub_X(a1: vX[91], a2: vX, a3: vX | 1); + asd_reg_read_13974(a1: vX, a2: vX); + asd_reg_write_19328(a1: vX[97], a2: vX); } } - switch ( ((unsigned int)sub_X(a1: 0, a2: *((_DWORD *)off_X + 1), a3: vX) >> 16) & 7 ) + switch ( ((unsigned int)asd_reg_read_13B74(a1: 0, a2: *((_DWORD *)off_X + 2), a3: vX) >> 16) & 7 ) { if ( a1->field20 == 0 - || (vX = (int (__fastcall *)(_DWORD))vX[33]) != nullptr && vX(a1: vX) != 0 + || (vX = (int (__fastcall *)(_DWORD))vX[38]) != nullptr && vX(a1: vX) != 0 || asd_reg_read_13D24_cfg0(a1: vX, a2: (int)vX, a3: vX) != 0 ) return result; - vX = off_X; - if ( sub_X(a1: *((_DWORD *)off_X + 93), a2: HIDWORD(vX)) << 31 != 0 ) + vX = (int *)off_X; + if ( asd_reg_read_13BF8(a1: *((_DWORD *)off_X + 99), a2: HIDWORD(vX)) << 31 != 0 ) { { - vX = sub_X(a1: vX[94], a2: HIDWORD(vX)) & 7; - vX = sub_X(a1: vX[88], a2: vX); - sub_X(a1: vX[88], a2: vX, a3: vX | 0x80); - vX = vX[95]; + vX = asd_reg_read_13BF8(a1: vX[100], a2: HIDWORD(vX)) & 7; + asd_reg_read_139E4(a1: vX[94], a2: vX); + asd_reg_write_19394(a1: vX[94], a2: vX); + vX = vX[101]; if ( vX != 0 ) { - vX = sub_X(a1: vX, a2: vX); - sub_X(a1: vX[95], a2: vX, a3: vX | 1); + asd_reg_read_13BF8(a1: vX, a2: vX); + asd_reg_write_19524(a1: vX[101], a2: vX); } { - vX = sub_X(a1: 0, a2: *((_DWORD *)off_X + 6), a3: vX); + _13B74 = asd_reg_read_13B74(a1: 0, a2: *((_DWORD *)off_X + 8), a3: vX); field20 = a1->field20; } - if ( field24 >= 0xA && (vX & 0xX) == 0xX ) + if ( field24 >= 0xA && (_13B74 & 0xX) == 0xX ) a1->field44 |= 1u; vX = off_X; - vX = sub_X(a1: *((_DWORD *)off_X + 90), a2: HIDWORD(vX)) & 7; - vX = sub_X(a1: vX[88], a2: vX); - sub_X(a1: vX[88], a2: vX, a3: vX | 0x80); - vX = vX[92]; + vX = asd_reg_read_13974(a1: *((_DWORD *)off_X + 96), a2: HIDWORD(vX)) & 7; + asd_reg_read_139E4(a1: vX[94], a2: vX); + asd_reg_write_19394(a1: vX[94], a2: vX); + vX = vX[98]; if ( vX != 0 ) { - vX = sub_X(a1: vX, a2: 0); - sub_X(a1: vX[92], a2: 0, a3: vX | 1); - } - } - if ( sub_X(a1: 1, a2: *((_DWORD *)off_X + 78), a3: vX) << 31 != 0 ) + asd_reg_read_13974(a1: vX, a2: 0); + asd_reg_write_19328(a1: vX[98], a2: 0); + } + } + if ( asd_reg_read_13B74(a1: 1, a2: *((_DWORD *)off_X + 83), a3: vX) << 31 != 0 ) { ### asd_query_link_config { - if ( sub_X(a1: 0, a2: *((_DWORD *)off_X + 39), a3: a1[5]) << 31 != 0 ) + if ( asd_reg_read_13B74(a1: 0, a2: *((_DWORD *)off_X + 41), a3: a1[5]) << 31 != 0 ) goto LABEL_65; } - if ( sub_X(a1: 1, a2: *((_DWORD *)off_X + 81), a3: a1[5]) << 31 == 0 ) + if ( asd_reg_read_13B74(a1: 1, a2: *((_DWORD *)off_X + 86), a3: a1[5]) << 31 == 0 ) { vX = off_X; - vX = sub_X(a1: 0, a2: *((_DWORD *)off_X + 57), a3: vX); - vX = sub_X(a1: 0, a2: vX[45], a3: vX); - HIDWORD(vX) = vX & 0x300; + _13B74 = asd_reg_read_13B74(a1: 0, a2: *((_DWORD *)off_X + 59), a3: vX); + vX = asd_reg_read_13B74(a1: 0, a2: vX[47], a3: vX); + HIDWORD(vX) = _13B74 & 0x300; LODWORD(vX) = (vX & 0x100) != 0; vX = off_X; - vX = off_X(a1: 2, a2: *((_DWORD *)off_X + 46), a3: vX); - vX = vX(a1: 2, a2: vX[47], a3: vX); - vX = vX(a1: 2, a2: vX[48], a3: vX); + vX = off_X(a1: 2, a2: *((_DWORD *)off_X + 48), a3: vX); vX = vX(a1: 2, a2: vX[49], a3: vX); + vX = vX(a1: 2, a2: vX[50], a3: vX); + vX = vX(a1: 2, a2: vX[51], a3: vX); if ( (vX & 7) == vX && (vX & 0x7F00) != 0 ) vX = 0; - vX = sub_X(a1: 0, a2: *((_DWORD *)off_X + 57), a3: vX); + vX = asd_reg_read_13B74(a1: 0, a2: *((_DWORD *)off_X + 59), a3: vX); vX = off_X; - vX = off_X(a1: vX[41], a2: vX); - vX = vX(a1: vX[42], a2: vX); - vX = vX(a1: vX[43], a2: vX); + vX = off_X(a1: vX[43], a2: vX); + vX = vX(a1: vX[44], a2: vX); + vX = vX(a1: vX[45], a2: vX); vX = (vX >> 8) & 3; ### asd_read_link_pair vX = off_X; - result = asd_reg_read_13FD4(a1: *((_DWORD *)off_X + 86), a2: a1, a3: &vX); + result = asd_reg_read_13FD4(a1: *((_DWORD *)off_X + 91), a2: a1, a3: &vX); if ( result == 0 ) { - result = asd_reg_read_13FD4(a1: vX[87], a2: a1, a3: &vX); + result = asd_reg_read_13FD4(a1: vX[92], a2: a1, a3: &vX); if ( result == 0 ) ### asd_reg_offsets_init_19600 return 2; - vX = off_X; + vX = (int *)off_X; vX = *(_DWORD *)(a1 + 24); - vX = sub_X(a1: *((_DWORD *)off_X + 44), a2: *(_DWORD *)(a1 + 20)); - if ( vX << 30 != 0 ) + _13D24 = asd_reg_read_13D24(a1: *((_DWORD *)off_X + 46), a2: *(_DWORD *)(a1 + 20)); + if ( _13D24 << 30 != 0 ) return 1; vX = off_X; - vX = off_X(a1: vX[41], a2: vX); - vX = vX(a1: vX[42], a2: vX); - vX = vX(a1: vX[43], a2: vX); - if ( (vX & 7) == vX ) + vX = off_X(a1: vX[43], a2: vX); + vX = vX(a1: vX[44], a2: vX); + vX = vX(a1: vX[45], a2: vX); + if ( (vX & 7) == vX || (HIWORD(vX) & 7) == vX ) { - vX = vX & 0xX; - if ( a3 == 2 ) - vX = vX | 0x20; - vX = vX | 0x10; - vX = vX & 0xX; -LABEL_14: - vX = vX + 41; - goto LABEL_15; + vX = vX + 43; +LABEL_9: + asd_reg_write_19600(a1: *vX, a2: vX); + goto LABEL_10; } - if ( (HIWORD(vX) & 7) == vX ) + if ( (vX & 7) == vX || (HIWORD(vX) & 7) == vX ) { - vX = vX & 0xX; - if ( a3 == 2 ) - vX = vX | 0xX; - vX = vX | 0xX; - vX = vX & 0xX; - goto LABEL_14; + vX = vX + 44; + goto LABEL_9; } - if ( (vX & 7) == vX ) + if ( (vX & 7) == vX || (HIWORD(vX) & 7) == vX ) { - vX = vX & 0xX; - if ( a3 == 2 ) - vX = vX | 0x20; - vX = vX | 0x10; - vX = vX & 0xX; -LABEL_33: - vX = vX + 42; - goto LABEL_15; + vX = vX + 45; + goto LABEL_9; } - if ( (HIWORD(vX) & 7) == vX ) - { - vX = vX & 0xX; - if ( a3 == 2 ) - vX = vX | 0xX; - vX = vX | 0xX; - vX = vX & 0xX; - goto LABEL_33; - } - if ( (vX & 7) == vX ) - { - vX = vX & 0xX; - if ( a3 == 2 ) - vX = vX | 0x20; - vX = vX | 0x10; - vX = vX & 0xX; - } - else - { - if ( (HIWORD(vX) & 7) != vX ) - goto LABEL_18; - vX = vX & 0xX; - if ( a3 == 2 ) - vX = vX | 0xX; - vX = vX | 0xX; - vX = vX & 0xX; - } - vX = vX + 43; -LABEL_15: - if ( a2 == 0 ) - vX = vX; - sub_X(a1: *vX, a2: vX, a3: vX); -LABEL_18: - vX = vX & 0xX | 2; - sub_X(a1: vX[44], a2: vX, a3: vX); +LABEL_10: + vX = _13D24 & 0xFC | 2; + asd_reg_write_19600(a1: vX[46], a2: vX); vX = 11; __asm { SVC 0x56 ; 'V' } - vX = sub_X(a1: vX[44], a2: vX); - LOBYTE(vX) = vX; + vX = asd_reg_read_13D24(a1: vX[46], a2: vX); + vX = vX; if ( vX << 30 == 0 ) ### asd_reg_read_13B74_cfg2 return 2; - result = (sub_X(a1: 0, a2: *((_DWORD *)off_X + 6), a3: vX) & (dword_X + 4)) - dword_X; + result = (asd_reg_read_13B74(a1: 0, a2: *((_DWORD *)off_X + 8), a3: vX) & (dword_X + 4)) - dword_X; if ( result != 0 ) ### asd_reg_read_13B74_cfg3 vX = 0; - vX = (unsigned int)sub_X(a1: 0, a2: *((_DWORD *)off_X + 17), a3: vX) >> 8; + vX = (unsigned int)asd_reg_read_13B74(a1: 0, a2: *((_DWORD *)off_X + 19), a3: vX) >> 8; *a2 = vX; ### asd_reg_read_13D24_cfg0 - vX = sub_X(a1: *((_DWORD *)off_X + 40), a2: a1) << 31 == 0; + vX = asd_reg_read_13D24(a1: *((_DWORD *)off_X + 42), a2: a1) << 31 == 0; result = 0; ### asd_reg_read_13FD4 { return 30; - vX = *((_DWORD *)off_X + 31); + vX = *((_DWORD *)off_X + 35); + vX = ~a1; + vX = 0; if ( vX != 0 ) + { vX = *(_DWORD *)(vX + 4 * a2); + if ( vX > vX ) + goto LABEL_14; + } else + { vX = 0; - result = 4 * (a1 + vX); + } + if ( (vX + a1) >> 30 != 0 ) + goto LABEL_18; + if ( vX == 0 ) + { + vX = 0; + goto LABEL_17; + } + vX = *(_DWORD *)(vX + 4 * a2); +LABEL_14: + if ( vX > vX ) + { + vX = 0; + goto LABEL_18; + } +LABEL_17: + vX = 4 * (a1 + vX); +LABEL_18: + result = vX; __asm { SVC 0x7B ; '{' } - if ( result != 0 ) + if ( vX != 0 ) return 30; ### asd_reg_read_BE08 +// Display-block register accessor: 1 x SVC 0x7B (register read), 0 x SVC 0x7C (MMIO write). int __fastcall asd_reg_read_BE08(unsigned int a1, _DWORD *a2) { return 2; - vX = *((_DWORD *)off_X + 99); + vX = *((_DWORD *)off_X + 115); *a2 = 0; return 29; - vX = *((_DWORD *)off_X + 30); + vX = *((_DWORD *)off_X + 34); + vX = ~vX; + vX = 0; if ( vX != 0 ) + { vX = *(_DWORD *)(vX + 4 * a1); + if ( vX > vX ) + goto LABEL_14; + } else + { vX = 0; - result = 4 * (vX + vX); + } + if ( (vX + vX) >> 30 != 0 ) + goto LABEL_18; + if ( vX == 0 ) + { + vX = 0; + goto LABEL_17; + } + vX = *(_DWORD *)(vX + 4 * a1); +LABEL_14: + if ( vX > vX ) + { + vX = 0; + goto LABEL_18; + } +LABEL_17: + vX = 4 * (vX + vX); +LABEL_18: + result = vX; __asm { SVC 0x7B ; '{' } - if ( result != 0 ) + if ( vX != 0 ) return 29; ### asd_reg_read_BE08_asic5592 - vX = sub_X(a1: vX); - if ( sub_X(a1: vX) == 0 ) + vX = asd_asic_family_lookup(a1: (int)vX); + if ( asd_asic_family_lookup(a1: (int)vX) == 0 ) { ### asd_scan_pipe_regs { return 2; - vX = off_X; + vX = (int *)off_X; vX = *(_QWORD *)(a1 + 20); - vX = sub_X(a1: 2, a2: *((_DWORD *)off_X + 50), a3: vX); - if ( vX << 30 != 0 ) + if ( asd_reg_read_13B74(a1: 2, a2: *((_DWORD *)off_X + 52), a3: vX) << 30 != 0 ) return 1; vX = off_X; - vX = vX + 46; - vX = a2; - vX = off_X(a1: 2, a2: vX[46], a3: vX); - vX = vX(a1: 2, a2: vX[47], a3: vX); - vX = vX(a1: 2, a2: vX[48], a3: vX); + vX = vX + 48; + vX = off_X(a1: 2, a2: vX[48], a3: vX); vX = vX(a1: 2, a2: vX[49], a3: vX); - if ( (vX & 7) != HIDWORD(vX) || (vX & 0x7F00) == 0 ) + vX = vX(a1: 2, a2: vX[50], a3: vX); + vX = vX(a1: 2, a2: vX[51], a3: vX); + if ( (vX & 7) == HIDWORD(vX) && (vX & 0x7F00) != 0 ) + goto LABEL_16; + if ( (vX & 7) == HIDWORD(vX) && (vX & 0x7F00) != 0 ) { - vX = vX; - if ( (vX & 7) == HIDWORD(vX) && (vX & 0x7F00) != 0 ) - { - vX = vX + 47; - } - else - { - vX = vX; - if ( (vX & 7) == HIDWORD(vX) && (vX & 0x7F00) != 0 ) - { - vX = vX + 48; - } - else - { - if ( (vX & 7) != HIDWORD(vX) || (vX & 0x7F00) == 0 ) - goto LABEL_21; - vX = vX + 49; - vX = vX; - } - } + vX = vX + 49; +LABEL_16: + asd_reg_write_1946C(a1: 2, a2: *vX, a3: vX); + goto LABEL_17; } - vX = vX & 0xX; - if ( a3 == 2 ) - vX = vX | 0x20; - vX = vX | 0x10; - if ( vX == 0 ) - vX = vX & 0xX; - sub_X(a1: 2, a2: *vX, a3: vX, a4: vX); -LABEL_21: - vX = sub_X(a1: 2, a2: vX[50], a3: vX, a4: vX & 0xX | 2); + if ( (vX & 7) == HIDWORD(vX) && (vX & 0x7F00) != 0 ) + { + vX = vX + 50; + goto LABEL_16; + } + if ( (vX & 7) == HIDWORD(vX) && (vX & 0x7F00) != 0 ) + { + vX = vX + 51; + goto LABEL_16; + } +LABEL_17: + _13B74 = asd_reg_write_1946C(a1: 2, a2: vX[52], a3: vX); vX = 11; __asm { SVC 0x56 ; 'V' } - vX = sub_X(a1: 2, a2: vX[51], a3: vX); - if ( (vX & 0xX) == 0 ) + _13B74 = asd_reg_read_13B74(a1: 2, a2: vX[53], a3: vX); + if ( (_13B74 & 0xX) == 0 ) return 0; } - return (vX & 0xX) != 0; + return (_13B74 & 0xX) != 0; } ### asd_signal_status_check { vX = off_X; - if ( sub_X(a1: *((_DWORD *)off_X + 44), a2: vX) << 30 == 0 ) + if ( asd_reg_read_13D24(a1: *((_DWORD *)off_X + 46), a2: vX) << 30 == 0 ) { vX = off_X; - vX = off_X(a1: vX[41], a2: vX); - vX = vX(a1: vX[42], a2: vX); + vX = off_X(a1: vX[43], a2: vX); + vX = vX(a1: vX[44], a2: vX); vX = vX & 0xX | vX & 0x10 | vX & 0xX; - vX = vX(a1: vX[43], a2: vX); + vX = vX(a1: vX[45], a2: vX); return (vX & 0xX | vX & 0x10 | vX) != 0; vX = off_X; - if ( sub_X(a1: 2, a2: *((_DWORD *)off_X + 50), a3: vX) << 30 != 0 ) + if ( asd_reg_read_13B74(a1: 2, a2: *((_DWORD *)off_X + 52), a3: vX) << 30 != 0 ) return 1; vX = off_X; - vX = off_X(a1: 2, a2: vX[46], a3: vX); - vX = vX | vX(a1: 2, a2: vX[47], a3: vX); - vX = vX | vX(a1: 2, a2: vX[48], a3: vX); - return (((unsigned __int8)vX(a1: 2, a2: vX[49], a3: vX) | vX) & 0x10) != 0; + vX = off_X(a1: 2, a2: vX[48], a3: vX); + vX = vX | vX(a1: 2, a2: vX[49], a3: vX); + vX = vX | vX(a1: 2, a2: vX[50], a3: vX); + return (((unsigned __int8)vX(a1: 2, a2: vX[51], a3: vX) | vX) & 0x10) != 0; } ### asd_srm_header_check +// SRM header validation + signature dispatch. +// bytes[2:4] BE16 = version, must equal the caller's computed version +// bytes[5:8] BE24 = SRM length field (vX) +// byte0>>4 == 8 : HDCP1 SRM. Bounded: reject unless 43 <= vX <= 5120 +// (SUB #0x2B / CMP #0x13D5 / BHI), then asd_srm_verify_t8(buf, vX-35). +// byte0>>4 == 9 and byte0&0xF == 1 : HDCP2 SRM. ONLY a lower bound is applied +// (CMP #0x186 / BHI); vX has NO upper bound and is never compared +// against the transport length. Calls asd_srm_verify_t9(buf, vX-379). +// Accepts when the verifier returns 0 OR 0xX. int __fastcall asd_srm_header_check(int a1, int a2, unsigned __int8 *a3) { - if ( (a3[3] | (a3[2] << 8)) != a1 ) + vX = *a3 | (a3[1] << 8) | ((a3[2] | (a3[3] << 8)) << 16); + if ( HIBYTE(vX) + ((vX >> 8) & 0xFF00) != a1 ) return 25; - vX = *a3; - vX = ((a3[6] << 8) | (a3[5] << 16)) + a3[7]; - if ( vX >> 4 == 9 ) + vX = a3[4] | (a3[5] << 8) | ((a3[6] | (a3[7] << 8)) << 16); + vX = ((vX >> 8) & 0xFF00) + ((vX << 8) & 0xX | HIBYTE(vX)); + if ( *a3 >> 4 == 9 ) { - if ( (vX & 0xF) == 1 ) + if ( (*a3 & 0xF) == 1 ) { } - if ( vX >> 4 != 8 ) + if ( *a3 >> 4 != 8 ) return 2; ### asd_srm_op_301 { vX = off_X; - vX = *off_X; + vX = *(_DWORD *)off_X; bzero_core(result: vX, a2: 0x1400u); { - sub_X( - a1: vX, - a2: (int)a3, - a3: a2, - a4: vX, - a5: vX[0].unk00, - a6: vX[0].unk04, - a7: vX[0].field08, - a8: vX[0].unk0C, - a9: vX[0].field10, - a10: vX[0].field14); + memcpy(result: vX, a2: a3, a3: a2, a4: vX); result = asd_srm_header_check(a1, a2: vX, a3: (unsigned __int8 *)vX); { - memcpy_aligned(result: (int *)off_X[0], a2: (int *)vX, a3: a2, a4: vX); - vX = off_X; + memcpy_aligned(result: (int *)off_X[0], a2: vX, a3: a2, a4: vX); *off_X = a2; - asd_srm_sub_12EC4(a1: (int)vX, a2: vX, a3: vX, a4: vX); + asd_srm_sub_12EC4(); result = 0; vX = ((__int64 (__fastcall *)(int, int))loc_X)(a1: result, a2: *vX - vX); - return asd_srm_store(a1: vX, a2: HIDWORD(vX), a3: vX, a4: vX); + return asd_srm_store(a1: vX, a2: (int *)HIDWORD(vX), a3: vX, a4: vX); } ### asd_srm_read return 2; - sub_X( - a1: (struct tee_fmt_state *)a4, - a2: (int)off_X[0], - a3: *vX, - a4: vX, - a5: (int)a4, - a6: savedregs, - a7: savedregs_4, - a8: savedregs_8, - a9: savedregs_12, - a10: savedregs_16); + memcpy(result: a4, a2: (int *)off_X[0], a3: *vX, a4: vX); return 0; ### asd_srm_store -int __fastcall asd_srm_store(unsigned int a1, unsigned int a2, unsigned int *a3, _BYTE *a4) +// RPC 0x308. a1=transport length (gated 48..5120), a2=caller buffer, a3/a4=outputs. +// Copies a1 bytes into a 5120-byte stack buffer, then parses a 24-bit BE length from +// header bytes 5..7 (vX) which is NEVER validated against a1, and uses it both as the +// verification length and as the copy-out length into byte_X (also 5120 bytes). +int __fastcall asd_srm_store(unsigned int a1, int *a2, unsigned int *a3, _BYTE *a4) { - vX = off_X; - vX = *off_X; - vX = 0; + vX = loc_X; vX = bzero_core(result: vX, a2: 0x1400u); vX = 2; - if ( a1 - 48 > 0x13D0 || a2 == 0 || a3 == nullptr ) - goto LABEL_15; - if ( asd_validate_ptr(a1: a2, a2: a1) == 0 + if ( a1 - 48 > 0x13D0 || a2 == nullptr || a3 == nullptr ) + goto LABEL_14; + if ( asd_validate_ptr(a1: (unsigned int)a2, a2: a1) == 0 || asd_validate_ptr(a1: (unsigned int)a3, a2: 4u) == 0 vX = 2; - goto LABEL_15; + goto LABEL_14; } vX = *((unsigned __int16 *)off_X[0] + 1); - sub_X(a1: vX, a2, a3: a1, a4: vX, a5: vX, a6: vX, a7: vX, a8: 0, a9: vX[0].unk00, a10: vX[0].unk04); - a1 = BYTE2(vX[0].unk04); - unk04_high = HIBYTE(vX[0].unk04); - a2 = HIWORD(vX[0].unk00); - vX = BYTE1(vX[0].unk04); - vX = BYTE1(vX[0].unk04); - if ( (vX[0].unk00 & 0xF0) == 0x80 && vX <= 0x14 ) + memcpy(result: vX, a2, a3: a1, a4: vX); + a2 = (int *)vX[0]; + vX = *(__int64 *)vX >> 24; + a1 = (vX & 0xX | HIBYTE(vX[1])) + (((unsigned int)vX[1] >> 8) & 0xFF00); + if ( a1 < 0x13FC ) + a1 += 5; + if ( (vX[0] & 0xF0) == 0x80 && vX <= 0x14 && ((1 << vX) & 0xX) != 0 ) + asd_sysdrv_rpc_103C(); + while ( 1 ) { - vX = 1048588; - if ( ((1 << vX) & 0xX) != 0 ) + a2 = (int *)((((unsigned int)a2 >> 8) & 0xFF00) + (unsigned __int8)vX); + vX = asd_srm_header_check(a1: (int)a2, a2: (unsigned __int8)vX, a3: (unsigned __int8 *)vX); + vX = vX; + if ( bswap32(vX << 16) >= (unsigned int)a2 ) { - asd_sysdrv_rpc_103C(); - if ( vX - 2 >= 2 ) - goto LABEL_18; - vX = vX & 0xX; - if ( (vX & 0xX) == 0xX && (vX & 0xFCu) < 0x74 ) - goto LABEL_21; + if ( vX == 0 ) + *a4 = 1; } + else + { + if ( vX != 0 ) + goto LABEL_14; + *a3 = (unsigned int)a2; + *a4 = 1; + memcpy_aligned(result: (int *)off_X[0], a2: vX, a3: a1, a4: vX); + *off_X = a1; + } + vX = 0; +LABEL_14: + if ( loc_X == vX ) + return vX; + ((void (__fastcall *)(int, int))loc_X)(a1: loc_X - vX, a2: vX); } -LABEL_22: - vX = bswap32(vX << 16); - a2 = bswap32(a2 << 16); - vX = asd_srm_header_check(a1: a2, a2: vX, a3: (unsigned __int8 *)vX); - vX = vX; - if ( vX >= a2 ) - { - if ( vX == 0 ) - *a4 = 1; - } - else - { - if ( vX != 0 ) - goto LABEL_15; - *a3 = a2; - vX = ((a1 << 8) | (vX << 16)) + unk04_high + 5; - *a4 = 1; - memcpy_aligned(result: (int *)off_X[0], a2: (int *)vX, a3: vX, a4: vX); - *off_X = vX; - } - vX = 0; -LABEL_15: - while ( *vX != vX ) - { - ((void (__fastcall *)(int, int))loc_X)(a1: *vX - vX, a2: vX); -LABEL_18: - if ( vX != 20 ) - goto LABEL_22; - vX = vX & 0xX; - if ( (vX & 0xX) != 0xX || (vX & 0xFEu) >= 0x26 ) - goto LABEL_22; -LABEL_21: - vX = 7; - } - return vX; } ### asd_srm_sub_12D4C -int __fastcall asd_srm_sub_12D4C(int a1) +// Reachability-derived label: called only from the 'srm' RPC subsystem +// (BFS over direct calls + tail calls from the named 0xsrm handlers). +// Behaviour not individually identified. +int __fastcall asd_srm_sub_12D4C(unsigned int *a1) { - if ( a1 == 0 ) + if ( a1 == nullptr ) return 2; - vX = off_X[0]; - vX = ((*((unsigned __int8 *)off_X[0] + 6) << 8) | (*((unsigned __int8 *)off_X[0] + 5) << 16)) - + *((unsigned __int8 *)off_X[0] + 7); + vX = asd_srm_sub_10B30(); if ( vX < 0x2B ) return 26; + vX = off_X[0]; vX = vX - 43; return 0; - vX = (int)&vX[vX + 9]; + vX = (unsigned int *)&vX[vX + 9]; vX = vX[vX + 8] & 0x7F; } - if ( ((int (__fastcall *)(int, int, int))loc_X)(a1: vX, a2: a1, a3: 5) == 0 ) + if ( memcmp_be(a1: vX, a2: a1, a3: 5u) == 0 ) break; - vX += 5; + vX = (unsigned int *)((char *)vX + 5); } ### asd_srm_sub_12DB0 -int __fastcall asd_srm_sub_12DB0(int a1) +// Reachability-derived label: called only from the 'srm' RPC subsystem +// (BFS over direct calls + tail calls from the named 0xsrm handlers). +// Behaviour not individually identified. +int __fastcall asd_srm_sub_12DB0(unsigned int *a1) { - if ( a1 == 0 ) + if ( a1 == nullptr ) return 2; - if ( (((unsigned __int8)off_X[6] << 8) | ((unsigned __int8)off_X[5] << 16)) + (unsigned __int8)off_X[7] != 0 ) + if ( asd_srm_sub_10B30() != 0 ) { - vX = off_X + 12; + vX = (unsigned int *)(off_X + 12); for ( i = *((unsigned __int16 *)off_X + 4) >> 6; i != 0; --i ) { - if ( ((int (__fastcall *)(char *, int, int))loc_X)(a1: vX, a2: a1, a3: 5) == 0 ) + if ( memcmp_be(a1: vX, a2: a1, a3: 5u) == 0 ) return 23; - vX += 5; + vX = (unsigned int *)((char *)vX + 5); } ### asd_srm_sub_12EC4 -int __fastcall asd_srm_sub_12EC4(int a1, unsigned int a2, _DWORD *a3, unsigned int a4) +int asd_srm_sub_12EC4() { - vX = off_X; - vX = 0; - vX = 0; - vX = (char *)off_X + 4105; - vX = *((unsigned __int8 *)off_X + 4104); - vX = 0; - vX = *((_DWORD *)off_X + 1022); - do + if ( asd_feature_enabled(a1: 15) ) { - if ( vX == 0 ) - break; - if ( vX << 31 != 0 ) - { - if ( asd_srm_sub_13174(a1: vX, a2, (unsigned int)a3, a4) != 0 ) - { - vX = (char *)&vX[vX]; - vX = *((_DWORD *)vX + 894); - a2 = vX[23 * vX + 22]; - if ( a2 != 0 ) - { - sub_X(a1: vX, a2: 0); - sub_X(a1: *((_DWORD *)vX + 894)); - a2 = vX++; - a3 = vX; - vX[a2] = *((_DWORD *)vX + 894); - } - } - --vX; - } - if ( ++vX << 27 != 0 ) + vX = off_X; + vX = 0; + vX = (unsigned int *)((char *)off_X + 4216); + vX = 0; + vX = *((unsigned __int8 *)off_X + 4232); + vX = 0; +LABEL_3: + vX = *vX; + vX = (unsigned int)vX + 5 * vX; + vX = 4233; + vX = (char *)(vX + 4233); + while ( vX <= 0x7F && vX != 0 ) + { + if ( vX << 31 != 0 ) + { + if ( asd_srm_sub_13174(a1: vX, a2: vX, a3: vX, a4: vX) != 0 ) + { + vX = (char *)&vX[vX]; + vX = *((_DWORD *)vX + 926); + vX = vX[24 * vX + 22]; + if ( vX != 0 ) + { + asd_link_reset(a1: vX, a2: 0); + asd_hdcp1_disable(a1: *((_DWORD *)vX + 926)); + vX = (unsigned int)vX; + vX = vX; + vX[vX] = *((_DWORD *)vX + 926); + vX = ++vX; + if ( (unsigned __int8)vX != vX ) + vX = -1; + } + } + --vX; + } + ++vX; + vX += 5; vX >>= 1; - else - vX = vX[(unsigned __int8)++vX + 1022]; - vX += 5; - } - while ( vX != 128 ); - vX = vX; - vX = 0; - vX = 0; - vX = 0; - vX = 0; - while ( vX <= 3 && vX == 0 ) - { - vX = &vX[vX + 1022]; - vX = 0; - a4 = *vX; - vX = 0; - a2 = *vX; + if ( vX << 27 == 0 ) + { + vX = vX; + if ( (unsigned __int8)vX < 3u ) + vX = vX + 1; + vX = vX; + vX = &vX[(unsigned __int8)vX + 1054]; + goto LABEL_3; + } + } + vX = 0; + vX = 0; + vX = 0; + vX = 0; + while ( vX <= 3 && vX == 0 ) + { + vX = vX; + vX = (char *)&vX[vX]; + vX = 0; + vX = *((_DWORD *)vX + 1054); + vX = (unsigned int *)(vX + 4216); + vX = 0; + vX = vX; + while ( 1 ) + { + vX = vX; + if ( vX >= vX || vX != 0 ) + break; + vX = *((unsigned __int8 *)vX + 4232); + vX = vX; + while ( vX != 0 ) + { + if ( vX << 31 != 0 ) + { + if ( vX[vX] == vX[vX + 926] ) + { + *((_BYTE *)vX + 4232) = --vX; + vX &= ~(1 << (vX & 0x1F)); + *vX = vX; + } + --vX; + } + vX = 1; + vX = (unsigned __int8)vX + 1; + ++vX; + vX >>= 1; + vX = (unsigned __int8)vX; + if ( (unsigned __int8)vX != vX ) + vX = -1; + vX = vX & 0x1F; + if ( (vX & 0x1F) != 0 ) + vX = vX; + if ( vX >= 0x80 ) + goto LABEL_35; + } + vX = 0; +LABEL_35: + ++vX; + } + vX = vX + 1; + } + vX = *((unsigned __int8 *)vX + 3700); + vX = 0; + vX = vX[924]; + vX = 3248; + vX = 0; + while ( vX <= 0x1F && vX != 0 ) + { + if ( vX << 31 != 0 ) + { + if ( asd_srm_sub_131F8(a1: (char *)vX + vX, a2: vX, a3: vX, a4: vX) != 0 ) + { + vX = (char *)&vX[vX]; + vX = *((_DWORD *)vX + 892); + vX = vX[24 * vX + 22]; + if ( vX != 0 ) + { + asd_link_reset(a1: vX, a2: 0); + asd_hdcp2_disable(a1: *((_DWORD *)vX + 892)); + vX = (unsigned int)vX; + vX = *((_DWORD *)vX + 892); + vX[vX] = vX; + vX = ++vX; + if ( (unsigned __int8)vX != vX ) + vX = -1; + } + } + --vX; + } + vX += 5; + ++vX; + vX >>= 1; + } + vX = vX[924]; + vX = vX; + vX = 0; + vX = 0; + vX = 0; + vX = vX; + vX = 0; while ( vX < vX && vX == 0 ) { - vX = *((unsigned __int8 *)vX + 4104); + vX = *((unsigned __int8 *)vX + 3700); vX = vX; { - if ( a2 << 31 != 0 ) - { - if ( vX[vX] == vX[vX + 894] ) - { - --vX; - a4 &= ~(1 << vX); - *((_BYTE *)vX + 4104) = vX; - *vX = a4; + if ( vX << 31 != 0 ) + { + if ( vX[vX] == vX[vX + 892] ) + { + *((_BYTE *)vX + 3700) = --vX; + vX &= ~(1 << (vX & 0x1F)); + vX[924] = vX; } } + vX = 1; + vX = vX + 1; ++vX; - a2 >>= 1; - vX = vX & 0x1F; - if ( (vX & 0x1F) != 0 ) - vX = vX + 1; - vX = vX; - if ( vX >= 0x80 ) - { - vX = 1; - vX = vX; - goto LABEL_29; - } + vX >>= 1; + ++vX; + if ( (unsigned __int8)vX != vX ) + vX = -1; + if ( vX >= 0x20 ) + goto LABEL_61; } vX = 0; -LABEL_29: +LABEL_61: ++vX; } - ++vX; - } - vX = *((unsigned __int8 *)vX + 3572); - vX = vX + 860; - vX = vX[892]; - vX = 0; - vX = 0; - do - { - if ( vX == 0 ) - break; - if ( vX << 31 != 0 ) - { - if ( asd_srm_sub_131F8(a1: (char *)vX + vX + 3120, a2, a3: vX, a4) != 0 ) - { - a2 = vX[23 * *vX + 22]; - if ( a2 != 0 ) - { - sub_X(a1: *vX, a2: 0); - sub_X(a1: *vX, a2: vX, a3: vX, a4: vX); - vX = vX++; - vX = (unsigned int)vX; - a2 = *vX; - vX[vX] = *vX; - } - } - --vX; - } - vX += 5; - ++vX; - vX >>= 1; - } - while ( vX != 160 ); - vX = vX[892]; - vX = 0; - vX = 0; - vX = 0; - vX = vX; - vX = 0; - while ( vX < vX && vX == 0 ) - { - vX = *((unsigned __int8 *)vX + 3572); - vX = vX; - while ( vX != 0 ) - { - if ( vX << 31 != 0 ) - { - if ( vX[vX] == vX[vX + 860] ) - { - --vX; - vX &= ~(1 << vX); - *((_BYTE *)vX + 3572) = vX; - vX[892] = vX; - } - --vX; - } - ++vX; - ++vX; - vX >>= 1; - if ( vX >= 0x20 ) - { - vX = 1; - goto LABEL_51; - } - } - vX = 0; -LABEL_51: - ++vX; } ### asd_srm_sub_13174 - vX[0] = a1; + vX[0] = (unsigned int)a1; vX[1] = a2; LOBYTE(vX[0]) = vX; - vX = asd_srm_sub_12DB0(a1: (int)vX); + vX = asd_srm_sub_12DB0(a1: vX); } return 0; - vX = asd_srm_sub_12D4C(a1: (int)vX); + vX = asd_srm_sub_12D4C(a1: vX); } ### asd_srm_sub_131F8 { - vX = asd_srm_sub_12DB0((int)a1); + vX = asd_srm_sub_12DB0((unsigned int *)a1); } HIBYTE(vX[0]) = vX; - vX = asd_srm_sub_12D4C(a1: (int)vX); + vX = asd_srm_sub_12D4C(a1: vX); } ### asd_svc_op_202 // Opcode 0x202. -unsigned int __fastcall asd_svc_op_202(unsigned int a1, unsigned int a2, unsigned int i, unsigned int *a4) +unsigned int __fastcall asd_svc_op_202(unsigned int a1, unsigned int a2, unsigned int a3, unsigned int *a4) { vX = off_X; - vX = *off_X; - vX = 0; - vX = 0; + vX = *(_DWORD *)off_X; if ( asd_validate_ptr(a1, a2) == 0 || asd_validate_ptr(a1: (unsigned int)a4, a2: 4u) == 0 - || asd_validate_ptr(a1: i, a2: *a4) == 0 ) + || asd_validate_ptr(a1: a3, a2: *a4) == 0 ) { - i = 2; + a3 = 2; goto LABEL_7; vX = gp_object_allocate(); - vX = 16; - vX = (char *)off_X + 16; - vX = -1073741824; asd_sysdrv_rpc_35(); LABEL_14: - for ( i = 1; ; i = 0 ) + a3 = 1; +LABEL_7: + while ( *vX != vX ) { - if ( vX != 0 ) - gp_operation_free(); - if ( vX != 0 ) - gp_object_free(); -LABEL_7: - if ( *vX == vX ) - break; ((void (__fastcall *)(int))loc_X)(a1: *vX - vX); goto LABEL_14; - sub_X( - a1: (struct tee_fmt_state *)(i + 16), - a2: (int)vX, - a3: 16, - a4: vX, - a5: (int)a4, - a6: vX, - a7: (int)vX, - a8: vX, - a9: vX, - a10: vX); + memcpy(result: (_BYTE *)(a3 + 16), a2: vX, a3: 0x10u, a4: vX); + a3 = 0; } - return i; + return a3; } ### asd_svc_op_207 return 2; - vX = *((void (__fastcall **)(unsigned int))off_X + 14); + vX = *((void (__fastcall **)(unsigned int))off_X + 10); if ( vX == nullptr ) ### asd_svc_sub_2794 { - vX = *((void (__fastcall **)(int *))off_X + 32); + vX = *((void (__fastcall **)(int *))off_X + 13); if ( vX != nullptr ) ### asd_sync_link_state { - while ( asd_link_state_poll() ) + while ( asd_link_state_poll() != 0 ) ; ### asd_verify_reg_triplet vX = a1; - if ( sub_X(a1: *((_DWORD *)off_X + 83), a2: a1) << 31 != 0 ) + if ( asd_reg_read_13A54(a1: *((_DWORD *)off_X + 88), a2: a1) << 31 != 0 ) { - vX = sub_X(a1: vX[85], a2: vX); + _13A54 = asd_reg_read_13A54(a1: vX[90], a2: vX); for ( i = 0; i != 3; ++i ) - *((_DWORD *)&vX + i + 1) = sub_X(a1: vX[85], a2: vX); + *((_DWORD *)&vX + i + 1) = asd_reg_read_13A54(a1: vX[90], a2: vX); vX = HIDWORD(vX) == vX; if ( HIDWORD(vX) == vX ) - vX = HIDWORD(vX) == vX; + vX = HIDWORD(vX) == _13A54; if ( !vX || HIDWORD(vX) != vX ) { - while ( sub_X(a1: vX[84], a2: vX) << 31 == 0 ) + while ( asd_reg_read_13A54(a1: vX[89], a2: vX) << 31 == 0 ) ; ### asd_wait_signal16_idle vX = *(_DWORD *)(a1 + 20); - vX = sub_X(a1: 0, a2: *((_DWORD *)off_X + 57), a3: vX); + _13B74 = asd_reg_read_13B74(a1: 0, a2: *((_DWORD *)off_X + 59), a3: vX); vX = off_X; - while ( (vX & 0xX) != 0 && vX[12] > vX ) + while ( (_13B74 & 0xX) != 0 && vX[12] > vX ) { __asm { SVC 0x56 ; 'V' } - vX = sub_X(a1: 0, a2: vX[57], a3: vX); + _13B74 = asd_reg_read_13B74(a1: 0, a2: vX[59], a3: vX); ++vX; vX = 0; - vX = sub_X(a1: 0, a2: vX[38], a3: vX); - sub_X(a1: 0, a2: vX[38], a3: vX, a4: vX & 0xX); + asd_reg_read_13B74(a1: 0, a2: vX[40], a3: vX); + asd_reg_write_1946C(a1: 0, a2: vX[40], a3: vX); return vX; ### j_asd_clear_link_outputs_13 // attributes: thunk -int __fastcall j_asd_clear_link_outputs_13(int a1, _BYTE *a2, _BYTE *a3) +int __fastcall j_asd_clear_link_outputs_13(struct asd_link_cfg *a1, _BYTE *a2, _BYTE *a3) { - return asd_clear_link_outputs((struct asd_link_cfg *)a1, a2, a3); + return asd_clear_link_outputs(a1, a2, a3); } ### j_asd_clear_link_outputs_14 // attributes: thunk -int __fastcall j_asd_clear_link_outputs_14(int a1, _BYTE *a2, _BYTE *a3) +int __fastcall j_asd_clear_link_outputs_14(struct asd_link_cfg *a1, _BYTE *a2, _BYTE *a3) { - return asd_clear_link_outputs((struct asd_link_cfg *)a1, a2, a3); + return asd_clear_link_outputs(a1, a2, a3); } ### j_asd_connector_enable_12 // attributes: thunk -int __fastcall j_asd_connector_enable_12(unsigned int a1) +int __fastcall j_asd_connector_enable_12(_DWORD *a1, int *a2) { - return asd_connector_enable(a1); + return asd_connector_enable((unsigned int)a1); } ### j_asd_connector_enable_13 // attributes: thunk -int __fastcall j_asd_connector_enable_13(unsigned int a1) +int __fastcall j_asd_connector_enable_13(int a1) { ### j_asd_connector_enable_14 // attributes: thunk -int __fastcall j_asd_connector_enable_14(unsigned int a1) +int __fastcall j_asd_connector_enable_14(int a1, int a2) { ### j_asd_encoder_enable_seq_14 // attributes: thunk -int __fastcall j_asd_encoder_enable_seq_14(struct asd_link_cfg *a1, char *a2, char *a3) +int __fastcall j_asd_encoder_enable_seq_14(int a1) { - return asd_encoder_enable_seq(a1, a2, a3); + + return asd_encoder_enable_seq((struct asd_link_cfg *)a1, a2: vX, a3: vX); } ### j_asd_get_signal_reg_14 // attributes: thunk -int __fastcall j_asd_get_signal_reg_14(int a1, int a2) +int __fastcall j_asd_get_signal_reg_14(int a1) { ### j_asd_link_query_b_12 // attributes: thunk -int __fastcall j_asd_link_query_b_12() +int __fastcall j_asd_link_query_b_12(_DWORD *a1, int a2, __int16 a3) { - - return asd_link_query_b(a1: vX, a2: vX, a3: vX); + return asd_link_query_b(a1, a2, a3); } ### j_asd_link_query_b_13 // attributes: thunk -int __fastcall j_asd_link_query_b_13(unsigned int a1, int a2) +int __fastcall j_asd_link_query_b_13(int a1, _BYTE *a2, _BYTE *a3) { - - return asd_link_query_b((_DWORD *)a1, a2, a3: vX); + return asd_link_query_b((_DWORD *)a1, (int)a2, (__int16)a3); } ### j_asd_link_read_pair_regs_13 // attributes: thunk -int __fastcall j_asd_link_read_pair_regs_13(int a1, int a2, int a3) +int __fastcall j_asd_link_read_pair_regs_13(int a1, _BYTE *a2, _BYTE *a3) { - return asd_link_read_pair_regs(a1, (_BYTE *)a2, (_BYTE *)a3); + return asd_link_read_pair_regs(a1, a2, a3); } ### j_asd_link_ready_full_check_14 // attributes: thunk -int __fastcall j_asd_link_ready_full_check_14(int a1, _BYTE *a2, _BYTE *a3) +int __fastcall j_asd_link_ready_full_check_14(int a1) { ### j_asd_link_set_reg4248C_half_13 // attributes: thunk -int __fastcall j_asd_link_set_reg4248C_half_13(_DWORD *a1, int *a2) +int __fastcall j_asd_link_set_reg4248C_half_13(int a1, int a2) { - return asd_link_set_reg4248C_half((int)a1, (int)a2); + return asd_link_set_reg4248C_half(a1, a2); } ### j_asd_link_train_status_12 // attributes: thunk -int __fastcall j_asd_link_train_status_12(int a1, int a2, int a3) +int __fastcall j_asd_link_train_status_12(int a1) { ### j_asd_link_train_status_14 // attributes: thunk -int __fastcall j_asd_link_train_status_14() +int __fastcall j_asd_link_train_status_14(int a1) { - - return asd_link_train_status(a1: vX); + return asd_link_train_status(a1); } ### j_asd_pipe_enable_14 // attributes: thunk -int __fastcall j_asd_pipe_enable_14(int a1) +int __fastcall j_asd_pipe_enable_14(int a1, int a2, int a3) { - - return asd_pipe_enable(a1, a2: vX, a3: vX); + return asd_pipe_enable(a1, a2, a3); } ### j_asd_pipe_lookup_14 // attributes: thunk -int __fastcall j_asd_pipe_lookup_14(_DWORD *a1) +int __fastcall j_asd_pipe_lookup_14(_DWORD *a1, int a2, __int16 a3) { - - return asd_pipe_lookup(a1, a2: vX, a3: vX); + return asd_pipe_lookup(a1, a2, a3); } ### j_asd_program_link_by_signal_11 // attributes: thunk -int __fastcall j_asd_program_link_by_signal_11(struct asd_link_cfg *a1, int a2, int a3, int a4) +int __fastcall j_asd_program_link_by_signal_11(_DWORD *a1) { - return asd_program_link_by_signal(a1, a2, a3, a4); + + return asd_program_link_by_signal((struct asd_link_cfg *)a1, a2: vX, a3: vX, a4: vX); } ### j_asd_program_link_by_signal_12 // attributes: thunk -int __fastcall j_asd_program_link_by_signal_12(int a1) +int __fastcall j_asd_program_link_by_signal_12(unsigned int a1, int a2, char a3) { - return asd_program_link_by_signal((struct asd_link_cfg *)a1, a2: vX, a3: vX, a4: vX); + return asd_program_link_by_signal((struct asd_link_cfg *)a1, a2, a3, a4: vX); } ### j_asd_query_link_config_13 // attributes: thunk -int __fastcall j_asd_query_link_config_13(int a1, _BYTE *a2, _BYTE *a3) +int __fastcall j_asd_query_link_config_13(_DWORD *a1, int *a2) { - return asd_query_link_config((_DWORD *)a1, (int *)a2); + return asd_query_link_config(a1, a2); } ### j_asd_query_link_config_14 // attributes: thunk -int __fastcall j_asd_query_link_config_14(int a1) +int __fastcall j_asd_query_link_config_14(_DWORD *a1, int *a2) { - - return asd_query_link_config((_DWORD *)a1, a2: vX); + return asd_query_link_config(a1, a2); } ### j_asd_reg_read_13B74_cfg2_14 // attributes: thunk -int __fastcall j_asd_reg_read_13B74_cfg2_14(int a1, _BYTE *a2, _BYTE *a3) +int __fastcall j_asd_reg_read_13B74_cfg2_14(int a1) { ### j_asd_reg_read_13D24_cfg0_13 // attributes: thunk -int __fastcall j_asd_reg_read_13D24_cfg0_13(_DWORD *a1) +int __fastcall j_asd_reg_read_13D24_cfg0_13(unsigned int a1, int a2, __int16 a3) { - - return asd_reg_read_13D24_cfg0((unsigned int)a1, a2: vX, a3: vX); + return asd_reg_read_13D24_cfg0(a1, a2, a3); } ### j_asd_reg_read_13D24_cfg0_14 // attributes: thunk -int __fastcall j_asd_reg_read_13D24_cfg0_14(_DWORD *a1) +int __fastcall j_asd_reg_read_13D24_cfg0_14(int a1, int a2, int a3) { - - return asd_reg_read_13D24_cfg0((unsigned int)a1, a2: vX, a3: vX); + return asd_reg_read_13D24_cfg0(a1, a2, a3); } ### j_asd_session_op57_invoke // attributes: thunk -int __fastcall j_asd_session_op57_invoke() +int j_asd_session_op57_invoke(void) { ### j_asd_session_op57_invoke_0 // attributes: thunk -int __fastcall j_asd_session_op57_invoke_0() +int j_asd_session_op57_invoke_0(void) { ### j_asd_session_op57_invoke_1 // attributes: thunk -int __fastcall j_asd_session_op57_invoke_1() +int j_asd_session_op57_invoke_1(void) { ### j_asd_session_op57_invoke_2 // attributes: thunk -int __fastcall j_asd_session_op57_invoke_2(int a1) +int j_asd_session_op57_invoke_2(void) { - - return asd_link_wait_and_set(a1, a2: vX, a3: vX); + return asd_session_op57_invoke(); } ### j_asd_session_op57_invoke_3 // attributes: thunk -int __fastcall j_asd_session_op57_invoke_3(int a1) +int j_asd_session_op57_invoke_3(void) { - - return asd_link_query_b((_DWORD *)a1, a2: vX, a3: vX); + return asd_session_op57_invoke(); }