about summary refs log tree commit diff stats
Commit message (Collapse)AuthorAgeFilesLines
* 4325Kartik Agaram2018-07-074-4/+11
|
* 4324 - new example: add first ten numbersKartik Agaram2018-07-072-0/+23
| | | | Result has to be small enough to fit in AL so exit() can return it.
* 4323Kartik Agaram2018-07-074-4/+33
|
* 4322Kartik Agaram2018-07-072-1/+1
|
* 4321Kartik Agaram2018-07-075-16/+46
| | | | | | | Modify helpers to run either external examples in the subx/teensy/ directory, or my own examples in subx/ directory. Now I have to say `run test5` instead of `run 5`, and so on.
* 4320Kartik Agaram2018-07-073-4/+3
| | | | Fix a few more typos in example programs.
* 4319Kartik Agaram2018-07-071-1/+1
|
* 4318Kartik Agaram2018-07-061-3/+2
| | | | | | | | Simpler. Now it's clear that what commit 4291 got wrong was an alignment-violating address for both the entrypoint and the start of the segment.
* 4317 - example program: simple additionKartik Agaram2018-07-062-0/+13
|
* 4316Kartik Agaram2018-07-065-11/+15
| | | | | | Second attempt at commit 4291. We'll now not copy the headers into memory, but we'll still allocate space for them. Still some security benefits, and I'm gaining confidence that I understand the ELF format.
* 4315Kartik Agaram2018-07-062-1/+1
|
* 4314Kartik Agaram2018-07-061-0/+1
|
* 4313 - some helpers for managing test binariesKartik Agaram2018-07-067-0/+105
| | | | I'm getting sick of hitting the <Tab> key.
* 4312 - fix one of the test binariesKartik Agaram2018-07-062-1/+1
|
* 4311 - subx running binaries with global variablesKartik Agaram2018-07-037-4/+77
| | | | | | | | | | | | | Learning to use the data segment. Currently, subx can only run the teensy files generated from flat assembler: test4 test5 test7 This is not a priority to fix. These files are just useful references to have around.
* 4310Kartik Agaram2018-07-031-0/+1
| | | | Temporarily do all prints in hex.
* 4309Kartik Agaram2018-07-034-6/+2
| | | | Simplify a couple of test programs.
* 4308Kartik Agaram2018-07-034-8/+8
| | | | | | | Undo 4291; turns out the generated ELF binary was no longer running natively on 32-bit Linux. Even with p_align set to 0. Agh, not worth my time.
* 4307Kartik Agaram2018-07-031-90/+4
| | | | Undo 4306.
* 4306 - architecture sketchKartik Agaram2018-07-021-4/+90
| | | | | | | Doesn't compile. I'm still not sure how to represent types and global variables. Types won't be in the final binary. But globals will. Perhaps I should first figure out what that looks like.
* 4305Kartik Agaram2018-07-011-0/+4
|
* 4304Kartik Agaram2018-07-012-6/+6
|
* 4303 - subx: first real transformKartik Agaram2018-07-013-5/+79
| | | | We'll see if this is useful. Mostly just stretching our legs.
* 4302 - a more elaborate pass-through phaseKartik Agaram2018-06-302-3/+35
| | | | Starting to work out the skeleton every phase needs to have.
* 4301 - confirm that translation framework worksKartik Agaram2018-06-301-0/+8
| | | | All tests continue to pass after a trivial translation phase.
* 4300 - get set up to unit test translatorKartik Agaram2018-06-302-1/+5
|
* 4299Kartik Agaram2018-06-302-2/+2
|
* 4298 - framework for translating SubX programsKartik Agaram2018-06-302-8/+47
|
* 4297Kartik Agaram2018-06-301-0/+1
|
* 4296Kartik Agaram2018-06-301-0/+4
|
* 4295Kartik Agaram2018-06-301-1/+1
|
* 4294Kartik Agaram2018-06-301-9/+9
|
* 4293Kartik Agaram2018-06-301-1/+1
|
* 4292 - start a Vim syntax file for our 'language'Kartik Agaram2018-06-302-0/+26
| | | | | As we add high-level constructs we'll start labeling low-level constructs as unsafe, and highlighting them in red in our editor.
* 4291 - stop copying the ELF header into memoryKartik Agaram2018-06-304-8/+8
| | | | | | | No need for it once the program's loaded. And we keep programs from running the header as code. This also simplifies the header computation in the translator.
* 4290Kartik Agaram2018-06-301-2/+3
| | | | Clarify a few happy accidents.
* 4289 - beginnings of a translator to ELFKartik Agaram2018-06-305-4/+107
| | | | | The source 'language' is still entirely open. We'll see how it evolves as I write programs in machine code.
* 4288Kartik Agaram2018-06-282-1/+20
| | | | Give subx too the recent support for running a single test.
* 4287Kartik Agaram2018-06-281-1/+1
| | | | Fix CI. Looks like 'std::' sometimes doesn't work.
* 4286Kartik Agaram2018-06-281-25/+33
| | | | Make prints uniform.
* 4285Kartik Agaram2018-06-281-1/+1
|
* 4284 - implement first syscall for subxKartik Agaram2018-06-282-0/+20
| | | | Hopefully I won't need much more than exit, read and write.
* 4283Kartik Agaram2018-06-281-1/+1
|
* 4282 - subx now loads teensy/test4Kartik Agaram2018-06-281-13/+53
| | | | | We're now parsing the ELF spec more closely and better handling multiple program header table entries.
* 4281Kartik Agaram2018-06-281-3/+3
|
* 4280 - fix test program to use subx instructionsKartik K. Agaram2018-06-272-4/+7
| | | | | I don't know how to tell nasm to generate an imm32. It's a minor stepping-stone anyway; just emit the machine code directly.
* 4279 - load_elf() now working on teensy/test5Kartik K. Agaram2018-06-271-2/+2
| | | | Turns out it was an open question I never got around to answering.
* 4278 - load_elf() isn't actually working yetKartik Agaram2018-06-2711-0/+76
| | | | Here's a few test binaries generated on 32-bit Linux.
* 4277 - make room for a 'compile' sub-commandKartik Agaram2018-06-272-5/+10
|
* 4276 - switching gears to subxKartik Agaram2018-06-271-1/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | New plan: spend some time learning to program in machine code atop subx, relying solely on a tiny subset of kernel-provided syscalls. Gradually introduce helpers. Helpers we're sure we don't need, so far: a) Nested expressions b) Garbage collection c) One-size-fits-all memory allocation primitive d) Function overloading and generics Helpers we're sure we need, so far: a) Dependency-injected versions of syscalls b) Tangling directives c) Statically checked types Workflow for a C translator from ascii to binary: a) run generated machine code atop subx (unit tests probably go here) b) emit machine code packaged as an ELF file c) check that the ELF binary runs natively d) check that the ELF binary can be unwrapped and run atop subx This is different from a conventional compiler because the 'HLL' is unconstrained. It is also different from Forth given the emphasis on types. We want a simple stack that also encourages code sharing between programmers. Conventional languages grow monotonically complex. Forth discourages code sharing; it is non-trivial to figure out the 'shape' of data a strange function expects on the stack.