mirror of
https://github.com/emptyynes/LIVM.git
synced 2025-01-06 16:42:25 +03:00
Delete device.c
This commit is contained in:
parent
3cbd326e03
commit
53772f1033
1 changed files with 0 additions and 111 deletions
111
device.c
111
device.c
|
@ -1,111 +0,0 @@
|
||||||
#define opargs uint64_t a, uint64_t b, uint64_t c
|
|
||||||
typedef void opfunc(opargs);
|
|
||||||
typedef uint64_t rdfunc(opargs);
|
|
||||||
|
|
||||||
struct Device {
|
|
||||||
uint64_t* buffer;
|
|
||||||
uint64_t* data;
|
|
||||||
uint64_t* rdata;
|
|
||||||
opfunc* offer;
|
|
||||||
opfunc* wait;
|
|
||||||
opfunc* out;
|
|
||||||
rdfunc* read;
|
|
||||||
};
|
|
||||||
|
|
||||||
void d_null_writef(opargs) {}
|
|
||||||
uint64_t d_null_readf(opargs) {}
|
|
||||||
|
|
||||||
struct Device d_null = {
|
|
||||||
.buffer = NULL,
|
|
||||||
.data = NULL,
|
|
||||||
.rdata = NULL,
|
|
||||||
.offer = d_null_writef,
|
|
||||||
.wait = d_null_writef,
|
|
||||||
.out = d_null_writef,
|
|
||||||
.read = d_null_readf
|
|
||||||
};
|
|
||||||
|
|
||||||
void d_clock_offer(opargs) {}
|
|
||||||
void d_clock_out(opargs) {}
|
|
||||||
void d_clock_wait(opargs) {
|
|
||||||
usleep(a * 1000);
|
|
||||||
}
|
|
||||||
uint64_t d_clock_read(opargs) {
|
|
||||||
return (uint64_t)clock();
|
|
||||||
}
|
|
||||||
|
|
||||||
struct Device d_clock = {
|
|
||||||
.buffer = NULL,
|
|
||||||
.data = NULL,
|
|
||||||
.rdata = NULL,
|
|
||||||
.offer = d_clock_offer,
|
|
||||||
.wait = d_clock_wait,
|
|
||||||
.out = d_clock_out,
|
|
||||||
.read = d_clock_read
|
|
||||||
};
|
|
||||||
|
|
||||||
# ifdef CONSOLE_D
|
|
||||||
void d_console_offer(opargs);
|
|
||||||
void d_console_out(opargs);
|
|
||||||
void d_console_wait(opargs);
|
|
||||||
uint64_t d_console_read(opargs);
|
|
||||||
|
|
||||||
struct Device d_console = {
|
|
||||||
.buffer = (uint64_t[1024]){ [0 ... 1023] = 0 },
|
|
||||||
.data = (uint64_t[800]){ [0 ... 799] = 0 },
|
|
||||||
.rdata = (uint64_t[1]){ 0 },
|
|
||||||
.offer = d_console_offer,
|
|
||||||
.wait = d_console_wait,
|
|
||||||
.out = d_console_out,
|
|
||||||
.read = d_console_read
|
|
||||||
};
|
|
||||||
|
|
||||||
void d_console_offer(opargs) {
|
|
||||||
if (a == 0) return;
|
|
||||||
uint64_t* cursor = d_console.buffer;
|
|
||||||
uint8_t* data = (uint8_t*)(d_console.buffer + 1);
|
|
||||||
if (c == 1) {
|
|
||||||
(*cursor) = a;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (*cursor >= 3200) return;
|
|
||||||
if (a == 1)
|
|
||||||
data[*cursor++] = b;
|
|
||||||
else {
|
|
||||||
if ((*cursor + a) >= 3200) return;
|
|
||||||
for (uint64_t i = 0; i < a; i++)
|
|
||||||
data[(*cursor)++] = ramu8[b + i];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
void d_console_out(opargs) {
|
|
||||||
uint8_t* _data = (uint8_t*)(d_console.buffer + 1);
|
|
||||||
uint64_t* _data64 = (uint64_t*)_data;
|
|
||||||
for (uint64_t i = 0; i < 400; i++)
|
|
||||||
d_console.data[i] = _data64[i];
|
|
||||||
d_console.buffer[0] = 0;
|
|
||||||
printf("\e[H");
|
|
||||||
for (uint64_t i = 0; i < 40; i++) {
|
|
||||||
for (uint64_t j = 0; j < 80; j++) {
|
|
||||||
if (((uint8_t*)d_console.data)[j + i * 80])
|
|
||||||
putchar(((uint8_t*)d_console.data)[j + i * 80]);
|
|
||||||
else putchar(' ');
|
|
||||||
}
|
|
||||||
putchar('\n');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
void d_console_wait(opargs) {
|
|
||||||
d_console.rdata[0] = getchar();
|
|
||||||
}
|
|
||||||
uint64_t d_console_read(opargs) {
|
|
||||||
return d_console.rdata[0];
|
|
||||||
}
|
|
||||||
# else
|
|
||||||
# define d_console d_null
|
|
||||||
# endif
|
|
||||||
|
|
||||||
struct Device* vm_dev[2] = { &d_clock, &d_console };
|
|
||||||
|
|
||||||
# ifdef d_console
|
|
||||||
# undef d_console
|
|
||||||
# endif
|
|
||||||
#undef opargs
|
|
Loading…
Reference in a new issue