From 07afa61fa1ddb7f047a1f9774f636dbf424f042f Mon Sep 17 00:00:00 2001 From: J Date: Mon, 18 Mar 2019 17:39:56 -0400 Subject: [PATCH] Drives LCD with ASCII renderer. Split main.c off for 42s --- cpu_up5k_42s.vhd | 180 +++++++ ghdl_lattice.sh | 2 + ram.img | Bin 6688 -> 5772 bytes ram_init.vhd | 1101 ++++++++++++++++----------------------- testrom/Makefile | 6 +- testrom/entry.c | 4 - testrom/font5x7.h | 106 ++++ testrom/main_up5k_42s.c | 180 +++++++ 8 files changed, 907 insertions(+), 672 deletions(-) create mode 100644 cpu_up5k_42s.vhd create mode 100644 testrom/font5x7.h create mode 100644 testrom/main_up5k_42s.c diff --git a/cpu_up5k_42s.vhd b/cpu_up5k_42s.vhd new file mode 100644 index 0000000..598b32d --- /dev/null +++ b/cpu_up5k_42s.vhd @@ -0,0 +1,180 @@ +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; + +use work.disp_drv_pkg.all; + +library sb_ice40_components_syn; +use sb_ice40_components_syn.components.all; + +entity cpu_lattice is port ( + led : inout std_logic_vector(7 downto 0); + lcs : inout std_logic; + la0 : inout std_logic; + lscl : inout std_logic; + lsi : inout std_logic); +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); + + signal lcd_d_i : disp_drv_i_t; + signal lcd_d_o : disp_drv_o_t; + signal lcd_o : disp_o_t; + + signal le : std_logic_vector(7 downto 0); + signal vh : std_logic; +begin + rst <= '1', '0' after 10 ns; + + vh <= '1'; + + ck: SB_HFOSC generic map (clkhf_div => "0b10") + port map (clkhfen => vh, clkhf => clk, clkhfpu => vh); + + 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)); + + lcd : disp_drv port map (clk => clk, rst => rst, a => lcd_d_i, y => lcd_d_o, yl => lcd_o); + lcd_d_i.d <= data_slaves_o(DEV_SPI).d; + lcd_d_i.a <= data_slaves_o(DEV_SPI).a(3 downto 2); + lcd_d_i.wr <= data_slaves_o(DEV_SPI).wr; + lcd_d_i.en <= data_slaves_o(DEV_SPI).en; + + data_slaves_i(DEV_SPI).d <= lcd_d_o.d; + data_slaves_i(DEV_SPI).ack <= lcd_d_o.ack; + + lcs <= lcd_o.cs; + la0 <= lcd_o.a0; + lscl <= lcd_o.clk; + lsi <= lcd_o.d; + + -- intercept and print PIO and UART writes + + led <= le; + + 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); + le <= 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/ghdl_lattice.sh b/ghdl_lattice.sh index 369d19a..342f0df 100644 --- a/ghdl_lattice.sh +++ b/ghdl_lattice.sh @@ -8,6 +8,8 @@ ghdl -a data_bus_pkg.vhd monitor_pkg.vhd ram_init.vhd lattice_ebr.vhd bus_monit ghdl -a --work=sb_ice40_components_syn clk_sim.vhd +ghdl -a ../disp_drv/disp_drv_pkg.vhd ../disp_drv/disp_drv.vhd + ghdl -a cpu_lattice.vhd lattice_tb.vhd ghdl -e lattice_tb diff --git a/ram.img b/ram.img index 527aed0b49cef7dae218a650f5a9d3d2fe284be6..cb2f07a9ab9e9140113190e8266bb2e0cbf862fc 100755 GIT binary patch delta 2063 zcmb_dZ%k8H6hHU%6<#TY{(07doxBzV1X(F)MeN|c@`|nE3JIDeGg}J<#GwvwiV?kY zE<_?m;v?=)_~48&W;4TtW!VR_n9L6@aY?(mM48D}(*>6J!898&(ZrowaBlmwCBBz) z?z!jB@1A?k>FfFR6EzfoNB|{Ip0B2z045*Ovz5uc%hbATW4aeX6hZPIAy@%Y)e8ds zABlCEe2I!=nTz|OqNNH9|9Xu}`@~DhRW2^!kgJ#XD`m8NzaoJAM=^+e&bk#j7?PHR z&BbZEh}UAkirxXx$8iOu0_`HHDz~jm=pt?w9w~=x2!KsxQj#duS$ME4Xup#qB(1&8 zea_j^nxxxIE^E7V!=}psIx_~O5%0QoPxn}lk~yl~<4^r%n`HLc1NwPRVaH}&ab=-x zXqv_ve+9rfaeoV-FdyaUGVIh6bm0Q(N15O3w9rS^pi9;jRauDh0HS{h!gPb3&tPXO z^9qS;IYALaY}i$XZ2JNUPh?5!7aHke~Uf@U|-M#)7PAR za`vXlO*nf(dr(kpx8uF80>D$GZ;%q4~{KIrep^p3nx&jnuX-Nn8Qelh3{b@QiuR^|yE~-7(JP zN8Hg1H_3SJlqrPPDI?=Ee_-$QuCtNyJ&XN|VBEb3$KgHfB$z+Mc=bQU=lm_6F2V_T z|2Y7H$eyv3j-_!Ye@)Sp7;%S;Wv{1l3@f4d+lO(TYDk$?gP|C;tI`E!AH_~Y%KI0U zYE0#77ANf)n}?-qc)pw~j<|m+rcYv%F30JY79e`!q`qr71*e5WBsMwt3+=YG2wuPU z3US7q(b7UOrQ5jj6t~S7&&Ddsbe50Q8#$x}X3 z{?;O^MK%Et+prQBJ!5Iva}KK*V9C=b3FU4;#_ENP>A-C{jM5UvJ#A0H-KLNCdaTh5 znT|QV=TGPTN}`!$BR{Pe<886bAn{md9%9*jiZKmI-)&rf%T2-D29GtC@qRGw=*^@^ zUnXwr${Z5ZqurSybDwQXO_wdOx9mt+byxk6L#f${)mp|%XA|j2!P$C`^<{*p80VKw zkFus6Xe!Tw|HCp@Jmu6xOU-6|b`s{X*iUsO@G0v(j`#$was07JI9f7NE$(sbEtN>S zQI9(FMJ;Z5)q$S?z_H`*bCyyzcx?3Wt6|hu7rkq>T|?syq+3Y0k?v_%izFKA85r0v zdF$$3_;Xl#-ozyrUyJgIpOfy z)!@U=F6?AX5Z#K%9>pyRz>y9^PF?u0(sayXu^gi;qDfH{H$`%?twIe3LQvOHM==cw z3ROUom1aU26qWIz9M4h83uek!j4F}y2+&&G&4`oxb-+4E$O+!1XcwWyv z=brPs=broL+-9_OtWzfv5u#0xm!)rz$kz|HCF>{hyg%<_+w)+ZgOq|dg1etn(5Fc3 zpszpMVm3#WnU>eKkh|#f%6>L#Zi*^dRcp!j!x}u(p6U8paM2xSXgmOBB?M^I}U=<&mr-QOEE^6ImhP&ah^Ro)&95@?SIV zi&Nr}kyO4@!o!B&@rsxpNJGl$33Eo7oi`|hi#CdD;8lNW!%JQ>5ymy#Dc=T?dHN)5c=i z4~p6_G3l!likdd=m8&%>lKUR}nFId_Rx{R^vWgE%*ag(-iouOiZHSKuQ>pAT6?;q7 zG^5Y?)c}uE(^-)}TkvAziYPc4QR4O|E=HYT!-;_ARKCp1yT>&H;*_|4?h&K!1yBHnDZ|f zQ-RicXB=b3ACTLziN3*slm7~?0FK0uT?k`|;aQ`(YOju4K}bdUL#eFiWH=pMDAquU zy5Gc@!g{cIfwb}kg__N}>H40SR_^dP)w$^4{-OQbk|SbI3%NUwOUcNd7&Z6A0_dOH+H_b9+2$a&QO96q6^qElnr)$y_`*^4FJknOgDJ z-6%jZ+q71{*ly$TP(B0kZt$?YEP?8IhAc2I@d_<} z@Jc*lS$G?5k0F5tFzehD5aw7x1+EpU4JtIU4ShtkDOV`Va>p2v9$yuq{Gcl z4|c8#l*6C(x6PQ>K5X4$na&xQNXpQ!H} z!UCTlE54}?uoLVWxqAEWyp1mzZ)qvmo%{4)*Ux+VUxLnb4DSP;lpvm$;DUK=`ufcE z*&A~=?%ce4bAGb044uVgsORf&sSMxE=OzQMw=FKOwfe>O;`_he`50Gp8#ZA77N2Ik zg~k0_g%FBwvR&UxG7q&%kukc&p~NJXCENZ_0%HAOkWw$~$ieL3AWR$xv^0U9x7jiS zr>(POEW~OOE=lZPA|0CT*a=;;Iy!86ZVEaxry)~eDSa!~D3jn=8JVn=Fmx2MWC&ih zwUdBZ3(KIdv(YAYFmd0O%cTO1YBVr@b=2UbL;JwE^|fW-BN(z)ogYG-uU_UvhEa7Y z5XQf+FrtMAz-jPNBT^mV0_-rfn%d5;?!zy4Z9kMsrMl9G+dPLpdH-m-JMvCyII<`8 ZQKY>q(y^_Z|F%c^diO;-+S+$`=s(HPeHj1% diff --git a/ram_init.vhd b/ram_init.vhd index 6c7fa97..2b77149 100644 --- a/ram_init.vhd +++ b/ram_init.vhd @@ -10,107 +10,103 @@ package bootrom is x"00001ffc", x"00000120", x"00001ffc", - x"00000d66", - x"00000d46", - x"00000d66", - x"00000d46", - x"00000d46", - x"00000d76", - x"00000d76", x"00000d56", + x"00000d36", + x"00000d56", + x"00000d36", + x"00000d36", + x"00000d66", + x"00000d66", x"00000d46", - x"00000d46", - x"00000d46", - x"00000d46", - x"00000d46", - x"00000d46", - x"00000d46", - x"00000d46", - x"00000d46", - x"00000d46", - x"00000d46", - x"00000d46", - x"00000d46", - x"00000d46", - x"00000d46", - x"00000d46", - x"00000d46", - x"00000d46", - x"00000d46", - x"00000d46", - x"00000d08", - x"00000d1e", - x"00000d3a", - x"00000d46", - x"00000d46", - x"00000d46", - x"00000d46", - x"00000d46", - x"00000d46", - x"00000d46", - x"00000d46", - x"00000d46", - x"00000d46", - x"00000d46", - x"00000d46", - x"00000d46", - x"00000d46", - x"00000d46", - x"00000d46", - x"00000d46", - x"00000d46", - x"00000d46", - x"00000d46", - x"00000d46", - x"00000d46", - x"00000d46", - x"00000d46", - x"00000d46", - x"00000d46", - x"00000d46", - x"00000d46", - x"00000d46", - x"d02bd128", - x"2102d32b", + x"00000d36", + x"00000d36", + x"00000d36", + x"00000d36", + x"00000d36", + x"00000d36", + x"00000d36", + x"00000d36", + x"00000d36", + x"00000d36", + x"00000d36", + x"00000d36", + x"00000d36", + x"00000d36", + x"00000d36", + x"00000d36", + x"00000d36", + x"00000d36", + x"00000d36", + x"00000d36", + x"00000cf8", + x"00000d0e", + x"00000d2a", + x"00000d36", + x"00000d36", + x"00000d36", + x"00000d36", + x"00000d36", + x"00000d36", + x"00000d36", + x"00000d36", + x"00000d36", + x"00000d36", + x"00000d36", + x"00000d36", + x"00000d36", + x"00000d36", + x"00000d36", + x"00000d36", + x"00000d36", + x"00000d36", + x"00000d36", + x"00000d36", + x"00000d36", + x"00000d36", + x"00000d36", + x"00000d36", + x"00000d36", + x"00000d36", + x"00000d36", + x"00000d36", + x"00000d36", + x"d027d124", + x"2102d327", x"432a0009", x"00090009", x"00090009", x"00090009", x"0009000b", x"00090009", - x"0009d021", - x"d11f2102", - x"d01a402b", + x"0009d01d", + x"d11b2102", + x"d018402b", x"00090009", - x"0009d019", + x"0009d017", x"400b0009", - x"d217420b", - x"0009d516", + x"d215420b", + x"0009d514", x"450b0009", - x"da144a0b", + x"da124a0b", x"00090009", - x"d115d017", - x"2102d012", - x"400b0009", - x"d011400b", - 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"000001e8", - x"00000574", + x"d111d013", + x"21020009", + x"e000e101", + x"e202e303", + x"e404e505", + x"e606e707", + x"e808e909", + x"ea0aeb0b", + x"ec0ced0d", + x"ee004e2e", + x"4e1e4e0e", + x"d002400b", + x"0009c320", + x"00090009", + x"000001d8", + x"00000564", x"00000100", x"0000010e", - x"000011d0", - x"00001540", x"abcd0000", x"000000ff", x"0000004f", @@ -121,16 +117,16 @@ package bootrom is x"410b6483", x"60834f26", x"000b68f6", - x"00001168", + x"0000132c", x"d0034f22", x"400b0009", x"4f26000b", x"00090009", - x"00001180", + x"00001344", x"000b0009", x"d101412b", x"00090009", - x"000010b4", + x"000011e8", x"614c6213", x"729f622c", x"e3053236", @@ -161,7 +157,7 @@ package bootrom is x"6bf66af6", x"69f6000b", x"68f60009", - x"000001f4", + x"000001e4", x"2f86e000", x"2f96e903", x"2fa62fb6", @@ -205,7 +201,7 @@ package bootrom is x"6bf66af6", x"69f6000b", x"68f60009", - x"00001974", + x"000013e4", x"2f86e800", x"2f966953", x"2fa66a53", @@ -220,7 +216,7 @@ package bootrom is x"6bf66af6", x"69f6000b", x"68f60009", - x"000001b8", + x"000001a8", x"2f862f96", x"2fa66a43", x"2fb62fc6", @@ -249,10 +245,10 @@ package bootrom is x"6bf66af6", x"69f6000b", x"68f60009", - x"000001b8", - x"00000320", - x"00001974", - x"000001d0", + x"000001a8", + x"00000310", + x"000013e4", + x"000001c0", x"2f862f96", x"2fa62fb6", x"6b632fc6", @@ -315,8 +311,8 @@ package bootrom is x"6cf66bf6", x"6af669f6", x"000b68f6", - x"000001f4", - x"00001070", + x"000001e4", + x"00001060", x"2f862f96", x"2fa66a53", x"2fb62fc6", @@ -351,10 +347,10 @@ package bootrom is x"6bf66af6", x"69f6000b", x"68f60009", - x"000001b8", - x"00000320", - x"00001920", - x"00001974", + x"000001a8", + x"00000310", + x"00001390", + x"000013e4", x"2f862f96", x"2fa62fb6", x"2fc62fd6", @@ -540,23 +536,23 @@ package bootrom is x"1f75490b", x"1f16afe5", x"56f60009", - x"00001010", - x"000001f4", - x"000001d0", - x"000001b8", - x"0000035c", - x"0000192c", - x"00000dc8", - x"0000022c", - x"000003dc", - x"00000f1c", - x"00000270", - x"00000320", - x"00001924", - x"00001974", - x"00000ff8", - x"00000f8c", - x"00000dc8", + x"00001000", + x"000001e4", + x"000001c0", + x"000001a8", + x"0000034c", + x"0000139c", + x"00000db8", + x"0000021c", + x"000003cc", + x"00000f0c", + x"00000260", + x"00000310", + x"00001394", + x"000013e4", + x"00000fe8", + x"00000f7c", + x"00000db8", x"1fc77a01", x"e90064a4", x"6043883d", @@ -646,16 +642,16 @@ package bootrom is x"6bf66af6", x"69f6000b", x"68f60009", - x"00000f1c", - x"000003dc", - x"00000f8c", - x"0000035c", - x"00001930", - x"000019cc", - x"0000022c", - x"00000dd4", - x"00001070", - x"0000192c", + x"00000f0c", + x"000003cc", + x"00000f7c", + x"0000034c", + x"000013a0", + x"0000143c", + x"0000021c", + x"00000dc4", + x"00001060", + x"0000139c", x"2f862448", x"2f962fa6", x"2fb62fc6", @@ -723,15 +719,15 @@ package bootrom is x"6bf66af6", x"69f6000b", x"68f60009", - x"000001b8", - x"00000320", - x"0000199c", - x"00001988", - x"00000270", - x"00001944", - x"00001948", - x"00001974", - x"00000574", + x"000001a8", + x"00000310", + x"0000140c", + x"000013f8", + x"00000260", + x"000013b4", + x"000013b8", + x"000013e4", + x"00000564", x"2f866043", x"2f964009", x"2fa64009", @@ -815,12 +811,12 @@ package bootrom is x"6cf66bf6", x"6af669f6", x"000b68f6", - x"000001b8", - x"00001974", - x"00000f1c", - x"000001d0", - x"00000574", - x"00000d86", + x"000001a8", + x"000013e4", + x"00000f0c", + x"000001c0", + x"00000564", + x"00000d76", x"d01151f4", x"201251f3", x"201661f3", @@ -838,8 +834,8 @@ package bootrom is x"40134022", x"d00164f2", x"400b0009", - x"00000b58", - x"00001a7c", + x"00000b48", + x"000016e8", x"2f062f16", x"e0f0400e", x"e0052f06", @@ -887,7 +883,7 @@ package bootrom is x"70c05101", x"6002002b", x"00090009", - x"00001a24", + x"00001690", x"ef046ff2", x"e0006002", x"402b0009", @@ -960,19 +956,19 @@ package bootrom is x"f80007ff", x"402b400b", x"c3200009", - x"00001a64", + x"000016d0", x"0000fb00", x"00008900", x"00008b00", x"0000f000", x"0000a000", x"0000f0ff", - x"00001a24", + x"00001690", x"0000b000", x"0000ff00", x"0000c300", - x"00001a80", - x"00000d86", + x"000016ec", + x"00000d76", x"e1163416", x"8d2de000", x"6243c702", @@ -999,8 +995,8 @@ package bootrom is x"5116e004", x"2512000b", x"00090009", - x"00001a24", - x"00001a64", + x"00001690", + x"000016d0", x"e1163416", x"8d2ce000", x"6243c702", @@ -1026,25 +1022,25 @@ package bootrom is x"1154d103", x"1156e004", x"000b0009", - x"00001a24", - x"00001a64", + x"00001690", + x"000016d0", x"24488901", x"d1021145", x"d102412b", x"00090009", - x"00001a64", - x"00000d86", + x"000016d0", + x"00000d76", x"d1056211", x"22288904", x"d3045335", x"2321e200", x"2121000b", x"00090009", - x"00001a80", - x"00001a64", + x"000016ec", + x"000016d0", x"d001402b", x"00090009", - x"00000a28", + x"00000a18", x"d2096122", x"21188d03", x"e33271ff", @@ -1055,8 +1051,8 @@ package bootrom is x"91032212", x"2312000b", x"00090088", - x"000019d0", - x"00001a20", + x"0000162c", + x"0000168c", x"abcd0000", x"000b0009", x"2f866843", @@ -1071,34 +1067,145 @@ package bootrom is x"60804f26", x"6af669f6", x"000b68f6", - x"00001168", + x"0000132c", x"d1012142", x"000b0009", x"abcd0000", + x"2f862f96", + x"69432fa6", + x"d80bda0c", + x"4f2260a2", + x"c8018907", + x"940d480b", + x"0009940b", + x"480b0009", + x"aff50009", + x"d1052192", + x"4f266af6", + x"69f6000b", + x"68f60081", + x"00820009", + x"00001098", + x"abcd0044", + x"2f862f96", + x"69432fa6", + x"d80bda0c", + x"4f2260a2", + x"c8018907", + x"940d480b", + x"0009940b", + x"480b0009", + x"aff50009", + x"d1062192", + x"4f266af6", + x"69f6000b", + x"68f60083", + x"00840009", + x"00001098", + x"abcd0044", + x"abcd0040", + x"2f86e103", + x"2f966943", + x"d80c2519", + x"94144f22", + x"480b245b", + x"e1060917", + x"001ac9f0", + x"64034409", + x"e1104409", + x"091a480b", + x"241be40e", + x"24996183", + x"4f2669f6", + x"412b68f6", + x"00b00009", + x"000010e4", + x"2f86e700", + x"2f966943", + x"2fa62fb6", + x"da1a4f22", + x"db1a7ffc", + x"61902118", + x"8d1de800", + x"60838805", + x"6273e100", + x"8d087701", + x"619071e0", + x"63134308", + x"313c31ac", + x"011c611c", + x"60230f14", + x"e1033717", + x"8b024b0b", + x"64f2e700", + x"78016083", + x"88068fe7", + x"8805afdf", + x"7901617b", + x"e2007104", + x"60730f24", + x"41108ffb", + x"770164f2", + x"d1047f04", + x"4f266bf6", + x"6af669f6", + x"412b68f6", + x"0000144c", + x"000010a4", x"2f86e440", x"2f962fa6", - x"d8244f22", + x"d8424f22", x"480b7ffc", - x"d023d924", + x"d041d942", x"400b0009", x"480be442", - x"d422490b", - x"0009d422", + x"d440490b", + x"0009d440", x"490b0009", x"480be450", - x"e1009232", + x"e100d93e", + x"9a6d2f12", + x"60f2019c", + x"611c31a0", + x"8d0ae501", + x"60f2d13a", + x"049c410b", + x"644c61f2", + x"71012f12", + x"aff00009", + x"d136410b", + x"e400d136", + x"d436410b", + x"e907e100", + x"da352f12", + x"61f23197", + x"891866f2", + x"e10167f2", + x"641362f2", + x"7708447d", + x"63f27210", + x"6713472d", + x"6213426d", + x"247b242b", + x"62337218", + x"412d4a0b", + x"241b61f2", + x"71012f12", + x"afe40009", + x"480be451", + x"e1009233", x"2f1261f2", x"31278904", x"61f27101", x"2f12aff8", x"0009480b", x"e455e100", - x"92252f12", + x"92262f12", x"61f23127", x"890461f2", x"71012f12", x"aff80009", - x"da14941b", + x"da1a941c", x"480be900", x"2f9261f2", x"31a78904", @@ -1110,15 +1217,21 @@ package bootrom is x"890461f2", x"71012f12", x"aff80009", - x"9404480b", + x"9405480b", x"0009afe7", - x"0009031f", - x"00aa0009", - x"000010a8", - x"000011c8", - x"00001074", - x"000019b0", - x"000019d4", + x"000900ff", + x"031f00aa", + x"00001098", + x"0000138c", + x"00001064", + x"00001420", + x"00001640", + x"00001630", + x"000010e4", + x"00001128", + x"00001168", + x"00001440", + x"000010a4", x"00124f7f", x"d104644c", x"5012c808", @@ -1138,482 +1251,13 @@ package bootrom is x"64036083", x"4f26000b", x"68f60009", - x"00001180", - x"00001168", + x"00001344", + x"0000132c", x"d102e202", x"1123000b", x"00090009", x"abcd0100", x"000b0009", - x"00000000", - x"4f22dd01", - x"a0020009", - x"00001528", - x"e000400e", - x"e0020028", - x"d122d223", - x"412f400e", - x"030a041a", - x"d5216656", - x"67563360", - x"89014d2b", - x"00093470", - x"89014d2b", - x"0009e000", - x"400e412f", - x"0028412f", - x"412f412f", - x"412f041a", - x"030a6656", - x"67563360", - x"89014d2b", - x"00093470", - x"89014d2b", - x"0009a025", - x"00090009", - x"00090009", - x"00090009", - x"00090009", - x"1234fffd", - x"00020003", - x"00040005", - x"abcd0002", - x"00060007", - x"00080009", - x"ffffffff", - x"fa034fa4", - x"00000000", - x"0000006e", - x"00090009", - x"00090009", - x"00001240", - x"0000124c", - x"00001258", - x"d19cd29d", - x"d39dd49e", - x"d59ed69f", - x"d79fd8a0", - x"6016400e", - x"6026400a", - x"6036401a", - x"445f090a", - x"0a1a6066", - x"39008901", - x"4d2b0009", - x"60763a00", - x"89014d2b", - x"000978ff", - x"481589e9", - x"a12a0009", - x"00090009", - x"00000000", - x"00000000", - x"00000000", - x"00000000", - x"00000000", - x"00000000", - x"00000000", - x"00000000", - x"00000000", - x"00000000", - x"00000000", - x"00000002", - x"00000002", - x"00000000", - x"00000000", - x"00000002", - x"00000002", - x"00000000", - x"00000000", - x"00000002", - x"00000002", - x"00000002", - x"00000002", - x"00000000", - x"00000000", - x"00000000", - x"00000000", - x"00000000", - x"00000000", - x"00000000", - x"00000000", - x"00000000", - x"00000000", - x"00000000", - x"00000000", - x"00000000", - x"00000000", - x"00000000", - x"00000000", - x"00000000", - x"00000000", - x"ffffffff", - x"00000000", - x"ffffffff", - x"00000006", - x"0000000a", - x"00000000", - x"00000000", - x"00000000", - x"00000000", - x"00000000", - x"00000000", - x"00000000", - x"00000000", - x"00000000", - x"00000000", - x"00000000", - x"00000000", - x"00000000", - x"00000000", - x"00000000", - x"00000000", - x"00000000", - x"7fffffff", - x"80000000", - x"7fffffff", - x"80000000", - x"7fffffff", - x"80000000", - x"00000001", - x"7fffffff", - x"7fff0001", - x"8000ffff", - x"80007fff", - x"80007fff", - x"80007fff", - x"80007fff", - x"80000001", - x"00010001", - x"00010001", - x"00010000", - x"7fff0001", - x"7fffffff", - x"80000001", - x"8000ffff", - x"7fff8000", - x"7fff8000", - x"80007fff", - x"80007fff", - x"0001ffff", - x"0001ffff", - x"0001ffff", - x"00000000", - x"00000000", - x"00000000", - x"ffffffff", - x"ffffffff", - x"ffffffff", - x"ffffffff", - x"00000000", - x"00000000", - x"00000000", - x"00000000", - x"00000000", - x"00000000", - x"ffffffff", - x"ffffffff", - x"00000000", - x"00000000", - x"00000000", - x"ffffffff", - x"00000001", - x"ffffffff", - x"00000007", - x"0000000b", - x"00000000", - x"00007fff", - x"00007fff", - x"ffff8001", - x"ffff8001", - x"ffff8000", - x"ffff8000", - x"00008000", - x"00008000", - x"3fff0001", - x"40000000", - x"3fff0001", - x"40000000", - x"c0008000", - x"c0008000", - x"c0008000", - x"c0008000", - x"80000000", - x"7fffffff", - x"7fffffff", - x"80000000", - x"7fffffff", - x"80000000", - x"00090009", - x"00090009", - x"000012c0", - x"0000131c", - x"00001378", - x"000013d4", - x"00001402", - x"00001430", - x"0000148c", - x"00000017", - x"4f26d004", - x"d1022102", - x"000b0009", - x"00090009", - x"abcd0000", - x"00000061", - x"d001d101", - x"affc0009", - x"88888888", - x"00090009", - x"00090009", - x"00090009", - x"4f22dd01", - x"a0020009", - x"00001908", - x"e000400e", - x"e0020028", - x"d126d227", - x"012f400e", - x"030a041a", - x"d5256656", - x"67563360", - x"89014d2b", - x"00093470", - x"89014d2b", - x"0009e000", - x"400e012f", - x"0028012f", - x"012f012f", - x"012f041a", - x"030a6656", - x"67563360", - x"89014d2b", - x"00093470", - x"89014d2b", - x"0009a02d", - x"00090009", - x"00090009", - x"00090009", - x"00090009", - x"01234567", - x"fffffffd", - x"00000002", - x"00000003", - x"00000004", - x"00000005", - x"89abcdef", - x"00000002", - x"00000006", - x"00000007", - x"00000008", - x"00000009", - x"ff795e36", - x"c94e4629", - x"00000000", - x"0000006e", - x"000015b0", - x"000015c8", - x"000015e0", - x"d1b4d2b5", - x"d3b5d4b6", - x"d5b6d6b7", - x"d7b7d8b8", - x"6016400e", - x"6026400a", - x"6036401a", - x"045f090a", - x"0a1a6066", - x"39008901", - x"4d2b0009", - x"60763a00", - x"89014d2b", - x"000978ff", - x"481589e9", - x"a15a0009", - x"00090009", - x"00000000", - x"00000000", - x"00000000", - x"00000000", - x"00000000", - x"00000000", - x"00000000", - x"00000000", - x"00000000", - x"00000000", - x"00000000", - x"00000002", - x"00000002", - x"00000000", - x"00000000", - x"00000002", - x"00000002", - x"00000000", - x"00000000", - x"00000002", - x"00000002", - x"00000002", - x"00000002", - x"00000000", - x"00000000", - x"00000000", - x"00000000", - x"00000000", - x"00000000", - x"00000000", - x"00000000", - x"00000000", - x"00000000", - x"00000000", - x"00000000", - x"00000000", - x"00000000", - x"00000000", - x"00000000", - x"00000000", - x"00007fff", - x"ffff8000", - x"00007fff", - x"ffff8000", - x"0007ffff", - x"fff80000", - x"00000000", - x"00000000", - x"00000000", - x"00000000", - x"00000000", - x"00000000", - x"00000000", - x"00000000", - x"00000000", - x"00000000", - x"00000000", - x"00000000", - x"00000000", - x"00000000", - x"00000000", - x"00000000", - x"00000000", - x"ffffffff", - x"00000000", - x"ffffffff", - x"00000000", - x"ffffffff", - x"00000000", - x"00000000", - x"00000001", - x"7fffffff", - x"ffffffff", - x"7fffffff", - x"00000001", - x"80000000", - x"ffffffff", - x"80000000", - x"7fffffff", - x"80000000", - x"7fffffff", - x"80000000", - x"7fffffff", - x"80000000", - x"7fffffff", - x"80000000", - x"00000001", - x"00000001", - x"00000001", - x"00000001", - x"00000001", - x"00000001", - x"00000000", - x"7fffffff", - x"00000001", - x"7fffffff", - x"ffffffff", - x"80000000", - x"00000001", - x"80000000", - x"ffffffff", - x"7fffffff", - x"80000000", - x"7fffffff", - x"80000000", - x"80000000", - x"7fffffff", - x"80000000", - x"7fffffff", - x"00000001", - x"ffffffff", - x"00000001", - x"ffffffff", - x"00000001", - x"ffffffff", - x"00000000", - x"00000000", - x"00000000", - x"ffffffff", - x"ffffffff", - x"ffffffff", - x"ffffffff", - x"00000000", - x"00000000", - x"3fffffff", - x"40000000", - x"00007fff", - x"00007fff", - x"c0000000", - x"c0000000", - x"ffff8000", - x"ffff8000", - x"00008000", - x"ffff7fff", - x"00007fff", - x"ffff8000", - x"00007fff", - x"ffff8000", - x"00000000", - x"7fffffff", - x"7fffffff", - x"80000001", - x"80000001", - x"80000000", - x"80000000", - x"80000000", - x"80000000", - x"00000001", - x"00000000", - x"ffffffff", - x"ffffffff", - x"80000000", - x"80000000", - x"00000000", - x"00000000", - x"00000000", - x"ffffffff", - x"ffffffff", - x"00000000", - x"ffffffff", - x"00000000", - x"00090009", - x"00090009", - x"00090009", - x"00001640", - x"0000169c", - x"000016f8", - x"00001754", - x"000017b0", - x"0000180c", - x"00001868", - x"00000017", - x"4f26d004", - x"d1022102", - x"000b0009", - x"00090009", - x"abcd0000", - x"00000062", - x"d001d101", - x"affc0009", - x"88888888", - x"00090009", - x"00090009", - x"00090009", x"4f000000", x"4f666673", x"65747300", @@ -1645,11 +1289,11 @@ package bootrom is x"00000006", x"00000007", x"00000007", - x"0000194c", - x"00001954", - x"0000195c", - x"00001964", - x"0000196c", + x"000013bc", + x"000013c4", + x"000013cc", + x"000013d4", + x"000013dc", x"47444220", x"53747562", x"20666f72", @@ -1658,24 +1302,151 @@ package bootrom is x"53483220", x"524f4d0a", x"00000000", + x"48656c6c", + x"6f203132", + x"33210000", + x"00000000", + x"0000005f", + x"00000007", + x"00070014", + x"7f147f14", + x"242a7f2a", + x"12231308", + x"64623649", + x"55225000", + x"05030000", + x"001c2241", + x"00004122", + x"1c00082a", + x"1c2a0808", + x"083e0808", + x"00503000", + x"00080808", + x"08080060", + x"60000020", + x"10080402", + x"3e514945", + x"3e00427f", + x"40004261", + x"51494621", + x"41454b31", + x"1814127f", + x"10274545", + x"45393c4a", + x"49493001", + x"71090503", + x"36494949", + x"36064949", + x"291e0036", + x"36000000", + x"56360000", + x"00081422", + x"41141414", + x"14144122", + x"14080002", + x"01510906", + x"32497941", + x"3e7e1111", + x"117e7f49", + x"4949363e", + x"41414122", + x"7f414122", + x"1c7f4949", + x"49417f09", + x"0901013e", + x"41415132", + x"7f080808", + x"7f00417f", + x"41002040", + x"413f017f", + x"08142241", + x"7f404040", + x"407f0204", + x"027f7f04", + x"08107f3e", + x"4141413e", + x"7f090909", + x"063e4151", + x"215e7f09", + x"19294646", + x"49494931", + x"01017f01", + x"013f4040", + x"403f1f20", + x"40201f7f", + x"2018207f", + x"63140814", + x"63030478", + x"04036151", + x"49454300", + x"007f4141", + x"02040810", + x"2041417f", + x"00000402", + x"01020440", + x"40404040", + x"00010204", + x"00205454", + x"54787f48", + x"44443838", + x"44444420", + x"38444448", + x"7f385454", + x"5418087e", + x"09010208", + x"1454543c", + x"7f080404", + x"7800447d", + x"40002040", + x"443d0000", + x"7f102844", + x"00417f40", + x"007c0418", + x"04787c08", + x"04047838", + x"44444438", + x"7c141414", + x"08081414", + x"187c7c08", + x"04040848", + x"54545420", + x"043f4440", + x"203c4040", + x"207c1c20", + x"40201c3c", + x"4030403c", + x"44281028", + x"440c5050", + x"503c4464", + x"544c4400", + x"08364100", + x"00007f00", + x"00004136", + x"08002010", + x"20100000", + x"00070507", x"00000032", + x"40a1c0a6", + x"a22ff800", + x"23811fac", + x"00afff00", x"72657669", x"73696f6e", x"3a206368", x"616e6765", x"7365743a", x"20202031", - x"363a6537", - x"36356261", - x"61613664", - x"65300a62", + x"373a6234", + x"38333238", + x"33636263", + x"66300a62", x"75696c64", - x"3a205361", - x"74204d61", - x"72203136", - x"2032333a", - x"32333a32", - x"35204544", + x"3a204d6f", + x"6e204d61", + x"72203138", + x"2031363a", + x"32313a35", + x"36204544", x"54203230", x"31390a00", others => x"00000000" ); diff --git a/testrom/Makefile b/testrom/Makefile index cc1fa7b..2b42305 100644 --- a/testrom/Makefile +++ b/testrom/Makefile @@ -1,4 +1,4 @@ -OBJS := entry.o gdb.o sh2.o main.o version.o +OBJS := entry.o gdb.o sh2.o version.o OBJS += uartlite.o #OBJS += uart16550.o @@ -37,8 +37,8 @@ tests/libtests.a: $(TESTS_OBJS) @echo Built test library -main.elf: $(OBJS) tests/libtests.a - $(LD) $(LDFLAGS) $(OBJS) -Ltests -ltests $(LIBGCC) -o $@ +main.elf: main_up5k_42s.o $(OBJS) tests/libtests.a + $(LD) $(LDFLAGS) main_up5k_42s.o $(OBJS) -Ltests -ltests $(LIBGCC) -o $@ main.o: main.c $(CC) $(CFLAGS) -fno-inline -c $< diff --git a/testrom/entry.c b/testrom/entry.c index 29daa3c..0369d84 100644 --- a/testrom/entry.c +++ b/testrom/entry.c @@ -230,13 +230,11 @@ __asm__( " mov.l testdiv_k, r0\n" " jsr @r0\n" " nop\n" -#endif " mov.l testmacw_k, r0\n" " jsr @r0\n" " nop\n" " mov.l testmacl_k, r0\n" " jsr @r0\n" -#if 0 #endif /* NO_TESTS */ " nop\n" " mov #0, r0\n" @@ -282,10 +280,8 @@ __asm__( "testdmuls_k: .long _testdmuls\n" "testmulconf_k: .long _testmulconf\n" "testdiv_k: .long _testdiv\n" -#endif "testmacw_k: .long _testmacw\n" "testmacl_k: .long _testmacl\n" -#ifndef NO_TESTS #endif /* NO_TESTS */ "pio_addr: .long 0xABCD0000\n" "start_leds: .long 0x000000ff\n" diff --git a/testrom/font5x7.h b/testrom/font5x7.h new file mode 100644 index 0000000..8e5f459 --- /dev/null +++ b/testrom/font5x7.h @@ -0,0 +1,106 @@ +#ifndef __FONT5X7_H__ +#define __FONT5X7_H__ + +#define FONT5X7_START 32 +#define FONT5X7_END 127 + +static unsigned char font[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, // (space) + 0x00, 0x00, 0x5F, 0x00, 0x00, // ! + 0x00, 0x07, 0x00, 0x07, 0x00, // " + 0x14, 0x7F, 0x14, 0x7F, 0x14, // # + 0x24, 0x2A, 0x7F, 0x2A, 0x12, // $ + 0x23, 0x13, 0x08, 0x64, 0x62, // % + 0x36, 0x49, 0x55, 0x22, 0x50, // & + 0x00, 0x05, 0x03, 0x00, 0x00, // ' + 0x00, 0x1C, 0x22, 0x41, 0x00, // ( + 0x00, 0x41, 0x22, 0x1C, 0x00, // ) + 0x08, 0x2A, 0x1C, 0x2A, 0x08, // * + 0x08, 0x08, 0x3E, 0x08, 0x08, // + + 0x00, 0x50, 0x30, 0x00, 0x00, // , + 0x08, 0x08, 0x08, 0x08, 0x08, // - + 0x00, 0x60, 0x60, 0x00, 0x00, // . + 0x20, 0x10, 0x08, 0x04, 0x02, // / + 0x3E, 0x51, 0x49, 0x45, 0x3E, // 0 + 0x00, 0x42, 0x7F, 0x40, 0x00, // 1 + 0x42, 0x61, 0x51, 0x49, 0x46, // 2 + 0x21, 0x41, 0x45, 0x4B, 0x31, // 3 + 0x18, 0x14, 0x12, 0x7F, 0x10, // 4 + 0x27, 0x45, 0x45, 0x45, 0x39, // 5 + 0x3C, 0x4A, 0x49, 0x49, 0x30, // 6 + 0x01, 0x71, 0x09, 0x05, 0x03, // 7 + 0x36, 0x49, 0x49, 0x49, 0x36, // 8 + 0x06, 0x49, 0x49, 0x29, 0x1E, // 9 + 0x00, 0x36, 0x36, 0x00, 0x00, // : + 0x00, 0x56, 0x36, 0x00, 0x00, // ; + 0x00, 0x08, 0x14, 0x22, 0x41, // < + 0x14, 0x14, 0x14, 0x14, 0x14, // = + 0x41, 0x22, 0x14, 0x08, 0x00, // > + 0x02, 0x01, 0x51, 0x09, 0x06, // ? + 0x32, 0x49, 0x79, 0x41, 0x3E, // @ + 0x7E, 0x11, 0x11, 0x11, 0x7E, // A + 0x7F, 0x49, 0x49, 0x49, 0x36, // B + 0x3E, 0x41, 0x41, 0x41, 0x22, // C + 0x7F, 0x41, 0x41, 0x22, 0x1C, // D + 0x7F, 0x49, 0x49, 0x49, 0x41, // E + 0x7F, 0x09, 0x09, 0x01, 0x01, // F + 0x3E, 0x41, 0x41, 0x51, 0x32, // G + 0x7F, 0x08, 0x08, 0x08, 0x7F, // H + 0x00, 0x41, 0x7F, 0x41, 0x00, // I + 0x20, 0x40, 0x41, 0x3F, 0x01, // J + 0x7F, 0x08, 0x14, 0x22, 0x41, // K + 0x7F, 0x40, 0x40, 0x40, 0x40, // L + 0x7F, 0x02, 0x04, 0x02, 0x7F, // M + 0x7F, 0x04, 0x08, 0x10, 0x7F, // N + 0x3E, 0x41, 0x41, 0x41, 0x3E, // O + 0x7F, 0x09, 0x09, 0x09, 0x06, // P + 0x3E, 0x41, 0x51, 0x21, 0x5E, // Q + 0x7F, 0x09, 0x19, 0x29, 0x46, // R + 0x46, 0x49, 0x49, 0x49, 0x31, // S + 0x01, 0x01, 0x7F, 0x01, 0x01, // T + 0x3F, 0x40, 0x40, 0x40, 0x3F, // U + 0x1F, 0x20, 0x40, 0x20, 0x1F, // V + 0x7F, 0x20, 0x18, 0x20, 0x7F, // W + 0x63, 0x14, 0x08, 0x14, 0x63, // X + 0x03, 0x04, 0x78, 0x04, 0x03, // Y + 0x61, 0x51, 0x49, 0x45, 0x43, // Z + 0x00, 0x00, 0x7F, 0x41, 0x41, // [ + 0x02, 0x04, 0x08, 0x10, 0x20, // "\" + 0x41, 0x41, 0x7F, 0x00, 0x00, // ] + 0x04, 0x02, 0x01, 0x02, 0x04, // ^ + 0x40, 0x40, 0x40, 0x40, 0x40, // _ + 0x00, 0x01, 0x02, 0x04, 0x00, // ` + 0x20, 0x54, 0x54, 0x54, 0x78, // a + 0x7F, 0x48, 0x44, 0x44, 0x38, // b + 0x38, 0x44, 0x44, 0x44, 0x20, // c + 0x38, 0x44, 0x44, 0x48, 0x7F, // d + 0x38, 0x54, 0x54, 0x54, 0x18, // e + 0x08, 0x7E, 0x09, 0x01, 0x02, // f + 0x08, 0x14, 0x54, 0x54, 0x3C, // g + 0x7F, 0x08, 0x04, 0x04, 0x78, // h + 0x00, 0x44, 0x7D, 0x40, 0x00, // i + 0x20, 0x40, 0x44, 0x3D, 0x00, // j + 0x00, 0x7F, 0x10, 0x28, 0x44, // k + 0x00, 0x41, 0x7F, 0x40, 0x00, // l + 0x7C, 0x04, 0x18, 0x04, 0x78, // m + 0x7C, 0x08, 0x04, 0x04, 0x78, // n + 0x38, 0x44, 0x44, 0x44, 0x38, // o + 0x7C, 0x14, 0x14, 0x14, 0x08, // p + 0x08, 0x14, 0x14, 0x18, 0x7C, // q + 0x7C, 0x08, 0x04, 0x04, 0x08, // r + 0x48, 0x54, 0x54, 0x54, 0x20, // s + 0x04, 0x3F, 0x44, 0x40, 0x20, // t + 0x3C, 0x40, 0x40, 0x20, 0x7C, // u + 0x1C, 0x20, 0x40, 0x20, 0x1C, // v + 0x3C, 0x40, 0x30, 0x40, 0x3C, // w + 0x44, 0x28, 0x10, 0x28, 0x44, // x + 0x0C, 0x50, 0x50, 0x50, 0x3C, // y + 0x44, 0x64, 0x54, 0x4C, 0x44, // z + 0x00, 0x08, 0x36, 0x41, 0x00, // { + 0x00, 0x00, 0x7F, 0x00, 0x00, // | + 0x00, 0x41, 0x36, 0x08, 0x00, // } + 0x20, 0x10, 0x20, 0x10, 0x00, // ~ + 0x00, 0x00, 0x07, 0x05, 0x07 // ° +}; + +#endif /* __FONT5X7_H__ */ diff --git a/testrom/main_up5k_42s.c b/testrom/main_up5k_42s.c new file mode 100644 index 0000000..eae6829 --- /dev/null +++ b/testrom/main_up5k_42s.c @@ -0,0 +1,180 @@ +#define LEDPORT (*(volatile unsigned long *)0xabcd0000) +#define LCDDATA (*(volatile unsigned long *)0xabcd0044) +#define LCDINST (*(volatile unsigned long *)0xabcd0040) + +#include "font5x7.h" + +extern char version_string[]; + +char ram0[256]; /* working ram for CPU tests */ + +void +putstr (char *str) +{ + while (*str) + { + if (*str == '\n') + uart_tx ('\r'); + uart_tx (*(str++)); + } +} + +#ifndef NO_DDR + +#define DDR_BASE 0x10000000 +#define MemoryRead(A) (*(volatile int*)(A)) +#define MemoryWrite(A,V) *(volatile int*)(A)=(V) + +//SD_A <= address_reg(25 downto 13); --address row +//SD_BA <= address_reg(12 downto 11); --bank_address +//cmd := address_reg(6 downto 4); --bits RAS & CAS & WE +int DdrInitData[] = { +// AddressLines Bank Command +#ifndef LPDDR + (0x000 << 13) | (0 << 11) | (7 << 4), //CKE=1; NOP="111" + (0x400 << 13) | (0 << 11) | (2 << 4), //A10=1; PRECHARGE ALL="010" + (0x001 << 13) | (1 << 11) | (0 << 4), //EMR disable DLL; BA="01"; LMR="000" +#ifndef DDR_BL4 + (0x121 << 13) | (0 << 11) | (0 << 4), //SMR reset DLL, CL=2, BL=2; LMR="000" +#else + (0x122 << 13) | (0 << 11) | (0 << 4), //SMR reset DLL, CL=2, BL=4; LMR="000" +#endif + (0x400 << 13) | (0 << 11) | (2 << 4), //A10=1; PRECHARGE ALL="010" + (0x000 << 13) | (0 << 11) | (1 << 4), //AUTO REFRESH="001" + (0x000 << 13) | (0 << 11) | (1 << 4), //AUTO REFRESH="001 +#ifndef DDR_BL4 + (0x021 << 13) | (0 << 11) | (0 << 4) //clear DLL, CL=2, BL=2; LMR="000" +#else + (0x022 << 13) | (0 << 11) | (0 << 4) //clear DLL, CL=2, BL=4; LMR="000" +#endif +#else // LPDDR + (0x000 << 13) | (0 << 11) | (7 << 4), //CKE=1; NOP="111" + (0x000 << 13) | (0 << 11) | (7 << 4), //NOP="111" after 200 uS + (0x400 << 13) | (0 << 11) | (2 << 4), //A10=1; PRECHARGE ALL="010" + (0x000 << 13) | (0 << 11) | (1 << 4), //AUTO REFRESH="001" + (0x000 << 13) | (0 << 11) | (1 << 4), //AUTO REFRESH="001" + (0x021 << 13) | (0 << 11) | (0 << 4), //SMR CL=2, BL=2; LMR="000" + (0x000 << 13) | (1 << 11) | (0 << 4), //EMR BA="01"; LMR="000" Full strength full array + (0x000 << 13) | (0 << 11) | (7 << 4) //NOP="111" after ? uS +#endif +}; + +int +ddr_init (void) +{ + volatile int i, j, k = 0; + for (i = 0; i < sizeof (DdrInitData) / sizeof (int); ++i) + { + MemoryWrite (DDR_BASE + DdrInitData[i], 0); + for (j = 0; j < 4; ++j) + ++k; + } + for (j = 0; j < 100; ++j) + ++k; + k += MemoryRead (DDR_BASE); //Enable DDR + return k; +} + +#endif /* NO_DDR */ + +void +led(int v) +{ + LEDPORT = v; +} + +void +lcd_data(unsigned int v) +{ + while((LCDDATA) & 1) {led(0x81); led(0x82);} + LCDDATA = v; +} + +void +lcd_inst(unsigned int v) +{ + while((LCDDATA) & 1) {led(0x83); led(0x84);} + LCDINST = v; +} + +void +lcd_loc(unsigned int x, unsigned int y) +{ + lcd_inst(0xB0 | (y & 3)); + lcd_inst(0x10 | (((x*6) & 0xf0) >> 4)); + lcd_inst(0x00 | ((x*6) & 0x0f)); +} + +void +lcd_puts(char *s) +{ + int i, j; + unsigned char v[4]; + unsigned int *l = v; + + i = 0; + for (;*s;s++) { + for (j=0; j<6; j++) { + v[i++] = j == 5 ? 0 : font[(*s - FONT5X7_START)*5 + j]; + if (i>3) { + lcd_data(*l); + i = 0; + } + } + } + for (;i<4;i++) v[i] = 0; + lcd_data(*l); +} + +unsigned char lcd_init[] = { 0x40, 0xA1, 0xC0, 0xA6, 0xA2, 0x2F, 0xF8, 0x00, 0x23, 0x81, 0x1F, 0xAC, 0x00, 0xAF, 0xFF }; + +void +main_sh (void) +{ + volatile int i; + led(0x40); + + uart_set_baudrate (); + led(0x042); + +#ifndef NO_TESTS + putstr ("CPU tests passed\n"); + led(0x043); +#endif + +#ifndef NO_DDR + putstr ("DDR Init\n"); + led(0x042); + ddr_init (); +#endif /* NO_DDR */ + + putstr ("GDB Stub for HS-2J0 SH2 ROM\n"); + putstr (version_string); + led(0x50); + + for (i=0; lcd_init[i] != 0xff; i++) lcd_inst(lcd_init[i]); + + lcd_loc(0, 1); + lcd_puts("Hello 123!"); + + for (i=0; i<8; i++) { + lcd_data( + (1<<(i+0 )) | + (1<<(i+8 )) | + (1<<(i+16)) | + (1<<(i+24))); + } + led(0x51); + + for (i=0; i<800; i++) {} + led(0x55); + for (i=0; i<800; i++) {} + led(0xaa); + + for (;;) { + for (i=0; i<1200000; i++) {} + led(0x55); + for (i=0; i<1200000; i++) {} + led(0xaa); + } +}