2.2 KiB
2.2 KiB
Honeylisp
Introduction
- 286 project
- Honeylisp vision
Assembler
What is an assembler?
- I thought the hard part was going to be converting mnemonics to bytes
- Turns out the hard part is actually converting labels to bytes
- zero-page instructions are a different size!
How it works
- Represent each opcode as a Fennel data literal
- nest blocks arbitrarily - "lexical scope"
- multi-pass
VM
- Forth-ish stack machine
- "direct threaded" inner interpreter
- extend assembler with :vm directive
- "immediate words" are just Fennel functions
Lite
- Minimal extensible text editor built in Lua
- love2d port
Custom Editors
- imgui style
- show tile editor with map editor
- font + portrait editors based on tile editor
- generate bytes / code with fennel functions! (maps, gfx, etc)
MAME Upload
- Nod to Dagen Brock's 2016 KFest talk on GSPlus https://www.youtube.com/watch?v=1LzCmpAanpE
- Integrated Jeejah networked REPL into MAME
- Can send arbitrary Fennel code to MAME to control it
- Poke blocks of memory over the network (nREPL uses bencode from bittorrent, which allows this to be fairly low overhead)
Live Code Injection
- The assembled program is an object in memory, which we can extend interactively
- We can write new code and poke it into memory while the old code is running!
- Game code is a loop - we can have a "sync point" at the top of the loop where the state of the game is well-known
- (demo switching video modes, printing debug output, making sounds)
Hot Reload
- Because the assembled program is an object in memory
Tape generation
- Benefit of building tools in a game engine - I can just output audio
- Extended assembler to accept BASIC tokens and generate linked list of BASIC lines, so the whole thing could be bootstrapped
Disk generation
- Take a ProDOS disk image, parse it, and add files to it
- Generate loader program, rest of game can be loaded as an overlay
- New disk image is generated on every build because why not? It's fast
Neu] [ower
- Fun tricks: Random number generator (never used for gameplay purposes) = just dump a couple dozen random bytes
8-Bitsy
- Full "code-optional" environment
- Kind of awkward to actually use, but it works!
- Son drew some art
- Improvisational game design!