diff --git a/_sd/body_syms.inc b/_sd/body_syms.inc index 2ac3446..ac31808 100644 --- a/_sd/body_syms.inc +++ b/_sd/body_syms.inc @@ -1,406 +1,403 @@ -body_end: EQU 0x00002002 -mkdir_sec_lo: EQU 0x00001FF2 -mkdir_sec_hi: EQU 0x00001FF0 -cmkf_open_stream: EQU 0x00001FC9 -cmkf_final: EQU 0x00001FB3 -cmkf_buildlfn: EQU 0x00001F97 -cmkf_entry: EQU 0x00001F55 -cmkf_havecl: EQU 0x00001F27 -cmkf_alloc: EQU 0x00001F11 -cmkf_havelen: EQU 0x00001EF8 -cmkf_lendone: EQU 0x00001EEF -cmkf_lenloop: EQU 0x00001EE2 -core_mkfile: EQU 0x00001EC7 -cmkf_len_lo: EQU 0x00001EC5 -cmkf_len_hi: EQU 0x00001EC3 -cmkd_final: EQU 0x00001EAE -cmkd_buildlfn: EQU 0x00001E92 -cmkd_ownentry: EQU 0x00001E5F -dotdot_name: EQU 0x00001FE5 -cmkd_dot_ok: EQU 0x00001E13 -dot_name: EQU 0x00001FDA -clear_dir_entry: EQU 0x00001FF4 -cmkd_dots: EQU 0x00001DBF -cmkd_zf: EQU 0x00001DA9 -cmkd_have_cl: EQU 0x00001D7B -cmkd_alloc: EQU 0x00001D65 -cmkd_toolong: EQU 0x00001D44 -cmkd_lendone: EQU 0x00001D48 -core_mkdir: EQU 0x00001D37 -cmk_sec_lo: EQU 0x00001D35 -cmk_sec_hi: EQU 0x00001D33 -cmk_cluster_lo: EQU 0x00001D31 -cmk_cluster_hi: EQU 0x00001D2F -cmk_name_ptr: EQU 0x00001D2D -sv512_nowrap: EQU 0x00001D29 -lv512_nowrap: EQU 0x00001CFC -lv512_advance: EQU 0x00001CE6 -lv512_eoc: EQU 0x00001D09 -lv512_done: EQU 0x00001D00 -lv512_loop: EQU 0x00001CC5 -core_load512: EQU 0x00001CBA -lv512_count: EQU 0x00001CB9 -lv512_off: EQU 0x00001CB7 -lv512_page: EQU 0x00001CB6 -sv512_advance: EQU 0x00001D13 -sv512_eoc: EQU 0x00001CAC -sv512_done: EQU 0x00001CA3 -sv512_loop: EQU 0x00001C82 -core_save512: EQU 0x00001C77 -sv512_count: EQU 0x00001C76 +body_end: EQU 0x00001FAE +cmkf_open_stream: EQU 0x00001F79 +cmkf_final: EQU 0x00001F63 +cmkf_buildlfn: EQU 0x00001F47 +cmkf_entry: EQU 0x00001F05 +cmkf_havecl: EQU 0x00001ED7 +cmkf_alloc: EQU 0x00001EC1 +cmkf_havelen: EQU 0x00001EA8 +cmkf_lendone: EQU 0x00001E9F +cmkf_lenloop: EQU 0x00001E92 +core_mkfile: EQU 0x00001E77 +cmkf_len_lo: EQU 0x00001E75 +cmkf_len_hi: EQU 0x00001E73 +cmkd_final: EQU 0x00001E5E +cmkd_buildlfn: EQU 0x00001E42 +cmkd_ownentry: EQU 0x00001E0F +dotdot_name: EQU 0x00001F95 +cmkd_dot_ok: EQU 0x00001DC3 +dot_name: EQU 0x00001F8A +clear_dir_entry: EQU 0x00001FA0 +cmkd_dots: EQU 0x00001D6F +cmkd_zf: EQU 0x00001D59 +cmkd_have_cl: EQU 0x00001D2B +cmkd_alloc: EQU 0x00001D15 +cmkd_toolong: EQU 0x00001CF4 +cmkd_lendone: EQU 0x00001CF8 +core_mkdir: EQU 0x00001CE7 +cmk_sec_lo: EQU 0x00001CE5 +cmk_sec_hi: EQU 0x00001CE3 +cmk_cluster_lo: EQU 0x00001CE1 +cmk_cluster_hi: EQU 0x00001CDF +cmk_name_ptr: EQU 0x00001CDD +sv512_nowrap: EQU 0x00001CD9 +lv512_nowrap: EQU 0x00001CAC +lv512_advance: EQU 0x00001C96 +lv512_eoc: EQU 0x00001CB9 +lv512_done: EQU 0x00001CB0 +lv512_loop: EQU 0x00001C75 +core_load512: EQU 0x00001C6A +lv512_count: EQU 0x00001C69 +lv512_off: EQU 0x00001C67 +lv512_page: EQU 0x00001C66 +sv512_advance: EQU 0x00001CC3 +sv512_eoc: EQU 0x00001C5C +sv512_done: EQU 0x00001C53 +sv512_loop: EQU 0x00001C32 +core_save512: EQU 0x00001C27 +sv512_count: EQU 0x00001C26 page1_port: EQU 0x000011AF -core_fentry: EQU 0x00001C62 -core_setdir: EQU 0x00001C55 -core_setroot: EQU 0x00001C48 -active_dir_lo: EQU 0x00001C46 -active_dir_hi: EQU 0x00001C44 -fbn_tm_yes: EQU 0x00001C06 -fbn_tm_short: EQU 0x00001BF4 -fbn_acc_null: EQU 0x00001BC6 -fbn_acc_pad: EQU 0x00001BD1 -fbn_acc_charloop: EQU 0x00001B9A -fbn_acc_mul: EQU 0x00001B8A -fbn_acc_mul_done: EQU 0x00001B90 -fbn_matched_setrun: EQU 0x00001B5B -fbn_matched_norun: EQU 0x00001B58 -fbn_accumulate_lfn: EQU 0x00001B61 -fbn_lfn_cont: EQU 0x00001B22 -fbn_next: EQU 0x00001B2D -fbn_matched: EQU 0x00001B46 -fbn_try_match: EQU 0x00001BD4 -fbn_is_lfn: EQU 0x00001B14 -fbn_deleted: EQU 0x00001B27 -fbn_notfound_pop: EQU 0x00001B43 -fbn_entloop: EQU 0x00001AF3 -fbn_notfound: EQU 0x00001B44 -fbn_sector_loop: EQU 0x00001AD3 -find_by_name: EQU 0x00001AC3 -fbn_match_run_start_lo: EQU 0x00001AC1 -fbn_match_index_lo: EQU 0x00001ABF -fbn_run_start_lo: EQU 0x00001ABD -fbn_cur_index_lo: EQU 0x00001ABB -fbn_render_buf: EQU 0x00001AAE -fbn_attr: EQU 0x00001AAD -fbn_size_lo: EQU 0x00001AAB -fbn_size_hi: EQU 0x00001AA9 -fbn_cluster_hi: EQU 0x00001AA5 -fbn_acc_dest: EQU 0x00001AA3 -fbn_lfn_seen: EQU 0x00001AA2 -fbn_lfn_checksum: EQU 0x00001AA1 -fbn_lfn_buf: EQU 0x00001A38 -fbn_name_ptr: EQU 0x00001A36 -rsn_ext: EQU 0x00001A28 -rsn_done: EQU 0x00001A32 -rsn_ext_prep: EQU 0x00001A1D -rsn_base_skip: EQU 0x00001A1A -rsn_base: EQU 0x00001A0E -render_shortname: EQU 0x00001A0B -seci_eq: EQU 0x00001A09 -seci_ne: EQU 0x00001A06 -str_eq_ci: EQU 0x000019F3 -to_upper: EQU 0x000019EA -wne_w_skip_write: EQU 0x000019E1 -wne_w_notinrange: EQU 0x000019B3 -wne_w_entloop: EQU 0x0000197D -wne_w_fail: EQU 0x000019E7 -wne_w_continue: EQU 0x00001948 -wne_w_done: EQU 0x00001946 -wne_w_sector_loop: EQU 0x00001931 -write_name_entries: EQU 0x00001928 -wne_w_this_sec_lo: EQU 0x00001926 -wne_w_this_sec_hi: EQU 0x00001924 -wne_w_dirty: EQU 0x00001923 -wne_w_entcount: EQU 0x00001922 -wne_w_entptr: EQU 0x00001920 -ffr_no_hi_carry: EQU 0x000018A0 -ffr_free_cont: EQU 0x00001869 -ffr_advance_index: EQU 0x0000188A -ffr_free: EQU 0x00001853 -ffr_entloop: EQU 0x00001844 -ffr_fail: EQU 0x000018AD -ffr_grow_dir: EQU 0x000018B0 -ffr_have_sector: EQU 0x0000182C -ffr_sector_loop: EQU 0x0000181D -find_free_run: EQU 0x0000180D -wne_free_index_lo: EQU 0x0000180B -wne_free_index_hi: EQU 0x00001809 -cmkd_lenloop: EQU 0x00001D3C -wne_cur_index_lo: EQU 0x00001807 -wne_cur_index_hi: EQU 0x00001805 -wne_run_start_lo: EQU 0x00001803 -wne_run_start_hi: EQU 0x00001801 -wne_run_len: EQU 0x00001800 -ble_char_nextk: EQU 0x000017CD -ble_char_hi0: EQU 0x000017CB -ble_char_have: EQU 0x000017B1 -ble_char_isreal: EQU 0x000017A7 -ble_char_isnull: EQU 0x000017B0 -ble_lfn_next: EQU 0x000017D0 -ble_charloop: EQU 0x00001788 -ble_mul13done: EQU 0x00001783 -ble_mul13: EQU 0x00001778 -ble_seqset: EQU 0x0000175A -ble_notlast: EQU 0x00001759 -ble_lfn_done: EQU 0x000017D7 -ble_lfn_loop: EQU 0x00001722 -ble_divdone: EQU 0x0000170B -ble_divloop: EQU 0x00001700 -ble_multi: EQU 0x000016F7 -build_lfn_entries: EQU 0x000016D2 -ble_entry_ptr: EQU 0x000016D0 -ble_charpos: EQU 0x000016CE -ble_j: EQU 0x000016CD -ble_checksum: EQU 0x000016CC -ble_lfn_count: EQU 0x000016CB -ble_name_ptr: EQU 0x000016C9 -lfn_char_dest: EQU 0x000016BC -wne_slot_count: EQU 0x000016BB -wne_entries_buf: EQU 0x0000159B +core_fentry: EQU 0x00001C12 +core_setdir: EQU 0x00001C05 +core_setroot: EQU 0x00001BF8 +active_dir_lo: EQU 0x00001BF6 +active_dir_hi: EQU 0x00001BF4 +fbn_tm_yes: EQU 0x00001BB6 +fbn_tm_short: EQU 0x00001BA4 +fbn_acc_null: EQU 0x00001B76 +fbn_acc_pad: EQU 0x00001B81 +fbn_acc_charloop: EQU 0x00001B4A +fbn_acc_mul: EQU 0x00001B3A +fbn_acc_mul_done: EQU 0x00001B40 +fbn_matched_setrun: EQU 0x00001B0B +fbn_matched_norun: EQU 0x00001B08 +fbn_accumulate_lfn: EQU 0x00001B11 +fbn_lfn_cont: EQU 0x00001AD2 +fbn_next: EQU 0x00001ADD +fbn_matched: EQU 0x00001AF6 +fbn_try_match: EQU 0x00001B84 +fbn_is_lfn: EQU 0x00001AC4 +fbn_deleted: EQU 0x00001AD7 +fbn_notfound_pop: EQU 0x00001AF3 +fbn_entloop: EQU 0x00001AA3 +fbn_notfound: EQU 0x00001AF4 +fbn_sector_loop: EQU 0x00001A83 +find_by_name: EQU 0x00001A73 +fbn_match_run_start_lo: EQU 0x00001A71 +fbn_match_index_lo: EQU 0x00001A6F +fbn_run_start_lo: EQU 0x00001A6D +fbn_cur_index_lo: EQU 0x00001A6B +fbn_render_buf: EQU 0x00001A5E +fbn_attr: EQU 0x00001A5D +fbn_size_lo: EQU 0x00001A5B +fbn_size_hi: EQU 0x00001A59 +fbn_cluster_hi: EQU 0x00001A55 +fbn_acc_dest: EQU 0x00001A53 +fbn_lfn_seen: EQU 0x00001A52 +fbn_lfn_checksum: EQU 0x00001A51 +fbn_lfn_buf: EQU 0x000019E8 +fbn_name_ptr: EQU 0x000019E6 +rsn_ext: EQU 0x000019D8 +rsn_done: EQU 0x000019E2 +rsn_ext_prep: EQU 0x000019CD +rsn_base_skip: EQU 0x000019CA +rsn_base: EQU 0x000019BE +render_shortname: EQU 0x000019BB +seci_eq: EQU 0x000019B9 +seci_ne: EQU 0x000019B6 +str_eq_ci: EQU 0x000019A3 +to_upper: EQU 0x0000199A +wne_w_skip_write: EQU 0x00001991 +wne_w_notinrange: EQU 0x00001963 +wne_w_entloop: EQU 0x0000192D +wne_w_fail: EQU 0x00001997 +wne_w_continue: EQU 0x000018F8 +wne_w_done: EQU 0x000018F6 +wne_w_sector_loop: EQU 0x000018E1 +write_name_entries: EQU 0x000018D8 +wne_w_this_sec_lo: EQU 0x000018D6 +wne_w_this_sec_hi: EQU 0x000018D4 +wne_w_dirty: EQU 0x000018D3 +wne_w_entcount: EQU 0x000018D2 +wne_w_entptr: EQU 0x000018D0 +ffr_no_hi_carry: EQU 0x00001850 +ffr_free_cont: EQU 0x00001819 +ffr_advance_index: EQU 0x0000183A +ffr_free: EQU 0x00001803 +ffr_entloop: EQU 0x000017F4 +ffr_fail: EQU 0x0000185D +ffr_grow_dir: EQU 0x00001860 +ffr_have_sector: EQU 0x000017DC +ffr_sector_loop: EQU 0x000017CD +find_free_run: EQU 0x000017BD +wne_free_index_lo: EQU 0x000017BB +wne_free_index_hi: EQU 0x000017B9 +cmkd_lenloop: EQU 0x00001CEC +wne_cur_index_lo: EQU 0x000017B7 +wne_cur_index_hi: EQU 0x000017B5 +wne_run_start_lo: EQU 0x000017B3 +wne_run_start_hi: EQU 0x000017B1 +wne_run_len: EQU 0x000017B0 +ble_char_nextk: EQU 0x0000177D +ble_char_hi0: EQU 0x0000177B +ble_char_have: EQU 0x00001761 +ble_char_isreal: EQU 0x00001757 +ble_char_isnull: EQU 0x00001760 +ble_lfn_next: EQU 0x00001780 +ble_charloop: EQU 0x00001738 +ble_mul13done: EQU 0x00001733 +ble_mul13: EQU 0x00001728 +ble_seqset: EQU 0x0000170A +ble_notlast: EQU 0x00001709 +ble_lfn_done: EQU 0x00001787 +ble_lfn_loop: EQU 0x000016D2 +ble_divdone: EQU 0x000016BB +ble_divloop: EQU 0x000016B0 +ble_multi: EQU 0x000016A7 +build_lfn_entries: EQU 0x00001682 +ble_entry_ptr: EQU 0x00001680 +ble_charpos: EQU 0x0000167E +ble_j: EQU 0x0000167D +ble_checksum: EQU 0x0000167C +ble_lfn_count: EQU 0x0000167B +ble_name_ptr: EQU 0x00001679 +lfn_char_dest: EQU 0x0000166C +wne_slot_count: EQU 0x0000166B +wne_entries_buf: EQU 0x0000154B wne_max_lfn: EQU 0x00000008 -btd_done: EQU 0x0000158F -btd_loop: EQU 0x00001586 -gus_have_candidate: EQU 0x00001565 -bin_to_2dig: EQU 0x00001584 -gus_try_1digit: EQU 0x0000154D -gus_try: EQU 0x00001528 -gus_ok: EQU 0x00001582 -gus_needs_suffix: EQU 0x00001523 -generate_unique_shortname: EQU 0x00001504 -gus_suffix: EQU 0x00001503 -fn83_ext_full: EQU 0x000014F5 -fn83_ext_bad: EQU 0x000014FC -fn83_ext_loop: EQU 0x000014D7 -fn83_ext_go: EQU 0x000014C0 -fn83_base_full: EQU 0x000014A5 -fn83_base_bad: EQU 0x000014AC -fn83_ext: EQU 0x000014B3 -fn83_base_loop: EQU 0x00001486 -fn83_have_baselen: EQU 0x0000147B -fn83_scan_next: EQU 0x00001439 -fn83_scandone: EQU 0x0000143D -fn83_scan: EQU 0x0000142D -filter_name_to_83: EQU 0x00001422 -fn83_charbuf: EQU 0x00001421 -sn_base_len: EQU 0x0000141F -sn_dot_pos: EQU 0x0000141D -sn_name_len: EQU 0x0000141B -sn_needs_lfn: EQU 0x0000141A -sn_ext: EQU 0x00001417 -sn_base: EQU 0x0000140F -cc_symyes: EQU 0x0000140A -cc_no: EQU 0x0000140D -cc_symloop: EQU 0x00001400 -cc_sym: EQU 0x000013FC -cc_yes: EQU 0x0000140B -cc_dig: EQU 0x000013F4 -cc_up: EQU 0x000013EC -classify_char: EQU 0x000013E2 -cc_symbols: EQU 0x000013D1 -lfnck_loop: EQU 0x000013CB -lfn_checksum: EQU 0x000013C8 -stamp_dir_entry_datetime: EQU 0x000011B1 -rtc_to_fat_datetime: EQU 0x00001135 -rtc_cached: EQU 0x00001134 -fat_time: EQU 0x00001132 -fat_date: EQU 0x00001130 -bcd_to_bin: EQU 0x0000111B -rtc_field_to_bin: EQU 0x0000110F -rtc_dm: EQU 0x0000110E -rtc_year: EQU 0x0000109D -rtc_month: EQU 0x0000109C -rtc_date: EQU 0x0000109B -rtc_hour: EQU 0x0000109A -rtc_min: EQU 0x00001099 -rtc_sec: EQU 0x00001098 -sv512_off: EQU 0x00001C74 -sv512_page: EQU 0x00001C73 -strm_write_have2: EQU 0x00001083 -stream_write_sector_from: EQU 0x0000101F -read_rtc_datetime: EQU 0x0000109E -strm_write_have: EQU 0x0000100A -stream_write_sector: EQU 0x00000F9C -stream_read_sector_to: EQU 0x00000D81 -stream_data_save: EQU 0x00000D9C -strm_read_eoc: EQU 0x00000D7E -stream_read_sector: EQU 0x00000D4B -strm_adv_same: EQU 0x00000D45 -strm_adv_cross: EQU 0x00000D1E -strm_adv_test_z: EQU 0x00000D16 -strm_advance: EQU 0x00000D09 -strm_calc_sector: EQU 0x00000CE1 -strm_open_nz: EQU 0x00000CCD -stream_open: EQU 0x00000CB3 -strm_sector_lo: EQU 0x00000CB1 -strm_sector_hi: EQU 0x00000CAF -stream_eoc: EQU 0x00000CAE -stream_sec_in_cluster: EQU 0x00000CAD -stream_cluster_lo: EQU 0x00000CAB -stream_cluster_hi: EQU 0x00000CA9 -wde_next: EQU 0x00000C78 -wde_slot: EQU 0x00000C89 -wde_entloop: EQU 0x00000C58 -wde_fail: EQU 0x00000CA6 -wde_sec_loop: EQU 0x00000C43 -wde_cluster: EQU 0x00000C2E -write_dir_entry: EQU 0x00000C2E -wde_slotptr: EQU 0x00000C2C -wde_sector_lo: EQU 0x00000C2A -wde_sector_hi: EQU 0x00000C28 -wde_remaining: EQU 0x00000C27 -dir_entry_buf: EQU 0x00000C07 -zfc_loop: EQU 0x00000BF5 -zfc_fail: EQU 0x00000C04 -zero_fill_cluster: EQU 0x00000BCF -zfc_remaining: EQU 0x00000BCE -ffc_nowrap: EQU 0x00000BBF -ffc_nsv2: EQU 0x00000B99 -ffc_nsv: EQU 0x00000B93 -ffc_entnext: EQU 0x00000BA3 -ffc_entloop: EQU 0x00000B5C -ffc_fail: EQU 0x00000BCB -ffc_from2: EQU 0x00000B12 -ffc_scan: EQU 0x00000B21 -ffc_use_hint: EQU 0x00000AF8 -find_free_cluster: EQU 0x00000ADD -next_search_valid: EQU 0x00000AD8 -ffc_sectors_read: EQU 0x00000AD6 -ffc_count: EQU 0x00000AD5 -ffc_ptr: EQU 0x00000AD3 -free_cluster_lo: EQU 0x00000AD1 -free_cluster_hi: EQU 0x00000ACF -next_search_hi: EQU 0x00000AD9 -next_search_lo: EQU 0x00000ADB -wfi_skip_count: EQU 0x00000AB3 -write_fsinfo_hint: EQU 0x00000A78 -read_fsinfo_hint: EQU 0x00000A19 -fsinfo_valid: EQU 0x00000A18 -fsinfo_hint_lo: EQU 0x00000A16 -fsinfo_hint_hi: EQU 0x00000A14 -wfe_loop: EQU 0x000009DD -wfe_fail: EQU 0x00000A0F -write_fat_entry: EQU 0x0000098E -wfe_sector_lo: EQU 0x0000098C -wfe_sector_hi: EQU 0x0000098A -wfe_remaining: EQU 0x00000989 -new_val_lo: EQU 0x00000987 -new_val_hi: EQU 0x00000985 -gnc_have_next: EQU 0x00000974 -gnc_end: EQU 0x0000096E -nxt_hi: EQU 0x00000927 -nxt_lo: EQU 0x00000925 -ctf_bad: EQU 0x00000921 -ctf_shr: EQU 0x000008D2 -cluster_to_fatpos: EQU 0x000008C4 -gnc_inoff: EQU 0x000008C3 -gnc_fatsec_lo: EQU 0x000008C1 -gnc_fatsec_hi: EQU 0x000008BF -gnc_lo: EQU 0x000008BD -gnc_hi: EQU 0x000008BB -c2s_loop: EQU 0x00000881 -c2s_done: EQU 0x0000089A -cur_cluster_hi: EQU 0x000008B7 -cur_cluster_lo: EQU 0x000008B9 -c2s_prod_hi: EQU 0x00000854 -c2s_prod_lo: EQU 0x00000852 -c2s_hi: EQU 0x00000850 -c2s_lo: EQU 0x0000084E -chain_ended: EQU 0x00000924 -get_next_cluster: EQU 0x00000929 -fza_next: EQU 0x00000838 -fza_inc_loop: EQU 0x00000830 -fza_done: EQU 0x0000084B -fza_stop: EQU 0x00000849 -fza_loop: EQU 0x0000081A -fza_sector_lo: EQU 0x00000856 -fza_sector_hi: EQU 0x00000858 -cluster_to_sector: EQU 0x0000085A -fza_cluster: EQU 0x00000807 -find_zifi_all: EQU 0x00000807 -fza_remaining: EQU 0x00000806 -fz_found: EQU 0x000007D1 -fz_cmpfail: EQU 0x000007C4 -fz_cmp: EQU 0x000007B8 -fz_skip: EQU 0x000007C6 -fz_end: EQU 0x000007CE -fz_loop: EQU 0x000007A9 -find_zifi: EQU 0x000007A4 -target_name: EQU 0x00000799 -zifi_size: EQU 0x00000797 -fbn_acc_nocs: EQU 0x00001B75 -zifi_size_hi: EQU 0x00000795 -zifi_cluster: EQU 0x00000793 -zifi_cluster_hi: EQU 0x00000791 -root_dir_hi: EQU 0x0000078F -root_dir_lo: EQU 0x0000078D -mul2_loop: EQU 0x0000070E -mul2_done: EQU 0x00000727 -prod2_hi: EQU 0x0000078B -prod2_lo: EQU 0x00000789 -rc2_hi: EQU 0x00000787 -rc2_lo: EQU 0x00000785 -data_start_hi: EQU 0x00000783 -data_start_lo: EQU 0x00000781 -mul1_loop: EQU 0x000006AF -mul1_done: EQU 0x000006C8 -prod_hi: EQU 0x0000077F -prod_lo: EQU 0x0000077D -root_cluster_lo: EQU 0x00000779 -root_cluster_hi: EQU 0x0000077B -fatsz32_lo: EQU 0x00000775 -fatsz32_hi: EQU 0x00000777 -sectors_per_cluster: EQU 0x00000774 -num_fats: EQU 0x00000773 -fsinfo_sector: EQU 0x00000A12 -reserved_sectors: EQU 0x00000771 -total_sectors_hi: EQU 0x0000076B -total_sectors_lo: EQU 0x00000769 -parse_bpb: EQU 0x00000635 -diag_buf: EQU 0x00000621 -vf_ok: EQU 0x0000061C -vf_bad: EQU 0x0000061E -verify_fat32: EQU 0x000005DC -dp_fallback: EQU 0x000005C0 -dp_found: EQU 0x00000591 -dp_entry: EQU 0x000005DA -dp_loop: EQU 0x00000577 -dp_none: EQU 0x0000058F -detect_partition: EQU 0x0000054C -sec0_copy: EQU 0x0000034C -add_addtop: EQU 0x0000033C -addtop_lo: EQU 0x0000033A -addtop_hi: EQU 0x00000338 -cmdx: EQU 0x00000305 -do_cmd55: EQU 0x000002DF -cmdo: EQU 0x000002FF -send_frame: EQU 0x000002E7 -cmd16: EQU 0x000002BF -cmd08: EQU 0x000002B9 -cmd00: EQU 0x000002B3 -sdwrite_lba_from: EQU 0x0000022E -sdwrite_lba: EQU 0x0000022B -sdwrite_multi_stop: EQU 0x00000216 -sdwrite_multi_block_from: EQU 0x000001F1 -sdwrite_multi_block: EQU 0x000001EE -csl: EQU 0x00000252 -wait: EQU 0x00000267 -sdwrite_multi_start: EQU 0x000001A9 -wtdo: EQU 0x0000027C -sdread_fail: EQU 0x000001A0 -resp: EQU 0x00000292 -sdread_common: EQU 0x00000187 -sdread_lba_oob: EQU 0x000001A6 -send_cmd_lba: EQU 0x000001C1 -cmdlba_op: EQU 0x000001C0 -sdread_lba_to: EQU 0x0000017C -sdread_lba: EQU 0x00000179 -dma_send_ext: EQU 0x00000159 -dma_wait: EQU 0x00000173 -dma_recv_ext: EQU 0x0000013D -dma_set_addr_ext: EQU 0x00000127 -sdbuf: EQU 0x000011C8 -set_dma_sdbuf: EQU 0x0000011B -dma_xfer_page: EQU 0x0000011A -dma_xfer_off: EQU 0x00000118 +btd_done: EQU 0x0000153F +btd_loop: EQU 0x00001536 +gus_have_candidate: EQU 0x00001515 +bin_to_2dig: EQU 0x00001534 +gus_try_1digit: EQU 0x000014FD +gus_try: EQU 0x000014D8 +gus_ok: EQU 0x00001532 +gus_needs_suffix: EQU 0x000014D3 +generate_unique_shortname: EQU 0x000014B4 +gus_suffix: EQU 0x000014B3 +fn83_ext_full: EQU 0x000014A5 +fn83_ext_bad: EQU 0x000014AC +fn83_ext_loop: EQU 0x00001487 +fn83_ext_go: EQU 0x00001470 +fn83_base_full: EQU 0x00001455 +fn83_base_bad: EQU 0x0000145C +fn83_ext: EQU 0x00001463 +fn83_base_loop: EQU 0x00001436 +fn83_have_baselen: EQU 0x0000142B +fn83_scan_next: EQU 0x000013E9 +fn83_scandone: EQU 0x000013ED +fn83_scan: EQU 0x000013DD +filter_name_to_83: EQU 0x000013D2 +fn83_charbuf: EQU 0x000013D1 +sn_base_len: EQU 0x000013CF +sn_dot_pos: EQU 0x000013CD +sn_name_len: EQU 0x000013CB +sn_needs_lfn: EQU 0x000013CA +sn_ext: EQU 0x000013C7 +sn_base: EQU 0x000013BF +cc_symyes: EQU 0x000013BA +cc_no: EQU 0x000013BD +cc_symloop: EQU 0x000013B0 +cc_sym: EQU 0x000013AC +cc_yes: EQU 0x000013BB +cc_dig: EQU 0x000013A4 +cc_up: EQU 0x0000139C +classify_char: EQU 0x00001392 +cc_symbols: EQU 0x00001381 +lfnck_loop: EQU 0x0000137B +lfn_checksum: EQU 0x00001378 +stamp_dir_entry_datetime: EQU 0x00001162 +rtc_to_fat_datetime: EQU 0x000010E6 +rtc_cached: EQU 0x000010E5 +fat_time: EQU 0x000010E3 +fat_date: EQU 0x000010E1 +bcd_to_bin: EQU 0x000010CC +rtc_field_to_bin: EQU 0x000010C0 +rtc_dm: EQU 0x000010BF +rtc_year: EQU 0x0000104E +rtc_month: EQU 0x0000104D +rtc_date: EQU 0x0000104C +rtc_hour: EQU 0x0000104B +rtc_min: EQU 0x0000104A +rtc_sec: EQU 0x00001049 +sv512_off: EQU 0x00001C24 +sv512_page: EQU 0x00001C23 +strm_write_have2: EQU 0x00001034 +stream_write_sector_from: EQU 0x00000FD0 +read_rtc_datetime: EQU 0x0000104F +strm_write_have: EQU 0x00000FBB +stream_write_sector: EQU 0x00000F4D +stream_read_sector_to: EQU 0x00000D32 +stream_data_save: EQU 0x00000D4D +strm_read_eoc: EQU 0x00000D2F +stream_read_sector: EQU 0x00000CFC +strm_adv_same: EQU 0x00000CF6 +strm_adv_cross: EQU 0x00000CCF +strm_adv_test_z: EQU 0x00000CC7 +strm_advance: EQU 0x00000CBA +strm_calc_sector: EQU 0x00000C92 +strm_open_nz: EQU 0x00000C7E +stream_open: EQU 0x00000C64 +strm_sector_lo: EQU 0x00000C62 +strm_sector_hi: EQU 0x00000C60 +stream_eoc: EQU 0x00000C5F +stream_sec_in_cluster: EQU 0x00000C5E +stream_cluster_lo: EQU 0x00000C5C +stream_cluster_hi: EQU 0x00000C5A +wde_next: EQU 0x00000C29 +wde_slot: EQU 0x00000C3A +wde_entloop: EQU 0x00000C09 +wde_fail: EQU 0x00000C57 +wde_sec_loop: EQU 0x00000BF4 +wde_cluster: EQU 0x00000BDF +write_dir_entry: EQU 0x00000BDF +wde_slotptr: EQU 0x00000BDD +wde_sector_lo: EQU 0x00000BDB +wde_sector_hi: EQU 0x00000BD9 +wde_remaining: EQU 0x00000BD8 +dir_entry_buf: EQU 0x00000BB8 +zfc_loop: EQU 0x00000BA6 +zfc_fail: EQU 0x00000BB5 +zero_fill_cluster: EQU 0x00000B80 +zfc_remaining: EQU 0x00000B7F +ffc_nowrap: EQU 0x00000B70 +ffc_nsv2: EQU 0x00000B4A +ffc_nsv: EQU 0x00000B44 +ffc_entnext: EQU 0x00000B54 +ffc_entloop: EQU 0x00000B0D +ffc_fail: EQU 0x00000B7C +ffc_from2: EQU 0x00000AC3 +ffc_scan: EQU 0x00000AD2 +ffc_use_hint: EQU 0x00000AA9 +find_free_cluster: EQU 0x00000A8E +next_search_valid: EQU 0x00000A89 +ffc_sectors_read: EQU 0x00000A87 +ffc_count: EQU 0x00000A86 +ffc_ptr: EQU 0x00000A84 +free_cluster_lo: EQU 0x00000A82 +free_cluster_hi: EQU 0x00000A80 +next_search_hi: EQU 0x00000A8A +next_search_lo: EQU 0x00000A8C +wfi_skip_count: EQU 0x00000A64 +write_fsinfo_hint: EQU 0x00000A29 +read_fsinfo_hint: EQU 0x000009CA +fsinfo_valid: EQU 0x000009C9 +fsinfo_hint_lo: EQU 0x000009C7 +fsinfo_hint_hi: EQU 0x000009C5 +wfe_loop: EQU 0x0000098E +wfe_fail: EQU 0x000009C0 +write_fat_entry: EQU 0x0000093F +wfe_sector_lo: EQU 0x0000093D +wfe_sector_hi: EQU 0x0000093B +wfe_remaining: EQU 0x0000093A +new_val_lo: EQU 0x00000938 +new_val_hi: EQU 0x00000936 +gnc_have_next: EQU 0x00000925 +gnc_end: EQU 0x0000091F +nxt_hi: EQU 0x000008D8 +nxt_lo: EQU 0x000008D6 +ctf_bad: EQU 0x000008D2 +ctf_shr: EQU 0x00000883 +cluster_to_fatpos: EQU 0x00000875 +gnc_inoff: EQU 0x00000874 +gnc_fatsec_lo: EQU 0x00000872 +gnc_fatsec_hi: EQU 0x00000870 +gnc_lo: EQU 0x0000086E +gnc_hi: EQU 0x0000086C +c2s_loop: EQU 0x00000832 +c2s_done: EQU 0x0000084B +cur_cluster_hi: EQU 0x00000868 +cur_cluster_lo: EQU 0x0000086A +c2s_prod_hi: EQU 0x00000805 +c2s_prod_lo: EQU 0x00000803 +c2s_hi: EQU 0x00000801 +c2s_lo: EQU 0x000007FF +chain_ended: EQU 0x000008D5 +get_next_cluster: EQU 0x000008DA +fza_next: EQU 0x000007E9 +fza_inc_loop: EQU 0x000007E1 +fza_done: EQU 0x000007FC +fza_stop: EQU 0x000007FA +fza_loop: EQU 0x000007CB +fza_sector_lo: EQU 0x00000807 +fza_sector_hi: EQU 0x00000809 +cluster_to_sector: EQU 0x0000080B +fza_cluster: EQU 0x000007B8 +find_zifi_all: EQU 0x000007B8 +fza_remaining: EQU 0x000007B7 +fz_found: EQU 0x00000782 +fz_cmpfail: EQU 0x00000775 +fz_cmp: EQU 0x00000769 +fz_skip: EQU 0x00000777 +fz_end: EQU 0x0000077F +fz_loop: EQU 0x0000075A +find_zifi: EQU 0x00000755 +target_name: EQU 0x0000074A +zifi_size: EQU 0x00000748 +fbn_acc_nocs: EQU 0x00001B25 +zifi_size_hi: EQU 0x00000746 +zifi_cluster: EQU 0x00000744 +zifi_cluster_hi: EQU 0x00000742 +root_dir_hi: EQU 0x00000740 +root_dir_lo: EQU 0x0000073E +mul2_loop: EQU 0x000006D2 +mul2_done: EQU 0x000006EB +prod2_hi: EQU 0x0000073C +prod2_lo: EQU 0x0000073A +rc2_hi: EQU 0x00000738 +rc2_lo: EQU 0x00000736 +data_start_hi: EQU 0x00000734 +data_start_lo: EQU 0x00000732 +mul1_loop: EQU 0x0000067B +mul1_done: EQU 0x00000694 +prod_hi: EQU 0x00000730 +prod_lo: EQU 0x0000072E +root_cluster_lo: EQU 0x0000072A +root_cluster_hi: EQU 0x0000072C +fatsz32_lo: EQU 0x00000726 +fatsz32_hi: EQU 0x00000728 +sectors_per_cluster: EQU 0x00000725 +num_fats: EQU 0x00000724 +fsinfo_sector: EQU 0x000009C3 +reserved_sectors: EQU 0x00000722 +total_sectors_hi: EQU 0x0000071C +total_sectors_lo: EQU 0x0000071A +parse_bpb: EQU 0x0000062F +vf_ok: EQU 0x0000062A +vf_bad: EQU 0x0000062C +verify_fat32: EQU 0x000005EA +dp_fallback: EQU 0x000005CE +dp_found: EQU 0x0000059F +dp_entry: EQU 0x000005E8 +dp_loop: EQU 0x00000585 +dp_none: EQU 0x0000059D +detect_partition: EQU 0x0000055A +sec0_copy: EQU 0x0000035A +add_addtop: EQU 0x0000034A +addtop_lo: EQU 0x00000348 +addtop_hi: EQU 0x00000346 +cmdx: EQU 0x00000313 +do_cmd55: EQU 0x000002ED +cmdo: EQU 0x0000030D +send_frame: EQU 0x000002F5 +cmd16: EQU 0x000002C5 +cmd08: EQU 0x000002BF +cmd00: EQU 0x000002B9 +sdwrite_lba_from: EQU 0x00000234 +sdwrite_lba: EQU 0x00000231 +sdwrite_multi_stop: EQU 0x0000021C +sdwrite_multi_block_from: EQU 0x000001F7 +sdwrite_multi_block: EQU 0x000001F4 +csl: EQU 0x00000258 +wait: EQU 0x0000026D +sdwrite_multi_start: EQU 0x000001AF +wtdo: EQU 0x00000282 +sdread_fail: EQU 0x000001A6 +resp: EQU 0x00000298 +sdread_common: EQU 0x0000018D +sdread_lba_oob: EQU 0x000001AC +send_cmd_lba: EQU 0x000001C7 +cmdlba_op: EQU 0x000001C6 +sdread_lba_to: EQU 0x00000182 +sdread_lba: EQU 0x0000017F +dma_send_ext: EQU 0x0000015F +dma_wait: EQU 0x00000179 +dma_recv_ext: EQU 0x00000143 +dma_set_addr_ext: EQU 0x0000012D +sdbuf: EQU 0x00001178 +set_dma_sdbuf: EQU 0x00000121 +dma_xfer_page: EQU 0x00000120 +dma_xfer_off: EQU 0x0000011E dma_ctr: EQU 0x000027AF dma_num: EQU 0x000028AF dma_len: EQU 0x000026AF @@ -411,26 +408,27 @@ dma_daddrx: EQU 0x00001FAF dma_daddrh: EQU 0x00001EAF dma_daddrl: EQU 0x00001DAF own_page: EQU 0x0000000F -cca_shift: EQU 0x000000EE -compute_card_arg: EQU 0x000000DC -card_arg: EQU 0x000000D8 -sd_lba_max_hi: EQU 0x0000076F -sd_lba_max_lo: EQU 0x0000076D -lba_guard_check: EQU 0x000000B9 -lba_arg: EQU 0x000000B5 -set_lba32: EQU 0x000000A4 -sd_block_addressed: EQU 0x000000D7 -sd_v2_ocr_rest: EQU 0x00000093 -sdinit_ok: EQU 0x00000099 -do_cmd16: EQU 0x000002D1 -do_cmd1: EQU 0x000002D7 +cca_shift: EQU 0x000000F4 +compute_card_arg: EQU 0x000000E2 +card_arg: EQU 0x000000DE +sd_lba_max_hi: EQU 0x00000720 +sd_lba_max_lo: EQU 0x0000071E +lba_guard_check: EQU 0x000000BF +lba_arg: EQU 0x000000BB +set_lba32: EQU 0x000000AA +sd_block_addressed: EQU 0x000000DD +sd_v2_ocr_rest: EQU 0x00000099 +do_cmd58: EQU 0x000002DD +sdinit_ok: EQU 0x0000009F +do_cmd16: EQU 0x000002D7 +do_cmd1: EQU 0x000002E5 sd_fbs: EQU 0x0000005D -do_acmd41: EQU 0x00000318 +do_acmd41: EQU 0x00000326 sd_v2: EQU 0x00000067 -do_cmd8: EQU 0x000002CB -do_cmd0: EQU 0x000002C5 -sdinit_fail: EQU 0x0000009E -cycl: EQU 0x000002A6 -csh: EQU 0x0000023F +do_cmd8: EQU 0x000002D1 +do_cmd0: EQU 0x000002CB +sdinit_fail: EQU 0x000000A4 +cycl: EQU 0x000002AC +csh: EQU 0x00000245 sdinit: EQU 0x00000000 -fbn_cluster_lo: EQU 0x00001AA7 +fbn_cluster_lo: EQU 0x00001A57 diff --git a/_sd/zc_sd_driver_body.asm b/_sd/zc_sd_driver_body.asm index 78f05c4..7d0fdc6 100644 --- a/_sd/zc_sd_driver_body.asm +++ b/_sd/zc_sd_driver_body.asm @@ -114,12 +114,17 @@ sd_v2 ld de,#01aa or a jr nz,sdinit_fail - ; ACMD41 just succeeded (card left the busy state) -- read - ; its OCR (4 more bytes, MSB-first) for the REAL CCS bit + ; ACMD41 just succeeded (card left the busy state). CMD58 is + ; mandatory here: without it the following four reads only sample + ; idle SPI bytes (#ff) and falsely turn every v2 card into SDHC. + ; Read its OCR (4 bytes, MSB-first) for the REAL CCS bit ; (bit 30 = bit 6 of the first byte) instead of assuming ; every card that speaks the v2 protocol is block-addressed. ; A genuine SDv2 card can still be an SDSC (<=2GB) card. See ; [[project-zifi-custom-sd-driver]]. + call do_cmd58 + or a + jr nz,sdinit_fail ld bc,DATA in a,(c) bit 6,a @@ -668,6 +673,9 @@ do_cmd8 ld hl,cmd08 jp send_frame do_cmd16 ld hl,cmd16 jp send_frame +do_cmd58 ld a,%01000000+58 + call cmdo + jp resp do_cmd1 ld a,%01000000+1 call cmdo jp resp @@ -910,7 +918,7 @@ vf_bad xor a ;--- parse_bpb: reads BPB fields out of sdbuf (offsets per the standard ;--- FAT32 BPB layout), computes DataStartSector and RootDirSector as -;--- true 32-bit values, and fills diag_buf for on-screen display. +;--- true 32-bit values. ;--- FATSz32 alone can be tens of thousands of sectors on a real card ;--- (30MB+ FAT tables are normal) -- ReservedSectorCount + NumFATs* ;--- FATSz32 overflowed 16 bits on the first try (32 + 2*59430 = @@ -918,8 +926,6 @@ vf_bad xor a ;--- that just happened to read back as all zeroes. All the sector- ;--- number math below uses ADC HL,DE across (hi,lo) 16-bit halves. --- -diag_buf ds 20 - parse_bpb ld hl,(sdbuf+32) ; TotalSectors32 low16 (u32 @ offset 32) ld (total_sectors_lo),hl ld hl,(sdbuf+34) ; TotalSectors32 high16 @@ -927,47 +933,25 @@ parse_bpb ld hl,(sdbuf+32) ; TotalSectors32 low16 (u32 @ offset 32) ld hl,(sdbuf+14) ; ReservedSectorCount (u16) ld (reserved_sectors),hl - ld a,h - ld (diag_buf+0),a - ld a,l - ld (diag_buf+1),a ld hl,(sdbuf+48) ; FSInfoSector (u16, sector # within volume) ld (fsinfo_sector),hl ld a,(sdbuf+16) ; NumFATs (u8) ld (num_fats),a - ld (diag_buf+2),a ld a,(sdbuf+13) ; SectorsPerCluster (u8) ld (sectors_per_cluster),a - ld (diag_buf+3),a ld hl,(sdbuf+38) ; FATSz32 high16 ld (fatsz32_hi),hl - ld a,h - ld (diag_buf+4),a - ld a,l - ld (diag_buf+5),a ld hl,(sdbuf+36) ; FATSz32 low16 ld (fatsz32_lo),hl - ld a,h - ld (diag_buf+6),a - ld a,l - ld (diag_buf+7),a ld hl,(sdbuf+46) ; RootCluster high16 ld (root_cluster_hi),hl - ld a,h - ld (diag_buf+8),a - ld a,l - ld (diag_buf+9),a ld hl,(sdbuf+44) ; RootCluster low16 ld (root_cluster_lo),hl - ld a,h - ld (diag_buf+10),a - ld a,l - ld (diag_buf+11),a ; NumFATs * FATSz32 (32-bit product via repeated 32-bit add -- ; NumFATs is always tiny, 1 or 2, so this is at most 2 iterations) @@ -998,10 +982,6 @@ mul1_done ld de,(prod_hi) adc hl,de ld (data_start_hi),hl - ld a,h - ld (diag_buf+12),a - ld a,l - ld (diag_buf+13),a ; RootCluster - 2 (32-bit) ld hl,(root_cluster_lo) @@ -1043,15 +1023,6 @@ mul2_done ld de,(prod2_hi) adc hl,de ld (root_dir_hi),hl - ld a,h - ld (diag_buf+14),a - ld a,l - ld (diag_buf+15),a - ld hl,(root_dir_lo) - ld a,h - ld (diag_buf+16),a - ld a,l - ld (diag_buf+17),a ; sd_lba_max = ADDTOP + TotalSectors32 -- one past the last ; valid absolute LBA on this card/partition. Computed here @@ -4382,8 +4353,6 @@ cmkf_open_stream dot_name db ". " ; 11 bytes dotdot_name db ".. " ; 11 bytes -mkdir_sec_hi dw 0 -mkdir_sec_lo dw 0 clear_dir_entry ld hl,dir_entry_buf diff --git a/_spg/ZIFI/zifi.spg b/_spg/ZIFI/zifi.spg index 5b05450..f65bca6 100644 Binary files a/_spg/ZIFI/zifi.spg and b/_spg/ZIFI/zifi.spg differ