useful functions
This commit is contained in:
parent
9d90c7045a
commit
0937fd530c
2 changed files with 415 additions and 20 deletions
430
03/in02
430
03/in02
|
@ -57,10 +57,22 @@ jg if 1 greater than number of bytes read
|
||||||
:-ef end of file
|
:-ef end of file
|
||||||
BR
|
BR
|
||||||
DR pointer to character we just read
|
DR pointer to character we just read
|
||||||
|
zA
|
||||||
|
lb
|
||||||
|
BA
|
||||||
|
im
|
||||||
|
##20. ' '
|
||||||
|
je
|
||||||
|
:-rL ignore spaces
|
||||||
|
im
|
||||||
|
##9. '\t'
|
||||||
|
je
|
||||||
|
:-rL ignore tabs
|
||||||
|
BD
|
||||||
im
|
im
|
||||||
##1.
|
##1.
|
||||||
+B
|
+B
|
||||||
RA
|
RA increment pointer
|
||||||
BD
|
BD
|
||||||
zA
|
zA
|
||||||
lb
|
lb
|
||||||
|
@ -90,6 +102,10 @@ im
|
||||||
##3a. ascii ':'
|
##3a. ascii ':'
|
||||||
je
|
je
|
||||||
:-ld label definition
|
:-ld label definition
|
||||||
|
im
|
||||||
|
##3f. ascii '?'
|
||||||
|
je
|
||||||
|
:-?j
|
||||||
jm
|
jm
|
||||||
:-ex
|
:-ex
|
||||||
// label definition
|
// label definition
|
||||||
|
@ -282,6 +298,364 @@ im
|
||||||
JA
|
JA
|
||||||
jm
|
jm
|
||||||
:-s= keep looping
|
:-s= keep looping
|
||||||
|
// conditional jump handling
|
||||||
|
::?j
|
||||||
|
cc
|
||||||
|
// set A to register. takes rbx='0','A','B','C','D','I','J','R','S', outputs instruction to file
|
||||||
|
::Ar
|
||||||
|
im
|
||||||
|
##30. '0'
|
||||||
|
je
|
||||||
|
:-A0
|
||||||
|
im
|
||||||
|
##41. 'A'
|
||||||
|
je
|
||||||
|
:-r0 just return
|
||||||
|
im
|
||||||
|
##42. 'B'
|
||||||
|
je
|
||||||
|
:-AB
|
||||||
|
im
|
||||||
|
##43. 'C'
|
||||||
|
je
|
||||||
|
:-AC
|
||||||
|
im
|
||||||
|
##44. 'D'
|
||||||
|
je
|
||||||
|
:-AD
|
||||||
|
im
|
||||||
|
##49. 'I'
|
||||||
|
je
|
||||||
|
:-AI
|
||||||
|
im
|
||||||
|
##4a. 'J'
|
||||||
|
je
|
||||||
|
:-AJ
|
||||||
|
im
|
||||||
|
##52. 'R'
|
||||||
|
je
|
||||||
|
:-AR
|
||||||
|
im
|
||||||
|
##53. 'S'
|
||||||
|
je
|
||||||
|
:-AS
|
||||||
|
jm
|
||||||
|
:-!r
|
||||||
|
// emit instruction for "set A to 0".
|
||||||
|
::A0
|
||||||
|
zA neat trick we can just put the instruction here; it doesn't screw anything up
|
||||||
|
im
|
||||||
|
--A0
|
||||||
|
IA
|
||||||
|
im
|
||||||
|
##2.
|
||||||
|
DA
|
||||||
|
jm
|
||||||
|
:-wr
|
||||||
|
// emit "set A to B"
|
||||||
|
::AB
|
||||||
|
AB
|
||||||
|
im
|
||||||
|
--AB
|
||||||
|
IA
|
||||||
|
im
|
||||||
|
##3.
|
||||||
|
DA
|
||||||
|
jm
|
||||||
|
:-wr
|
||||||
|
// emit "set A to C"
|
||||||
|
::AC
|
||||||
|
AC
|
||||||
|
im
|
||||||
|
--AC
|
||||||
|
IA
|
||||||
|
im
|
||||||
|
##3.
|
||||||
|
DA
|
||||||
|
jm
|
||||||
|
:-wr
|
||||||
|
// emit "set A to D"
|
||||||
|
::AD
|
||||||
|
AD
|
||||||
|
im
|
||||||
|
--AD
|
||||||
|
IA
|
||||||
|
im
|
||||||
|
##3.
|
||||||
|
DA
|
||||||
|
jm
|
||||||
|
:-wr
|
||||||
|
// emit "set A to I"
|
||||||
|
::AI
|
||||||
|
AI
|
||||||
|
im
|
||||||
|
--AI
|
||||||
|
IA
|
||||||
|
im
|
||||||
|
##3.
|
||||||
|
DA
|
||||||
|
jm
|
||||||
|
:-wr
|
||||||
|
// emit "set A to J"
|
||||||
|
::AJ
|
||||||
|
AJ
|
||||||
|
im
|
||||||
|
--AJ
|
||||||
|
IA
|
||||||
|
im
|
||||||
|
##3.
|
||||||
|
DA
|
||||||
|
jm
|
||||||
|
:-wr
|
||||||
|
// emit "set A to R"
|
||||||
|
::AR
|
||||||
|
AR
|
||||||
|
im
|
||||||
|
--AR
|
||||||
|
IA
|
||||||
|
im
|
||||||
|
##3.
|
||||||
|
DA
|
||||||
|
jm
|
||||||
|
:-wr
|
||||||
|
// emit "set A to S"
|
||||||
|
::AS
|
||||||
|
AS
|
||||||
|
im
|
||||||
|
--AS
|
||||||
|
IA
|
||||||
|
im
|
||||||
|
##3.
|
||||||
|
DA
|
||||||
|
jm
|
||||||
|
:-wr
|
||||||
|
// set B to register. takes rbx='A','B','C','D','I','J','R','S' outputs instruction to file
|
||||||
|
::Br
|
||||||
|
im
|
||||||
|
##41. 'A'
|
||||||
|
je
|
||||||
|
:-BA
|
||||||
|
im
|
||||||
|
##42. 'B'
|
||||||
|
je
|
||||||
|
:-r0 just return
|
||||||
|
im
|
||||||
|
##43. 'C'
|
||||||
|
je
|
||||||
|
:-BC
|
||||||
|
im
|
||||||
|
##44. 'D'
|
||||||
|
je
|
||||||
|
:-BD
|
||||||
|
im
|
||||||
|
##49. 'I'
|
||||||
|
je
|
||||||
|
:-BI
|
||||||
|
im
|
||||||
|
##4a. 'J'
|
||||||
|
je
|
||||||
|
:-BJ
|
||||||
|
im
|
||||||
|
##52. 'R'
|
||||||
|
je
|
||||||
|
:-BR
|
||||||
|
im
|
||||||
|
##53. 'S'
|
||||||
|
je
|
||||||
|
:-BS
|
||||||
|
jm
|
||||||
|
:-!r
|
||||||
|
// emit "set B to A"
|
||||||
|
::BA
|
||||||
|
BA
|
||||||
|
im
|
||||||
|
--BA
|
||||||
|
IA
|
||||||
|
im
|
||||||
|
##3.
|
||||||
|
DA
|
||||||
|
jm
|
||||||
|
:-wr
|
||||||
|
// emit "set B to C"
|
||||||
|
::BC
|
||||||
|
BC
|
||||||
|
im
|
||||||
|
--BC
|
||||||
|
IA
|
||||||
|
im
|
||||||
|
##3.
|
||||||
|
DA
|
||||||
|
jm
|
||||||
|
:-wr
|
||||||
|
// emit "set B to D"
|
||||||
|
::BD
|
||||||
|
BD
|
||||||
|
im
|
||||||
|
--BD
|
||||||
|
IA
|
||||||
|
im
|
||||||
|
##3.
|
||||||
|
DA
|
||||||
|
jm
|
||||||
|
:-wr
|
||||||
|
// emit "set B to I"
|
||||||
|
::BI
|
||||||
|
BI
|
||||||
|
im
|
||||||
|
--BI
|
||||||
|
IA
|
||||||
|
im
|
||||||
|
##3.
|
||||||
|
DA
|
||||||
|
jm
|
||||||
|
:-wr
|
||||||
|
// emit "set B to J"
|
||||||
|
::BJ
|
||||||
|
BJ
|
||||||
|
im
|
||||||
|
--BJ
|
||||||
|
IA
|
||||||
|
im
|
||||||
|
##3.
|
||||||
|
DA
|
||||||
|
jm
|
||||||
|
:-wr
|
||||||
|
// emit "set B to R"
|
||||||
|
::BR
|
||||||
|
BR
|
||||||
|
im
|
||||||
|
--BR
|
||||||
|
IA
|
||||||
|
im
|
||||||
|
##3.
|
||||||
|
DA
|
||||||
|
jm
|
||||||
|
:-wr
|
||||||
|
// emit "set B to S"
|
||||||
|
::BS
|
||||||
|
BS
|
||||||
|
im
|
||||||
|
--BS
|
||||||
|
IA
|
||||||
|
im
|
||||||
|
##3.
|
||||||
|
DA
|
||||||
|
jm
|
||||||
|
:-wr
|
||||||
|
// set register to A. takes rbx='A','B','C','D','I','J','R','S' outputs instruction to file
|
||||||
|
::rA
|
||||||
|
im
|
||||||
|
##41. 'A'
|
||||||
|
je
|
||||||
|
:-r0 just return
|
||||||
|
im
|
||||||
|
##42. 'B'
|
||||||
|
je
|
||||||
|
:-BA
|
||||||
|
im
|
||||||
|
##43. 'C'
|
||||||
|
je
|
||||||
|
:-CA
|
||||||
|
im
|
||||||
|
##44. 'D'
|
||||||
|
je
|
||||||
|
:-DA
|
||||||
|
im
|
||||||
|
##49. 'I'
|
||||||
|
je
|
||||||
|
:-IA
|
||||||
|
im
|
||||||
|
##4a. 'J'
|
||||||
|
je
|
||||||
|
:-JA
|
||||||
|
im
|
||||||
|
##52. 'R'
|
||||||
|
je
|
||||||
|
:-RA
|
||||||
|
im
|
||||||
|
##53. 'S'
|
||||||
|
je
|
||||||
|
:-SA
|
||||||
|
jm
|
||||||
|
:-!r
|
||||||
|
// emit "set C to A"
|
||||||
|
::CA
|
||||||
|
im
|
||||||
|
--C)
|
||||||
|
IA
|
||||||
|
im
|
||||||
|
##3.
|
||||||
|
DA
|
||||||
|
jm
|
||||||
|
:-wr
|
||||||
|
::C)
|
||||||
|
CA
|
||||||
|
// emit "set D to A"
|
||||||
|
::DA
|
||||||
|
DA
|
||||||
|
im
|
||||||
|
--DA
|
||||||
|
IA
|
||||||
|
im
|
||||||
|
##3.
|
||||||
|
DA
|
||||||
|
jm
|
||||||
|
:-wr
|
||||||
|
// emit "set I to A"
|
||||||
|
::IA
|
||||||
|
IA
|
||||||
|
im
|
||||||
|
--IA
|
||||||
|
IA
|
||||||
|
im
|
||||||
|
##3.
|
||||||
|
DA
|
||||||
|
jm
|
||||||
|
:-wr
|
||||||
|
// emit "set J to A"
|
||||||
|
::JA
|
||||||
|
JA
|
||||||
|
im
|
||||||
|
--JA
|
||||||
|
IA
|
||||||
|
im
|
||||||
|
##3.
|
||||||
|
DA
|
||||||
|
jm
|
||||||
|
:-wr
|
||||||
|
// emit "set R to A"
|
||||||
|
::RA
|
||||||
|
im
|
||||||
|
--R)
|
||||||
|
IA
|
||||||
|
im
|
||||||
|
##3.
|
||||||
|
DA
|
||||||
|
jm
|
||||||
|
:-wr
|
||||||
|
::R)
|
||||||
|
RA
|
||||||
|
// emit "set S to A"
|
||||||
|
::SA
|
||||||
|
im
|
||||||
|
--S)
|
||||||
|
IA
|
||||||
|
im
|
||||||
|
##3.
|
||||||
|
DA
|
||||||
|
jm
|
||||||
|
:-wr
|
||||||
|
::S)
|
||||||
|
SA
|
||||||
|
// write to output file from rsi..rsi+rdx
|
||||||
|
::wr
|
||||||
|
im
|
||||||
|
##4.
|
||||||
|
JA
|
||||||
|
im
|
||||||
|
##1.
|
||||||
|
sy
|
||||||
|
re
|
||||||
// return 0
|
// return 0
|
||||||
::r0
|
::r0
|
||||||
zA
|
zA
|
||||||
|
@ -418,34 +792,38 @@ jm
|
||||||
AJ
|
AJ
|
||||||
re return
|
re return
|
||||||
// bad number
|
// bad number
|
||||||
::bn
|
::!n
|
||||||
im
|
im
|
||||||
##2. stderr
|
--!N error message
|
||||||
JA
|
|
||||||
im
|
|
||||||
--BN error message
|
|
||||||
IA
|
IA
|
||||||
im
|
im
|
||||||
##b. length of error message
|
##b. length of error message
|
||||||
DA
|
DA
|
||||||
im
|
|
||||||
##1. write
|
|
||||||
sy
|
|
||||||
im
|
|
||||||
##1.
|
|
||||||
jm
|
jm
|
||||||
:-ex
|
:-er
|
||||||
// bad label
|
// bad label
|
||||||
::bl
|
::!l
|
||||||
im
|
im
|
||||||
##2. stderr
|
--!L error message
|
||||||
JA
|
|
||||||
im
|
|
||||||
--BL error message
|
|
||||||
IA
|
IA
|
||||||
im
|
im
|
||||||
##a. length of error message
|
##a. length of error message
|
||||||
DA
|
DA
|
||||||
|
jm
|
||||||
|
:-er
|
||||||
|
::!r bad register
|
||||||
|
im
|
||||||
|
--!R error message
|
||||||
|
IA
|
||||||
|
im
|
||||||
|
##d.
|
||||||
|
DA
|
||||||
|
jm
|
||||||
|
:-er
|
||||||
|
::er error -- write error message in rsi with length in rdx
|
||||||
|
im
|
||||||
|
##2. stderr
|
||||||
|
JA
|
||||||
im
|
im
|
||||||
##1. write
|
##1. write
|
||||||
sy
|
sy
|
||||||
|
@ -474,7 +852,7 @@ jm
|
||||||
'0
|
'0
|
||||||
'3
|
'3
|
||||||
00
|
00
|
||||||
::BN bad number error message
|
::!N bad number error message
|
||||||
'B
|
'B
|
||||||
'a
|
'a
|
||||||
'd
|
'd
|
||||||
|
@ -486,7 +864,7 @@ jm
|
||||||
'e
|
'e
|
||||||
'r
|
'r
|
||||||
\n
|
\n
|
||||||
::BL bad label error message
|
::!L bad label error message
|
||||||
'B
|
'B
|
||||||
'a
|
'a
|
||||||
'd
|
'd
|
||||||
|
@ -497,6 +875,20 @@ jm
|
||||||
'e
|
'e
|
||||||
'l
|
'l
|
||||||
\n
|
\n
|
||||||
|
::!R bad register error message
|
||||||
|
'B
|
||||||
|
'a
|
||||||
|
'd
|
||||||
|
20
|
||||||
|
'r
|
||||||
|
'e
|
||||||
|
'g
|
||||||
|
'i
|
||||||
|
's
|
||||||
|
't
|
||||||
|
'e
|
||||||
|
'r
|
||||||
|
\n
|
||||||
::LI line buffer
|
::LI line buffer
|
||||||
~~
|
~~
|
||||||
::L$ end of current label list
|
::L$ end of current label list
|
||||||
|
|
3
03/in03
3
03/in03
|
@ -9,4 +9,7 @@ B+=J
|
||||||
B<=d9
|
B<=d9
|
||||||
B-=J
|
B-=J
|
||||||
?J<B:label
|
?J<B:label
|
||||||
|
?J=B:label
|
||||||
|
?A!B:label
|
||||||
|
?A>B:label
|
||||||
A=:label
|
A=:label
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue