Commit Graph
100 Commits
Author SHA1 Message Date
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 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 299a130761 small cleanup 2018-04-02 18:30:03 +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 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 5c89884df9 fix binary code mixup
mixed get_word with get_internal_word
2018-04-01 12:13:14 +03:00
Torsten Ruger 727069a306 perfectly adding two numbers
with only 7k lines of code :-)
2018-04-01 12:00:59 +03:00
Torsten Ruger 15d2b585e6 fix integer and data object get/set word
instance variables first, then raw data
keep value reader for now
2018-04-01 11:56:04 +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 ee8b9469af fix argument indexing
good old index bug, off by one
this time forgot about parfait 1-indexing
2018-03-30 20:01:31 +03:00
Torsten Ruger b997f01236 simple arg test
yields no insights
2018-03-30 18:13:17 +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 efcc33f8a1 get an elf written 2018-03-29 20:37:25 +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 00be522419 each word for binary 2018-03-29 17:38:59 +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 606e3f8cb3 fix calling to binaries
used to be to the method, but we assemble the method to its own
position.
Throw in a test for binary calling
2018-03-28 13:00:03 +03:00
Torsten Ruger 7493d738e1 have to translate the labels
and use binary as function call target
(because we don’t have the translated label)
2018-03-28 12:50:07 +03:00
Torsten Ruger 85ddf53429 create methods with binaries and extend them later
Binary is new jump target for function call
2018-03-28 12:49:17 +03:00
Torsten Ruger 105e8f7092 some better and some missing arm test
for the exceptional case
2018-03-28 12:16:28 +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 2e57674008 remove io.write_unsigned_8
and replace with write_unsigned_32, so that is the only used
method from the stream
Next up, replace the actual “stream” with a binary code writer
2018-03-27 19:37:52 +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
Torsten Ruger c5b3c3f106 give arm own instruction base class back 2018-03-26 20:04:39 +03:00
Torsten Ruger 4a26bec0f1 move eventable to util and rename common to util 2018-03-26 19:46:38 +03:00
Torsten Ruger 730197fbed organise tests to where they belong 2018-03-26 19:43:03 +03:00
Torsten Ruger e8f449bc65 reuse translator in machine and clean up api 2018-03-26 19:42:40 +03:00
Torsten Ruger 294f4d988f automatically create binary once cpu instructions are there 2018-03-26 19:42:15 +03:00
Torsten Ruger 3fcb4b74c7 fix binary code set_char bug 2018-03-26 19:41:30 +03:00
Torsten Ruger e61ef93943 cleanup 2018-03-26 19:17:30 +03:00
Torsten Ruger 46a5eefbd4 reorder methods as they are called 2018-03-26 18:18:25 +03:00
Torsten Ruger a9d5e144ca get/set word for binary code 2018-03-26 18:14:52 +03:00
Torsten Ruger 25c5b6dbbd do or do not, there is not try 2018-03-26 18:14:39 +03:00
Torsten Ruger b24b65520d remove all that label stuff
left over after rewrite from blocks to linked list
2018-03-26 14:54:41 +03:00
Torsten Ruger 1e21177b35 just keep binary code payload at 13 for now
there is an extra in there at the last of the last, but ok
2018-03-26 14:37:55 +03:00
Torsten Ruger 231025389a little cleanup
code climate inspired
2018-03-26 14:15:48 +03:00
Torsten Ruger 60617ca632 some binary code tests 2018-03-26 14:04:13 +03:00
Torsten Ruger 633e99466d start to debug 2018-03-26 13:43:26 +03:00
Torsten Ruger 865a116f47 small assembler fix 2018-03-25 20:02:51 +03:00
Torsten Ruger 279fdcc1e2 really translate risc - cpu/arm
also labels.
Actual translation/assembly is much cleaner
2018-03-25 19:38:59 +03:00
Torsten Ruger eb7713a9f3 remove method_compiler init method
as init is really just adding a label it is done in the method
 (thus mixing the levels, “polluting” parfait with risc, but there must
be change coming that way anyway)
2018-03-25 19:37:51 +03:00
Torsten Ruger 3bd23cee28 also separate risc and cpu inits for the machine
interpreter works on risc, but assembler off cpu
2018-03-25 19:36:00 +03:00
Torsten Ruger 3090ccffea keep risc and cpu instructions separate in method
that overwriting was a bit of thorn
2018-03-25 19:33:50 +03:00
Torsten Ruger a50368c3aa assembler will need redoing somewhat
with own data objects, we can assemble into them first
then write
may also store cpu instructions
2018-03-25 18:23:00 +03:00
Torsten Ruger 82ab8ac4d3 add data objects
marker class (may change) to be able to check access
2018-03-25 18:22:02 +03:00
Torsten Ruger bc4d4b428a change boot to new hash syntax 2018-03-25 13:27:15 +03:00
Torsten Ruger de7e02b0b8 remove IsSame branch from risc
mixing up levels, IsSame is Mom
at risc this is a minus and Zero check
fix all tests
2018-03-24 18:54:36 +02:00
Torsten Ruger a407601f5c fix tests from NotSame removal 2018-03-24 18:33:19 +02:00
Torsten Ruger 8cee2db1d1 return just gets the register (no more offset)
use mov instead
2018-03-24 18:32:53 +02:00
Torsten Ruger ad3e73d931 start on dynamic call test
fix cache entry being not loaded
test incomplete because of missing resolve_method
2018-03-24 17:55:01 +02:00
Torsten Ruger 6a538624c5 remove NotSame from risc
instead use a - b and then  isZero
2018-03-24 17:54:15 +02:00
Torsten Ruger 793fa313a5 change operators to symbols 2018-03-24 17:53:27 +02:00
Torsten Ruger 3ceb2c2f69 fix div10 return sequence
did not return at all before
2018-03-24 16:51:26 +02:00
Torsten Ruger 267237b776 fix init method message setup
was causing errors in interpreter
(that may have gone unnoticed in arm, as the interpreter checks stuff)
2018-03-24 15:59:54 +02:00
Torsten Ruger 65d3d5f1c9 fix tests from interpreter load change
loading values, not Constants
2018-03-24 12:24:53 +02:00
Torsten Ruger 2c137e8c97 div10 test for interpreter 2018-03-24 12:21:46 +02:00
Torsten Ruger 30d2cd3af7 fix test ripples from changing return sequence 2018-03-23 20:04:29 +02:00
Torsten Ruger 0f183b3a74 fix value return and test
slot load was wrong way around
2018-03-23 20:02:17 +02:00
Torsten Ruger 6721153456 fix return sequence
logic error of swapping messages too soon
simplify by folding message unto itself
thus only need one extra register for the address
2018-03-23 18:58:42 +02:00
Torsten Ruger a306c464b7 start using tmp registers at 1
which used to be reserved for the next message
2018-03-23 18:57:16 +02:00
Torsten Ruger 472b1a638a add register logging and fix function return
return semantics used to be different, now only register is given
2018-03-23 18:56:38 +02:00
Torsten Ruger b4a18bc59b mostly brackets and formatting 2018-03-23 18:55:23 +02:00
Torsten Ruger c51e593335 test return in interpreter
passes but does not return. dodgy
2018-03-23 11:36:20 +02:00