diff --git a/.cproject b/.cproject index 110acc4..77f76fe 100644 --- a/.cproject +++ b/.cproject @@ -22,7 +22,7 @@ - + diff --git a/.settings/language.settings.xml b/.settings/language.settings.xml index 16fb224..e583ced 100644 --- a/.settings/language.settings.xml +++ b/.settings/language.settings.xml @@ -4,7 +4,7 @@ - + diff --git a/zone1/main.c b/zone1/main.c index 6eb5fbb..6a93eca 100644 --- a/zone1/main.c +++ b/zone1/main.c @@ -53,19 +53,19 @@ __attribute__(( interrupt())) void trap_handler(void){ break; case 4 : printf("Load address missaligned : 0x%08x 0x%08x 0x%08x \n", (unsigned)mcause, (unsigned)mepc, (unsigned)mtval); - CSRW(mepc, mepc + (*(char *)mepc & (0b11 == 0b11 ? 4 : 2)) ); // skip + CSRW(mepc, mepc + (((*(char *)mepc) & 0b11) == 0b11 ? 4 : 2)); // skip faulty instruction return; case 5 : printf("Load access fault : 0x%08x 0x%08x 0x%08x \n", (unsigned)mcause, (unsigned)mepc, (unsigned)mtval); - CSRW(mepc, mepc+4); // skip + CSRW(mepc, mepc + (((*(char *)mepc) & 0b11) == 0b11 ? 4 : 2)); // skip faulty instruction return; case 6 : printf("Store/AMO address missaligned : 0x%08x 0x%08x 0x%08x \n", (unsigned)mcause, (unsigned)mepc, (unsigned)mtval); - CSRW(mepc, mepc + (*(char *)mepc & (0b11 == 0b11 ? 4 : 2)) ); // skip + CSRW(mepc, mepc + (((*(char *)mepc) & 0b11) == 0b11 ? 4 : 2)); // skip faulty instruction return; case 7 : printf("Store access fault : 0x%08x 0x%08x 0x%08x \n", (unsigned)mcause, (unsigned)mepc, (unsigned)mtval); - CSRW(mepc, mepc + (*(char *)mepc & (0b11 == 0b11 ? 4 : 2)) ); // skip + CSRW(mepc, mepc + (((*(char *)mepc) & 0b11) == 0b11 ? 4 : 2)); // skip faulty instruction return; case 8 : printf("Environment call from U-mode : 0x%08x 0x%08x 0x%08x \n", (unsigned)mcause, (unsigned)mepc, (unsigned)mtval); @@ -665,7 +665,7 @@ int main (void) { // UART RX event handler if (readline()){ - cmd_handler(); //printf("%s\n", inputline); + cmd_handler(); write(1, "\n\rZ1 > ", 7); inputline[0]='\0'; }