diff --git a/components/simulator/creator_uielto_memory.js b/components/simulator/creator_uielto_memory.js
index f93242898..5ca271906 100644
--- a/components/simulator/creator_uielto_memory.js
+++ b/components/simulator/creator_uielto_memory.js
@@ -19,475 +19,215 @@
*/
- /* jshint esversion: 6 */
+ /* jshint esversion: 6 */
- var uielto_memory = {
+ var uielto_memory = {
- props: {
- memory: { type: Array, required: true },
- memory_segment: { type: String, required: true },
- track_stack_names: { type: Array, required: true }, //TODO: optional
- callee_subrutine: { type: String, required: true }, //TODO: optional
- caller_subrutine: { type: String, required: true } //TODO: optional
- },
+ props: {
+ main_memory: { type: Array, required: true },
+ memory_segment: { type: String, required: true },
+ track_stack_names: { type: Array, required: true }, //TODO: optional
+ callee_subrutine: { type: String, required: true }, //TODO: optional
+ caller_subrutine: { type: String, required: true } //TODO: optional
+ },
- data: function () {
- return {
- /*Memory table fields*/
- memFields: ['Tag', 'Address', 'Binary', 'Value']
- }
- },
+ data: function () {
+ return {
+ /*Memory table fields*/
+ memFields: ['Tag', 'Address', 'Binary', 'Value']
+ }
+ },
- methods: {
- /*Filter table*/
- filter(row, filter){
- if (this.memory_segment == "instructions_memory") {
- if(row.hide == true){
- return false;
- }
- else{
- return true;
- }
- }
- if (this.memory_segment == "data_memory") {
- return true;
- }
- if (this.memory_segment == "stack_memory") {
- return (Math.abs(row.Address - app._data.end_callee) < 40);
- }
- },
+ methods: {
+ /*Filter table*/
+ filter ( row, filter )
+ {
+ if ((this.memory_segment == "instructions_memory") && ((row.addr >= architecture.memory_layout[0].value) && (row.addr <= architecture.memory_layout[1].value))) {
+ if(row.hide == true){
+ return false;
+ }
+ else{
+ return true;
+ }
+ }
- //TODO: gereric and include modal
- select_data_type(record, index){
- if (this.memory_segment == "instructions_memory") {
- return
- }
- if (this.memory_segment == "data_memory") {
- if(record.type == "space" && (memory[memory_hash[0]][index].Binary[0].Tag != null) || memory[memory_hash[0]][index].Binary[1].Tag != null || memory[memory_hash[0]][index].Binary[2].Tag != null || memory[memory_hash[0]][index].Binary[3].Tag != null){
- app._data.row_index = index; //TODO: vue bidirectional updates
- app.$refs['space_modal'].show(); //TODO: vue bidirectional updates
- }
- }
- if (this.memory_segment == "stack_memory") {
- app._data.row_index = index; //TODO: vue bidirectional updates
- app.$refs['stack_modal'].show(); //TODO: vue bidirectional updates
- }
- }
- },
+ if ((this.memory_segment == "data_memory") && ((row.addr >= architecture.memory_layout[2].value) && (row.addr <= architecture.memory_layout[3].value))) {
+ return true;
+ }
- template: '
' +
- '' +
- '
' +
- ' ' +
- ' ' +
- '' +
- ' ' +
- ' ' +
- ' ' +
- ' ' +
- ' ' +
- ' ' +
- ' ' +
- ' ' +
- '
' +
- ' ' +
- ' {{item2.name[0]}}' +
- ' ' +
- ' ' +
- ' ' +
- ' ' +
- ' {{item2.name[0]}}' +
- ' ' +
- ' ' +
- ' ' +
- ' ' +
- ' {{item2.name[0]}}' +
- ' ' +
- ' ' +
- ' ' +
- ' ' +
- '
' +
- '
' +
- ' ' +
- ' ' +
- ' ' +
- ' ' + //text
- ' 0x{{((row.item.Address + 3).toString(16)).padStart(row.item.Address.length-2, "0").toUpperCase()}} - 0x{{(row.item.Address.toString(16)).padStart(row.item.Address.length-2, "0").toUpperCase()}}' +
- ' ' +
- ' ' + //data
- ' 0x{{((row.item.Address + 3).toString(16)).padStart(row.item.Address.length-2, "0").toUpperCase()}} - 0x{{(row.item.Address.toString(16)).padStart(row.item.Address.length-2, "0").toUpperCase()}}' +
- ' ' +
- ' ' + //Llamado
- ' 0x{{((row.item.Address + 3).toString(16)).padStart(row.item.Address.length-2, "0").toUpperCase()}} - 0x{{(row.item.Address.toString(16)).padStart(row.item.Address.length-2, "0").toUpperCase()}}' +
- ' ' +
- ' ' + //Llamante
- ' 0x{{((row.item.Address + 3).toString(16)).padStart(row.item.Address.length-2, "0").toUpperCase()}} - 0x{{(row.item.Address.toString(16)).padStart(row.item.Address.length-2, "0").toUpperCase()}}' +
- ' ' +
- ' ' +
- ' 0x{{((row.item.Address + 3).toString(16)).padStart(row.item.Address.length-2, "0").toUpperCase()}} - 0x{{(row.item.Address.toString(16)).padStart(row.item.Address.length-2, "0").toUpperCase()}}' +
- ' ' +
- ' ' + //Antes del llamante
- ' 0x{{((row.item.Address + 3).toString(16)).padStart(row.item.Address.length-2, "0").toUpperCase()}} - 0x{{(row.item.Address.toString(16)).padStart(row.item.Address.length-2, "0").toUpperCase()}}' +
- ' ' +
- ' ' +
- ' ' +
- ' ' +
- ' ' + //data
- ' ' +
- ' {{row.item.Binary[3].Bin.toUpperCase()}}' +
- ' ' +
- ' ' +
- ' {{row.item.Binary[3].Bin.toUpperCase()}}' +
- ' ' +
- ' ' +
- ' {{row.item.Binary[3].Tag}}' +
- ' ' +
- ' ' +
- ' ' +
- ' {{row.item.Binary[2].Bin.toUpperCase()}}' +
- ' ' +
- ' ' +
- ' {{row.item.Binary[2].Bin.toUpperCase()}}' +
- ' ' +
- ' ' +
- ' {{row.item.Binary[2].Tag}}' +
- ' ' +
- ' ' +
- ' ' +
- ' {{row.item.Binary[1].Bin.toUpperCase()}}' +
- ' ' +
- ' ' +
- ' {{row.item.Binary[1].Bin.toUpperCase()}}' +
- ' ' +
- ' ' +
- ' {{row.item.Binary[1].Tag}}' +
- ' ' +
- ' ' +
- ' ' +
- ' {{row.item.Binary[0].Bin.toUpperCase()}}' +
- ' ' +
- ' ' +
- ' {{row.item.Binary[0].Bin.toUpperCase()}}' +
- ' ' +
- ' ' +
- ' {{row.item.Binary[0].Tag}}' +
- ' ' +
- ' ' +
- ' ' + //text
- ' ' +
- ' {{row.item.Binary[3].Bin.toUpperCase()}}' +
- ' ' +
- ' ' +
- ' {{row.item.Binary[3].Bin.toUpperCase()}}' +
- ' ' +
- ' ' +
- ' {{row.item.Binary[3].Tag}}' +
- ' ' +
- ' ' +
- ' ' +
- ' {{row.item.Binary[2].Bin.toUpperCase()}}' +
- ' ' +
- ' ' +
- ' {{row.item.Binary[2].Bin.toUpperCase()}}' +
- ' ' +
- ' ' +
- ' {{row.item.Binary[2].Tag}}' +
- ' ' +
- ' ' +
- ' ' +
- ' {{row.item.Binary[1].Bin.toUpperCase()}}' +
- ' ' +
- ' ' +
- ' {{row.item.Binary[1].Bin.toUpperCase()}}' +
- ' ' +
- ' ' +
- ' {{row.item.Binary[1].Tag}}' +
- ' ' +
- ' ' +
- ' ' +
- ' {{row.item.Binary[0].Bin.toUpperCase()}}' +
- ' ' +
- ' ' +
- ' {{row.item.Binary[0].Bin.toUpperCase()}}' +
- ' ' +
- ' ' +
- ' {{row.item.Binary[0].Tag}}' +
- ' ' +
- ' ' +
- ' ' + //Llamado
- ' ' +
- ' {{row.item.Binary[3].Bin.toUpperCase()}}' +
- ' ' +
- ' ' +
- ' {{row.item.Binary[3].Bin.toUpperCase()}}' +
- ' ' +
- ' ' +
- ' {{row.item.Binary[3].Tag}}' +
- ' ' +
- ' ' +
- ' ' +
- ' {{row.item.Binary[2].Bin.toUpperCase()}}' +
- ' ' +
- ' ' +
- ' {{row.item.Binary[2].Bin.toUpperCase()}}' +
- ' ' +
- ' ' +
- ' {{row.item.Binary[2].Tag}}' +
- ' ' +
- ' ' +
- ' ' +
- ' {{row.item.Binary[1].Bin.toUpperCase()}}' +
- ' ' +
- ' ' +
- ' {{row.item.Binary[1].Bin.toUpperCase()}}' +
- ' ' +
- ' ' +
- ' {{row.item.Binary[1].Tag}}' +
- ' ' +
- ' ' +
- ' ' +
- ' {{row.item.Binary[0].Bin.toUpperCase()}}' +
- ' ' +
- ' ' +
- ' {{row.item.Binary[0].Bin.toUpperCase()}}' +
- ' ' +
- ' ' +
- ' {{row.item.Binary[0].Tag}}' +
- ' ' +
- ' ' +
- ' ' +
- ' ' +
- ' ' +
- ' {{row.item.Binary[3].Bin.toUpperCase()}}' +
- ' ' +
- ' ' +
- ' {{row.item.Binary[3].Bin.toUpperCase()}}' +
- ' ' +
- ' ' +
- ' {{row.item.Binary[3].Tag}}' +
- ' ' +
- ' ' +
- ' ' +
- ' {{row.item.Binary[2].Bin.toUpperCase()}}' +
- ' ' +
- ' ' +
- ' {{row.item.Binary[2].Bin.toUpperCase()}}' +
- ' ' +
- ' ' +
- ' {{row.item.Binary[2].Tag}}' +
- ' ' +
- ' ' +
- ' ' +
- ' {{row.item.Binary[1].Bin.toUpperCase()}}' +
- ' ' +
- ' ' +
- ' {{row.item.Binary[1].Bin.toUpperCase()}}' +
- ' ' +
- ' ' +
- ' {{row.item.Binary[1].Tag}}' +
- ' ' +
- ' ' +
- ' ' +
- ' {{row.item.Binary[0].Bin.toUpperCase()}}' +
- ' ' +
- ' ' +
- ' {{row.item.Binary[0].Bin.toUpperCase()}}' +
- ' ' +
- ' ' +
- ' {{row.item.Binary[0].Tag}}' +
- ' ' +
- ' ' +
- ' ' +
- ' ' +
- ' ' +
- ' {{row.item.Binary[3].Bin.toUpperCase()}}' +
- ' ' +
- ' ' +
- ' {{row.item.Binary[3].Bin.toUpperCase()}}' +
- ' ' +
- ' ' +
- ' {{row.item.Binary[3].Tag}}' +
- ' ' +
- ' ' +
- ' ' +
- ' {{row.item.Binary[2].Bin.toUpperCase()}}' +
- ' ' +
- ' ' +
- ' {{row.item.Binary[2].Bin.toUpperCase()}}' +
- ' ' +
- ' ' +
- ' {{row.item.Binary[2].Tag}}' +
- ' ' +
- ' ' +
- ' ' +
- ' {{row.item.Binary[1].Bin.toUpperCase()}}' +
- ' ' +
- ' ' +
- ' {{row.item.Binary[1].Bin.toUpperCase()}}' +
- ' ' +
- ' ' +
- ' {{row.item.Binary[1].Tag}}' +
- ' ' +
- ' ' +
- ' ' +
- ' {{row.item.Binary[0].Bin.toUpperCase()}}' +
- ' ' +
- ' ' +
- ' {{row.item.Binary[0].Bin.toUpperCase()}}' +
- ' ' +
- ' ' +
- ' {{row.item.Binary[0].Tag}}' +
- ' ' +
- ' ' +
- ' ' +
- ' ' + //Antes del llamante
- ' ' +
- ' {{row.item.Binary[3].Bin.toUpperCase()}}' +
- ' ' +
- ' ' +
- ' {{row.item.Binary[3].Bin.toUpperCase()}}' +
- ' ' +
- ' ' +
- ' {{row.item.Binary[3].Tag}}' +
- ' ' +
- ' ' +
- ' ' +
- ' {{row.item.Binary[2].Bin.toUpperCase()}}' +
- ' ' +
- ' ' +
- ' {{row.item.Binary[2].Bin.toUpperCase()}}' +
- ' ' +
- ' ' +
- ' {{row.item.Binary[2].Tag}}' +
- ' ' +
- ' ' +
- ' ' +
- ' {{row.item.Binary[1].Bin.toUpperCase()}}' +
- ' ' +
- ' ' +
- ' {{row.item.Binary[1].Bin.toUpperCase()}}' +
- ' ' +
- ' ' +
- ' {{row.item.Binary[1].Tag}}' +
- ' ' +
- ' ' +
- ' ' +
- ' {{row.item.Binary[0].Bin.toUpperCase()}}' +
- ' ' +
- ' ' +
- ' {{row.item.Binary[0].Bin.toUpperCase()}}' +
- ' ' +
- ' ' +
- ' {{row.item.Binary[0].Tag}}' +
- ' ' +
- ' ' +
- ' ' +
- ' ' +
- ' ' +
- ' {{row.item.Value}} ' + //text
- ' ' + //data
- ' {{row.item.Value}}' +
- ' ' +
- ' ' +
- ' ' +
- ' {{row.item.Value}} ' +
- ' {{row.item.Value}} ' +
- ' {{row.item.Value}} ' +
- ' {{row.item.Value}} ' +
- ' ' +
- ' ' +
- '' +
- ' ' +
- ' ' +
- '' +
- ' ' +
- ' ' +
- '' +
- ' ' + //TODO: only in stack
- ' ' +
- ' Stack memory keys: ' +
- ' ' +
- '' +
- ' Free stack ' +
- ' Callee: {{callee_subrutine}} ' +
- ' Caller: {{caller_subrutine}} ' +
- ' ••• {{track_stack_names.length - 2}} ' +
- ' System stack ' +
- '
' +
- '' +
- ' ' +
- ' ' +
- ' ' +
- '' +
- '
'
- }
+ if ((this.memory_segment == "stack_memory") && ((row.addr >= architecture.memory_layout[3].value))) {
+ return (Math.abs(row.addr - app._data.end_callee) < 40);
+ }
+ },
- Vue.component('table-mem', uielto_memory) ;
+ //TODO: gereric and include modal
+ select_data_type ( record, index )
+ {
+ if (this.memory_segment == "instructions_memory") {
+ return
+ }
+
+ if (this.memory_segment == "data_memory")
+ {
+ if (this.check_tag_null(record.hex)) {
+ app._data.row_index = index; //TODO: vue bidirectional updates
+ app.$refs['space_modal'].show(); //TODO: vue bidirectional updates
+ }
+ }
+
+ if (this.memory_segment == "stack_memory")
+ {
+ app._data.row_index = index; //TODO: vue bidirectional updates
+ app.$refs['stack_modal'].show(); //TODO: vue bidirectional updates
+ }
+ },
+
+ check_tag_null ( record )
+ {
+ for (var i = 0; i < record.length; i++) {
+ if (record[i].tag != null){
+ return true;
+ }
+ }
+
+ return false;
+ },
+
+ get_classes ( row )
+ {
+ return {
+ 'h6Sm ': ((row.item.addr >= architecture.memory_layout[0].value) && (row.item.addr <= architecture.memory_layout[3].value)),
+ 'h6Sm text-secondary ': ((row.item.addr < app._data.end_callee) && (Math.abs(row.item.addr - app._data.end_callee) < 40)),
+ 'h6Sm text-success ': ((row.item.addr < app._data.begin_callee) && (row.item.addr >= app._data.end_callee)),
+ 'h6Sm text-blue-funny': ((row.item.addr < app._data.begin_caller) && (row.item.addr >= app._data.end_caller)),
+ 'h6Sm ': (row.item.addr >= app._data.begin_caller)
+ }
+ }
+ },
+ computed: {
+ main_memory_items ()
+ {
+ return Object.entries(this.main_memory)
+ .sort((a, b) => a[0] - b[0])
+ .map(a => a[1])
+ }
+ },
+
+ template: ' ' +
+ '' +
+ '
' +
+ ' ' +
+ ' ' +
+ ' ' +
+ ' ' +
+ ' ' +
+ ' ' +
+ ' ' +
+ ' ' +
+ ' ' +
+ ' ' +
+ ' ' +
+ '
' +
+ ' ' +
+ ' {{item2.name[0]}}' +
+ ' ' +
+ ' ' +
+ ' ' +
+ ' ' +
+ ' {{item2.name[0]}}' +
+ ' ' +
+ ' ' +
+ ' ' +
+ ' ' +
+ ' {{item2.name[0]}}' +
+ ' ' +
+ ' ' +
+ ' ' +
+ ' ' +
+ '
' +
+ '
' +
+ ' ' +
+ ' ' +
+ ' ' +
+ ' ' +
+ ' {{row.item.addr_begin}} - {{row.item.addr_end}}' +
+ ' ' +
+ ' ' +
+ ' ' +
+ ' ' +
+ ' ' +
+ ' ' +
+ '' +
+ ' ' +
+ ' {{item.byte.toUpperCase()}}' +
+ ' ' +
+ '' +
+ ' ' +
+ ' {{item.tag}}' +
+ ' ' +
+ ' ' +
+ ' ' +
+ ' {{item.byte.toUpperCase()}}' +
+ ' ' +
+ '' +
+ ' ' +
+ ' ' +
+ ' ' +
+ ' ' +
+ ' ' +
+ ' ' +
+ ' {{row.item.value}}' +
+ ' ' +
+ ' ' +
+ ' ' +
+ ' ' +
+ ' ' +
+ '' +
+ ' ' +
+ ' ' +
+ '' +
+ ' ' +
+ ' ' +
+ '' +
+ ' ' + //TODO: only in stack
+ ' ' +
+ ' Stack memory keys: ' +
+ ' ' +
+ '' +
+ ' Free stack ' +
+ ' Callee: {{callee_subrutine}} ' +
+ ' Caller: {{caller_subrutine}} ' +
+ ' ••• {{track_stack_names.length - 2}} ' +
+ ' System stack ' +
+ '
' +
+ '' +
+ ' ' +
+ ' ' +
+ ' ' +
+ '' +
+ '
'
+ }
+
+ Vue.component('table-mem', uielto_memory) ;
diff --git a/components/simulator/creator_uielto_memory_old.js b/components/simulator/creator_uielto_memory_old.js
new file mode 100644
index 000000000..f93242898
--- /dev/null
+++ b/components/simulator/creator_uielto_memory_old.js
@@ -0,0 +1,493 @@
+/*
+ * Copyright 2018-2021 Felix Garcia Carballeira, Diego Camarmas Alonso, Alejandro Calderon Mateos
+ *
+ * This file is part of CREATOR.
+ *
+ * CREATOR is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * CREATOR is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with CREATOR. If not, see .
+ *
+ */
+
+
+ /* jshint esversion: 6 */
+
+ var uielto_memory = {
+
+ props: {
+ memory: { type: Array, required: true },
+ memory_segment: { type: String, required: true },
+ track_stack_names: { type: Array, required: true }, //TODO: optional
+ callee_subrutine: { type: String, required: true }, //TODO: optional
+ caller_subrutine: { type: String, required: true } //TODO: optional
+ },
+
+ data: function () {
+ return {
+ /*Memory table fields*/
+ memFields: ['Tag', 'Address', 'Binary', 'Value']
+ }
+ },
+
+ methods: {
+ /*Filter table*/
+ filter(row, filter){
+ if (this.memory_segment == "instructions_memory") {
+ if(row.hide == true){
+ return false;
+ }
+ else{
+ return true;
+ }
+ }
+ if (this.memory_segment == "data_memory") {
+ return true;
+ }
+ if (this.memory_segment == "stack_memory") {
+ return (Math.abs(row.Address - app._data.end_callee) < 40);
+ }
+ },
+
+ //TODO: gereric and include modal
+ select_data_type(record, index){
+ if (this.memory_segment == "instructions_memory") {
+ return
+ }
+ if (this.memory_segment == "data_memory") {
+ if(record.type == "space" && (memory[memory_hash[0]][index].Binary[0].Tag != null) || memory[memory_hash[0]][index].Binary[1].Tag != null || memory[memory_hash[0]][index].Binary[2].Tag != null || memory[memory_hash[0]][index].Binary[3].Tag != null){
+ app._data.row_index = index; //TODO: vue bidirectional updates
+ app.$refs['space_modal'].show(); //TODO: vue bidirectional updates
+ }
+ }
+ if (this.memory_segment == "stack_memory") {
+ app._data.row_index = index; //TODO: vue bidirectional updates
+ app.$refs['stack_modal'].show(); //TODO: vue bidirectional updates
+ }
+ }
+ },
+
+ template: ' ' +
+ '' +
+ '
' +
+ ' ' +
+ ' ' +
+ '' +
+ ' ' +
+ ' ' +
+ ' ' +
+ ' ' +
+ ' ' +
+ ' ' +
+ ' ' +
+ ' ' +
+ '
' +
+ ' ' +
+ ' {{item2.name[0]}}' +
+ ' ' +
+ ' ' +
+ ' ' +
+ ' ' +
+ ' {{item2.name[0]}}' +
+ ' ' +
+ ' ' +
+ ' ' +
+ ' ' +
+ ' {{item2.name[0]}}' +
+ ' ' +
+ ' ' +
+ ' ' +
+ ' ' +
+ '
' +
+ '
' +
+ ' ' +
+ ' ' +
+ ' ' +
+ ' ' + //text
+ ' 0x{{((row.item.Address + 3).toString(16)).padStart(row.item.Address.length-2, "0").toUpperCase()}} - 0x{{(row.item.Address.toString(16)).padStart(row.item.Address.length-2, "0").toUpperCase()}}' +
+ ' ' +
+ ' ' + //data
+ ' 0x{{((row.item.Address + 3).toString(16)).padStart(row.item.Address.length-2, "0").toUpperCase()}} - 0x{{(row.item.Address.toString(16)).padStart(row.item.Address.length-2, "0").toUpperCase()}}' +
+ ' ' +
+ ' ' + //Llamado
+ ' 0x{{((row.item.Address + 3).toString(16)).padStart(row.item.Address.length-2, "0").toUpperCase()}} - 0x{{(row.item.Address.toString(16)).padStart(row.item.Address.length-2, "0").toUpperCase()}}' +
+ ' ' +
+ ' ' + //Llamante
+ ' 0x{{((row.item.Address + 3).toString(16)).padStart(row.item.Address.length-2, "0").toUpperCase()}} - 0x{{(row.item.Address.toString(16)).padStart(row.item.Address.length-2, "0").toUpperCase()}}' +
+ ' ' +
+ ' ' +
+ ' 0x{{((row.item.Address + 3).toString(16)).padStart(row.item.Address.length-2, "0").toUpperCase()}} - 0x{{(row.item.Address.toString(16)).padStart(row.item.Address.length-2, "0").toUpperCase()}}' +
+ ' ' +
+ ' ' + //Antes del llamante
+ ' 0x{{((row.item.Address + 3).toString(16)).padStart(row.item.Address.length-2, "0").toUpperCase()}} - 0x{{(row.item.Address.toString(16)).padStart(row.item.Address.length-2, "0").toUpperCase()}}' +
+ ' ' +
+ ' ' +
+ ' ' +
+ ' ' +
+ ' ' + //data
+ ' ' +
+ ' {{row.item.Binary[3].Bin.toUpperCase()}}' +
+ ' ' +
+ ' ' +
+ ' {{row.item.Binary[3].Bin.toUpperCase()}}' +
+ ' ' +
+ ' ' +
+ ' {{row.item.Binary[3].Tag}}' +
+ ' ' +
+ ' ' +
+ ' ' +
+ ' {{row.item.Binary[2].Bin.toUpperCase()}}' +
+ ' ' +
+ ' ' +
+ ' {{row.item.Binary[2].Bin.toUpperCase()}}' +
+ ' ' +
+ ' ' +
+ ' {{row.item.Binary[2].Tag}}' +
+ ' ' +
+ ' ' +
+ ' ' +
+ ' {{row.item.Binary[1].Bin.toUpperCase()}}' +
+ ' ' +
+ ' ' +
+ ' {{row.item.Binary[1].Bin.toUpperCase()}}' +
+ ' ' +
+ ' ' +
+ ' {{row.item.Binary[1].Tag}}' +
+ ' ' +
+ ' ' +
+ ' ' +
+ ' {{row.item.Binary[0].Bin.toUpperCase()}}' +
+ ' ' +
+ ' ' +
+ ' {{row.item.Binary[0].Bin.toUpperCase()}}' +
+ ' ' +
+ ' ' +
+ ' {{row.item.Binary[0].Tag}}' +
+ ' ' +
+ ' ' +
+ ' ' + //text
+ ' ' +
+ ' {{row.item.Binary[3].Bin.toUpperCase()}}' +
+ ' ' +
+ ' ' +
+ ' {{row.item.Binary[3].Bin.toUpperCase()}}' +
+ ' ' +
+ ' ' +
+ ' {{row.item.Binary[3].Tag}}' +
+ ' ' +
+ ' ' +
+ ' ' +
+ ' {{row.item.Binary[2].Bin.toUpperCase()}}' +
+ ' ' +
+ ' ' +
+ ' {{row.item.Binary[2].Bin.toUpperCase()}}' +
+ ' ' +
+ ' ' +
+ ' {{row.item.Binary[2].Tag}}' +
+ ' ' +
+ ' ' +
+ ' ' +
+ ' {{row.item.Binary[1].Bin.toUpperCase()}}' +
+ ' ' +
+ ' ' +
+ ' {{row.item.Binary[1].Bin.toUpperCase()}}' +
+ ' ' +
+ ' ' +
+ ' {{row.item.Binary[1].Tag}}' +
+ ' ' +
+ ' ' +
+ ' ' +
+ ' {{row.item.Binary[0].Bin.toUpperCase()}}' +
+ ' ' +
+ ' ' +
+ ' {{row.item.Binary[0].Bin.toUpperCase()}}' +
+ ' ' +
+ ' ' +
+ ' {{row.item.Binary[0].Tag}}' +
+ ' ' +
+ ' ' +
+ ' ' + //Llamado
+ ' ' +
+ ' {{row.item.Binary[3].Bin.toUpperCase()}}' +
+ ' ' +
+ ' ' +
+ ' {{row.item.Binary[3].Bin.toUpperCase()}}' +
+ ' ' +
+ ' ' +
+ ' {{row.item.Binary[3].Tag}}' +
+ ' ' +
+ ' ' +
+ ' ' +
+ ' {{row.item.Binary[2].Bin.toUpperCase()}}' +
+ ' ' +
+ ' ' +
+ ' {{row.item.Binary[2].Bin.toUpperCase()}}' +
+ ' ' +
+ ' ' +
+ ' {{row.item.Binary[2].Tag}}' +
+ ' ' +
+ ' ' +
+ ' ' +
+ ' {{row.item.Binary[1].Bin.toUpperCase()}}' +
+ ' ' +
+ ' ' +
+ ' {{row.item.Binary[1].Bin.toUpperCase()}}' +
+ ' ' +
+ ' ' +
+ ' {{row.item.Binary[1].Tag}}' +
+ ' ' +
+ ' ' +
+ ' ' +
+ ' {{row.item.Binary[0].Bin.toUpperCase()}}' +
+ ' ' +
+ ' ' +
+ ' {{row.item.Binary[0].Bin.toUpperCase()}}' +
+ ' ' +
+ ' ' +
+ ' {{row.item.Binary[0].Tag}}' +
+ ' ' +
+ ' ' +
+ ' ' +
+ ' ' +
+ ' ' +
+ ' {{row.item.Binary[3].Bin.toUpperCase()}}' +
+ ' ' +
+ ' ' +
+ ' {{row.item.Binary[3].Bin.toUpperCase()}}' +
+ ' ' +
+ ' ' +
+ ' {{row.item.Binary[3].Tag}}' +
+ ' ' +
+ ' ' +
+ ' ' +
+ ' {{row.item.Binary[2].Bin.toUpperCase()}}' +
+ ' ' +
+ ' ' +
+ ' {{row.item.Binary[2].Bin.toUpperCase()}}' +
+ ' ' +
+ ' ' +
+ ' {{row.item.Binary[2].Tag}}' +
+ ' ' +
+ ' ' +
+ ' ' +
+ ' {{row.item.Binary[1].Bin.toUpperCase()}}' +
+ ' ' +
+ ' ' +
+ ' {{row.item.Binary[1].Bin.toUpperCase()}}' +
+ ' ' +
+ ' ' +
+ ' {{row.item.Binary[1].Tag}}' +
+ ' ' +
+ ' ' +
+ ' ' +
+ ' {{row.item.Binary[0].Bin.toUpperCase()}}' +
+ ' ' +
+ ' ' +
+ ' {{row.item.Binary[0].Bin.toUpperCase()}}' +
+ ' ' +
+ ' ' +
+ ' {{row.item.Binary[0].Tag}}' +
+ ' ' +
+ ' ' +
+ ' ' +
+ ' ' +
+ ' ' +
+ ' {{row.item.Binary[3].Bin.toUpperCase()}}' +
+ ' ' +
+ ' ' +
+ ' {{row.item.Binary[3].Bin.toUpperCase()}}' +
+ ' ' +
+ ' ' +
+ ' {{row.item.Binary[3].Tag}}' +
+ ' ' +
+ ' ' +
+ ' ' +
+ ' {{row.item.Binary[2].Bin.toUpperCase()}}' +
+ ' ' +
+ ' ' +
+ ' {{row.item.Binary[2].Bin.toUpperCase()}}' +
+ ' ' +
+ ' ' +
+ ' {{row.item.Binary[2].Tag}}' +
+ ' ' +
+ ' ' +
+ ' ' +
+ ' {{row.item.Binary[1].Bin.toUpperCase()}}' +
+ ' ' +
+ ' ' +
+ ' {{row.item.Binary[1].Bin.toUpperCase()}}' +
+ ' ' +
+ ' ' +
+ ' {{row.item.Binary[1].Tag}}' +
+ ' ' +
+ ' ' +
+ ' ' +
+ ' {{row.item.Binary[0].Bin.toUpperCase()}}' +
+ ' ' +
+ ' ' +
+ ' {{row.item.Binary[0].Bin.toUpperCase()}}' +
+ ' ' +
+ ' ' +
+ ' {{row.item.Binary[0].Tag}}' +
+ ' ' +
+ ' ' +
+ ' ' +
+ ' ' + //Antes del llamante
+ ' ' +
+ ' {{row.item.Binary[3].Bin.toUpperCase()}}' +
+ ' ' +
+ ' ' +
+ ' {{row.item.Binary[3].Bin.toUpperCase()}}' +
+ ' ' +
+ ' ' +
+ ' {{row.item.Binary[3].Tag}}' +
+ ' ' +
+ ' ' +
+ ' ' +
+ ' {{row.item.Binary[2].Bin.toUpperCase()}}' +
+ ' ' +
+ ' ' +
+ ' {{row.item.Binary[2].Bin.toUpperCase()}}' +
+ ' ' +
+ ' ' +
+ ' {{row.item.Binary[2].Tag}}' +
+ ' ' +
+ ' ' +
+ ' ' +
+ ' {{row.item.Binary[1].Bin.toUpperCase()}}' +
+ ' ' +
+ ' ' +
+ ' {{row.item.Binary[1].Bin.toUpperCase()}}' +
+ ' ' +
+ ' ' +
+ ' {{row.item.Binary[1].Tag}}' +
+ ' ' +
+ ' ' +
+ ' ' +
+ ' {{row.item.Binary[0].Bin.toUpperCase()}}' +
+ ' ' +
+ ' ' +
+ ' {{row.item.Binary[0].Bin.toUpperCase()}}' +
+ ' ' +
+ ' ' +
+ ' {{row.item.Binary[0].Tag}}' +
+ ' ' +
+ ' ' +
+ ' ' +
+ ' ' +
+ ' ' +
+ ' {{row.item.Value}} ' + //text
+ ' ' + //data
+ ' {{row.item.Value}}' +
+ ' ' +
+ ' ' +
+ ' ' +
+ ' {{row.item.Value}} ' +
+ ' {{row.item.Value}} ' +
+ ' {{row.item.Value}} ' +
+ ' {{row.item.Value}} ' +
+ ' ' +
+ ' ' +
+ '' +
+ ' ' +
+ ' ' +
+ '' +
+ ' ' +
+ ' ' +
+ '' +
+ ' ' + //TODO: only in stack
+ ' ' +
+ ' Stack memory keys: ' +
+ ' ' +
+ '' +
+ ' Free stack ' +
+ ' Callee: {{callee_subrutine}} ' +
+ ' Caller: {{caller_subrutine}} ' +
+ ' ••• {{track_stack_names.length - 2}} ' +
+ ' System stack ' +
+ '
' +
+ '' +
+ ' ' +
+ ' ' +
+ ' ' +
+ '' +
+ '
'
+ }
+
+ Vue.component('table-mem', uielto_memory) ;
+
diff --git a/index.html b/index.html
index 6d0e83cbd..6db3cab49 100644
--- a/index.html
+++ b/index.html
@@ -3248,7 +3248,7 @@
-
-
- {
if(message == "-1"){
return;
}
- if(memory[memory_hash[0]].length != 0){
- show_notification('You can not enter data in a library', 'danger') ;
- return;
+
+ if (false == OLD_CODE_ACTIVE)
+ {
+ }
+ else // if (true == OLD_CODE_ACTIVE)
+ {
+ if (memory[memory_hash[0]].length != 0) {
+ show_notification('You can not enter data in a library', 'danger') ;
+ return;
}
+ }
for (var i = 0; i < instructions_binary.length; i++){
console_log(instructions_binary[i].Label)
@@ -3303,9 +3317,9 @@ try
-
/*Convert hexadecimal number to floating point number*/
- hex2float ( hexvalue ){
+ hex2float ( hexvalue )
+ {
/*var sign = (hexvalue & 0x80000000) ? -1 : 1;
var exponent = ((hexvalue >> 23) & 0xff) - 127;
var mantissa = 1 + ((hexvalue & 0x7fffff) / 0x800000);
@@ -3377,12 +3391,14 @@ try
+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ change_data_view(e, type)
+ {
+ //TODO:
+ // 1) try to include in the memory component
-
- //TODO: delete when all dependences are remove
- change_data_view(e, type){
app._data.data_mode = e;
if(e == "registers"){
@@ -3409,8 +3425,17 @@ try
creator_ga('data', 'data.view', 'data.view.' + app._data.data_mode);
},
- //TODO: try to include in a component
- change_space_view(){
+ change_space_view()
+ {
+ //TODO:
+ // 1) try to include in the memory component
+ // 2) update code to new memory API (don't use memory abstraction datatype directly)
+
+ if (false == OLD_CODE_ACTIVE)
+ {
+ }
+ else // if (true == OLD_CODE_ACTIVE)
+ {
if(app._data.selected_space_view == "sig_int"){
var hex = "";
for (var j = 0; j < 4; j++) {
@@ -3474,15 +3499,27 @@ try
i++;
}
app._data.memory = memory;
+ }
},
- //TODO: try to include in a component
- hide_space_modal(){
+ hide_space_modal()
+ {
+ //TODO:
+ // 1) try to include in the memory component
app._data.selected_space_view = null;
},
- //TODO: try to include in a component
- change_stack_view(){
+ change_stack_view()
+ {
+ //TODO:
+ // 1) try to include in the memory component
+ // 2) update code to new memory API (don't use memory abstraction datatype directly)
+
+ if (false == OLD_CODE_ACTIVE)
+ {
+ }
+ else // if (true == OLD_CODE_ACTIVE)
+ {
if(app._data.selected_stack_view == "sig_int"){
var hex = "";
for (var j = 0; j < 4; j++) {
@@ -3512,37 +3549,18 @@ try
memory[memory_hash[2]][app._data.row_index].Value = this.hex2char8(hex);
}
app._data.memory = memory;
+ }
},
- //TODO: try to include in a component
- hide_stack_modal(){
+ hide_stack_modal()
+ {
+ //TODO:
+ // 1) try to include in the memory component
app._data.selected_stack_view = null;
},
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/*Stop user interface refresh*/
diff --git a/js/creator_compiler.js b/js/creator_compiler.js
index d22d4b806..349aa80a9 100644
--- a/js/creator_compiler.js
+++ b/js/creator_compiler.js
@@ -1172,6 +1172,7 @@ function data_segment_compiler()
return ret ;
}
+ data_address = ret.addr ;
label = null;
console_log("byte Terminado");
@@ -1253,6 +1254,7 @@ function data_segment_compiler()
return ret ;
}
+ data_address = ret.addr ;
label = null;
console_log("half Terminado");
@@ -1330,6 +1332,8 @@ function data_segment_compiler()
if (ret.status != 'ok') {
return ret ;
}
+
+ data_address = ret.addr ;
label = null;
console_log("word Terminado");
@@ -1409,6 +1413,7 @@ function data_segment_compiler()
return ret ;
}
+ data_address = ret.addr ;
label = null;
console_log("double word Terminado");
@@ -1497,11 +1502,12 @@ function data_segment_compiler()
console_log(auxTokenString);
- data_compiler(auxTokenString, architecture.directives[j].size, label, token, "float")
+ ret = data_compiler(auxTokenString, architecture.directives[j].size, label, token, "float")
if (ret.status != 'ok') {
- return ret ;
+ return ret ;
}
+ data_address = ret.addr ;
label = null;
console_log("float Terminado");
@@ -1589,11 +1595,12 @@ function data_segment_compiler()
console_log(auxTokenString);
- data_compiler(auxTokenString, architecture.directives[j].size, label, token, "double")
+ ret = data_compiler(auxTokenString, architecture.directives[j].size, label, token, "double")
if (ret.status != 'ok') {
return ret ;
}
+ data_address = ret.addr ;
label = null;
console_log("double Terminado");
@@ -1649,7 +1656,7 @@ function data_segment_compiler()
break;
}
- data_address = creator_memory_storestring ( string, string.length, data_address, label, "ascii", align );
+ data_address = creator_memory_storestring(string, string.length, data_address, label, "ascii", align);
console_log("ascii_not_null_end Terminado");
@@ -1709,7 +1716,7 @@ function data_segment_compiler()
return packCompileError('m17', "", 'error', "danger") ;
}
- data_address = creator_memory_storestring ( string, string.length, data_address, label, "asciiz", align );
+ data_address = creator_memory_storestring(string, string.length, data_address, label, "asciiz", align);
console_log("ascii_null_end Terminado");
@@ -1758,8 +1765,7 @@ function data_segment_compiler()
}
var size = parseInt(token) * architecture.directives[j].size;
-
- data_address = creator_memory_storestring ( null, size, data_address, label, "space", align );
+ data_address = creator_memory_storestring(size, size, data_address, label, "space", align);
next_token();
token = get_token();
@@ -1833,10 +1839,11 @@ function data_compiler ( value, size, dataLabel, DefValue, type )
} ;
var r = crex_memory_data_compiler(value, size, dataLabel, DefValue, type) ;
- if (r != "") {
+ if (r.msg != "") {
return packCompileError(r, "", 'error', "danger") ;
}
+ ret.addr = r.addr ;
return ret;
}
diff --git a/js/creator_memory.js b/js/creator_memory.js
index 6132d7e03..ceade95ec 100644
--- a/js/creator_memory.js
+++ b/js/creator_memory.js
@@ -31,22 +31,17 @@ var word_size_bytes = word_size_bits / 8 ;
var main_memory = [] ;
// [
- // { addr: address, bin: "00", def_bin: "00", tag: null },
+ // { addr: address, bin: "00", def_bin: "00", tag: null, reset: true, break: false },
// ...
// ]
var main_memory_datatypes = {} ;
// {
- // { "type": type, "address": addr, "value": value, "default": "00" },
+ // { "type": type, "address": addr, "value": value, "default": "00", "size": 0 },
+ // ...
// }
-var app_data_main_memory = [] ;
- // [
- // 0/{addr_begin: "0x200000", addr_end: "0x2000004", hex:[{byte: "1A", tag: "main"},...], value: "1000", eye: true},
- // 4/{addr_begin: "0x200000", addr_end: "0x2000004", hex:[{byte: "1A", tag: "main"},...], value: "1000", eye: true},
- // 8/{addr_begin: "0x200000", addr_end: "0x2000004", hex:[{byte: "1A", tag: "main"},...], value: "1000", eye: true},
- // ...
- // ]
+var OLD_CODE_ACTIVE = true;
/********************
@@ -70,14 +65,16 @@ function main_memory_datatype_get_addresses ( )
function main_memory_packs_forav ( addr, value )
{
return { addr: addr,
- bin: value, def_bin: "00",
- reset: true, break: false, tag: null } ;
+ bin: value, def_bin: "00",
+ tag: null,
+ reset: true, break: false } ;
}
-function main_memory_datatypes_packs_foravt ( addr, value, type )
+function main_memory_datatypes_packs_foravt ( addr, value, type, size )
{
- return { "type": type, "address": addr,
- "value": value, "default": "00" } ;
+ return { address: addr,
+ value: value, default: "00",
+ type: type, size: size } ;
}
// reset (set to defaults) and clear (remove all values)
@@ -106,7 +103,7 @@ function main_memory_clear ( )
main_memory_datatypes = {} ;
}
-//// Read/write (1/4): object level (compilation)
+//// Read/write (1/3): object level (compilation)
function main_memory_read ( addr )
{
@@ -122,7 +119,7 @@ function main_memory_write ( addr, value )
main_memory[addr] = value ;
}
-//// Read/write (2/4): byte level (execution)
+//// Read/write (2/3): byte level (execution)
function main_memory_read_value ( addr )
{ // main_memory_read_value ( addr: integer )
@@ -143,11 +140,16 @@ function main_memory_write_tag ( addr, tag )
main_memory_write (addr, value_obj) ;
}
-//// Read/write (3/4): type level (byte, half, word, etc)
+function main_memory_read_default_value ( addr )
+{
+ return main_memory_read(addr).def_bin ;
+}
+
+//// Read/write nbytes
function main_memory_read_nbytes ( addr, n )
{
- var value = "";
+ var value = "" ;
for (var i = 0; i < n; i++) {
value = value + main_memory_read_value(addr+i) ;
}
@@ -165,131 +167,151 @@ function main_memory_write_nbytes ( addr, value, n )
}
}
-function main_memory_read_bytype ( addr, type )
+//// Read/write (3/3): DATAtype level (byte, ..., integer, space, ...)
+
+var string_length_limit = 4*1024 ;
+
+function create_memory_read_string ( addr )
{
- var ret = 0x0 ;
+ var ch = '' ;
+ var ret_msg = '' ;
- switch (type)
- {
- case 'b':
- ret = main_memory_read_value(addr) ;
- break;
- case 'h':
- ret = main_memory_read_nbytes(addr, word_size_bytes/2) ;
- break;
- case 'w':
- ret = main_memory_read_nbytes(addr, word_size_bytes) ;
- break;
- case 'd':
- ret = main_memory_read_nbytes(addr, word_size_bytes*2) ;
- break;
+ for (var i=0; i app._data.main_memory...
- var elto = {} ;
- if (typeof app_data_main_memory[addr_base] != "undefined")
+ // get_or_create...
+ var elto = { addr:0, addr_begin:'', addr_end:'', value:'', size:0, hex:[], eye:false } ;
+ if (typeof app._data.main_memory[addr_base] != "undefined")
{ // reuse the existing element...
- elto = app_data_main_memory[addr_base] ;
+ elto = app._data.main_memory[addr_base] ;
}
else
{ // set a new element, and set the initial values...
- app_data_main_memory[addr_base] = elto ;
+ Vue.set(app._data.main_memory, addr_base, elto) ;
- elto.hex = [] ;
- for (var i=0; i 3)
+ {
+ creator_memory_updaterow(addrs[i]);
+ last_addr = curr_addr ;
+ }
+ }
+}
+
+function creator_memory_clearall ( )
+{
+ // skip if app.data does not exit...
+ if ((typeof app == "undefined") || (typeof app._data.main_memory == "undefined") ) {
+ return ;
+ }
+
+ // clear all
+ app._data.main_memory = {} ;
+}
+
/**********************************************
*
@@ -570,9 +635,16 @@ var memory = { data_memory: [], instructions_memory: [], stack_memory:
/* Write value in memory */
function writeMemory ( value, addr, type )
{
+ if (false == OLD_CODE_ACTIVE)
+ {
+ main_memory_write_bydatatype(addr, value, type, value) ;
+ creator_memory_updaterow(addr);
+ }
+ else // if (true == OLD_CODE_ACTIVE)
+ {
// NEW
- // return main_memory_write_bytype(addr, value, type) ; // FUTURE
- main_memory_write_bytype(addr, value, type) ;
+ main_memory_write_bydatatype(addr, value, type, value) ;
+ creator_memory_updaterow(addr);
// OLD
var draw = {
@@ -939,14 +1011,20 @@ draw.danger.push(executionIndex);
return;
}
}
+ }
}
// readMemory
function readMemory ( addr, type )
{
+ if (false == OLD_CODE_ACTIVE)
+ {
+ return main_memory_read_bydatatype(addr, type) ; // FUTURE
+ }
+ else // if (true == OLD_CODE_ACTIVE)
+ {
// NEW
- // return main_memory_read_bytype(addr, type) ; // FUTURE
- main_memory_read_bytype(addr, type) ;
+ main_memory_read_bydatatype(addr, type) ;
// OLD
var memValue = '';
@@ -1086,13 +1164,21 @@ return 0;
//return bi_intToBigInt(0,10) ;
return 0;
}
+ }
}
function memory_reset ( )
{
+ if (false == OLD_CODE_ACTIVE)
+ {
+ main_memory_reset() ;
+ creator_memory_updateall() ;
+ }
+ else // if (true == OLD_CODE_ACTIVE)
+ {
// NEW
- // return main_memory_reset() ; // FUTURE
main_memory_reset() ;
+ creator_memory_updateall() ;
// OLD
for (var i = 0; i < memory[memory_hash[0]].length; i++)
@@ -1123,13 +1209,20 @@ function memory_reset ( )
}
}
}
+ }
}
function crex_sbrk ( new_size )
{
+ if (false == OLD_CODE_ACTIVE)
+ {
+ var new_addr = creator_memory_alloc(new_size) ;
+ return packExecute(false, '', 'danger', new_addr) ;
+ }
+ else // if (true == OLD_CODE_ACTIVE)
+ {
// NEW
- // return creator_memory_alloc(new_size) ; // FUTURE
creator_memory_alloc(new_size) ;
// OLD
@@ -1175,13 +1268,20 @@ function crex_sbrk ( new_size )
}
return packExecute(false, '', 'danger', new_addr) ;
+ }
}
function crex_get_string_from_memory ( addr )
{
+ if (false == OLD_CODE_ACTIVE)
+ {
+ var ret_msg = main_memory_read_bydatatype(parseInt(addr), "string") ;
+ return packExecute(false, 'printed', 'info', ret_msg) ;
+ }
+ else // if (true == OLD_CODE_ACTIVE)
+ {
// NEW
- // return create_memory_read_string(parseInt(addr)) ; // FUTURE
- create_memory_read_string(parseInt(addr)) ;
+ main_memory_read_bydatatype(parseInt(addr), "string") ;
// OLD
var index = 0 ;
@@ -1235,12 +1335,18 @@ function crex_get_string_from_memory ( addr )
}
}
}
+ }
}
function crex_read_string_into_memory ( keystroke, value, addr, valueIndex, auxAddr )
{
+ if (false == OLD_CODE_ACTIVE)
+ {
+ return main_memory_write_bydatatype(parseInt(addr), keystroke, "string", keystroke) ; // FUTURE
+ }
+ else // if (true == OLD_CODE_ACTIVE)
+ {
// NEW
- // return main_memory_write_bydatatype(parseInt(addr), keystroke, "string", keystroke) ; // FUTURE
main_memory_write_bydatatype(parseInt(addr), keystroke, "string", keystroke) ;
// OLD
@@ -1376,25 +1482,46 @@ function crex_read_string_into_memory ( keystroke, value, addr, valueIndex, auxA
}
return ret;
+ }
}
function crex_memory_clear ( )
{
+ if (false == OLD_CODE_ACTIVE)
+ {
+ main_memory_clear() ;
+ creator_memory_clearall() ;
+ }
+ else // if (true == OLD_CODE_ACTIVE)
+ {
// NEW
- // return main_memory_clear() ; // FUTURE
main_memory_clear() ;
+ creator_memory_clearall() ;
// OLD
memory[memory_hash[0]] = [];
memory[memory_hash[1]] = [];
memory[memory_hash[2]] = [];
+ }
}
function crex_memory_data_compiler ( value, size, dataLabel, DefValue, type )
{
+ var ret = {
+ msg: '',
+ addr: 0
+ } ;
+
+ if (false == OLD_CODE_ACTIVE)
+ {
+ ret.addr = main_memory_storedata(data_address, value, size, dataLabel, DefValue, DefValue, type) ;
+ ret.msg = '' ;
+ return ret ;
+ }
+ else // if (true == OLD_CODE_ACTIVE)
+ {
// NEW
- // return main_memory_storedata(data_address, value, size, dataLabel, DefValue, type) ; // FUTURE
- main_memory_storedata(data_address, value, size, dataLabel, DefValue, type) ;
+ main_memory_storedata(data_address, value, size, dataLabel, DefValue, DefValue, type) ;
// OLD
for (var i = 0; i < (value.length/2); i++)
@@ -1419,7 +1546,8 @@ function crex_memory_data_compiler ( value, size, dataLabel, DefValue, type )
}
if (data_address % size != 0 && i == 0) {
- return 'm21' ;
+ ret.msg = 'm21' ;
+ return ret ;
}
if(data_address % 4 == 0){
@@ -1469,13 +1597,20 @@ function crex_memory_data_compiler ( value, size, dataLabel, DefValue, type )
}
}
- return '' ;
+ ret.addr = data_address ;
+ return ret ;
+ }
}
function creator_memory_findbytag ( tag )
{
+ if (false == OLD_CODE_ACTIVE)
+ {
+ return creator_memory_findaddress_bytag(tag) ; // FUTURE
+ }
+ else // if (true == OLD_CODE_ACTIVE)
+ {
// NEW
- // return creator_memory_findaddress_bytag(tag) ; // FUTURE
creator_memory_findaddress_bytag(tag) ;
// OLD
@@ -1513,32 +1648,35 @@ function creator_memory_findbytag ( tag )
}
return ret ;
+ }
}
function creator_memory_copytoapp ( hash_index )
{
- // NEW
- if (typeof app !== "undefined") {
- //app._data.main_memory = main_memory ; // TODO
- //app._data.main_memory_datatype = main_memory_datatype ; // TODO
- }
-
+ if (false == OLD_CODE_ACTIVE)
+ {
+ }
+ else // if (true == OLD_CODE_ACTIVE)
+ {
// OLD
if (typeof app !== "undefined") {
app._data.memory[memory_hash[hash_index]] = memory[memory_hash[hash_index]] ;
}
+ }
}
function creator_insert_instruction ( auxAddr, value, def_value, hide, hex, fill_hex, label )
{
+ if (false == OLD_CODE_ACTIVE)
+ {
+ var size = Math.ceil(hex.toString().length / 2) ;
+ return main_memory_storedata(auxAddr, hex, size, label, def_value, def_value, "instruction") ;
+ }
+ else // if (true == OLD_CODE_ACTIVE)
+ {
// NEW
var size = Math.ceil(hex.toString().length / 2) ;
- var algn = creator_memory_alignelto(auxAddr, size) ;
- main_memory_write_bydatatype(algn.new_addr, hex, "instruction", value) ;
- creator_memory_zerofill((algn.new_addr + size), (algn.new_size - size)) ;
- // auxAddr = auxAddr + algn.new_size ;
- main_memory_write_tag(algn.new_addr, label) ;
- // return auxAddr;
+ main_memory_storedata(auxAddr, hex, size, label, def_value, def_value, "instruction") ;
// OLD
for(var a = 0; a < hex.length/2; a++)
@@ -1583,12 +1721,18 @@ function creator_insert_instruction ( auxAddr, value, def_value, hide, hex, fill
}
return auxAddr;
+ }
}
function creator_memory_stackinit ( stack_address )
{
+ if (false == OLD_CODE_ACTIVE)
+ {
+ return main_memory_write_bydatatype(parseInt(stack_address), "00", "word", "00") ;
+ }
+ else // if (true == OLD_CODE_ACTIVE)
+ {
// NEW
- // return main_memory_write_bydatatype(parseInt(stack_address), "00", "word", "00") ; // FUTURE
main_memory_write_bydatatype(parseInt(stack_address), "00", "word", "00") ;
// OLD
@@ -1597,13 +1741,19 @@ function creator_memory_stackinit ( stack_address )
for(var i = 0; i<4; i++){
(memory[memory_hash[2]][memory[memory_hash[2]].length-1].Binary).push({Addr: stack_address + i, DefBin: "00", Bin: "00", Tag: null},);
}
+ }
}
function creator_memory_storestring ( string, string_length, data_address, label, type, align )
{
+ if (false == OLD_CODE_ACTIVE)
+ {
+ return main_memory_storedata(data_address, string, string_length, label, string, string, type) + 1;
+ }
+ else // if (true == OLD_CODE_ACTIVE)
+ {
// NEW
- // return main_memory_storedata(data_address, string, string_length, label, string, type) ; // FUTURE
- main_memory_storedata(data_address, string, string_length, label, string, type) ;
+ main_memory_storedata(data_address, string, string_length, label, string, string, type) ;
// OLD
var ascii;
@@ -1708,5 +1858,6 @@ function creator_memory_storestring ( string, string_length, data_address, label
}
return data_address;
+ }
}
diff --git a/js/creator_node.js b/js/creator_node.js
index be723308d..5111cdbd7 100644
--- a/js/creator_node.js
+++ b/js/creator_node.js
@@ -176,21 +176,41 @@ function get_state ( )
}
// dump memory
- for (var i in memory)
+ if (false == OLD_CODE_ACTIVE)
{
- for (var j=0; j app._data.main_memory...
- var elto = {} ;
- if (typeof app_data_main_memory[addr_base] != "undefined")
+ // get_or_create...
+ var elto = { addr:0, addr_begin:'', addr_end:'', value:'', size:0, hex:[], eye:false } ;
+ if (typeof app._data.main_memory[addr_base] != "undefined")
{ // reuse the existing element...
- elto = app_data_main_memory[addr_base] ;
+ elto = app._data.main_memory[addr_base] ;
}
else
{ // set a new element, and set the initial values...
- app_data_main_memory[addr_base] = elto ;
+ Vue.set(app._data.main_memory, addr_base, elto) ;
- elto.hex = [] ;
- for (var i=0; i 3)
+ {
+ creator_memory_updaterow(addrs[i]);
+ last_addr = curr_addr ;
+ }
+ }
+}
+
+function creator_memory_clearall ( )
+{
+ // skip if app.data does not exit...
+ if ((typeof app == "undefined") || (typeof app._data.main_memory == "undefined") ) {
+ return ;
+ }
+
+ // clear all
+ app._data.main_memory = {} ;
+}
+
/**********************************************
*
@@ -2454,9 +2519,16 @@ var memory = { data_memory: [], instructions_memory: [], stack_memory:
/* Write value in memory */
function writeMemory ( value, addr, type )
{
+ if (false == OLD_CODE_ACTIVE)
+ {
+ main_memory_write_bydatatype(addr, value, type, value) ;
+ creator_memory_updaterow(addr);
+ }
+ else // if (true == OLD_CODE_ACTIVE)
+ {
// NEW
- // return main_memory_write_bytype(addr, value, type) ; // FUTURE
- main_memory_write_bytype(addr, value, type) ;
+ main_memory_write_bydatatype(addr, value, type, value) ;
+ creator_memory_updaterow(addr);
// OLD
var draw = {
@@ -2823,14 +2895,20 @@ draw.danger.push(executionIndex);
return;
}
}
+ }
}
// readMemory
function readMemory ( addr, type )
{
+ if (false == OLD_CODE_ACTIVE)
+ {
+ return main_memory_read_bydatatype(addr, type) ; // FUTURE
+ }
+ else // if (true == OLD_CODE_ACTIVE)
+ {
// NEW
- // return main_memory_read_bytype(addr, type) ; // FUTURE
- main_memory_read_bytype(addr, type) ;
+ main_memory_read_bydatatype(addr, type) ;
// OLD
var memValue = '';
@@ -2970,13 +3048,21 @@ return 0;
//return bi_intToBigInt(0,10) ;
return 0;
}
+ }
}
function memory_reset ( )
{
+ if (false == OLD_CODE_ACTIVE)
+ {
+ main_memory_reset() ;
+ creator_memory_updateall() ;
+ }
+ else // if (true == OLD_CODE_ACTIVE)
+ {
// NEW
- // return main_memory_reset() ; // FUTURE
main_memory_reset() ;
+ creator_memory_updateall() ;
// OLD
for (var i = 0; i < memory[memory_hash[0]].length; i++)
@@ -3007,13 +3093,20 @@ function memory_reset ( )
}
}
}
+ }
}
function crex_sbrk ( new_size )
{
+ if (false == OLD_CODE_ACTIVE)
+ {
+ var new_addr = creator_memory_alloc(new_size) ;
+ return packExecute(false, '', 'danger', new_addr) ;
+ }
+ else // if (true == OLD_CODE_ACTIVE)
+ {
// NEW
- // return creator_memory_alloc(new_size) ; // FUTURE
creator_memory_alloc(new_size) ;
// OLD
@@ -3059,13 +3152,20 @@ function crex_sbrk ( new_size )
}
return packExecute(false, '', 'danger', new_addr) ;
+ }
}
function crex_get_string_from_memory ( addr )
{
+ if (false == OLD_CODE_ACTIVE)
+ {
+ var ret_msg = main_memory_read_bydatatype(parseInt(addr), "string") ;
+ return packExecute(false, 'printed', 'info', ret_msg) ;
+ }
+ else // if (true == OLD_CODE_ACTIVE)
+ {
// NEW
- // return create_memory_read_string(parseInt(addr)) ; // FUTURE
- create_memory_read_string(parseInt(addr)) ;
+ main_memory_read_bydatatype(parseInt(addr), "string") ;
// OLD
var index = 0 ;
@@ -3119,12 +3219,18 @@ function crex_get_string_from_memory ( addr )
}
}
}
+ }
}
function crex_read_string_into_memory ( keystroke, value, addr, valueIndex, auxAddr )
{
+ if (false == OLD_CODE_ACTIVE)
+ {
+ return main_memory_write_bydatatype(parseInt(addr), keystroke, "string", keystroke) ; // FUTURE
+ }
+ else // if (true == OLD_CODE_ACTIVE)
+ {
// NEW
- // return main_memory_write_bydatatype(parseInt(addr), keystroke, "string", keystroke) ; // FUTURE
main_memory_write_bydatatype(parseInt(addr), keystroke, "string", keystroke) ;
// OLD
@@ -3260,25 +3366,46 @@ function crex_read_string_into_memory ( keystroke, value, addr, valueIndex, auxA
}
return ret;
+ }
}
function crex_memory_clear ( )
{
+ if (false == OLD_CODE_ACTIVE)
+ {
+ main_memory_clear() ;
+ creator_memory_clearall() ;
+ }
+ else // if (true == OLD_CODE_ACTIVE)
+ {
// NEW
- // return main_memory_clear() ; // FUTURE
main_memory_clear() ;
+ creator_memory_clearall() ;
// OLD
memory[memory_hash[0]] = [];
memory[memory_hash[1]] = [];
memory[memory_hash[2]] = [];
+ }
}
function crex_memory_data_compiler ( value, size, dataLabel, DefValue, type )
{
+ var ret = {
+ msg: '',
+ addr: 0
+ } ;
+
+ if (false == OLD_CODE_ACTIVE)
+ {
+ ret.addr = main_memory_storedata(data_address, value, size, dataLabel, DefValue, DefValue, type) ;
+ ret.msg = '' ;
+ return ret ;
+ }
+ else // if (true == OLD_CODE_ACTIVE)
+ {
// NEW
- // return main_memory_storedata(data_address, value, size, dataLabel, DefValue, type) ; // FUTURE
- main_memory_storedata(data_address, value, size, dataLabel, DefValue, type) ;
+ main_memory_storedata(data_address, value, size, dataLabel, DefValue, DefValue, type) ;
// OLD
for (var i = 0; i < (value.length/2); i++)
@@ -3303,7 +3430,8 @@ function crex_memory_data_compiler ( value, size, dataLabel, DefValue, type )
}
if (data_address % size != 0 && i == 0) {
- return 'm21' ;
+ ret.msg = 'm21' ;
+ return ret ;
}
if(data_address % 4 == 0){
@@ -3353,13 +3481,20 @@ function crex_memory_data_compiler ( value, size, dataLabel, DefValue, type )
}
}
- return '' ;
+ ret.addr = data_address ;
+ return ret ;
+ }
}
function creator_memory_findbytag ( tag )
{
+ if (false == OLD_CODE_ACTIVE)
+ {
+ return creator_memory_findaddress_bytag(tag) ; // FUTURE
+ }
+ else // if (true == OLD_CODE_ACTIVE)
+ {
// NEW
- // return creator_memory_findaddress_bytag(tag) ; // FUTURE
creator_memory_findaddress_bytag(tag) ;
// OLD
@@ -3397,32 +3532,35 @@ function creator_memory_findbytag ( tag )
}
return ret ;
+ }
}
function creator_memory_copytoapp ( hash_index )
{
- // NEW
- if (typeof app !== "undefined") {
- //app._data.main_memory = main_memory ; // TODO
- //app._data.main_memory_datatype = main_memory_datatype ; // TODO
- }
-
+ if (false == OLD_CODE_ACTIVE)
+ {
+ }
+ else // if (true == OLD_CODE_ACTIVE)
+ {
// OLD
if (typeof app !== "undefined") {
app._data.memory[memory_hash[hash_index]] = memory[memory_hash[hash_index]] ;
}
+ }
}
function creator_insert_instruction ( auxAddr, value, def_value, hide, hex, fill_hex, label )
{
+ if (false == OLD_CODE_ACTIVE)
+ {
+ var size = Math.ceil(hex.toString().length / 2) ;
+ return main_memory_storedata(auxAddr, hex, size, label, def_value, def_value, "instruction") ;
+ }
+ else // if (true == OLD_CODE_ACTIVE)
+ {
// NEW
var size = Math.ceil(hex.toString().length / 2) ;
- var algn = creator_memory_alignelto(auxAddr, size) ;
- main_memory_write_bydatatype(algn.new_addr, hex, "instruction", value) ;
- creator_memory_zerofill((algn.new_addr + size), (algn.new_size - size)) ;
- // auxAddr = auxAddr + algn.new_size ;
- main_memory_write_tag(algn.new_addr, label) ;
- // return auxAddr;
+ main_memory_storedata(auxAddr, hex, size, label, def_value, def_value, "instruction") ;
// OLD
for(var a = 0; a < hex.length/2; a++)
@@ -3467,12 +3605,18 @@ function creator_insert_instruction ( auxAddr, value, def_value, hide, hex, fill
}
return auxAddr;
+ }
}
function creator_memory_stackinit ( stack_address )
{
+ if (false == OLD_CODE_ACTIVE)
+ {
+ return main_memory_write_bydatatype(parseInt(stack_address), "00", "word", "00") ;
+ }
+ else // if (true == OLD_CODE_ACTIVE)
+ {
// NEW
- // return main_memory_write_bydatatype(parseInt(stack_address), "00", "word", "00") ; // FUTURE
main_memory_write_bydatatype(parseInt(stack_address), "00", "word", "00") ;
// OLD
@@ -3481,13 +3625,19 @@ function creator_memory_stackinit ( stack_address )
for(var i = 0; i<4; i++){
(memory[memory_hash[2]][memory[memory_hash[2]].length-1].Binary).push({Addr: stack_address + i, DefBin: "00", Bin: "00", Tag: null},);
}
+ }
}
function creator_memory_storestring ( string, string_length, data_address, label, type, align )
{
+ if (false == OLD_CODE_ACTIVE)
+ {
+ return main_memory_storedata(data_address, string, string_length, label, string, string, type) + 1;
+ }
+ else // if (true == OLD_CODE_ACTIVE)
+ {
// NEW
- // return main_memory_storedata(data_address, string, string_length, label, string, type) ; // FUTURE
- main_memory_storedata(data_address, string, string_length, label, string, type) ;
+ main_memory_storedata(data_address, string, string_length, label, string, string, type) ;
// OLD
var ascii;
@@ -3592,6 +3742,7 @@ function creator_memory_storestring ( string, string_length, data_address, label
}
return data_address;
+ }
}
/*
@@ -4768,6 +4919,7 @@ function data_segment_compiler()
return ret ;
}
+ data_address = ret.addr ;
label = null;
console_log("byte Terminado");
@@ -4849,6 +5001,7 @@ function data_segment_compiler()
return ret ;
}
+ data_address = ret.addr ;
label = null;
console_log("half Terminado");
@@ -4926,6 +5079,8 @@ function data_segment_compiler()
if (ret.status != 'ok') {
return ret ;
}
+
+ data_address = ret.addr ;
label = null;
console_log("word Terminado");
@@ -5005,6 +5160,7 @@ function data_segment_compiler()
return ret ;
}
+ data_address = ret.addr ;
label = null;
console_log("double word Terminado");
@@ -5093,11 +5249,12 @@ function data_segment_compiler()
console_log(auxTokenString);
- data_compiler(auxTokenString, architecture.directives[j].size, label, token, "float")
+ ret = data_compiler(auxTokenString, architecture.directives[j].size, label, token, "float")
if (ret.status != 'ok') {
- return ret ;
+ return ret ;
}
+ data_address = ret.addr ;
label = null;
console_log("float Terminado");
@@ -5185,11 +5342,12 @@ function data_segment_compiler()
console_log(auxTokenString);
- data_compiler(auxTokenString, architecture.directives[j].size, label, token, "double")
+ ret = data_compiler(auxTokenString, architecture.directives[j].size, label, token, "double")
if (ret.status != 'ok') {
return ret ;
}
+ data_address = ret.addr ;
label = null;
console_log("double Terminado");
@@ -5245,7 +5403,7 @@ function data_segment_compiler()
break;
}
- data_address = creator_memory_storestring ( string, string.length, data_address, label, "ascii", align );
+ data_address = creator_memory_storestring(string, string.length, data_address, label, "ascii", align);
console_log("ascii_not_null_end Terminado");
@@ -5305,7 +5463,7 @@ function data_segment_compiler()
return packCompileError('m17', "", 'error', "danger") ;
}
- data_address = creator_memory_storestring ( string, string.length, data_address, label, "asciiz", align );
+ data_address = creator_memory_storestring(string, string.length, data_address, label, "asciiz", align);
console_log("ascii_null_end Terminado");
@@ -5354,8 +5512,7 @@ function data_segment_compiler()
}
var size = parseInt(token) * architecture.directives[j].size;
-
- data_address = creator_memory_storestring ( null, size, data_address, label, "space", align );
+ data_address = creator_memory_storestring(size, size, data_address, label, "space", align);
next_token();
token = get_token();
@@ -5429,10 +5586,11 @@ function data_compiler ( value, size, dataLabel, DefValue, type )
} ;
var r = crex_memory_data_compiler(value, size, dataLabel, DefValue, type) ;
- if (r != "") {
+ if (r.msg != "") {
return packCompileError(r, "", 'error', "danger") ;
}
+ ret.addr = r.addr ;
return ret;
}
@@ -8312,21 +8470,41 @@ function get_state ( )
}
// dump memory
- for (var i in memory)
+ if (false == OLD_CODE_ACTIVE)
{
- for (var j=0; j>>0,int_base).value;else auxBigInt=BigInt(parseInt(int_value)>>>0,int_base);return auxBigInt}function register_value_deserialize(object){var auxObject=object;for(var i=0;i"}catch(e){o=o+e+" "}}}return o}function checkTypeIEEE(s,e,m){let rd=0;if(!m&&!e)rd=s?1<<3:1<<4;else if(!e)rd=s?1<<2:1<<5;else if(!(e^255))if(m)rd=s?1<<8:1<<9;else rd=s?1<<0:1<<7;else rd=s?1<<1:1<<6;return rd}function hex2char8(hexvalue){var num_char=hexvalue.toString().length/2;var exponent=0;var pos=0;var valuec=[];for(var i=0;i=3;i-=4){part=s.substr(i+1-4,4);accum=0;for(k=0;k<4;k+=1){if(part[k]!=="0"&&part[k]!=="1"){return{valid:false}}accum=accum*2+parseInt(part[k],10)}if(accum>=10){ret=String.fromCharCode(accum-10+"A".charCodeAt(0))+ret}else{ret=String(accum)+ret}}if(i>=0){accum=0;for(k=0;k<=i;k+=1){if(s[k]!=="0"&&s[k]!=="1"){return{valid:false}}accum=accum*2+parseInt(s[k],10)}ret=String(accum)+ret}return ret}function hex2double(hexvalue){var value=hexvalue.split("x");var value_bit="";for(var i=0;i{}]/g,"_");re=new RegExp("^[0-9]+$");if(value2.search(re)!=-1&&prefix!="undefined"){value2=prefix+value2}return value2}var track_stack_names=[];var track_stack_limits=[];function track_stack_create(){var ret={ok:true,msg:""};track_stack_names=[];track_stack_limits=[];track_stack_enter("main");return ret}function track_stack_enter(function_name){var ret={ok:true,msg:""};track_stack_names.push(function_name);var new_elto={function_name:function_name,begin_caller:track_stack_getTop().val.begin_callee,end_caller:track_stack_getTop().val.end_callee,begin_callee:architecture.memory_layout[4].value,end_callee:architecture.memory_layout[4].value};track_stack_limits.push(new_elto);if(typeof window!=="undefined"){app._data.callee_subrutine=track_stack_names[track_stack_names.length-1];app._data.caller_subrutine=track_stack_names[track_stack_names.length-2];app._data.begin_caller=new_elto.begin_caller;app._data.end_caller=new_elto.end_caller;app._data.begin_callee=new_elto.begin_callee;app._data.end_callee=new_elto.end_callee}return ret}function track_stack_leave(){var ret={ok:true,msg:""};if(0==track_stack_limits.length){ret.msg="track_stack_Leave: empty track_stack_limits !!.\n";return ret}track_stack_limits.pop();if(track_stack_names.length>0){track_stack_names.pop()}var elto_top=track_stack_getTop();if(typeof window!=="undefined"&&elto_top.val!=null){app._data.callee_subrutine=track_stack_names[track_stack_names.length-1];app._data.caller_subrutine=track_stack_names[track_stack_names.length-2];app._data.begin_caller=elto_top.val.begin_caller;app._data.end_caller=elto_top.val.end_caller;app._data.begin_callee=elto_top.val.begin_callee;app._data.end_callee=elto_top.val.end_callee}return ret}function track_stack_getTop(){var ret={ok:true,val:{begin_caller:architecture.memory_layout[4].value,end_caller:architecture.memory_layout[4].value,begin_callee:architecture.memory_layout[4].value,end_callee:architecture.memory_layout[4].value},msg:""};if(0==track_stack_limits.length){ret.ok=false;ret.msg="track_stack_getTop: empty track_stack_limits !!.\n";return ret}ret.val=track_stack_limits[track_stack_limits.length-1];if(typeof ret.val.begin_caller==="undefined"){ret.val.begin_caller=architecture.memory_layout[4].value}return ret}function track_stack_setTop(field,indexComponent,indexElement,value){var ret={ok:true,msg:""};if(0==track_stack_limits.length){ret.ok=false;ret.msg="track_stack_getTop: empty track_stack_limits !!.\n";return ret}var elto=track_stack_limits[track_stack_limits.length-1];if(typeof elto.length!=="undefined"){elto[field][indexComponent][indexElement]=value;return ret}elto[field]=value;return ret}function track_stack_setsp(value){if(typeof window!=="undefined"){app._data.end_callee=value}if(0==track_stack_limits.length){return}var elto=track_stack_limits[track_stack_limits.length-1];elto.end_callee=value}function track_stack_reset(){var ret={ok:true,msg:""};track_stack_names=[];track_stack_limits=[];track_stack_enter("main");if(typeof window!=="undefined"){app._data.track_stack_names=track_stack_names;app._data.callee_subrutine=track_stack_names[track_stack_names.length-1];app._data.caller_subrutine="";app._data.begin_caller=architecture.memory_layout[4].value;app._data.end_caller=architecture.memory_layout[4].value;app._data.begin_callee=architecture.memory_layout[4].value;app._data.end_callee=architecture.memory_layout[4].value}return ret}var stack_call_names=[];var stack_state_transition=[{"wm==":1,"wm!=":1,rm:2,wr:40,rr:0,end:3},{"wm==":1,"wm!=":7,rm:6,wr:5,rr:1,end:40},{"wm==":1,"wm!=":1,rm:2,wr:45,rr:2,end:3},{"wm==":-1,"wm!=":-1,rm:-1,wr:-1,rr:-1,end:-1},{"wm==":-1,"wm!=":-1,rm:-1,wr:-1,rr:-1,end:-1},{"wm==":44,"wm!=":5,rm:6,wr:5,rr:5,end:43},{"wm==":44,"wm!=":6,rm:6,wr:0,rr:6,end:43},{"wm==":7,"wm!=":7,rm:6,wr:5,rr:7,end:42}];var stack_call_register=[];function creator_callstack_create(){var ret={ok:true,msg:""};stack_call_names=[];stack_call_register=[];creator_callstack_enter("main");return ret}function creator_callstack_enter(function_name){var ret={ok:true,msg:""};stack_call_names.push(function_name);var arr_sm=[];var arr_write=[];var arr_read=[];var arr_value=[];var arr_size_write=[];var arr_size_read=[];for(var i=0;i0){stack_call_names.pop()}return ret}function creator_callstack_getTop(){var ret={ok:true,val:null,msg:""};if(0==stack_call_register.length){ret.ok=false;ret.msg="creator_callstack_getTop: empty stack_call_register !!.\n";return ret}ret.val=stack_call_register[stack_call_register.length-1];return ret}function creator_callstack_setTop(field,indexComponent,indexElement,value){var ret={ok:true,msg:""};if(0==stack_call_register.length){ret.ok=false;ret.msg="creator_callstack_getTop: empty stack_call_register !!.\n";return ret}var elto=stack_call_register[stack_call_register.length-1];if(typeof elto.length!=="undefined"){elto[field][indexComponent][indexElement]=value;return ret}elto[field]=value;return ret}function creator_callstack_setState(indexComponent,indexElement,newState){var elto=creator_callstack_getTop();if(elto.ok==false){console_log("creator_callstack_setState: "+elto.msg);return""}elto.val.register_sm[indexComponent][indexElement]=newState}function creator_callstack_getState(indexComponent,indexElement){var elto=creator_callstack_getTop();if(elto.ok==false){console_log("creator_callstack_getState: "+elto.msg);return""}return elto.val.register_sm[indexComponent][indexElement]}function creator_callstack_newWrite(indexComponent,indexElement,address,length){creator_callstack_do_transition("wm",indexComponent,indexElement,address);var elto=creator_callstack_getTop();if(elto.ok==false){console_log("creator_callstack_newWrite: "+elto.msg);return""}elto.val.register_address_write[indexComponent][indexElement].push(address);elto.val.register_size_write[indexComponent][indexElement].push(length)}function creator_callstack_newRead(indexComponent,indexElement,address,length){var elto=creator_callstack_getTop();if(elto.ok==false){console_log("creator_callstack_newRead: "+elto.msg);return""}elto.val.register_address_read[indexComponent][indexElement].push(address);elto.val.register_size_read[indexComponent][indexElement].push(length);creator_callstack_do_transition("rm",indexComponent,indexElement,address)}function creator_callstack_writeRegister(indexComponent,indexElement){creator_callstack_do_transition("wr",indexComponent,indexElement,address)}function creator_callstack_reset(){var ret={ok:true,msg:""};stack_call_names=[];stack_call_register=[];creator_callstack_enter("main");return ret}function creator_callstack_do_transition(doAction,indexComponent,indexElement,address){var state=creator_callstack_getState(indexComponent,indexElement);var action=doAction;if(doAction=="wm"){var elto=creator_callstack_getTop();if(elto.ok==false){console_log("creator_callstack_do_transition: "+elto.msg);return""}var equal=elto.val.register_address_write[indexComponent][indexElement].includes(address);action=equal?"wm==":"wm!="}if(typeof stack_state_transition[state]==="undefined"||typeof stack_state_transition[state][action]==="undefined"){if(state<40||state<0){console_log("creator_callstack_do_transition: undefined action")}return}var new_state=stack_state_transition[state][action];creator_callstack_setState(indexComponent,indexElement,new_state);if(action!="end"){console_log("creator_callstack_do_transition ["+architecture.components[indexComponent].elements[indexElement].name+"]: transition from "+"state '"+state+"'' to state '"+new_state+"' and action '"+action+"' is empty (warning).")}}function capi_raise(msg){if(typeof app!=="undefined")app.exception(msg);else console.log(msg)}function capi_arithmetic_overflow(op1,op2,res_u){op1_u=capi_uint2int(op1);op2_u=capi_uint2int(op2);res_u=capi_uint2int(res_u);return op1_u>0&&op2_u>0&&res_u<0||op1_u<0&&op2_u<0&&res_u>0}function capi_bad_align(addr,type){size=creator_memory_type2size(type);return addr%size!=0}function capi_mem_write(addr,value,type){var size=1;if(capi_bad_align(addr,type)){capi_raise("The memory must be align");return}try{writeMemory(value,addr,type)}catch(e){capi_raise("Invalid memory access to address '0x"+addr.toString(16)+"'")}}function capi_mem_read(addr,type){var size=1;var val=0;if(capi_bad_align(addr,type)){capi_raise("The memory must be align");return val}var addr_16=parseInt(addr,16);if(addr_16>=architecture.memory_layout[0].value&&addr_16<=architecture.memory_layout[1].value){creator_executor_exit();capi_raise("Segmentation fault. You tried to read in the text segment")}try{val=readMemory(addr,type)}catch(e){capi_raise("Invalid memory access to address '0x"+addr.toString(16)+"'");creator_executor_exit();return val}return creator_memory_value_by_type(val,type)}function capi_exit(){creator_ga("execute","execute.syscall","execute.syscall.exit");return creator_executor_exit()}function capi_print_int(value1){creator_ga("execute","execute.syscall","execute.syscall.print_int");var ret1=crex_findReg(value1);if(ret1.match==0){throw packExecute(true,"capi_syscall: register "+value1+" not found","danger",null)}var value=architecture.components[ret1.indexComp].elements[ret1.indexElem].value;var val_int=parseInt(value.toString())>>0;display_print(val_int)}function capi_print_float(value1){creator_ga("execute","execute.syscall","execute.syscall.print_float");var ret1=crex_findReg(value1);if(ret1.match==0){throw packExecute(true,"capi_syscall: register "+value1+" not found","danger",null)}var value=architecture.components[ret1.indexComp].elements[ret1.indexElem].value;display_print(value)}function capi_print_double(value1){creator_ga("execute","execute.syscall","execute.syscall.print_double");var ret1=crex_findReg(value1);if(ret1.match==0){throw packExecute(true,"capi_syscall: register "+value1+" not found","danger",null)}var value=architecture.components[ret1.indexComp].elements[ret1.indexElem].value;display_print(value)}function capi_print_char(value1){creator_ga("execute","execute.syscall","execute.syscall.print_char");var ret1=crex_findReg(value1);if(ret1.match==0){throw packExecute(true,"capi_syscall: register "+value1+" not found","danger",null)}var aux=architecture.components[ret1.indexComp].elements[ret1.indexElem].value;var aux2=aux.toString(16);var length=aux2.length;var value=aux2.substring(length-2,length);value=String.fromCharCode(parseInt(value,16));display_print(value)}function capi_print_string(value1){creator_ga("execute","execute.syscall","execute.syscall.print_string");var ret1=crex_findReg(value1);if(ret1.match==0){throw packExecute(true,"capi_syscall: register "+value1+" not found","danger",null)}var addr=architecture.components[ret1.indexComp].elements[ret1.indexElem].value;var ret=crex_get_string_from_memory(addr);if(ret.error==true){throw packExecute(true,ret.msg,ret.type,ret.draw)}display_print(ret.draw)}function capi_read_int(value1){creator_ga("execute","execute.syscall","execute.syscall.read_int");var ret1=crex_findReg(value1);if(ret1.match==0){throw packExecute(true,"capi_syscall: register "+value1+" not found","danger",null)}document.getElementById("enter_keyboard").scrollIntoView();return keyboard_read(kbd_read_int,ret1)}function capi_read_float(value1){creator_ga("execute","execute.syscall","execute.syscall.read_float");var ret1=crex_findReg(value1);if(ret1.match==0){throw packExecute(true,"capi_syscall: register "+value1+" not found","danger",null)}document.getElementById("enter_keyboard").scrollIntoView();return keyboard_read(kbd_read_float,ret1)}function capi_read_double(value1){creator_ga("execute","execute.syscall","execute.syscall.read_double");var ret1=crex_findReg(value1);if(ret1.match==0){throw packExecute(true,"capi_syscall: register "+value1+" not found","danger",null)}document.getElementById("enter_keyboard").scrollIntoView();return keyboard_read(kbd_read_double,ret1)}function capi_read_char(value1){creator_ga("execute","execute.syscall","execute.syscall.read_char");var ret1=crex_findReg(value1);if(ret1.match==0){throw packExecute(true,"capi_syscall: register "+value1+" not found","danger",null)}document.getElementById("enter_keyboard").scrollIntoView();return keyboard_read(kbd_read_char,ret1)}function capi_read_string(value1,value2){creator_ga("execute","execute.syscall","execute.syscall.read_string");var ret1=crex_findReg(value1);if(ret1.match==0){throw packExecute(true,"capi_syscall: register "+value1+" not found","danger",null)}var ret2=crex_findReg(value2);if(ret2.match==0){throw packExecute(true,"capi_syscall: register "+value2+" not found","danger",null)}document.getElementById("enter_keyboard").scrollIntoView();ret1.indexComp2=ret2.indexComp;ret1.indexElem2=ret2.indexElem;return keyboard_read(kbd_read_string,ret1)}function capi_sbrk(value1,value2){creator_ga("execute","execute.syscall","execute.syscall.sbrk");var ret1=crex_findReg(value1);if(ret1.match==0){throw packExecute(true,"capi_syscall: register "+value1+" not found","danger",null)}var ret2=crex_findReg(value2);if(ret2.match==0){throw packExecute(true,"capi_syscall: register "+value2+" not found","danger",null)}var new_size=parseInt(architecture.components[ret1.indexComp].elements[ret1.indexElem].value);var ret=crex_sbrk(new_size);if(ret.error==true){throw packExecute(true,ret.msg,ret.type,ret.draw)}architecture.components[ret2.indexComp].elements[ret2.indexElem].value=ret.draw}function capi_callconv_begin(addr){var function_name="";if(typeof architecture.components[0]!=="undefined"){if(typeof tag_instructions[addr]=="undefined")function_name="0x"+parseInt(addr).toString(16);else function_name=tag_instructions[addr]}creator_callstack_enter(function_name)}function capi_callconv_end(){var ret=creator_callstack_leave();if(ret.ok){return}creator_ga("execute","execute.exception","execute.exception.protection_jrra"+ret.msg);crex_show_notification(ret.msg,"danger")}function capi_callconv_memAction(action,addr,reg_name,type){var ret=crex_findReg(reg_name);if(ret.match==0){return}var i=ret.indexComp;var j=ret.indexElem;switch(action){case"write":creator_callstack_newWrite(i,j,addr,type);break;case"read":creator_callstack_newRead(i,j,addr,type);break;default:crex_show_notification(" Unknown action '"+action+"' at ...sing_convention_memory.\n","danger");break}}function capi_drawstack_begin(addr){var function_name="";if(typeof architecture.components[0]!=="undefined"){if(typeof tag_instructions[addr]=="undefined")function_name="0x"+parseInt(addr).toString(16);else function_name=tag_instructions[addr]}track_stack_enter(function_name)}function capi_drawstack_end(){var ret=track_stack_leave();if(ret.ok){return}crex_show_notification(ret.msg,"warning")}function capi_split_double(reg,index){var value=bin2hex(double2bin(reg));console_log(value);if(index==0){return value.substring(0,8)}if(index==1){return value.substring(8,16)}}function capi_uint2float32(value){return uint_to_float32(value)}function capi_float322uint(value){return float32_to_uint(value)}function capi_int2uint(value){return value>>>0}function capi_uint2int(value){return value>>0}function capi_uint2float64(value0,value1){return uint_to_float64(value0,value1)}function capi_float642uint(value){return float64_to_uint(value)}function capi_check_ieee(s,e,m){return checkTypeIEEE(s,e,m)}function capi_float2bin(f){return float2bin(f)}function capi_eval(expr){eval(crex_replace_magic(expr))}function crex_findReg(value1){var ret={};ret.match=0;ret.indexComp=null;ret.indexElem=null;if(value1==""){return ret}for(var i=0;i>24;break;case"h":val=val&65535;if(val&32768)val=4294901760|val;break;case"hu":val=val<<16>>16;break;default:break}return val}function creator_memory_alignelto(new_addr,new_size){var ret={new_addr:new_addr,new_size:new_size};for(var i=0;iarchitecture.memory_layout[0].value&&addrarchitecture.memory_layout[2].value&&addrarchitecture.memory_layout[4].value&&addr>0}var charIndex=memValue.length-1;for(var z=0;z>0}if(typeof app!=="undefined")app._data.memory[index]=memory[index];return}}}for(var i=0;iaddr){var aux_addr=addr-addr%4;memory[index].splice(i,0,{Address:aux_addr,Binary:[],Value:parseInt(memValue,16)>>0,DefValue:null,reset:false});var charIndex=memValue.length-1;for(var z=0;z<4;z++){memory[index][i].Binary.push({Addr:aux_addr+z,DefBin:"00",Bin:memValue.charAt(charIndex-1).toUpperCase()+memValue.charAt(charIndex).toUpperCase(),Tag:null});charIndex=charIndex-2}if(typeof app!=="undefined")app._data.memory[index]=memory[index];return}else if(i==memory[index].length-1){var aux_addr=addr-addr%4;memory[index].push({Address:aux_addr,Binary:[],Value:parseInt(memValue,16)>>0,DefValue:null,reset:false});var charIndex=memValue.length-1;for(var z=0;z<4;z++){memory[index][i+1].Binary.push({Addr:aux_addr+z,DefBin:"00",Bin:memValue.charAt(charIndex-1).toUpperCase()+memValue.charAt(charIndex).toUpperCase(),Tag:null});charIndex=charIndex-2}if(typeof app!=="undefined")app._data.memory[index]=memory[index];return}}if(memory[index].length==0){var aux_addr=addr-addr%4;memory[index].push({Address:aux_addr,Binary:[],Value:parseInt(memValue,16)>>0,DefValue:null,reset:false});var charIndex=memValue.length-1;for(var z=0;z<4;z++){memory[index][memory[index].length-1].Binary.push({Addr:aux_addr+z,DefBin:"00",Bin:memValue.charAt(charIndex-1).toUpperCase()+memValue.charAt(charIndex).toUpperCase(),Tag:null});charIndex=charIndex-2}if(typeof app!=="undefined")app._data.memory[index]=memory[index];return}}if(type=="h"){if(addr>architecture.memory_layout[0].value&&addrarchitecture.memory_layout[2].value&&addrarchitecture.memory_layout[4].value&&addr=0;z=z-2){memory[index][i].Value=memory[index][i].Value+(parseInt(memory[index][i].Binary[z].Bin+memory[index][i].Binary[z-1].Bin,16)>>0)+" "}if(typeof app!=="undefined")app._data.memory[index]=memory[index];return}else{var charIndex=memValue.length-1;for(var z=2;zaddr){var aux_addr=addr-addr%4;memory[index].splice(i,0,{Address:aux_addr,Binary:[],Value:null,DefValue:null,reset:false});var charIndex=memValue.length-1;for(var z=0;z<4;z++){memory[index][i].Binary.push({Addr:aux_addr+z,DefBin:"00",Bin:"00",Tag:null})}for(var j=0;j>0);if(typeof app!=="undefined")app._data.memory[index]=memory[index];return}else{var charIndex=memValue.length-1;for(var z=2;z>0)+" 0";if(typeof app!=="undefined")app._data.memory[index]=memory[index];return}}}return}else if(i==memory[index].length-1){var aux_addr=addr-addr%4;memory[index].push({Address:aux_addr,Binary:[],Value:null,DefValue:null,reset:false});var charIndex=memValue.length-1;for(var z=0;z<4;z++){memory[index][i+1].Binary.push({Addr:aux_addr+z,DefBin:"00",Bin:"00",Tag:null})}for(var j=0;j>0);if(typeof app!=="undefined")app._data.memory[index]=memory[index];return}else{var charIndex=memValue.length-1;for(var z=2;z>0);if(typeof app!=="undefined")app._data.memory[index]=memory[index];return}else{var charIndex=memValue.length-1;for(var z=2;z>0)+" 0";if(typeof app!=="undefined")app._data.memory[index]=memory[index];return}}}return}}if(type=="b"){if(addr>architecture.memory_layout[0].value&&addrarchitecture.memory_layout[2].value&&addrarchitecture.memory_layout[4].value&&addr=0;z--){memory[index][i].Value=memory[index][i].Value+parseInt(memory[index][i].Binary[z].Bin,16)+" "}return}}}for(var i=0;iaddr){var aux_addr=addr-addr%4;memory[index].splice(i,0,{Address:aux_addr,Binary:[],Value:null,DefValue:null,reset:false});var charIndex=memValue.length-1;for(var z=0;z<4;z++){memory[index][i].Binary.push({Addr:aux_addr+z,DefBin:"00",Bin:"00",Tag:null})}for(var j=0;jarchitecture.memory_layout[0].value&&parseInt(addr)architecture.memory_layout[2].value&&parseInt(addr)architecture.memory_layout[4].value&&parseInt(addr)architecture.memory_layout[0].value&&parseInt(addr)architecture.memory_layout[2].value&&parseInt(addr)architecture.memory_layout[4].value&&parseInt(addr)architecture.memory_layout[0].value&&parseInt(addr)architecture.memory_layout[2].value&&parseInt(addr)architecture.memory_layout[4].value&&parseInt(addr)architecture.memory_layout[0].value&&parseInt(addr)architecture.memory_layout[2].value&&parseInt(addr)architecture.memory_layout[4].value&&parseInt(addr)=architecture.memory_layout[4].value){executionIndex=-1;return packExecute(true,"Not enough memory for data segment","danger",null)}for(var i=0;iarchitecture.memory_layout[0].value&&parseInt(addr)architecture.memory_layout[2].value&&parseInt(addr)architecture.memory_layout[4].value&&parseInt(addr)architecture.memory_layout[0].value&&parseInt(addr)architecture.memory_layout[2].value&&parseInt(addr)architecture.memory_layout[4].value&&parseInt(addr)0;i++){for(var j=0;j=instructions.length){for(var i=0;ivalue.length-1){memory[index][i].Binary.push({Addr:auxAddr,DefBin:"00",Bin:"00",Tag:null})}else{memory[index][i].Binary.push({Addr:auxAddr,DefBin:"00",Bin:value.charCodeAt(valueIndex).toString(16),Tag:null});memory[index][i].Value=value.charAt(valueIndex)+" "+memory[index][i].Value}auxAddr++;valueIndex++}i++}return ret}function crex_memory_clear(){main_memory_clear();memory[memory_hash[0]]=[];memory[memory_hash[1]]=[];memory[memory_hash[2]]=[]}function crex_memory_data_compiler(value,size,dataLabel,DefValue,type){main_memory_storedata(data_address,value,size,dataLabel,DefValue,type);for(var i=0;i=assembly.length){return null}while(":\t\n \r#".includes(assembly.charAt(index))&&index=assembly.length){return null}if(assembly.charAt(index)=="'"){index++;while(assembly.charAt(index)!="'"&&index2*architecture.directives[j].size){return packCompileError("m18",token,"error","danger")}auxTokenString=auxTokenString.substring(auxTokenString.length-2*architecture.directives[j].size,auxTokenString.length)}else{var re=new RegExp("[0-9-]{"+token.length+"}","g");if(token.search(re)==-1){return packCompileError("m15",token,"error","danger")}auxToken=parseInt(token)>>>0;auxTokenString=auxToken.toString(16).substring(auxToken.toString(16).length-2*architecture.directives[j].size,auxToken.toString(16).length).padStart(2*architecture.directives[j].size,"0");if(auxTokenString.length>2*architecture.directives[j].size){return packCompileError("m18",token,"error","danger")}auxTokenString=auxTokenString.substring(auxTokenString.length-2*architecture.directives[j].size,auxTokenString.length)}console_log(auxTokenString);ret=data_compiler(auxTokenString,architecture.directives[j].size,label,parseInt(auxTokenString,16)>>0,"byte");if(ret.status!="ok"){return ret}label=null;console_log("byte Terminado");next_token();token=get_token();console_log("token: "+token);for(var z=0;z2*architecture.directives[j].size){return packCompileError("m18",token,"error","danger")}auxTokenString=auxTokenString.substring(auxTokenString.length-2*architecture.directives[j].size,auxTokenString.length)}else{var re=new RegExp("[0-9-]{"+token.length+"}","g");if(token.search(re)==-1){return packCompileError("m15",token,"error","danger")}auxToken=parseInt(token)>>>0;auxTokenString=auxToken.toString(16).substring(auxToken.toString(16).length-2*architecture.directives[j].size,auxToken.toString(16).length).padStart(2*architecture.directives[j].size,"0");if(auxTokenString.length>2*architecture.directives[j].size){return packCompileError("m18",token,"error","danger")}auxTokenString=auxTokenString.substring(auxTokenString.length-2*architecture.directives[j].size,auxTokenString.length)}console_log(auxTokenString);ret=data_compiler(auxTokenString,architecture.directives[j].size,label,parseInt(auxTokenString,16)>>0,"half");if(ret.status!="ok"){return ret}label=null;console_log("half Terminado");next_token();token=get_token();console_log("token: "+token);for(var z=0;z2*architecture.directives[j].size){return packCompileError("m18",token,"error","danger")}auxTokenString=auxTokenString.substring(auxTokenString.length-2*architecture.directives[j].size,auxTokenString.length)}else{var re=new RegExp("[0-9-]{"+token.length+"}","g");if(token.search(re)==-1){return packCompileError("m15",token,"error","danger")}auxToken=parseInt(token)>>>0;auxTokenString=auxToken.toString(16).substring(auxToken.toString(16).length-2*architecture.directives[j].size,auxToken.toString(16).length).padStart(2*architecture.directives[j].size,"0");if(auxTokenString.length>2*architecture.directives[j].size){return packCompileError("m18",token,"error","danger")}auxTokenString=auxTokenString.substring(auxTokenString.length-2*architecture.directives[j].size,auxTokenString.length)}console_log(auxTokenString);ret=data_compiler(auxTokenString,architecture.directives[j].size,label,parseInt(auxTokenString,16)>>0,"word");if(ret.status!="ok"){return ret}label=null;console_log("word Terminado");next_token();token=get_token();console_log("token: "+token);for(var z=0;z2*architecture.directives[j].size){return packCompileError("m18",token,"error","danger")}auxTokenString=auxTokenString.substring(auxTokenString.length-2*architecture.directives[j].size,auxTokenString.length)}else{var re=new RegExp("[0-9-]{"+token.length+"}","g");if(token.search(re)==-1){return packCompileError("m15",token,"error","danger")}auxToken=parseInt(token)>>>0;auxTokenString=auxToken.toString(16).substring(auxToken.toString(16).length-2*architecture.directives[j].size,auxToken.toString(16).length).padStart(2*architecture.directives[j].size,"0");if(auxTokenString.length>2*architecture.directives[j].size){return packCompileError("m18",token,"error","danger")}auxTokenString=auxTokenString.substring(auxTokenString.length-2*architecture.directives[j].size,auxTokenString.length)}ret=data_compiler(auxTokenString,architecture.directives[j].size,label,parseInt(auxTokenString,16)>>0,"double_word");if(ret.status!="ok"){return ret}label=null;console_log("double word Terminado");next_token();token=get_token();console_log("token: "+token);for(var z=0;z2*architecture.directives[j].size){return packCompileError("m18",token,"error","danger")}auxTokenString=auxTokenString.substring(auxTokenString.length-2*architecture.directives[j].size,auxTokenString.length);token=hex2float(token)}else{var re=new RegExp("[+e0-9.-]{"+token.length+"}","g");if(token.search(re)==-1){return packCompileError("m15",token,"error","danger")}auxToken=parseFloat(token,10);auxTokenString=bin2hex(float2bin(auxToken)).padStart(2*architecture.directives[j].size,"0");if(auxTokenString.length>2*architecture.directives[j].size){return packCompileError("m18",token,"error","danger")}auxTokenString=auxTokenString.substring(auxTokenString.length-2*architecture.directives[j].size,auxTokenString.length)}console_log(auxTokenString);data_compiler(auxTokenString,architecture.directives[j].size,label,token,"float");if(ret.status!="ok"){return ret}label=null;console_log("float Terminado");next_token();token=get_token();console_log("token: "+token);for(var z=0;z2*architecture.directives[j].size){return packCompileError("m18",token,"error","danger")}auxTokenString=auxTokenString.substring(auxTokenString.length-2*architecture.directives[j].size,auxTokenString.length);token=hex2double(token)}else{var re=new RegExp("[+e0-9.-]{"+token.length+"}","g");if(token.search(re)==-1){return packCompileError("m15",token,"error","danger")}auxToken=parseFloat(token,10);console_log(auxTokenString);auxTokenString=bin2hex(double2bin(auxToken)).padStart(2*architecture.directives[j].size,"0");if(auxTokenString.length>2*architecture.directives[j].size){return packCompileError("m18",token,"error","danger")}auxTokenString=auxTokenString.substring(auxTokenString.length-2*architecture.directives[j].size,auxTokenString.length)}console_log(auxTokenString);data_compiler(auxTokenString,architecture.directives[j].size,label,token,"double");if(ret.status!="ok"){return ret}label=null;console_log("double Terminado");next_token();token=get_token();console_log("token: "+token);for(var z=0;z50*1024*1024){return packCompileError("m10",token,"error","danger")}var size=parseInt(token)*architecture.directives[j].size;data_address=creator_memory_storestring(null,size,data_address,label,"space",align);next_token();token=get_token();console_log("token: "+token);console_log("space Terminado");break;case"align":case"balign":console_log("[b]align");let pow_mode=token==".align";next_token();token=get_token();console_log("token: "+token);if(token==null){return packCompileError("m23","","error","danger")}var re=new RegExp("[0-9-]{"+token.length+"}","g");if(token.search(re)==-1){return packCompileError("m15",token,"error","danger")}if(parseInt(token)<0){return packCompileError("m22",token,"error","danger")}align=pow_mode?Math.pow(2,parseInt(token)):token;console_log(align);next_token();token=get_token();console_log("token: "+token);console_log("align Terminado");break;default:console_log("Default");existsData=false;break}}else if(j==architecture.directives.length-1&&token!=architecture.directives[j].name&&token!=null&&token.search(/\:$/)==-1){creator_memory_prereset();creator_memory_copytoapp(0);return ret}}}creator_memory_prereset();creator_memory_copytoapp(0);return ret}function data_compiler(value,size,dataLabel,DefValue,type){var ret={errorcode:"",token:"",type:"",update:"",status:"ok"};var r=crex_memory_data_compiler(value,size,dataLabel,DefValue,type);if(r!=""){return packCompileError(r,"","error","danger")}return ret}function code_segment_compiler(){var ret={errorcode:"",token:"",type:"",update:"",status:"ok"};var existsInstruction=true;next_token();var instInit=tokenIndex;while(existsInstruction){token=get_token();for(var i=0;ifieldsLength){return packCompileError("m12",token,"error","danger")}console_log(reg);console_log(reg.toString(2).padStart(fieldsLength,"0"));console_log(binary);console_log(binary.length);console_log(architecture.instructions[i].fields[a].startbit+1);console_log(binary.length-(architecture.instructions[i].fields[a].startbit+1));binary=binary.substring(0,binary.length-(architecture.instructions[i].fields[a].startbit+1))+reg.toString(2).padStart(fieldsLength,"0")+binary.substring(binary.length-architecture.instructions[i].fields[a].stopbit,binary.length);console_log(binary);re=RegExp("Field[0-9]+");instruction=instruction.replace(re,token)}else if(z==architecture_hash.length-1&&w==architecture.components[z].elements.length-1&&validReg==false){return packCompileError("m4",token,"error","danger")}regNum++}}}}break;case"SFP-Reg":token=instructionParts[j];console_log("token: "+token);var validReg=false;var regNum=0;for(var a=0;afieldsLength){return packCompileError("m12",token,"error","danger")}binary=binary.substring(0,binary.length-(architecture.instructions[i].fields[a].startbit+1))+reg.toString(2).padStart(fieldsLength,"0")+binary.substring(binary.length-architecture.instructions[i].fields[a].stopbit,binary.length);re=RegExp("Field[0-9]+");console_log(instruction);instruction=instruction.replace(re,token);console_log(instruction)}else if(z==architecture_hash.length-1&&w==architecture.components[z].elements.length-1&&validReg==false){return packCompileError("m4",token,"error","danger")}if(architecture.components[z].type=="floating point"&&architecture.components[z].double_precision==false){regNum++}}}}}break;case"DFP-Reg":token=instructionParts[j];console_log("token: "+token);var validReg=false;var regNum=0;for(var a=0;afieldsLength){return packCompileError("m12",token,"error","danger")}binary=binary.substring(0,binary.length-(architecture.instructions[i].fields[a].startbit+1))+reg.toString(2).padStart(fieldsLength,"0")+binary.substring(binary.length-architecture.instructions[i].fields[a].stopbit,binary.length);re=RegExp("Field[0-9]+");instruction=instruction.replace(re,token)}else if(z==architecture_hash.length-1&&w==architecture.components[z].elements.length-1&&validReg==false){return packCompileError("m4",token,"error","danger")}if(architecture.components[z].type=="floating point"&&architecture.components[z].double_precision==true){regNum++}}}}}break;case"Ctrl-Reg":token=instructionParts[j];console_log("token: "+token);var validReg=false;var regNum=0;for(var a=0;afieldsLength){return packCompileError("m12",token,"error","danger")}binary=binary.substring(0,binary.length-(architecture.instructions[i].fields[a].startbit+1))+reg.toString(2).padStart(fieldsLength,"0")+binary.substring(binary.length-architecture.instructions[i].fields[a].stopbit,binary.length);re=RegExp("Field[0-9]+");instruction=instruction.replace(re,token)}else if(z==architecture_hash.length-1&&w==architecture.components[z].elements.length-1&&validReg==false){return packCompileError("m4",token,"error","danger")}if(architecture.components[z].type=="control"){regNum++}}}}}break;case"inm-signed":token=instructionParts[j];var token_user="";console_log("token: "+token);for(var a=0;afieldsLength){resultPseudo=pseudoinstruction_compiler(oriInstruction,label,line);console_log(resultPseudo);if(resultPseudo.status!="ok"){return resultPseudo}}if(isNaN(parseInt(token,16))==true){return packCompileError("m6",token,"error","danger")}inm=parseInt(token,16).toString(2)}else if(token.match(/^(\d)+\.(\d)+/)){if(float2bin(parseFloat(token)).length>fieldsLength){resultPseudo=pseudoinstruction_compiler(oriInstruction,label,line);console_log(resultPseudo);if(resultPseudo.status!="ok"){return resultPseudo}}if(isNaN(parseFloat(token))==true){return packCompileError("m6",token,"error","danger")}inm=float2bin(parseFloat(token,16))}else if(token.match(/^\'(.*?)\'$/)){var re=/^\'(.*?)\'$/;console_log(re);var match=re.exec(token);console_log(match);var asciiCode=match[1].charCodeAt(0);console_log(asciiCode);re=RegExp("Field[0-9]+");instruction=instruction.replace(re,asciiCode);inm=(asciiCode>>>0).toString(2)}else if(isNaN(parseInt(token))){validTagPC=false;startBit=architecture.instructions[i].fields[a].startbit;stopBit=architecture.instructions[i].fields[a].stopbit}else{var comNumPos=Math.pow(2,fieldsLength-1);var comNumNeg=comNumPos*-1;comNumPos=comNumPos-1;console_log(comNumPos);console_log(comNumNeg);if(parseInt(token,10)>comNumPos||parseInt(token,10)>>0).toString(2);inm=inm.substring(inm.length-fieldsLength,inm.length)}if(validTagPC==true){console_log(inm.length);if(inm.length>architecture.instructions[i].fields[a].startbit-architecture.instructions[i].fields[a].stopbit+1){return packCompileError("m12",token,"error","danger")}binary=generateBinary(architecture.instructions[i].separated,architecture.instructions[i].fields[a].startbit,architecture.instructions[i].fields[a].stopbit,binary,inm,fieldsLength,a)}re=RegExp("Field[0-9]+");instruction=instruction.replace(re,token)}}break;case"inm-unsigned":token=instructionParts[j];var token_user="";console_log("token: "+token);for(var a=0;ab-architecture.instructions[i].fields[a].stopbit[iii]+1)).reduce(((old,newV)=>old+newV))}fieldsLength=getFieldLength(architecture.instructions[i].separated,architecture.instructions[i].fields[a].startbit,architecture.instructions[i].fields[a].stopbit,a);var inm;if(token.match(/^0x/)){var value=token.split("x");if(value[1].length*4>fieldsLength){resultPseudo=pseudoinstruction_compiler(oriInstruction,label,line);console_log(resultPseudo);if(resultPseudo.status!="ok"){return resultPseudo}}if(isNaN(parseInt(token,16))==true){return packCompileError("m6",token,"error","danger")}inm=parseInt(token,16).toString(2)}else if(token.match(/^(\d)+\.(\d)+/)){if(float2bin(parseFloat(token)).length>fieldsLength){resultPseudo=pseudoinstruction_compiler(oriInstruction,label,line);console_log(resultPseudo);if(resultPseudo.status!="ok"){return resultPseudo}}if(isNaN(parseFloat(token))==true){return packCompileError("m6",token,"error","danger")}inm=float2bin(parseFloat(token,16))}else if(token.match(/^\'(.*?)\'$/)){var re=/^\'(.*?)\'$/;console_log(re);var match=re.exec(token);console_log(match);var asciiCode=match[1].charCodeAt(0);console_log(asciiCode);re=RegExp("Field[0-9]+");instruction=instruction.replace(re,asciiCode);inm=(asciiCode>>>0).toString(2)}else if(isNaN(parseInt(token))){validTagPC=false;startBit=architecture.instructions[i].fields[a].startbit;stopBit=architecture.instructions[i].fields[a].stopbit}else{var comNumPos=Math.pow(2,fieldsLength);console_log(comNumPos);if(parseInt(token,10)>comNumPos){console_log(oriInstruction);console_log(label);console_log(line);resultPseudo=pseudoinstruction_compiler(oriInstruction,label,line);console_log(resultPseudo);if(resultPseudo.status!="ok"){return resultPseudo}}if(isNaN(parseInt(token))==true&&resultPseudo==-3){return packCompileError("m6",token,"error","danger")}inm=(parseInt(token,10)>>>0).toString(2);inm=inm.substring(inm.length-fieldsLength,inm.length)}if(validTagPC==true){console_log(inm.length);if(inm.length>architecture.instructions[i].fields[a].startbit-architecture.instructions[i].fields[a].stopbit+1){return packCompileError("m12",token,"error","danger")}binary=generateBinary(architecture.instructions[i].separated,architecture.instructions[i].fields[a].startbit,architecture.instructions[i].fields[a].stopbit,binary,inm,fieldsLength,a)}re=RegExp("Field[0-9]+");instruction=instruction.replace(re,token)}}break;case"address":token=instructionParts[j];console_log("token: "+token);for(var a=0;afieldsLength){return packCompileError("m8",token,"error","danger")}if(isNaN(parseInt(token,16))==true){return packCompileError("m9",token,"error","danger")}addr=parseInt(token,16).toString(2);binary=generateBinary(architecture.instructions[i].separated,architecture.instructions[i].fields[a].startbit,architecture.instructions[i].fields[a].stopbit,binary,inm,fieldsLength,a);re=RegExp("Field[0-9]+");instruction=instruction.replace(re,token)}else{var validTag=false;startBit=architecture.instructions[i].fields[a].startbit;stopBit=architecture.instructions[i].fields[a].stopbit}}}break;case"offset_bytes":token=instructionParts[j];var token_user="";console_log("token: "+token);for(var a=0;afieldsLength){resultPseudo=pseudoinstruction_compiler(oriInstruction,label,line);console_log(resultPseudo);if(resultPseudo.status!="ok"){return resultPseudo}}if(isNaN(parseInt(token,16))==true){return packCompileError("m6",token,"error","danger")}inm=parseInt(token,16).toString(2)}else if(token.match(/^(\d)+\.(\d)+/)){if(float2bin(parseFloat(token)).length>fieldsLength){resultPseudo=pseudoinstruction_compiler(oriInstruction,label,line);console_log(resultPseudo);if(resultPseudo.status!="ok"){return resultPseudo}}if(isNaN(parseFloat(token))==true){return packCompileError("m6",token,"error","danger")}inm=float2bin(parseFloat(token,16))}else if(isNaN(parseInt(token))){validTagPC=false;startBit=architecture.instructions[i].fields[a].startbit;stopBit=architecture.instructions[i].fields[a].stopbit}else{var comNumPos=Math.pow(2,fieldsLength-1);var comNumNeg=comNumPos*-1;comNumPos=comNumPos-1;console_log(comNumPos);console_log(comNumNeg);if(parseInt(token,10)>comNumPos||parseInt(token,10)>>0).toString(2);inm=inm.substring(inm.length-fieldsLength,inm.length)}if(validTagPC==true){if(inm.length>architecture.instructions[i].fields[a].startbit-architecture.instructions[i].fields[a].stopbit+1){return packCompileError("m12",token,"error","danger")}binary=generateBinary(architecture.instructions[i].separated,architecture.instructions[i].fields[a].startbit,architecture.instructions[i].fields[a].stopbit,binary,inm,fieldsLength,a)}re=RegExp("Field[0-9]+");console_log(instruction);instruction=instruction.replace(re,token);console_log(instruction)}}break;case"offset_words":token=instructionParts[j];var token_user="";console_log("token: "+token);for(var a=0;afieldsLength){resultPseudo=pseudoinstruction_compiler(oriInstruction,label,line);console_log(resultPseudo);if(resultPseudo.status!="ok"){return resultPseudo}}if(isNaN(parseInt(token,16))==true){return packCompileError("m6",token,"error","danger")}inm=parseInt(token,16).toString(2)}else if(token.match(/^(\d)+\.(\d)+/)){if(float2bin(parseFloat(token)).length>fieldsLength){resultPseudo=pseudoinstruction_compiler(oriInstruction,label,line);console_log(resultPseudo);if(resultPseudo.status!="ok"){return resultPseudo}}if(isNaN(parseFloat(token))==true){return packCompileError("m6",token,"error","danger")}inm=float2bin(parseFloat(token,16))}else if(isNaN(parseInt(token))){validTagPC=false;startBit=architecture.instructions[i].fields[a].startbit;stopBit=architecture.instructions[i].fields[a].stopbit}else{var comNumPos=Math.pow(2,fieldsLength-1);var comNumNeg=comNumPos*-1;comNumPos=comNumPos-1;console_log(comNumPos);console_log(comNumNeg);if(parseInt(token,10)>comNumPos||parseInt(token,10)>>0).toString(2);inm=inm.substring(inm.length-fieldsLength,inm.length)}if(validTagPC==true){if(inm.length>architecture.instructions[i].fields[a].startbit-architecture.instructions[i].fields[a].stopbit+1){return packCompileError("m12",token,"error","danger")}binary=generateBinary(architecture.instructions[i].separated,architecture.instructions[i].fields[a].startbit,architecture.instructions[i].fields[a].stopbit,binary,inm,fieldsLength,a)}re=RegExp("Field[0-9]+");console_log(instruction);instruction=instruction.replace(re,token);console_log(instruction)}}break;default:token=instructionParts[j];console_log("token: "+token);for(var a=0;a{t=!ind?0:t;t+(cv-architecture.instructions[i].fields[a].stopbit[ind]+1)}));console_log(architecture.instructions[i].co.join("").padStart(fieldsLength,"0"))}else{fieldsLength=architecture.instructions[i].fields[a].startbit-architecture.instructions[i].fields[a].stopbit+1;console_log(architecture.instructions[i].co.padStart(fieldsLength,"0"));binary=binary.substring(0,binary.length-(architecture.instructions[i].fields[a].startbit+1))+architecture.instructions[i].co.padStart(fieldsLength,"0")+binary.substring(binary.length-architecture.instructions[i].fields[a].stopbit,binary.length)}console_log(binary);re=RegExp("Field[0-9]+");console_log(instruction);instruction=instruction.replace(re,token);console_log(instruction)}if(architecture.instructions[i].fields[a].type=="cop"){fieldsLength=architecture.instructions[i].fields[a].startbit-architecture.instructions[i].fields[a].stopbit+1;binary=binary.substring(0,binary.length-(architecture.instructions[i].fields[a].startbit+1))+architecture.instructions[i].fields[a].valueField.padStart(fieldsLength,"0")+binary.substring(binary.length-architecture.instructions[i].fields[a].stopbit,binary.length)}}break}}if(validTagPC==false&&resultPseudo==-3){console_log("pendiente");pc=pc+architecture.instructions[i].nwords*4;var padding="";padding=padding.padStart(architecture.instructions[i].nwords*32-binary.length,"0");binary=binary+padding;var hex=bin2hex(binary);var auxAddr=address;console_log(binary);console_log(bin2hex(binary));pending_instructions.push({address:address,instruction:instruction,signature:signatureParts,signatureRaw:signatureRawParts,Label:label,binary:binary,startBit:startBit,stopBit:stopBit,visible:true,line:nEnters});if(pending==false){instructions.push({Break:null,Address:"0x"+address.toString(16),Label:label,loaded:instruction,user:userInstruction,_rowVariant:"",visible:true,hide:false});instructions_binary.push({Break:null,Address:"0x"+address.toString(16),Label:label,loaded:binary,user:null,_rowVariant:"",visible:false});address=address+4*architecture.instructions[i].nwords}else{for(var pos=0;pospendingAddress){instructions.splice(pos,0,{Break:null,Address:"0x"+pendingAddress.toString(16),Label:label,loaded:instruction,user:userInstruction,_rowVariant:"",visible:true,hide:false});instructions_binary.splice(pos,0,{Break:null,Address:"0x"+pendingAddress.toString(16),Label:label,loaded:binary,user:null,_rowVariant:"",visible:false});auxAddr=pendingAddress;break}}}console_log(address.toString(16));console_log(instructions);stopFor=true;break}else{if(resultPseudo==-3){console_log("no pendiente");pc=pc+architecture.instructions[i].nwords*4;var padding="";padding=padding.padStart(architecture.instructions[i].nwords*32-binary.length,"0");binary=binary+padding;var hex=bin2hex(binary);var auxAddr=address;console_log(binary);console_log(bin2hex(binary));if(pending==false){instructions.push({Break:null,Address:"0x"+address.toString(16),Label:label,loaded:instruction,user:userInstruction,_rowVariant:"",visible:true,hide:false});instructions_binary.push({Break:null,Address:"0x"+address.toString(16),Label:label,loaded:binary,user:null,_rowVariant:"",visible:false});address=address+4*architecture.instructions[i].nwords}else{for(var pos=0;pospendingAddress){instructions.splice(pos,0,{Break:null,Address:"0x"+pendingAddress.toString(16),Label:label,loaded:instruction,user:userInstruction,_rowVariant:"",visible:true,hide:false});instructions_binary.splice(pos,0,{Break:null,Address:"0x"+pendingAddress.toString(16),Label:label,loaded:binary,user:null,_rowVariant:"",visible:false});auxAddr=pendingAddress;break}}}stopFor=true;console_log(address.toString(16));console_log(instructions)}}}}return ret}function pseudoinstruction_compiler(instruction,label,line){var ret={errorcode:"",token:"",type:"",update:"",status:"ok"};var re=/\' \'/;instruction=instruction.replace(re,"'\0'");var re=/\'\\n\'/;instruction=instruction.replace(re,"10");console_log(instruction);var re=/\'\\t\'/;instruction=instruction.replace(re,"9");console_log(instruction);var instructionParts=instruction.split(" ");var found=false;var re=/\'\0\'/;instruction=instruction.replace(re,"' '");console_log(instruction);for(var i=0;i;\s]/;while(definition.search(re)!=-1){var match=re.exec(definition);console_log(match);var code;if(instructionParts[match[1]].match(/^\'(.*?)\'$/)){var re=/^\'(.*?)\'$/;console_log(re);var match2=re.exec(instructionParts[match[1]]);console_log(match2);var asciiCode=match2[1].charCodeAt(0);console_log(asciiCode);console_log("value = field('"+asciiCode+"', '("+match[2]+")', '"+match[3]+"')");code="value = field('"+asciiCode+"', '("+match[2]+")', '"+match[3]+"')"}else{console_log("value = field('"+instructionParts[match[1]]+"', '("+match[2]+")', '"+match[3]+"')");code="value = field('"+instructionParts[match[1]]+"', '("+match[2]+")', '"+match[3]+"')"}var value;try{eval(code)}catch(e){if(e instanceof SyntaxError){return packCompileError("m5",token,"error","danger")}}if(value==-1){return packCompileError("m5",token,"error","danger")}definition=definition.replace("Field."+match[1]+".("+match[2]+")."+match[3],value);re=/Field.(\d).\((.*?)\).(.*?)[;\s]/}re=/Field.(\d).SIZE[=<>;\s]/g;if(definition.search(re)!=-1){var match=re.exec(definition);console_log(match);var code;if(instructionParts[match[1]].match(/^\'(.*?)\'$/)){var re=/^\'(.*?)\'$/;console_log(re);var match2=re.exec(instructionParts[match[1]]);console_log(match2);var asciiCode=match2[1].charCodeAt(0);console_log(asciiCode);console_log("value = field('"+asciiCode+"', 'SIZE', null)");code="value = field('"+asciiCode+"', 'SIZE', null)"}else{console_log("value = field('"+instructionParts[match[1]]+"', 'SIZE', null)");code="value = field('"+instructionParts[match[1]]+"', 'SIZE', null)"}var value;try{eval(code)}catch(e){if(e instanceof SyntaxError){return packCompileError("m5",token,"error","danger")}}if(value==-1){return packCompileError("m5",token,"error","danger")}console_log(value);console_log("Field."+match[1]+".SIZE");definition=definition.replace("Field."+match[1]+".SIZE",value)}console_log(definition);re=/reg\.pc/;console_log(re);while(definition.search(re)!=-1){definition=definition.replace(re,"pc");console_log(definition)}re=/no_ret_op\{([^}]*)\};/;console_log(re);while(definition.search(re)!=-1){var match=re.exec(definition);console_log(match[1]);eval(match[1]);definition=definition.replace(re,"");console_log(definition)}re=/op\{([^}]*)\}/;console_log(re);while(definition.search(re)!=-1){var match=re.exec(definition);var result;console_log(match[1]);eval("result="+match[1]);definition=definition.replace(re,result);console_log(definition)}while(definition.match(/\'(.*?)\'/)){var re=/\'(.*?)\'/;console_log(re);var match2=re.exec(instructionParts[match[1]]);console_log(match2);var asciiCode=match2[1].charCodeAt(0);console_log(asciiCode);definition=definition.replace(re,asciiCode)}console_log(definition);console_log(instruction);var re=new RegExp("'","g");instruction=instruction.replace(re,'"');console_log(instruction);var re=/{([^}]*)}/g;var code=re.exec(definition);if(code!=null){while(code!=null){var instructions=code[1].split(";");console_log(instructions);for(var j=0;j>>0).toString(2);binNum=binNum.padStart(32,"0");binNum=binNum.substring(31-startBit,32-endBit);var hexNum="0x"+bin2hex(binNum);return hexNum}else if(type=="float"){var binNum=float2bin(parseFloat(field));console_log(binNum);binNum=binNum.padStart(32,"0");binNum=binNum.substring(31-startBit,32-endBit);var hexNum="0x"+bin2hex(binNum);return hexNum}else if(type=="double"){var binNum=double2bin(parseFloat(field));console_log(binNum);binNum=binNum.padStart(64,"0");binNum=binNum.substring(63-startBit,64-endBit);var hexNum="0x"+bin2hex(binNum);return hexNum}}return-1}function getFieldLength(separated,startbit,stopbit,a){if(startbit==stopbit)console_log("Warning: startbit equal to stopBit, please check the achitecture definitions");let fieldsLength;if(!separated||!separated[a])fieldsLength=startbit-stopbit+1;else fieldsLength=startbit.map(((b,i)=>b-stopbit[i]+1)).reduce(((old,newV)=>old+newV));return fieldsLength}function generateBinary(separated,startbit,stopbit,binary,inm,fieldsLenght,a){if(!separated||!separated[a])binary=binary.substring(0,binary.length-(startbit+1))+inm.padStart(fieldsLength,"0")+binary.substring(binary.length-stopbit,binary.length);else{let myInm=inm;for(let i=startbit.length-1;i>=0;i--){let sb=startbit[i],stb=stopbit[i],diff=sb-stb+1;if(myInm.length<=diff){binary=binary.substring(0,binary.length-(sb+1))+myInm.padStart(diff,"0")+binary.substring(binary.length-stb,binary.length);break}else{let tmpinm=inm.substring(myInm.length-diff,myInm.length);binary=binary.substring(0,binary.length-(sb+1))+tmpinm.padStart(diff,"0")+binary.substring(binary.length-stb,binary.length);myInm=myInm.substring(0,myInm.length-diff)}}}return binary}function binaryStringToInt(b){return parseInt(b,2)}function packExecute(error,err_msg,err_type,draw){var ret={};ret.error=error;ret.msg=err_msg;ret.type=err_type;ret.draw=draw;return ret}function executeInstruction(){var draw={space:[],info:[],success:[],danger:[],flash:[]};console_log(mutexRead);newExecution=false;do{console_log(executionIndex);console_log(architecture.components[0].elements[0].value);if(instructions.length==0){return packExecute(true,"No instructions in memory","danger",null)}if(executionIndex<-1){return packExecute(true,"The program has finished","danger",null)}if(executionIndex==-1){return packExecute(true,"The program has finished with errors","danger",null)}else if(mutexRead==true){return packExecute(false,"","info",null)}if(executionInit==1){for(var i=0;i=0;z--){if(architecture.components[j].elements[z].name.includes(instructionExecParts[i])){var_readings_definitions[signatureRawParts[i]]="var "+signatureRawParts[i]+" = readRegister ("+j+" ,"+z+");\n";var_readings_definitions_prev[signatureRawParts[i]]="var "+signatureRawParts[i]+"_prev = readRegister ("+j+" ,"+z+");\n";var_readings_definitions_name[signatureRawParts[i]]="var "+signatureRawParts[i]+"_name = '"+instructionExecParts[i]+"';\n";re=new RegExp("(?:\\W|^)((("+signatureRawParts[i]+") *=)[^=])","g");if(auxDef.search(re)!=-1){var_writings_definitions[signatureRawParts[i]]="writeRegister("+signatureRawParts[i]+", "+j+", "+z+");\n"}else{var_writings_definitions[signatureRawParts[i]]="if("+signatureRawParts[i]+" != "+signatureRawParts[i]+"_prev)"+" { writeRegister("+signatureRawParts[i]+" ,"+j+" ,"+z+"); }\n"}}}}}else{var_readings_definitions[signatureRawParts[i]]="var "+signatureRawParts[i]+" = "+instructionExecParts[i]+";\n"}}for(var elto in var_readings_definitions){readings_description=readings_description+var_readings_definitions[elto]}for(var elto in var_readings_definitions_prev){readings_description=readings_description+var_readings_definitions_prev[elto]}for(var elto in var_readings_definitions_name){readings_description=readings_description+var_readings_definitions_name[elto]}for(var elto in var_writings_definitions){writings_description=writings_description+var_writings_definitions[elto]}}for(var i=0;i=0;j--){var clean_name=clean_string(architecture.components[i].elements[j].name[0],"reg_");var clean_aliases=architecture.components[i].elements[j].name.map((x=>clean_string(x,"reg_"))).join("|");re=new RegExp("(?:\\W|^)((("+clean_aliases+") *=)[^=])","g");if(auxDef.search(re)!=-1){writings_description=writings_description+"\nwriteRegister("+clean_name+", "+i+", "+j+");"}re=new RegExp("([^a-zA-Z0-9])(?:"+clean_aliases+")");if(auxDef.search(re)!=-1){readings_description=readings_description+"var "+clean_name+" = readRegister("+i+" ,"+j+");\n";readings_description=readings_description+"var "+clean_name+"_name = '"+clean_name+"';\n"}}}auxDef="\n/* Read all instruction fields */\n"+readings_description+"\n/* Original instruction definition */\n"+auxDef+"\n\n/* Modify values */\n"+writings_description;console_log(" ................................. "+"instructions["+executionIndex+"]:\n"+auxDef+"\n"+" ................................. ");eval("instructions["+executionIndex+"].preload = function(elto) { "+" try {\n"+auxDef.replace(/this./g,"elto.")+"\n"+" }\n"+" catch(e){\n"+" throw e;\n"+" }\n"+"}; ")}try{var result=instructions[executionIndex].preload(this);if(typeof result!="undefined"&&result.error){return result}}catch(e){var msg="";if(e instanceof SyntaxError)msg="The definition of the instruction contains errors, please review it";else msg='Exception on executing instruction "'+executionIndex+'": '+e+"\n"+" Stack trace: "+e.stack+"\n";console_log("Error: "+e);error=1;draw.danger.push(executionIndex);executionIndex=-1;return packExecute(true,msg,"danger",null)}stats_update(type);if(executionIndex==-1){error=1;return packExecute(false,"","info",null)}if(error!=1&&executionIndex=instructions.length&&mutexRead==true){for(var i=0;i=instructions.length&&mutexRead==false){for(var i=0;i=architecture.memory_layout[2].value){draw.danger.push(executionIndex);executionIndex=-1;throw packExecute(true,"Segmentation fault. You tried to read in the data segment","danger",null)}else if(stackLimit<=architecture.memory_layout[1].value&&stackLimit>=architecture.memory_layout[0].value){draw.danger.push(executionIndex);executionIndex=-1;throw packExecute(true,"Segmentation fault. You tried to read in the text segment","danger",null)}else{var diff=memory[memory_hash[2]][0].Address-stackLimit;var auxStackLimit=stackLimit;var newRow=0;for(var i=0;i ");var value=fn_post_read(keystroke,fn_post_params);keyboard=keyboard+" "+value;return packExecute(false,"The data has been uploaded","danger",null)}mutexRead=true;app._data.enter=false;console_log(mutexRead);if(newExecution==true){app._data.keyboard="";consoleMutex=false;mutexRead=false;app._data.enter=null;show_notification("The data has been uploaded","info");if(runProgram==false){app.executeProgram()}return}if(consoleMutex==false){setTimeout(keyboard_read,1e3,fn_post_read,fn_post_params);return}fn_post_read(app._data.keyboard,fn_post_params);app._data.keyboard="";consoleMutex=false;mutexRead=false;app._data.enter=null;show_notification("The data has been uploaded","info");console_log(mutexRead);if(executionIndex>=instructions.length){for(var i=0;i>0)}if(architecture.instructions[index].fields[j].type=="inm-unsigned"){var value="";if(architecture.instructions[index].separated&&architecture.instructions[index].separated[j]==true){for(var sep_index=0;sep_index>0)}if(architecture.instructions[index].fields[j].type=="address"){var value="";if(architecture.instructions[index].separated&&architecture.instructions[index].separated[j]==true){for(var sep_index=0;sep_index>0)}if(architecture.instructions[index].fields[j].type=="offset_bytes"){var value="";if(architecture.instructions[index].separated&&architecture.instructions[index].separated[j]==true){for(var sep_index=0;sep_index>0)}}return auxDef}var uielto_loading={template:"\t"+'\t\t
'+'\t\t
'+'\t \t
'+'\t \t '+"\t \t
"+"\t \t
"+'\t \tLoading... '+"\t \t
"+"\t
"+"\t
"};Vue.component("spinner-loading",uielto_loading);var uielto_browser={template:"\t"+'\t You are using an unsupported browser, please use one of the following: '+"\t "+"\t "+'\t '+"\t Google Chrome 70+"+'\t '+'\t '+"\t "+"\t "+"\t "+'\t '+"\t Mozilla Firefox 60+"+'\t '+'\t '+"\t "+"\t "+"\t "+"\t "+'\t '+"\t Apple Safari 12+"+'\t '+'\t '+"\t "+"\t "+"\t "+"\t "+"\t
"};Vue.component("supported-browser",uielto_browser);var uielto_navbar={props:{version:{type:String,required:true},architecture_name:{type:String,required:true}},template:'\t"};Vue.component("navbar-creator",uielto_navbar);var uielto_configuration={props:{instructions_packed:{type:Number,required:true},autoscroll:{type:Boolean,required:true},notification_time:{type:Number,required:true},dark:{type:Boolean,required:true},c_debug:{type:Boolean,required:true}},methods:{change_execution_speed(value){var prevInstructionPacked=this._props.instructions_packed;if(value){this._props.instructions_packed=this._props.instructions_packed+value;if(this._props.instructions_packed<1){this._props.instructions_packed=1}if(this._props.instructions_packed>101){this._props.instructions_packed=101}}else{this._props.instructions_packed=parseInt(this._props.instructions_packed)}app._data.instructionsPacked=this._props.instructions_packed;localStorage.setItem("instructionsPacked",this._props.instructions_packed);creator_ga("send","event","configuration","configuration.execution_speed","configuration.execution_speed.less_speed_"+(prevInstructionPacked>this._props.instructionsPacked).toString())},change_autoscroll(){this._props.autoscroll=!this._props.autoscroll;localStorage.setItem("autoscroll",this._props.autoscroll);app._data.autoscroll=this._props.autoscroll;creator_ga("send","event","configuration","configuration.autoscroll","configuration.autoscroll."+this._props.autoscroll)},change_notification_time(value){var prevNotificationTime=this._props.notification_time;if(value){this._props.notification_time=this._props.notification_time+value;if(this._props.notification_time<1e3){this._props.notification_time=1e3}if(this._props.notification_time>3500){this._props.notification_time=3500}}else{this._props.notification_time=parseInt(this._props.notification_time)}app._data.notificationTime=this._props.notification_time;localStorage.setItem("notificationTime",this._props.notification_time);creator_ga("send","event","configuration","configuration.notification_time","configuration.notification_time.less_time_"+(prevNotificationTime>this._props.notificationTime).toString())},change_dark_mode(){this._props.dark=!this._props.dark;if(this._props.dark){document.getElementsByTagName("body")[0].style="filter: invert(88%) hue-rotate(160deg) !important; background-color: #111 !important;";localStorage.setItem("dark_mode","filter: invert(88%) hue-rotate(160deg) !important; background-color: #111 !important;")}else{document.getElementsByTagName("body")[0].style="";localStorage.setItem("dark_mode","")}app._data.dark=this._props.dark;creator_ga("send","event","configuration","configuration.dark_mode","configuration.dark_mode."+this._props.dark)}},template:"\t"+""+' \t '+' Execution Speed: '+" \t\t "+" \t "+' \t - '+" \t "+' '+" "+" \t "+' \t + '+" \t "+" \t\t "+" \t "+""+' \t '+' Execution Autoscroll: '+' '+" "+" \t "+""+' \t '+' Notification Time: '+" \t\t "+" "+' - '+" "+' '+" "+" "+' + '+" "+" \t\t "+" \t "+""+' \x3c!--'+' Font Size: '+" "+" "+' - '+" "+' '+" "+" "+' + '+" "+" "+" --\x3e"+""+' \t '+' Dark Mode: '+' '+" "+" \t "+""+' \t '+' Debug: '+' '+" \t "+""+" \t "};Vue.component("form-configuration",uielto_configuration);var uielto_info={props:{target:{type:String,required:true},show_instruction_help:{type:Boolean,required:true}},methods:{closePopover(){this.$root.$emit("bv::hide::popover")}},template:'\t'+"\t "+'\t '+'\t × '+"\t "+"\t "+"\t "+"\t"+'\t '+'\t "+'\t '+"\t Help"+"\t "+'\t "+'\t '+"\t Instruction Help"+"\t "+'\t "+'\t '+"\t Show Notifications"+"\t "+'\t "+'\t '+"\t About us"+"\t "+"\t
"+"\t "};Vue.component("popover-info",uielto_info);var uielto_about={template:""+""+" "+""+" "+""+" "+""+" "};Vue.component("uielto-about",uielto_about);var uielto_author={props:{author_img:{type:String,required:true},author_alt:{type:String,required:true},author_full_name:{type:String,required:true},author_href_linked:{type:String,required:false},author_href_rgate:{type:String,required:false},author_href_github:{type:String,required:false}},template:' '+" "+'\t {{ author_full_name }}
'+"\t "+'\t '+'\t '+" linkedin"+"\t "+"\t "+'\t '+'\t '+" r-gate"+"\t "+"\t "+'\t '+'\t '+" github"+"\t "+" "+" "};Vue.component("card-author",uielto_author);var uielto_notifications={props:{notifications:{type:Array,required:true}},template:" "+' '+" There's no notification at the moment"+" "+' '+' '+' '+' '+" {{item.mess}}"+" "+' {{item.time}} - {{item.date}} '+" "+"
"};Vue.component("uielto-notifications",uielto_notifications);var uielto_instruction_help={props:{architecture:{type:Object,required:true},id:{type:String,required:true}},data:function(){return{instHelpFilter:null,insHelpFields:["name"]}},template:''+'\t'+"\t"+"\t "+"\t"+"\t "+"\t"+'\t '+"\t"+'\t '+"\t {{row.item.name}} "+"\t {{row.item.signatureRaw}} "+"\t "+"\t {{row.item.help}}"+"\t "+"\t"+"\t "+"\t"+"\t
"+" "+' A backup is available '+" "+' Date: {{date_copy}} '+' '+'
'+' '+" Discard"+" "+"
"+'
'+' '+" Load"+" "+"
"+"
"+" "};Vue.component("uielto-backup",uielto_backup);var uielto_examples={props:{example_available:{type:Array,required:true},compile:{type:String,required:true},modal:{type:String,required:true}},methods:{load_example(url,compile){this.$root.$emit("bv::hide::modal",this._props.modal,"#closeExample");$.get(url,(function(data){code_assembly=data;if(compile=="false"){textarea_assembly_editor.setValue(code_assembly)}else{app.assembly_compiler(code_assembly)}show_notification(" The selected example has been loaded correctly","success");creator_ga("send","event","example","example.loading","example.loading."+url)}))}},template:" "+' '+" There's no examples at the moment"+" "+" "+" '+" {{item.name}}:"+' '+" "+" "+"
"};Vue.component("examples",uielto_examples);var uielto_textarea_assembly={props:{browser:{type:String,required:true}},template:' '+'
Assembly: '+" "+'
'+" "+'
'+"
"};Vue.component("textarea-assembly",uielto_textarea_assembly);var uielto_library_tags={props:{instructions_tag:{type:Array,required:true}},template:' '+' Library tags: '+" "+' '+' '+" {{item.tag}}"+" "+" "+" "+"
"};Vue.component("list-libray-tags",uielto_library_tags);var uielto_shortcuts={props:{target:{type:String,required:true},browser:{type:String,required:true}},template:'\t'+"\t\t"+'\t\t '+"\t\t Copy   "+'\t\t Ctrl + c '+'\t\t ⌘ + c '+"\t\t "+"\t"+'\t\t '+"\t\t Cut    "+'\t\t Ctrl + x '+'\t\t ⌘ + x '+"\t\t "+"\t"+'\t\t '+"\t\t Paste   "+'\t\t Ctrl + v '+'\t\t ⌘ + v '+"\t\t "+"\t"+'\t\t '+"\t\t Select all   "+'\t\t Ctrl + a '+'\t\t ⌘ + a '+"\t\t "+"\t"+'\t\t '+"\t\t Undo   "+'\t\t Ctrl + z '+'\t\t ⌘ + z '+"\t\t "+"\t"+'\t\t '+"\t\t Redo   "+'\t\t Ctrl + y '+'\t\t ⌘ + y '+"\t\t "+"\t"+'\t\t '+"\t\t Block code comment   "+'\t\t Ctrl + m '+'\t\t ⌘ + m '+"\t\t "+"\t\t "+"\t "};Vue.component("popover-shortcuts",uielto_shortcuts);var uielto_assembly_error={props:{modal_assembly_error:{type:Object,required:true}},template:" "+'
Code fragment: '+'
'+' '+" "+" "+' '+' ... '+' '+" "+" "+' '+' {{modal_assembly_error.line1}} '+' {{modal_assembly_error.code1}} '+" "+" "+' * '+' {{modal_assembly_error.line2}} '+' {{modal_assembly_error.code2}} '+" "+" "+' '+' {{modal_assembly_error.line3}} '+' {{modal_assembly_error.code3}} '+" "+" "+' '+' ... '+' '+" "+" "+" "+"
"+"
"+" "+'
Error description: '+"
"+'
{{modal_assembly_error.error}} '+"
"+"
"};Vue.component("assembly-error",uielto_assembly_error);var uielto_calculator={data:function(){return{calculator:{bits:32,hexadecimal:"",sign:"",exponent:"",mantissa:"",mantisaDec:0,exponentDec:"",decimal:"",variant32:"primary",variant64:"outline-primary",lengthHexadecimal:8,lengthSign:1,lengthExponent:8,lengthMantissa:23}}},methods:{changeBitsCalculator(index){if(index==0){this.calculator.bits=32;this.calculator.variant32="primary";this.calculator.variant64="outline-primary";this.calculator.lengthHexadecimal=8;this.calculator.lengthSign=1;this.calculator.lengthExponent=8;this.calculator.lengthMantissa=23}if(index==1){this.calculator.bits=64;this.calculator.variant64="primary";this.calculator.variant32="outline-primary";this.calculator.lengthHexadecimal=16;this.calculator.lengthSign=1;this.calculator.lengthExponent=11;this.calculator.lengthMantissa=52}this.calculator.hexadecimal="";this.calculator.sign="";this.calculator.exponent="";this.calculator.mantissa="";this.calculator.decimal="";this.calculator.sign="";this.calculator.exponentDec="";this.calculator.mantissaDec=""},calculatorFunct(index){switch(index){case 0:console_log(this.calculator.hexadecimal.padStart(this.calculator.bits/4,"0"));var hex=this.calculator.hexadecimal.padStart(this.calculator.bits/4,"0");var float;var binary;if(this.calculator.bits==32){var re=/[0-9A-Fa-f]{8}/g;if(!re.test(hex)){show_notification("Character not allowed","danger");this.calculator.sign="";this.calculator.exponent="";this.calculator.mantissa="";this.calculator.exponentDec="";this.calculator.mantissaDec=0;this.calculator.decimal="";return}float=hex2float("0x"+hex);console_log(hex2float("0x"+hex));binary=float2bin(float).padStart(this.calculator.bits,"0");this.calculator.decimal=float;this.calculator.sign=binary.substring(0,1);this.calculator.exponent=binary.substring(1,9);this.calculator.mantissa=binary.substring(9,32);this.calculator.exponentDec=parseInt(bin2hex(this.calculator.exponent),16);this.calculator.mantissaDec=0;var j=0;for(var i=0;i"+'\t '+'\t
'+'\t
'+'\t
'+'\t
'+'\t '+"\t 32 bit"+"\t "+"\t
"+'\t
'+'\t '+"\t 64 bit"+"\t "+"\t
"+"\t
"+"\t
"+'\t
'+"\t
"+"\t"+'\t '+'\t
'+'\t
'+'\t '+"\t "+"\t
"+'\t
'+"\t
"+"\t"+'\t '+'\t
'+'\t
'+'\t '+"\t
"+'\t
'+"\t
"+"\t"+'\t '+'\t
'+'\t
'+'\t
'+'\t
'+'\t '+"\t "+"\t
"+'\t
'+'\t '+"\t "+"\t
"+'\t
'+'\t '+"\t "+"\t
"+"\t
"+"\t
"+'\t
'+"\t
"+"\t"+'\t '+'\t
'+'\t
'+'\t
'+'\t
'+'\t '+"\t "+'\t '+"\t -1{{calculator.sign}} * "+"\t "+"\t
"+'\t
'+'\t '+"\t "+'\t '+"\t 2{{calculator.exponentDec}}-127 * "+"\t "+'\t '+"\t 2{{calculator.exponentDec}}-1023 * "+"\t "+"\t
"+'\t
'+'\t '+"\t "+'\t '+"\t {{calculator.mantissaDec}} = "+"\t "+"\t
"+"\t
"+"\t
"+'\t
'+'\t '+"\t "+"\t
"+"\t
"+"\t"+'\t '+'\t Convert '+"\t
"+"\t"};Vue.component("calculator",uielto_calculator);function getDebounceTime(){if(screen.width>768){return 500}else{return 1e3}}var uielto_execution={props:{instructions:{type:Array,required:true},enter:{type:String,required:true}},data:function(){return{archInstructions:["Break","Address","Label","userInstructions","loadedInstructions","tag"]}},methods:{filter(row,filter){if(row.hide==true){return false}else{return true}},breakPoint(record,index){for(var i=0;i'+' '+" "+'
'+" "+" \x3c!-- Change the title of each column --\x3e"+' '+" User Instruction"+" "+" "+' '+" Loaded Instructions"+" "+" "+' '+" "+" "+" "+" \x3c!-- For each instruction --\x3e"+' '+' '+' '+' '+" "+"
"+" "+" "+' '+' {{row.item.Address}} '+" "+" "+' '+' {{row.item.Label}} '+" "+" "+' '+' {{row.item.user}} '+' <<Hidden>> '+" "+" "+' '+' {{row.item.loaded}} '+' <<Hidden>> '+" "+" "+' '+' "+" Current-Keyboard"+" "+' "+" Next"+" "+' "+" Current"+" "+" "+" "+" "+' '+' {{row.item.loaded}} '+' <<Hidden>> '+" "+" "+"
"+" "};Vue.component("table-execution",uielto_execution);var uielto_data_view_selector={props:{name_reg:{type:String,required:true},reg_type:{type:String,required:true}},data:function(){return{}},methods:{change_data_view(e,type){app._data.data_mode=e;if(e=="registers"){if(type=="int"){app._data.register_type="integer";app._data.name_tab_Reg="Decimal";app._data.name_reg="INT Registers";app._data.reg_type="int"}else if(type=="fp"){app._data.register_type="floating point";app._data.name_tab_Reg="Real";app._data.name_reg="FP Registers";app._data.reg_type="fp"}}if(e=="memory"){app._data.data_mode=e}creator_ga("send","event","data","data.view","data.view."+app._data.data_mode)}},template:' "};Vue.component("data-view-selector",uielto_data_view_selector);var uielto_register={props:{register:{type:Object,required:true},component:{type:Object,required:true},name_representation:{type:String,required:true},value_representation:{type:String,required:true}},methods:{popover_id(name){return"popoverValueContent"+name[0]},show_value(register){var ret=0;switch(this.value_representation){case"unsigned":ret=parseInt(register.value.toString(10))>>>0;break;case"signed":if(this.component.name=="Control registers"||this.component.name=="Integer registers"){if(register.value.toString(2).padStart(register.nbits,"0").charAt(0)==1)ret=parseInt(register.value.toString(10))-4294967296;if(register.value.toString(2).padStart(register.nbits,"0").charAt(0)==0)ret=register.value.toString(10)}else{ret=parseInt(register.value.toString(),10)>>0}break;case"decimal":if(this.component.name=="Control registers"||this.component.name=="Integer registers"){ret=hex2float("0x"+register.value.toString(16).padStart(register.nbits/4,"0"))}else{ret=register.value}break;case"hex":if(this.component.name=="Control registers"||this.component.name=="Integer registers"){ret=register.value.toString(16).padStart(register.nbits/4,"0").toUpperCase()}else{if(this.component.name=="Simple floating point registers"){ret=bin2hex(float2bin(register.value))}else{ret=bin2hex(double2bin(register.value))}}break}ret=ret.toString();if(ret.length>10){return ret.slice(0,8)+"..."}return ret},reg_name(register){switch(this.name_representation){case"logical":return register.name[0];case"alias":if(typeof register.name[1]==="undefined"){return register.name[0]}return register.name[1];case"all":return register.name.join(" | ")}}},template:' "+' {{reg_name(register)}} '+' '+" {{show_value(register)}}"+" "+" "+" "+' '+" "};Vue.component("register",uielto_register);var uielto_register_int_popover={props:{target:{type:String,required:true},component:{type:Object,required:true},register:{type:Object,required:true}},data:function(){return{newValue:""}},methods:{closePopover(){this.$root.$emit("bv::hide::popover")},updateReg(comp,elem,type,precision){for(var i=0;iarchitecture.components[comp].elements[i].nbits){value[1]=value[1].substring((value[1].length*4-architecture.components[comp].elements[i].nbits)/4,value[1].length)}architecture.components[comp].elements[i].value=bi_intToBigInt(value[1],16)}else if(architecture.components[comp].elements[i].name==elem&&this.newValue.match(/^(\d)+/)){architecture.components[comp].elements[i].value=bi_intToBigInt(this.newValue,10)}else if(architecture.components[comp].elements[i].name==elem&&this.newValue.match(/^-/)){architecture.components[comp].elements[i].value=bi_intToBigInt(this.newValue,10)}}else if(type=="floating point"){if(precision==false){if(architecture.components[comp].elements[i].name==elem&&this.newValue.match(/^0x/)){architecture.components[comp].elements[i].value=hex2float(this.newValue);updateDouble(comp,i)}else if(architecture.components[comp].elements[i].name==elem&&this.newValue.match(/^(\d)+/)){architecture.components[comp].elements[i].value=parseFloat(this.newValue,10);updateDouble(comp,i)}else if(architecture.components[comp].elements[i].name==elem&&this.newValue.match(/^-/)){architecture.components[comp].elements[i].value=parseFloat(this.newValue,10);updateDouble(comp,i)}}else if(precision==true){if(architecture.components[comp].elements[i].name==elem&&this.newValue.match(/^0x/)){architecture.components[comp].elements[i].value=hex2double(this.newValue);updateSimple(comp,i)}else if(architecture.components[comp].elements[i].name==elem&&this.newValue.match(/^(\d)+/)){architecture.components[comp].elements[i].value=parseFloat(this.newValue,10);updateSimple(comp,i)}else if(architecture.components[comp].elements[i].name==elem&&this.newValue.match(/^-/)){architecture.components[comp].elements[i].value=parseFloat(this.newValue,10);updateSimple(comp,i)}}}}this.newValue="";creator_ga("data","data.change","data.change.register_value");creator_ga("data","data.change","data.change.register_value_"+elem)},debounce:_.debounce((function(param,e){console_log(param);console_log(e);e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");var re=new RegExp("'","g");e=e.replace(re,'"');re=new RegExp("[\f]","g");e=e.replace(re,"\\f");re=new RegExp("[\n]","g");e=e.replace(re,"\\n");re=new RegExp("[\r]","g");e=e.replace(re,"\\r");re=new RegExp("[\t]","g");e=e.replace(re,"\\t");re=new RegExp("[\v]","g");e=e.replace(re,"\\v");if(e==""){this[param]=null;return}console_log("this."+param+"= '"+e+"'");eval("this."+param+"= '"+e+"'");app.$forceUpdate()}),getDebounceTime())},template:''+" "+' '+' × '+" "+" {{register.name.join(' | ')}}"+" "+""+' '+" "+" "+" Hex. "+" "+' '+' {{"0x"+(((register.value).toString(16)).padStart(register.nbits/4, "0")).toUpperCase()}}'+" "+" "+" "+" "+" Binary "+" "+' '+' {{(((register.value).toString(2)).padStart(register.nbits, "0"))}}'+" "+" "+" "+" "+" Signed "+" "+' "+" {{parseInt(register.value.toString(10))-0x100000000}}"+" "+' "+" {{(register.value).toString(10)}}"+" "+" "+" "+" "+" Unsig. "+" "+' '+" {{(register.value).toString(10) >>> 0}}"+" "+" "+" "+" "+" Char "+" "+' '+' {{hex2char8((((register.value).toString(16)).padStart(register.nbits/4, "0")))}}'+" "+" "+" "+" "+" IEEE 754 "+" "+' '+' {{hex2float("0x"+(((register.value).toString(16)).padStart(register.nbits/4, "0")))}}'+" "+" "+" "+" "+"
"+""+' '+' "+' "+"
"+" "};Vue.component("popover-register-int",uielto_register_int_popover);var uielto_register_float_popover={props:{target:{type:String,required:true},component:{type:Object,required:true},register:{type:Object,required:true}},data:function(){return{newValue:""}},methods:{closePopover(){this.$root.$emit("bv::hide::popover")},updateReg(comp,elem,type,precision){for(var i=0;iarchitecture.components[comp].elements[i].nbits){value[1]=value[1].substring((value[1].length*4-architecture.components[comp].elements[i].nbits)/4,value[1].length)}architecture.components[comp].elements[i].value=bi_intToBigInt(value[1],16)}else if(architecture.components[comp].elements[i].name==elem&&this.newValue.match(/^(\d)+/)){architecture.components[comp].elements[i].value=bi_intToBigInt(this.newValue,10)}else if(architecture.components[comp].elements[i].name==elem&&this.newValue.match(/^-/)){architecture.components[comp].elements[i].value=bi_intToBigInt(this.newValue,10)}}else if(type=="floating point"){if(precision==false){if(architecture.components[comp].elements[i].name==elem&&this.newValue.match(/^0x/)){architecture.components[comp].elements[i].value=hex2float(this.newValue);updateDouble(comp,i)}else if(architecture.components[comp].elements[i].name==elem&&this.newValue.match(/^(\d)+/)){architecture.components[comp].elements[i].value=parseFloat(this.newValue,10);updateDouble(comp,i)}else if(architecture.components[comp].elements[i].name==elem&&this.newValue.match(/^-/)){architecture.components[comp].elements[i].value=parseFloat(this.newValue,10);updateDouble(comp,i)}}else if(precision==true){if(architecture.components[comp].elements[i].name==elem&&this.newValue.match(/^0x/)){architecture.components[comp].elements[i].value=hex2double(this.newValue);updateSimple(comp,i)}else if(architecture.components[comp].elements[i].name==elem&&this.newValue.match(/^(\d)+/)){architecture.components[comp].elements[i].value=parseFloat(this.newValue,10);updateSimple(comp,i)}else if(architecture.components[comp].elements[i].name==elem&&this.newValue.match(/^-/)){architecture.components[comp].elements[i].value=parseFloat(this.newValue,10);updateSimple(comp,i)}}}}this.newValue="";creator_ga("data","data.change","data.change.register_value");creator_ga("data","data.change","data.change.register_value_"+elem)},debounce:_.debounce((function(param,e){console_log(param);console_log(e);e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");var re=new RegExp("'","g");e=e.replace(re,'"');re=new RegExp("[\f]","g");e=e.replace(re,"\\f");re=new RegExp("[\n]","g");e=e.replace(re,"\\n");re=new RegExp("[\r]","g");e=e.replace(re,"\\r");re=new RegExp("[\t]","g");e=e.replace(re,"\\t");re=new RegExp("[\v]","g");e=e.replace(re,"\\v");if(e==""){this[param]=null;return}console_log("this."+param+"= '"+e+"'");eval("this."+param+"= '"+e+"'");app.$forceUpdate()}),getDebounceTime())},template:''+" "+' '+' × '+" "+" {{register.name.join(' | ')}}"+" "+""+' '+" "+" "+" Hex. "+" "+' '+' {{"0x"+ bin2hex(float2bin(register.value))}}'+" "+" "+" "+" "+" Binary "+" "+' '+" {{float2bin(register.value)}}"+" "+" "+" "+" "+" Signed "+" "+' '+" {{parseInt(register.value.toString(), 10) >> 0}}"+" "+" "+" "+" "+" Unsig. "+" "+' '+" {{parseInt(register.value.toString(), 10) >>> 0}}"+" "+" "+" "+" "+" IEEE 754 "+" "+' '+" {{register.value}}"+" "+" "+" "+" "+"
"+""+' '+' "+' "+"
"+" "};Vue.component("popover-register-float",uielto_register_float_popover);var uielto_register_double_popover={props:{target:{type:String,required:true},component:{type:Object,required:true},register:{type:Object,required:true}},data:function(){return{newValue:""}},methods:{closePopover(){this.$root.$emit("bv::hide::popover")},updateReg(comp,elem,type,precision){for(var i=0;iarchitecture.components[comp].elements[i].nbits){value[1]=value[1].substring((value[1].length*4-architecture.components[comp].elements[i].nbits)/4,value[1].length)}architecture.components[comp].elements[i].value=bi_intToBigInt(value[1],16)}else if(architecture.components[comp].elements[i].name==elem&&this.newValue.match(/^(\d)+/)){architecture.components[comp].elements[i].value=bi_intToBigInt(this.newValue,10)}else if(architecture.components[comp].elements[i].name==elem&&this.newValue.match(/^-/)){architecture.components[comp].elements[i].value=bi_intToBigInt(this.newValue,10)}}else if(type=="floating point"){if(precision==false){if(architecture.components[comp].elements[i].name==elem&&this.newValue.match(/^0x/)){architecture.components[comp].elements[i].value=hex2float(this.newValue);updateDouble(comp,i)}else if(architecture.components[comp].elements[i].name==elem&&this.newValue.match(/^(\d)+/)){architecture.components[comp].elements[i].value=parseFloat(this.newValue,10);updateDouble(comp,i)}else if(architecture.components[comp].elements[i].name==elem&&this.newValue.match(/^-/)){architecture.components[comp].elements[i].value=parseFloat(this.newValue,10);updateDouble(comp,i)}}else if(precision==true){if(architecture.components[comp].elements[i].name==elem&&this.newValue.match(/^0x/)){architecture.components[comp].elements[i].value=hex2double(this.newValue);updateSimple(comp,i)}else if(architecture.components[comp].elements[i].name==elem&&this.newValue.match(/^(\d)+/)){architecture.components[comp].elements[i].value=parseFloat(this.newValue,10);updateSimple(comp,i)}else if(architecture.components[comp].elements[i].name==elem&&this.newValue.match(/^-/)){architecture.components[comp].elements[i].value=parseFloat(this.newValue,10);updateSimple(comp,i)}}}}this.newValue="";creator_ga("data","data.change","data.change.register_value");creator_ga("data","data.change","data.change.register_value_"+elem)},debounce:_.debounce((function(param,e){console_log(param);console_log(e);e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");var re=new RegExp("'","g");e=e.replace(re,'"');re=new RegExp("[\f]","g");e=e.replace(re,"\\f");re=new RegExp("[\n]","g");e=e.replace(re,"\\n");re=new RegExp("[\r]","g");e=e.replace(re,"\\r");re=new RegExp("[\t]","g");e=e.replace(re,"\\t");re=new RegExp("[\v]","g");e=e.replace(re,"\\v");if(e==""){this[param]=null;return}console_log("this."+param+"= '"+e+"'");eval("this."+param+"= '"+e+"'");app.$forceUpdate()}),getDebounceTime())},template:''+" "+' '+' × '+" "+" {{register.name.join(' | ')}}"+" "+""+' '+" "+" "+" Hex. "+" "+' '+' {{"0x"+ bin2hex(double2bin(register.value))}}'+" "+" "+" "+" "+" Binary "+" "+' '+" {{double2bin(register.value)}}"+" "+" "+" "+" "+" Signed "+" "+' '+" {{parseInt(register.value.toString(), 10) >> 0}}"+" "+" "+" "+" "+" Unsig. "+" "+' '+" {{parseInt(register.value.toString(), 10) >>> 0}}"+" "+" "+" "+" "+" IEEE 754 "+" "+' '+" {{register.value}}"+" "+" "+" "+" "+"
"+""+' '+' "+' "+"
"+" "};Vue.component("popover-register-double",uielto_register_double_popover);var uielto_memory={props:{memory:{type:Array,required:true},memory_segment:{type:String,required:true},track_stack_names:{type:Array,required:true},callee_subrutine:{type:String,required:true},caller_subrutine:{type:String,required:true}},data:function(){return{memFields:["Tag","Address","Binary","Value"]}},methods:{filter(row,filter){if(this.memory_segment=="instructions_memory"){if(row.hide==true){return false}else{return true}}if(this.memory_segment=="data_memory"){return true}if(this.memory_segment=="stack_memory"){return Math.abs(row.Address-app._data.end_callee)<40}},select_data_type(record,index){if(this.memory_segment=="instructions_memory"){return}if(this.memory_segment=="data_memory"){if(record.type=="space"&&memory[memory_hash[0]][index].Binary[0].Tag!=null||memory[memory_hash[0]][index].Binary[1].Tag!=null||memory[memory_hash[0]][index].Binary[2].Tag!=null||memory[memory_hash[0]][index].Binary[3].Tag!=null){app._data.row_index=index;app.$refs["space_modal"].show()}}if(this.memory_segment=="stack_memory"){app._data.row_index=index;app.$refs["stack_modal"].show()}}},template:'\t'+""+'
'+' '+' '+""+"\t '+"\t"+'\t '+"\t "+"\t "+"\t"+'\t '+'\t '+'\t
'+'\t "+"\t {{item2.name[0]}}"+"\t "+'\t "+"\t "+'\t "+"\t {{item2.name[0]}}"+"\t "+'\t "+"\t "+'\t "+"\t {{item2.name[0]}}"+"\t "+'\t "+"\t "+"\t"+"\t
"+"\t
"+"\t "+"\t"+'\t '+'\t '+'\t 0x{{((row.item.Address + 3).toString(16)).padStart(row.item.Address.length-2, "0").toUpperCase()}} - 0x{{(row.item.Address.toString(16)).padStart(row.item.Address.length-2, "0").toUpperCase()}}'+"\t "+'\t '+'\t 0x{{((row.item.Address + 3).toString(16)).padStart(row.item.Address.length-2, "0").toUpperCase()}} - 0x{{(row.item.Address.toString(16)).padStart(row.item.Address.length-2, "0").toUpperCase()}}'+"\t "+'\t '+'\t 0x{{((row.item.Address + 3).toString(16)).padStart(row.item.Address.length-2, "0").toUpperCase()}} - 0x{{(row.item.Address.toString(16)).padStart(row.item.Address.length-2, "0").toUpperCase()}}'+"\t "+'\t '+'\t 0x{{((row.item.Address + 3).toString(16)).padStart(row.item.Address.length-2, "0").toUpperCase()}} - 0x{{(row.item.Address.toString(16)).padStart(row.item.Address.length-2, "0").toUpperCase()}}'+"\t "+'\t '+'\t 0x{{((row.item.Address + 3).toString(16)).padStart(row.item.Address.length-2, "0").toUpperCase()}} - 0x{{(row.item.Address.toString(16)).padStart(row.item.Address.length-2, "0").toUpperCase()}}'+"\t "+'\t '+'\t 0x{{((row.item.Address + 3).toString(16)).padStart(row.item.Address.length-2, "0").toUpperCase()}} - 0x{{(row.item.Address.toString(16)).padStart(row.item.Address.length-2, "0").toUpperCase()}}'+"\t "+"\t "+"\t"+'\t '+' '+'\t '+"\t {{row.item.Binary[3].Bin.toUpperCase()}}"+"\t "+'\t '+"\t {{row.item.Binary[3].Bin.toUpperCase()}}"+"\t "+'\t '+"\t {{row.item.Binary[3].Tag}}"+"\t "+"\t"+'\t '+"\t {{row.item.Binary[2].Bin.toUpperCase()}}"+"\t "+'\t '+"\t {{row.item.Binary[2].Bin.toUpperCase()}}"+"\t "+'\t '+"\t {{row.item.Binary[2].Tag}}"+"\t "+"\t"+'\t '+"\t {{row.item.Binary[1].Bin.toUpperCase()}}"+"\t "+'\t '+"\t {{row.item.Binary[1].Bin.toUpperCase()}}"+"\t "+'\t '+"\t {{row.item.Binary[1].Tag}}"+"\t "+"\t"+'\t '+"\t {{row.item.Binary[0].Bin.toUpperCase()}}"+"\t "+'\t '+"\t {{row.item.Binary[0].Bin.toUpperCase()}}"+"\t "+'\t '+"\t {{row.item.Binary[0].Tag}}"+"\t "+"\t "+' '+'\t '+"\t {{row.item.Binary[3].Bin.toUpperCase()}}"+"\t "+'\t '+"\t {{row.item.Binary[3].Bin.toUpperCase()}}"+"\t "+'\t '+"\t {{row.item.Binary[3].Tag}}"+"\t "+"\t"+'\t '+"\t {{row.item.Binary[2].Bin.toUpperCase()}}"+"\t "+'\t '+"\t {{row.item.Binary[2].Bin.toUpperCase()}}"+"\t "+'\t '+"\t {{row.item.Binary[2].Tag}}"+"\t "+"\t"+'\t '+"\t {{row.item.Binary[1].Bin.toUpperCase()}}"+"\t "+'\t '+"\t {{row.item.Binary[1].Bin.toUpperCase()}}"+"\t "+'\t '+"\t {{row.item.Binary[1].Tag}}"+"\t "+"\t"+'\t '+"\t {{row.item.Binary[0].Bin.toUpperCase()}}"+"\t "+'\t '+"\t {{row.item.Binary[0].Bin.toUpperCase()}}"+"\t "+'\t '+"\t {{row.item.Binary[0].Tag}}"+"\t "+"\t "+'\t '+'\t '+"\t {{row.item.Binary[3].Bin.toUpperCase()}}"+"\t "+'\t '+"\t {{row.item.Binary[3].Bin.toUpperCase()}}"+"\t "+'\t '+"\t {{row.item.Binary[3].Tag}}"+"\t "+"\t"+'\t '+"\t {{row.item.Binary[2].Bin.toUpperCase()}}"+"\t "+'\t '+"\t {{row.item.Binary[2].Bin.toUpperCase()}}"+"\t "+'\t '+"\t {{row.item.Binary[2].Tag}}"+"\t "+"\t"+'\t '+"\t {{row.item.Binary[1].Bin.toUpperCase()}}"+"\t "+'\t '+"\t {{row.item.Binary[1].Bin.toUpperCase()}}"+"\t "+'\t '+"\t {{row.item.Binary[1].Tag}}"+"\t "+"\t"+'\t '+"\t {{row.item.Binary[0].Bin.toUpperCase()}}"+"\t "+'\t '+"\t {{row.item.Binary[0].Bin.toUpperCase()}}"+"\t "+'\t '+"\t {{row.item.Binary[0].Tag}}"+"\t "+"\t "+"\t"+'\t '+'\t '+"\t {{row.item.Binary[3].Bin.toUpperCase()}}"+"\t "+'\t '+"\t {{row.item.Binary[3].Bin.toUpperCase()}}"+"\t "+'\t '+"\t {{row.item.Binary[3].Tag}}"+"\t "+"\t"+'\t '+"\t {{row.item.Binary[2].Bin.toUpperCase()}}"+"\t "+'\t '+"\t {{row.item.Binary[2].Bin.toUpperCase()}}"+"\t "+'\t '+"\t {{row.item.Binary[2].Tag}}"+"\t "+"\t"+'\t '+"\t {{row.item.Binary[1].Bin.toUpperCase()}}"+"\t "+'\t '+"\t {{row.item.Binary[1].Bin.toUpperCase()}}"+"\t "+'\t '+"\t {{row.item.Binary[1].Tag}}"+"\t "+"\t"+'\t '+"\t {{row.item.Binary[0].Bin.toUpperCase()}}"+"\t "+'\t '+"\t {{row.item.Binary[0].Bin.toUpperCase()}}"+"\t "+'\t '+"\t {{row.item.Binary[0].Tag}}"+"\t "+"\t "+" "+'\t '+'\t '+"\t {{row.item.Binary[3].Bin.toUpperCase()}}"+"\t "+'\t '+"\t {{row.item.Binary[3].Bin.toUpperCase()}}"+"\t "+'\t '+"\t {{row.item.Binary[3].Tag}}"+"\t "+"\t"+'\t '+"\t {{row.item.Binary[2].Bin.toUpperCase()}}"+"\t "+'\t '+"\t {{row.item.Binary[2].Bin.toUpperCase()}}"+"\t "+'\t '+"\t {{row.item.Binary[2].Tag}}"+"\t "+"\t"+'\t '+"\t {{row.item.Binary[1].Bin.toUpperCase()}}"+"\t "+'\t '+"\t {{row.item.Binary[1].Bin.toUpperCase()}}"+"\t "+'\t '+"\t {{row.item.Binary[1].Tag}}"+"\t "+"\t"+'\t '+"\t {{row.item.Binary[0].Bin.toUpperCase()}}"+"\t "+'\t '+"\t {{row.item.Binary[0].Bin.toUpperCase()}}"+"\t "+'\t '+"\t {{row.item.Binary[0].Tag}}"+"\t "+"\t "+" "+'\t '+'\t '+"\t {{row.item.Binary[3].Bin.toUpperCase()}}"+"\t "+'\t '+"\t {{row.item.Binary[3].Bin.toUpperCase()}}"+"\t "+'\t '+"\t {{row.item.Binary[3].Tag}}"+"\t "+"\t"+'\t '+"\t {{row.item.Binary[2].Bin.toUpperCase()}}"+"\t "+'\t '+"\t {{row.item.Binary[2].Bin.toUpperCase()}}"+"\t "+'\t '+"\t {{row.item.Binary[2].Tag}}"+"\t "+"\t"+'\t '+"\t {{row.item.Binary[1].Bin.toUpperCase()}}"+"\t "+'\t '+"\t {{row.item.Binary[1].Bin.toUpperCase()}}"+"\t "+'\t '+"\t {{row.item.Binary[1].Tag}}"+"\t "+"\t"+'\t '+"\t {{row.item.Binary[0].Bin.toUpperCase()}}"+"\t "+'\t '+"\t {{row.item.Binary[0].Bin.toUpperCase()}}"+"\t "+'\t '+"\t {{row.item.Binary[0].Tag}}"+"\t "+"\t "+"\t"+"\t "+'\t '+'\t {{row.item.Value}} '+'\t '+" {{row.item.Value}}"+'\t "+"\t "+" "+'\t {{row.item.Value}} '+'\t {{row.item.Value}} '+'\t {{row.item.Value}} '+'\t {{row.item.Value}} '+"\t "+"\t "+""+" "+" "+""+' '+" "+""+' '+' \t'+" Stack memory keys: "+" \t "+""+' \tFree stack '+' \tCallee: {{callee_subrutine}} '+' \tCaller: {{caller_subrutine}} '+' \t••• {{track_stack_names.length - 2}} '+' \tSystem stack '+"
"+""+" "+" "+" "+""+"
"};Vue.component("table-mem",uielto_memory);var uielto_stats={props:{data_mode:{type:String,required:true},stats:{type:Array,required:true},stats_value:{type:Number,required:true}},template:'\t'+'\t
'+"\t"+'\t
'+'\t '+'\t '+"\t "+"\t"+'\t '+'\t '+"\t "+"\t "+"\t
"+"\t
"};Vue.component("stats",uielto_stats);var uielto_stats_plot={components:{apexchart:VueApexCharts},props:{stats_value:{type:Number,required:true}},data:function(){return{chartOptions:{colors:["red","blue","yellow","purple","green","orange","gray","pink","teal","black","lime","indigo","cyan"],chart:{id:"graphic",type:"donut"},labels:["Arithmetic integer","Arithmetic floating point","Logic","Transfer between registers","Memory access","Comparison","I/O","Syscall","Control","Function call","Conditional bifurcation","Unconditional bifurcation","Other"],dataLabels:{enabled:true},donut:{labels:{show:true,total:{show:true,showAlways:true,label:"Total"}}},fill:{type:"gradient",gradient:{shade:"dark",type:"horizontal",shadeIntensity:.5,gradientToColors:undefined,inverseColors:true,opacityFrom:1,opacityTo:1,stops:[0,50,100],colorStops:[]},colors:["red","blue","yellow","purple","green","orange","gray","pink","teal","black","lime","indigo","cyan"]},legend:{formatter:function(val,opts){return val+" - "+opts.w.globals.series[opts.seriesIndex]}},plotOptions:{pie:{donut:{labels:{show:true,total:{show:true,showAlways:true,color:"black",formatter:function(w){return w.globals.seriesTotals.reduce(((a,b)=>a+b),0)}}}}}}}}},template:' "};Vue.component("plot-stats",uielto_stats_plot);var uielto_stats_table={props:{stats:{type:Array,required:true}},data:function(){return{statsFields:{type:{label:"Type",sortable:true},number_instructions:{label:"Number of instructions",sortable:true},percentage:{label:"Percentage",sortable:true}}}},template:"\t'+"\t"};Vue.component("table-stats",uielto_stats_table);var uielto_monitor={props:{display:{type:String,required:true}},template:'\t'+'\t
'+'\t
'+'\t '+"\t
"+'\t
'+'\t '+"\t "+"\t
"+"\t
"+"\t
"};Vue.component("monitor",uielto_monitor);var uielto_keyboard={props:{keyboard:{type:String,required:true},enter:{type:String,required:true}},methods:{consoleClear(){app._data.keyboard="";app._data.display=""},consoleEnter(){if(keyboard!=""){consoleMutex=true}},debounce:_.debounce((function(param,e){console_log(param);console_log(e);e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");var re=new RegExp("'","g");e=e.replace(re,'"');re=new RegExp("[\f]","g");e=e.replace(re,"\\f");re=new RegExp("[\n]","g");e=e.replace(re,"\\n");re=new RegExp("[\r]","g");e=e.replace(re,"\\r");re=new RegExp("[\t]","g");e=e.replace(re,"\\t");re=new RegExp("[\v]","g");e=e.replace(re,"\\v");if(e==""){this[param]=null;return}console_log("this."+param+"= '"+e+"'");eval("this."+param+"= '"+e+"'");app.$forceUpdate()}),getDebounceTime())},template:'\t'+'\t
'+'\t
'+'\t '+"\t
"+'\t
'+'\t '+"\t "+"\t
"+"\t
"+"\t"+'\t
'+'\t
'+"\t "+"\t
"+'\t
'+'\t "+"\t
"+'\t
'+'\t "+"\t
"+"\t"+"\t
"+"\t
"};Vue.component("keyboard",uielto_keyboard);function getDebounceTime(){if(screen.width>768){return 500}else{return 1e3}}function show_notification(msg,type){app._data.alertMessage=msg;app._data.type=type;app.$bvToast.toast(app._data.alertMessage,{variant:app._data.type,solid:true,toaster:"b-toaster-top-center",autoHideDelay:app._data.notificationTime});var date=new Date;notifications.push({mess:app._data.alertMessage,color:app._data.type,time:date.getHours()+":"+date.getMinutes()+":"+date.getSeconds(),date:date.getDate()+"/"+(date.getMonth()+1)+"/"+date.getFullYear()});return true}function show_loading(){if(toHandler!=null){return}toHandler=setTimeout((function(){$("#loading").show();toHandler=null}),500)}function hide_loading(){if(toHandler!=null){clearTimeout(toHandler);toHandler=null}$("#loading").hide()}function btn_glow(btn_name,post_label){var buttonDec="#popoverValueContent"+btn_name+post_label;var buttonHex="#popoverValueContent"+btn_name;$(buttonDec).attr("style","background-color:#c2c2c2;");$(buttonHex).attr("style","background-color:#c2c2c2;");setTimeout((function(){$(buttonDec).attr("style","background-color:#f5f5f5;");$(buttonHex).attr("style","background-color:#f5f5f5;")}),500)}var toHandler=null;try{window.app=new Vue({el:"#app",data:{version:"",creator_mode:"load_architecture",notificationTime:1500,autoscroll:true,fontSize:15,c_debug:false,dark:false,arch_available:architecture_available,back_card:back_card,date_copy:"",showLoadArch:false,name_arch:"",description_arch:"",load_arch:"",modalDeletArch:{title:"",index:0},architecture_name:"",number_bits:32,architecture:architecture,architecture_hash:architecture_hash,name_arch_save:"",advanced_mode:true,memory_layout:["","","","","",""],modalResetMem:{title:"",element:""},align:false,archFields:["name","ID","nbits","default_value","properties","actions"],componentsTypes:componentsTypes,simple_reg:[],modalResetArch:{title:"",element:""},showNewComponent:false,showEditComponent:false,modalEditComponent:{title:"",element:""},modalDeletComp:{title:"",element:""},showNewElement:false,showEditElement:false,modalNewElement:{title:"",element:"",type:"",double_precision:"",simple1:"",simple2:""},modalEditElement:{title:"",element:"",type:"",double_precision:"",simple1:"",simple2:""},modalDeletElement:{title:"",element:""},formArchitecture:{name:"",id:"",type:"",defValue:"",properties:[],precision:""},instFields:["name","co","cop","nwords","properties","signatureRaw","fields","definition","actions"],instructionsTypes:instructionsTypes,modalViewFields:{title:"",element:"",co:"",cop:""},modalResetInst:{title:"",element:""},showNewInstruction:false,showEditInstruction:false,instructionFormPage:1,instructionFormPageLink:["#Principal","#Fields","#Syntax","#Definition","#Help"],modalEditInst:{title:"",element:"",co:"",cop:""},modalDeletInst:{title:"",element:"",index:0},formInstruction:{name:"",type:"",co:"",cop:"",nwords:1,help:"",properties:[],numfields:"1",numfieldsAux:"1",nameField:[],typeField:[],separated:[],startBitField:[],stopBitField:[],valueField:[],assignedCop:false,signature:"",signatureRaw:"",signature_definition:"",definition:""},pseudoinstFields:["name","nwords","signatureRaw","fields","definition","actions"],modalResetPseudoinst:{title:"",element:""},showNewPseudoinstruction:false,showEditPseudoinstruction:false,modalEditPseudoinst:{title:"",element:"",index:0},modalDeletPseudoinst:{title:"",element:"",index:0},formPseudoinstruction:{name:"",nwords:1,numfields:"0",numfieldsAux:"0",nameField:[],typeField:[],startBitField:[],stopBitField:[],signature:"",signatureRaw:"",signature_definition:"",definition:"",help:""},directivesFields:["name","action","size","actions"],actionTypes:actionTypes,modalResetDir:{title:"",element:""},showNewDirective:false,showEditDirective:false,modalEditDirective:{title:"",element:""},modalDeletDir:{title:"",element:""},formDirective:{name:"",action:"",size:0},fragmentData:["inm-signed","inm-unsigned","address","offset_bytes","offset_words"],example_available:example_available,example_loaded:null,load_assembly:"",save_assembly:"",modalAssemblyError:{code1:"",code2:"",code3:"",error:""},name_binary_load:"",load_binary:false,update_binary:update_binary,name_binary_save:"",assembly_code:"",alertMessage:"",type:"",notifications:notifications,browser:"",instructionsPacked:20,runExecution:false,resetBut:false,instructions:instructions,register_type:"integer",name_tab_Reg:"Decimal",name_reg:"INT Registers",reg_type:"int",register_popover:"",data_mode:"registers",newValue:"",reg_representation:"signed",reg_representation_options:[{text:"Signed",value:"signed"},{text:"Unsigned",value:"unsigned"},{text:"IEEE 754",value:"decimal"},{text:"Hexadecimal",value:"hex"}],reg_name_representation:"logical",reg_name_representation_options:[{text:"Name",value:"logical"},{text:"Alias",value:"alias"},{text:"All",value:"all"}],memory_hash:["data_memory","instructions_memory","stack_memory"],memory:memory,row_index:null,selected_space_view:null,selected_stack_view:null,track_stack_names:track_stack_names,callee_subrutine:"",caller_subrutine:"",stack_pointer:0,begin_caller:0,end_caller:0,begin_callee:0,end_callee:0,totalStats:totalStats,stats:stats,stats_value:stats_value,display:"",keyboard:"",enter:null},created(){this.load_num_version();this.load_arch_available();this.detectBrowser()},mounted(){this.backupCopyModal();this.verifyBrowser();this.get_configuration();var url_hash=creator_preload_get2hash(window.location);creator_preload_fromHash(this,url_hash)},beforeUpdate(){this.get_dark_mode()},methods:{load_num_version(){$.getJSON("package.json",(function(cfg){creator_information=cfg;app._data.version=cfg.version}))},verifyBrowser(){if(navigator.userAgent.indexOf("OPR")>-1){this.$refs.browser.show()}else if(navigator.userAgent.indexOf("MIE")>-1){this.$refs.browser.show()}else if(navigator.userAgent.indexOf("Edge")>-1){this.$refs.browser.show()}else if(navigator.userAgent.indexOf("Chrome")>-1){return}else if(navigator.userAgent.indexOf("Safari")>-1){return}else if(navigator.userAgent.indexOf("Firefox")>-1){return}else{this.$refs.browser.show()}},get_configuration(){if(localStorage.getItem("instructionsPacked")!=null){this.instructionsPacked=parseInt(localStorage.getItem("instructionsPacked"))}if(localStorage.getItem("autoscroll")!=null){this.autoscroll=localStorage.getItem("autoscroll")==="true"}if(localStorage.getItem("notificationTime")!=null){this.notificationTime=parseInt(localStorage.getItem("notificationTime"))}},get_dark_mode(){if(localStorage.getItem("dark_mode")!=null){document.getElementsByTagName("body")[0].style=localStorage.getItem("dark_mode");if(localStorage.getItem("dark_mode")==""){app._data.dark=false}else{app._data.dark=true}}else{var default_style=window.matchMedia("(prefers-color-scheme: dark)").matches;if(default_style==true){document.getElementsByTagName("body")[0].style="filter: invert(88%) hue-rotate(160deg) !important; background-color: #111 !important;";app._data.dark=true}else{document.getElementsByTagName("body")[0].style="";app._data.dark=false}}},change_UI_mode(e){if(app._data.creator_mode!=e){if(app._data.creator_mode=="architecture"){app._data.advanced_mode=true}if(textarea_assembly_editor!=null&&e!="assembly"){app._data.assembly_code=textarea_assembly_editor.getValue();code_assembly=textarea_assembly_editor.getValue();codemirrorHistory=textarea_assembly_editor.getHistory();textarea_assembly_editor.toTextArea()}app._data.register_popover="";if(e=="architecture"){$(".loading").show();setTimeout((function(){app._data.creator_mode=e;app.$forceUpdate();$(".loading").hide()}),50);return}app._data.creator_mode=e;if(e=="assembly"){setTimeout((function(){codemirrorStart();if(codemirrorHistory!=null){textarea_assembly_editor.setHistory(codemirrorHistory);textarea_assembly_editor.undo()}textarea_assembly_editor.setValue(code_assembly);if(app._data.update_binary!=""){$("#divAssembly").attr("class","col-lg-10 col-sm-12");$("#divTags").attr("class","col-lg-2 col-sm-12");$("#divTags").show()}}),50)}app.$forceUpdate()}},changeToSeparateValue(val,pos){if(val){this.formInstruction.startBitField[pos]=[0];this.formInstruction.stopBitField[pos]=[0];if(this.formInstruction.typeField[pos]=="co")this.formInstruction.co=["0"]}else{this.formInstruction.startBitField[pos]=0;this.formInstruction.stopBitField[pos]=0;if(this.formInstruction.typeField[pos]=="co")this.formInstruction.co="0"}},addMoreFieldsToSeparateValues(event,pos){this.formInstruction.startBitField[pos].push(0);this.formInstruction.stopBitField[pos].push(0);if(this.formInstruction.typeField[pos]=="co")this.formInstruction.co.push("0");app.$forceUpdate()},lessFieldsToSeparateValues(event,pos){this.formInstruction.startBitField[pos].pop();this.formInstruction.stopBitField[pos].pop();if(this.formInstruction.typeField[pos]=="co")this.formInstruction.co.pop();app.$forceUpdate()},load_arch_available(){$.getJSON("architecture/available_arch.json"+"?v="+(new Date).getTime(),(function(cfg){architecture_available=cfg;if(typeof Storage!=="undefined"){if(localStorage.getItem("load_architectures_available")!=null){var auxArch=localStorage.getItem("load_architectures_available");var aux=JSON.parse(auxArch);for(var i=0;i{c.elements.forEach(((e,j)=>{if(e.default_value)e.value=e.default_value;else e.value="0"}))}));var textToWrite=JSON.stringify(auxArchitecture,null,2);var textFileAsBlob=new Blob([textToWrite],{type:"text/json"});var fileNameToSaveAs;if(this.name_arch_save==""){fileNameToSaveAs="architecture.json"}else{fileNameToSaveAs=this.name_arch_save+".json"}var downloadLink=document.createElement("a");downloadLink.download=fileNameToSaveAs;downloadLink.innerHTML="My Hidden Link";window.URL=window.URL||window.webkitURL;downloadLink.href=window.URL.createObjectURL(textFileAsBlob);downloadLink.onclick=destroyClickedElement;downloadLink.style.display="none";document.body.appendChild(downloadLink);downloadLink.click();show_notification("Save architecture","success")},change_mode(){if(app._data.advanced_mode==false){app._data.advanced_mode=true}else{app._data.advanced_mode=false}},resetMemModal(elem,button){this.modalResetMem.title="Reset memory layout";this.modalResetMem.element=elem;this.$root.$emit("bv::show::modal","modalResetMem",button)},resetMemory(arch){show_loading();for(var i=0;iauxMemoryLayout[j].value){show_notification("The segment can not be overlap","danger");return}}}for(var i=0;i<6;i++){architecture.memory_layout[i].value=auxMemoryLayout[i].value}app._data.architecture=architecture;backup_stack_address=architecture.memory_layout[4].value;backup_data_address=architecture.memory_layout[3].value;for(var i=0;i<6;i++){app._data.memory_layout[i]=""}app.$forceUpdate()},element_id(name,type,double){var id=0;for(var i=0;ithis.formInstruction.nwords*32){this.formInstruction.numfieldsAux=this.formInstruction.nwords*32;this.formInstruction.numfields=this.formInstruction.nwords*32}else if(this.formInstruction.numfields<1){this.formInstruction.numfieldsAux=1;this.formInstruction.numfields=1}else{this.formInstruction.numfieldsAux=this.formInstruction.numfields}}if(type==1){if(this.formPseudoinstruction.numfields>this.formPseudoinstruction.nwords*32){this.formPseudoinstruction.numfieldsAux=this.formPseudoinstruction.nwords*32;this.formPseudoinstruction.numfields=this.formPseudoinstruction.nwords*32}else if(this.formPseudoinstruction.numfields<0){this.formPseudoinstruction.numfieldsAux=0;this.formPseudoinstruction.numfields=0}else{this.formPseudoinstruction.numfieldsAux=this.formPseudoinstruction.numfields}}},viewFielsInst(elem,co,cop,button){this.modalViewFields.title="Fields of "+elem;this.modalViewFields.element=elem;for(var i=0;iisNaN(val))))show_notification("The field co must be numbers","danger");else if(isNaN(this.formInstruction.cop)){show_notification("The field cop must be numbers","danger")}else if(typeof this.formInstruction.co!="object"&&this.formInstruction.co.length!=this.formInstruction.startBitField[0]-this.formInstruction.stopBitField[0]+1){show_notification("The length of co should be "+(this.formInstruction.startBitField[0]-this.formInstruction.stopBitField[0]+1)+" binary numbers","danger")}else if(typeof this.formInstruction.co==="object"&&this.formInstruction.co.some(((val,ind)=>val.length!==app.formInstruction.startBitField[0][ind]-app.formInstruction.stopBitField[0][ind]+1)))show_notification("The length of co don't match with the desription","danger");else{this.newInstruction()}},newInstruction(){for(var i=0;ithis.formInstruction.co instanceof Array?this.formInstrucion.co.join(""):this.formInstruction.co)()+this.formInstruction.cop;for(var i=0;ithis.formInstruction.separated[i]||false));architecture.instructions.push(newInstruction);for(var i=0;iparseInt(val))),stopbit:!this.formInstruction.separated[i]?parseInt(this.formInstruction.stopBitField[i]):this.formInstruction.stopBitField[i].map((val=>parseInt(val))),valueField:this.formInstruction.valueField[i]};architecture.instructions[architecture.instructions.length-1].fields.push(newField)}},editInstModal(elem,co,cop,button){this.modalEditInst.title="Edit Instruction";this.modalEditInst.element=elem;for(var i=0;iisNaN(val))))show_notification("The field co must be numbers","danger");else if(isNaN(this.formInstruction.cop)){show_notification("The field cop must be numbers","danger")}else if(typeof this.formInstruction.co!="object"&&this.formInstruction.co.length!=this.formInstruction.startBitField[0]-this.formInstruction.stopBitField[0]+1){show_notification("The length of co should be "+(this.formInstruction.startBitField[0]-this.formInstruction.stopBitField[0]+1)+" binary numbers","danger")}else if(typeof this.formInstruction.co==="object"&&this.formInstruction.co.some(((val,ind)=>val.length!==app.formInstruction.startBitField[0][ind]-app.formInstruction.stopBitField[0][ind]+1)))show_notification("The length of co don't match with the desription","danger");else{this.editInstruction(inst,co,cop)}},editInstruction(comp,co,cop){var exCop=false;for(var z=1;zthis.formInstruction.co instanceof Array?this.formInstrucion.co.join(""):this.formInstruction.co)()+this.formInstruction.cop;for(var i=0;iparseInt(val)));architecture.instructions[i].fields[j].stopbit=!this.formInstruction.separated[j]?parseInt(this.formInstruction.stopBitField[j]):this.formInstruction.stopBitField[j].map((val=>parseInt(val)));architecture.instructions[i].fields[j].valueField=this.formInstruction.valueField[j];architecture.instructions[i].separated[j]=this.formInstruction.separated[j]}else{var newField={name:this.formInstruction.nameField[j],type:this.formInstruction.typeField[j],startbit:this.formInstruction.startBitField[j],stopbit:this.formInstruction.stopBitField[j],valueField:this.formInstruction.valueField[j]};architecture.instructions[i].fields.push(newField)}}this.generateSignatureInst();var signature=this.formInstruction.signature;var signatureRaw=this.formInstruction.signatureRaw;if(exCop==false){architecture.instructions[i].cop=""}architecture.instructions[i].signature=signature;architecture.instructions[i].signatureRaw=signatureRaw;if(architecture.instructions[i].fields.length>this.formInstruction.numfields){architecture.instructions[i].fields.splice(this.formInstruction.numfields,architecture.instructions[i].fields.length-this.formInstruction.numfields)}break}}show_notification("The instruction has been modified, please check the definition of the pseudoinstructions","info")},delInstModal(elem,index,button){this.modalDeletInst.title="Delete Instruction";this.modalDeletInst.element=elem;this.modalDeletInst.index=index;this.$root.$emit("bv::show::modal","modalDeletInst",button)},delInstruction(index){architecture.instructions.splice(index,1)},generateSignatureInst(){var signature=this.formInstruction.signature_definition;var re=new RegExp("^ +");this.formInstruction.signature_definition=this.formInstruction.signature_definition.replace(re,"");re=new RegExp(" +","g");this.formInstruction.signature_definition=this.formInstruction.signature_definition.replace(re," ");re=new RegExp("^ +");signature=signature.replace(re,"");re=new RegExp(" +","g");signature=signature.replace(re," ");for(var z=0;zthis.formPseudoinstruction.numfields){architecture.pseudoinstructions[index].fields.splice(this.formPseudoinstruction.numfields,architecture.pseudoinstructions[i].fields.length-this.formPseudoinstruction.numfields)}},delPseudoinstModal(elem,index,button){this.modalDeletPseudoinst.title="Delete Pseudointruction";this.modalDeletPseudoinst.element=elem;this.modalDeletPseudoinst.index=index;this.$root.$emit("bv::show::modal","modalDeletPseudoinst",button)},delPseudoinstruction(index){architecture.pseudoinstructions.splice(index,1)},pseudoDefValidator(name,definition,fields){var re=new RegExp("^\n+");definition=definition.replace(re,"");re=new RegExp("\n+","g");definition=definition.replace(re,"");var newDefinition=definition;re=/{([^}]*)}/g;var code=re.exec(definition);if(code!=null){while(code!=null){console_log(code);var instructions=code[1].split(";");if(instructions.length==1){show_notification('Enter a ";" at the end of each line of code',"danger");return-1}for(var j=0;jfieldsLength){show_notification("Immediate number "+instructionParts[z]+" is too big","danger");return-1}}else if(instructionParts[z].match(/^(\d)+\.(\d)+/)){if(isNaN(parseFloat(instructionParts[z]))==true){show_notification("Immediate number "+instructionParts[z]+" is not valid","danger");return-1}if(this.float2bin(parseFloat(instructionParts[z])).length>fieldsLength){show_notification("Immediate number "+instructionParts[z]+" is too big","danger");return-1}}else if(isNaN(parseInt(instructionParts[z]))){}else{var numAux=parseInt(instructionParts[z],10);if(isNaN(parseInt(instructionParts[z]))==true){show_notification("Immediate number "+instructionParts[z]+" is not valid","danger");return-1}var comNumPos=Math.pow(2,fieldsLength-1);var comNumNeg=comNumPos*-1;comNumPos=comNumPos-1;console_log(comNumPos);console_log(comNumNeg);if(parseInt(instructionParts[z],10)>comNumPos||parseInt(instructionParts[z],10)fieldsLength){show_notification("Address "+instructionParts[z]+" is too big","danger");return-1}}}if(!found){show_notification("Register "+instructionParts[z]+" not found","danger");return-1}}}}if(!found){show_notification("Instruction "+instructions[j]+" do not exists","danger");return-1}}definition=definition.replace(code[0],"");re=/{([^}]*)}/g;code=re.exec(definition)}}else{var instructions=definition.split(";");console_log(instructions.length);if(instructions.length==1){show_notification('Enter a ";" at the end of each line of code',"danger");return-1}for(var j=0;jfieldsLength){show_notification("Immediate number "+instructionParts[z]+" is too big","danger");return-1}}else if(instructionParts[z].match(/^(\d)+\.(\d)+/)){if(isNaN(parseFloat(instructionParts[z]))==true){show_notification("Immediate number "+instructionParts[z]+" is not valid","danger");return-1}if(this.float2bin(parseFloat(instructionParts[z])).length>fieldsLength){show_notification("Immediate number "+instructionParts[z]+" is too big","danger");return-1}}else if(isNaN(parseInt(instructionParts[z]))){}else{var numAux=parseInt(instructionParts[z],10);if(isNaN(parseInt(instructionParts[z]))==true){show_notification("Immediate number "+instructionParts[z]+" is not valid","danger");return-1}var comNumPos=Math.pow(2,fieldsLength-1);var comNumNeg=comNumPos*-1;comNumPos=comNumPos-1;console_log(comNumPos);console_log(comNumNeg);if(parseInt(instructionParts[z],10)>comNumPos||parseInt(instructionParts[z],10)fieldsLength){show_notification("Address "+instructionParts[z]+" is too big","danger");return-1}}}if(!found){show_notification("Register "+instructionParts[z]+" not found","danger");return-1}}}}if(!found){show_notification("Instruction "+instructions[j]+" do not exists","danger");return-1}}}return 0},generateSignaturePseudo(){var signature=this.formPseudoinstruction.signature_definition;var re=new RegExp("^ +");this.formPseudoinstruction.signature_definition=this.formPseudoinstruction.signature_definition.replace(re,"");re=new RegExp(" +","g");this.formPseudoinstruction.signature_definition=this.formPseudoinstruction.signature_definition.replace(re," ");re=new RegExp("^ +");signature=signature.replace(re,"");re=new RegExp(" +","g");signature=signature.replace(re," ");for(var z=0;z{setTimeout((function(){if(typeof code!=="undefined"){code_assembly=code}else{code_assembly=textarea_assembly_editor.getValue()}var ret=assembly_compiler();app._data.totalStats=0;app._data.instructions=instructions;app._data.memory[memory_hash[1]]=memory[memory_hash[1]];app._data.memory[memory_hash[0]]=memory[memory_hash[0]];app._data.memory[memory_hash[2]]=memory[memory_hash[2]];tokenIndex=0;app.reset(true);if(typeof Storage!=="undefined"){var auxObject=jQuery.extend(true,{},architecture);var auxArchitecture=register_value_serialize(auxObject);var auxArch=JSON.stringify(auxArchitecture,null,2);var date=new Date;var auxDate=date.getHours()+":"+date.getMinutes()+":"+date.getSeconds()+" - "+date.getDate()+"/"+(date.getMonth()+1)+"/"+date.getFullYear();console_log(app._data.architecture_name);localStorage.setItem("arch_name",app._data.architecture_name);localStorage.setItem("architecture_copy",auxArch);localStorage.setItem("assembly_copy",code_assembly);localStorage.setItem("date_copy",auxDate)}hide_loading();switch(ret.type){case"error":app.compileError(ret.msg,ret.token,ret.line);break;case"warning":show_notification(ret.token,ret.bgcolor);break;default:show_notification("Compilation completed successfully","success");break}resolve("0")}),25)}))},newAssembly(){textarea_assembly_editor.setValue("")},read_assembly(e){show_loading();var file;var reader;var files=document.getElementById("assembly_file").files;for(var i=0;i{if(message=="-1"){return}if(memory[memory_hash[0]].length!=0){show_notification("You can not enter data in a library","danger");return}for(var i=0;i0){app.modalAssemblyError.line1=line;app.modalAssemblyError.code1=code_assembly_segment[line-1]}app.modalAssemblyError.line2=line+1;app.modalAssemblyError.code2=code_assembly_segment[line];app.modalAssemblyError.line3="";app.modalAssemblyError.code3="";if(line=0){this.browser="Chrome"}else if(navigator.userAgent.search("Firefox")>=0){this.browser="Firefox"}else if(navigator.userAgent.search("Safari")>=0&&navigator.userAgent.search("Chrome")<0){this.browser="Chrome"}},executeInstruction(){creator_ga("execute","execute.instruction","execute.instruction");var ret=executeInstruction();if(typeof ret==="undefined"){console.log("AQUI hemos llegado y un poema se ha encontrado...")}if(ret.msg!=null){show_notification(ret.msg,ret.type)}if(ret.draw!=null){for(var i=0;i=0&&executionIndex+40&&executionIndex+4>=instructions.length){$(".instructions_table").animate({scrollTop:$(".instructions_table").height()},300)}}if(app._data.data_mode=="stats"){ApexCharts.exec("graphic","updateSeries",stats_value)}return}},executeProgram(but){creator_ga("execute","execute.run","execute.run");app._data.runExecution=true;app._data.runExecution=false;runProgram=true;if(instructions.length==0){show_notification("No instructions in memory","danger");runProgram=false;return}if(executionIndex<-1){show_notification("The program has finished","danger");runProgram=false;return}if(executionIndex==-1){show_notification("The program has finished with errors","danger");runProgram=false;return}$("#stopExecution").show();$("#playExecution").hide();this.programExecutionInst(but)},programExecutionInst(but){for(var i=0;i=0;i++){if(mutexRead==true){iter1=1;$("#stopExecution").hide();$("#playExecution").show();runProgram=false;return}else if(instructions[executionIndex].Break==true&&iter1==0){iter1=1;$("#stopExecution").hide();$("#playExecution").show();runProgram=false;return}else if(this.runExecution==true){app._data.runExecution=false;iter1=1;$("#stopExecution").hide();$("#playExecution").show();runProgram=false;return}else if(but==true&&i==0){app._data.resetBut=false}else if(this.resetBut==true){app._data.resetBut=false;$("#stopExecution").hide();$("#playExecution").show();runProgram=false;return}else{this.executeInstruction();iter1=0}}if(executionIndex>=0){setTimeout(this.programExecutionInst,15)}else{$("#stopExecution").hide();$("#playExecution").show()}},stopExecution(){app._data.runExecution=true},exception(error){show_notification("There has been an exception. Error description: '"+error,"danger");instructions[executionIndex]._rowVariant="danger";executionIndex=-1;creator_ga("execute","execute.exception","execute.exception."+error);return},reset(reset_graphic){creator_ga("execute","execute.reset","execute.reset");show_loading();setTimeout((function(){app._data.resetBut=true;app._data.keyboard="";app._data.display="";app._data.enter=null;for(var i=0;i=0&&executionIndex+40&&executionIndex+4>=instructions.length){$(".instructions_table").animate({scrollTop:$(".instructions_table").height()},300)}if(reset_graphic==true&&app._data.data_mode=="stats"){ApexCharts.exec("graphic","updateSeries",stats_value)}hide_loading()}),25)},consoleEnter(){if(this.keyboard!=""){consoleMutex=true}},consoleClear(){this.keyboard="";this.display=""},hex2float(hexvalue){var value=hexvalue.split("x");var value_bit="";for(var i=0;i>0}else if(app._data.selected_space_view=="unsig_int"){var hex="";for(var j=0;j<4;j++){hex=memory[memory_hash[0]][app._data.row_index].Binary[j].Bin+hex}memory[memory_hash[0]][app._data.row_index].Value=parseInt(hex,16)>>>0}else if(app._data.selected_space_view=="float"){var hex="";for(var j=0;j<4;j++){hex=memory[memory_hash[0]][app._data.row_index].Binary[j].Bin+hex}memory[memory_hash[0]][app._data.row_index].Value=this.hex2float("0x"+hex)}else if(app._data.selected_space_view=="char"){var hex="";for(var j=0;j<4;j++){hex=memory[memory_hash[0]][app._data.row_index].Binary[j].Bin+hex}memory[memory_hash[0]][app._data.row_index].Value=this.hex2char8(hex)}var i=1;while(app._data.row_index+i>0}else if(app._data.selected_space_view=="unsig_int"){var hex="";for(var j=0;j<4;j++){hex=memory[memory_hash[0]][app._data.row_index+i].Binary[j].Bin+hex}memory[memory_hash[0]][app._data.row_index+i].Value=parseInt(hex,16)>>>0}else if(app._data.selected_space_view=="float"){var hex="";for(var j=0;j<4;j++){hex=memory[memory_hash[0]][app._data.row_index+i].Binary[j].Bin+hex}memory[memory_hash[0]][app._data.row_index+i].Value=this.hex2float("0x"+hex)}else if(app._data.selected_space_view=="char"){var hex="";for(var j=0;j<4;j++){hex=memory[memory_hash[0]][app._data.row_index+i].Binary[j].Bin+hex}memory[memory_hash[0]][app._data.row_index+i].Value=this.hex2char8(hex)}i++}app._data.memory=memory},hide_space_modal(){app._data.selected_space_view=null},change_stack_view(){if(app._data.selected_stack_view=="sig_int"){var hex="";for(var j=0;j<4;j++){hex=memory[memory_hash[2]][app._data.row_index].Binary[j].Bin+hex}memory[memory_hash[2]][app._data.row_index].Value=parseInt(hex,16)>>0}else if(app._data.selected_stack_view=="unsig_int"){var hex="";for(var j=0;j<4;j++){hex=memory[memory_hash[2]][app._data.row_index].Binary[j].Bin+hex}memory[memory_hash[2]][app._data.row_index].Value=parseInt(hex,16)>>>0}else if(app._data.selected_stack_view=="float"){var hex="";for(var j=0;j<4;j++){hex=memory[memory_hash[2]][app._data.row_index].Binary[j].Bin+hex}memory[memory_hash[2]][app._data.row_index].Value=this.hex2float("0x"+hex)}else if(app._data.selected_stack_view=="char"){var hex="";for(var j=0;j<4;j++){hex=memory[memory_hash[2]][app._data.row_index].Binary[j].Bin+hex}memory[memory_hash[2]][app._data.row_index].Value=this.hex2char8(hex)}app._data.memory=memory},hide_stack_modal(){app._data.selected_stack_view=null},debounce:_.debounce((function(param,e){console_log(param);console_log(e);e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");var re=new RegExp("'","g");e=e.replace(re,'"');re=new RegExp("[\f]","g");e=e.replace(re,"\\f");re=new RegExp("[\n]","g");e=e.replace(re,"\\n");re=new RegExp("[\r]","g");e=e.replace(re,"\\r");re=new RegExp("[\t]","g");e=e.replace(re,"\\t");re=new RegExp("[\v]","g");e=e.replace(re,"\\v");if(e==""){this[param]=null;return}console_log("this."+param+"= '"+e+"'");eval("this."+param+"= '"+e+"'");app.$forceUpdate()}),getDebounceTime())}});Vue.config.errorHandler=function(err,vm,info){show_notification("An error has ocurred, the simulator is going to restart. \n Error: "+err,"danger");setTimeout((function(){location.reload(true)}),3e3)};window.onbeforeunload=confirmExit;function confirmExit(){return"He's tried to get off this page. Changes may not be saved."}function getDebounceTime(){if(screen.width>768){return 500}else{return 1e3}}function destroyClickedElement(event){document.body.removeChild(event.target)}function console_log(m){if(app._data.c_debug){console.log(m)}}function codemirrorStart(){var editor_cfg={lineNumbers:true,autoRefresh:true};var textarea_assembly_obj=document.getElementById("textarea_assembly");if(textarea_assembly_obj!=null){textarea_assembly_editor=CodeMirror.fromTextArea(textarea_assembly_obj,editor_cfg);textarea_assembly_editor.setOption("keyMap","sublime");textarea_assembly_editor.setValue(app._data.assembly_code);textarea_assembly_editor.setSize("auto","70vh");var map={"Ctrl-M":function(cm){cm.execCommand("toggleComment")}};textarea_assembly_editor.addKeyMap(map)}}function binaryStringToInt(b){return parseInt(b,2)}}catch(e){show_notification("An error has ocurred, the simulator is going to restart. \n Error: "+e,"danger");creator_ga("creator","creator.exception","creator.exception."+e);setTimeout((function(){location.reload(true)}),3e3)}
\ No newline at end of file
+function bi_intToBigInt(int_value,int_base){var auxBigInt=null;if(typeof bigInt!=="undefined"&&int_base==16)auxBigInt=bigInt(int_value,int_base).value;else if(typeof bigInt!=="undefined")auxBigInt=bigInt(parseInt(int_value)>>>0,int_base).value;else auxBigInt=BigInt(parseInt(int_value)>>>0,int_base);return auxBigInt}function register_value_deserialize(object){var auxObject=object;for(var i=0;i"}catch(e){o=o+e+" "}}}return o}function checkTypeIEEE(s,e,m){let rd=0;if(!m&&!e)rd=s?1<<3:1<<4;else if(!e)rd=s?1<<2:1<<5;else if(!(e^255))if(m)rd=s?1<<8:1<<9;else rd=s?1<<0:1<<7;else rd=s?1<<1:1<<6;return rd}function hex2char8(hexvalue){var num_char=hexvalue.toString().length/2;var exponent=0;var pos=0;var valuec=[];for(var i=0;i=3;i-=4){part=s.substr(i+1-4,4);accum=0;for(k=0;k<4;k+=1){if(part[k]!=="0"&&part[k]!=="1"){return{valid:false}}accum=accum*2+parseInt(part[k],10)}if(accum>=10){ret=String.fromCharCode(accum-10+"A".charCodeAt(0))+ret}else{ret=String(accum)+ret}}if(i>=0){accum=0;for(k=0;k<=i;k+=1){if(s[k]!=="0"&&s[k]!=="1"){return{valid:false}}accum=accum*2+parseInt(s[k],10)}ret=String(accum)+ret}return ret}function hex2double(hexvalue){var value=hexvalue.split("x");var value_bit="";for(var i=0;i{}]/g,"_");re=new RegExp("^[0-9]+$");if(value2.search(re)!=-1&&prefix!="undefined"){value2=prefix+value2}return value2}var track_stack_names=[];var track_stack_limits=[];function track_stack_create(){var ret={ok:true,msg:""};track_stack_names=[];track_stack_limits=[];track_stack_enter("main");return ret}function track_stack_enter(function_name){var ret={ok:true,msg:""};track_stack_names.push(function_name);var new_elto={function_name:function_name,begin_caller:track_stack_getTop().val.begin_callee,end_caller:track_stack_getTop().val.end_callee,begin_callee:architecture.memory_layout[4].value,end_callee:architecture.memory_layout[4].value};track_stack_limits.push(new_elto);if(typeof window!=="undefined"){app._data.callee_subrutine=track_stack_names[track_stack_names.length-1];app._data.caller_subrutine=track_stack_names[track_stack_names.length-2];app._data.begin_caller=new_elto.begin_caller;app._data.end_caller=new_elto.end_caller;app._data.begin_callee=new_elto.begin_callee;app._data.end_callee=new_elto.end_callee}return ret}function track_stack_leave(){var ret={ok:true,msg:""};if(0==track_stack_limits.length){ret.msg="track_stack_Leave: empty track_stack_limits !!.\n";return ret}track_stack_limits.pop();if(track_stack_names.length>0){track_stack_names.pop()}var elto_top=track_stack_getTop();if(typeof window!=="undefined"&&elto_top.val!=null){app._data.callee_subrutine=track_stack_names[track_stack_names.length-1];app._data.caller_subrutine=track_stack_names[track_stack_names.length-2];app._data.begin_caller=elto_top.val.begin_caller;app._data.end_caller=elto_top.val.end_caller;app._data.begin_callee=elto_top.val.begin_callee;app._data.end_callee=elto_top.val.end_callee}return ret}function track_stack_getTop(){var ret={ok:true,val:{begin_caller:architecture.memory_layout[4].value,end_caller:architecture.memory_layout[4].value,begin_callee:architecture.memory_layout[4].value,end_callee:architecture.memory_layout[4].value},msg:""};if(0==track_stack_limits.length){ret.ok=false;ret.msg="track_stack_getTop: empty track_stack_limits !!.\n";return ret}ret.val=track_stack_limits[track_stack_limits.length-1];if(typeof ret.val.begin_caller==="undefined"){ret.val.begin_caller=architecture.memory_layout[4].value}return ret}function track_stack_setTop(field,indexComponent,indexElement,value){var ret={ok:true,msg:""};if(0==track_stack_limits.length){ret.ok=false;ret.msg="track_stack_getTop: empty track_stack_limits !!.\n";return ret}var elto=track_stack_limits[track_stack_limits.length-1];if(typeof elto.length!=="undefined"){elto[field][indexComponent][indexElement]=value;return ret}elto[field]=value;return ret}function track_stack_setsp(value){if(typeof window!=="undefined"){app._data.end_callee=value}if(0==track_stack_limits.length){return}var elto=track_stack_limits[track_stack_limits.length-1];elto.end_callee=value}function track_stack_reset(){var ret={ok:true,msg:""};track_stack_names=[];track_stack_limits=[];track_stack_enter("main");if(typeof window!=="undefined"){app._data.track_stack_names=track_stack_names;app._data.callee_subrutine=track_stack_names[track_stack_names.length-1];app._data.caller_subrutine="";app._data.begin_caller=architecture.memory_layout[4].value;app._data.end_caller=architecture.memory_layout[4].value;app._data.begin_callee=architecture.memory_layout[4].value;app._data.end_callee=architecture.memory_layout[4].value}return ret}var stack_call_names=[];var stack_state_transition=[{"wm==":1,"wm!=":1,rm:2,wr:40,rr:0,end:3},{"wm==":1,"wm!=":7,rm:6,wr:5,rr:1,end:40},{"wm==":1,"wm!=":1,rm:2,wr:45,rr:2,end:3},{"wm==":-1,"wm!=":-1,rm:-1,wr:-1,rr:-1,end:-1},{"wm==":-1,"wm!=":-1,rm:-1,wr:-1,rr:-1,end:-1},{"wm==":44,"wm!=":5,rm:6,wr:5,rr:5,end:43},{"wm==":44,"wm!=":6,rm:6,wr:0,rr:6,end:43},{"wm==":7,"wm!=":7,rm:6,wr:5,rr:7,end:42}];var stack_call_register=[];function creator_callstack_create(){var ret={ok:true,msg:""};stack_call_names=[];stack_call_register=[];creator_callstack_enter("main");return ret}function creator_callstack_enter(function_name){var ret={ok:true,msg:""};stack_call_names.push(function_name);var arr_sm=[];var arr_write=[];var arr_read=[];var arr_value=[];var arr_size_write=[];var arr_size_read=[];for(var i=0;i0){stack_call_names.pop()}return ret}function creator_callstack_getTop(){var ret={ok:true,val:null,msg:""};if(0==stack_call_register.length){ret.ok=false;ret.msg="creator_callstack_getTop: empty stack_call_register !!.\n";return ret}ret.val=stack_call_register[stack_call_register.length-1];return ret}function creator_callstack_setTop(field,indexComponent,indexElement,value){var ret={ok:true,msg:""};if(0==stack_call_register.length){ret.ok=false;ret.msg="creator_callstack_getTop: empty stack_call_register !!.\n";return ret}var elto=stack_call_register[stack_call_register.length-1];if(typeof elto.length!=="undefined"){elto[field][indexComponent][indexElement]=value;return ret}elto[field]=value;return ret}function creator_callstack_setState(indexComponent,indexElement,newState){var elto=creator_callstack_getTop();if(elto.ok==false){console_log("creator_callstack_setState: "+elto.msg);return""}elto.val.register_sm[indexComponent][indexElement]=newState}function creator_callstack_getState(indexComponent,indexElement){var elto=creator_callstack_getTop();if(elto.ok==false){console_log("creator_callstack_getState: "+elto.msg);return""}return elto.val.register_sm[indexComponent][indexElement]}function creator_callstack_newWrite(indexComponent,indexElement,address,length){creator_callstack_do_transition("wm",indexComponent,indexElement,address);var elto=creator_callstack_getTop();if(elto.ok==false){console_log("creator_callstack_newWrite: "+elto.msg);return""}elto.val.register_address_write[indexComponent][indexElement].push(address);elto.val.register_size_write[indexComponent][indexElement].push(length)}function creator_callstack_newRead(indexComponent,indexElement,address,length){var elto=creator_callstack_getTop();if(elto.ok==false){console_log("creator_callstack_newRead: "+elto.msg);return""}elto.val.register_address_read[indexComponent][indexElement].push(address);elto.val.register_size_read[indexComponent][indexElement].push(length);creator_callstack_do_transition("rm",indexComponent,indexElement,address)}function creator_callstack_writeRegister(indexComponent,indexElement){creator_callstack_do_transition("wr",indexComponent,indexElement,address)}function creator_callstack_reset(){var ret={ok:true,msg:""};stack_call_names=[];stack_call_register=[];creator_callstack_enter("main");return ret}function creator_callstack_do_transition(doAction,indexComponent,indexElement,address){var state=creator_callstack_getState(indexComponent,indexElement);var action=doAction;if(doAction=="wm"){var elto=creator_callstack_getTop();if(elto.ok==false){console_log("creator_callstack_do_transition: "+elto.msg);return""}var equal=elto.val.register_address_write[indexComponent][indexElement].includes(address);action=equal?"wm==":"wm!="}if(typeof stack_state_transition[state]==="undefined"||typeof stack_state_transition[state][action]==="undefined"){if(state<40||state<0){console_log("creator_callstack_do_transition: undefined action")}return}var new_state=stack_state_transition[state][action];creator_callstack_setState(indexComponent,indexElement,new_state);if(action!="end"){console_log("creator_callstack_do_transition ["+architecture.components[indexComponent].elements[indexElement].name+"]: transition from "+"state '"+state+"'' to state '"+new_state+"' and action '"+action+"' is empty (warning).")}}function capi_raise(msg){if(typeof app!=="undefined")app.exception(msg);else console.log(msg)}function capi_arithmetic_overflow(op1,op2,res_u){op1_u=capi_uint2int(op1);op2_u=capi_uint2int(op2);res_u=capi_uint2int(res_u);return op1_u>0&&op2_u>0&&res_u<0||op1_u<0&&op2_u<0&&res_u>0}function capi_bad_align(addr,type){size=creator_memory_type2size(type);return addr%size!=0}function capi_mem_write(addr,value,type){var size=1;if(capi_bad_align(addr,type)){capi_raise("The memory must be align");return}try{writeMemory(value,addr,type)}catch(e){capi_raise("Invalid memory access to address '0x"+addr.toString(16)+"'")}}function capi_mem_read(addr,type){var size=1;var val=0;if(capi_bad_align(addr,type)){capi_raise("The memory must be align");return val}var addr_16=parseInt(addr,16);if(addr_16>=architecture.memory_layout[0].value&&addr_16<=architecture.memory_layout[1].value){creator_executor_exit();capi_raise("Segmentation fault. You tried to read in the text segment")}try{val=readMemory(addr,type)}catch(e){capi_raise("Invalid memory access to address '0x"+addr.toString(16)+"'");creator_executor_exit();return val}return creator_memory_value_by_type(val,type)}function capi_exit(){creator_ga("execute","execute.syscall","execute.syscall.exit");return creator_executor_exit()}function capi_print_int(value1){creator_ga("execute","execute.syscall","execute.syscall.print_int");var ret1=crex_findReg(value1);if(ret1.match==0){throw packExecute(true,"capi_syscall: register "+value1+" not found","danger",null)}var value=architecture.components[ret1.indexComp].elements[ret1.indexElem].value;var val_int=parseInt(value.toString())>>0;display_print(val_int)}function capi_print_float(value1){creator_ga("execute","execute.syscall","execute.syscall.print_float");var ret1=crex_findReg(value1);if(ret1.match==0){throw packExecute(true,"capi_syscall: register "+value1+" not found","danger",null)}var value=architecture.components[ret1.indexComp].elements[ret1.indexElem].value;display_print(value)}function capi_print_double(value1){creator_ga("execute","execute.syscall","execute.syscall.print_double");var ret1=crex_findReg(value1);if(ret1.match==0){throw packExecute(true,"capi_syscall: register "+value1+" not found","danger",null)}var value=architecture.components[ret1.indexComp].elements[ret1.indexElem].value;display_print(value)}function capi_print_char(value1){creator_ga("execute","execute.syscall","execute.syscall.print_char");var ret1=crex_findReg(value1);if(ret1.match==0){throw packExecute(true,"capi_syscall: register "+value1+" not found","danger",null)}var aux=architecture.components[ret1.indexComp].elements[ret1.indexElem].value;var aux2=aux.toString(16);var length=aux2.length;var value=aux2.substring(length-2,length);value=String.fromCharCode(parseInt(value,16));display_print(value)}function capi_print_string(value1){creator_ga("execute","execute.syscall","execute.syscall.print_string");var ret1=crex_findReg(value1);if(ret1.match==0){throw packExecute(true,"capi_syscall: register "+value1+" not found","danger",null)}var addr=architecture.components[ret1.indexComp].elements[ret1.indexElem].value;var ret=crex_get_string_from_memory(addr);if(ret.error==true){throw packExecute(true,ret.msg,ret.type,ret.draw)}display_print(ret.draw)}function capi_read_int(value1){creator_ga("execute","execute.syscall","execute.syscall.read_int");var ret1=crex_findReg(value1);if(ret1.match==0){throw packExecute(true,"capi_syscall: register "+value1+" not found","danger",null)}document.getElementById("enter_keyboard").scrollIntoView();return keyboard_read(kbd_read_int,ret1)}function capi_read_float(value1){creator_ga("execute","execute.syscall","execute.syscall.read_float");var ret1=crex_findReg(value1);if(ret1.match==0){throw packExecute(true,"capi_syscall: register "+value1+" not found","danger",null)}document.getElementById("enter_keyboard").scrollIntoView();return keyboard_read(kbd_read_float,ret1)}function capi_read_double(value1){creator_ga("execute","execute.syscall","execute.syscall.read_double");var ret1=crex_findReg(value1);if(ret1.match==0){throw packExecute(true,"capi_syscall: register "+value1+" not found","danger",null)}document.getElementById("enter_keyboard").scrollIntoView();return keyboard_read(kbd_read_double,ret1)}function capi_read_char(value1){creator_ga("execute","execute.syscall","execute.syscall.read_char");var ret1=crex_findReg(value1);if(ret1.match==0){throw packExecute(true,"capi_syscall: register "+value1+" not found","danger",null)}document.getElementById("enter_keyboard").scrollIntoView();return keyboard_read(kbd_read_char,ret1)}function capi_read_string(value1,value2){creator_ga("execute","execute.syscall","execute.syscall.read_string");var ret1=crex_findReg(value1);if(ret1.match==0){throw packExecute(true,"capi_syscall: register "+value1+" not found","danger",null)}var ret2=crex_findReg(value2);if(ret2.match==0){throw packExecute(true,"capi_syscall: register "+value2+" not found","danger",null)}document.getElementById("enter_keyboard").scrollIntoView();ret1.indexComp2=ret2.indexComp;ret1.indexElem2=ret2.indexElem;return keyboard_read(kbd_read_string,ret1)}function capi_sbrk(value1,value2){creator_ga("execute","execute.syscall","execute.syscall.sbrk");var ret1=crex_findReg(value1);if(ret1.match==0){throw packExecute(true,"capi_syscall: register "+value1+" not found","danger",null)}var ret2=crex_findReg(value2);if(ret2.match==0){throw packExecute(true,"capi_syscall: register "+value2+" not found","danger",null)}var new_size=parseInt(architecture.components[ret1.indexComp].elements[ret1.indexElem].value);var ret=crex_sbrk(new_size);if(ret.error==true){throw packExecute(true,ret.msg,ret.type,ret.draw)}architecture.components[ret2.indexComp].elements[ret2.indexElem].value=ret.draw}function capi_callconv_begin(addr){var function_name="";if(typeof architecture.components[0]!=="undefined"){if(typeof tag_instructions[addr]=="undefined")function_name="0x"+parseInt(addr).toString(16);else function_name=tag_instructions[addr]}creator_callstack_enter(function_name)}function capi_callconv_end(){var ret=creator_callstack_leave();if(ret.ok){return}creator_ga("execute","execute.exception","execute.exception.protection_jrra"+ret.msg);crex_show_notification(ret.msg,"danger")}function capi_callconv_memAction(action,addr,reg_name,type){var ret=crex_findReg(reg_name);if(ret.match==0){return}var i=ret.indexComp;var j=ret.indexElem;switch(action){case"write":creator_callstack_newWrite(i,j,addr,type);break;case"read":creator_callstack_newRead(i,j,addr,type);break;default:crex_show_notification(" Unknown action '"+action+"' at ...sing_convention_memory.\n","danger");break}}function capi_drawstack_begin(addr){var function_name="";if(typeof architecture.components[0]!=="undefined"){if(typeof tag_instructions[addr]=="undefined")function_name="0x"+parseInt(addr).toString(16);else function_name=tag_instructions[addr]}track_stack_enter(function_name)}function capi_drawstack_end(){var ret=track_stack_leave();if(ret.ok){return}crex_show_notification(ret.msg,"warning")}function capi_split_double(reg,index){var value=bin2hex(double2bin(reg));console_log(value);if(index==0){return value.substring(0,8)}if(index==1){return value.substring(8,16)}}function capi_uint2float32(value){return uint_to_float32(value)}function capi_float322uint(value){return float32_to_uint(value)}function capi_int2uint(value){return value>>>0}function capi_uint2int(value){return value>>0}function capi_uint2float64(value0,value1){return uint_to_float64(value0,value1)}function capi_float642uint(value){return float64_to_uint(value)}function capi_check_ieee(s,e,m){return checkTypeIEEE(s,e,m)}function capi_float2bin(f){return float2bin(f)}function capi_eval(expr){eval(crex_replace_magic(expr))}function crex_findReg(value1){var ret={};ret.match=0;ret.indexComp=null;ret.indexElem=null;if(value1==""){return ret}for(var i=0;i>24;break;case"h":val=val&65535;if(val&32768)val=4294901760|val;break;case"hu":val=val<<16>>16;break;default:break}return val}function creator_memory_alignelto(new_addr,new_size){var ret={new_addr:new_addr,new_size:new_size};for(var i=0;i3){creator_memory_updaterow(addrs[i]);last_addr=curr_addr}}}function creator_memory_clearall(){if(typeof app=="undefined"||typeof app._data.main_memory=="undefined"){return}app._data.main_memory={}}var memory_hash=["data_memory","instructions_memory","stack_memory"];var memory={data_memory:[],instructions_memory:[],stack_memory:[]};function writeMemory(value,addr,type){if(false==OLD_CODE_ACTIVE){main_memory_write_bydatatype(addr,value,type,value);creator_memory_updaterow(addr)}else{main_memory_write_bydatatype(addr,value,type,value);creator_memory_updaterow(addr);var draw={space:[],info:[],success:[],danger:[],flash:[]};if(value==null){return}var memValue=value.toString(16).padStart(8,"0");var index;if(type=="w"){if(addr>architecture.memory_layout[0].value&&addrarchitecture.memory_layout[2].value&&addrarchitecture.memory_layout[4].value&&addr>0}var charIndex=memValue.length-1;for(var z=0;z>0}if(typeof app!=="undefined")app._data.memory[index]=memory[index];return}}}for(var i=0;iaddr){var aux_addr=addr-addr%4;memory[index].splice(i,0,{Address:aux_addr,Binary:[],Value:parseInt(memValue,16)>>0,DefValue:null,reset:false});var charIndex=memValue.length-1;for(var z=0;z<4;z++){memory[index][i].Binary.push({Addr:aux_addr+z,DefBin:"00",Bin:memValue.charAt(charIndex-1).toUpperCase()+memValue.charAt(charIndex).toUpperCase(),Tag:null});charIndex=charIndex-2}if(typeof app!=="undefined")app._data.memory[index]=memory[index];return}else if(i==memory[index].length-1){var aux_addr=addr-addr%4;memory[index].push({Address:aux_addr,Binary:[],Value:parseInt(memValue,16)>>0,DefValue:null,reset:false});var charIndex=memValue.length-1;for(var z=0;z<4;z++){memory[index][i+1].Binary.push({Addr:aux_addr+z,DefBin:"00",Bin:memValue.charAt(charIndex-1).toUpperCase()+memValue.charAt(charIndex).toUpperCase(),Tag:null});charIndex=charIndex-2}if(typeof app!=="undefined")app._data.memory[index]=memory[index];return}}if(memory[index].length==0){var aux_addr=addr-addr%4;memory[index].push({Address:aux_addr,Binary:[],Value:parseInt(memValue,16)>>0,DefValue:null,reset:false});var charIndex=memValue.length-1;for(var z=0;z<4;z++){memory[index][memory[index].length-1].Binary.push({Addr:aux_addr+z,DefBin:"00",Bin:memValue.charAt(charIndex-1).toUpperCase()+memValue.charAt(charIndex).toUpperCase(),Tag:null});charIndex=charIndex-2}if(typeof app!=="undefined")app._data.memory[index]=memory[index];return}}if(type=="h"){if(addr>architecture.memory_layout[0].value&&addrarchitecture.memory_layout[2].value&&addrarchitecture.memory_layout[4].value&&addr=0;z=z-2){memory[index][i].Value=memory[index][i].Value+(parseInt(memory[index][i].Binary[z].Bin+memory[index][i].Binary[z-1].Bin,16)>>0)+" "}if(typeof app!=="undefined")app._data.memory[index]=memory[index];return}else{var charIndex=memValue.length-1;for(var z=2;zaddr){var aux_addr=addr-addr%4;memory[index].splice(i,0,{Address:aux_addr,Binary:[],Value:null,DefValue:null,reset:false});var charIndex=memValue.length-1;for(var z=0;z<4;z++){memory[index][i].Binary.push({Addr:aux_addr+z,DefBin:"00",Bin:"00",Tag:null})}for(var j=0;j>0);if(typeof app!=="undefined")app._data.memory[index]=memory[index];return}else{var charIndex=memValue.length-1;for(var z=2;z>0)+" 0";if(typeof app!=="undefined")app._data.memory[index]=memory[index];return}}}return}else if(i==memory[index].length-1){var aux_addr=addr-addr%4;memory[index].push({Address:aux_addr,Binary:[],Value:null,DefValue:null,reset:false});var charIndex=memValue.length-1;for(var z=0;z<4;z++){memory[index][i+1].Binary.push({Addr:aux_addr+z,DefBin:"00",Bin:"00",Tag:null})}for(var j=0;j>0);if(typeof app!=="undefined")app._data.memory[index]=memory[index];return}else{var charIndex=memValue.length-1;for(var z=2;z>0);if(typeof app!=="undefined")app._data.memory[index]=memory[index];return}else{var charIndex=memValue.length-1;for(var z=2;z>0)+" 0";if(typeof app!=="undefined")app._data.memory[index]=memory[index];return}}}return}}if(type=="b"){if(addr>architecture.memory_layout[0].value&&addrarchitecture.memory_layout[2].value&&addrarchitecture.memory_layout[4].value&&addr=0;z--){memory[index][i].Value=memory[index][i].Value+parseInt(memory[index][i].Binary[z].Bin,16)+" "}return}}}for(var i=0;iaddr){var aux_addr=addr-addr%4;memory[index].splice(i,0,{Address:aux_addr,Binary:[],Value:null,DefValue:null,reset:false});var charIndex=memValue.length-1;for(var z=0;z<4;z++){memory[index][i].Binary.push({Addr:aux_addr+z,DefBin:"00",Bin:"00",Tag:null})}for(var j=0;jarchitecture.memory_layout[0].value&&parseInt(addr)architecture.memory_layout[2].value&&parseInt(addr)architecture.memory_layout[4].value&&parseInt(addr)architecture.memory_layout[0].value&&parseInt(addr)architecture.memory_layout[2].value&&parseInt(addr)architecture.memory_layout[4].value&&parseInt(addr)architecture.memory_layout[0].value&&parseInt(addr)architecture.memory_layout[2].value&&parseInt(addr)architecture.memory_layout[4].value&&parseInt(addr)architecture.memory_layout[0].value&&parseInt(addr)architecture.memory_layout[2].value&&parseInt(addr)architecture.memory_layout[4].value&&parseInt(addr)=architecture.memory_layout[4].value){executionIndex=-1;return packExecute(true,"Not enough memory for data segment","danger",null)}for(var i=0;iarchitecture.memory_layout[0].value&&parseInt(addr)architecture.memory_layout[2].value&&parseInt(addr)architecture.memory_layout[4].value&&parseInt(addr)architecture.memory_layout[0].value&&parseInt(addr)architecture.memory_layout[2].value&&parseInt(addr)architecture.memory_layout[4].value&&parseInt(addr)0;i++){for(var j=0;j=instructions.length){for(var i=0;ivalue.length-1){memory[index][i].Binary.push({Addr:auxAddr,DefBin:"00",Bin:"00",Tag:null})}else{memory[index][i].Binary.push({Addr:auxAddr,DefBin:"00",Bin:value.charCodeAt(valueIndex).toString(16),Tag:null});memory[index][i].Value=value.charAt(valueIndex)+" "+memory[index][i].Value}auxAddr++;valueIndex++}i++}return ret}}function crex_memory_clear(){if(false==OLD_CODE_ACTIVE){main_memory_clear();creator_memory_clearall()}else{main_memory_clear();creator_memory_clearall();memory[memory_hash[0]]=[];memory[memory_hash[1]]=[];memory[memory_hash[2]]=[]}}function crex_memory_data_compiler(value,size,dataLabel,DefValue,type){var ret={msg:"",addr:0};if(false==OLD_CODE_ACTIVE){ret.addr=main_memory_storedata(data_address,value,size,dataLabel,DefValue,DefValue,type);ret.msg="";return ret}else{main_memory_storedata(data_address,value,size,dataLabel,DefValue,DefValue,type);for(var i=0;i=assembly.length){return null}while(":\t\n \r#".includes(assembly.charAt(index))&&index=assembly.length){return null}if(assembly.charAt(index)=="'"){index++;while(assembly.charAt(index)!="'"&&index2*architecture.directives[j].size){return packCompileError("m18",token,"error","danger")}auxTokenString=auxTokenString.substring(auxTokenString.length-2*architecture.directives[j].size,auxTokenString.length)}else{var re=new RegExp("[0-9-]{"+token.length+"}","g");if(token.search(re)==-1){return packCompileError("m15",token,"error","danger")}auxToken=parseInt(token)>>>0;auxTokenString=auxToken.toString(16).substring(auxToken.toString(16).length-2*architecture.directives[j].size,auxToken.toString(16).length).padStart(2*architecture.directives[j].size,"0");if(auxTokenString.length>2*architecture.directives[j].size){return packCompileError("m18",token,"error","danger")}auxTokenString=auxTokenString.substring(auxTokenString.length-2*architecture.directives[j].size,auxTokenString.length)}console_log(auxTokenString);ret=data_compiler(auxTokenString,architecture.directives[j].size,label,parseInt(auxTokenString,16)>>0,"byte");if(ret.status!="ok"){return ret}data_address=ret.addr;label=null;console_log("byte Terminado");next_token();token=get_token();console_log("token: "+token);for(var z=0;z2*architecture.directives[j].size){return packCompileError("m18",token,"error","danger")}auxTokenString=auxTokenString.substring(auxTokenString.length-2*architecture.directives[j].size,auxTokenString.length)}else{var re=new RegExp("[0-9-]{"+token.length+"}","g");if(token.search(re)==-1){return packCompileError("m15",token,"error","danger")}auxToken=parseInt(token)>>>0;auxTokenString=auxToken.toString(16).substring(auxToken.toString(16).length-2*architecture.directives[j].size,auxToken.toString(16).length).padStart(2*architecture.directives[j].size,"0");if(auxTokenString.length>2*architecture.directives[j].size){return packCompileError("m18",token,"error","danger")}auxTokenString=auxTokenString.substring(auxTokenString.length-2*architecture.directives[j].size,auxTokenString.length)}console_log(auxTokenString);ret=data_compiler(auxTokenString,architecture.directives[j].size,label,parseInt(auxTokenString,16)>>0,"half");if(ret.status!="ok"){return ret}data_address=ret.addr;label=null;console_log("half Terminado");next_token();token=get_token();console_log("token: "+token);for(var z=0;z2*architecture.directives[j].size){return packCompileError("m18",token,"error","danger")}auxTokenString=auxTokenString.substring(auxTokenString.length-2*architecture.directives[j].size,auxTokenString.length)}else{var re=new RegExp("[0-9-]{"+token.length+"}","g");if(token.search(re)==-1){return packCompileError("m15",token,"error","danger")}auxToken=parseInt(token)>>>0;auxTokenString=auxToken.toString(16).substring(auxToken.toString(16).length-2*architecture.directives[j].size,auxToken.toString(16).length).padStart(2*architecture.directives[j].size,"0");if(auxTokenString.length>2*architecture.directives[j].size){return packCompileError("m18",token,"error","danger")}auxTokenString=auxTokenString.substring(auxTokenString.length-2*architecture.directives[j].size,auxTokenString.length)}console_log(auxTokenString);ret=data_compiler(auxTokenString,architecture.directives[j].size,label,parseInt(auxTokenString,16)>>0,"word");if(ret.status!="ok"){return ret}data_address=ret.addr;label=null;console_log("word Terminado");next_token();token=get_token();console_log("token: "+token);for(var z=0;z2*architecture.directives[j].size){return packCompileError("m18",token,"error","danger")}auxTokenString=auxTokenString.substring(auxTokenString.length-2*architecture.directives[j].size,auxTokenString.length)}else{var re=new RegExp("[0-9-]{"+token.length+"}","g");if(token.search(re)==-1){return packCompileError("m15",token,"error","danger")}auxToken=parseInt(token)>>>0;auxTokenString=auxToken.toString(16).substring(auxToken.toString(16).length-2*architecture.directives[j].size,auxToken.toString(16).length).padStart(2*architecture.directives[j].size,"0");if(auxTokenString.length>2*architecture.directives[j].size){return packCompileError("m18",token,"error","danger")}auxTokenString=auxTokenString.substring(auxTokenString.length-2*architecture.directives[j].size,auxTokenString.length)}ret=data_compiler(auxTokenString,architecture.directives[j].size,label,parseInt(auxTokenString,16)>>0,"double_word");if(ret.status!="ok"){return ret}data_address=ret.addr;label=null;console_log("double word Terminado");next_token();token=get_token();console_log("token: "+token);for(var z=0;z2*architecture.directives[j].size){return packCompileError("m18",token,"error","danger")}auxTokenString=auxTokenString.substring(auxTokenString.length-2*architecture.directives[j].size,auxTokenString.length);token=hex2float(token)}else{var re=new RegExp("[+e0-9.-]{"+token.length+"}","g");if(token.search(re)==-1){return packCompileError("m15",token,"error","danger")}auxToken=parseFloat(token,10);auxTokenString=bin2hex(float2bin(auxToken)).padStart(2*architecture.directives[j].size,"0");if(auxTokenString.length>2*architecture.directives[j].size){return packCompileError("m18",token,"error","danger")}auxTokenString=auxTokenString.substring(auxTokenString.length-2*architecture.directives[j].size,auxTokenString.length)}console_log(auxTokenString);ret=data_compiler(auxTokenString,architecture.directives[j].size,label,token,"float");if(ret.status!="ok"){return ret}data_address=ret.addr;label=null;console_log("float Terminado");next_token();token=get_token();console_log("token: "+token);for(var z=0;z2*architecture.directives[j].size){return packCompileError("m18",token,"error","danger")}auxTokenString=auxTokenString.substring(auxTokenString.length-2*architecture.directives[j].size,auxTokenString.length);token=hex2double(token)}else{var re=new RegExp("[+e0-9.-]{"+token.length+"}","g");if(token.search(re)==-1){return packCompileError("m15",token,"error","danger")}auxToken=parseFloat(token,10);console_log(auxTokenString);auxTokenString=bin2hex(double2bin(auxToken)).padStart(2*architecture.directives[j].size,"0");if(auxTokenString.length>2*architecture.directives[j].size){return packCompileError("m18",token,"error","danger")}auxTokenString=auxTokenString.substring(auxTokenString.length-2*architecture.directives[j].size,auxTokenString.length)}console_log(auxTokenString);ret=data_compiler(auxTokenString,architecture.directives[j].size,label,token,"double");if(ret.status!="ok"){return ret}data_address=ret.addr;label=null;console_log("double Terminado");next_token();token=get_token();console_log("token: "+token);for(var z=0;z50*1024*1024){return packCompileError("m10",token,"error","danger")}var size=parseInt(token)*architecture.directives[j].size;data_address=creator_memory_storestring(size,size,data_address,label,"space",align);next_token();token=get_token();console_log("token: "+token);console_log("space Terminado");break;case"align":case"balign":console_log("[b]align");let pow_mode=token==".align";next_token();token=get_token();console_log("token: "+token);if(token==null){return packCompileError("m23","","error","danger")}var re=new RegExp("[0-9-]{"+token.length+"}","g");if(token.search(re)==-1){return packCompileError("m15",token,"error","danger")}if(parseInt(token)<0){return packCompileError("m22",token,"error","danger")}align=pow_mode?Math.pow(2,parseInt(token)):token;console_log(align);next_token();token=get_token();console_log("token: "+token);console_log("align Terminado");break;default:console_log("Default");existsData=false;break}}else if(j==architecture.directives.length-1&&token!=architecture.directives[j].name&&token!=null&&token.search(/\:$/)==-1){creator_memory_prereset();creator_memory_copytoapp(0);return ret}}}creator_memory_prereset();creator_memory_copytoapp(0);return ret}function data_compiler(value,size,dataLabel,DefValue,type){var ret={errorcode:"",token:"",type:"",update:"",status:"ok"};var r=crex_memory_data_compiler(value,size,dataLabel,DefValue,type);if(r.msg!=""){return packCompileError(r,"","error","danger")}ret.addr=r.addr;return ret}function code_segment_compiler(){var ret={errorcode:"",token:"",type:"",update:"",status:"ok"};var existsInstruction=true;next_token();var instInit=tokenIndex;while(existsInstruction){token=get_token();for(var i=0;ifieldsLength){return packCompileError("m12",token,"error","danger")}console_log(reg);console_log(reg.toString(2).padStart(fieldsLength,"0"));console_log(binary);console_log(binary.length);console_log(architecture.instructions[i].fields[a].startbit+1);console_log(binary.length-(architecture.instructions[i].fields[a].startbit+1));binary=binary.substring(0,binary.length-(architecture.instructions[i].fields[a].startbit+1))+reg.toString(2).padStart(fieldsLength,"0")+binary.substring(binary.length-architecture.instructions[i].fields[a].stopbit,binary.length);console_log(binary);re=RegExp("Field[0-9]+");instruction=instruction.replace(re,token)}else if(z==architecture_hash.length-1&&w==architecture.components[z].elements.length-1&&validReg==false){return packCompileError("m4",token,"error","danger")}regNum++}}}}break;case"SFP-Reg":token=instructionParts[j];console_log("token: "+token);var validReg=false;var regNum=0;for(var a=0;afieldsLength){return packCompileError("m12",token,"error","danger")}binary=binary.substring(0,binary.length-(architecture.instructions[i].fields[a].startbit+1))+reg.toString(2).padStart(fieldsLength,"0")+binary.substring(binary.length-architecture.instructions[i].fields[a].stopbit,binary.length);re=RegExp("Field[0-9]+");console_log(instruction);instruction=instruction.replace(re,token);console_log(instruction)}else if(z==architecture_hash.length-1&&w==architecture.components[z].elements.length-1&&validReg==false){return packCompileError("m4",token,"error","danger")}if(architecture.components[z].type=="floating point"&&architecture.components[z].double_precision==false){regNum++}}}}}break;case"DFP-Reg":token=instructionParts[j];console_log("token: "+token);var validReg=false;var regNum=0;for(var a=0;afieldsLength){return packCompileError("m12",token,"error","danger")}binary=binary.substring(0,binary.length-(architecture.instructions[i].fields[a].startbit+1))+reg.toString(2).padStart(fieldsLength,"0")+binary.substring(binary.length-architecture.instructions[i].fields[a].stopbit,binary.length);re=RegExp("Field[0-9]+");instruction=instruction.replace(re,token)}else if(z==architecture_hash.length-1&&w==architecture.components[z].elements.length-1&&validReg==false){return packCompileError("m4",token,"error","danger")}if(architecture.components[z].type=="floating point"&&architecture.components[z].double_precision==true){regNum++}}}}}break;case"Ctrl-Reg":token=instructionParts[j];console_log("token: "+token);var validReg=false;var regNum=0;for(var a=0;afieldsLength){return packCompileError("m12",token,"error","danger")}binary=binary.substring(0,binary.length-(architecture.instructions[i].fields[a].startbit+1))+reg.toString(2).padStart(fieldsLength,"0")+binary.substring(binary.length-architecture.instructions[i].fields[a].stopbit,binary.length);re=RegExp("Field[0-9]+");instruction=instruction.replace(re,token)}else if(z==architecture_hash.length-1&&w==architecture.components[z].elements.length-1&&validReg==false){return packCompileError("m4",token,"error","danger")}if(architecture.components[z].type=="control"){regNum++}}}}}break;case"inm-signed":token=instructionParts[j];var token_user="";console_log("token: "+token);for(var a=0;afieldsLength){resultPseudo=pseudoinstruction_compiler(oriInstruction,label,line);console_log(resultPseudo);if(resultPseudo.status!="ok"){return resultPseudo}}if(isNaN(parseInt(token,16))==true){return packCompileError("m6",token,"error","danger")}inm=parseInt(token,16).toString(2)}else if(token.match(/^(\d)+\.(\d)+/)){if(float2bin(parseFloat(token)).length>fieldsLength){resultPseudo=pseudoinstruction_compiler(oriInstruction,label,line);console_log(resultPseudo);if(resultPseudo.status!="ok"){return resultPseudo}}if(isNaN(parseFloat(token))==true){return packCompileError("m6",token,"error","danger")}inm=float2bin(parseFloat(token,16))}else if(token.match(/^\'(.*?)\'$/)){var re=/^\'(.*?)\'$/;console_log(re);var match=re.exec(token);console_log(match);var asciiCode=match[1].charCodeAt(0);console_log(asciiCode);re=RegExp("Field[0-9]+");instruction=instruction.replace(re,asciiCode);inm=(asciiCode>>>0).toString(2)}else if(isNaN(parseInt(token))){validTagPC=false;startBit=architecture.instructions[i].fields[a].startbit;stopBit=architecture.instructions[i].fields[a].stopbit}else{var comNumPos=Math.pow(2,fieldsLength-1);var comNumNeg=comNumPos*-1;comNumPos=comNumPos-1;console_log(comNumPos);console_log(comNumNeg);if(parseInt(token,10)>comNumPos||parseInt(token,10)>>0).toString(2);inm=inm.substring(inm.length-fieldsLength,inm.length)}if(validTagPC==true){console_log(inm.length);if(inm.length>architecture.instructions[i].fields[a].startbit-architecture.instructions[i].fields[a].stopbit+1){return packCompileError("m12",token,"error","danger")}binary=generateBinary(architecture.instructions[i].separated,architecture.instructions[i].fields[a].startbit,architecture.instructions[i].fields[a].stopbit,binary,inm,fieldsLength,a)}re=RegExp("Field[0-9]+");instruction=instruction.replace(re,token)}}break;case"inm-unsigned":token=instructionParts[j];var token_user="";console_log("token: "+token);for(var a=0;ab-architecture.instructions[i].fields[a].stopbit[iii]+1)).reduce(((old,newV)=>old+newV))}fieldsLength=getFieldLength(architecture.instructions[i].separated,architecture.instructions[i].fields[a].startbit,architecture.instructions[i].fields[a].stopbit,a);var inm;if(token.match(/^0x/)){var value=token.split("x");if(value[1].length*4>fieldsLength){resultPseudo=pseudoinstruction_compiler(oriInstruction,label,line);console_log(resultPseudo);if(resultPseudo.status!="ok"){return resultPseudo}}if(isNaN(parseInt(token,16))==true){return packCompileError("m6",token,"error","danger")}inm=parseInt(token,16).toString(2)}else if(token.match(/^(\d)+\.(\d)+/)){if(float2bin(parseFloat(token)).length>fieldsLength){resultPseudo=pseudoinstruction_compiler(oriInstruction,label,line);console_log(resultPseudo);if(resultPseudo.status!="ok"){return resultPseudo}}if(isNaN(parseFloat(token))==true){return packCompileError("m6",token,"error","danger")}inm=float2bin(parseFloat(token,16))}else if(token.match(/^\'(.*?)\'$/)){var re=/^\'(.*?)\'$/;console_log(re);var match=re.exec(token);console_log(match);var asciiCode=match[1].charCodeAt(0);console_log(asciiCode);re=RegExp("Field[0-9]+");instruction=instruction.replace(re,asciiCode);inm=(asciiCode>>>0).toString(2)}else if(isNaN(parseInt(token))){validTagPC=false;startBit=architecture.instructions[i].fields[a].startbit;stopBit=architecture.instructions[i].fields[a].stopbit}else{var comNumPos=Math.pow(2,fieldsLength);console_log(comNumPos);if(parseInt(token,10)>comNumPos){console_log(oriInstruction);console_log(label);console_log(line);resultPseudo=pseudoinstruction_compiler(oriInstruction,label,line);console_log(resultPseudo);if(resultPseudo.status!="ok"){return resultPseudo}}if(isNaN(parseInt(token))==true&&resultPseudo==-3){return packCompileError("m6",token,"error","danger")}inm=(parseInt(token,10)>>>0).toString(2);inm=inm.substring(inm.length-fieldsLength,inm.length)}if(validTagPC==true){console_log(inm.length);if(inm.length>architecture.instructions[i].fields[a].startbit-architecture.instructions[i].fields[a].stopbit+1){return packCompileError("m12",token,"error","danger")}binary=generateBinary(architecture.instructions[i].separated,architecture.instructions[i].fields[a].startbit,architecture.instructions[i].fields[a].stopbit,binary,inm,fieldsLength,a)}re=RegExp("Field[0-9]+");instruction=instruction.replace(re,token)}}break;case"address":token=instructionParts[j];console_log("token: "+token);for(var a=0;afieldsLength){return packCompileError("m8",token,"error","danger")}if(isNaN(parseInt(token,16))==true){return packCompileError("m9",token,"error","danger")}addr=parseInt(token,16).toString(2);binary=generateBinary(architecture.instructions[i].separated,architecture.instructions[i].fields[a].startbit,architecture.instructions[i].fields[a].stopbit,binary,inm,fieldsLength,a);re=RegExp("Field[0-9]+");instruction=instruction.replace(re,token)}else{var validTag=false;startBit=architecture.instructions[i].fields[a].startbit;stopBit=architecture.instructions[i].fields[a].stopbit}}}break;case"offset_bytes":token=instructionParts[j];var token_user="";console_log("token: "+token);for(var a=0;afieldsLength){resultPseudo=pseudoinstruction_compiler(oriInstruction,label,line);console_log(resultPseudo);if(resultPseudo.status!="ok"){return resultPseudo}}if(isNaN(parseInt(token,16))==true){return packCompileError("m6",token,"error","danger")}inm=parseInt(token,16).toString(2)}else if(token.match(/^(\d)+\.(\d)+/)){if(float2bin(parseFloat(token)).length>fieldsLength){resultPseudo=pseudoinstruction_compiler(oriInstruction,label,line);console_log(resultPseudo);if(resultPseudo.status!="ok"){return resultPseudo}}if(isNaN(parseFloat(token))==true){return packCompileError("m6",token,"error","danger")}inm=float2bin(parseFloat(token,16))}else if(isNaN(parseInt(token))){validTagPC=false;startBit=architecture.instructions[i].fields[a].startbit;stopBit=architecture.instructions[i].fields[a].stopbit}else{var comNumPos=Math.pow(2,fieldsLength-1);var comNumNeg=comNumPos*-1;comNumPos=comNumPos-1;console_log(comNumPos);console_log(comNumNeg);if(parseInt(token,10)>comNumPos||parseInt(token,10)>>0).toString(2);inm=inm.substring(inm.length-fieldsLength,inm.length)}if(validTagPC==true){if(inm.length>architecture.instructions[i].fields[a].startbit-architecture.instructions[i].fields[a].stopbit+1){return packCompileError("m12",token,"error","danger")}binary=generateBinary(architecture.instructions[i].separated,architecture.instructions[i].fields[a].startbit,architecture.instructions[i].fields[a].stopbit,binary,inm,fieldsLength,a)}re=RegExp("Field[0-9]+");console_log(instruction);instruction=instruction.replace(re,token);console_log(instruction)}}break;case"offset_words":token=instructionParts[j];var token_user="";console_log("token: "+token);for(var a=0;afieldsLength){resultPseudo=pseudoinstruction_compiler(oriInstruction,label,line);console_log(resultPseudo);if(resultPseudo.status!="ok"){return resultPseudo}}if(isNaN(parseInt(token,16))==true){return packCompileError("m6",token,"error","danger")}inm=parseInt(token,16).toString(2)}else if(token.match(/^(\d)+\.(\d)+/)){if(float2bin(parseFloat(token)).length>fieldsLength){resultPseudo=pseudoinstruction_compiler(oriInstruction,label,line);console_log(resultPseudo);if(resultPseudo.status!="ok"){return resultPseudo}}if(isNaN(parseFloat(token))==true){return packCompileError("m6",token,"error","danger")}inm=float2bin(parseFloat(token,16))}else if(isNaN(parseInt(token))){validTagPC=false;startBit=architecture.instructions[i].fields[a].startbit;stopBit=architecture.instructions[i].fields[a].stopbit}else{var comNumPos=Math.pow(2,fieldsLength-1);var comNumNeg=comNumPos*-1;comNumPos=comNumPos-1;console_log(comNumPos);console_log(comNumNeg);if(parseInt(token,10)>comNumPos||parseInt(token,10)>>0).toString(2);inm=inm.substring(inm.length-fieldsLength,inm.length)}if(validTagPC==true){if(inm.length>architecture.instructions[i].fields[a].startbit-architecture.instructions[i].fields[a].stopbit+1){return packCompileError("m12",token,"error","danger")}binary=generateBinary(architecture.instructions[i].separated,architecture.instructions[i].fields[a].startbit,architecture.instructions[i].fields[a].stopbit,binary,inm,fieldsLength,a)}re=RegExp("Field[0-9]+");console_log(instruction);instruction=instruction.replace(re,token);console_log(instruction)}}break;default:token=instructionParts[j];console_log("token: "+token);for(var a=0;a{t=!ind?0:t;t+(cv-architecture.instructions[i].fields[a].stopbit[ind]+1)}));console_log(architecture.instructions[i].co.join("").padStart(fieldsLength,"0"))}else{fieldsLength=architecture.instructions[i].fields[a].startbit-architecture.instructions[i].fields[a].stopbit+1;console_log(architecture.instructions[i].co.padStart(fieldsLength,"0"));binary=binary.substring(0,binary.length-(architecture.instructions[i].fields[a].startbit+1))+architecture.instructions[i].co.padStart(fieldsLength,"0")+binary.substring(binary.length-architecture.instructions[i].fields[a].stopbit,binary.length)}console_log(binary);re=RegExp("Field[0-9]+");console_log(instruction);instruction=instruction.replace(re,token);console_log(instruction)}if(architecture.instructions[i].fields[a].type=="cop"){fieldsLength=architecture.instructions[i].fields[a].startbit-architecture.instructions[i].fields[a].stopbit+1;binary=binary.substring(0,binary.length-(architecture.instructions[i].fields[a].startbit+1))+architecture.instructions[i].fields[a].valueField.padStart(fieldsLength,"0")+binary.substring(binary.length-architecture.instructions[i].fields[a].stopbit,binary.length)}}break}}if(validTagPC==false&&resultPseudo==-3){console_log("pendiente");pc=pc+architecture.instructions[i].nwords*4;var padding="";padding=padding.padStart(architecture.instructions[i].nwords*32-binary.length,"0");binary=binary+padding;var hex=bin2hex(binary);var auxAddr=address;console_log(binary);console_log(bin2hex(binary));pending_instructions.push({address:address,instruction:instruction,signature:signatureParts,signatureRaw:signatureRawParts,Label:label,binary:binary,startBit:startBit,stopBit:stopBit,visible:true,line:nEnters});if(pending==false){instructions.push({Break:null,Address:"0x"+address.toString(16),Label:label,loaded:instruction,user:userInstruction,_rowVariant:"",visible:true,hide:false});instructions_binary.push({Break:null,Address:"0x"+address.toString(16),Label:label,loaded:binary,user:null,_rowVariant:"",visible:false});address=address+4*architecture.instructions[i].nwords}else{for(var pos=0;pospendingAddress){instructions.splice(pos,0,{Break:null,Address:"0x"+pendingAddress.toString(16),Label:label,loaded:instruction,user:userInstruction,_rowVariant:"",visible:true,hide:false});instructions_binary.splice(pos,0,{Break:null,Address:"0x"+pendingAddress.toString(16),Label:label,loaded:binary,user:null,_rowVariant:"",visible:false});auxAddr=pendingAddress;break}}}console_log(address.toString(16));console_log(instructions);stopFor=true;break}else{if(resultPseudo==-3){console_log("no pendiente");pc=pc+architecture.instructions[i].nwords*4;var padding="";padding=padding.padStart(architecture.instructions[i].nwords*32-binary.length,"0");binary=binary+padding;var hex=bin2hex(binary);var auxAddr=address;console_log(binary);console_log(bin2hex(binary));if(pending==false){instructions.push({Break:null,Address:"0x"+address.toString(16),Label:label,loaded:instruction,user:userInstruction,_rowVariant:"",visible:true,hide:false});instructions_binary.push({Break:null,Address:"0x"+address.toString(16),Label:label,loaded:binary,user:null,_rowVariant:"",visible:false});address=address+4*architecture.instructions[i].nwords}else{for(var pos=0;pospendingAddress){instructions.splice(pos,0,{Break:null,Address:"0x"+pendingAddress.toString(16),Label:label,loaded:instruction,user:userInstruction,_rowVariant:"",visible:true,hide:false});instructions_binary.splice(pos,0,{Break:null,Address:"0x"+pendingAddress.toString(16),Label:label,loaded:binary,user:null,_rowVariant:"",visible:false});auxAddr=pendingAddress;break}}}stopFor=true;console_log(address.toString(16));console_log(instructions)}}}}return ret}function pseudoinstruction_compiler(instruction,label,line){var ret={errorcode:"",token:"",type:"",update:"",status:"ok"};var re=/\' \'/;instruction=instruction.replace(re,"'\0'");var re=/\'\\n\'/;instruction=instruction.replace(re,"10");console_log(instruction);var re=/\'\\t\'/;instruction=instruction.replace(re,"9");console_log(instruction);var instructionParts=instruction.split(" ");var found=false;var re=/\'\0\'/;instruction=instruction.replace(re,"' '");console_log(instruction);for(var i=0;i;\s]/;while(definition.search(re)!=-1){var match=re.exec(definition);console_log(match);var code;if(instructionParts[match[1]].match(/^\'(.*?)\'$/)){var re=/^\'(.*?)\'$/;console_log(re);var match2=re.exec(instructionParts[match[1]]);console_log(match2);var asciiCode=match2[1].charCodeAt(0);console_log(asciiCode);console_log("value = field('"+asciiCode+"', '("+match[2]+")', '"+match[3]+"')");code="value = field('"+asciiCode+"', '("+match[2]+")', '"+match[3]+"')"}else{console_log("value = field('"+instructionParts[match[1]]+"', '("+match[2]+")', '"+match[3]+"')");code="value = field('"+instructionParts[match[1]]+"', '("+match[2]+")', '"+match[3]+"')"}var value;try{eval(code)}catch(e){if(e instanceof SyntaxError){return packCompileError("m5",token,"error","danger")}}if(value==-1){return packCompileError("m5",token,"error","danger")}definition=definition.replace("Field."+match[1]+".("+match[2]+")."+match[3],value);re=/Field.(\d).\((.*?)\).(.*?)[;\s]/}re=/Field.(\d).SIZE[=<>;\s]/g;if(definition.search(re)!=-1){var match=re.exec(definition);console_log(match);var code;if(instructionParts[match[1]].match(/^\'(.*?)\'$/)){var re=/^\'(.*?)\'$/;console_log(re);var match2=re.exec(instructionParts[match[1]]);console_log(match2);var asciiCode=match2[1].charCodeAt(0);console_log(asciiCode);console_log("value = field('"+asciiCode+"', 'SIZE', null)");code="value = field('"+asciiCode+"', 'SIZE', null)"}else{console_log("value = field('"+instructionParts[match[1]]+"', 'SIZE', null)");code="value = field('"+instructionParts[match[1]]+"', 'SIZE', null)"}var value;try{eval(code)}catch(e){if(e instanceof SyntaxError){return packCompileError("m5",token,"error","danger")}}if(value==-1){return packCompileError("m5",token,"error","danger")}console_log(value);console_log("Field."+match[1]+".SIZE");definition=definition.replace("Field."+match[1]+".SIZE",value)}console_log(definition);re=/reg\.pc/;console_log(re);while(definition.search(re)!=-1){definition=definition.replace(re,"pc");console_log(definition)}re=/no_ret_op\{([^}]*)\};/;console_log(re);while(definition.search(re)!=-1){var match=re.exec(definition);console_log(match[1]);eval(match[1]);definition=definition.replace(re,"");console_log(definition)}re=/op\{([^}]*)\}/;console_log(re);while(definition.search(re)!=-1){var match=re.exec(definition);var result;console_log(match[1]);eval("result="+match[1]);definition=definition.replace(re,result);console_log(definition)}while(definition.match(/\'(.*?)\'/)){var re=/\'(.*?)\'/;console_log(re);var match2=re.exec(instructionParts[match[1]]);console_log(match2);var asciiCode=match2[1].charCodeAt(0);console_log(asciiCode);definition=definition.replace(re,asciiCode)}console_log(definition);console_log(instruction);var re=new RegExp("'","g");instruction=instruction.replace(re,'"');console_log(instruction);var re=/{([^}]*)}/g;var code=re.exec(definition);if(code!=null){while(code!=null){var instructions=code[1].split(";");console_log(instructions);for(var j=0;j>>0).toString(2);binNum=binNum.padStart(32,"0");binNum=binNum.substring(31-startBit,32-endBit);var hexNum="0x"+bin2hex(binNum);return hexNum}else if(type=="float"){var binNum=float2bin(parseFloat(field));console_log(binNum);binNum=binNum.padStart(32,"0");binNum=binNum.substring(31-startBit,32-endBit);var hexNum="0x"+bin2hex(binNum);return hexNum}else if(type=="double"){var binNum=double2bin(parseFloat(field));console_log(binNum);binNum=binNum.padStart(64,"0");binNum=binNum.substring(63-startBit,64-endBit);var hexNum="0x"+bin2hex(binNum);return hexNum}}return-1}function getFieldLength(separated,startbit,stopbit,a){if(startbit==stopbit)console_log("Warning: startbit equal to stopBit, please check the achitecture definitions");let fieldsLength;if(!separated||!separated[a])fieldsLength=startbit-stopbit+1;else fieldsLength=startbit.map(((b,i)=>b-stopbit[i]+1)).reduce(((old,newV)=>old+newV));return fieldsLength}function generateBinary(separated,startbit,stopbit,binary,inm,fieldsLenght,a){if(!separated||!separated[a])binary=binary.substring(0,binary.length-(startbit+1))+inm.padStart(fieldsLength,"0")+binary.substring(binary.length-stopbit,binary.length);else{let myInm=inm;for(let i=startbit.length-1;i>=0;i--){let sb=startbit[i],stb=stopbit[i],diff=sb-stb+1;if(myInm.length<=diff){binary=binary.substring(0,binary.length-(sb+1))+myInm.padStart(diff,"0")+binary.substring(binary.length-stb,binary.length);break}else{let tmpinm=inm.substring(myInm.length-diff,myInm.length);binary=binary.substring(0,binary.length-(sb+1))+tmpinm.padStart(diff,"0")+binary.substring(binary.length-stb,binary.length);myInm=myInm.substring(0,myInm.length-diff)}}}return binary}function binaryStringToInt(b){return parseInt(b,2)}function packExecute(error,err_msg,err_type,draw){var ret={};ret.error=error;ret.msg=err_msg;ret.type=err_type;ret.draw=draw;return ret}function executeInstruction(){var draw={space:[],info:[],success:[],danger:[],flash:[]};console_log(mutexRead);newExecution=false;do{console_log(executionIndex);console_log(architecture.components[0].elements[0].value);if(instructions.length==0){return packExecute(true,"No instructions in memory","danger",null)}if(executionIndex<-1){return packExecute(true,"The program has finished","danger",null)}if(executionIndex==-1){return packExecute(true,"The program has finished with errors","danger",null)}else if(mutexRead==true){return packExecute(false,"","info",null)}if(executionInit==1){for(var i=0;i=0;z--){if(architecture.components[j].elements[z].name.includes(instructionExecParts[i])){var_readings_definitions[signatureRawParts[i]]="var "+signatureRawParts[i]+" = readRegister ("+j+" ,"+z+");\n";var_readings_definitions_prev[signatureRawParts[i]]="var "+signatureRawParts[i]+"_prev = readRegister ("+j+" ,"+z+");\n";var_readings_definitions_name[signatureRawParts[i]]="var "+signatureRawParts[i]+"_name = '"+instructionExecParts[i]+"';\n";re=new RegExp("(?:\\W|^)((("+signatureRawParts[i]+") *=)[^=])","g");if(auxDef.search(re)!=-1){var_writings_definitions[signatureRawParts[i]]="writeRegister("+signatureRawParts[i]+", "+j+", "+z+");\n"}else{var_writings_definitions[signatureRawParts[i]]="if("+signatureRawParts[i]+" != "+signatureRawParts[i]+"_prev)"+" { writeRegister("+signatureRawParts[i]+" ,"+j+" ,"+z+"); }\n"}}}}}else{var_readings_definitions[signatureRawParts[i]]="var "+signatureRawParts[i]+" = "+instructionExecParts[i]+";\n"}}for(var elto in var_readings_definitions){readings_description=readings_description+var_readings_definitions[elto]}for(var elto in var_readings_definitions_prev){readings_description=readings_description+var_readings_definitions_prev[elto]}for(var elto in var_readings_definitions_name){readings_description=readings_description+var_readings_definitions_name[elto]}for(var elto in var_writings_definitions){writings_description=writings_description+var_writings_definitions[elto]}}for(var i=0;i=0;j--){var clean_name=clean_string(architecture.components[i].elements[j].name[0],"reg_");var clean_aliases=architecture.components[i].elements[j].name.map((x=>clean_string(x,"reg_"))).join("|");re=new RegExp("(?:\\W|^)((("+clean_aliases+") *=)[^=])","g");if(auxDef.search(re)!=-1){writings_description=writings_description+"\nwriteRegister("+clean_name+", "+i+", "+j+");"}re=new RegExp("([^a-zA-Z0-9])(?:"+clean_aliases+")");if(auxDef.search(re)!=-1){readings_description=readings_description+"var "+clean_name+" = readRegister("+i+" ,"+j+");\n";readings_description=readings_description+"var "+clean_name+"_name = '"+clean_name+"';\n"}}}auxDef="\n/* Read all instruction fields */\n"+readings_description+"\n/* Original instruction definition */\n"+auxDef+"\n\n/* Modify values */\n"+writings_description;console_log(" ................................. "+"instructions["+executionIndex+"]:\n"+auxDef+"\n"+" ................................. ");eval("instructions["+executionIndex+"].preload = function(elto) { "+" try {\n"+auxDef.replace(/this./g,"elto.")+"\n"+" }\n"+" catch(e){\n"+" throw e;\n"+" }\n"+"}; ")}try{var result=instructions[executionIndex].preload(this);if(typeof result!="undefined"&&result.error){return result}}catch(e){var msg="";if(e instanceof SyntaxError)msg="The definition of the instruction contains errors, please review it";else msg='Exception on executing instruction "'+executionIndex+'": '+e+"\n"+" Stack trace: "+e.stack+"\n";console_log("Error: "+e);error=1;draw.danger.push(executionIndex);executionIndex=-1;return packExecute(true,msg,"danger",null)}stats_update(type);if(executionIndex==-1){error=1;return packExecute(false,"","info",null)}if(error!=1&&executionIndex=instructions.length&&mutexRead==true){for(var i=0;i=instructions.length&&mutexRead==false){for(var i=0;i=architecture.memory_layout[2].value){draw.danger.push(executionIndex);executionIndex=-1;throw packExecute(true,"Segmentation fault. You tried to read in the data segment","danger",null)}else if(stackLimit<=architecture.memory_layout[1].value&&stackLimit>=architecture.memory_layout[0].value){draw.danger.push(executionIndex);executionIndex=-1;throw packExecute(true,"Segmentation fault. You tried to read in the text segment","danger",null)}else{var diff=memory[memory_hash[2]][0].Address-stackLimit;var auxStackLimit=stackLimit;var newRow=0;for(var i=0;i ");var value=fn_post_read(keystroke,fn_post_params);keyboard=keyboard+" "+value;return packExecute(false,"The data has been uploaded","danger",null)}mutexRead=true;app._data.enter=false;console_log(mutexRead);if(newExecution==true){app._data.keyboard="";consoleMutex=false;mutexRead=false;app._data.enter=null;show_notification("The data has been uploaded","info");if(runProgram==false){app.executeProgram()}return}if(consoleMutex==false){setTimeout(keyboard_read,1e3,fn_post_read,fn_post_params);return}fn_post_read(app._data.keyboard,fn_post_params);app._data.keyboard="";consoleMutex=false;mutexRead=false;app._data.enter=null;show_notification("The data has been uploaded","info");console_log(mutexRead);if(executionIndex>=instructions.length){for(var i=0;i>0)}if(architecture.instructions[index].fields[j].type=="inm-unsigned"){var value="";if(architecture.instructions[index].separated&&architecture.instructions[index].separated[j]==true){for(var sep_index=0;sep_index>0)}if(architecture.instructions[index].fields[j].type=="address"){var value="";if(architecture.instructions[index].separated&&architecture.instructions[index].separated[j]==true){for(var sep_index=0;sep_index>0)}if(architecture.instructions[index].fields[j].type=="offset_bytes"){var value="";if(architecture.instructions[index].separated&&architecture.instructions[index].separated[j]==true){for(var sep_index=0;sep_index>0)}}return auxDef}var uielto_loading={template:"\t"+'\t\t
'+'\t\t
'+'\t \t
'+'\t \t '+"\t \t
"+"\t \t
"+'\t \tLoading... '+"\t \t
"+"\t
"+"\t
"};Vue.component("spinner-loading",uielto_loading);var uielto_browser={template:"\t"+'\t You are using an unsupported browser, please use one of the following: '+"\t "+"\t "+'\t '+"\t Google Chrome 70+"+'\t '+'\t '+"\t "+"\t "+"\t "+'\t '+"\t Mozilla Firefox 60+"+'\t '+'\t '+"\t "+"\t "+"\t "+"\t "+'\t '+"\t Apple Safari 12+"+'\t '+'\t '+"\t "+"\t "+"\t "+"\t "+"\t
"};Vue.component("supported-browser",uielto_browser);var uielto_navbar={props:{version:{type:String,required:true},architecture_name:{type:String,required:true}},template:'\t"};Vue.component("navbar-creator",uielto_navbar);var uielto_configuration={props:{instructions_packed:{type:Number,required:true},autoscroll:{type:Boolean,required:true},notification_time:{type:Number,required:true},dark:{type:Boolean,required:true},c_debug:{type:Boolean,required:true}},methods:{change_execution_speed(value){var prevInstructionPacked=this._props.instructions_packed;if(value){this._props.instructions_packed=this._props.instructions_packed+value;if(this._props.instructions_packed<1){this._props.instructions_packed=1}if(this._props.instructions_packed>101){this._props.instructions_packed=101}}else{this._props.instructions_packed=parseInt(this._props.instructions_packed)}app._data.instructionsPacked=this._props.instructions_packed;localStorage.setItem("instructionsPacked",this._props.instructions_packed);creator_ga("send","event","configuration","configuration.execution_speed","configuration.execution_speed.less_speed_"+(prevInstructionPacked>this._props.instructionsPacked).toString())},change_autoscroll(){this._props.autoscroll=!this._props.autoscroll;localStorage.setItem("autoscroll",this._props.autoscroll);app._data.autoscroll=this._props.autoscroll;creator_ga("send","event","configuration","configuration.autoscroll","configuration.autoscroll."+this._props.autoscroll)},change_notification_time(value){var prevNotificationTime=this._props.notification_time;if(value){this._props.notification_time=this._props.notification_time+value;if(this._props.notification_time<1e3){this._props.notification_time=1e3}if(this._props.notification_time>3500){this._props.notification_time=3500}}else{this._props.notification_time=parseInt(this._props.notification_time)}app._data.notificationTime=this._props.notification_time;localStorage.setItem("notificationTime",this._props.notification_time);creator_ga("send","event","configuration","configuration.notification_time","configuration.notification_time.less_time_"+(prevNotificationTime>this._props.notificationTime).toString())},change_dark_mode(){this._props.dark=!this._props.dark;if(this._props.dark){document.getElementsByTagName("body")[0].style="filter: invert(88%) hue-rotate(160deg) !important; background-color: #111 !important;";localStorage.setItem("dark_mode","filter: invert(88%) hue-rotate(160deg) !important; background-color: #111 !important;")}else{document.getElementsByTagName("body")[0].style="";localStorage.setItem("dark_mode","")}app._data.dark=this._props.dark;creator_ga("send","event","configuration","configuration.dark_mode","configuration.dark_mode."+this._props.dark)}},template:"\t"+""+' \t '+' Execution Speed: '+" \t\t "+" \t "+' \t - '+" \t "+' '+" "+" \t "+' \t + '+" \t "+" \t\t "+" \t "+""+' \t '+' Execution Autoscroll: '+' '+" "+" \t "+""+' \t '+' Notification Time: '+" \t\t "+" "+' - '+" "+' '+" "+" "+' + '+" "+" \t\t "+" \t "+""+' \x3c!--'+' Font Size: '+" "+" "+' - '+" "+' '+" "+" "+' + '+" "+" "+" --\x3e"+""+' \t '+' Dark Mode: '+' '+" "+" \t "+""+' \t '+' Debug: '+' '+" \t "+""+" \t "};Vue.component("form-configuration",uielto_configuration);var uielto_info={props:{target:{type:String,required:true},show_instruction_help:{type:Boolean,required:true}},methods:{closePopover(){this.$root.$emit("bv::hide::popover")}},template:'\t'+"\t "+'\t '+'\t × '+"\t "+"\t "+"\t "+"\t"+'\t '+'\t "+'\t '+"\t Help"+"\t "+'\t "+'\t '+"\t Instruction Help"+"\t "+'\t "+'\t '+"\t Show Notifications"+"\t "+'\t "+'\t '+"\t About us"+"\t "+"\t
"+"\t "};Vue.component("popover-info",uielto_info);var uielto_about={template:""+""+" "+""+" "+""+" "+""+" "};Vue.component("uielto-about",uielto_about);var uielto_author={props:{author_img:{type:String,required:true},author_alt:{type:String,required:true},author_full_name:{type:String,required:true},author_href_linked:{type:String,required:false},author_href_rgate:{type:String,required:false},author_href_github:{type:String,required:false}},template:' '+" "+'\t {{ author_full_name }}
'+"\t "+'\t '+'\t '+" linkedin"+"\t "+"\t "+'\t '+'\t '+" r-gate"+"\t "+"\t "+'\t '+'\t '+" github"+"\t "+" "+" "};Vue.component("card-author",uielto_author);var uielto_notifications={props:{notifications:{type:Array,required:true}},template:" "+' '+" There's no notification at the moment"+" "+' '+' '+' '+' '+" {{item.mess}}"+" "+' {{item.time}} - {{item.date}} '+" "+"
"};Vue.component("uielto-notifications",uielto_notifications);var uielto_instruction_help={props:{architecture:{type:Object,required:true},id:{type:String,required:true}},data:function(){return{instHelpFilter:null,insHelpFields:["name"]}},template:''+'\t'+"\t"+"\t "+"\t"+"\t "+"\t"+'\t '+"\t"+'\t '+"\t {{row.item.name}} "+"\t {{row.item.signatureRaw}} "+"\t "+"\t {{row.item.help}}"+"\t "+"\t"+"\t "+"\t"+"\t
"+" "+' A backup is available '+" "+' Date: {{date_copy}} '+' '+'
'+' '+" Discard"+" "+"
"+'
'+' '+" Load"+" "+"
"+"
"+" "};Vue.component("uielto-backup",uielto_backup);var uielto_examples={props:{example_available:{type:Array,required:true},compile:{type:String,required:true},modal:{type:String,required:true}},methods:{load_example(url,compile){this.$root.$emit("bv::hide::modal",this._props.modal,"#closeExample");$.get(url,(function(data){code_assembly=data;if(compile=="false"){textarea_assembly_editor.setValue(code_assembly)}else{app.assembly_compiler(code_assembly)}show_notification(" The selected example has been loaded correctly","success");creator_ga("send","event","example","example.loading","example.loading."+url)}))}},template:" "+' '+" There's no examples at the moment"+" "+" "+" '+" {{item.name}}:"+' '+" "+" "+"
"};Vue.component("examples",uielto_examples);var uielto_textarea_assembly={props:{browser:{type:String,required:true}},template:' '+'
Assembly: '+" "+'
'+" "+'
'+"
"};Vue.component("textarea-assembly",uielto_textarea_assembly);var uielto_library_tags={props:{instructions_tag:{type:Array,required:true}},template:' '+' Library tags: '+" "+' '+' '+" {{item.tag}}"+" "+" "+" "+"
"};Vue.component("list-libray-tags",uielto_library_tags);var uielto_shortcuts={props:{target:{type:String,required:true},browser:{type:String,required:true}},template:'\t'+"\t\t"+'\t\t '+"\t\t Copy   "+'\t\t Ctrl + c '+'\t\t ⌘ + c '+"\t\t "+"\t"+'\t\t '+"\t\t Cut    "+'\t\t Ctrl + x '+'\t\t ⌘ + x '+"\t\t "+"\t"+'\t\t '+"\t\t Paste   "+'\t\t Ctrl + v '+'\t\t ⌘ + v '+"\t\t "+"\t"+'\t\t '+"\t\t Select all   "+'\t\t Ctrl + a '+'\t\t ⌘ + a '+"\t\t "+"\t"+'\t\t '+"\t\t Undo   "+'\t\t Ctrl + z '+'\t\t ⌘ + z '+"\t\t "+"\t"+'\t\t '+"\t\t Redo   "+'\t\t Ctrl + y '+'\t\t ⌘ + y '+"\t\t "+"\t"+'\t\t '+"\t\t Block code comment   "+'\t\t Ctrl + m '+'\t\t ⌘ + m '+"\t\t "+"\t\t "+"\t "};Vue.component("popover-shortcuts",uielto_shortcuts);var uielto_assembly_error={props:{modal_assembly_error:{type:Object,required:true}},template:" "+'
Code fragment: '+'
'+' '+" "+" "+' '+' ... '+' '+" "+" "+' '+' {{modal_assembly_error.line1}} '+' {{modal_assembly_error.code1}} '+" "+" "+' * '+' {{modal_assembly_error.line2}} '+' {{modal_assembly_error.code2}} '+" "+" "+' '+' {{modal_assembly_error.line3}} '+' {{modal_assembly_error.code3}} '+" "+" "+' '+' ... '+' '+" "+" "+" "+"
"+"
"+" "+'
Error description: '+"
"+'
{{modal_assembly_error.error}} '+"
"+"
"};Vue.component("assembly-error",uielto_assembly_error);var uielto_calculator={data:function(){return{calculator:{bits:32,hexadecimal:"",sign:"",exponent:"",mantissa:"",mantisaDec:0,exponentDec:"",decimal:"",variant32:"primary",variant64:"outline-primary",lengthHexadecimal:8,lengthSign:1,lengthExponent:8,lengthMantissa:23}}},methods:{changeBitsCalculator(index){if(index==0){this.calculator.bits=32;this.calculator.variant32="primary";this.calculator.variant64="outline-primary";this.calculator.lengthHexadecimal=8;this.calculator.lengthSign=1;this.calculator.lengthExponent=8;this.calculator.lengthMantissa=23}if(index==1){this.calculator.bits=64;this.calculator.variant64="primary";this.calculator.variant32="outline-primary";this.calculator.lengthHexadecimal=16;this.calculator.lengthSign=1;this.calculator.lengthExponent=11;this.calculator.lengthMantissa=52}this.calculator.hexadecimal="";this.calculator.sign="";this.calculator.exponent="";this.calculator.mantissa="";this.calculator.decimal="";this.calculator.sign="";this.calculator.exponentDec="";this.calculator.mantissaDec=""},calculatorFunct(index){switch(index){case 0:console_log(this.calculator.hexadecimal.padStart(this.calculator.bits/4,"0"));var hex=this.calculator.hexadecimal.padStart(this.calculator.bits/4,"0");var float;var binary;if(this.calculator.bits==32){var re=/[0-9A-Fa-f]{8}/g;if(!re.test(hex)){show_notification("Character not allowed","danger");this.calculator.sign="";this.calculator.exponent="";this.calculator.mantissa="";this.calculator.exponentDec="";this.calculator.mantissaDec=0;this.calculator.decimal="";return}float=hex2float("0x"+hex);console_log(hex2float("0x"+hex));binary=float2bin(float).padStart(this.calculator.bits,"0");this.calculator.decimal=float;this.calculator.sign=binary.substring(0,1);this.calculator.exponent=binary.substring(1,9);this.calculator.mantissa=binary.substring(9,32);this.calculator.exponentDec=parseInt(bin2hex(this.calculator.exponent),16);this.calculator.mantissaDec=0;var j=0;for(var i=0;i"+'\t '+'\t
'+'\t
'+'\t
'+'\t
'+'\t '+"\t 32 bit"+"\t "+"\t
"+'\t
'+'\t '+"\t 64 bit"+"\t "+"\t
"+"\t
"+"\t
"+'\t
'+"\t
"+"\t"+'\t '+'\t
'+'\t
'+'\t '+"\t "+"\t
"+'\t
'+"\t
"+"\t"+'\t '+'\t
'+'\t
'+'\t '+"\t
"+'\t
'+"\t
"+"\t"+'\t '+'\t
'+'\t
'+'\t
'+'\t
'+'\t '+"\t "+"\t
"+'\t
'+'\t '+"\t "+"\t
"+'\t
'+'\t '+"\t "+"\t
"+"\t
"+"\t
"+'\t
'+"\t
"+"\t"+'\t '+'\t
'+'\t
'+'\t
'+'\t
'+'\t '+"\t "+'\t '+"\t -1{{calculator.sign}} * "+"\t "+"\t
"+'\t
'+'\t '+"\t "+'\t '+"\t 2{{calculator.exponentDec}}-127 * "+"\t "+'\t '+"\t 2{{calculator.exponentDec}}-1023 * "+"\t "+"\t
"+'\t
'+'\t '+"\t "+'\t '+"\t {{calculator.mantissaDec}} = "+"\t "+"\t
"+"\t
"+"\t
"+'\t
'+'\t '+"\t "+"\t
"+"\t
"+"\t"+'\t '+'\t Convert '+"\t
"+"\t"};Vue.component("calculator",uielto_calculator);function getDebounceTime(){if(screen.width>768){return 500}else{return 1e3}}var uielto_execution={props:{instructions:{type:Array,required:true},enter:{type:String,required:true}},data:function(){return{archInstructions:["Break","Address","Label","userInstructions","loadedInstructions","tag"]}},methods:{filter(row,filter){if(row.hide==true){return false}else{return true}},breakPoint(record,index){for(var i=0;i'+' '+" "+'
'+" "+" \x3c!-- Change the title of each column --\x3e"+' '+" User Instruction"+" "+" "+' '+" Loaded Instructions"+" "+" "+' '+" "+" "+" "+" \x3c!-- For each instruction --\x3e"+' '+' '+' '+' '+" "+"
"+" "+" "+' '+' {{row.item.Address}} '+" "+" "+' '+' {{row.item.Label}} '+" "+" "+' '+' {{row.item.user}} '+' <<Hidden>> '+" "+" "+' '+' {{row.item.loaded}} '+' <<Hidden>> '+" "+" "+' '+' "+" Current-Keyboard"+" "+' "+" Next"+" "+' "+" Current"+" "+" "+" "+" "+' '+' {{row.item.loaded}} '+' <<Hidden>> '+" "+" "+"
"+" "};Vue.component("table-execution",uielto_execution);var uielto_data_view_selector={props:{name_reg:{type:String,required:true},reg_type:{type:String,required:true}},data:function(){return{}},methods:{change_data_view(e,type){app._data.data_mode=e;if(e=="registers"){if(type=="int"){app._data.register_type="integer";app._data.name_tab_Reg="Decimal";app._data.name_reg="INT Registers";app._data.reg_type="int"}else if(type=="fp"){app._data.register_type="floating point";app._data.name_tab_Reg="Real";app._data.name_reg="FP Registers";app._data.reg_type="fp"}}if(e=="memory"){app._data.data_mode=e}creator_ga("send","event","data","data.view","data.view."+app._data.data_mode)}},template:' "};Vue.component("data-view-selector",uielto_data_view_selector);var uielto_register={props:{register:{type:Object,required:true},component:{type:Object,required:true},name_representation:{type:String,required:true},value_representation:{type:String,required:true}},methods:{popover_id(name){return"popoverValueContent"+name[0]},show_value(register){var ret=0;switch(this.value_representation){case"unsigned":ret=parseInt(register.value.toString(10))>>>0;break;case"signed":if(this.component.name=="Control registers"||this.component.name=="Integer registers"){if(register.value.toString(2).padStart(register.nbits,"0").charAt(0)==1)ret=parseInt(register.value.toString(10))-4294967296;if(register.value.toString(2).padStart(register.nbits,"0").charAt(0)==0)ret=register.value.toString(10)}else{ret=parseInt(register.value.toString(),10)>>0}break;case"decimal":if(this.component.name=="Control registers"||this.component.name=="Integer registers"){ret=hex2float("0x"+register.value.toString(16).padStart(register.nbits/4,"0"))}else{ret=register.value}break;case"hex":if(this.component.name=="Control registers"||this.component.name=="Integer registers"){ret=register.value.toString(16).padStart(register.nbits/4,"0").toUpperCase()}else{if(this.component.name=="Simple floating point registers"){ret=bin2hex(float2bin(register.value))}else{ret=bin2hex(double2bin(register.value))}}break}ret=ret.toString();if(ret.length>10){return ret.slice(0,8)+"..."}return ret},reg_name(register){switch(this.name_representation){case"logical":return register.name[0];case"alias":if(typeof register.name[1]==="undefined"){return register.name[0]}return register.name[1];case"all":return register.name.join(" | ")}}},template:' "+' {{reg_name(register)}} '+' '+" {{show_value(register)}}"+" "+" "+" "+' '+" "};Vue.component("register",uielto_register);var uielto_register_int_popover={props:{target:{type:String,required:true},component:{type:Object,required:true},register:{type:Object,required:true}},data:function(){return{newValue:""}},methods:{closePopover(){this.$root.$emit("bv::hide::popover")},updateReg(comp,elem,type,precision){for(var i=0;iarchitecture.components[comp].elements[i].nbits){value[1]=value[1].substring((value[1].length*4-architecture.components[comp].elements[i].nbits)/4,value[1].length)}architecture.components[comp].elements[i].value=bi_intToBigInt(value[1],16)}else if(architecture.components[comp].elements[i].name==elem&&this.newValue.match(/^(\d)+/)){architecture.components[comp].elements[i].value=bi_intToBigInt(this.newValue,10)}else if(architecture.components[comp].elements[i].name==elem&&this.newValue.match(/^-/)){architecture.components[comp].elements[i].value=bi_intToBigInt(this.newValue,10)}}else if(type=="floating point"){if(precision==false){if(architecture.components[comp].elements[i].name==elem&&this.newValue.match(/^0x/)){architecture.components[comp].elements[i].value=hex2float(this.newValue);updateDouble(comp,i)}else if(architecture.components[comp].elements[i].name==elem&&this.newValue.match(/^(\d)+/)){architecture.components[comp].elements[i].value=parseFloat(this.newValue,10);updateDouble(comp,i)}else if(architecture.components[comp].elements[i].name==elem&&this.newValue.match(/^-/)){architecture.components[comp].elements[i].value=parseFloat(this.newValue,10);updateDouble(comp,i)}}else if(precision==true){if(architecture.components[comp].elements[i].name==elem&&this.newValue.match(/^0x/)){architecture.components[comp].elements[i].value=hex2double(this.newValue);updateSimple(comp,i)}else if(architecture.components[comp].elements[i].name==elem&&this.newValue.match(/^(\d)+/)){architecture.components[comp].elements[i].value=parseFloat(this.newValue,10);updateSimple(comp,i)}else if(architecture.components[comp].elements[i].name==elem&&this.newValue.match(/^-/)){architecture.components[comp].elements[i].value=parseFloat(this.newValue,10);updateSimple(comp,i)}}}}this.newValue="";creator_ga("data","data.change","data.change.register_value");creator_ga("data","data.change","data.change.register_value_"+elem)},debounce:_.debounce((function(param,e){console_log(param);console_log(e);e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");var re=new RegExp("'","g");e=e.replace(re,'"');re=new RegExp("[\f]","g");e=e.replace(re,"\\f");re=new RegExp("[\n]","g");e=e.replace(re,"\\n");re=new RegExp("[\r]","g");e=e.replace(re,"\\r");re=new RegExp("[\t]","g");e=e.replace(re,"\\t");re=new RegExp("[\v]","g");e=e.replace(re,"\\v");if(e==""){this[param]=null;return}console_log("this."+param+"= '"+e+"'");eval("this."+param+"= '"+e+"'");app.$forceUpdate()}),getDebounceTime())},template:''+" "+' '+' × '+" "+" {{register.name.join(' | ')}}"+" "+""+' '+" "+" "+" Hex. "+" "+' '+' {{"0x"+(((register.value).toString(16)).padStart(register.nbits/4, "0")).toUpperCase()}}'+" "+" "+" "+" "+" Binary "+" "+' '+' {{(((register.value).toString(2)).padStart(register.nbits, "0"))}}'+" "+" "+" "+" "+" Signed "+" "+' "+" {{parseInt(register.value.toString(10))-0x100000000}}"+" "+' "+" {{(register.value).toString(10)}}"+" "+" "+" "+" "+" Unsig. "+" "+' '+" {{(register.value).toString(10) >>> 0}}"+" "+" "+" "+" "+" Char "+" "+' '+' {{hex2char8((((register.value).toString(16)).padStart(register.nbits/4, "0")))}}'+" "+" "+" "+" "+" IEEE 754 "+" "+' '+' {{hex2float("0x"+(((register.value).toString(16)).padStart(register.nbits/4, "0")))}}'+" "+" "+" "+" "+"
"+""+' '+' "+' "+"
"+" "};Vue.component("popover-register-int",uielto_register_int_popover);var uielto_register_float_popover={props:{target:{type:String,required:true},component:{type:Object,required:true},register:{type:Object,required:true}},data:function(){return{newValue:""}},methods:{closePopover(){this.$root.$emit("bv::hide::popover")},updateReg(comp,elem,type,precision){for(var i=0;iarchitecture.components[comp].elements[i].nbits){value[1]=value[1].substring((value[1].length*4-architecture.components[comp].elements[i].nbits)/4,value[1].length)}architecture.components[comp].elements[i].value=bi_intToBigInt(value[1],16)}else if(architecture.components[comp].elements[i].name==elem&&this.newValue.match(/^(\d)+/)){architecture.components[comp].elements[i].value=bi_intToBigInt(this.newValue,10)}else if(architecture.components[comp].elements[i].name==elem&&this.newValue.match(/^-/)){architecture.components[comp].elements[i].value=bi_intToBigInt(this.newValue,10)}}else if(type=="floating point"){if(precision==false){if(architecture.components[comp].elements[i].name==elem&&this.newValue.match(/^0x/)){architecture.components[comp].elements[i].value=hex2float(this.newValue);updateDouble(comp,i)}else if(architecture.components[comp].elements[i].name==elem&&this.newValue.match(/^(\d)+/)){architecture.components[comp].elements[i].value=parseFloat(this.newValue,10);updateDouble(comp,i)}else if(architecture.components[comp].elements[i].name==elem&&this.newValue.match(/^-/)){architecture.components[comp].elements[i].value=parseFloat(this.newValue,10);updateDouble(comp,i)}}else if(precision==true){if(architecture.components[comp].elements[i].name==elem&&this.newValue.match(/^0x/)){architecture.components[comp].elements[i].value=hex2double(this.newValue);updateSimple(comp,i)}else if(architecture.components[comp].elements[i].name==elem&&this.newValue.match(/^(\d)+/)){architecture.components[comp].elements[i].value=parseFloat(this.newValue,10);updateSimple(comp,i)}else if(architecture.components[comp].elements[i].name==elem&&this.newValue.match(/^-/)){architecture.components[comp].elements[i].value=parseFloat(this.newValue,10);updateSimple(comp,i)}}}}this.newValue="";creator_ga("data","data.change","data.change.register_value");creator_ga("data","data.change","data.change.register_value_"+elem)},debounce:_.debounce((function(param,e){console_log(param);console_log(e);e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");var re=new RegExp("'","g");e=e.replace(re,'"');re=new RegExp("[\f]","g");e=e.replace(re,"\\f");re=new RegExp("[\n]","g");e=e.replace(re,"\\n");re=new RegExp("[\r]","g");e=e.replace(re,"\\r");re=new RegExp("[\t]","g");e=e.replace(re,"\\t");re=new RegExp("[\v]","g");e=e.replace(re,"\\v");if(e==""){this[param]=null;return}console_log("this."+param+"= '"+e+"'");eval("this."+param+"= '"+e+"'");app.$forceUpdate()}),getDebounceTime())},template:''+" "+' '+' × '+" "+" {{register.name.join(' | ')}}"+" "+""+' '+" "+" "+" Hex. "+" "+' '+' {{"0x"+ bin2hex(float2bin(register.value))}}'+" "+" "+" "+" "+" Binary "+" "+' '+" {{float2bin(register.value)}}"+" "+" "+" "+" "+" Signed "+" "+' '+" {{parseInt(register.value.toString(), 10) >> 0}}"+" "+" "+" "+" "+" Unsig. "+" "+' '+" {{parseInt(register.value.toString(), 10) >>> 0}}"+" "+" "+" "+" "+" IEEE 754 "+" "+' '+" {{register.value}}"+" "+" "+" "+" "+"
"+""+' '+' "+' "+"
"+" "};Vue.component("popover-register-float",uielto_register_float_popover);var uielto_register_double_popover={props:{target:{type:String,required:true},component:{type:Object,required:true},register:{type:Object,required:true}},data:function(){return{newValue:""}},methods:{closePopover(){this.$root.$emit("bv::hide::popover")},updateReg(comp,elem,type,precision){for(var i=0;iarchitecture.components[comp].elements[i].nbits){value[1]=value[1].substring((value[1].length*4-architecture.components[comp].elements[i].nbits)/4,value[1].length)}architecture.components[comp].elements[i].value=bi_intToBigInt(value[1],16)}else if(architecture.components[comp].elements[i].name==elem&&this.newValue.match(/^(\d)+/)){architecture.components[comp].elements[i].value=bi_intToBigInt(this.newValue,10)}else if(architecture.components[comp].elements[i].name==elem&&this.newValue.match(/^-/)){architecture.components[comp].elements[i].value=bi_intToBigInt(this.newValue,10)}}else if(type=="floating point"){if(precision==false){if(architecture.components[comp].elements[i].name==elem&&this.newValue.match(/^0x/)){architecture.components[comp].elements[i].value=hex2float(this.newValue);updateDouble(comp,i)}else if(architecture.components[comp].elements[i].name==elem&&this.newValue.match(/^(\d)+/)){architecture.components[comp].elements[i].value=parseFloat(this.newValue,10);updateDouble(comp,i)}else if(architecture.components[comp].elements[i].name==elem&&this.newValue.match(/^-/)){architecture.components[comp].elements[i].value=parseFloat(this.newValue,10);updateDouble(comp,i)}}else if(precision==true){if(architecture.components[comp].elements[i].name==elem&&this.newValue.match(/^0x/)){architecture.components[comp].elements[i].value=hex2double(this.newValue);updateSimple(comp,i)}else if(architecture.components[comp].elements[i].name==elem&&this.newValue.match(/^(\d)+/)){architecture.components[comp].elements[i].value=parseFloat(this.newValue,10);updateSimple(comp,i)}else if(architecture.components[comp].elements[i].name==elem&&this.newValue.match(/^-/)){architecture.components[comp].elements[i].value=parseFloat(this.newValue,10);updateSimple(comp,i)}}}}this.newValue="";creator_ga("data","data.change","data.change.register_value");creator_ga("data","data.change","data.change.register_value_"+elem)},debounce:_.debounce((function(param,e){console_log(param);console_log(e);e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");var re=new RegExp("'","g");e=e.replace(re,'"');re=new RegExp("[\f]","g");e=e.replace(re,"\\f");re=new RegExp("[\n]","g");e=e.replace(re,"\\n");re=new RegExp("[\r]","g");e=e.replace(re,"\\r");re=new RegExp("[\t]","g");e=e.replace(re,"\\t");re=new RegExp("[\v]","g");e=e.replace(re,"\\v");if(e==""){this[param]=null;return}console_log("this."+param+"= '"+e+"'");eval("this."+param+"= '"+e+"'");app.$forceUpdate()}),getDebounceTime())},template:''+" "+' '+' × '+" "+" {{register.name.join(' | ')}}"+" "+""+' '+" "+" "+" Hex. "+" "+' '+' {{"0x"+ bin2hex(double2bin(register.value))}}'+" "+" "+" "+" "+" Binary "+" "+' '+" {{double2bin(register.value)}}"+" "+" "+" "+" "+" Signed "+" "+' '+" {{parseInt(register.value.toString(), 10) >> 0}}"+" "+" "+" "+" "+" Unsig. "+" "+' '+" {{parseInt(register.value.toString(), 10) >>> 0}}"+" "+" "+" "+" "+" IEEE 754 "+" "+' '+" {{register.value}}"+" "+" "+" "+" "+"
"+""+' '+' "+' "+"
"+" "};Vue.component("popover-register-double",uielto_register_double_popover);var uielto_memory={props:{main_memory:{type:Array,required:true},memory_segment:{type:String,required:true},track_stack_names:{type:Array,required:true},callee_subrutine:{type:String,required:true},caller_subrutine:{type:String,required:true}},data:function(){return{memFields:["Tag","Address","Binary","Value"]}},methods:{filter(row,filter){if(this.memory_segment=="instructions_memory"&&(row.addr>=architecture.memory_layout[0].value&&row.addr<=architecture.memory_layout[1].value)){if(row.hide==true){return false}else{return true}}if(this.memory_segment=="data_memory"&&(row.addr>=architecture.memory_layout[2].value&&row.addr<=architecture.memory_layout[3].value)){return true}if(this.memory_segment=="stack_memory"&&row.addr>=architecture.memory_layout[3].value){return Math.abs(row.addr-app._data.end_callee)<40}},select_data_type(record,index){if(this.memory_segment=="instructions_memory"){return}if(this.memory_segment=="data_memory"){if(this.check_tag_null(record.hex)){app._data.row_index=index;app.$refs["space_modal"].show()}}if(this.memory_segment=="stack_memory"){app._data.row_index=index;app.$refs["stack_modal"].show()}},check_tag_null(record){for(var i=0;i=architecture.memory_layout[0].value&&row.item.addr<=architecture.memory_layout[3].value,"h6Sm text-secondary ":row.item.addr=app._data.end_callee,"h6Sm text-blue-funny":row.item.addr=app._data.end_caller,"h6Sm ":row.item.addr>=app._data.begin_caller}}},computed:{main_memory_items(){return Object.entries(this.main_memory).sort(((a,b)=>a[0]-b[0])).map((a=>a[1]))}},template:'\t'+""+'
'+' '+' '+" "+"\t '+"\t"+'\t '+"\t "+"\t "+"\t"+'\t '+'\t '+'\t
'+'\t "+"\t {{item2.name[0]}}"+"\t "+'\t "+"\t "+'\t "+"\t {{item2.name[0]}}"+"\t "+'\t "+"\t "+'\t "+"\t {{item2.name[0]}}"+"\t "+'\t "+"\t "+"\t"+"\t
"+"\t
"+"\t "+"\t"+'\t '+' '+"\t {{row.item.addr_begin}} - {{row.item.addr_end}}"+"\t "+"\t "+"\t"+'\t '+' '+' \t\t'+""+'\t \t'+"\t \t{{item.byte.toUpperCase()}}"+"\t \t "+""+'\t \t'+"\t \t{{item.tag}}"+"\t \t "+'\t \t '+'\t \t'+"\t \t{{item.byte.toUpperCase()}}"+"\t \t "+""+" \t\t "+"\t "+"\t "+"\t"+'\t '+' '+" {{row.item.value}}"+'\t '+"\t "+"\t "+"\t "+" "+""+" "+" "+""+' '+" "+""+' '+' \t'+" Stack memory keys: "+" \t "+""+' \tFree stack '+' \tCallee: {{callee_subrutine}} '+' \tCaller: {{caller_subrutine}} '+' \t••• {{track_stack_names.length - 2}} '+' \tSystem stack '+"
"+""+" "+" "+" "+""+"
"};Vue.component("table-mem",uielto_memory);var uielto_stats={props:{data_mode:{type:String,required:true},stats:{type:Array,required:true},stats_value:{type:Number,required:true}},template:'\t'+'\t
'+"\t"+'\t
'+'\t '+'\t '+"\t "+"\t"+'\t '+'\t '+"\t "+"\t "+"\t
"+"\t
"};Vue.component("stats",uielto_stats);var uielto_stats_plot={components:{apexchart:VueApexCharts},props:{stats_value:{type:Number,required:true}},data:function(){return{chartOptions:{colors:["red","blue","yellow","purple","green","orange","gray","pink","teal","black","lime","indigo","cyan"],chart:{id:"graphic",type:"donut"},labels:["Arithmetic integer","Arithmetic floating point","Logic","Transfer between registers","Memory access","Comparison","I/O","Syscall","Control","Function call","Conditional bifurcation","Unconditional bifurcation","Other"],dataLabels:{enabled:true},donut:{labels:{show:true,total:{show:true,showAlways:true,label:"Total"}}},fill:{type:"gradient",gradient:{shade:"dark",type:"horizontal",shadeIntensity:.5,gradientToColors:undefined,inverseColors:true,opacityFrom:1,opacityTo:1,stops:[0,50,100],colorStops:[]},colors:["red","blue","yellow","purple","green","orange","gray","pink","teal","black","lime","indigo","cyan"]},legend:{formatter:function(val,opts){return val+" - "+opts.w.globals.series[opts.seriesIndex]}},plotOptions:{pie:{donut:{labels:{show:true,total:{show:true,showAlways:true,color:"black",formatter:function(w){return w.globals.seriesTotals.reduce(((a,b)=>a+b),0)}}}}}}}}},template:' "};Vue.component("plot-stats",uielto_stats_plot);var uielto_stats_table={props:{stats:{type:Array,required:true}},data:function(){return{statsFields:{type:{label:"Type",sortable:true},number_instructions:{label:"Number of instructions",sortable:true},percentage:{label:"Percentage",sortable:true}}}},template:"\t'+"\t"};Vue.component("table-stats",uielto_stats_table);var uielto_monitor={props:{display:{type:String,required:true}},template:'\t'+'\t
'+'\t
'+'\t '+"\t
"+'\t
'+'\t '+"\t "+"\t
"+"\t
"+"\t
"};Vue.component("monitor",uielto_monitor);var uielto_keyboard={props:{keyboard:{type:String,required:true},enter:{type:String,required:true}},methods:{consoleClear(){app._data.keyboard="";app._data.display=""},consoleEnter(){if(keyboard!=""){consoleMutex=true}},debounce:_.debounce((function(param,e){console_log(param);console_log(e);e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");var re=new RegExp("'","g");e=e.replace(re,'"');re=new RegExp("[\f]","g");e=e.replace(re,"\\f");re=new RegExp("[\n]","g");e=e.replace(re,"\\n");re=new RegExp("[\r]","g");e=e.replace(re,"\\r");re=new RegExp("[\t]","g");e=e.replace(re,"\\t");re=new RegExp("[\v]","g");e=e.replace(re,"\\v");if(e==""){this[param]=null;return}console_log("this."+param+"= '"+e+"'");eval("this."+param+"= '"+e+"'");app.$forceUpdate()}),getDebounceTime())},template:'\t'+'\t
'+'\t
'+'\t '+"\t
"+'\t
'+'\t '+"\t "+"\t
"+"\t
"+"\t"+'\t
'+'\t
'+"\t "+"\t
"+'\t
'+'\t "+"\t
"+'\t
'+'\t "+"\t
"+"\t"+"\t
"+"\t
"};Vue.component("keyboard",uielto_keyboard);function getDebounceTime(){if(screen.width>768){return 500}else{return 1e3}}function show_notification(msg,type){app._data.alertMessage=msg;app._data.type=type;app.$bvToast.toast(app._data.alertMessage,{variant:app._data.type,solid:true,toaster:"b-toaster-top-center",autoHideDelay:app._data.notificationTime});var date=new Date;notifications.push({mess:app._data.alertMessage,color:app._data.type,time:date.getHours()+":"+date.getMinutes()+":"+date.getSeconds(),date:date.getDate()+"/"+(date.getMonth()+1)+"/"+date.getFullYear()});return true}function show_loading(){if(toHandler!=null){return}toHandler=setTimeout((function(){$("#loading").show();toHandler=null}),500)}function hide_loading(){if(toHandler!=null){clearTimeout(toHandler);toHandler=null}$("#loading").hide()}function btn_glow(btn_name,post_label){var buttonDec="#popoverValueContent"+btn_name+post_label;var buttonHex="#popoverValueContent"+btn_name;$(buttonDec).attr("style","background-color:#c2c2c2;");$(buttonHex).attr("style","background-color:#c2c2c2;");setTimeout((function(){$(buttonDec).attr("style","background-color:#f5f5f5;");$(buttonHex).attr("style","background-color:#f5f5f5;")}),500)}var toHandler=null;try{window.app=new Vue({el:"#app",data:{version:"",creator_mode:"load_architecture",notificationTime:1500,autoscroll:true,fontSize:15,c_debug:false,dark:false,arch_available:architecture_available,back_card:back_card,date_copy:"",showLoadArch:false,name_arch:"",description_arch:"",load_arch:"",modalDeletArch:{title:"",index:0},architecture_name:"",number_bits:32,architecture:architecture,architecture_hash:architecture_hash,name_arch_save:"",advanced_mode:true,memory_layout:["","","","","",""],modalResetMem:{title:"",element:""},align:false,archFields:["name","ID","nbits","default_value","properties","actions"],componentsTypes:componentsTypes,simple_reg:[],modalResetArch:{title:"",element:""},showNewComponent:false,showEditComponent:false,modalEditComponent:{title:"",element:""},modalDeletComp:{title:"",element:""},showNewElement:false,showEditElement:false,modalNewElement:{title:"",element:"",type:"",double_precision:"",simple1:"",simple2:""},modalEditElement:{title:"",element:"",type:"",double_precision:"",simple1:"",simple2:""},modalDeletElement:{title:"",element:""},formArchitecture:{name:"",id:"",type:"",defValue:"",properties:[],precision:""},instFields:["name","co","cop","nwords","properties","signatureRaw","fields","definition","actions"],instructionsTypes:instructionsTypes,modalViewFields:{title:"",element:"",co:"",cop:""},modalResetInst:{title:"",element:""},showNewInstruction:false,showEditInstruction:false,instructionFormPage:1,instructionFormPageLink:["#Principal","#Fields","#Syntax","#Definition","#Help"],modalEditInst:{title:"",element:"",co:"",cop:""},modalDeletInst:{title:"",element:"",index:0},formInstruction:{name:"",type:"",co:"",cop:"",nwords:1,help:"",properties:[],numfields:"1",numfieldsAux:"1",nameField:[],typeField:[],separated:[],startBitField:[],stopBitField:[],valueField:[],assignedCop:false,signature:"",signatureRaw:"",signature_definition:"",definition:""},pseudoinstFields:["name","nwords","signatureRaw","fields","definition","actions"],modalResetPseudoinst:{title:"",element:""},showNewPseudoinstruction:false,showEditPseudoinstruction:false,modalEditPseudoinst:{title:"",element:"",index:0},modalDeletPseudoinst:{title:"",element:"",index:0},formPseudoinstruction:{name:"",nwords:1,numfields:"0",numfieldsAux:"0",nameField:[],typeField:[],startBitField:[],stopBitField:[],signature:"",signatureRaw:"",signature_definition:"",definition:"",help:""},directivesFields:["name","action","size","actions"],actionTypes:actionTypes,modalResetDir:{title:"",element:""},showNewDirective:false,showEditDirective:false,modalEditDirective:{title:"",element:""},modalDeletDir:{title:"",element:""},formDirective:{name:"",action:"",size:0},fragmentData:["inm-signed","inm-unsigned","address","offset_bytes","offset_words"],example_available:example_available,example_loaded:null,load_assembly:"",save_assembly:"",modalAssemblyError:{code1:"",code2:"",code3:"",error:""},name_binary_load:"",load_binary:false,update_binary:update_binary,name_binary_save:"",assembly_code:"",alertMessage:"",type:"",notifications:notifications,browser:"",instructionsPacked:20,runExecution:false,resetBut:false,instructions:instructions,register_type:"integer",name_tab_Reg:"Decimal",name_reg:"INT Registers",reg_type:"int",register_popover:"",data_mode:"registers",newValue:"",reg_representation:"signed",reg_representation_options:[{text:"Signed",value:"signed"},{text:"Unsigned",value:"unsigned"},{text:"IEEE 754",value:"decimal"},{text:"Hexadecimal",value:"hex"}],reg_name_representation:"logical",reg_name_representation_options:[{text:"Name",value:"logical"},{text:"Alias",value:"alias"},{text:"All",value:"all"}],memory:memory,memory_hash:["data_memory","instructions_memory","stack_memory"],main_memory:{},row_index:null,selected_space_view:null,selected_stack_view:null,track_stack_names:track_stack_names,callee_subrutine:"",caller_subrutine:"",stack_pointer:0,begin_caller:0,end_caller:0,begin_callee:0,end_callee:0,totalStats:totalStats,stats:stats,stats_value:stats_value,display:"",keyboard:"",enter:null},created(){this.load_num_version();this.load_arch_available();this.detectBrowser()},mounted(){this.backupCopyModal();this.verifyBrowser();this.get_configuration();var url_hash=creator_preload_get2hash(window.location);creator_preload_fromHash(this,url_hash)},beforeUpdate(){this.get_dark_mode()},methods:{load_num_version(){$.getJSON("package.json",(function(cfg){creator_information=cfg;app._data.version=cfg.version}))},verifyBrowser(){if(navigator.userAgent.indexOf("OPR")>-1){this.$refs.browser.show()}else if(navigator.userAgent.indexOf("MIE")>-1){this.$refs.browser.show()}else if(navigator.userAgent.indexOf("Edge")>-1){this.$refs.browser.show()}else if(navigator.userAgent.indexOf("Chrome")>-1){return}else if(navigator.userAgent.indexOf("Safari")>-1){return}else if(navigator.userAgent.indexOf("Firefox")>-1){return}else{this.$refs.browser.show()}},get_configuration(){if(localStorage.getItem("instructionsPacked")!=null){this.instructionsPacked=parseInt(localStorage.getItem("instructionsPacked"))}if(localStorage.getItem("autoscroll")!=null){this.autoscroll=localStorage.getItem("autoscroll")==="true"}if(localStorage.getItem("notificationTime")!=null){this.notificationTime=parseInt(localStorage.getItem("notificationTime"))}},get_dark_mode(){if(localStorage.getItem("dark_mode")!=null){document.getElementsByTagName("body")[0].style=localStorage.getItem("dark_mode");if(localStorage.getItem("dark_mode")==""){app._data.dark=false}else{app._data.dark=true}}else{var default_style=window.matchMedia("(prefers-color-scheme: dark)").matches;if(default_style==true){document.getElementsByTagName("body")[0].style="filter: invert(88%) hue-rotate(160deg) !important; background-color: #111 !important;";app._data.dark=true}else{document.getElementsByTagName("body")[0].style="";app._data.dark=false}}},change_UI_mode(e){if(app._data.creator_mode!=e){if(app._data.creator_mode=="architecture"){app._data.advanced_mode=true}if(textarea_assembly_editor!=null&&e!="assembly"){app._data.assembly_code=textarea_assembly_editor.getValue();code_assembly=textarea_assembly_editor.getValue();codemirrorHistory=textarea_assembly_editor.getHistory();textarea_assembly_editor.toTextArea()}app._data.register_popover="";if(e=="architecture"){$(".loading").show();setTimeout((function(){app._data.creator_mode=e;app.$forceUpdate();$(".loading").hide()}),50);return}app._data.creator_mode=e;if(e=="assembly"){setTimeout((function(){codemirrorStart();if(codemirrorHistory!=null){textarea_assembly_editor.setHistory(codemirrorHistory);textarea_assembly_editor.undo()}textarea_assembly_editor.setValue(code_assembly);if(app._data.update_binary!=""){$("#divAssembly").attr("class","col-lg-10 col-sm-12");$("#divTags").attr("class","col-lg-2 col-sm-12");$("#divTags").show()}}),50)}app.$forceUpdate()}},changeToSeparateValue(val,pos){if(val){this.formInstruction.startBitField[pos]=[0];this.formInstruction.stopBitField[pos]=[0];if(this.formInstruction.typeField[pos]=="co")this.formInstruction.co=["0"]}else{this.formInstruction.startBitField[pos]=0;this.formInstruction.stopBitField[pos]=0;if(this.formInstruction.typeField[pos]=="co")this.formInstruction.co="0"}},addMoreFieldsToSeparateValues(event,pos){this.formInstruction.startBitField[pos].push(0);this.formInstruction.stopBitField[pos].push(0);if(this.formInstruction.typeField[pos]=="co")this.formInstruction.co.push("0");app.$forceUpdate()},lessFieldsToSeparateValues(event,pos){this.formInstruction.startBitField[pos].pop();this.formInstruction.stopBitField[pos].pop();if(this.formInstruction.typeField[pos]=="co")this.formInstruction.co.pop();app.$forceUpdate()},load_arch_available(){$.getJSON("architecture/available_arch.json"+"?v="+(new Date).getTime(),(function(cfg){architecture_available=cfg;if(typeof Storage!=="undefined"){if(localStorage.getItem("load_architectures_available")!=null){var auxArch=localStorage.getItem("load_architectures_available");var aux=JSON.parse(auxArch);for(var i=0;i{c.elements.forEach(((e,j)=>{if(e.default_value)e.value=e.default_value;else e.value="0"}))}));var textToWrite=JSON.stringify(auxArchitecture,null,2);var textFileAsBlob=new Blob([textToWrite],{type:"text/json"});var fileNameToSaveAs;if(this.name_arch_save==""){fileNameToSaveAs="architecture.json"}else{fileNameToSaveAs=this.name_arch_save+".json"}var downloadLink=document.createElement("a");downloadLink.download=fileNameToSaveAs;downloadLink.innerHTML="My Hidden Link";window.URL=window.URL||window.webkitURL;downloadLink.href=window.URL.createObjectURL(textFileAsBlob);downloadLink.onclick=destroyClickedElement;downloadLink.style.display="none";document.body.appendChild(downloadLink);downloadLink.click();show_notification("Save architecture","success")},change_mode(){if(app._data.advanced_mode==false){app._data.advanced_mode=true}else{app._data.advanced_mode=false}},resetMemModal(elem,button){this.modalResetMem.title="Reset memory layout";this.modalResetMem.element=elem;this.$root.$emit("bv::show::modal","modalResetMem",button)},resetMemory(arch){show_loading();for(var i=0;iauxMemoryLayout[j].value){show_notification("The segment can not be overlap","danger");return}}}for(var i=0;i<6;i++){architecture.memory_layout[i].value=auxMemoryLayout[i].value}app._data.architecture=architecture;backup_stack_address=architecture.memory_layout[4].value;backup_data_address=architecture.memory_layout[3].value;for(var i=0;i<6;i++){app._data.memory_layout[i]=""}app.$forceUpdate()},element_id(name,type,double){var id=0;for(var i=0;ithis.formInstruction.nwords*32){this.formInstruction.numfieldsAux=this.formInstruction.nwords*32;this.formInstruction.numfields=this.formInstruction.nwords*32}else if(this.formInstruction.numfields<1){this.formInstruction.numfieldsAux=1;this.formInstruction.numfields=1}else{this.formInstruction.numfieldsAux=this.formInstruction.numfields}}if(type==1){if(this.formPseudoinstruction.numfields>this.formPseudoinstruction.nwords*32){this.formPseudoinstruction.numfieldsAux=this.formPseudoinstruction.nwords*32;this.formPseudoinstruction.numfields=this.formPseudoinstruction.nwords*32}else if(this.formPseudoinstruction.numfields<0){this.formPseudoinstruction.numfieldsAux=0;this.formPseudoinstruction.numfields=0}else{this.formPseudoinstruction.numfieldsAux=this.formPseudoinstruction.numfields}}},viewFielsInst(elem,co,cop,button){this.modalViewFields.title="Fields of "+elem;this.modalViewFields.element=elem;for(var i=0;iisNaN(val))))show_notification("The field co must be numbers","danger");else if(isNaN(this.formInstruction.cop)){show_notification("The field cop must be numbers","danger")}else if(typeof this.formInstruction.co!="object"&&this.formInstruction.co.length!=this.formInstruction.startBitField[0]-this.formInstruction.stopBitField[0]+1){show_notification("The length of co should be "+(this.formInstruction.startBitField[0]-this.formInstruction.stopBitField[0]+1)+" binary numbers","danger")}else if(typeof this.formInstruction.co==="object"&&this.formInstruction.co.some(((val,ind)=>val.length!==app.formInstruction.startBitField[0][ind]-app.formInstruction.stopBitField[0][ind]+1)))show_notification("The length of co don't match with the desription","danger");else{this.newInstruction()}},newInstruction(){for(var i=0;ithis.formInstruction.co instanceof Array?this.formInstrucion.co.join(""):this.formInstruction.co)()+this.formInstruction.cop;for(var i=0;ithis.formInstruction.separated[i]||false));architecture.instructions.push(newInstruction);for(var i=0;iparseInt(val))),stopbit:!this.formInstruction.separated[i]?parseInt(this.formInstruction.stopBitField[i]):this.formInstruction.stopBitField[i].map((val=>parseInt(val))),valueField:this.formInstruction.valueField[i]};architecture.instructions[architecture.instructions.length-1].fields.push(newField)}},editInstModal(elem,co,cop,button){this.modalEditInst.title="Edit Instruction";this.modalEditInst.element=elem;for(var i=0;iisNaN(val))))show_notification("The field co must be numbers","danger");else if(isNaN(this.formInstruction.cop)){show_notification("The field cop must be numbers","danger")}else if(typeof this.formInstruction.co!="object"&&this.formInstruction.co.length!=this.formInstruction.startBitField[0]-this.formInstruction.stopBitField[0]+1){show_notification("The length of co should be "+(this.formInstruction.startBitField[0]-this.formInstruction.stopBitField[0]+1)+" binary numbers","danger")}else if(typeof this.formInstruction.co==="object"&&this.formInstruction.co.some(((val,ind)=>val.length!==app.formInstruction.startBitField[0][ind]-app.formInstruction.stopBitField[0][ind]+1)))show_notification("The length of co don't match with the desription","danger");else{this.editInstruction(inst,co,cop)}},editInstruction(comp,co,cop){var exCop=false;for(var z=1;zthis.formInstruction.co instanceof Array?this.formInstrucion.co.join(""):this.formInstruction.co)()+this.formInstruction.cop;for(var i=0;iparseInt(val)));architecture.instructions[i].fields[j].stopbit=!this.formInstruction.separated[j]?parseInt(this.formInstruction.stopBitField[j]):this.formInstruction.stopBitField[j].map((val=>parseInt(val)));architecture.instructions[i].fields[j].valueField=this.formInstruction.valueField[j];architecture.instructions[i].separated[j]=this.formInstruction.separated[j]}else{var newField={name:this.formInstruction.nameField[j],type:this.formInstruction.typeField[j],startbit:this.formInstruction.startBitField[j],stopbit:this.formInstruction.stopBitField[j],valueField:this.formInstruction.valueField[j]};architecture.instructions[i].fields.push(newField)}}this.generateSignatureInst();var signature=this.formInstruction.signature;var signatureRaw=this.formInstruction.signatureRaw;if(exCop==false){architecture.instructions[i].cop=""}architecture.instructions[i].signature=signature;architecture.instructions[i].signatureRaw=signatureRaw;if(architecture.instructions[i].fields.length>this.formInstruction.numfields){architecture.instructions[i].fields.splice(this.formInstruction.numfields,architecture.instructions[i].fields.length-this.formInstruction.numfields)}break}}show_notification("The instruction has been modified, please check the definition of the pseudoinstructions","info")},delInstModal(elem,index,button){this.modalDeletInst.title="Delete Instruction";this.modalDeletInst.element=elem;this.modalDeletInst.index=index;this.$root.$emit("bv::show::modal","modalDeletInst",button)},delInstruction(index){architecture.instructions.splice(index,1)},generateSignatureInst(){var signature=this.formInstruction.signature_definition;var re=new RegExp("^ +");this.formInstruction.signature_definition=this.formInstruction.signature_definition.replace(re,"");re=new RegExp(" +","g");this.formInstruction.signature_definition=this.formInstruction.signature_definition.replace(re," ");re=new RegExp("^ +");signature=signature.replace(re,"");re=new RegExp(" +","g");signature=signature.replace(re," ");for(var z=0;zthis.formPseudoinstruction.numfields){architecture.pseudoinstructions[index].fields.splice(this.formPseudoinstruction.numfields,architecture.pseudoinstructions[i].fields.length-this.formPseudoinstruction.numfields)}},delPseudoinstModal(elem,index,button){this.modalDeletPseudoinst.title="Delete Pseudointruction";this.modalDeletPseudoinst.element=elem;this.modalDeletPseudoinst.index=index;this.$root.$emit("bv::show::modal","modalDeletPseudoinst",button)},delPseudoinstruction(index){architecture.pseudoinstructions.splice(index,1)},pseudoDefValidator(name,definition,fields){var re=new RegExp("^\n+");definition=definition.replace(re,"");re=new RegExp("\n+","g");definition=definition.replace(re,"");var newDefinition=definition;re=/{([^}]*)}/g;var code=re.exec(definition);if(code!=null){while(code!=null){console_log(code);var instructions=code[1].split(";");if(instructions.length==1){show_notification('Enter a ";" at the end of each line of code',"danger");return-1}for(var j=0;jfieldsLength){show_notification("Immediate number "+instructionParts[z]+" is too big","danger");return-1}}else if(instructionParts[z].match(/^(\d)+\.(\d)+/)){if(isNaN(parseFloat(instructionParts[z]))==true){show_notification("Immediate number "+instructionParts[z]+" is not valid","danger");return-1}if(this.float2bin(parseFloat(instructionParts[z])).length>fieldsLength){show_notification("Immediate number "+instructionParts[z]+" is too big","danger");return-1}}else if(isNaN(parseInt(instructionParts[z]))){}else{var numAux=parseInt(instructionParts[z],10);if(isNaN(parseInt(instructionParts[z]))==true){show_notification("Immediate number "+instructionParts[z]+" is not valid","danger");return-1}var comNumPos=Math.pow(2,fieldsLength-1);var comNumNeg=comNumPos*-1;comNumPos=comNumPos-1;console_log(comNumPos);console_log(comNumNeg);if(parseInt(instructionParts[z],10)>comNumPos||parseInt(instructionParts[z],10)fieldsLength){show_notification("Address "+instructionParts[z]+" is too big","danger");return-1}}}if(!found){show_notification("Register "+instructionParts[z]+" not found","danger");return-1}}}}if(!found){show_notification("Instruction "+instructions[j]+" do not exists","danger");return-1}}definition=definition.replace(code[0],"");re=/{([^}]*)}/g;code=re.exec(definition)}}else{var instructions=definition.split(";");console_log(instructions.length);if(instructions.length==1){show_notification('Enter a ";" at the end of each line of code',"danger");return-1}for(var j=0;jfieldsLength){show_notification("Immediate number "+instructionParts[z]+" is too big","danger");return-1}}else if(instructionParts[z].match(/^(\d)+\.(\d)+/)){if(isNaN(parseFloat(instructionParts[z]))==true){show_notification("Immediate number "+instructionParts[z]+" is not valid","danger");return-1}if(this.float2bin(parseFloat(instructionParts[z])).length>fieldsLength){show_notification("Immediate number "+instructionParts[z]+" is too big","danger");return-1}}else if(isNaN(parseInt(instructionParts[z]))){}else{var numAux=parseInt(instructionParts[z],10);if(isNaN(parseInt(instructionParts[z]))==true){show_notification("Immediate number "+instructionParts[z]+" is not valid","danger");return-1}var comNumPos=Math.pow(2,fieldsLength-1);var comNumNeg=comNumPos*-1;comNumPos=comNumPos-1;console_log(comNumPos);console_log(comNumNeg);if(parseInt(instructionParts[z],10)>comNumPos||parseInt(instructionParts[z],10)fieldsLength){show_notification("Address "+instructionParts[z]+" is too big","danger");return-1}}}if(!found){show_notification("Register "+instructionParts[z]+" not found","danger");return-1}}}}if(!found){show_notification("Instruction "+instructions[j]+" do not exists","danger");return-1}}}return 0},generateSignaturePseudo(){var signature=this.formPseudoinstruction.signature_definition;var re=new RegExp("^ +");this.formPseudoinstruction.signature_definition=this.formPseudoinstruction.signature_definition.replace(re,"");re=new RegExp(" +","g");this.formPseudoinstruction.signature_definition=this.formPseudoinstruction.signature_definition.replace(re," ");re=new RegExp("^ +");signature=signature.replace(re,"");re=new RegExp(" +","g");signature=signature.replace(re," ");for(var z=0;z{setTimeout((function(){if(typeof code!=="undefined"){code_assembly=code}else{code_assembly=textarea_assembly_editor.getValue()}var ret=assembly_compiler();app._data.totalStats=0;app._data.instructions=instructions;if(false==OLD_CODE_ACTIVE){}else{app._data.memory[memory_hash[1]]=memory[memory_hash[1]];app._data.memory[memory_hash[0]]=memory[memory_hash[0]];app._data.memory[memory_hash[2]]=memory[memory_hash[2]]}tokenIndex=0;app.reset(true);if(typeof Storage!=="undefined"){var auxObject=jQuery.extend(true,{},architecture);var auxArchitecture=register_value_serialize(auxObject);var auxArch=JSON.stringify(auxArchitecture,null,2);var date=new Date;var auxDate=date.getHours()+":"+date.getMinutes()+":"+date.getSeconds()+" - "+date.getDate()+"/"+(date.getMonth()+1)+"/"+date.getFullYear();console_log(app._data.architecture_name);localStorage.setItem("arch_name",app._data.architecture_name);localStorage.setItem("architecture_copy",auxArch);localStorage.setItem("assembly_copy",code_assembly);localStorage.setItem("date_copy",auxDate)}hide_loading();switch(ret.type){case"error":app.compileError(ret.msg,ret.token,ret.line);break;case"warning":show_notification(ret.token,ret.bgcolor);break;default:show_notification("Compilation completed successfully","success");break}resolve("0")}),25)}))},newAssembly(){textarea_assembly_editor.setValue("")},read_assembly(e){show_loading();var file;var reader;var files=document.getElementById("assembly_file").files;for(var i=0;i{if(message=="-1"){return}if(false==OLD_CODE_ACTIVE){}else{if(memory[memory_hash[0]].length!=0){show_notification("You can not enter data in a library","danger");return}}for(var i=0;i0){app.modalAssemblyError.line1=line;app.modalAssemblyError.code1=code_assembly_segment[line-1]}app.modalAssemblyError.line2=line+1;app.modalAssemblyError.code2=code_assembly_segment[line];app.modalAssemblyError.line3="";app.modalAssemblyError.code3="";if(line=0){this.browser="Chrome"}else if(navigator.userAgent.search("Firefox")>=0){this.browser="Firefox"}else if(navigator.userAgent.search("Safari")>=0&&navigator.userAgent.search("Chrome")<0){this.browser="Chrome"}},executeInstruction(){creator_ga("execute","execute.instruction","execute.instruction");var ret=executeInstruction();if(typeof ret==="undefined"){console.log("AQUI hemos llegado y un poema se ha encontrado...")}if(ret.msg!=null){show_notification(ret.msg,ret.type)}if(ret.draw!=null){for(var i=0;i=0&&executionIndex+40&&executionIndex+4>=instructions.length){$(".instructions_table").animate({scrollTop:$(".instructions_table").height()},300)}}if(app._data.data_mode=="stats"){ApexCharts.exec("graphic","updateSeries",stats_value)}return}},executeProgram(but){creator_ga("execute","execute.run","execute.run");app._data.runExecution=true;app._data.runExecution=false;runProgram=true;if(instructions.length==0){show_notification("No instructions in memory","danger");runProgram=false;return}if(executionIndex<-1){show_notification("The program has finished","danger");runProgram=false;return}if(executionIndex==-1){show_notification("The program has finished with errors","danger");runProgram=false;return}$("#stopExecution").show();$("#playExecution").hide();this.programExecutionInst(but)},programExecutionInst(but){for(var i=0;i=0;i++){if(mutexRead==true){iter1=1;$("#stopExecution").hide();$("#playExecution").show();runProgram=false;return}else if(instructions[executionIndex].Break==true&&iter1==0){iter1=1;$("#stopExecution").hide();$("#playExecution").show();runProgram=false;return}else if(this.runExecution==true){app._data.runExecution=false;iter1=1;$("#stopExecution").hide();$("#playExecution").show();runProgram=false;return}else if(but==true&&i==0){app._data.resetBut=false}else if(this.resetBut==true){app._data.resetBut=false;$("#stopExecution").hide();$("#playExecution").show();runProgram=false;return}else{this.executeInstruction();iter1=0}}if(executionIndex>=0){setTimeout(this.programExecutionInst,15)}else{$("#stopExecution").hide();$("#playExecution").show()}},stopExecution(){app._data.runExecution=true},exception(error){show_notification("There has been an exception. Error description: '"+error,"danger");instructions[executionIndex]._rowVariant="danger";executionIndex=-1;creator_ga("execute","execute.exception","execute.exception."+error);return},reset(reset_graphic){creator_ga("execute","execute.reset","execute.reset");show_loading();setTimeout((function(){app._data.resetBut=true;app._data.keyboard="";app._data.display="";app._data.enter=null;for(var i=0;i=0&&executionIndex+40&&executionIndex+4>=instructions.length){$(".instructions_table").animate({scrollTop:$(".instructions_table").height()},300)}if(reset_graphic==true&&app._data.data_mode=="stats"){ApexCharts.exec("graphic","updateSeries",stats_value)}hide_loading()}),25)},consoleEnter(){if(this.keyboard!=""){consoleMutex=true}},consoleClear(){this.keyboard="";this.display=""},hex2float(hexvalue){var value=hexvalue.split("x");var value_bit="";for(var i=0;i>0}else if(app._data.selected_space_view=="unsig_int"){var hex="";for(var j=0;j<4;j++){hex=memory[memory_hash[0]][app._data.row_index].Binary[j].Bin+hex}memory[memory_hash[0]][app._data.row_index].Value=parseInt(hex,16)>>>0}else if(app._data.selected_space_view=="float"){var hex="";for(var j=0;j<4;j++){hex=memory[memory_hash[0]][app._data.row_index].Binary[j].Bin+hex}memory[memory_hash[0]][app._data.row_index].Value=this.hex2float("0x"+hex)}else if(app._data.selected_space_view=="char"){var hex="";for(var j=0;j<4;j++){hex=memory[memory_hash[0]][app._data.row_index].Binary[j].Bin+hex}memory[memory_hash[0]][app._data.row_index].Value=this.hex2char8(hex)}var i=1;while(app._data.row_index+i>0}else if(app._data.selected_space_view=="unsig_int"){var hex="";for(var j=0;j<4;j++){hex=memory[memory_hash[0]][app._data.row_index+i].Binary[j].Bin+hex}memory[memory_hash[0]][app._data.row_index+i].Value=parseInt(hex,16)>>>0}else if(app._data.selected_space_view=="float"){var hex="";for(var j=0;j<4;j++){hex=memory[memory_hash[0]][app._data.row_index+i].Binary[j].Bin+hex}memory[memory_hash[0]][app._data.row_index+i].Value=this.hex2float("0x"+hex)}else if(app._data.selected_space_view=="char"){var hex="";for(var j=0;j<4;j++){hex=memory[memory_hash[0]][app._data.row_index+i].Binary[j].Bin+hex}memory[memory_hash[0]][app._data.row_index+i].Value=this.hex2char8(hex)}i++}app._data.memory=memory}},hide_space_modal(){app._data.selected_space_view=null},change_stack_view(){if(false==OLD_CODE_ACTIVE){}else{if(app._data.selected_stack_view=="sig_int"){var hex="";for(var j=0;j<4;j++){hex=memory[memory_hash[2]][app._data.row_index].Binary[j].Bin+hex}memory[memory_hash[2]][app._data.row_index].Value=parseInt(hex,16)>>0}else if(app._data.selected_stack_view=="unsig_int"){var hex="";for(var j=0;j<4;j++){hex=memory[memory_hash[2]][app._data.row_index].Binary[j].Bin+hex}memory[memory_hash[2]][app._data.row_index].Value=parseInt(hex,16)>>>0}else if(app._data.selected_stack_view=="float"){var hex="";for(var j=0;j<4;j++){hex=memory[memory_hash[2]][app._data.row_index].Binary[j].Bin+hex}memory[memory_hash[2]][app._data.row_index].Value=this.hex2float("0x"+hex)}else if(app._data.selected_stack_view=="char"){var hex="";for(var j=0;j<4;j++){hex=memory[memory_hash[2]][app._data.row_index].Binary[j].Bin+hex}memory[memory_hash[2]][app._data.row_index].Value=this.hex2char8(hex)}app._data.memory=memory}},hide_stack_modal(){app._data.selected_stack_view=null},debounce:_.debounce((function(param,e){console_log(param);console_log(e);e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");var re=new RegExp("'","g");e=e.replace(re,'"');re=new RegExp("[\f]","g");e=e.replace(re,"\\f");re=new RegExp("[\n]","g");e=e.replace(re,"\\n");re=new RegExp("[\r]","g");e=e.replace(re,"\\r");re=new RegExp("[\t]","g");e=e.replace(re,"\\t");re=new RegExp("[\v]","g");e=e.replace(re,"\\v");if(e==""){this[param]=null;return}console_log("this."+param+"= '"+e+"'");eval("this."+param+"= '"+e+"'");app.$forceUpdate()}),getDebounceTime())}});Vue.config.errorHandler=function(err,vm,info){show_notification("An error has ocurred, the simulator is going to restart. \n Error: "+err,"danger");setTimeout((function(){location.reload(true)}),3e3)};window.onbeforeunload=confirmExit;function confirmExit(){return"He's tried to get off this page. Changes may not be saved."}function getDebounceTime(){if(screen.width>768){return 500}else{return 1e3}}function destroyClickedElement(event){document.body.removeChild(event.target)}function console_log(m){if(app._data.c_debug){console.log(m)}}function codemirrorStart(){var editor_cfg={lineNumbers:true,autoRefresh:true};var textarea_assembly_obj=document.getElementById("textarea_assembly");if(textarea_assembly_obj!=null){textarea_assembly_editor=CodeMirror.fromTextArea(textarea_assembly_obj,editor_cfg);textarea_assembly_editor.setOption("keyMap","sublime");textarea_assembly_editor.setValue(app._data.assembly_code);textarea_assembly_editor.setSize("auto","70vh");var map={"Ctrl-M":function(cm){cm.execCommand("toggleComment")}};textarea_assembly_editor.addKeyMap(map)}}function binaryStringToInt(b){return parseInt(b,2)}}catch(e){show_notification("An error has ocurred, the simulator is going to restart. \n Error: "+e,"danger");creator_ga("creator","creator.exception","creator.exception."+e);setTimeout((function(){location.reload(true)}),3e3)}
\ No newline at end of file
diff --git a/travis/mips/error/testerror-mips-010.out b/travis/mips/error/testerror-mips-010.out
index df5bfbb9c..cd6555170 100644
--- a/travis/mips/error/testerror-mips-010.out
+++ b/travis/mips/error/testerror-mips-010.out
@@ -1,12 +1,5 @@
-
-Error at line 11:
-The data must be aligned
-
- 10 .byte 2
-->11 max: .word 1
- 12
-
+TypeError: compileError[err_code] is not a function
Not executed
keyboard[0x0]:''; display[0x0]:'';
diff --git a/travis/mips/error/testerror-mips-045.out b/travis/mips/error/testerror-mips-045.out
index 19e6c2662..cd6555170 100644
--- a/travis/mips/error/testerror-mips-045.out
+++ b/travis/mips/error/testerror-mips-045.out
@@ -1,12 +1,5 @@
-
-Error at line 11:
-The data must be aligned
-
- 10 example: .byte 23
-->11 example2: .half 2
- 12 string: .asciiz "Hola"
-
+TypeError: compileError[err_code] is not a function
Not executed
keyboard[0x0]:''; display[0x0]:'';