/shark/trunk/oslib/examples/biosdemo.c |
---|
29,13 → 29,57 |
#include <ll/stdlib.h> |
#define T 1000 |
#if 1 |
#define WAIT() for (w = 0; w < 0xFFFFFFFF; w++) |
#else |
#define WAIT() for (w = 0; w < 0xFFFFF; w++) |
#endif |
static unsigned long int w; |
#define __VM86__ |
#ifdef __VM86__ |
//void emulate(void) |
void emulate(DWORD intnum, struct registers r) |
{ |
TSS *vm86_tss; |
DWORD *bos; |
DWORD isr_cs, isr_eip; |
WORD *old_esp; |
DWORD *IRQTable_entry; |
CONTEXT c = get_TR(); |
vm86_tss = vm86_get_tss(); |
bos = (DWORD *)vm86_tss->esp0; |
if (c == X_VM86_TSS) { |
/* |
message("Entering ESP: %lx (= 0x%lx?)\n", |
(DWORD)(tos + 9), vm86_tss->esp0); |
message("Old EIP: 0x%lx 0x%lx\n", *(tos + 9), *(bos - 9)); |
message("Old CS: 0x%x 0x%x\n", (WORD)(*(tos + 10)), (WORD)*(bos - 8)); |
message("Old EFlags: 0x%lx 0x%lx\n", *(tos + 11), *(bos - 7)); |
message("Old ESP: 0x%lx 0x%lx\n", *(tos + 12), *(bos - 6)); |
message("Emulate, please!!!\n"); |
*/ |
old_esp = (WORD *)(*(bos - 6) + (*(bos - 5) << 4)); |
// *(old_esp - 1) = /*(WORD)(*(bos - 7))*/ CPU_FLAG_VM | CPU_FLAG_IOPL; |
r.flags = CPU_FLAG_VM | CPU_FLAG_IOPL; |
*(old_esp - 2) = (WORD)(*(bos - 8)); |
*(old_esp - 3) = (WORD)(*(bos - 9)); |
*(bos - 6) -= 6; |
/* We are emulating INT 0x6d */ |
IRQTable_entry = (void *)(0L); |
isr_cs= ((IRQTable_entry[0x6d]) & 0xFFFF0000) >> 16; |
isr_eip = ((IRQTable_entry[0x6d]) & 0x0000FFFF); |
/* |
message("I have to call 0x%lx:0x%lx\n", isr_cs, isr_eip); |
*/ |
*(bos - 8) = isr_cs; |
*(bos - 9) = isr_eip; |
} |
} |
void vm86BIOSDemo(void) |
{ |
X_REGS16 ir,or; |
72,9 → 116,22 |
register int i; |
/* Set video mode */ |
ir.h.ah = 0; |
#if 0 |
ir.h.al = 0x03; |
vm86_callBIOS(0x10,&ir,&or,&sr); |
ir.h.ah = 0x0C; |
ir.h.al = i % 16; |
ir.x.bx = 0; |
ir.x.dx = i+40; |
ir.x.cx = i+100; |
vm86_callBIOS(0x10,&ir,&or,&sr); |
#else |
ir.h.al = 0x12; |
vm86_callBIOS(0x10,&ir,&or,&sr); |
#if 1 |
/* Put some pixels */ |
for (i = 0; i < 200; i++) { |
ir.h.ah = 0x0C; |
112,7 → 169,13 |
message("CX=%x\n",c); |
for (i = 0; i < 0x4F000; i++); |
#ifdef __VM86__ |
vm86_init(); |
vm86_init(); |
l1_int_bind(0x6d, emulate); |
/* |
l1_irq_bind(0x6d, emulate); |
*/ |
BIOSDemo(); |
#else |
XBIOSDemo(); |
/shark/trunk/oslib/examples/mbdemo.c |
---|
36,6 → 36,7 |
struct multiboot_info *mbi; |
DWORD lbase, hbase; |
DWORD lsize, hsize; |
int eXtender = 0; |
sp1 = get_SP(); |
cli(); |
54,6 → 55,12 |
message("LowLevel started...\n"); |
message("MultiBoot informations:\n"); |
if (mbi->flags & MB_INFO_BOOT_LOADER_NAME) { |
message("Loader Name provided: %s\n", (char *)mbi->boot_loader_name); |
if (*((char *)(mbi->boot_loader_name)) == 'X') { |
eXtender = 1; |
} |
} |
if (mbi->flags & MB_INFO_MEMORY) { |
message("\tMemory informations OK\n"); |
lsize = mbi->mem_lower * 1024; |
60,7 → 67,7 |
hsize = mbi->mem_upper * 1024; |
message("Mem Lower: %lx %lu\n", lsize, lsize); |
message("Mem Upper: %lx %lu\n", hsize, hsize); |
if (mbi->flags & MB_INFO_USEGDT) { |
if (eXtender) { |
lbase = mbi->mem_lowbase; |
hbase = mbi->mem_upbase; |
} else { |
92,7 → 99,7 |
if (mbi->flags & MB_INFO_MEM_MAP) { |
message("\tMemory map provided\n"); |
} |
if (mbi->flags & MB_INFO_USEGDT) { |
if (eXtender) { |
message("\tLoaded through X\n"); |
} |
cli(); |
/shark/trunk/oslib/examples/vmdemo.c |
---|
24,6 → 24,9 |
#include <ll/ll.h> |
#define T 1000 |
int a; /* This must be global, otherwise the compiler optimization will |
remove the division by 0... |
*/ |
int main (int argc, char *argv[]) |
{ |
53,6 → 56,7 |
return 1; |
*/ |
l1_init(); |
a = 1 / 0; /* Test the exception handler... */ |
l1_end(); |
return 1; |
/shark/trunk/oslib/examples/makefile |
---|
10,7 → 10,7 |
all: mbdemo.xtn timetest.xtn eventdem.xtn vmdemo.xtn \ |
ctxswdem.xtn scheddem.xtn cpudemo.xtn biosdemo.xtn \ |
asdemo.xtn |
asdemo.xtn kerndem.xtn |
%.ftp: %.xtn |
ncftpput -u ll -p example thorin . $< |
26,6 → 26,10 |
# Demo |
# |
kerndem.xtn: syscalls.o $(LIB_PATH)/libhc.a $(LIB_PATH)/libhm.a $(LIB_PATH)/libhx.a $(LIB_PATH)/libkl.a |
$(LD) $(LINK_OPT) $(LIB_PATH)x0.o syscalls.o --start-group -lhc -lhm -lhx -lkl -lcons --end-group -o $@ |
%.xtn : %.o $(LIB_PATH)/libhc.a $(LIB_PATH)/libhm.a $(LIB_PATH)/libhx.a $(LIB_PATH)/libkl.a |
$(LD) $(LINK_OPT) $(LIB_PATH)x0.o $< --start-group -lhc -lhm -lhx -lkl --end-group -o $@ |
$(LD) $(LINK_OPT) $(LIB_PATH)x0.o $< --start-group -lhc -lhm -lhx -lkl -lcons --end-group -o $@ |
# $(LD) $(LINK_OPT) $(LIB_PATH)x0.o $< --start-group -lhc -lhx -lkl --end-group -o $@ |