Torsten Ruger
c55b41afae
sort objects by class before positioning
...
since we don’t have pages yet, but want consistent layout
2018-05-29 20:52:58 +03:00
Torsten Ruger
e94c9ea37b
add failfast
...
tired of waiting for the almost 1000 tests to run through, just to get
an error message
2018-05-29 20:40:02 +03:00
Torsten Ruger
296617cbaf
set label integer to position
2018-05-29 20:30:02 +03:00
Torsten Ruger
8322fca7b3
give labels an integer that will end up being the position at runtime
...
Since integers are first class objects, we need to use an integer object
as the return address. The actual address can not be stored in an
instance variable since it is not an object.
The address is unique to the label and never changes after positioning
(using the int is next up)
2018-05-29 20:26:00 +03:00
Torsten Ruger
7847420d49
make ints compile time mutable
...
to change the label value and use the allocated stubs
2018-05-29 17:03:55 +03:00
Torsten Ruger
b81d9565de
fix binary code offset when calling
...
in other words, remember the arm pipeline being 8
2018-05-29 17:03:20 +03:00
Torsten Ruger
4b34546c11
fixing the binary code indexes
...
AGAIN, that third of all bugs, the off by one
2018-05-28 18:20:09 +03:00
Torsten Ruger
8ef1a471a4
finally change List to derive from data object
...
can’t derive from data16 as some lists are longer
have to get the delegation to work first
2018-05-28 15:45:29 +03:00
Torsten Ruger
f9a89db10c
use fake memory
...
fix integer offset bug
(which only didn’t cause errors as fixnums are still an order too big
and the famous +1 error hit the empty space)
2018-05-28 15:09:59 +03:00
Torsten Ruger
6c06f61ab8
start on fake memory
...
get index checks on the array access of parfait
2018-05-28 14:46:26 +03:00
Torsten Ruger
be1bc63ff2
jump was written off the end of binary code, fixed
2018-05-28 11:45:04 +03:00
Torsten Ruger
1c09d4202f
fix all test
...
and thus all green, two weeks of side branch positioning done
(luckily not on arm, but interpreter)
2018-05-25 20:40:39 +03:00
Torsten Ruger
c0cd1e0740
fix an issue where instruction was in wrong code
...
embarrassingly used instance variable where it should have been local
2018-05-25 19:16:13 +03:00
Torsten Ruger
6f0fad0957
dragging the extra through resets
...
as the binary the instruction is in may change when repositioning
2018-05-25 19:04:48 +03:00
Torsten Ruger
8d8cc4b016
more test fixing
...
only one bug to go
2018-05-24 21:20:56 +03:00
Torsten Ruger
bf23883270
busy fixing tests
2018-05-24 19:38:48 +03:00
Torsten Ruger
183d4152d5
loading label must translate the labels too
...
(psst: like arm translator already did. duh)
2018-05-24 19:20:06 +03:00
Torsten Ruger
dae8e88b7a
recurring bug, don't save label positions
...
labels are ethereal, no length, so they don’t get to occupy a position
2018-05-24 16:26:56 +03:00
Torsten Ruger
8d510c2e7e
getting instruction repositioning right
...
big bug hunt, involving complicated maths (%)
2018-05-24 14:27:53 +03:00
Torsten Ruger
0293320bb8
use a constant for the binary code offset
...
where the instructions start
2018-05-23 21:35:22 +03:00
Torsten Ruger
8ca70a6835
Steamline objectPosition init
...
check for resetting on the same position with different class, which
should not happen
Ie it’s ok for an object to push another object up,
but not for an instruction to land on code
2018-05-23 21:34:49 +03:00
Torsten Ruger
f5d1090c39
no-ops really
2018-05-23 18:06:55 +03:00
Torsten Ruger
a2e7d7c469
give interpreter a clock and pc
...
where the pc, like in cpu’s is the memory position.
That is what the interpreter works on.
But for humans, the clock is a simpler way to count where the program
is at, no. of instructions executed
2018-05-23 18:05:22 +03:00
Torsten Ruger
ef2dc932ad
use positions in interpreter
2018-05-20 15:52:13 +03:00
Torsten Ruger
a7a62d53b2
use modified opal logger
...
logger was having bizarre format errors
copied and simplified (to get on)
2018-05-20 14:45:48 +03:00
Torsten Ruger
15e4533a2f
fix interpreter to use positions
...
tick from one (simulated memory) position to the next
(not from one instruction to the next)
2018-05-17 20:14:59 +03:00
Torsten Ruger
8966a50a8a
getter by position
...
extract and expand position testing
never return labels (that have the same position as their target)
2018-05-17 20:13:33 +03:00
Torsten Ruger
37d62d298e
assemble risc to it's position (not itself)
...
So in the next step the interpreter can use positions as program counter
and would be much more like the real thing
2018-05-17 09:49:01 +03:00
Torsten Ruger
49c4d170ce
make the interpreter platform
...
but still using the risc_instruction stream
2018-05-17 09:31:36 +03:00
Torsten Ruger
07ed16d765
groundwork for interpreter platform
...
especially positioning makes the previous interpreter approach to
fragile (too far off the real thing)
Interpreter should be it’s own platform (still use the risc
instructions),
get a translator and use positions
2018-05-16 21:00:14 +03:00
Torsten Ruger
9597fc5756
more slot tests, also in separate files
2018-05-16 12:49:46 +03:00
Torsten Ruger
36e59ebdea
some slot load tests
2018-05-16 12:35:44 +03:00
Torsten Ruger
473866e76b
start with some slot definition tests
2018-05-15 19:29:27 +03:00
Torsten Ruger
ab4bc370ed
another +1 bug
2018-05-15 16:25:55 +03:00
Torsten Ruger
e237bc625a
remove unused methods
...
and a whole lot more index fixes
2018-05-14 20:50:52 +03:00
Torsten Ruger
5d3c70da89
fix type api
...
tests were using methods that were only used in tests.
2018-05-14 16:13:50 +03:00
Torsten Ruger
3c00239f36
another million index fixes
2018-05-14 15:17:04 +03:00
Torsten Ruger
4a88f342d3
random checkin
...
still suffering -1 trauma
2018-05-14 12:38:44 +03:00
Torsten Ruger
ab01fa3862
switch to 0 based indexing
...
the world rocked for a moment (and more fixes to follow)
also the crumbling of idealism was heard
2018-05-14 11:55:01 +03:00
Torsten Ruger
4856b9891d
simplify writing binary
...
loop as should be, fixes the problem (one problem at least)
2018-05-13 18:01:45 +03:00
Torsten Ruger
866467ee5e
change binary labels
2018-05-13 17:21:48 +03:00
Torsten Ruger
39902401b9
positioning code by setting first method code
...
codes will initial (and on reset) propagate the whole chain
2018-05-13 15:28:10 +03:00
Torsten Ruger
7ad36380c2
add next_value for dictionary
...
also next for list
and add types attributes to space
2018-05-13 13:03:04 +03:00
Torsten Ruger
2d901bf7b6
not wrapping the cpu initial jump anymore
...
also introduce padding after cpu_init (wip)
2018-05-12 18:36:59 +03:00
Torsten Ruger
232fe67c09
introduce platform to abstract cpu and load address
2018-05-12 18:32:10 +03:00
Torsten Ruger
776a97986d
fix instruction positioning
...
use at as at and only compute difference when needed (to determine if
there is a jump in binary)
Easier to understand that way
2018-05-11 18:36:45 +03:00
Torsten Ruger
bc1e29e4f6
seperate different Position classes into own files
...
also tests
and have Position module keep all positions
(singletons should be at module, not class level)
2018-05-10 20:56:12 +03:00
Torsten Ruger
1169fa7220
propagating binary code position on extend
2018-05-09 20:36:49 +03:00
Torsten Ruger
6a1528e75a
Fix instruction resetting
...
which happens on insert of a new instruction
2018-05-08 20:53:48 +03:00
Torsten Ruger
7ca7e92dda
remove link exception class
2018-05-08 20:22:04 +03:00
Torsten Ruger
cf06642768
start passing positions along inside the position code
2018-05-08 19:59:43 +03:00
Torsten Ruger
ce3cc72f9e
move all position setting into position
...
Position and subclasses handle the logic, external to
the classes, so it can be swapped out later
(at runtime positions can’t change)
2018-05-07 22:30:43 +03:00
Torsten Ruger
68fb9b1bdc
rename Position get/set
2018-05-06 20:04:02 +03:00
Torsten Ruger
415df49199
hand context into position
2018-05-06 00:34:59 +03:00
Torsten Ruger
6b7e1e3932
remove link exception raise
...
need to fix move logic next
2018-05-05 23:55:50 +03:00
Torsten Ruger
40f4bfc287
change to position objects complete
2018-05-05 20:25:10 +03:00
Torsten Ruger
3244c7d633
add position tests
...
and refactor padding out
2018-05-05 20:11:08 +03:00
Torsten Ruger
d65a982454
start by moving positioned(module) to position(class)
2018-05-05 19:47:18 +03:00
Torsten Ruger
43d5521cfc
debugging positions
2018-05-05 19:32:01 +03:00
Torsten Ruger
d49d2665c5
reinit risc_init
...
fixes over 100 tests :-)
2018-05-01 22:36:46 +03:00
Torsten Ruger
06f51da8f1
rename get_all_methods
2018-05-01 19:19:37 +03:00
Torsten Ruger
1acd231a33
debugging binaries, initial jump issues
2018-04-30 13:28:55 +03:00
Torsten Ruger
d84d208192
implement assignment normalisation
...
especially when the value is a send that needs normalising
fixes several broken tests
2018-04-27 21:56:41 +03:00
Torsten Ruger
1685ba5a44
fix send normalisation
2018-04-27 21:55:41 +03:00
Torsten Ruger
672ccb351d
fix argument hoisting
...
arguments in vool must be simple variables
finally did the hoisting to do that
2018-04-27 09:59:01 +03:00
Torsten Ruger
08d0aae79e
refactor send vool tests
2018-04-26 20:26:42 +03:00
Torsten Ruger
26fe77ed68
add some multi method tests
2018-04-26 12:33:33 +03:00
Torsten Ruger
a8e7602193
extract setup for mains test
2018-04-26 12:33:19 +03:00
Torsten Ruger
a7207a9984
wrap parfait tests in module and boot
2018-04-26 12:31:37 +03:00
Torsten Ruger
30ba626cf9
fix knock ons
2018-04-24 20:16:50 +03:00
Torsten Ruger
6fc84d2f98
bit of renaming and a string test
2018-04-24 20:12:49 +03:00
Torsten Ruger
ee28d12429
bit more comparison testing
2018-04-24 19:57:14 +03:00
Torsten Ruger
2bd39bd3dd
renaming
2018-04-24 19:46:22 +03:00
Torsten Ruger
ec5a7f8a02
implement larger/smaller or equal
2018-04-24 19:45:58 +03:00
Torsten Ruger
7a2160e9b4
fix comparison operator
...
< implemented <=
2018-04-23 19:39:16 +03:00
Torsten Ruger
ef5854c4df
start larger tests
2018-04-23 14:05:37 +03:00
Torsten Ruger
1907574c60
bit of organising
2018-04-23 13:16:46 +03:00
Torsten Ruger
020bce740a
more complex while test
...
that works, but does leave one wondering what is tested apart from the
result (1)
2018-04-20 19:38:33 +03:00
Torsten Ruger
6a8bb90704
test multiple assigns
2018-04-20 13:13:09 +03:00
Torsten Ruger
98f3898acd
fix while tests
2018-04-20 10:27:06 +03:00
Torsten Ruger
bf6e0853ce
fix while back jump
...
while normalising the condition had gone before the
jump target accidentally
2018-04-20 09:56:06 +03:00
Torsten Ruger
04359546b7
implement greater than
2018-04-19 22:57:31 +03:00
Torsten Ruger
be3d125b82
implement smaller than comparison
...
which is NOT an operator in the risc sense
rather a minus and a check for sign
(which _could be more efficient in arm, with conditional execution)
2018-04-19 22:41:40 +03:00
Torsten Ruger
9e21719aeb
generalise the operator handling
...
ie passing them through
implementing more
2018-04-19 22:13:52 +03:00
Torsten Ruger
7d9132ee36
test other int methods
...
harness for testing compiler in a method (before just in a case)
2018-04-19 19:59:48 +03:00
Torsten Ruger
a98d7630fb
start testing builtin seperately
...
in terms of output only
2018-04-19 19:47:35 +03:00
Torsten Ruger
1741ad540e
move test helper code to support
...
to be reused
2018-04-19 19:33:40 +03:00
Torsten Ruger
13d8a65e07
add while interpreter test
2018-04-19 19:23:12 +03:00
Torsten Ruger
1849522a54
fix TruthCheck
...
mixing up the false and true, such a basic human mistake
2018-04-19 10:34:15 +03:00
Torsten Ruger
3a50b7dd0e
fix mod4 name
...
really did div4
2018-04-19 10:00:55 +03:00
Torsten Ruger
059ff4a868
pass a source into the builder
...
for debugging
2018-04-18 19:12:30 +03:00
Torsten Ruger
d19bd5f98d
fix dynamic jump
...
which gets dynamic resolve and call to work.
FIRST DYNAMIC CALL working
2018-04-09 15:06:46 +03:00
Torsten Ruger
59e6298879
first resolved call running though
...
and returning an int, as it should
just the value . . .
2018-04-08 23:45:23 +03:00
Torsten Ruger
fabe4db4f6
fix logic error in vool dynamic send
...
using receiver of current method
instead of receiver of next message
2018-04-08 22:59:42 +03:00
Torsten Ruger
580c53cdae
fix the resolve
...
without return and not being a function
2018-04-08 22:30:18 +03:00
Torsten Ruger
e5d014b936
bit more regs, bit more resets
2018-04-08 22:29:08 +03:00
Torsten Ruger
33ffcf1d88
move resolve_method code from word to mom
...
rather make resolve an instruction.
Since it was coded in risc anyway, we not only save the setup and call
But also makes the mom instruction flow clearer
The method really came from not wanting to code it in risc, but with
the Builder, that is now surprisingly painless
2018-04-08 18:55:17 +03:00
Torsten Ruger
8c322329fb
fix builtin methods according to last commit
2018-04-08 18:52:17 +03:00
Torsten Ruger
9867234c38
move most code from method_compiler to builder
...
rather use builder in two ways, than sometimes compiler and sometimes
builder
Also makes it possible to reuse builtin code in mom’s to_risc, as both
use builder. The builtin code by directly adding to compiler, the mom
code not.
2018-04-08 18:51:20 +03:00
Torsten Ruger
c30e461385
add operator to builder
...
just minus for now, easily extended
2018-04-08 01:01:24 +03:00
Torsten Ruger
5d4b9d4834
add branches to builder
2018-04-08 00:50:51 +03:00
Torsten Ruger
695ae5ad99
add label generation to builder
2018-04-08 00:39:35 +03:00
Torsten Ruger
6958fc31ab
rework resolve_method, using builder
2018-04-07 23:07:44 +03:00
Torsten Ruger
26cf911a5c
change build names a little and document
2018-04-07 22:35:40 +03:00
Torsten Ruger
6d1beec407
fixing the interpreter tests
2018-04-07 18:58:44 +03:00
Torsten Ruger
db55ec3fd6
slightly changing built return logic
...
very tempted to add immediately, but bigger change
2018-04-07 00:35:54 +03:00
Torsten Ruger
3c90eb31c6
fixes all but interpreter tests
2018-04-06 23:37:41 +03:00
Torsten Ruger
eea92399ee
concludes static message setup
2018-04-06 23:11:08 +03:00
Torsten Ruger
1ddbde1191
return single message for "message" ie r0
...
other names, like next_message allocate a new register
2018-04-06 22:54:54 +03:00
Torsten Ruger
22409c93ee
remove >>, consistent use of <<
...
makes code easier to read, like assignments
does remind of Passengers
2018-04-06 22:40:58 +03:00
Torsten Ruger
c042dd9faa
allow reverse syntax for >> (ie <<)
...
slot >> reg makes sense, being a slot_to_reg
but . . .
consistently use of << (as meaning assignment , =) also makes sense
allow both and let time tell which makes more sense
2018-04-06 21:05:26 +03:00
Torsten Ruger
41d573d571
wrought one more instruction for message setup
...
now with dsl ready, should be faster
2018-04-06 20:58:58 +03:00
Torsten Ruger
c02576b239
reuse dished out names
...
so they become like variables
2018-04-06 20:55:21 +03:00
Torsten Ruger
cae5e323ec
add reg to slot
2018-04-06 20:21:14 +03:00
Torsten Ruger
fe71ddc5ae
remove dead code
...
leave circle detection for now
2018-04-06 20:20:39 +03:00
Torsten Ruger
88dbc7c84f
slot to reg for builder
2018-04-06 16:35:27 +03:00
Torsten Ruger
c233bd82d6
implement [] for RiscValue for the dsl
2018-04-06 16:08:35 +03:00
Torsten Ruger
44d661fe56
progress on the builder front
...
mainly tests for now
2018-04-06 14:54:24 +03:00
Torsten Ruger
e396807ee5
start work on dsl
...
so i can read my own code
2018-04-06 14:21:38 +03:00
Torsten Ruger
d52e14d201
continue to rewrite message_setup
...
message come from space already.
next types
2018-04-05 20:37:03 +03:00
Torsten Ruger
f09086e524
unite the two resolve_to_index functions
2018-04-05 20:10:00 +03:00
Torsten Ruger
ee0a1ca823
renaming methods args and frame
...
to arguments_type and frame_type, because that is what they are
In honour of setup bug, where the types of those types were loaded,
instead of just them types
2018-04-05 12:22:14 +03:00
Torsten Ruger
cf6636ddda
move (group) test files
2018-04-05 12:19:29 +03:00
Torsten Ruger
c51fc67ba5
make interpreter tests less brittle
...
by factoring __init code away
just counting main
2018-04-04 20:05:09 +03:00
Torsten Ruger
b9f85f9d2e
use instance_variable_set/get instead of eval
...
opal doesn’t like eval anymore
2018-04-03 19:33:36 +03:00
Torsten Ruger
4a2a1da3ff
little spring clean
2018-04-03 15:23:19 +03:00
Torsten Ruger
52d389cdbf
auto extend binary code
...
final solution will need repositioning
2018-04-03 15:07:36 +03:00
Torsten Ruger
30ca70e042
remove extra instruction and use next instead
...
was messing with binary writing as the assumption of 1 word writes is
baked in
2018-04-03 14:46:07 +03:00
Torsten Ruger
0a075c0f8a
fix tests (from changing MethodSetup)
2018-04-03 14:31:49 +03:00
Torsten Ruger
17b52d4e80
fix dynamic resolution
...
was loading self, when it needs to load receiver
some more test (up to the resolve) start working
2018-04-03 12:55:28 +03:00
Torsten Ruger
c304ad67c6
load space twice in init , messagesetup overwrites first
...
lots of interpreter test changes, brittle, must factor __initi out
2018-04-02 23:25:52 +03:00
Torsten Ruger
576ae9261d
recode resolve method as assembler
...
definitely needs some refactoring
in fact i was hoping to code this in ruby (with compiler tweeks)
but there it is: goes through the linked list of methods of the type
and compares their name with self (method on word)
if not found ends in sys exit for now
2018-04-02 19:32:59 +03:00
Torsten Ruger
65d57c8c7c
removing unconditional
...
just Branch is fine
2018-04-02 19:30:34 +03:00
Torsten Ruger
9fafbe4e96
remove Kernel class for clarification
...
since it was a class it was fake anyway
moved methods to object
2018-04-02 17:06:31 +03:00
Torsten Ruger
87eee0b66e
add object method missing as sys exit
...
functions get added twice and thus removed once
remove restriction for now
2018-04-02 16:49:30 +03:00
Torsten Ruger
fb29fb6431
linked list of methods instead of list of methods
...
api changes slightly, especially for each, but mostly sama sama
2018-04-02 16:36:43 +03:00
Torsten Ruger
ad497b34f1
test interpreters event firing
2018-04-01 22:50:15 +03:00
Torsten Ruger
599679d6e8
simplest if
...
without true/false or logic
2018-04-01 22:42:27 +03:00
Torsten Ruger
48e4e3de9a
add returns to tests so program ends in syscall exit
2018-04-01 22:19:21 +03:00
Torsten Ruger
9efeb58061
fix ret_to_byte
...
by the now familiar unwrapping of args and wrapping of return
2018-04-01 22:16:17 +03:00
Torsten Ruger
1a19683e7d
fix RegToByte
...
seems to work, but does not end in syscall
2018-04-01 21:59:06 +03:00
Torsten Ruger
3a9539a071
adds multiplication
...
without overflow testing, like the others
2018-04-01 21:18:08 +03:00
Torsten Ruger
1d57c59dab
fix putstring
...
mainly returning an integer object rather than fixnum
2018-04-01 18:57:43 +03:00
Torsten Ruger
b1376e83bd
add integer minus
...
rework plus to make that easy
2018-04-01 15:26:53 +03:00
Torsten Ruger
972cf47c8b
adding returns to all builtins
2018-04-01 15:17:16 +03:00
Torsten Ruger
def67205f0
fix mod4
...
which is just shift right by 2 after all
2018-04-01 15:13:12 +03:00
Torsten Ruger
10fa61aa9f
fix integer plus
...
mostly forgot the return sequence
2018-04-01 14:56:01 +03:00
Torsten Ruger
8acfda457f
fix div10
...
by reducing the incoming integer to fixnum
and then pushing the fixnum result into a new integer
2018-04-01 14:50:13 +03:00
Torsten Ruger
168c2e862f
move wip tests
2018-04-01 14:01:17 +03:00
Torsten Ruger
5c89884df9
fix binary code mixup
...
mixed get_word with get_internal_word
2018-04-01 12:13:14 +03:00