honeylisp/presentation/slides.fnl

99 lines
3.8 KiB
Plaintext
Raw Normal View History

2021-06-19 01:31:21 +00:00
(local util (require :lib.util))
2021-06-22 02:09:09 +00:00
(local lume (require :lib.lume))
2021-06-19 01:31:21 +00:00
(local {: parse} (util.require :presentation.engine))
2021-06-29 03:05:17 +00:00
(local core (require :core))
2021-06-19 01:31:21 +00:00
(local style (require :core.style))
(local h
2021-06-22 02:09:09 +00:00
{:style true
:font (renderer.font.load "presentation/font/PrintChar21.ttf" (* 64 SCALE))
2021-06-19 01:31:21 +00:00
:color style.caret
2021-06-22 02:09:09 +00:00
:justify :center
:topPadding (* style.padding.y 2)
:lowerPadding 64})
2021-06-19 01:31:21 +00:00
(local **
2021-06-22 02:09:09 +00:00
{:style true
:font (renderer.font.load "presentation/font/PRNumber3.ttf" (* 32 SCALE))
2021-06-19 01:31:21 +00:00
:color style.text
:justify :left
:pause-after true})
2021-06-22 02:09:09 +00:00
(fn p [style] (lume.merge style {:pause-after true}))
(fn np [style] (lume.merge style {:pause-after false}))
(fn bgimg [filename] {:image filename :justify :center :overlay true :alpha 0.3 :topPadding 0})
2021-06-19 01:31:21 +00:00
2021-06-29 03:05:17 +00:00
(fn view-cleanup [view]
(let [root core.root_view.root_node
node (root:get_node_for_view view)]
(when node (node:close_active_view root))))
(fn openfile [filename ?split]
{:action (fn []
(let [focused-view core.active_view
d (core.open_doc filename)
focused-node (core.root_view:get_active_node)
node (when ?split (focused-node:split ?split))
view (core.root_view:open_doc d)]
(when ?split (core.set_active_view focused-view)) ; don't switch focus
#(view-cleanup view)))})
2021-06-19 01:31:21 +00:00
(parse [
2021-06-29 03:05:17 +00:00
[h "" "" ""
"Honeylisp"
"" "" ""
2021-06-22 02:09:09 +00:00
(np **) "Jeremy Penner"
"https://spindleyq.itch.io/"
"https://blog.information-superhighway.net/"
"https://bitbucket.org/SpindleyQ/honeylisp"
"https://gamemaking.social/@SpindleyQ"
"https://twitter.com/SpindleyQ"
{:pause-after true}]
[(bgimg "presentation/pics/pete286.jpeg")
h "Some Background"
2021-06-19 01:31:21 +00:00
** "In 2019 I built a 16-bit MS-DOS game engine."
"* Built on hardware"
2021-06-22 02:09:09 +00:00
"* Using only period-appropriate software (Turbo C, NeoPaint)"
"* Powered by Forth"
"* Integrated custom tools"
"* Interactive development via serial terminal"]
[(bgimg "presentation/pics/ggj2020.jpeg")
h "Neut Tower"
2021-06-19 01:31:21 +00:00
** "In 2020, I did the Global Game Jam on my 286."
2021-06-22 02:09:09 +00:00
"Finished 'Shareware Episode 1' a couple of months later."]
[h "The Idea"
2021-06-29 03:05:17 +00:00
** "What if I took a similar DIY approach with modern tooling?"
2021-06-22 02:09:09 +00:00
"* I'd done Forth; what about Lisp?"
2021-06-29 03:05:17 +00:00
" https://fennel-lang.org/"
2021-06-22 02:09:09 +00:00
"* How far can I push fast iterative development?"
"* Could I integrate an editor?"
"* How can I leverage emulation?"]
2021-06-29 03:05:17 +00:00
[h "Step 1: Assembler"
** "Represent instructions using Fennel data literals"
(openfile :asm/asm.fnl :right)
2021-06-22 02:09:09 +00:00
" [:lda 0xff]"
"Represent labels with Fennel strings"
" :loop [:bne :loop]"
"Lexical scope with nested blocks"
" [:block :loop (generate-loop-code) [:bne :loop]]"]
2021-06-29 03:05:17 +00:00
; ;; DEMO before tech dive
2021-06-22 02:09:09 +00:00
[h "Wait WTF Is An Assembler"
** "It's just converting mnemonics to bytes, right?"
{:image "presentation/pics/assembly-markup.png" :justify :center :pause-after true}
"Whoooops, actually the hard part is converting labels to addresses"
"Zero-page instructions are a different size, which messes up data layout!"
"Initial pass is needed to gather all symbols to determine sizes"
"What about data?"
" [:db 123] [:dw 12345] [:bytes \"HELLO WORLD\"] [:ref :hello]"
"Must be able to line up bytes on page boundaries"
" [:align 0x100]"]
2021-06-29 03:05:17 +00:00
[h "Step 2: Virtual Machine"
2021-06-22 02:09:09 +00:00
{:image "presentation/pics/thinkhard.png" :justify :center}
** "Not super keen on writing a complicated compiler"
"I'm already very comfortable with Forth"
"Let's build a stack machine!"
"\"Direct threaded\" inner interpreter"
"\"Immediate words\" can be Fennel functions that generate code!"]
[h "Extensible Assembler??"
** "How do you turn code into bytes?"
" [:vm 1 2 :+ :.]"]
2021-06-19 01:31:21 +00:00
])