Skip to content

Commit d8f87b6

Browse files
committed
2.3.6: minor update
1 parent bce8235 commit d8f87b6

File tree

8 files changed

+95
-57
lines changed

8 files changed

+95
-57
lines changed

sim_core/sim_api_core.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -386,7 +386,8 @@
386386
sp_rfid = curr_firm.stackRegister.rf_name ;
387387
sp_name = curr_firm.stackRegister.r_name ;
388388

389-
if (SIMWARE.registers.length > 1)
389+
var simware_registers_keys = Object.keys(SIMWARE.registers) ;
390+
if (simware_registers_keys.length > 1)
390391
ctrl_states.sp.state = 'BR.' + sp_rfid + '.' + sp_name ;
391392
else ctrl_states.sp.state = 'BR.' + sp_name ;
392393

sim_sw/assembly/compiler1_prepare_wepsim.js

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -294,12 +294,12 @@ function wsasm_prepare_registers ( context, CU_data )
294294
var context_rf_i = null ;
295295
var assoc_name = '' ;
296296

297-
for (i=0; i<CU_data.registers.length; i++)
298-
{
299-
cu_data_rf_i = CU_data.registers[i] ;
297+
for (let key in CU_data.registers)
298+
{
299+
cu_data_rf_i = CU_data.registers[key] ;
300300

301301
context_rf_i = {} ;
302-
context_rf_i.name = cu_data_rf_i.name ;
302+
context_rf_i.name = key ;
303303
context_rf_i.registers = [] ;
304304
for (j=0; j<cu_data_rf_i.registers.length; j++)
305305
{
@@ -312,7 +312,7 @@ function wsasm_prepare_registers ( context, CU_data )
312312
}
313313
}
314314

315-
context.registers[i] = context_rf_i ;
315+
context.registers[key] = context_rf_i ;
316316
}
317317

318318
return context ;
@@ -341,7 +341,7 @@ function wsasm_prepare_context ( CU_data, options )
341341
context.t = 0 ; // here
342342
context.comments = [] ;
343343
context.newlines = [] ;
344-
context.registers = [] ; // here
344+
context.registers = {} ; // here
345345
context.firmware = {} ; // here
346346
context.pseudoInstructions = []; // here
347347
context.stackRegister = null ;

sim_sw/assembly/compiler2_asm_obj.js

Lines changed: 23 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -226,6 +226,22 @@ function wsasm_order2index_startstop ( start_bit, stop_bit )
226226
return n_bits ;
227227
}
228228

229+
function wsasm_find_reg_in_all_rf ( context, reg_name )
230+
{
231+
var rf_item = null ;
232+
233+
for (let key in context.registers)
234+
{
235+
rf_item = context.registers[key] ;
236+
237+
if (typeof rf_item.registers[reg_name] != "undefined") {
238+
return rf_item ;
239+
}
240+
}
241+
242+
return null ;
243+
}
244+
229245

230246
//
231247
// (2/3) Compile assembly to JSON object
@@ -790,11 +806,9 @@ function wsasm_encode_instruction ( context, ret, elto, candidate )
790806
value = value.replace('(', '').replace(')', '') ;
791807
}
792808

793-
for (k=0; k<context.registers.length; k++)
794-
{
795-
if (typeof context.registers[k].registers[value] != "undefined") {
796-
value = context.registers[k].registers[value] ;
797-
}
809+
var rf_item = wsasm_find_reg_in_all_rf(context, value) ;
810+
if (rf_item != null) {
811+
value = rf_item.registers[value] ;
798812
}
799813

800814
value = (value >>> 0).toString(2) ;
@@ -885,25 +899,14 @@ function wsasm_find_instr_candidates ( context, ret, elto )
885899
return ret ;
886900
}
887901

888-
function wsasm_find_atom_rf ( context, atom )
889-
{
890-
for (var k=0; k<context.registers.length; k++)
891-
{
892-
if (typeof context.registers[k].registers[atom] != "undefined") {
893-
return k ;
894-
}
895-
}
896-
897-
return -1 ;
898-
}
899-
900902
function wsasm_src2obj_text_instr_op_match ( context, ret, elto, atom, parentheses )
901903
{
902904
var opx = '' ;
903-
var arf = wsasm_find_atom_rf(context, atom) ;
905+
var rf_item = null ;
904906

905907
// if atom is register -> $0, x0, ...
906-
if (arf != -1)
908+
rf_item = wsasm_find_reg_in_all_rf(context, atom) ;
909+
if (rf_item != null)
907910
{
908911
if (parentheses) {
909912
elto.value.fields.push('(' + atom + ')') ;
@@ -913,7 +916,7 @@ function wsasm_src2obj_text_instr_op_match ( context, ret, elto, atom, parenthes
913916
elto.value.fields.push(atom) ;
914917
elto.value.signature_type_arr.push('reg') ;
915918
}
916-
elto.value.signature_size_arr.push(context.registers[arf].registers[atom].toString(2).length) ;
919+
elto.value.signature_size_arr.push(rf_item.registers[atom].toString(2).length) ;
917920

918921
// return ok
919922
ret.error = null ;

sim_sw/firmware/firm_registers.js

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -27,13 +27,18 @@ function firm_registers_write ( context )
2727
if (typeof context.registers == "undefined") {
2828
return o ;
2929
}
30-
if (0 == context.registers.length) {
30+
31+
var context_registers_keys = Object.keys(context.registers) ;
32+
if (0 == context_registers_keys.length) {
3133
return o ;
3234
}
3335

3436
// return registers as string...
35-
for (m=0; m< context.registers.length; m++)
37+
var m = '' ;
38+
for (var k=0; k < context_registers_keys.length; k++)
3639
{
40+
m = context_registers_keys[k] ;
41+
3742
// skip empty register file sections
3843
if (0 == context.registers[m].registers.length) {
3944
continue ;
@@ -115,13 +120,10 @@ function firm_registers_read ( context )
115120
frm_nextToken(context) ;
116121

117122
// find 'name' to use it or add a new one
118-
var rfi = firm_find_rf_by_name(context, rf_name) ;
119-
if (-1 == rfi) {
123+
rf_item = context.registers[rf_name] ;
124+
if (typeof rf_item == "undefined") {
120125
rf_item = { name:"default", registers:[] } ;
121-
context.registers.push(rf_item) ;
122-
}
123-
else {
124-
rf_item = context.registers[rfi] ;
126+
context.registers[rf_name] = rf_item ;
125127
}
126128

127129
// while not '}'

wepsim_web/wepsim_uielto_registers.js

Lines changed: 51 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,18 @@
7171
* Auxiliar to init_x & show_x
7272
*/
7373

74+
function quick_config_find_reg ( simware, reg_name )
75+
{
76+
for (let rf_item in simware.registers)
77+
{
78+
if (typeof rf_item.registers[reg_name] != "undefined") {
79+
return rf_item ;
80+
}
81+
}
82+
83+
return null ;
84+
}
85+
7486
function hex2values_update ( index )
7587
{
7688
var sim_eltos = simhw_sim_states() ;
@@ -186,13 +198,15 @@
186198
var sim_eltos = simhw_sim_states() ;
187199
var SIMWARE = get_simware() ;
188200
var o2 = "" ;
201+
var rf_item = null ;
189202

190203
// get: [ 'r10', 'la' ]
191204
var logical_defined = [] ;
192-
for (var index=0; index < sim_eltos.BR.length; index++)
205+
for (var index=0; index<sim_eltos.BR.length; index++)
193206
{
194-
if (typeof SIMWARE.registers[0].registers[index] !== "undefined") { // TODO: 0 -> rf_index
195-
logical_defined = SIMWARE.registers[0].registers[index] ;
207+
rf_item = quick_config_find_reg(SIMWARE, index) ;
208+
if (rf_item != null) {
209+
logical_defined = rf_item.registers[index] ;
196210
break;
197211
}
198212
}
@@ -260,23 +274,24 @@
260274
function wepsim_refresh_rf_names_mkname ( disp_name, SIMWARE, rf_index, index, logical_index )
261275
{
262276
var br_value = "" ;
277+
var r_item = SIMWARE.registers[rf_index].registers[index] ;
263278

264279
// numerical name
265-
if ( ('logical' != disp_name) || (typeof SIMWARE.registers[rf_index].registers[index] == "undefined") ) {
280+
if ( ('logical' != disp_name) || (typeof r_item == "undefined") ) {
266281
br_value = "R" + index ;
267282
br_value = br_value.padEnd(3,' ') ;
268283
return br_value ;
269284
}
270285

271286
// all logical name
272287
if (logical_index == 0) {
273-
br_value = SIMWARE.registers[rf_index].registers[index].join('|') ;
288+
br_value = r_item.join('|') ;
274289
br_value = br_value.padEnd(6,' ') ;
275290
return br_value ;
276291
}
277292

278293
// get logical name
279-
br_value = SIMWARE.registers[rf_index].registers[index][logical_index - 1] ;
294+
br_value = r_item[logical_index - 1] ;
280295
if (typeof br_value == "undefined") {
281296
br_value = "R" + index ;
282297
}
@@ -289,14 +304,15 @@
289304
var disp_name = get_cfg('RF_display_name') ;
290305
var sim_eltos = simhw_sim_states() ;
291306
var SIMWARE = get_simware() ;
307+
var r_item = null ;
292308

309+
var rf_index = 'default' ; // TODO: get rf_index by BR (future) name
293310
for (var index=0; index < sim_eltos.BR.length; index++)
294311
{
295312
// display name
296313
var obj = document.getElementById("name_RF" + index) ;
297314
if (obj != null) {
298-
obj.innerHTML = wepsim_refresh_rf_names_mkname(disp_name, SIMWARE,
299-
0, index, logical_index) ; // TODO: 0 -> rf_index
315+
obj.innerHTML = wepsim_refresh_rf_names_mkname(disp_name, SIMWARE, rf_index, index, logical_index);
300316
}
301317
}
302318
}
@@ -316,15 +332,23 @@
316332
// Registers
317333
var o1_rf = "" ;
318334
var o1_rn = "" ;
319-
for (var index=0; index < simhw_sim_states().BR.length; index++)
335+
var r_index = '' ;
336+
337+
// TODO: (hw) BR*[rf]*[index]
338+
// TODO: (here) outter-loop in all rf at BR[*rf*][index]
339+
var rf_index = 'default' ;
340+
var rf_item = simhw_sim_states().BR ;
341+
342+
for (var index=0; index < rf_item.length; index++)
320343
{
321-
o1_rn = "R" + index ;
322-
o1_rn = o1_rn.padEnd(3,' ') ;
344+
o1_rn = "R" + index ;
345+
o1_rn = o1_rn.padEnd(3,' ') ;
346+
r_index = rf_index + ':' + index ;
323347

324348
o1_rf += "<button type='button' " +
325349
" class='btn px-1 py-0 ms-1 mt-1 mb-0 me-0 col-auto border border-secondary bg-body-tertiary' " +
326350
" style='' data-role='none' " +
327-
" data-bs-toggle='popover-up' data-popover-content='" + index + "' data-container='body' " +
351+
" data-bs-toggle='popover-up' data-popover-content='" + r_index + "' data-container='body' " +
328352
" id='rf" + index + "'>" +
329353
"<span id='name_RF" + index + "' class='p-0 font-monospace' style='float:center; '>" + o1_rn + "</span>&nbsp;" +
330354
"<span class='w-100 d-block d-sm-none'></span>" +
@@ -348,18 +372,26 @@
348372
'</div>',
349373
container: 'body',
350374
content: function(obj) {
351-
var index = $(obj).attr('data-popover-content') ;
352-
var hexvalue = get_value(simhw_sim_states().BR[index]);
353-
return hex2values(hexvalue, index) ;
375+
var attr_val = $(obj).attr('data-popover-content') ;
376+
var parts = attr_val.split(':') ;
377+
var rf_index = parts[0] ;
378+
var r_index = parts[1] ;
379+
var rf_item = simhw_sim_states().BR ; // TODO: BR[*rf_index*] when available in hw
380+
381+
var hexvalue = get_value(rf_item[r_index]);
382+
return hex2values(hexvalue, r_index) ;
354383
},
355384
title: function(obj) {
356-
var index = $(obj).attr('data-popover-content') ;
357-
var id_button = "&quot;#rf" + index + "&quot;" ;
385+
var attr_val = $(obj).attr('data-popover-content') ;
386+
var parts = attr_val.split(':') ;
387+
var rf_index = parts[0] ;
388+
var r_index = parts[1] ;
358389

359390
var disp_name = get_cfg('RF_display_name') ;
360391
var SIMWARE = get_simware() ;
361-
var rname = wepsim_refresh_rf_names_mkname(disp_name, SIMWARE,
362-
0, index, 0) ; // TODO: 0, -> rf_index,
392+
393+
var id_button = "&quot;#rf" + r_index + "&quot;" ;
394+
var rname = wepsim_refresh_rf_names_mkname(disp_name, SIMWARE, rf_index, r_index, 0) ;
363395

364396
return '<span class="text-body font-monospace col"><strong>' + rname + '</strong></span>' +
365397
'<button type="button" id="close" ' +

ws_dist/min.sim_all.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

ws_dist/min.wepsim_node.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

ws_dist/min.wepsim_web.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)