summary refs log tree commit diff
path: root/hello.e
diff options
context:
space:
mode:
authorIrene Knapp <ireneista@irenes.space>2026-05-07 17:57:28 -0700
committerIrene Knapp <ireneista@irenes.space>2026-05-07 17:57:28 -0700
commit0c7e96417a3691f59807243a9841c6f5e631edfa (patch)
tree115559261cd5ac6674bd9d59dca4ff26ac99d1ae /hello.e
parentd33ffd64d77b3d8e088f7dfd01794d683bb9ea47 (diff)
refactored the label code and ELF template into their own files
nice, right? :) modular programming! :D

Force-Push: yes
Change-Id: I56dd219fd2147850a0bb5b4a8cb3f9760e787215
Diffstat (limited to 'hello.e')
-rw-r--r--hello.e35
1 files changed, 35 insertions, 0 deletions
diff --git a/hello.e b/hello.e
new file mode 100644
index 0000000..63f19c4
--- /dev/null
+++ b/hello.e
@@ -0,0 +1,35 @@
+~ cat labels.e elf.e hello.e | ./quine > hello && chmod 755 hello && ./hello
+
+: output-start-routine
+  current-offset L' start set-label
+  1 :rax mov-reg64-imm32
+  1 :rdi mov-reg64-imm64
+  origin L' greeting use-label + :rsi mov-reg64-imm64
+  L' greeting-size use-label :rdx mov-reg64-imm64
+  syscall
+  60 :rax mov-reg64-imm32
+  0 :rdi mov-reg64-imm32
+  syscall
+  ;
+
+: output-greeting
+  current-offset dup L' greeting set-label 3unroll
+  s" Hello, Irenes!" packstring
+  current-offset 4 roll - L' greeting-size set-label ;
+
+~ (output memory start, current output point
+~  -- output memory start, current output point)
+~
+~ Everything directly called by all-contents has this same interface.
+~
+: all-contents
+  elf-file-header
+  elf-program-header
+  output-start-routine
+  output-greeting
+  current-offset L' total-size set-label
+  ;
+
+' all-contents entry-to-execution-token label-loop
+swap sys-write bye
+