aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/exceptions/svc.S11
-rw-r--r--src/tests/test.c25
2 files changed, 8 insertions, 28 deletions
diff --git a/src/exceptions/svc.S b/src/exceptions/svc.S
index f833b5b..ce3e556 100644
--- a/src/exceptions/svc.S
+++ b/src/exceptions/svc.S
@@ -6,11 +6,15 @@ svc:
// Get the SVC Exception #
ldr r0, [lr, #-4]
bic r0, #0xFF000000
- cmp r0, #9
// Check it is within our defined SVC
+ cmp r0, #7
+ adrle r3, svc_table_1
+ ldrle pc, [r3, r0, LSL #2]
+ sub r0, #8
+ cmp r0, #7
bgt svc_exit
//// Jump to the appropriate Call
- adr r3, svc_table
+ adr r3, svc_table_2
ldr pc, [r3, r0, LSL #2]
svc_000000: // SYS_YIELD
bl yield
@@ -127,7 +131,7 @@ svc_000009: // SYS_TIME_2
svc_exit:
ldmfd sp!, {r0-r12,pc}^
-svc_table:
+svc_table_1:
.word svc_000000
.word svc_000001
.word svc_000002
@@ -136,5 +140,6 @@ svc_table:
.word svc_000005
.word svc_000006
.word svc_000007
+svc_table_2:
.word svc_000008
.word svc_000009
diff --git a/src/tests/test.c b/src/tests/test.c
index c3e5c83..b6ba5d3 100644
--- a/src/tests/test.c
+++ b/src/tests/test.c
@@ -41,31 +41,6 @@ void test_entry(void)
// Test 1: Tracing Time
dt = 0;
- ti = 0;
- tf = 0;
- int t1, t2;
- for(int i = 0; i < TEST_COUNT; i++) {
- sys0_32(SYS_TIME_2, &tf);
- sys0_32(SYS_TIME_2, &ti);
- dt += tf-ti;
- if ((tf-ti) < TEST_BIN_COUNT) {
- bins[(tf-ti)]++;
- }
- }
- for (int i = 0; i < TEST_BIN_COUNT; i++) {
- draw_hex32(tidx, y+6+i, i);
- draw_string(tidx+9, y+6+i, TEST_STR_CLR);
- draw_u10(tidx+9, y+6+i, bins[i]);
- bins[i] = 0;
- }
- draw_string(tidx, y+5, " ");
- len = draw_u10(tidx, y+5, dt/TEST_COUNT);
- draw_u10(tidx+len+1, y+5, dt%TEST_COUNT);
- tidx += TEST_RESULT_WIDTH;
- draw_hex32(0, y-1, nextpid);
-
- // Test 1: Tracing Time
- dt = 0;
for(int i = 0; i < TEST_COUNT; i++) {
sys0_32(SYS_TIME_2, &tf);
sys0_32(SYS_TIME_2, &ti);