I hereby claim:
- I am milesrout on github.
- I am milesrout (https://keybase.io/milesrout) on keybase.
- I have a public key ASB4vus1fC33TdrjMv_Hei3QwfDQl5e4f2PgApb8QWRuiQo
To claim this, I am signing this object:
I hereby claim:
To claim this, I am signing this object:
DCPU-16e Specification | |
Version 1.3 | |
=== SUMMARY ==================================================================== | |
* 16 bit words | |
* 8 banks of 0x10000 words of ram, numbered 0-7 | |
* 8 registers (A, B, C, X, Y, Z, I, J) |
The reason that the DCPU-16e supports both a global access table (GAT) and a local access table (LAT) is that the DCPU-16e supports multiple memory banks. As such, the global access table provides universal access restrictions (that is, entries apply to every memory bank) while the local access table entries that apply just to the memory bank that the local access table is on. Every memory bank has one local access table.
The DCPU-16e has eight memory banks numbered 000 to 111. There are three ways to use access tables. Firstly, you can simply not use them. This essentially disables the kernel/user mode distinction. If this is done, the INT and RFI instructions behave as they do on the DCPU-16. This is good for learning, but is quite insecure. Secondly, you can choose to only use the global access table. This means that the same access rules are applied to all memory banks equally. Thirdly, you can use both global and local access tables. Note that the local access table
;;; as | |
;;; | |
;;; an assembler for the DCPU-16 assembly language | |
;;; | |
;;; accepts a file of no more than 512 words indicating the sectors on disk that hold a particular file. | |
;;; then reads those sectors in the order given, treating them as assembler source | |
;;; then assembles said source to produce a DCPU-16 binary. | |
;;; the supported binary format is an image that can be loaded directly from a disk by a bootloader: | |
;;; it contains an 'initial sector' which is written to the first part of the disk and that loads the rest | |
;;; of the binary. |
namespace std { | |
template< class... > | |
using void_t = void; | |
namespace experimental { | |
struct nonesuch { | |
nonesuch() = delete; | |
~nonesuch() = delete; | |
nonesuch(nonesuch const&) = delete; | |
void operator=(nonesuch const&) = delete; |
int successor(int x) { | |
return x + 1; | |
} | |
future<int> successor_async(int x) { | |
promise<decltype(x + 1)> p; | |
thread([] { | |
p.set_value(x + 1); | |
}).detach(); | |
return p.get_future(); |
Procedural Task/Quest Generation | |
1. Generate world | |
2. Populate world | |
3. Generate tasks | |
Generate World | |
1. Elevation | |
- Perlin noise? |
bool operator<(const Version& other) { | |
if (major < other.major) | |
return true; | |
if (minor < other.minor) | |
return true; | |
if (revision < other.revision) | |
return true; | |
if (build < other.build) | |
return true; | |
return false; |
#[macro_use] | |
mod macros { | |
#[macro_export] | |
macro_rules! prop { | |
(($($t:tt)*)) => (prop!($($t)*)); | |
(T) => (Proposition::True); | |
(F) => (Proposition::False); | |
(!$e:tt) => (Proposition::Not(box prop!($e))); | |
($e:tt ^ $f:tt) => (Proposition::And(box prop!($e), box prop!($f))); | |
($e:tt v $f:tt) => (Proposition::Or(box prop!($e), box prop!($f))); |
miles@laptop:~/Projects/tableaux $ rustc test.rs && ./test | |
T | |
F | |
~(T) | |
~(F) | |
(T) ^ (T) | |
(T) v (T) | |
(T) -> (T) | |
((T) v (T)) ^ (T) | |
True |