| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
| |
|
| |
|
| |
|
|
|
|
|
|
|
|
|
| |
Was confusing having numbers without an explicit base sometimes be hex
and sometimes not, based on their metadata.
By convention I don't bother with the '0x' for instructions, or for
single-digit numbers that are equal to their decimal representation. But
I could and it would still work.
|
|
|
|
| |
Clean up format of example programs.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This is a large patch, and there's a few things wrong with it:
a) Helpers are incredibly messy. I want to use has_metadata in layer 24,
but can't since it also does error checking. There must be a better
basis set of primitives for managing metadata.
b) Layer 22 introduces operands for checking, but programs with operands
don't actually run until layer 24. So I can't write non-error scenarios
in layer 22. That seems ugly. But if I try to introduce layer 24 first
there's nothing left to check after it.
I *could* play tricks with ordering layers vs transforms. Mu does that a
bit, but it becomes hard to mess with, so I'm trying to avoid that. My
current plan is for layers within an "abstraction level" to be run in
order. Higher layers will necessarily need to come before lower ones.
But hopefully this level of hierarchy will help manage the chaos.
c) The check for whether an instruction is all hex bytes makes me
nervous. I do want to check that an instruction that's just:
cd
tells the programmer that an operand is missing. The check I currently
have is likely not perfectly correct.
I *could* put layer 25 in its own commit. But I guess I'm not doing
that now.
We have a new example program: hello world!
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
We read() a character from stdin and write() it out to stdout, saving it
to a global variable in between.
ELF binaries are inefficient; you can ask for a low alignment, but the
kernel may not be able to handle it. If you set up a high alignment then
you end up wasting an increasing amount of space in each segment
because of the constraint that the offset bear some relationship with
the loaded address.
|
|
|
|
|
|
|
| |
Reorganize layers to introduce the translation workflow right at the start.
We also avoid duplicating parsing code. Programs are always parsed into
the `program` data structure.
|
|
|
|
|
|
|
|
| |
ex4 now writes to the (global) data segment, rather than trying to write
to the code segment.
We still need to specify the other segments in the generated ELF,
though.
|
|
Currently only runs in emulated mode. Likely a paging issue, writing
data to code page. I'm not checking the return value.
|