Load map for bloader - retrotruestory/M1DEV GitHub Wiki
Oh, and for more detail, here's the assembly listing of the key portion of the boot loader. Note that the addresses shown are before linking. In this listing, "get_rtc_reg" is a code segment address 0, but after linking is 0x0092. So, you'd need to add an 0x0092 offset to each of the code addresses to match what you are seeing on the front panel.
Bill
================================= Load map for bloader Code and Data sections joined Code range: 0x0000 - 0x2d00 Data range: 0x2e00 - 0x3b74 ================================= -------------------------- Code Symbols ------------------------------ Name Type Value Orig module ---------------------------------------------------------------------- _do_boot0 : TEXT : 0x002f : bcrt0.o _sys_to_user_space : TEXT : 0x005f : bcrt0.o _user_to_sys_space : TEXT : 0x0068 : bcrt0.o _set_pid : TEXT : 0x0071 : bcrt0.o _write_code_pte : TEXT : 0x0075 : bcrt0.o _write_data_pte : TEXT : 0x007b : bcrt0.o _paging_on : TEXT : 0x0081 : bcrt0.o _paging_off : TEXT : 0x0089 : bcrt0.o _get_rtc_reg : TEXT : 0x0092 : bloader.o _ide_wr : TEXT : 0x0119 : bloader.o _ide_rd : TEXT : 0x0181 : bloader.o _ide_busy : TEXT : 0x01f2 : bloader.o _ide_check_error : TEXT : 0x022a : bloader.o _ide_ready : TEXT : 0x0245 : bloader.o _drive_error : TEXT : 0x0274 : bloader.o _ide_drq : TEXT : 0x02c9 : bloader.o _ide_read_data : TEXT : 0x031a : bloader.o _ide_write_data : TEXT : 0x0383 : bloader.o _hex_byte : TEXT : 0x03f3 : bloader.o _hex_word : TEXT : 0x042a : bloader.o _hex_long : TEXT : 0x0448 : bloader.o _hex_dump : TEXT : 0x0469 : bloader.o _cf_read_512 : TEXT : 0x04ad : bloader.o _cf_write_512 : TEXT : 0x04ea : bloader.o _cf_sector_setup : TEXT : 0x0527 : bloader.o _cf_read_sector : TEXT : 0x056a : bloader.o _cf_write_sector : TEXT : 0x0587 : bloader.o _cf_identify : TEXT : 0x05a4 : bloader.o _ide_identify : TEXT : 0x05ba : bloader.o _ide_read_sector : TEXT : 0x0602 : bloader.o _ide_write_sector : TEXT : 0x068e : bloader.o _ide_reset : TEXT : 0x071a : bloader.o _cf_wait : TEXT : 0x0780 : bloader.o _cf_data_ready : TEXT : 0x07a3 : bloader.o _cf_cmd_ready : TEXT : 0x07d1 : bloader.o _cf_init : TEXT : 0x07ff : bloader.o _ide_init : TEXT : 0x086d : bloader.o _select_ide_drive : TEXT : 0x094d : bloader.o _init_rs232 : TEXT : 0x096b : bloader.o _init_uart : TEXT : 0x09d1 : bloader.o _ser_cin : TEXT : 0x0a69 : bloader.o _ser_pushback : TEXT : 0x0aad : bloader.o _ser_cout : TEXT : 0x0ab9 : bloader.o _ser_cin_wait : TEXT : 0x0b12 : bloader.o _ser_lin : TEXT : 0x0b2c : bloader.o _init_rtc : TEXT : 0x0ba5 : bloader.o _next_ch : TEXT : 0x0bca : bloader.o _get_hex_nibble : TEXT : 0x0bef : bloader.o _get_hex_byte : TEXT : 0x0c45 : bloader.o _get_hex_word : TEXT : 0x0c5d : bloader.o _write_user_data : TEXT : 0x0c75 : bloader.o _update_checksum_word : TEXT : 0x0cbe : bloader.o _update_checksum_byte : TEXT : 0x0ce5 : bloader.o _read_intel_hex : TEXT : 0x0d03 : bloader.o _get_input : TEXT : 0x0eaa : bloader.o _init_image_table : TEXT : 0x0ed7 : bloader.o _show_images : TEXT : 0x0f40 : bloader.o _create_boot_image_address_space : TEXT : 0x0ff5 : bloader.o _remap_supervisor_pt : TEXT : 0x1081 : bloader.o _calc_chs : TEXT : 0x10ee : bloader.o _read_sector : TEXT : 0x1156 : bloader.o _write_sector : TEXT : 0x11df : bloader.o _proc_to_disk : TEXT : 0x125c : bloader.o _write_image_table : TEXT : 0x133b : bloader.o _disk_to_proc : TEXT : 0x13c7 : bloader.o _read_image_table : TEXT : 0x14ab : bloader.o _read_image : TEXT : 0x1502 : bloader.o _get_process_slot : TEXT : 0x152e : bloader.o _delete_image : TEXT : 0x1594 : bloader.o _set_default_image : TEXT : 0x15f3 : bloader.o _get_default_image : TEXT : 0x165d : bloader.o _stage_boot_image : TEXT : 0x1686 : bloader.o _display_current_drive : TEXT : 0x172f : bloader.o _set_active_drive : TEXT : 0x1752 : bloader.o _boot_image : TEXT : 0x17cd : bloader.o _load_image : TEXT : 0x1894 : bloader.o _password : TEXT : 0x1957 : bloader.o _do_verbose : TEXT : 0x19a5 : bloader.o _usage : TEXT : 0x19ca : bloader.o _do_ide_identify : TEXT : 0x1a5b : bloader.o _init_ide_info : TEXT : 0x1bb8 : bloader.o _do_ide_drive : TEXT : 0x1bd7 : bloader.o _do_ide : TEXT : 0x1d67 : bloader.o _setup_address_space : TEXT : 0x1def : bloader.o _default_boot : TEXT : 0x1f1d : bloader.o _main : TEXT : 0x1f87 : bloader.o __prind : TEXT : 0x2210 : bloader.o __prinx : TEXT : 0x223d : bloader.o __prino : TEXT : 0x226b : bloader.o __doprnt : TEXT : 0x2298 : bloader.o _printf : TEXT : 0x23b3 : bloader.o _fprintf : TEXT : 0x23cf : bloader.o _strip : TEXT : 0x23ea : bloader.o _read_switches : TEXT : 0x2428 : bloader.o _memcpy : TEXT : 0x2432 : _memcpy.o _strcpy : TEXT : 0x243e : _strcpy.o _strlen : TEXT : 0x2446 : _strlen.o _atoi : TEXT : 0x24b0 : atoi.o _strstr : TEXT : 0x24ca : strstr.o _strtol : TEXT : 0x250e : strtol.o _strtoul : TEXT : 0x2532 : strtol.o _toupper : TEXT : 0x2776 : toupper.o _strncmp : TEXT : 0x2796 : strncmp.o $fast_rsh32 : TEXT : 0x280a : rsh32.o $vrsha16b : TEXT : 0x2842 : rsha16.o $vrsha16a : TEXT : 0x284a : rsha16.o $cmp32eq : TEXT : 0x2888 : _cmp32eq.o $cmp32leu : TEXT : 0x2898 : _cmp32leu.o $cmp32ltu : TEXT : 0x28a4 : _cmp32ltu.o $divi16 : TEXT : 0x28b0 : _divi16.o $divu16 : TEXT : 0x28c6 : _divu16.o $divu32 : TEXT : 0x28dc : _divu32.o $modi16 : TEXT : 0x28e8 : _modi16.o $modu16 : TEXT : 0x28fe : _modu16.o $muli16 : TEXT : 0x2914 : _muli16.o $mulu16 : TEXT : 0x2950 : _mulu16.o $mulu32 : TEXT : 0x296c : _mulu32.o _new_mul32u : TEXT : 0x2978 : _new_mulu32.o $usd16 : TEXT : 0x2a01 : _usd16.o $cmp32_leu : TEXT : 0x2a92 : cmp32_leu.o $cmp32_ltu : TEXT : 0x2ad4 : cmp32_ltu.o $div32u : TEXT : 0x2b16 : div32u.o $signed_divide : TEXT : 0x2b32 : sdiv.o _debug_end_of_signed_divde : TEXT : 0x2bb0 : sdiv.o $usd32 : TEXT : 0x2bb2 : _usd32.o $debug_end_of_usd32 : TEXT : 0x2d00 : _usd32.o etext : TEXT : 0x2d00 : crtn.o -------------------------- Data Symbols ------------------------------ Name Type Value Orig module ---------------------------------------------------------------------- _Version : DATA : 0x2e00 : bloader.o _verbose : DATA : 0x2e04 : bloader.o _pause_before_boot : DATA : 0x2e06 : bloader.o _time_mask : DATA : 0x2e08 : bloader.o _cf_base : DATA : 0x2e18 : bloader.o _active_drive : DATA : 0x2e1a : bloader.o _drive_names : DATA : 0x2e1c : bloader.o _ide_err_msgs : DATA : 0x2e24 : bloader.o _tohex : DATA : 0x2e34 : bloader.o __hexmap : DATA : 0x2e36 : bloader.o _errno : DATA : 0x3a6e : errno.o ___ctype : DATA : 0x3a70 : chartab.o __brksize : DATA : 0x3b72 : crtn.o edata : DATA : 0x3b74 : crtn.o -------------------------- BSS Symbols ------------------------------ Name Type Value Orig module ---------------------------------------------------------------------- _intel_load_error : BSS : 0x3b74 : bloader.o _ide_drives : BSS : 0x3b76 : bloader.o _r_uart1 : BSS : 0x3ca5 : bloader.o _r_uart0 : BSS : 0x3cba : bloader.o _num_commands : BSS : 0x3ccf : bloader.o _image_table : BSS : 0x3cd1 : bloader.o ebss : BSS : 0x3d86 : crtn.o
After add an 0x0092 offset to each of the code addresses:
Boot Loader Symbol Address Mapping Original → Linked Addresses with Binary Representation ==================================================================================================== TEXT SEGMENTS (adjusted by +0x0092) ---------------------------------------------------------------------------------------------------- Symbol Type Original Linked Binary Linked Module ---------------------------------------------------------------------------------------------------- _do_boot0 TEXT 0x002f 0xc1 0b11000001 bcrt0.o _sys_to_user_space TEXT 0x005f 0xf1 0b11110001 bcrt0.o _user_to_sys_space TEXT 0x0068 0xfa 0b11111010 bcrt0.o _set_pid TEXT 0x0071 0x103 0b100000011 bcrt0.o _write_code_pte TEXT 0x0075 0x107 0b100000111 bcrt0.o _write_data_pte TEXT 0x007b 0x10d 0b100001101 bcrt0.o _paging_on TEXT 0x0081 0x113 0b100010011 bcrt0.o _paging_off TEXT 0x0089 0x11b 0b100011011 bcrt0.o _get_rtc_reg TEXT 0x0092 0x124 0b100100100 bloader.o _ide_wr TEXT 0x0119 0x1ab 0b110101011 bloader.o _ide_rd TEXT 0x0181 0x213 0b1000010011 bloader.o _ide_busy TEXT 0x01f2 0x284 0b1010000100 bloader.o _ide_check_error TEXT 0x022a 0x2bc 0b1010111100 bloader.o _ide_ready TEXT 0x0245 0x2d7 0b1011010111 bloader.o _drive_error TEXT 0x0274 0x306 0b1100000110 bloader.o _ide_drq TEXT 0x02c9 0x35b 0b1101011011 bloader.o _ide_read_data TEXT 0x031a 0x3ac 0b1110101100 bloader.o _ide_write_data TEXT 0x0383 0x415 0b10000010101 bloader.o _hex_byte TEXT 0x03f3 0x485 0b10010000101 bloader.o _hex_word TEXT 0x042a 0x4bc 0b10010111100 bloader.o _hex_long TEXT 0x0448 0x4da 0b10011011010 bloader.o _hex_dump TEXT 0x0469 0x4fb 0b10011111011 bloader.o _cf_read_512 TEXT 0x04ad 0x53f 0b10100111111 bloader.o _cf_write_512 TEXT 0x04ea 0x57c 0b10101111100 bloader.o _cf_sector_setup TEXT 0x0527 0x5b9 0b10110111001 bloader.o _cf_read_sector TEXT 0x056a 0x5fc 0b10111111100 bloader.o _cf_write_sector TEXT 0x0587 0x619 0b11000011001 bloader.o _cf_identify TEXT 0x05a4 0x636 0b11000110110 bloader.o _ide_identify TEXT 0x05ba 0x64c 0b11001001100 bloader.o _ide_read_sector TEXT 0x0602 0x694 0b11010010100 bloader.o _ide_write_sector TEXT 0x068e 0x720 0b11100100000 bloader.o _ide_reset TEXT 0x071a 0x7ac 0b11110101100 bloader.o _cf_wait TEXT 0x0780 0x812 0b100000010010 bloader.o _cf_data_ready TEXT 0x07a3 0x835 0b100000110101 bloader.o _cf_cmd_ready TEXT 0x07d1 0x863 0b100001100011 bloader.o _cf_init TEXT 0x07ff 0x891 0b100010010001 bloader.o _ide_init TEXT 0x086d 0x8ff 0b100011111111 bloader.o _select_ide_drive TEXT 0x094d 0x9df 0b100111011111 bloader.o _init_rs232 TEXT 0x096b 0x9fd 0b100111111101 bloader.o _init_uart TEXT 0x09d1 0xa63 0b101001100011 bloader.o _ser_cin TEXT 0x0a69 0xafb 0b101011111011 bloader.o _ser_pushback TEXT 0x0aad 0xb3f 0b101100111111 bloader.o _ser_cout TEXT 0x0ab9 0xb4b 0b101101001011 bloader.o _ser_cin_wait TEXT 0x0b12 0xba4 0b101110100100 bloader.o _ser_lin TEXT 0x0b2c 0xbbe 0b101110111110 bloader.o _init_rtc TEXT 0x0ba5 0xc37 0b110000110111 bloader.o _next_ch TEXT 0x0bca 0xc5c 0b110001011100 bloader.o _get_hex_nibble TEXT 0x0bef 0xc81 0b110010000001 bloader.o _get_hex_byte TEXT 0x0c45 0xcd7 0b110011010111 bloader.o _get_hex_word TEXT 0x0c5d 0xcef 0b110011101111 bloader.o _write_user_data TEXT 0x0c75 0xd07 0b110100000111 bloader.o _update_checksum_word TEXT 0x0cbe 0xd50 0b110101010000 bloader.o _update_checksum_byte TEXT 0x0ce5 0xd77 0b110101110111 bloader.o _read_intel_hex TEXT 0x0d03 0xd95 0b110110010101 bloader.o _get_input TEXT 0x0eaa 0xf3c 0b111100111100 bloader.o _init_image_table TEXT 0x0ed7 0xf69 0b111101101001 bloader.o _show_images TEXT 0x0f40 0xfd2 0b111111010010 bloader.o _create_boot_image_address_space TEXT 0x0ff5 0x1087 0b1000010000111 bloader.o _remap_supervisor_pt TEXT 0x1081 0x1113 0b1000100010011 bloader.o _calc_chs TEXT 0x10ee 0x1180 0b1000110000000 bloader.o _read_sector TEXT 0x1156 0x11e8 0b1000111101000 bloader.o _write_sector TEXT 0x11df 0x1271 0b1001001110001 bloader.o _proc_to_disk TEXT 0x125c 0x12ee 0b1001011101110 bloader.o _write_image_table TEXT 0x133b 0x13cd 0b1001111001101 bloader.o _disk_to_proc TEXT 0x13c7 0x1459 0b1010001011001 bloader.o _read_image_table TEXT 0x14ab 0x153d 0b1010100111101 bloader.o _read_image TEXT 0x1502 0x1594 0b1010110010100 bloader.o _get_process_slot TEXT 0x152e 0x15c0 0b1010111000000 bloader.o _delete_image TEXT 0x1594 0x1626 0b1011000100110 bloader.o _set_default_image TEXT 0x15f3 0x1685 0b1011010000101 bloader.o _get_default_image TEXT 0x165d 0x16ef 0b1011011101111 bloader.o _stage_boot_image TEXT 0x1686 0x1718 0b1011100011000 bloader.o _display_current_drive TEXT 0x172f 0x17c1 0b1011111000001 bloader.o _set_active_drive TEXT 0x1752 0x17e4 0b1011111100100 bloader.o _boot_image TEXT 0x17cd 0x185f 0b1100001011111 bloader.o _load_image TEXT 0x1894 0x1926 0b1100100100110 bloader.o _password TEXT 0x1957 0x19e9 0b1100111101001 bloader.o _do_verbose TEXT 0x19a5 0x1a37 0b1101000110111 bloader.o _usage TEXT 0x19ca 0x1a5c 0b1101001011100 bloader.o _do_ide_identify TEXT 0x1a5b 0x1aed 0b1101011101101 bloader.o _init_ide_info TEXT 0x1bb8 0x1c4a 0b1110001001010 bloader.o _do_ide_drive TEXT 0x1bd7 0x1c69 0b1110001101001 bloader.o _do_ide TEXT 0x1d67 0x1df9 0b1110111111001 bloader.o _setup_address_space TEXT 0x1def 0x1e81 0b1111010000001 bloader.o _default_boot TEXT 0x1f1d 0x1faf 0b1111110101111 bloader.o _main TEXT 0x1f87 0x2019 0b10000000011001 bloader.o __prind TEXT 0x2210 0x22a2 0b10001010100010 bloader.o __prinx TEXT 0x223d 0x22cf 0b10001011001111 bloader.o __prino TEXT 0x226b 0x22fd 0b10001011111101 bloader.o __doprnt TEXT 0x2298 0x232a 0b10001100101010 bloader.o _printf TEXT 0x23b3 0x2445 0b10010001000101 bloader.o _fprintf TEXT 0x23cf 0x2461 0b10010001100001 bloader.o _strip TEXT 0x23ea 0x247c 0b10010001111100 bloader.o _read_switches TEXT 0x2428 0x24ba 0b10010010111010 bloader.o _memcpy TEXT 0x2432 0x24c4 0b10010011000100 _memcpy.o _strcpy TEXT 0x243e 0x24d0 0b10010011010000 _strcpy.o _strlen TEXT 0x2446 0x24d8 0b10010011011000 _strlen.o _atoi TEXT 0x24b0 0x2542 0b10010101000010 atoi.o _strstr TEXT 0x24ca 0x255c 0b10010101011100 strstr.o _strtol TEXT 0x250e 0x25a0 0b10010110100000 strtol.o _strtoul TEXT 0x2532 0x25c4 0b10010111000100 strtol.o _toupper TEXT 0x2776 0x2808 0b10100000001000 toupper.o _strncmp TEXT 0x2796 0x2828 0b10100000101000 strncmp.o fast_rsh32 TEXT 0x280a 0x289c 0b10100010011100 rsh32.o vrsha16b TEXT 0x2842 0x28d4 0b10100011010100 rsha16.o vrsha16a TEXT 0x284a 0x28dc 0b10100011011100 rsha16.o cmp32eq TEXT 0x2888 0x291a 0b10100100011010 _cmp32eq.o cmp32leu TEXT 0x2898 0x292a 0b10100100101010 _cmp32leu.o cmp32ltu TEXT 0x28a4 0x2936 0b10100100110110 _cmp32ltu.o divi16 TEXT 0x28b0 0x2942 0b10100101000010 _divi16.o divu16 TEXT 0x28c6 0x2958 0b10100101011000 _divu16.o divu32 TEXT 0x28dc 0x296e 0b10100101101110 _divu32.o modi16 TEXT 0x28e8 0x297a 0b10100101111010 _modi16.o modu16 TEXT 0x28fe 0x2990 0b10100110010000 _modu16.o muli16 TEXT 0x2914 0x29a6 0b10100110100110 _muli16.o mulu16 TEXT 0x2950 0x29e2 0b10100111100010 _mulu16.o mulu32 TEXT 0x296c 0x29fe 0b10100111111110 _mulu32.o _new_mul32u TEXT 0x2978 0x2a0a 0b10101000001010 _new_mulu32.o usd16 TEXT 0x2a01 0x2a93 0b10101010010011 _usd16.o cmp32_leu TEXT 0x2a92 0x2b24 0b10101100100100 cmp32_leu.o cmp32_ltu TEXT 0x2ad4 0x2b66 0b10101101100110 cmp32_ltu.o div32u TEXT 0x2b16 0x2ba8 0b10101110101000 div32u.o signed_divide TEXT 0x2b32 0x2bc4 0b10101111000100 sdiv.o _debug_end_of_signed_divde TEXT 0x2bb0 0x2c42 0b10110001000010 sdiv.o usd32 TEXT 0x2bb2 0x2c44 0b10110001000100 _usd32.o debug_end_of_usd32 TEXT 0x2d00 0x2d92 0b10110110010010 _usd32.o etext TEXT 0x2d00 0x2d92 0b10110110010010 crtn.o DATA SEGMENTS (original addresses) ---------------------------------------------------------------------------------------------------- Symbol Type Address Module ---------------------------------------------------------------------------------------------------- _Version DATA 0x2e00 bloader.o _verbose DATA 0x2e04 bloader.o _pause_before_boot DATA 0x2e06 bloader.o _time_mask DATA 0x2e08 bloader.o _cf_base DATA 0x2e18 bloader.o _active_drive DATA 0x2e1a bloader.o _drive_names DATA 0x2e1c bloader.o _ide_err_msgs DATA 0x2e24 bloader.o _tohex DATA 0x2e34 bloader.o __hexmap DATA 0x2e36 bloader.o _errno DATA 0x3a6e errno.o ___ctype DATA 0x3a70 chartab.o __brksize DATA 0x3b72 crtn.o edata DATA 0x3b74 crtn.o BSS SEGMENTS (original addresses) ---------------------------------------------------------------------------------------------------- Symbol Type Address Module ---------------------------------------------------------------------------------------------------- _intel_load_error BSS 0x3b74 bloader.o _ide_drives BSS 0x3b76 bloader.o _r_uart1 BSS 0x3ca5 bloader.o _r_uart0 BSS 0x3cba bloader.o _num_commands BSS 0x3ccf bloader.o _image_table BSS 0x3cd1 bloader.o ebss BSS 0x3d86 crtn.o