Hi Everyone,
I’ve just completed the updates to 1.1 which includes the following:
Changes:
- Improved and simplified engine
- String and numeric variable datatypes
- Improved and additional XOJO wrappers
- Memory reduction by reducing duplicate constants to a single stack location
- Constants and variables data table
- Improved bounds update to include constant and variable data
- Clean up of bit codes
- Many documentation changes
My other thought is if I leave the engine unlocked, so people can view it as this seemed to be an issue for some, can I call it open source but still license it as donation ware? I’d still like to be the maintainer of the engine code and would like any suggestions for changes to be directed to myself. Is this possibly or do I still need to keep it locked?
Anyway the only changes in Version 1.1 that would stop version 1.0 code from running is reset_ALE no longer requires a parameter, and performing a bounds update in your asm code is now a mov 0,eax rather than a 4. From now on I don’t plan on making any further language changes which would stop previous version code from running.
Here is a sample of version 1.1 code I’ve been using for testing:
lbl "_start:"
var_ "inString", S, "Hello World"
var_ "outString", S, ""
var_ "memPointer", N, 0
call_ "writeString"
call_ "upperCaseString"
call_ "readString"
call_ "deallocateExtraStack"
mov 1,eax //Exit the program
int
lbl "writeString"
mov "inString", ebx
mov 4, eax
int
ret
lbl "readString"
mov "outString", ebx //Move the string location to ebx
mov esi, edx //move the total stack to edx
inc edx //increment the starting point by one
mov 3, eax //call for a stack read
int
ret
lbl "deallocateExtraStack"
cmp esi, esp //get the total number of extra stack items to remove, after the variables
mov eax, ecx //place the total in ECX the loop counter
lbl "deallocateLoopStart"
pop //remove the last item off the stack
loop_ "deallocateLoopStart"
mov 0,eax //do a bounds update as we've made major changes to the stack
int
ret
lbl "upperCaseString"
cmp esi, esp //get the total number of extra items on the stack to Uppercase
mov eax, ecx //place the total in ECX the loop counter
mov esp, "memPointer" //Move the upper stack location into our memory pointer
lbl "upperCaseLoopStart"
cmp 97, "[memPointer]" //check to see if the value in the pointer is in the correct range
jl "notLowerCase"
cmp 122, "[memPointer]"
jg "notlowercase"
//decrease the value in pointer R1 by 32
sub_ 32, "[memPointer]"
lbl "notLowerCase"
dec "memPointer"
loop_ "upperCaseLoopStart"
ret
writeStringVariable_ALE("inString", tfLowerCaseString.Text)
//Run the engine after all code sent
run_ALE("_start:")
tfUpperCaseString.Text = readStringVariable_ALE("outString")
I hope you’ve all had a great day…
Kind Regards
Trig