change apis

This commit is contained in:
Yanyan Jiang 2017-06-26 06:21:19 -04:00
parent 138e9d8c18
commit 2665e5b56d
7 changed files with 65 additions and 18 deletions

26
am/am.h
View File

@ -32,29 +32,29 @@ typedef struct _Area {
} _Area;
#define _KEYS(_) \
_(ESCAPE), _(F1), _(F2), _(F3), _(F4), _(F5), _(F6), _(F7), _(F8), _(F9), _(F10), _(F11), _(F12), \
_(GRAVE), _(1), _(2), _(3), _(4), _(5), _(6), _(7), _(8), _(9), _(0), _(MINUS), _(EQUALS), _(BACKSPACE), \
_(TAB), _(Q), _(W), _(E), _(R), _(T), _(Y), _(U), _(I), _(O), _(P), _(LEFTBRACKET), _(RIGHTBRACKET), _(BACKSLASH), \
_(CAPSLOCK), _(A), _(S), _(D), _(F), _(G), _(H), _(J), _(K), _(L), _(SEMICOLON), _(APOSTROPHE), _(RETURN), \
_(LSHIFT), _(Z), _(X), _(C), _(V), _(B), _(N), _(M), _(COMMA), _(PERIOD), _(SLASH), _(RSHIFT), \
_(LCTRL), _(APPLICATION), _(LALT), _(SPACE), _(RALT), _(RCTRL), \
_(UP), _(DOWN), _(LEFT), _(RIGHT), _(INSERT), _(DELETE), _(HOME), _(END), _(PAGEUP), _(PAGEDOWN)
_(ESCAPE) _(F1) _(F2) _(F3) _(F4) _(F5) _(F6) _(F7) _(F8) _(F9) _(F10) _(F11) _(F12) \
_(GRAVE) _(1) _(2) _(3) _(4) _(5) _(6) _(7) _(8) _(9) _(0) _(MINUS) _(EQUALS) _(BACKSPACE) \
_(TAB) _(Q) _(W) _(E) _(R) _(T) _(Y) _(U) _(I) _(O) _(P) _(LEFTBRACKET) _(RIGHTBRACKET) _(BACKSLASH) \
_(CAPSLOCK) _(A) _(S) _(D) _(F) _(G) _(H) _(J) _(K) _(L) _(SEMICOLON) _(APOSTROPHE) _(RETURN) \
_(LSHIFT) _(Z) _(X) _(C) _(V) _(B) _(N) _(M) _(COMMA) _(PERIOD) _(SLASH) _(RSHIFT) \
_(LCTRL) _(APPLICATION) _(LALT) _(SPACE) _(RALT) _(RCTRL) \
_(UP) _(DOWN) _(LEFT) _(RIGHT) _(INSERT) _(DELETE) _(HOME) _(END) _(PAGEUP) _(PAGEDOWN)
#define _KEY_NAME(k) _KEY_##k
#define _KEY_NAME(k) _KEY_##k,
enum {
_KEY_NONE = 0,
_KEYS(_KEY_NAME),
_KEYS(_KEY_NAME)
};
#define _EVENTS(_) \
_(IRQ_TIME), _(IRQ_IODEV), _(ERROR), _(SYSCALL) \
_(IRQ_TIME) _(IRQ_IODEV) _(PAGE_FAULT) _(ERROR) _(TRAP)
#define _EVENT_NAME(ev) _EVENT_##ev
#define _EVENT_NAME(ev) _EVENT_##ev,
enum {
_EVENT_NULL = 0,
_EVENTS(_EVENT_NAME),
_EVENTS(_EVENT_NAME)
};
typedef struct _RegSet _RegSet;
@ -104,7 +104,7 @@ extern _Screen _screen;
void _asye_init();
void _listen(_RegSet* (*l)(_Event ev, _RegSet *regs));
_RegSet *_make(_Area kstack, void *entry);
_RegSet *_make(_Area kstack, void *entry, void *arg);
void _trap();
void _idle();
void _ienable();

View File

@ -68,9 +68,9 @@ int _read_key() {
return ret;
}
#define XX(k) [SDL_SCANCODE_##k] = _KEY_##k
#define XX(k) [SDL_SCANCODE_##k] = _KEY_##k,
static int keymap[256] = {
_KEYS(XX),
_KEYS(XX)
};
static int event_thread(void *args) {

View File

@ -13,4 +13,9 @@ struct _RegSet {
ss0, esp0;
};
#define REG1(regs) ((regs)->eax)
#define REG2(regs) ((regs)->ebx)
#define REG3(regs) ((regs)->ecx)
#define REG4(regs) ((regs)->edx)
#endif

View File

@ -67,7 +67,7 @@ void irq_handle(TrapFrame *tf) {
if (tf->irq == 32) ev.event = _EVENT_IRQ_TIME;
else if (tf->irq == 33) ev.event = _EVENT_IRQ_IODEV;
else if (tf->irq == 0x80) {
ev.event = _EVENT_SYSCALL;
ev.event = _EVENT_TRAP;
ev.cause = args;
}
else if (tf->irq < 32) ev.event = _EVENT_ERROR;
@ -216,7 +216,8 @@ void _listen(_RegSet*(*h)(_Event, _RegSet*)) {
H = h;
}
_RegSet *_make(_Area stack, void *entry) {
_RegSet *_make(_Area stack, void *entry, void *arg) {
// TODO: pass arg
_RegSet *regs = (_RegSet*)stack.start;
regs->esp0 = reinterpret_cast<u32>(stack.end);
regs->cs = KSEL(SEG_KCODE);

View File

@ -5,7 +5,6 @@
Benchmark *current;
static char *start;
#define ARR_SIZE(a) (sizeof((a)) / sizeof((a)[0]))
// The benchmark list

4
tests/asyetest/Makefile Normal file
View File

@ -0,0 +1,4 @@
NAME = asyetest
SRCS = main.c
LIBS += klib
include $(AM_HOME)/Makefile.app

38
tests/asyetest/main.c Normal file
View File

@ -0,0 +1,38 @@
#include <am.h>
#include <klib.h>
_RegSet* handler(_Event ev, _RegSet *regs) {
switch (ev.event) {
case _EVENT_IRQ_TIME:
printf(".");
break;
case _EVENT_IRQ_IODEV:
while (1) {
int key = _read_key();
if (key == _KEY_NONE) break;
if (key & 0x8000) {
printf("[D:%d]", key ^ 0x8000);
} else {
int ntraps = REG4(regs);
REG4(regs) = 0;
printf("[U:%d]/[TRAPS:%d]", key, ntraps);
}
}
break;
case _EVENT_TRAP:
REG4(regs) ++;
break;
}
REG1(regs) = 0;
return regs;
}
int main(){
_ioe_init();
_asye_init();
_listen(handler);
_ienable();
_make(_heap, main, 0);
while (1) _trap();
return 0;
}