mirror of
https://github.com/j-core/j-core-ice40.git
synced 2026-01-11 23:52:49 +00:00
260 lines
6.8 KiB
C
260 lines
6.8 KiB
C
/*
|
|
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 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"
|
|
"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"
|
|
);
|
|
|