Created
August 16, 2024 04:20
-
-
Save andydude/2d813e035a5db92b0940a5681dd3771e to your computer and use it in GitHub Desktop.
Hex0 assembler in scheme
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(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