visual6502/memtable.js

68 lines
1.7 KiB
JavaScript

var table;
var selected;
function setupTable(){
table = document.getElementById('memtable');
for(var r=0;r<32;r++){
var row = document.createElement('tr');
table.appendChild(row);
var col = document.createElement('td');
col.appendChild(document.createTextNode(hexWord(r*16)+':'));
col.onmousedown = unselectCell;
row.appendChild(col);
for(var c=0;c<16;c++){
col = document.createElement('td');
col.addr = r*16+c;
col.val = 0;
col.onmousedown = function(e){handleCellClick(e);};
col.appendChild(document.createTextNode('00'));
row.appendChild(col);
}
}
}
function handleCellClick(e){
var c = e.target;
selectCell(c.addr);
}
function cellKeydown(e){
var c = e.keyCode;
if(c==13) unselectCell();
else if(c==32) selectCell((selected+1)%0x200);
else if(c==8) selectCell((selected+0x1ff)%0x200);
else if((c>=48)&&(c<58)) setCellValue(selected, getCellValue(selected)*16+c-48);
else if((c>=65)&&(c<71)) setCellValue(selected, getCellValue(selected)*16+c-55);
mWrite(selected, getCellValue(selected));
}
function setCellValue(n, val){
val%=256;
cellEl(n).val=val;
cellEl(n).innerHTML=hexByte(val);
}
function getCellValue(n){return cellEl(n).val;}
function selectCell(n){
unselectCell();
if(n>=0x200) return;
cellEl(n).style.background = '#ff8';
selected = n;
window.onkeydown = function(e){cellKeydown(e);};
}
function unselectCell(){
if(selected==undefined) return;
cellEl(selected).style.background = '#fff';
selected = undefined;
window.onkeydown = undefined;
}
function cellEl(n){
var r = n>>4;
var c = n%16;
var e = table.children[r].children[c+1];
return e;
}