Quality of life improvements

This commit is contained in:
Jeremy Penner 2020-11-19 21:25:02 -05:00
parent 74d184597e
commit 6e85ecda80
7 changed files with 35 additions and 1 deletions

29
README.md Normal file
View file

@ -0,0 +1,29 @@
# Honeylisp
## A hackable programming envrionment for the Apple II
Honeylisp is a set of integrated tools designed to allow tight iteration when
developing low-level 6502 code. It is written in Fennel, a Lisp dialect that
compiles to Lua. You program the Apple II by writing Fennel code that generates
6502 assembly as simple lists-of-symbols. You can then interactively update
that code while it runs with simple commands in the lite editor.
Honeylisp comprises:
* A hackable programmer's text editor (lite)
* Ported to the Love2D game engine framework (lite-hearted)
* A simple imgui-inspired library for quickly building custom editors
* An extensible 6502 assembler
* A Forth-like stack-based virtual machine for the 6502
* Deep MAME integration (jeejah)
* Live interactive eval while your game is running
* Hot code reload
* TODO: snapshotting / rewind, rich symbols visible in the MAME debugger
* Actual hardware integration
* Supports uploading to the Apple II via the cassette port or a serial card
* TODO: Live interactive eval and hot code reload
The main goal of the project is to support the creation of a game called Neut
Tower by its developer, but it is potentially generally interesting and useful
to others. Its design is focussed on the molding of the tool to your individual
needs; you are encouraged to fork it and modify any part to suit your taste.

View file

@ -16,7 +16,7 @@ function command.add(predicate, map)
predicate = function() return core.active_view:is(class) end predicate = function() return core.active_view:is(class) end
end end
for name, fn in pairs(map) do for name, fn in pairs(map) do
assert(not command.map[name], "command already exists: " .. name) -- assert(not command.map[name], "command already exists: " .. name)
command.map[name] = { predicate = predicate, perform = fn } command.map[name] = { predicate = predicate, perform = fn }
end end
end end

View file

@ -311,6 +311,7 @@ end
function core.try(fn, ...) function core.try(fn, ...)
local err local err
local ok, res = xpcall(fn, function(msg) local ok, res = xpcall(fn, function(msg)
print(debug.traceback())
local item = core.error("%s", msg) local item = core.error("%s", msg)
item.info = debug.traceback(nil, 2):gsub("\t", "") item.info = debug.traceback(nil, 2):gsub("\t", "")
err = msg err = msg

1
vendor/lite/data/plugins/autoinsert.lua vendored Symbolic link
View file

@ -0,0 +1 @@
../../../lite-plugins/plugins/autoinsert.lua

View file

@ -0,0 +1 @@
../../../lite-plugins/plugins/bracketmatch.lua

View file

@ -0,0 +1 @@
../../../lite-plugins/plugins/language_fennel.lua

View file

@ -0,0 +1 @@
../../../lite-plugins/plugins/selectionhighlight.lua