mirror of
https://github.com/j-core/j-core-ice40.git
synced 2026-04-30 21:38:18 +00:00
Add in the test rom
This commit is contained in:
263
testrom/entry.c
Normal file
263
testrom/entry.c
Normal file
@@ -0,0 +1,263 @@
|
||||
/*
|
||||
Copyright (c) 2001 by William A. Gatliff
|
||||
All rights reserved. bgat@billgatliff.com
|
||||
Copyright (c) 2009 by D. Jeff Dionne
|
||||
All rights reserved. jeff@uClinux.org
|
||||
|
||||
See the file COPYING for details.
|
||||
|
||||
This file is provided "as-is", and without any express
|
||||
or implied warranties, including, without limitation,
|
||||
the implied warranties of merchantability and fitness
|
||||
for a particular purpose.
|
||||
|
||||
The authors welcome feedback regarding this file.
|
||||
|
||||
Simple GDB ROM for SH J2 architecture devices
|
||||
*/
|
||||
|
||||
#include "gdb.h"
|
||||
#include "sh2.h"
|
||||
|
||||
void uart_tx(unsigned char c);
|
||||
unsigned char uart_rx();
|
||||
void main_sh();
|
||||
void alutest();
|
||||
|
||||
int gdb_putc (int c)
|
||||
{
|
||||
uart_tx(c & 0xff);
|
||||
return c & 0xff;
|
||||
}
|
||||
|
||||
int gdb_getc (void)
|
||||
{
|
||||
return uart_rx();
|
||||
}
|
||||
|
||||
|
||||
void gdb_monitor_onexit (void) {}
|
||||
|
||||
void gdb_startup (void)
|
||||
{
|
||||
main_sh();
|
||||
}
|
||||
|
||||
|
||||
__asm__(
|
||||
|
||||
".section .vect\n"
|
||||
".align 2\n"
|
||||
".global _vector_table\n"
|
||||
"_vector_table:\n"
|
||||
|
||||
" .long _start /* 0: power-on reset */\n"
|
||||
" .long _stack+0x2fc\n"
|
||||
" .long _start /* 2: manual reset */\n"
|
||||
" .long _stack+0x2fc\n"
|
||||
" .long _gdb_illegalinst_isr /* 4: general illegal instruction */\n"
|
||||
" .long _gdb_unhandled_isr /* 5: (reserved) */\n"
|
||||
" .long _gdb_illegalinst_isr /* 6: slot illegal instruction */\n"
|
||||
" .long _gdb_unhandled_isr /* 7: (reserved) */\n"
|
||||
" .long _gdb_unhandled_isr /* 8: (reserved) */\n"
|
||||
" .long _gdb_addresserr_isr /* 9: CPU address error */\n"
|
||||
" .long _gdb_addresserr_isr /* 10: DMAC/DTC address error */\n"
|
||||
|
||||
" .long _gdb_nmi_isr /* 11: NMI */\n"
|
||||
" .long _gdb_unhandled_isr /* 12: UBC */\n"
|
||||
" .long _gdb_unhandled_isr /* 13: (reserved) */\n"
|
||||
" .long _gdb_unhandled_isr /* 14: (reserved) */\n"
|
||||
" .long _gdb_unhandled_isr /* 15: (reserved) */\n"
|
||||
#if 0 /* using sh2i.c for interrupts test */
|
||||
" .long _gdb_pit_isr /* 16: PIT */\n"
|
||||
" .long _gdb_ihandler_emac /* 0x11: (EMAC interface) */\n"
|
||||
" .long _gdb_unhandled_isr /* 0x12: (reserved) */\n"
|
||||
" .long _gdb_unhandled_isr /* 0x13: (reserved) */\n"
|
||||
" .long _gdb_unhandled_isr /* 0x14: (reserved) */\n"
|
||||
|
||||
" .long _gdb_unhandled_isr /* 0x15: (reserved) */\n"
|
||||
" .long _gdb_unhandled_isr /* 0x16: (reserved) */\n"
|
||||
" .long _gdb_ihandler_uart1 /* 0x17: (UART Console) */\n"
|
||||
" .long _gdb_unhandled_isr /* 0x18: (reserved) */\n"
|
||||
#else /* interrupts default to save space */
|
||||
" .long _gdb_unhandled_isr /* 16: PIT */\n"
|
||||
" .long _gdb_unhandled_isr /* 0x11: (EMAC interface) */\n"
|
||||
" .long _gdb_unhandled_isr /* 0x12: (reserved) */\n"
|
||||
" .long _gdb_unhandled_isr /* 0x13: (reserved) */\n"
|
||||
" .long _gdb_unhandled_isr /* 0x14: (reserved) */\n"
|
||||
|
||||
" .long _gdb_unhandled_isr /* 0x15: (reserved) */\n"
|
||||
" .long _gdb_unhandled_isr /* 0x16: (reserved) */\n"
|
||||
" .long _gdb_unhandled_isr /* 0x17: (UART Console) */\n"
|
||||
" .long _gdb_unhandled_isr /* 0x18: (reserved) */\n"
|
||||
#endif
|
||||
" .long _gdb_unhandled_isr /* 25: (when AIC countdown reach 0) */\n"
|
||||
" .long _gdb_unhandled_isr /* 26: (reserved) */\n"
|
||||
" .long _gdb_unhandled_isr /* 27: (reserved) */\n"
|
||||
" .long _gdb_unhandled_isr /* 28: (reserved) */\n"
|
||||
" .long _gdb_unhandled_isr /* 29: (reserved) */\n"
|
||||
" .long _gdb_unhandled_isr /* 30: (reserved) */\n"
|
||||
|
||||
" .long _gdb_unhandled_isr /* 31: (reserved) */\n"
|
||||
" .long _gdb_trapa32_isr /* 32: trap 32 instruction */\n"
|
||||
" .long _gdb_trapa33_isr /* 33: trap 33 instruction */\n"
|
||||
" .long _gdb_trapa34_isr /* 34: trap 34 instruction */\n"
|
||||
" .long _gdb_unhandled_isr /* */\n"
|
||||
" .long _gdb_unhandled_isr /* */\n"
|
||||
" .long _gdb_unhandled_isr /* */\n"
|
||||
" .long _gdb_unhandled_isr /* */\n"
|
||||
" .long _gdb_unhandled_isr /* */\n"
|
||||
|
||||
" .long _gdb_unhandled_isr\n"
|
||||
" .long _gdb_unhandled_isr\n"
|
||||
" .long _gdb_unhandled_isr\n"
|
||||
" .long _gdb_unhandled_isr\n"
|
||||
" .long _gdb_unhandled_isr\n"
|
||||
" .long _gdb_unhandled_isr\n"
|
||||
" .long _gdb_unhandled_isr\n"
|
||||
" .long _gdb_unhandled_isr\n"
|
||||
" .long _gdb_unhandled_isr\n"
|
||||
" .long _gdb_unhandled_isr\n"
|
||||
|
||||
" .long _gdb_unhandled_isr\n"
|
||||
" .long _gdb_unhandled_isr\n"
|
||||
" .long _gdb_unhandled_isr\n"
|
||||
" .long _gdb_unhandled_isr\n"
|
||||
" .long _gdb_unhandled_isr\n"
|
||||
" .long _gdb_unhandled_isr\n"
|
||||
" .long _gdb_unhandled_isr\n"
|
||||
" .long _gdb_unhandled_isr\n"
|
||||
" .long _gdb_unhandled_isr\n"
|
||||
" .long _gdb_unhandled_isr\n"
|
||||
|
||||
" .long _gdb_unhandled_isr\n"
|
||||
" .long _gdb_unhandled_isr\n"
|
||||
" .long _gdb_unhandled_isr\n"
|
||||
" .long _gdb_unhandled_isr\n"
|
||||
""
|
||||
".section .text\n"
|
||||
".align 2\n"
|
||||
"_testjsr:\n"
|
||||
" mov.l jsr_leds, r0\n"
|
||||
" mov.l pio_addr, r1\n"
|
||||
" mov.l r0, @r1\n"
|
||||
" rts\n"
|
||||
" nop\n"
|
||||
""
|
||||
".section .text\n"
|
||||
".align 2\n"
|
||||
".global _start\n"
|
||||
".global start\n"
|
||||
"start:\n"
|
||||
"_start:\n"
|
||||
" nop\n"
|
||||
" mov.l start_leds, r0\n"
|
||||
" mov.l pio_addr, r1\n"
|
||||
" mov.l r0, @r1\n"
|
||||
" mov.l testjsr_k, r0\n"
|
||||
" jsr @r0\n"
|
||||
" nop\n"
|
||||
" mov.l pio_addr, r1\n"
|
||||
" mov.l start1_leds, r0\n"
|
||||
" mov.l r0, @r1\n"
|
||||
#ifndef NO_TESTS
|
||||
" mov.l testbra_k, r0\n"
|
||||
" jsr @r0\n"
|
||||
" nop\n"
|
||||
" mov.l testmov_k, r0\n"
|
||||
" jsr @r0\n"
|
||||
" nop\n"
|
||||
" mov.l testmov2_k, r0\n"
|
||||
" jsr @r0\n"
|
||||
" nop\n"
|
||||
" mov.l testmov3_k, r0\n"
|
||||
" jsr @r0\n"
|
||||
" nop\n"
|
||||
" mov.l testalu_k, r0\n"
|
||||
" jsr @r0\n"
|
||||
" nop\n"
|
||||
" mov.l testshift_k, r0\n"
|
||||
" jsr @r0\n"
|
||||
" nop\n"
|
||||
" mov.l testmul_k, r0\n"
|
||||
" jsr @r0\n"
|
||||
" nop\n"
|
||||
" mov.l testmulu_k, r0\n"
|
||||
" jsr @r0\n"
|
||||
" nop\n"
|
||||
" mov.l testmuls_k, r0\n"
|
||||
" jsr @r0\n"
|
||||
" nop\n"
|
||||
" mov.l testmull_k, r0\n"
|
||||
" jsr @r0\n"
|
||||
" nop\n"
|
||||
" mov.l testdmulu_k, r0\n"
|
||||
" jsr @r0\n"
|
||||
" nop\n"
|
||||
" mov.l testdmuls_k, r0\n"
|
||||
" jsr @r0\n"
|
||||
" nop\n"
|
||||
" mov.l testmulconf_k, r0\n"
|
||||
" jsr @r0\n"
|
||||
" nop\n"
|
||||
" mov.l testdiv_k, r0\n"
|
||||
" jsr @r0\n"
|
||||
" nop\n"
|
||||
" mov.l testmacw_k, r0\n"
|
||||
" jsr @r0\n"
|
||||
" nop\n"
|
||||
" mov.l testmacl_k, r0\n"
|
||||
" jsr @r0\n"
|
||||
#endif /* NO_TESTS */
|
||||
" nop\n"
|
||||
" mov #0, r0\n"
|
||||
" mov #1, r1\n"
|
||||
" mov #2, r2\n"
|
||||
" mov #3, r3\n"
|
||||
" mov #4, r4\n"
|
||||
" mov #5, r5\n"
|
||||
" mov #6, r6\n"
|
||||
" mov #7, r7\n"
|
||||
" mov #8, r8\n"
|
||||
" mov #9, r9\n"
|
||||
" mov #10, r10\n"
|
||||
" mov #11, r11\n"
|
||||
" mov #12, r12\n"
|
||||
" mov #13, r13\n"
|
||||
" mov #0, r14\n"
|
||||
" ldc r14, vbr\n"
|
||||
" ldc r14, gbr\n"
|
||||
" ldc r14, sr\n"
|
||||
" mov.l gdbstartup_k, r0\n"
|
||||
" jsr @r0\n"
|
||||
" nop\n"
|
||||
" trapa #32\n"
|
||||
" nop\n"
|
||||
".align 2\n"
|
||||
"gdbstartup_k: .long _gdb_startup\n"
|
||||
"gdbmonitor_k: .long _gdb_monitor\n"
|
||||
"testjsr_k: .long _testjsr\n"
|
||||
#ifndef NO_TESTS
|
||||
"testbra_k: .long _testbra\n"
|
||||
"testmov_k: .long _testmov\n"
|
||||
"testmov2_k: .long _testmov2\n"
|
||||
"testmov3_k: .long _testmov3\n"
|
||||
"testalu_k: .long _testalu\n"
|
||||
"testshift_k: .long _testshift\n"
|
||||
"testmul_k: .long _testmul\n"
|
||||
"testmulu_k: .long _testmulu\n"
|
||||
"testmuls_k: .long _testmuls\n"
|
||||
"testmull_k: .long _testmull\n"
|
||||
"testdmulu_k: .long _testdmulu\n"
|
||||
"testdmuls_k: .long _testdmuls\n"
|
||||
"testmulconf_k: .long _testmulconf\n"
|
||||
"testdiv_k: .long _testdiv\n"
|
||||
"testmacw_k: .long _testmacw\n"
|
||||
"testmacl_k: .long _testmacl\n"
|
||||
#endif /* NO_TESTS */
|
||||
"pio_addr: .long 0xABCD0000\n"
|
||||
"start_leds: .long 0x000000ff\n"
|
||||
"start1_leds: .long 0x0000004f\n"
|
||||
"jsr_leds: .long 0x00000011\n"
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user