change apis
This commit is contained in:
parent
138e9d8c18
commit
2665e5b56d
26
am/am.h
26
am/am.h
|
@ -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();
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -5,7 +5,6 @@
|
|||
Benchmark *current;
|
||||
static char *start;
|
||||
|
||||
|
||||
#define ARR_SIZE(a) (sizeof((a)) / sizeof((a)[0]))
|
||||
|
||||
// The benchmark list
|
||||
|
|
|
@ -0,0 +1,4 @@
|
|||
NAME = asyetest
|
||||
SRCS = main.c
|
||||
LIBS += klib
|
||||
include $(AM_HOME)/Makefile.app
|
|
@ -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;
|
||||
}
|
Loading…
Reference in New Issue