[edit] I just realized that this is basically a complete rehash of Monday's post. I am stupid. Feel free to skip this if you already read the Monday entry. [/edit]
As I am prone to do, I've changed my mind on the prioritization of Epoch work in the near future.
Previously, my big push for Release 6 w…
As I am prone to do, I've changed my mind on the prioritization of Epoch work in the near future.
Previously, my big push for Release 6 w…
Wasn't quite as productive over the weekend as I hoped (dang social life keeps getting in the way) but I've made a fair bit of progress. Libraries can now register structures, function signatures, and constants with the VM. This means I can simply load the "Win32Util" library in an Epoch program, a…
My big area of focus lately has been on Exegen, the linker for Win32 Epoch programs. The utility no longer emits hard-coded resources, but reads a simple resource script file to define the resources. Similarly, the input/output files and locations are now controlled by a simple project file.
Here's …
Here's …
Since I actually managed to roll out of bed at a reasonable hour on this fine Saturday, I figured I'd put in a couple hours on the Epoch project.
So far most of my effort has been focused on the Exegen linker - specifically the resource compiler portion. It's relatively straightforward, but everythi…
So far most of my effort has been focused on the Exegen linker - specifically the resource compiler portion. It's relatively straightforward, but everythi…
Took a couple of hours today to clean up the disassembler table a bit and make it nice and formatted-looking. I also took some common instruction sequences and extracted them to "meta-instructions" to reduce the amount of duplication in the table. Overall I'm pretty happy with the results.
Aside fro…
Aside fro…
Alas, I spent most of the day off in the Big Blue Room having one of those "social life" thingies, so I didn't get a huge block of time to hack on Epoch today.
However, I did manage to get the table-driven disassembler finished; the same blob of macro magic now powers both the assembler and disassem…
However, I did manage to get the table-driven disassembler finished; the same blob of macro magic now powers both the assembler and disassem…
Latest Progress
I've finally managed to get the table-driven implementation of the assembler working smoothly; apparently there are a lot of weird corner cases in my assembly language [smile]
The plus side is that it's now much simpler to extend the assembler. The downside is that I'm still working a…
I've finally managed to get the table-driven implementation of the assembler working smoothly; apparently there are a lot of weird corner cases in my assembly language [smile]
The plus side is that it's now much simpler to extend the assembler. The downside is that I'm still working a…
Epoch Q&A
Thanks for everyone who's posted for the Q&A. I'm still considering it open, so fire away with all those questions. See the post a couple days prior to this one for the current set of questions and answers.
Current Status
There's something I've wanted to do ever since I wrote the fir…
Thanks for everyone who's posted for the Q&A. I'm still considering it open, so fire away with all those questions. See the post a couple days prior to this one for the current set of questions and answers.
Current Status
There's something I've wanted to do ever since I wrote the fir…
My biggest time sink over the last couple of days has been my new Epoch tool, Exegen (rhymes with oxygen). Exegen is a linker for Win32 Epoch programs. In essence, it automates the process of starting the VM and feeding it Epoch code.
To be specific, Exegen actually fabricates an .EXE file from scra…
To be specific, Exegen actually fabricates an .EXE file from scra…
Status Update
My big challenge at the moment is to finish the part of the toolchain that builds a final wrapped .EXE program from Epoch source code. I have the rest of the toolchain in place, and used some dirty hackery to generate my test .EXEs; however, this time I'm aiming to do it right and gene…
My big challenge at the moment is to finish the part of the toolchain that builds a final wrapped .EXE program from Epoch source code. I have the rest of the toolchain in place, and used some dirty hackery to generate my test .EXEs; however, this time I'm aiming to do it right and gene…
OK, I'm a lying little bugger and should be viciously and repeatedly punched in the face.
I decided to go ahead and package up R5 tonight. There's really not much left that needs to be implemented - at least, nothing that's worth delaying the release.
As mentioned in my previous post, R6 will basical…
I decided to go ahead and package up R5 tonight. There's really not much left that needs to be implemented - at least, nothing that's worth delaying the release.
As mentioned in my previous post, R6 will basical…
I started implementing bitwise operators in Epoch this afternoon, and stumbled across a couple of massive refactorings that I'd like to do. The specifics aren't interesting, but the bottom line is I can make the instruction-emitter part of the compiler work much more efficiently and consistently, e…
Amid a horde of distractions, I managed to hunt down and viciously kill the stack corruption bug. There were actually several minor bugs that all conspired to drag me out into undefined-behaviour-land.
The specifics aren't really interesting to anyone who isn't deeply familiar with the VM code (whic…
The specifics aren't really interesting to anyone who isn't deeply familiar with the VM code (whic…
Spent a few minutes earlier playing around with what I thought was the finalized version of nested structure support... and then I discovered a pretty serious bug. Somehow, the stack management is getting out of sync with the actual instructions, and the code is reading and writing data in effectiv…
As of 1650 hours today, this is where the release task list for R5 stands:
Requirements for Win32 Programming
Major implementation items
Requirements for Win32 Programming
- Named constants
- Hex literals
- Bitwise operation instructions
- Byte buffer entity
- (Some fixes to nested structures)
Major implementation items
- FileLoader::LoadScope needs tuple and structure support
- Fi…
It was quite a ride, and involved far more use of hex editors and obscure console commands than should be legal, but I've finally got it working - it is now possible to embed Epoch programs inside a stub EXE, allowing you to run purely from binary form - no source code required.
Give it a shot. It's…
Give it a shot. It's…
Not much to say, just wanted to note that I've finished the disassembler (aside from a few obscure instructions I haven't added yet).
This gives us five major tools for working with Epoch:
The Fugue virtual machine
EpochASM assembly language for the VM
Compiler that translates raw syntax into EpochASM
A…
This gives us five major tools for working with Epoch:
Spent the last couple of hours putting together an assembler for the VM bytecode format. This converts nice assembly language like this:
00DE4DD8 PUSH_INT 0
00DE4D58 PUSH 00DE43A0 INVOKE 00DD8D30
00DE5090 WRITE hInstance
00DE5D98 PUSH_INT 0
00DE5DF8 PUSH_STR 13 ScribbleClass
00DE5918 PUSH_STR 0
00DE5D50 …
Took a bit of effort, but I've managed to implement if/elseif/else chains in the Epoch VM. This makes it substantially simpler to write complex conditional chains.
It may seem odd that something so simple took a lot of work; surely it's just a matter of popping a couple of conditional jump statement…
It may seem odd that something so simple took a lot of work; surely it's just a matter of popping a couple of conditional jump statement…
Bask in the utter awesome:
As the screenshot says, this app is written 100% in the Epoch programming language. The complete listing is fairly long, but most of it is declaring API function calls and structure types. Eventually I'll add support for multi-file compilation, and we can then move all the…
As the screenshot says, this app is written 100% in the Epoch programming language. The complete listing is fairly long, but most of it is declaring API function calls and structure types. Eventually I'll add support for multi-file compilation, and we can then move all the…
Had another few spare hours today, so I sat down and made some improvements and did some bugfixing in the Fugue VM code.
I honestly don't remember everything I did - I'm deliberately not doing changelists for the first few releases of Epoch, because things are moving so fast and stuff is still subje…
I honestly don't remember everything I did - I'm deliberately not doing changelists for the first few releases of Epoch, because things are moving so fast and stuff is still subje…
Had some more free time today so I hacked in some support for nested structures. Basically, this lets you create a structure which has members that are also structures. The Win32 API is crammed full of these scenarios, so it's a critical piece of foundational work for doing actual programming in Ep…
This weekend I dug out the code for the Epoch language and started hacking around again. Several small things have been done, none of which are all that interesting; and one major thing is now functional.
I've completed the marshalling layer that allows external code to call back into Epoch code. Co…
I've completed the marshalling layer that allows external code to call back into Epoch code. Co…
Managing Your Memory - Part III
Tracking and Reporting Allocation Information
When we left off at Part II, we'd developed a method for tracking the memory used by our program. The design delegates all tracking to two functions, which comprise most of the public interface of the memory tracking module…
Tracking and Reporting Allocation Information
When we left off at Part II, we'd developed a method for tracking the memory used by our program. The design delegates all tracking to two functions, which comprise most of the public interface of the memory tracking module…
For those of you who have been following the Memory Management article series, I'd like to make a quick update.
As I've mentioned before on my journal here, I have been diagnosed with Bipolar I Disorder. Without getting into too much detail, this involves periods of my life where it is extraordinari…
As I've mentioned before on my journal here, I have been diagnosed with Bipolar I Disorder. Without getting into too much detail, this involves periods of my life where it is extraordinari…
Managing Your Memory - Part II
Capturing Allocation Information From Your Program
In the last post I discussed the rationale and general design of a memory management system for C++ programs. This time around, we'll talk about how to actually collect data on your memory usage from a running program.
T…
Capturing Allocation Information From Your Program
In the last post I discussed the rationale and general design of a memory management system for C++ programs. This time around, we'll talk about how to actually collect data on your memory usage from a running program.
T…
Managing Your Memory - Part I
Designing a robust memory management system for C++ software
This is the first part of a series of posts which I will be putting up here over the next several weeks or so (provided I can come up with the material for an actual series).
I will be discussing the topic of me…
Designing a robust memory management system for C++ software
This is the first part of a series of posts which I will be putting up here over the next several weeks or so (provided I can come up with the material for an actual series).
I will be discussing the topic of me…
Over the past week or so I've been working on a memory management system for our as-yet-unannounced project over at Egosoft.
We had several goals for the system, including the ability to debug common memory issues (leaks, double deletions, premature deletions, orphaned blocks, and so on) and present…
We had several goals for the system, including the ability to debug common memory issues (leaks, double deletions, premature deletions, orphaned blocks, and so on) and present…
The Epoch Manifesto
Answering all the big questions about who, what, when, and why.
Please note that this is highly forward-looking; it speaks in present tense, but most of this stuff won't be true until some point in the future.
What is Epoch, exactly?
Epoch is designed to be a full-featured general p…
Answering all the big questions about who, what, when, and why.
Please note that this is highly forward-looking; it speaks in present tense, but most of this stuff won't be true until some point in the future.
What is Epoch, exactly?
Epoch is designed to be a full-featured general p…
Took a break from Castle Crashers to play with Epoch. Didn't do much, but higher order functions now support reference parameters, meaning that this code is now possible:
entrypoint : () -> ()
{
integer(foo, 41)
operateref(foo, incrementref)
}
operateref : (integer ref(number), function op : (intege…
Advertisement
Popular Blogs
Advertisement