Thingamajig/examples/ascii.asm

168 lines
3.8 KiB
NASM

;ASCII code printer
;Print a prompt
load r0, prompt
store ffff, r0
load r0, space
store ffff, r0
;Read a character to r0 and load it to r2
load r0, ffff
xor r2, r2
xor r2, r0
;Print a newline and align
cleq r0, r0, newln
load r1, space
store ffff, r1
store ffff, r1
;Get the hexadecimal digit of the high nibble
ror r0
ror r0
ror r0
ror r0
cleq r0, r0, n2hex
;Print the digit
store ffff, r0
;Re-load the character to r0
xor r0, r0
xor r0, r2
;Get the hexadecimal digit of the low nibble
cleq r0, r0, n2hex
;Print the digit
store ffff, r0
;Print a newline
cleq r0, r0, newln
;Halt
halt
;Print a newline
newln: load r1, cr
store ffff, r1
load r1, lf
store ffff, r1
ret
;Get the hexadecimal digit of a nibble
;Extract the low nibble
n2hex: load r1, mask
and r0, r1
;Locate the nibble in the table
load r1, tbl00
breq r0, r1, dgt0
load r1, tbl02
breq r0, r1, dgt1
load r1, tbl04
breq r0, r1, dgt2
load r1, tbl06
breq r0, r1, dgt3
load r1, tbl08
breq r0, r1, dgt4
load r1, tbl0a
breq r0, r1, dgt5
load r1, tbl0c
breq r0, r1, dgt6
load r1, tbl0e
breq r0, r1, dgt7
load r1, tbl10
breq r0, r1, dgt8
load r1, tbl12
breq r0, r1, dgt9
load r1, tbl14
breq r0, r1, dgta
load r1, tbl16
breq r0, r1, dgtb
load r1, tbl18
breq r0, r1, dgtc
load r1, tbl1a
breq r0, r1, dgtd
load r1, tbl1c
breq r0, r1, dgte
load r1, tbl1e
breq r0, r1, dgtf
;Load the hexadecimal digit of the nibble
dgt0: load r0, tbl01
breq r0, r0, n2hend
dgt1: load r0, tbl03
breq r0, r0, n2hend
dgt2: load r0, tbl05
breq r0, r0, n2hend
dgt3: load r0, tbl07
breq r0, r0, n2hend
dgt4: load r0, tbl09
breq r0, r0, n2hend
dgt5: load r0, tbl0b
breq r0, r0, n2hend
dgt6: load r0, tbl0d
breq r0, r0, n2hend
dgt7: load r0, tbl0f
breq r0, r0, n2hend
dgt8: load r0, tbl11
breq r0, r0, n2hend
dgt9: load r0, tbl13
breq r0, r0, n2hend
dgta: load r0, tbl15
breq r0, r0, n2hend
dgtb: load r0, tbl17
breq r0, r0, n2hend
dgtc: load r0, tbl19
breq r0, r0, n2hend
dgtd: load r0, tbl1b
breq r0, r0, n2hend
dgte: load r0, tbl1d
breq r0, r0, n2hend
dgtf: load r0, tbl1f
breq r0, r0, n2hend
;Return
n2hend: ret
;Characters
cr: data d
lf: data a
space: data 20
prompt: data 3e
;Mask
mask: data f
;Hexadecimal table
tbl00: data 0
tbl01: data 30
tbl02: data 1
tbl03: data 31
tbl04: data 2
tbl05: data 32
tbl06: data 3
tbl07: data 33
tbl08: data 4
tbl09: data 34
tbl0a: data 5
tbl0b: data 35
tbl0c: data 6
tbl0d: data 36
tbl0e: data 7
tbl0f: data 37
tbl10: data 8
tbl11: data 38
tbl12: data 9
tbl13: data 39
tbl14: data a
tbl15: data 41
tbl16: data b
tbl17: data 42
tbl18: data c
tbl19: data 43
tbl1a: data d
tbl1b: data 44
tbl1c: data e
tbl1d: data 45
tbl1e: data f
tbl1f: data 46