aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Common.mk3
-rw-r--r--src/cpu/irq.c16
-rw-r--r--src/graphics/lfb.c22
-rw-r--r--src/sys/core.c2
-rw-r--r--src/tests/test.c51
5 files changed, 52 insertions, 42 deletions
diff --git a/Common.mk b/Common.mk
index b2664b0..ecf10de 100644
--- a/Common.mk
+++ b/Common.mk
@@ -10,6 +10,7 @@ AUTO ?= 0
BSP ?= 2
DEBUG ?= 0
SILENT ?= 0
+DISK ?= /dev/sdc1
CROSS = arm-none-eabi
CC = ${CROSS}-gcc
@@ -110,4 +111,6 @@ test: clean build/kernel.elf
@./tests/run.sh
copy: clean build/kernel7.img
+ sudo mount -o umask=0 $(DISK) /mnt/sd0
sudo cp build/kernel7.img /mnt/sd0
+ sudo umount /mnt/sd0
diff --git a/src/cpu/irq.c b/src/cpu/irq.c
index 9e44009..e2a6773 100644
--- a/src/cpu/irq.c
+++ b/src/cpu/irq.c
@@ -55,12 +55,18 @@ void c_irq_handler(void)
}
}
// Check if System Time Compare 0 Triggered the Interrupt
- else if (*(unsigned long*)SYS_TIMER_CS == SYS_TIMER_SC_M0) {
- volatile unsigned long* timer_cs = (unsigned long*)SYS_TIMER_CS;
- volatile unsigned long* timer_chi = (unsigned long*)SYS_TIMER_CHI;
- volatile unsigned long* nexttime = (unsigned long*)SYS_TIMER_C0;
+ else if (*(volatile unsigned long*)SYS_TIMER_CS & SYS_TIMER_SC_M0) {
+ volatile unsigned long* timer_cs = (volatile unsigned long*)SYS_TIMER_CS;
+ volatile unsigned long* timer_chi = (volatile unsigned long*)SYS_TIMER_CHI;
+ volatile unsigned long* nexttime = (volatile unsigned long*)SYS_TIMER_C0;
+ static char timer_lock = 0;
+ if (!timer_lock) {
+ timer_lock = 1;
+ add_thread(test_entry, 0, 2);
+ timer_lock = 0;
+ }
+ *nexttime = *timer_chi + 30000000;
*timer_cs = SYS_TIMER_SC_M0;
- *nexttime = *timer_chi + 60000000;
}
}
// Check if CNTV triggered the interrupt
diff --git a/src/graphics/lfb.c b/src/graphics/lfb.c
index 8f7ad06..8c9c395 100644
--- a/src/graphics/lfb.c
+++ b/src/graphics/lfb.c
@@ -3,12 +3,9 @@
#include <graphics/glyphs.h>
#include <graphics/lfb.h>
#include <graphics/mbox.h>
-#include <graphics/philosopher_toad.h>
unsigned char *lfb; /* raw frame buffer address */
-//#define SCR_WIDTH 1024
-//#define SCR_HEIGHT 768
#define SCR_WIDTH 1920
#define SCR_HEIGHT 1080
@@ -92,21 +89,10 @@ void clear_screen(void)
void lfb_showpicture(void)
{
clear_screen();
- unsigned int x,y;
- unsigned char *ptr=lfb;
- char *data=toad_data, pixel[4];
-
- ptr = lfb + (gheight-toad_height)*gpitch + (gwidth-toad_width)*4;
- for(y=0;y<toad_height;y++) {
- for(x=0;x<toad_width;x++) {
- HEADER_PIXEL(data, pixel);
- // the image is in RGB. So if we have an RGB framebuffer, we can copy the pixels
- // directly, but for BGR we must swap R (pixel[0]) and B (pixel[2]) channels.
- *((unsigned int*)ptr)=gisrgb ? *((unsigned int *)&pixel) : (unsigned int)(pixel[0]<<16 | pixel[1]<<8 | pixel[2]);
- ptr+=4;
- }
- ptr+=gpitch-toad_width*4;
- }
+#define FWIDTH 240
+#define FHEIGHT 80
+ draw_cbox(SCR_WIDTH-FWIDTH, SCR_HEIGHT-FHEIGHT*2, FWIDTH, FHEIGHT, 0x0057b7);
+ draw_cbox(SCR_WIDTH-FWIDTH, SCR_HEIGHT-FHEIGHT, FWIDTH, FHEIGHT, 0xffd700);
}
void draw_cpixel(unsigned long lx, unsigned long ly, unsigned int c)
diff --git a/src/sys/core.c b/src/sys/core.c
index 4816d50..fbe0d59 100644
--- a/src/sys/core.c
+++ b/src/sys/core.c
@@ -19,7 +19,7 @@ void sysinit(void)
// Initialize System Globals
stimeh = *(unsigned long*)SYS_TIMER_CHI;
stimel = *(unsigned long*)SYS_TIMER_CLO;
- *(unsigned long*) SYS_TIMER_C0 = 60000000 + stimeh; // 60 second trigger
+ *(unsigned long*) SYS_TIMER_C0 = 3000000 + stimeh; // 11 second trigger
uart_init();
///...
diff --git a/src/tests/test.c b/src/tests/test.c
index bb1bf31..7f18627 100644
--- a/src/tests/test.c
+++ b/src/tests/test.c
@@ -1,5 +1,5 @@
#include <cpu.h>
-#include <drivers/uart.h>
+//#include <drivers/uart.h>
#include <graphics/lfb.h>
#include <lib/kmem.h>
#include <sys/core.h>
@@ -10,17 +10,20 @@
extern void atest(void);
void btest(void);
+static int x = 0;
+static int y = 13;
void test_entry(void)
{
- draw_string(0, 18, "Starting tests");
+ x = 0;
+ draw_string(0, y+4, "Starting tests");
unsigned long long ti, tf, dt=0;
for(int i = 0; i < 64; i++) {
sys0_64(SYS_TIME, &ti);
sys0_64(SYS_TIME, &tf);
dt += tf - ti;
}
- DRAW64(0, 19, dt/64);
- DRAW64(17, 19, dt%64);
+ DRAW64(0, y+5, dt/64);
+ DRAW64(17, y+5, dt%64);
// atest
add_thread(atest, 0, 0);
@@ -28,8 +31,8 @@ void test_entry(void)
sys0(SYS_YIELD);
sys0_64(SYS_TIME, &tf);
dt = tf - ti;
- DRAW64(34, 19, dt/64);
- DRAW64(34+17, 19, dt%64);
+ DRAW64(34, y+5, dt/64);
+ DRAW64(34+17, y+5, dt%64);
add_thread(btest, 0, 4);
}
@@ -43,37 +46,49 @@ void ctest4(void);
void ctest1(void)
{
- uart_string("1 Started\n");
- uart_string("1 Locking\n");
+ draw_cletter(x++, y+2, 'S', 0xFF0000);
+ //uart_string("1 Started\n");
+ draw_cletter(x++, y+2, 'L', 0xFF0000);
+ //uart_string("1 Locking\n");
lock(&testm);
add_thread(ctest3, 0, 2);
- uart_string("1 Unlocking\n");
+ draw_cletter(x++, y+2, 'U', 0xFF0000);
+ //uart_string("1 Unlocking\n");
unlock(&testm);
- uart_string("1 Finished\n");
+ draw_cletter(x++, y+2, 'F', 0xFF0000);
+ //uart_string("1 Finished\n");
}
void ctest2(void)
{
- uart_string("2 Started\n");
+ draw_cletter(x++, y+0, 'S', 0x0000FF);
+ //uart_string("2 Started\n");
add_thread(ctest4, 0, 3);
- uart_string("2 Locking\n");
+ draw_cletter(x++, y+0, 'L', 0x0000FF);
+ //uart_string("2 Locking\n");
lock(&testm);
- uart_string("2 Unlocking\n");
+ draw_cletter(x++, y+0, 'U', 0x0000FF);
+ //uart_string("2 Unlocking\n");
unlock(&testm);
- uart_string("2 Finished\n");
+ draw_cletter(x++, y+0, 'F', 0x0000FF);
+ //uart_string("2 Finished\n");
}
void ctest3(void)
{
- uart_string("3 Started\n");
+ draw_cletter(x++, y+1, 'S', 0x00FF00);
+ //uart_string("3 Started\n");
add_thread(ctest2, 0, 1);
- uart_string("3 Finished\n");
+ draw_cletter(x++, y+1, 'F', 0x00FF00);
+ //uart_string("3 Finished\n");
}
void ctest4(void)
{
- uart_string("4 Started\n");
- uart_string("4 Finished\n");
+ draw_cletter(x++, y+2, 'S', 0xAFAF00);
+ //uart_string("4 Started\n");
+ draw_cletter(x++, y+2, 'F', 0xAFAF00);
+ //uart_string("4 Finished\n");
}
void btest(void)