honeylisp/kfest2021.md

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!