Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions js/creator_compiler.js
Original file line number Diff line number Diff line change
Expand Up @@ -2106,6 +2106,8 @@ function data_segment_compiler()
if (typeof app !== "undefined")
app._data.memory[memory_hash[0]] = memory[memory_hash[0]]; //CHECK

main_memory_prereset() ;

return ret;
}

Expand Down
103 changes: 78 additions & 25 deletions js/creator_memory.js
Original file line number Diff line number Diff line change
Expand Up @@ -112,28 +112,87 @@ function creator_memory_value_by_type ( val, type )


//
// Read and write into/from memory (compilation)
// main_memory and main_memory_datatype auxiliar functions
//

function main_memory_get_addresses ( )
{
return Object.keys(main_memory) ;
}

function main_memory_datatype_get_addresses ( )
{
return Object.keys(main_memory_datatypes) ;
}

function main_memory_packs_forav ( addr, value )
{
return { addr: addr,
bin: value, def_bin: "00",
reset: true, tag: null } ;
}

function main_memory_datatypes_packs_foravt ( addr, value, type )
{
return { "type": type, "address": addr,
"value": value, "default": "00" } ;
}

function main_memory_prereset ( )
{
var i = 0;

// prereset main memory
var addrs = main_memory_get_addresses() ;
for (i=0; i<addrs.length; i++) {
main_memory[addrs[i]].def_bin = main_memory[addrs[i]].bin ;
}

// prereset datatypes
addrs = main_memory_datatype_get_addresses() ;
for (i=0; i<addrs.length; i++) {
main_memory_datatypes[addrs[i]].default = main_memory_datatypes[addrs[i]].value ;
}
}

function main_memory_consolelog ( )
{
var i = 0;

// show main memory
console.log(' ~~~ main memory ~~~~~~~~~~~~~~') ;
var addrs = main_memory_get_addresses() ;
for (i=0; i<addrs.length; i++) {
console.log(JSON.stringify(main_memory[addrs[i]])) ;
}

// show datatypes
console.log(' ~~~ datatypes ~~~~~~~~~~~~~~') ;
addrs = main_memory_datatype_get_addresses() ;
for (i=0; i<addrs.length; i++) {
console.log(JSON.stringify(main_memory_datatypes[addrs[i]])) ;
}
}


//
// Read and write into/from memory (compilation)
//

function main_memory_reset ( )
{
var i = 0;

// reset memory
var addrs = Object.keys(main_memory) ;
var addrs = main_memory_get_addresses() ;
for (i=0; i<addrs.length; i++) {
main_memory[addrs[i]].bin = main_memory[addrs[i]].def_bin ;
}

// reset datatypes
addrs = Object.keys(main_memory_datatypes) ;
addrs = main_memory_datatype_get_addresses() ;
for (i=0; i<addrs.length; i++) {
main_memory_datatypes[addrs[i]].value = main_memory[addrs[i]].default ;
main_memory_datatypes[addrs[i]].value = main_memory_datatypes[addrs[i]].default ;
}
}

Expand All @@ -150,7 +209,7 @@ function main_memory_read ( addr )
return main_memory[addr] ;
}

return { addr: addr, bin: "00", def_bin: "00", tag: null } ;
return main_memory_packs_forav(addr, '00') ;
}

function main_memory_write ( addr, value )
Expand All @@ -163,15 +222,16 @@ function main_memory_write ( addr, value )
// Read and write value (byte) (execution)
//

// main_memory_read_value ( addr: integer )
function main_memory_read_value ( addr )
{
return main_memory_read (addr).bin ;
return main_memory_read(addr).bin ;
}

function main_memory_write_value ( addr, value ) // addr: integer, value: string (hexadecimal)
// main_memory_write_value ( addr: integer, value: string (hexadecimal) )
function main_memory_write_value ( addr, value )
{
var value_obj = { addr: addr, bin: value, def_bin: "00", tag: null } ;

var value_obj = main_memory_packs_forav(addr, value) ;
main_memory_write (addr, value_obj) ;
}

Expand Down Expand Up @@ -244,7 +304,7 @@ function main_memory_write_bytype ( addr, value, type )
}

// datatype
main_memory_datatypes[addr] = { "type": type, "address": addr, "value": value, "default": "00" } ;
main_memory_datatypes[addr] = main_memory_datatypes_packs_foravt(addr, value, type) ;

return ret ;
}
Expand All @@ -261,7 +321,7 @@ function create_memory_read_string ( addr )
var ch = '' ;
var ret_msg = '' ;

for (var i=0; i<string_length_limit; i++)
for (var i=0; i<string_length_limit; i++)
{
ch = main_memory_read_value(addr+i) ;
if (ch == '00') {
Expand Down Expand Up @@ -302,20 +362,16 @@ function main_memory_write_bydatatype ( addr, value, type )

case 'string':
case 'ascii_null_end':
var ch = 0 ;
for (var i=0; i<value.length; i++) {
ch = value.charCodeAt(i);
main_memory_write_value(addr+i, ch) ;
}
main_memory_write_value(addr+value.length, 0x0) ;
break;

case 'ascii_not_null_end':
var ch = 0 ;
for (var i=0; i<value.length; i++) {
ch = value.charCodeAt(i);
main_memory_write_value(addr+i, ch) ;
}

if (type != 'ascii_not_null_end') {
main_memory_write_value(addr+value.length, 0x0) ;
}
break;

case 'space':
Expand All @@ -324,7 +380,7 @@ function main_memory_write_bydatatype ( addr, value, type )
}

// datatype
main_memory_datatypes[addr] = { "type": type, "address": addr, "value": value, "default": "00" } ;
main_memory_datatypes[addr] = main_memory_datatypes_packs_foravt(addr, value, type) ;

return ret ;
}
Expand Down Expand Up @@ -355,11 +411,7 @@ function creator_memory_zerofill ( new_addr, new_size )
// fill memory
for (var i=0; i<new_size; i++)
{
var value = { Address: new_addr+i,
Binary: "00", DefBinary: "00",
Value: null, DefValue: null,
reset: true, Tag: null } ;

var value = main_memory_packs_forav(new_addr+i, '00') ;
main_memory_write(new_addr+i, value) ;
}

Expand Down Expand Up @@ -1214,6 +1266,7 @@ function crex_memory_data_compiler ( value, size, dataLabel, DefValue, type )
main_memory_write_bydatatype(algn.new_addr, value, type) ;
creator_memory_zerofill((algn.new_addr + size), (algn.new_size - size)) ;
// data_address = data_address + algn.new_size ;
main_memory_prereset() ; // TODO: better to do one time at the end of compilation

// OLD
for (var i = 0; i < (value.length/2); i++)
Expand Down
Loading