diff --git a/conv.c b/conv.c new file mode 100644 index 0000000..caeccc2 --- /dev/null +++ b/conv.c @@ -0,0 +1,22 @@ +#include +#include +#include + +int main(int argc, char *argv[]) +{ + int i, l; + unsigned char v[4] = { 0, 0, 0, 0 }; + + printf("-- Machine generated from ram.img.\n"); + printf("library ieee;\n use ieee.std_logic_1164.all;\nuse ieee.numeric_std.all;\n\n"); + printf("package bootrom is\n"); + printf(" type rom_t is array (0 to 2047) of std_logic_vector(31 downto 0);\n constant rom : rom_t := (\n"); + + l = read(0,v,4); + for (i=0 ; l; i++) { + printf (" x\"%.2x%.2x%.2x%.2x\",\n", v[0], v[1], v[2], v[3]); + l = read(0,v,4); + } + printf(" others => x\"00000000\" );\n\n"); + printf("end package;\n\npackage body bootrom is\nend package body;\n"); +} diff --git a/cpu_lattice.vhd b/cpu_lattice.vhd new file mode 100644 index 0000000..09cdfc7 --- /dev/null +++ b/cpu_lattice.vhd @@ -0,0 +1,150 @@ +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; +use std.textio.all; + +use work.cpu2j0_pack.all; +use work.data_bus_pkg.all; +entity cpu_lattice is port ( + clk : in std_logic; + led : out std_logic_vector(7 downto 0)); +end; + +architecture behaviour of cpu_lattice is + type instrd_bus_i_t is array(instr_bus_device_t'left to instr_bus_device_t'right) of cpu_data_i_t; + type instrd_bus_o_t is array(instr_bus_device_t'left to instr_bus_device_t'right) of cpu_data_o_t; + + signal instr_master_o : cpu_instruction_o_t; + signal instr_master_i : cpu_instruction_i_t := (( others => 'Z' ),'0'); + signal instr_slaves_i : instr_bus_i_t; + signal instr_slaves_o : instr_bus_o_t; + signal instrd_slaves_i : instrd_bus_i_t; + signal instrd_slaves_o : instrd_bus_o_t; + + signal data_master_o : cpu_data_o_t; + signal data_master_i : cpu_data_i_t := (( others => 'Z' ),'0'); + signal data_slaves_i : data_bus_i_t; + signal data_slaves_o : data_bus_o_t; + + signal sram_d_o : cpu_data_o_t; + + signal debug_i : cpu_debug_i_t := CPU_DEBUG_NOP; + signal debug_i_cmd : std_logic_vector(1 downto 0) := "00"; + signal debug_o : cpu_debug_o_t; + + signal slp_o : std_logic; + + signal event_i : cpu_event_i_t := NULL_CPU_EVENT_I; + signal event_o : cpu_event_o_t; + +-- signal clk : std_logic := '1'; + signal rst : std_logic := '1'; + + signal dummy : bit; + + signal pio_data_o : cpu_data_o_t := NULL_DATA_O; + signal pio_data_i : cpu_data_i_t := (ack => '0', d => (others => '0')); + signal data_select : data_bus_device_t; + signal db_we : std_logic_vector(3 downto 0); +begin + rst <= '1', '0' after 10 ns; + +-- clk_gen : process +-- begin +-- clk <= '0'; +-- wait for 10 ns; +-- clk <= '1'; +-- wait for 10 ns; +-- end process; + + process (data_master_o) + variable dev : data_bus_device_t; + begin + if data_master_o.en = '0' then + dev := DEV_NONE; + else + dev := decode_data_address(data_master_o.a); + -- Make SRAM the default. Would prefer not to do this, but not + -- sure how many things depend on defaulting to SRAM. For example, + -- my build of sdboot has a 4 byte stack at 0x300000 and loading + -- it in gdb prints errors. + if dev = DEV_NONE then + dev := DEV_SRAM; + end if; + end if; + data_select <= dev; + end process; + + data_buses(master_i => data_master_i, master_o => data_master_o, + selected => data_select, + slaves_i => data_slaves_i, slaves_o => data_slaves_o); + + data_slaves_i(DEV_NONE) <= loopback_bus(data_slaves_o(DEV_NONE)); + data_slaves_i(DEV_SPI) <= loopback_bus(data_slaves_o(DEV_SPI)); + data_slaves_i(DEV_UART0) <= loopback_bus(data_slaves_o(DEV_UART0)); + + data_slaves_i(DEV_DDR) <= loopback_bus(data_slaves_o(DEV_DDR)); + + pio_data_i.d <= (others => '0'); + pio_data_i.ack <= pio_data_o.en; + + instruction_buses(master_i => instr_master_i, master_o => instr_master_o, + selected => decode_instr_address(instr_master_o.a), + slaves_i => instr_slaves_i, slaves_o => instr_slaves_o); + pio_data_o <= data_slaves_o(DEV_PIO); + data_slaves_i(DEV_PIO) <= pio_data_i; + + + with debug_i_cmd select + debug_i.cmd <= + BRK when "00", + STEP when "01", + INSERT when "10", + CONTINUE when others; + + splice_instr_data_bus(instr_slaves_o(DEV_DDR), instr_slaves_i(DEV_DDR), + instrd_slaves_o(DEV_DDR), instrd_slaves_i(DEV_DDR)); + + cpu1: cpu + port map(clk => clk, rst => rst, + db_o => data_master_o, db_i => data_master_i, + inst_o => instr_master_o, inst_i => instr_master_i, + debug_o => debug_o, debug_i => debug_i, + event_i => event_i, event_o => event_o); + + sram : entity work.cpu_sram + port map(clk => clk, + ibus_i => instr_slaves_o(DEV_SRAM), + ibus_o => instr_slaves_i(DEV_SRAM), + db_i => data_slaves_o(DEV_SRAM), + db_o => data_slaves_i(DEV_SRAM)); + + -- intercept and print PIO and UART writes + l0: process(clk) + variable uart_line : line; + variable l : line; + variable c : character; + begin + if clk'event and clk = '1' then + if pio_data_o.wr = '1' and pio_data_o.a = x"ABCD0000" then +-- write(l, string'("LED: Write ")); +-- write(l, " at " & time'image(now)); +-- writeline(output, l); + led <= pio_data_o.d(7 downto 0); + end if; + if data_slaves_o(DEV_UART0).wr = '1' and data_slaves_o(DEV_UART0).a = x"ABCD0104" then +-- c := character'val(to_integer(unsigned(data_slaves_o(DEV_UART0).d(7 downto 0)))); +-- if character'pos(c) = 10 then -- newline +-- writeline(output, uart_line); +-- else +-- write(uart_line, c); +-- if c = ';' then + -- hack to better display the gdb remote protocol messages +-- writeline(output, uart_line); +-- end if; +-- end if; + end if; + end if; + end process; + +end; diff --git a/lattice_ebr.vhd b/lattice_ebr.vhd new file mode 100644 index 0000000..0e017c0 --- /dev/null +++ b/lattice_ebr.vhd @@ -0,0 +1,51 @@ +-- A simple pre-initalized RAM, which reads from a binary file at synthesis time +-- single 32 bit read/write port. +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; +use work.bootrom.all; + +entity simple_ram is + generic ( + -- 32-bit read/write port. ADDR_WIDTH is in bytes, not words. + ADDR_WIDTH : integer := 15 -- default 32k + ); + port ( + clk : in std_logic; + + en : in std_logic; + raddr : in std_logic_vector(ADDR_WIDTH - 3 downto 0); + do : out std_logic_vector(31 downto 0); + + we : in std_logic_vector(3 downto 0); + waddr : in std_logic_vector(ADDR_WIDTH - 3 downto 0); + di : in std_logic_vector(31 downto 0) + ); +end simple_ram; + +architecture behavioral of simple_ram is + constant NUM_WORDS : integer := 2**(ADDR_WIDTH - 2); + signal ram : rom_t := work.bootrom.rom; +begin + + process (clk) + variable read : std_logic_vector(31 downto 0); + begin + if clk'event and clk = '1' and en = '1' then + if we(3) = '1' then + ram(to_integer(unsigned(waddr)))(31 downto 24) <= di(31 downto 24); + end if; + if we(2) = '1' then + ram(to_integer(unsigned(waddr)))(23 downto 16) <= di(23 downto 16); + end if; + if we(1) = '1' then + ram(to_integer(unsigned(waddr)))(15 downto 8 ) <= di(15 downto 8 ); + end if; + if we(0) = '1' then + ram(to_integer(unsigned(waddr)))(7 downto 0 ) <= di(7 downto 0 ); + end if; + read := ram(to_integer(unsigned(raddr))); + do <= read; + end if; + end process; +end behavioral; diff --git a/lattice_tb.vhd b/lattice_tb.vhd new file mode 100644 index 0000000..385d9b5 --- /dev/null +++ b/lattice_tb.vhd @@ -0,0 +1,51 @@ +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; +use std.textio.all; + +entity lattice_tb is +end lattice_tb; + +architecture beh of lattice_tb is + + function to_hex_string(s: in std_logic_vector) return string is + constant hex : string (1 to 16) := "0123456789ABCDEF"; + variable ss : std_logic_vector(31 downto 0) := (others => '0'); + variable ret : string (1 to ss'left/4+1); + begin + ss(s'range) := s; + for i in 0 to ss'left/4 loop + ret(i+1) := hex(to_integer(unsigned(ss(ss'left - i*4 downto ss'left - i*4 -3)))+1); + end loop; + return ret; + end to_hex_string; + + signal clk : std_logic; + signal led : std_logic_vector(7 downto 0) := x"00"; + signal ol : std_logic_vector(7 downto 0) := x"00"; +begin + + c0: process + begin + clk <= '0'; + wait for 10 ns; + clk <= '1'; + wait for 10 ns; + end process; + + fp: entity work.cpu_lattice + port map(clk => clk, led => led); + + p0: process(led) + variable l : line; + begin + if led /= ol then + ol <= led; + write(l, string'("LED: Write ")); + write(l, to_hex_string(led)); + write(l, " at " & time'image(now)); + writeline(output, l); + end if; + end process; + +end beh; diff --git a/nvc_lattice.sh b/nvc_lattice.sh new file mode 100644 index 0000000..1c1b91e --- /dev/null +++ b/nvc_lattice.sh @@ -0,0 +1,9 @@ +#!/bin/sh + +nvc -a cpu2j0_pkg.vhd components_pkg.vhd mult_pkg.vhd decode_pkg.vhd decode_body.vhd datapath_pkg.vhd cpu.vhd decode.vhd decode_core.vhd decode_table.vhd decode_table_reverse.vhd datapath.vhd register_file.vhd mult.vhd + +nvc -a data_bus_pkg.vhd monitor_pkg.vhd ram_init.vhd lattice_ebr.vhd bus_monitor.vhd timeout_cnt.vhd cpu_simple_sram.vhd cpu_lattice.vhd + +nvc -a lattice_tb.vhd + +nvc -e -V lattice_tb diff --git a/ram.img b/ram.img index 32ade89..cd9d707 100755 Binary files a/ram.img and b/ram.img differ diff --git a/ram.sh b/ram.sh index 36dc761..bb4e69e 100644 --- a/ram.sh +++ b/ram.sh @@ -4,3 +4,8 @@ rm ram.img make -C testrom sh2-elf-size testrom/main.elf ram.img sh2-elf-objcopy -v -S -O binary --srec-forceS3 testrom/main.elf ram.img + +echo making image for Lattice + +gcc conv.c -o conv +./conv < ram.img > ram_init.vhd diff --git a/ram_init.vhd b/ram_init.vhd new file mode 100644 index 0000000..1a11391 --- /dev/null +++ b/ram_init.vhd @@ -0,0 +1,1184 @@ +-- Machine generated from ram.img. +library ieee; + use ieee.std_logic_1164.all; +use ieee.numeric_std.all; + +package bootrom is + type rom_t is array (0 to 2047) of std_logic_vector(31 downto 0); + constant rom : rom_t := ( + x"0000010c", + x"000022f8", + x"0000010c", + x"000022f8", + x"00000d1a", + x"00000cfa", + x"00000d1a", + x"00000cfa", + x"00000cfa", + x"00000d2a", + x"00000d2a", + x"00000d0a", + x"00000cfa", + x"00000cfa", + x"00000cfa", + x"00000cfa", + x"00000cfa", + x"00000cfa", + x"00000cfa", + x"00000cfa", + x"00000cfa", + x"00000cfa", + x"00000cfa", + x"00000cfa", + x"00000cfa", + x"00000cfa", + x"00000cfa", + x"00000cfa", + x"00000cfa", + x"00000cfa", + x"00000cfa", + x"00000cfa", + x"00000cbc", + x"00000cd2", + x"00000cee", + x"00000cfa", + x"00000cfa", + x"00000cfa", + x"00000cfa", + x"00000cfa", + x"00000cfa", + x"00000cfa", + x"00000cfa", + x"00000cfa", + x"00000cfa", + x"00000cfa", + x"00000cfa", + x"00000cfa", + x"00000cfa", + x"00000cfa", + x"00000cfa", + x"00000cfa", + x"00000cfa", + x"00000cfa", + x"00000cfa", + x"00000cfa", + x"00000cfa", + x"00000cfa", + x"00000cfa", + x"00000cfa", + x"00000cfa", + x"00000cfa", + x"00000cfa", + x"00000cfa", + x"d019d116", + x"2102000b", + x"00090009", + x"0009d014", + x"d1122102", + x"d010400b", + x"0009d110", + x"d0112102", + x"0009e000", + x"e101e202", + x"e303e404", + x"e505e606", + x"e707e808", + x"e909ea0a", + x"eb0bec0c", + x"ed0dee00", + x"4e2e4e1e", + x"4e0ed002", + x"400b0009", + x"c3200009", + x"0000019c", + x"00000528", + x"00000100", + x"abcd0000", + x"000000ff", + x"0000004f", + x"00000011", + x"d1042f86", + x"684c4f22", + x"410b6483", + x"60834f26", + x"000b68f6", + x"000010e4", + x"d0034f22", + x"400b0009", + x"4f26000b", + x"00090009", + x"000010fc", + x"000b0009", + x"d101412b", + x"00090009", + x"00001068", + x"614c6213", + x"729f622c", + x"e3053236", + x"8d036213", + x"6043a00f", + x"70a972d0", + x"622ce709", + x"32768902", + x"6043a007", + x"70d071bf", + x"611c3136", + x"8d02e000", + x"604370c9", + x"000b0009", + x"2f86e100", + x"2f966843", + x"2fa66953", + x"2fb66a63", + x"db0b4f22", + x"25126083", + x"640034a0", + x"8d087801", + x"4b0b0009", + x"61924108", + x"4108310c", + x"aff32912", + x"60834f26", + x"6bf66af6", + x"69f6000b", + x"68f60009", + x"000001a8", + x"2f86e000", + x"2f96e903", + x"2fa62fb6", + x"2fc6ecfc", + x"2fd62fe6", + x"d7257ff8", + x"6af36bf3", + x"2f027af8", + x"7be84615", + x"8f373697", + x"8f096063", + x"6043c803", + x"8f09c801", + x"614676fc", + x"e204a010", + x"1f118801", + x"8d086043", + x"c8018f05", + x"e2026145", + x"76fe6013", + x"a00581be", + x"614476ff", + x"601380ac", + x"e201322c", + x"6353352c", + x"61533138", + x"71fe68f3", + x"41017804", + x"71016d84", + x"e00f6ed3", + x"4ecc20e9", + x"0e7c60d3", + x"23e0c90f", + x"007c4110", + x"80318ff2", + x"730260f2", + x"302cafc6", + x"2f0260f2", + x"7f086ef6", + x"6df66cf6", + x"6bf66af6", + x"69f6000b", + x"68f60009", + x"0000119c", + x"2f86e800", + x"2f966953", + x"2fa66a53", + x"2fb63a4c", + x"db094f22", + x"39a08d07", + x"61936294", + x"382c688c", + x"4b0b6410", + x"aff739a0", + x"60834f26", + x"6bf66af6", + x"69f6000b", + x"68f60009", + x"0000016c", + x"2f862f96", + x"2fa66a43", + x"2fb62fc6", + x"2fd62fe6", + x"6e534f22", + x"db167ffc", + x"dc162f62", + x"4b0be424", + x"2aa8d913", + x"8d0365e3", + x"4b0b64a3", + x"65e34c0b", + x"64f26803", + x"38ac688c", + x"490be423", + x"dd0e6083", + x"40094009", + x"490b04dc", + x"6083c90f", + x"490b04dc", + x"d00a400b", + x"0009882b", + x"8be07f04", + x"4f266ef6", + x"6df66cf6", + x"6bf66af6", + x"69f6000b", + x"68f60009", + x"0000016c", + x"000002d4", + x"0000119c", + x"00000184", + x"2f862f96", + x"2fa62fb6", + x"6b632fc6", + x"6c532fd6", + x"6d632fe6", + x"6e434f22", + x"7fe861f3", + x"71081f12", + x"61f371f8", + x"d9341f53", + x"1f114d15", + x"8f5665b3", + x"e0033d07", + x"8f1e60d3", + x"60c3c803", + x"8f1ec801", + x"66f36ae3", + x"76147e08", + x"3ea08d0f", + x"57f564a0", + x"490b2f62", + x"680384a1", + x"4808490b", + x"640366f2", + x"4808380c", + x"26807a02", + x"afee7601", + x"7dfc2c72", + x"afdb7c04", + x"88018d1d", + x"60c3c801", + x"8f1a66f3", + x"6ae37614", + x"7e043ea0", + x"8d0f51f1", + x"64a0490b", + x"2f626803", + x"84a14808", + x"490b6403", + x"66f24808", + x"380c2680", + x"7a02afee", + x"76017dfe", + x"851e2c01", + x"afbb7c02", + x"490b64e0", + x"680362e3", + x"84e17202", + x"1f246403", + x"490b4808", + x"480851f2", + x"380c608e", + x"2c007dff", + x"801c7c01", + x"afa75ef4", + x"d207420b", + x"54f360c3", + x"7f184f26", + x"6ef66df6", + x"6cf66bf6", + x"6af669f6", + x"000b68f6", + x"000001a8", + x"00001024", + x"2f862f96", + x"2fa66a53", + x"2fb62fc6", + x"6c432fd6", + x"e4242fe6", + x"3cacd91c", + x"4f22db1c", + x"490b7ff8", + x"d51b4b0b", + x"e401d11b", + x"6ef3680c", + x"7e043ac0", + x"dd188d13", + x"65e367a4", + x"62734209", + x"42096023", + x"c90f021c", + x"6073c90f", + x"001ce402", + x"2e2080e1", + x"4b0b2f12", + x"380c688c", + x"afe961f2", + x"490be423", + x"60834009", + x"4009490b", + x"04dc6083", + x"c90f490b", + x"04dc7f08", + x"4f266ef6", + x"6df66cf6", + x"6bf66af6", + x"69f6000b", + x"68f60009", + x"0000016c", + x"000002d4", + x"00001148", + x"0000119c", + x"2f862f96", + x"2fa62fb6", + x"2fc62fd6", + x"2fe64f22", + x"d1b47f88", + x"7f8c410b", + x"1f4250f2", + x"68f3781c", + x"40094009", + x"c90f1f03", + x"dbafd1b0", + x"daaf410b", + x"00098824", + x"8ff969f3", + x"7924ed00", + x"6e93e700", + x"4a0b2f72", + x"630e2930", + x"61036033", + x"88237901", + x"8d0367f2", + x"3d1c6ddc", + x"60332970", + x"88238fef", + x"ec004a0b", + x"00094b0b", + x"640e4008", + x"40084a0b", + x"690c4b0b", + x"640e309c", + x"600c30d0", + x"d99cdd9a", + x"8903490b", + x"e42dafd0", + x"0009490b", + x"e42b8488", + x"88508f02", + x"e350a147", + x"6ae33037", + x"8d30886b", + x"88468b01", + x"a08d8489", + x"e3463037", + x"8d0e8848", + x"883fd190", + x"8f028844", + x"a06fe602", + x"8b4ce602", + x"d58d410b", + x"e400d18d", + x"a0d10009", + x"8d16e348", + x"30338f59", + x"884d8f3f", + x"65f3d989", + x"64e31fc6", + x"e62c1fc7", + x"7518490b", + x"74016583", + x"6403490b", + x"e63a6403", + x"d08356f7", + x"400b55f6", + x"a1b0e602", + x"8f02e36b", + x"a0aee602", + x"30378d1d", + x"88638d4f", + x"8867dd7d", + x"8f028858", + x"a0740009", + x"8f1c65f3", + x"d97764e3", + x"e62c7514", + x"74011fc5", + x"490b1fc6", + x"65f36403", + x"e63a490b", + x"751854f5", + x"610355f6", + x"6243e603", + x"a1456353", + x"88718d22", + x"88738f02", + x"886da118", + x"64e38901", + x"a185e600", + x"db6864e3", + x"65f3e62c", + x"75147401", + x"1fc54b0b", + x"1fc665f3", + x"6403e623", + x"4b0b7518", + x"51f5eb00", + x"52f61f11", + x"dd62de63", + x"a0a51f24", + x"69e3ea00", + x"db5ea064", + x"790161e3", + x"d35fa0e7", + x"7101d25f", + x"50f36583", + x"e453032c", + x"50f22830", + x"c90f002c", + x"a15e8081", + x"d05364e3", + x"7401e623", + x"400b6583", + x"d157a0e9", + x"54f7882d", + x"8d0ce0ff", + x"d04d64e3", + x"e6236583", + x"400b7401", + x"d147e602", + x"d547410b", + x"e40050f7", + x"a1480009", + x"490be423", + x"de4b60b3", + x"40094009", + x"490b04ec", + x"60b3c90f", + x"490b04ec", + x"4a0b0009", + x"882b8936", + x"490be424", + x"eb00e400", + x"65f36e43", + x"4d0b7518", + x"20087e01", + x"8de46603", + x"d03b64f3", + x"6583400b", + x"74186403", + x"d039400b", + x"65833b0c", + x"6bbcafeb", + x"64e36583", + x"4b0b64a3", + x"20088d0f", + x"6603d030", + x"6493400b", + x"6583d035", + x"6da37d01", + x"64a355f7", + x"400b7908", + x"6ad36090", + x"88238bea", + x"a0fee602", + x"d123d524", + x"410be400", + x"d12d410b", + x"0009aed9", + x"00093616", + x"8b00e604", + x"54f54d0b", + x"65836c03", + x"65834e0b", + x"640362c3", + x"3b0c51f5", + x"4200e000", + x"30ce4021", + x"310c1f15", + x"51f63017", + x"8f016bbc", + x"60133108", + x"1f1656f6", + x"26688fe2", + x"e104490b", + x"e423dc18", + x"60b34009", + x"4009490b", + x"04cc60b3", + x"c90f490b", + x"04cc4a0b", + x"0009882b", + x"89cf57f1", + x"e42451f4", + x"1f75490b", + x"1f16afe5", + x"56f60009", + x"00000fc4", + x"000001a8", + x"00000184", + x"0000016c", + x"00000310", + x"00001154", + x"00000d7c", + x"000001e0", + x"00000390", + x"00000ed0", + x"00000224", + x"000002d4", + x"0000114c", + x"0000119c", + x"00000fac", + x"00000f40", + x"00000d7c", + x"1fc77a01", + x"e90064a4", + x"6043883d", + x"8d056583", + x"49084d0b", + x"4908aff6", + x"390cd052", + x"400b6493", + x"6603d051", + x"6583400b", + x"64a3d050", + x"6493400b", + x"55f7a081", + x"e6026734", + x"32708f05", + x"27788903", + x"62142228", + x"8ff76633", + x"61603120", + x"d1488b02", + x"d548a002", + x"e613d548", + x"e600a073", + x"e400d047", + x"7401e623", + x"400b6583", + x"54f7d145", + x"410b0009", + x"a06ce000", + x"8f216033", + x"6023c803", + x"8f21c801", + x"ea00e704", + x"69106093", + x"887d8f13", + x"60a38411", + x"71026903", + x"e020290a", + x"60a30894", + x"47108ff1", + x"7a0157f7", + x"73fc2272", + x"72044315", + x"8de23367", + x"a03e0009", + x"0894aff1", + x"71018801", + x"8d276023", + x"c8018b24", + x"6010887d", + x"8d05e7ec", + x"37fc7730", + x"8070a006", + x"71018411", + x"37fcca20", + x"77308070", + x"71026010", + x"887d8d05", + x"e7ec37fc", + x"77308071", + x"a0067101", + x"841137fc", + x"ca207730", + x"80717102", + x"e70c37fc", + x"857873fe", + x"2201afce", + x"72026010", + x"887d8b04", + x"84117102", + x"ca20a002", + x"80808080", + x"7101e71c", + x"37fc6770", + x"73ff2270", + x"afbd7201", + x"d114410b", + x"0009e602", + x"d513a001", + x"0009d50e", + x"d10be400", + x"410b0009", + x"adda0009", + x"7f747f78", + x"4f266ef6", + x"6df66cf6", + x"6bf66af6", + x"69f6000b", + x"68f60009", + x"00000ed0", + x"00000390", + x"00000f40", + x"00000310", + x"00001158", + x"000011f4", + x"000001e0", + x"00000d88", + x"00001024", + x"00001154", + x"2f862448", + x"2f962fa6", + x"2fb62fc6", + x"6c434f22", + x"7fe81f52", + x"1f618f02", + x"2f72a06e", + x"e0ffe105", + x"34178d6a", + x"e0ffda39", + x"d9394a0b", + x"e424d139", + x"60c370ff", + x"4008051e", + x"d137db38", + x"490b041e", + x"65f364f3", + x"680ce604", + x"75104b0b", + x"740865f3", + x"6403490b", + x"7510308c", + x"680c60c3", + x"88018f1b", + x"8802d52f", + x"490be401", + x"53f2380c", + x"688c6233", + x"61236724", + x"27788ffb", + x"31387101", + x"65f364f3", + x"1f13e604", + x"75104b0b", + x"740c65f3", + x"6403490b", + x"7510380c", + x"a001688c", + x"8920d522", + x"490be401", + x"65f364f3", + x"e6046c03", + x"75104b0b", + x"740465f3", + x"6403490b", + x"751030cc", + x"d51a380c", + x"490be401", + x"688c65f3", + x"380ce604", + x"75104b0b", + x"64f365f3", + x"688c6403", + x"490b7510", + x"380c688c", + x"4a0be423", + x"d9116083", + x"40094009", + x"4a0b049c", + x"6083c90f", + x"4a0b049c", + x"d00d400b", + x"e4007f18", + x"4f266cf6", + x"6bf66af6", + x"69f6000b", + x"68f60009", + x"0000016c", + x"000002d4", + x"000011c4", + x"000011b0", + x"00000224", + x"0000116c", + x"00001170", + x"0000119c", + x"00000528", + x"2f866043", + x"2f964009", + x"2fa64009", + x"2fb6c90f", + x"2fc62fd6", + x"2fe66e43", + x"4f227ff0", + x"1f016043", + x"c90fdd4a", + x"1f024d0b", + x"e4244d0b", + x"e454db48", + x"680350f1", + x"ec00d945", + x"6ab34d0b", + x"04bc380c", + x"50f24d0b", + x"04bc380c", + x"d14265f3", + x"750c410b", + x"64c32008", + x"8d576103", + x"60c34009", + x"4009c90f", + x"2f12490b", + x"04ac380c", + x"60c3c90f", + x"490b04ac", + x"380c490b", + x"e43a61f2", + x"e20371ff", + x"31268d3d", + x"380cc702", + x"011c0123", + x"00090009", + x"5a402406", + x"50f34029", + x"40194009", + x"4009490b", + x"04ac380c", + x"50f34029", + x"4019c90f", + x"490b04ac", + x"380c50f3", + x"e1ec401c", + x"c90f490b", + x"04ac51f3", + x"380c6019", + x"600fc90f", + x"490b04ac", + x"380c50f3", + x"e1f4401c", + x"c90f490b", + x"04ac380c", + x"50f34019", + x"c90f490b", + x"04ac380c", + x"50f34009", + x"4009c90f", + x"490b04ac", + x"380c50f3", + x"c90f490b", + x"04ac380c", + x"490be43b", + x"380cafa1", + x"7c01490b", + x"e4236083", + x"40094009", + x"c90f490b", + x"04bc6083", + x"c90f490b", + x"04bcd00e", + x"400b0009", + x"882b8901", + x"af7d0009", + x"d00b400b", + x"64e3d10b", + x"410b0009", + x"7f104f26", + x"6ef66df6", + x"6cf66bf6", + x"6af669f6", + x"000b68f6", + x"0000016c", + x"0000119c", + x"00000ed0", + x"00000184", + x"00000528", + x"00000d3a", + x"d01151f4", + x"201251f3", + x"201661f3", + x"71142016", + x"20e620d6", + x"20c620b6", + x"20a62096", + x"20862076", + x"20662056", + x"20462036", + x"202651f1", + x"201651f2", + x"20164012", + x"40024023", + x"40134022", + x"d00164f2", + x"400b0009", + x"00000b0c", + x"000012a4", + x"2f062f16", + x"e0f0400e", + x"e0052f06", + x"50f370fe", + x"1f03afcf", + x"00092f06", + x"e0f0400e", + x"2f16e005", + x"2f06afc7", + x"00094f22", + x"b1840009", + x"4f26002b", + x"00094f22", + x"b1780009", + x"4f26002b", + x"00092f06", + x"e0f0400e", + x"2f16e01e", + x"2f06afb3", + x"00092f06", + x"e0f0400e", + x"2f16e002", + x"2f06afab", + x"00092f06", + x"e0f0400e", + x"2f16e004", + x"2f06afa3", + x"00092f06", + x"e0f0400e", + x"2f16e00b", + x"2f06af9b", + x"0009d00f", + x"40264017", + x"40274006", + x"40167008", + x"62066306", + x"64066506", + x"66066706", + x"68066906", + x"6a066b06", + x"6c066d06", + x"6e066f06", + x"51012f16", + x"61022f16", + x"70c05101", + x"6002002b", + x"00090009", + x"0000124c", + x"ef046ff2", + x"e0006002", + x"402b0009", + x"2448d744", + x"89001745", + x"5175d243", + x"6511d643", + x"2259d340", + x"32608b05", + x"5036c801", + x"8f096053", + x"a00e0009", + x"d63e3260", + x"8b0a5036", + x"c8018f07", + x"6053c880", + x"8f24e280", + x"6053300c", + x"a026600c", + x"d338d239", + x"23593320", + x"8d166058", + x"d2372259", + x"60238823", + x"8f0b6053", + x"4019c90f", + x"d3346203", + x"4208323c", + x"52257104", + x"6013a045", + x"302cd631", + x"33608f0d", + x"60236058", + x"c8088903", + x"92446053", + x"a003202b", + x"92416053", + x"2029300c", + x"a00c7104", + x"88038b0b", + x"60534019", + x"e20fd325", + x"22094208", + x"323c6013", + x"51257004", + x"a026301c", + x"932e3230", + x"8d046053", + x"932b3230", + x"8f07880b", + x"4019d11c", + x"c90f4008", + x"301ca017", + x"50058b02", + x"d118a013", + x"60126053", + x"882b8b02", + x"5174a00d", + x"6012d216", + x"d3162259", + x"32308d02", + x"6013a005", + x"7002d110", + x"605c4008", + x"5112001e", + x"d1116201", + x"21219107", + x"2011d110", + x"412b0009", + x"f80007ff", + x"402b400b", + x"c3200009", + x"0000128c", + x"0000fb00", + x"00008900", + x"00008b00", + x"0000f000", + x"0000a000", + x"0000f0ff", + x"0000124c", + x"0000b000", + x"0000ff00", + x"0000c300", + x"000012a8", + x"00000d3a", + x"e1163416", + x"8d2de000", + x"6243c702", + x"012c0123", + x"00090009", + x"1a1a1a1a", + x"1a1a1a1a", + x"1a1a1a1a", + x"1a1a1a1a", + x"242a3036", + x"3c424800", + x"d10e4408", + x"341ca014", + x"5145d10d", + x"a0115115", + x"d10aa00e", + x"6112d109", + x"a00b5111", + x"d107a008", + x"5112d106", + x"a0055113", + x"d104a002", + x"5114d104", + x"5116e004", + x"2512000b", + x"00090009", + x"0000124c", + x"0000128c", + x"e1163416", + x"8d2ce000", + x"6243c702", + x"012c0123", + x"00090009", + x"1a1a1a1a", + x"1a1a1a1a", + x"1a1a1a1a", + x"1a1a1a1a", + x"242a3036", + x"3c424800", + x"d10d4408", + x"341ca014", + x"1455d10c", + x"a0111155", + x"d109a00e", + x"2152d108", + x"a00b1151", + x"d106a008", + x"1152d105", + x"a0051153", + x"d103a002", + x"1154d103", + x"1156e004", + x"000b0009", + x"0000124c", + x"0000128c", + x"24488901", + x"d1021145", + x"d102412b", + x"00090009", + x"0000128c", + x"00000d3a", + x"d1056211", + x"22288904", + x"d3045335", + x"2321e200", + x"2121000b", + x"00090009", + x"000012a8", + x"0000128c", + x"d001402b", + x"00090009", + x"000009dc", + x"d2096122", + x"21188d03", + x"e33271ff", + x"000b2212", + x"2232d206", + x"63222338", + x"d3058b00", + x"91032212", + x"2312000b", + x"00090088", + x"000011f8", + x"00001248", + x"abcd0000", + x"000b0009", + x"2f866843", + x"2f962fa6", + x"d9094f22", + x"60802008", + x"8d096a83", + x"880a8b01", + x"490be40d", + x"7801490b", + x"64a0aff4", + x"60804f26", + x"6af669f6", + x"000b68f6", + x"000010e4", + x"d1012142", + x"000b0009", + x"abcd0000", + x"2f86e440", + x"2f962fa6", + x"ea00d817", + x"4f22480b", + x"7ffcd016", + x"d916400b", + x"0009480b", + x"e442d415", + x"490b0009", + x"d414490b", + x"0009e450", + x"480be900", + x"2fa2e209", + x"61f23127", + x"890461f2", + x"71012f12", + x"aff80009", + x"480be455", + x"2f92e209", + x"61f23127", + x"890461f2", + x"71012f12", + x"aff80009", + x"9403480b", + x"0009afe5", + x"000900aa", + x"0000105c", + x"00001144", + x"00001028", + x"000011d8", + x"000011fc", + x"d104644c", + x"5012c808", + x"8bfcd102", + x"1141000b", + x"00090009", + x"abcd0100", + x"d1035012", + x"c80189fc", + x"d1016012", + x"000b600c", + x"abcd0100", + x"d0062f86", + x"4f22400b", + x"0009d105", + x"6803410b", + x"64036083", + x"4f26000b", + x"68f60009", + x"000010fc", + x"000010e4", + x"d102e202", + x"1123000b", + x"00090009", + x"abcd0100", + x"000b0009", + x"4f000000", + x"4f666673", + x"65747300", + x"4f4b0000", + x"54657874", + x"3d303b44", + x"6174613d", + x"303b4273", + x"733d3000", + x"2f000000", + x"2c000000", + x"466f7065", + x"6e2c0000", + x"46636c6f", + x"73652c00", + x"46726561", + x"642c0000", + x"46777269", + x"74652c00", + x"466c7365", + x"656b2c00", + x"30313233", + x"34353637", + x"38396162", + x"63646566", + x"00000000", + x"00000006", + x"00000007", + x"00000006", + x"00000007", + x"00000007", + x"00001174", + x"0000117c", + x"00001184", + x"0000118c", + x"00001194", + x"47444220", + x"53747562", + x"20666f72", + x"2048532d", + x"324a3020", + x"53483220", + x"524f4d0a", + x"00000000", + x"00000032", + x"72657669", + x"73696f6e", + x"3a206368", + x"616e6765", + x"7365743a", + x"20202035", + x"3a353464", + x"33376335", + x"61373762", + x"300a6275", + x"696c643a", + x"204d6f6e", + x"204d6172", + x"20203420", + x"30313a31", + x"303a3438", + x"20455354", + x"20323031", + x"390a0000", + others => x"00000000" ); + +end package; + +package body bootrom is +end package body; diff --git a/testrom/main.c b/testrom/main.c index c6bc244..d3c4905 100644 --- a/testrom/main.c +++ b/testrom/main.c @@ -82,6 +82,7 @@ led(int v) void main_sh (void) { + volatile int i; led(0x40); uart_set_baudrate (); @@ -101,4 +102,11 @@ main_sh (void) putstr ("GDB Stub for HS-2J0 SH2 ROM\n"); putstr (version_string); led(0x50); + + for (;;) { + for (i=0; i<10; i++) {} + led(0x55); + for (i=0; i<10; i++) {} + led(0xaa); + } }