diff --git a/src/libsys/Makefile b/src/libsys/Makefile index 23e10fb..c356f9b 100644 --- a/src/libsys/Makefile +++ b/src/libsys/Makefile @@ -5,6 +5,7 @@ BOARD ?= ml402 TLB ?= no ENDIANESS ?= eb +DEBUGGER ?= mips ifeq ($(ENDIANESS),el) @@ -12,8 +13,21 @@ ifeq ($(ENDIANESS),el) else ENDIAN_FLAGS=-EB endif - -CFLAGS=$(ENDIAN_FLAGS) -g -msoft-float -O2 -march=r3000 -I. -Iboards/$(BOARD) -D$(BOARD) -DWITH_ROM_GDBSTUB + +ifeq ($(DEBUGGER),gdb) + DBG_FLAGS := -DWITH_GDB_STUB + DBG_OBJ := gdb_stub.o +endif +ifeq ($(DEBUGGER),mips) + DBG_FLAGS := + DBG_OBJ := mips_dbg.o mips_dis.o +endif +ifeq ($(DEBUGGER),rom) + DBG_FLAGS := -DWITH_ROM_DEBUGGER +endif + + +CFLAGS=$(ENDIAN_FLAGS) -g -msoft-float -O2 -march=r3000 -I. -Iboards/$(BOARD) -D$(BOARD) $(DBG_FLAGS) ifeq ($(TLB),yes) CFLAGS+=-DSYS_IO_BASE=0xAC000000 -DSDRAM_BASE=0x80000000 -DFLASH_BASE_IO=0xA4000000 -DFLASH_BASE_MEM=0x88000000 @@ -31,8 +45,8 @@ OBJDUMP=mips-elf-objdump OBJCOPY=mips-elf-objcopy FLASHGEN=flashgen -OBJS-ml402=$(addprefix $(BUILD_DIR)/, libsys.o xcpt.o syscalls.o cop0.o irq.o mips_dbg.o mips_dis.o mips_ps2.o mips_gfx.o console.o screen.o uart.o board.o gpio.o gdb_stub.o) -OBJS-denano=$(addprefix $(BUILD_DIR)/, libsys.o xcpt.o syscalls.o cop0.o irq.o mips_dbg.o mips_dis.o console.o uart.o board.o gpio.o gdb_stub.o) +OBJS-ml402=$(addprefix $(BUILD_DIR)/, libsys.o xcpt.o syscalls.o cop0.o irq.o $(DBG_OBJ) console.o uart.o board.o gpio.o mips_ps2.o mips_gfx.o screen.o) +OBJS-denano=$(addprefix $(BUILD_DIR)/, libsys.o xcpt.o syscalls.o cop0.o irq.o $(DBG_OBJ) console.o uart.o board.o gpio.o) all: $(BUILD_DIR) $(BUILD_DIR)/libsys.a diff --git a/src/libsys/boards/denano/board.c b/src/libsys/boards/denano/board.c index 3eb7a19..6a80d69 100644 --- a/src/libsys/boards/denano/board.c +++ b/src/libsys/boards/denano/board.c @@ -12,17 +12,29 @@ #include "../../regdef.h" extern uart_if_t uart_if[]; -extern void handle_exception (unsigned long *registers); -int gdb_stub(struct xcptcontext * xcp) +#ifdef WITH_GDB_STUB +extern void handle_exception (unsigned long *registers); +#else +extern int dbg_handler(struct xcptcontext * xcp); +#endif + +int dbg_stub(struct xcptcontext * xcp) __attribute__ ((section (".dbg_stub"))) __attribute__ ((used)); +int dbg_stub(struct xcptcontext * xcp) { +#ifdef WITH_GDB_STUB handle_exception((unsigned long *)xcp); return 0; +#else + return dbg_handler(xcp); +#endif + } -#ifdef WITH_ROM_GDBSTUB + +#ifdef WITH_ROM_DEBUGGER const fp_xcpt_t dbg_func = (fp_xcpt_t)0xbfc01fc0; #else -const fp_xcpt_t dbg_func = (fp_xcpt_t)gdb_stub; +const fp_xcpt_t dbg_func = (fp_xcpt_t)dbg_stub; #endif #define ARRAYSIZE(a) (sizeof(a)/sizeof(a[0])) diff --git a/src/libsys/cop0.c b/src/libsys/cop0.c index 50c845b..beca1ad 100644 --- a/src/libsys/cop0.c +++ b/src/libsys/cop0.c @@ -144,7 +144,6 @@ void DCACHE_invalidate_at(uint32_t* pPtr) ( "mtc0 %[pPtr], $31\n" "cop0 35\n" - "nop" // fix needed: don't work without nop on de-nano : : [pPtr] "r" (pPtr) ); diff --git a/src/libsys/screen.c b/src/libsys/screen.c index 2de688f..37d46d4 100755 --- a/src/libsys/screen.c +++ b/src/libsys/screen.c @@ -100,7 +100,7 @@ void cg_writechar(void const *pInst, char c) } -void cg_set_csr_x(vga_if_t *pIF, uint32_t coord) +void cg_set_csr_x(vga_if_t const *pIF, uint32_t coord) { assert (pIF); @@ -109,7 +109,7 @@ void cg_set_csr_x(vga_if_t *pIF, uint32_t coord) *pIF->pCSRX = coord; } -void cg_set_csr_y(vga_if_t *pIF, uint32_t coord) +void cg_set_csr_y(vga_if_t const *pIF, uint32_t coord) { assert (pIF); @@ -118,7 +118,7 @@ void cg_set_csr_y(vga_if_t *pIF, uint32_t coord) *pIF->pCSRY = coord; } -void cg_clr_line(vga_if_t *pIF) +void cg_clr_line(vga_if_t const *pIF) { assert (pIF); @@ -126,7 +126,7 @@ void cg_clr_line(vga_if_t *pIF) *pIF->pCTRL |= SYS_VGA_BIT_CLRLINE; } -void cg_clr_screen(vga_if_t *pIF) +void cg_clr_screen(vga_if_t const *pIF) { assert (pIF); diff --git a/src/libsys/screen.h b/src/libsys/screen.h index 2a357da..1c78719 100644 --- a/src/libsys/screen.h +++ b/src/libsys/screen.h @@ -26,10 +26,10 @@ typedef struct _svga_if_t extern "C" { #endif -void cg_set_csr_x(vga_if_t *pIF, uint32_t coord); -void cg_set_csr_y(vga_if_t *pIF, uint32_t coord); -void cg_clr_line(vga_if_t *pIF); -void cg_clr_screen(vga_if_t *pIF); +void cg_set_csr_x(vga_if_t const *pIF, uint32_t coord); +void cg_set_csr_y(vga_if_t const *pIF, uint32_t coord); +void cg_clr_line(vga_if_t const *pIF); +void cg_clr_screen(vga_if_t const *pIF); uint32_t Screen_get_resx(void); uint32_t Screen_get_resy(void); diff --git a/src/testbench_denano.c b/src/testbench_denano.c index 1d3e3cd..86228c3 100644 --- a/src/testbench_denano.c +++ b/src/testbench_denano.c @@ -833,6 +833,7 @@ int main (void) g_cnt = 1; gpio_init(&gpio_if, SYS_GPIO_0_BASE); + gpio_write(&gpio_if, GPIO_0_MASK_LED, GPIO_0_ALIGN_LED, GPIO_DIR_OFFSET, GPIO_0_MASK_LED); *pTim0_cnt = 0; *pTim1_cnt = 0;