Skip to content

Instantly share code, notes, and snippets.

@andydude
Created August 16, 2024 04:20
Show Gist options
  • Save andydude/2d813e035a5db92b0940a5681dd3771e to your computer and use it in GitHub Desktop.
Save andydude/2d813e035a5db92b0940a5681dd3771e to your computer and use it in GitHub Desktop.
Hex0 assembler in scheme
(import (scheme base)
(scheme char)
(scheme file)
(scheme read)
(scheme write))
(define hold
(make-parameter 0))
(define toggle
(make-parameter #f))
(define (hex c)
(cond
((<= 48 c 57) (- c 48))
((<= 65 c 70) (- c 55))
((<= 97 c 102) (- c 87))
((or (= c 35) (= c 59))
(begin (read-line) #f))
(else #f)))
(define (main)
;; foreach char
(let ((c (read-u8)))
(if (not (eof-object? c))
(begin
;; foreach hexdigit
(let ((v (hex c)))
(if v
(begin
(if (toggle)
;; foreach pair
(let ((u (+ (* (hold) 16) v)))
(write-u8 u)
(hold 0))
(hold v))
(toggle (not (toggle))))))
;; loop
(main)))))
(main)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment