提交 2eea730a 编写于 作者: Z Zihao Yu

macro: add MAP

上级 2b723534
......@@ -10,4 +10,6 @@
#define concat4(x, y, z, w) concat3(concat(x, y), z, w)
#define concat5(x, y, z, v, w) concat4(concat(x, y), z, v, w)
#define MAP(c, f) c(f)
#endif
......@@ -9,25 +9,25 @@
static uint32_t *i8042_data_port_base;
// Note that this is not the standard
#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)
#define _KEYS(f) \
f(ESCAPE) f(F1) f(F2) f(F3) f(F4) f(F5) f(F6) f(F7) f(F8) f(F9) f(F10) f(F11) f(F12) \
f(GRAVE) f(1) f(2) f(3) f(4) f(5) f(6) f(7) f(8) f(9) f(0) f(MINUS) f(EQUALS) f(BACKSPACE) \
f(TAB) f(Q) f(W) f(E) f(R) f(T) f(Y) f(U) f(I) f(O) f(P) f(LEFTBRACKET) f(RIGHTBRACKET) f(BACKSLASH) \
f(CAPSLOCK) f(A) f(S) f(D) f(F) f(G) f(H) f(J) f(K) f(L) f(SEMICOLON) f(APOSTROPHE) f(RETURN) \
f(LSHIFT) f(Z) f(X) f(C) f(V) f(B) f(N) f(M) f(COMMA) f(PERIOD) f(SLASH) f(RSHIFT) \
f(LCTRL) f(APPLICATION) f(LALT) f(SPACE) f(RALT) f(RCTRL) \
f(UP) f(DOWN) f(LEFT) f(RIGHT) f(INSERT) f(DELETE) f(HOME) f(END) f(PAGEUP) f(PAGEDOWN)
#define _KEY_NAME(k) _KEY_##k,
enum {
_KEY_NONE = 0,
_KEYS(_KEY_NAME)
MAP(_KEYS, _KEY_NAME)
};
#define XX(k) [concat(SDL_SCANCODE_, k)] = concat(_KEY_, k),
#define SDL_KEYMAP(k) [concat(SDL_SCANCODE_, k)] = concat(_KEY_, k),
static uint32_t keymap[256] = {
_KEYS(XX)
MAP(_KEYS, SDL_KEYMAP)
};
#define KEY_QUEUE_LEN 1024
......
#include "cpu/rtl.h"
void rtl_compute_eflags(rtlreg_t *dest) {
rtl_li(dest, 0);
#define __f(X) \
rtl_shli(&t0, &cpu.X, concat(EFLAGS_BIT_, X)); \
#define ENCODE(flag) \
rtl_shli(&t0, &cpu.flag, concat(EFLAGS_BIT_, flag)); \
rtl_or(dest, dest, &t0);
__map_eflags(__f)
#undef __f
#define DECODE(flag) \
rtl_shri(&cpu.flag, src, concat(EFLAGS_BIT_, flag)); \
rtl_andi(&cpu.flag, &cpu.flag, 0x1);
void rtl_compute_eflags(rtlreg_t *dest) {
rtl_li(dest, 0);
MAP(_EFLAGS, ENCODE)
rtl_ori(dest, dest, 0x2);
}
void rtl_set_eflags(const rtlreg_t *src) {
#define __f(X) \
rtl_shri(&cpu.X, src, concat(EFLAGS_BIT_, X)); \
rtl_andi(&cpu.X, &cpu.X, 0x1);
__map_eflags(__f)
#undef __f
MAP(_EFLAGS, DECODE)
}
......@@ -16,13 +16,13 @@ enum { R_AL, R_CL, R_DL, R_BL, R_AH, R_CH, R_DH, R_BH };
#define EFLAGS_BIT_IF 9
#define EFLAGS_BIT_OF 11
#define __map_eflags(f) f(OF) f(IF) f(SF) f(ZF) f(CF)
#define __f(X) concat(EFLAGS_MASK_, X) = 1 << concat(EFLAGS_BIT_, X),
#define _EFLAGS(f) f(OF) f(IF) f(SF) f(ZF) f(CF)
#define __f(flag) concat(EFLAGS_MASK_, flag) = 1 << concat(EFLAGS_BIT_, flag),
enum {
__map_eflags(__f)
MAP(_EFLAGS, __f)
#undef __f
#define __f(X) | concat(EFLAGS_MASK_, X)
EFLAGS_MASK_ALL = 0 __map_eflags(__f)
#define __f(flag) | concat(EFLAGS_MASK_, flag)
EFLAGS_MASK_ALL = 0 MAP(_EFLAGS, __f)
#undef __f
};
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册