Fix CMD58 OCR read during SD initialization

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