summaryrefslogtreecommitdiff
path: root/pasmgen.inc
diff options
context:
space:
mode:
authorNicholas Tay <nick@windblume.net>2023-10-23 21:34:30 +1100
committerNicholas Tay <nick@windblume.net>2023-10-23 21:36:14 +1100
commitcd646947074a1793d2d9d7ba556853f92be0bab2 (patch)
tree6893288dff3b161c0de2db8be4ab7d786123d4d7 /pasmgen.inc
parent28dfc3448c1eb127834d26b308a0b2e985be79c8 (diff)
downloadpasmgen-cd646947074a1793d2d9d7ba556853f92be0bab2.tar.gz
pasmgen-cd646947074a1793d2d9d7ba556853f92be0bab2.tar.bz2
pasmgen-cd646947074a1793d2d9d7ba556853f92be0bab2.zip
Factor non-linux parts out
Diffstat (limited to 'pasmgen.inc')
-rw-r--r--pasmgen.inc55
1 files changed, 55 insertions, 0 deletions
diff --git a/pasmgen.inc b/pasmgen.inc
new file mode 100644
index 0000000..95fadb7
--- /dev/null
+++ b/pasmgen.inc
@@ -0,0 +1,55 @@
+macro genclass class, class_len
+{
+ ;; Generate 16 bits (smallest) of randomness from the cpu
+ rdrand ax
+
+ ;; Modulo into len range to index in
+ xor rdx, rdx
+ mov rbx, class_len
+ div bx
+
+ ;; Save output letter into out_buf, bump rcx
+ add rdx, class
+ mov rdx, [rdx]
+ mov [rcx], rdx
+ inc rcx
+
+ inc rsi
+}
+
+generate:
+ ;; Store which output byte we're up to in rcx
+ mov rcx, out_buf
+ ;; Store chars generated in rsi
+ xor rsi, rsi
+
+tripleter:
+ genclass consonants, consonants_len
+ genclass vowels, vowels_len
+ genclass consonants, consonants_len
+ dec r8
+ test r8, r8
+ jnz tripleter
+symboler:
+ genclass symbols, symbols_len
+ dec r9
+ test r9, r9
+ jnz symboler
+numberer:
+ genclass numbers, numbers_len
+ dec r10
+ test r10, r10
+ jnz numberer
+
+ ;; Append new line to string
+ mov [rcx], word 10
+ inc rsi
+
+ ;; Special case to caps the first character
+ xor rax, rax
+ mov al, byte [out_buf]
+ sub al, 32
+ mov rbx, out_buf
+ mov [rbx], al
+
+ jmp ok