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
e89c4d1ce1
pass binary that arm instruction belongs to in
...
at least to first. repositioning and stuff next
2018-05-06 19:56:36 +03:00
Torsten Ruger
415df49199
hand context into position
2018-05-06 00:34:59 +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
6be28e7f55
fix (re)positioning when link exceptions are thrown
...
slow design, but sort of works
2018-05-01 19:48:11 +03:00
Torsten Ruger
1c52ab6b67
use hex for labels
...
idea was to be able to compare to positions
(but they are different positions)
2018-05-01 19:20:16 +03:00
Torsten Ruger
dd2c2cb975
fix init jump bug
...
the label for the jump was not translated correctly
call needs to go through to_cpu to create single instance
on the way init order slightly changed
2018-05-01 19:19:04 +03:00
Torsten Ruger
1acd231a33
debugging binaries, initial jump issues
2018-04-30 13:28:55 +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
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
3a50b7dd0e
fix mod4 name
...
really did div4
2018-04-19 10:00:55 +03:00
Torsten Ruger
8e1efa3993
fix source for exit label
2018-04-18 20:10:07 +03:00
Torsten Ruger
75d5fff611
let builder pass the source down, but inly once
2018-04-18 19:27:46 +03:00
Torsten Ruger
059ff4a868
pass a source into the builder
...
for debugging
2018-04-18 19:12:30 +03:00
Torsten Ruger
7c33f19bee
dont patch over existing string method
2018-04-16 21:24:27 +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
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
c2860bef7a
fix interpreter operator args
...
as in binary strings words symbols will be same
2018-04-08 01:26:29 +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
bf8e9e508b
opal hack
2018-04-07 22:35:48 +03:00
Torsten Ruger
26cf911a5c
change build names a little and document
2018-04-07 22:35:40 +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
dd0d162ebf
fix the init also, was using first message twice
...
not advancing after first load
2018-04-07 00:14:02 +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
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
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
f09086e524
unite the two resolve_to_index functions
2018-04-05 20:10:00 +03:00
Torsten Ruger
ec31bde33a
fix use of messagesetup
...
which does setup for the method being called
not the one we’re in. duh
2018-04-05 12:23:43 +03:00
Torsten Ruger
5bb3ad03cc
some more safety tests
2018-04-05 12:22:40 +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
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
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
beb487eb09
minor fixes
2018-04-02 19:31:08 +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
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
5a861d4ed5
move some compiler helpers to the compiler itself
2018-04-01 14:09:30 +03:00
Torsten Ruger
168c2e862f
move wip tests
2018-04-01 14:01:17 +03:00
Torsten Ruger
4725b81270
get those integers crated and used
2018-03-31 20:21:27 +03:00
Torsten Ruger
5b92b6b785
get plus (+) working
...
alas, new integer is not created yet
2018-03-31 19:37:24 +03:00
Torsten Ruger
a2173645b3
remove the :int shorthand
2018-03-31 19:17:55 +03:00
Torsten Ruger
696886cc94
remove Data2 in favour of Data4
...
as we write a Marker, type and marker make up 2
so data2 is just the type, not useful
2018-03-31 19:12:06 +03:00
Torsten Ruger
a5189570c6
fix remaining constant issues
...
all but integer creation
and integer builtins off course
2018-03-31 13:58:08 +03:00
Torsten Ruger
cb9f6973d9
fix true false and nil constant
...
going from mom to parfait
basics in place, more ripples to fix
2018-03-31 13:47:02 +03:00
Torsten Ruger
9e9b5c7f37
move to parfait integers in risc layer
...
loading constants means loading parfait objects
objects have to me collected in machine
integer ok, string/true/false/nil next
2018-03-31 13:25:59 +03:00
Torsten Ruger
6e941ebcb7
introduce load_data instruction
...
which just loads data to a register (used internally)
as opposed to integers, which are objects
2018-03-31 12:38:30 +03:00
Torsten Ruger
e68b28d66d
fix helper
...
and start on arg test
2018-03-30 18:05:38 +03:00
Torsten Ruger
1956f18faa
add an integer plus
...
not correctly handling integer objects yet
2018-03-30 17:09:02 +03:00
Torsten Ruger
3844a738cd
rename assembler to text_writer
...
as “assembly” really happens in the machine now
2018-03-29 18:17:19 +03:00
Torsten Ruger
e012f16d7f
fix positioning and the assembly works
2018-03-29 18:03:21 +03:00
Torsten Ruger
34b16a2332
use a binary code for the first jump
2018-03-29 17:39:31 +03:00
Torsten Ruger
7cf253ad9c
change assembler to write binary code objects
...
also all debug in hex
2018-03-29 12:16:27 +03:00
Torsten Ruger
ce58de2671
repeat until no more exception
...
move class to where it is used
2018-03-28 19:49:16 +03:00
Torsten Ruger
5eee79719d
reenable now working tests
2018-03-28 13:04:25 +03:00
Torsten Ruger
fcb7f652eb
found the culprit
2018-03-28 11:37:17 +03:00
Torsten Ruger
500851d246
start on new binary creation process
...
now writing into BinaryCode instead of stream
also in the risc layer, not arm, for reusability
2018-03-27 20:47:41 +03:00
Torsten Ruger
4069397fca
don't collect labels anymore
...
don’t need, use binary code as the methods jump point
2018-03-27 19:06:16 +03:00
Torsten Ruger
4253d7a6b9
move assembly from assembler to machine
...
id now called position
2018-03-27 18:47:39 +03:00
Torsten Ruger
4cc1d8455e
fix util namespace
...
and instruction move ripples
2018-03-26 20:05:30 +03:00