working on c platforms; skeleton has tool extension

This commit is contained in:
Steven Hugg 2017-01-26 00:09:57 -05:00
parent ec2391f16e
commit 0f26d3cc35
6 changed files with 75 additions and 54 deletions

View File

@ -184,7 +184,7 @@ canvas.pixelated {
</a>
<ul class="dropdown-menu" aria-labelledby="dropdownMenuButton">
<li><a class="dropdown-item" href="#" id="item_new_file">New File...</a></li>
<li><a class="dropdown-item" href="#" id="item_share_file">Share File...</a></li>
<li><a class="dropdown-item" href="#" id="item_share_file">Share File as GitHub Gist...</a></li>
<li><a class="dropdown-item" href="#" id="item_reset_file">Revert to Original...</a></li>
<!--
<li class="dropdown dropdown-submenu">

View File

@ -227,7 +227,8 @@ var GalaxianPlatform = function(mainElement) {
];
this.loadROM = function(title, data) {
rom = padBytes(data, 0x4000);
rom = padBytes(data, 0x3820);
// palette is at 0x3800-0x381f
palette = new Uint32Array(new ArrayBuffer(32*4));
for (var i=0; i<32; i++) {
var b = rom[0x3800+i];
@ -237,25 +238,6 @@ var GalaxianPlatform = function(mainElement) {
palette[i] += bitcolors[j];
}
self.reset();
/*
// skip self-test
for (var i=0 ;i<3000; i++) {
cpu.runFrame(cpu.getTstates() + cpuCyclesPerLine*scanlinesPerFrame);
if (interruptEnabled) { cpu.nonMaskableInterrupt(); }
}
function arr2arr(a) {
var l = 0;
while (a[++l] >= 0) ;
var arr = new Uint8Array(new ArrayBuffer(l));
for (var i=0; i<l; i++)
arr[i] = a[i];
return arr;
}
state.b = arr2arr(state.b);
state.bv = arr2arr(state.bv);
state.bo = arr2arr(state.bo);
this.loadState(state);
*/
}
this.loadState = function(state) {

View File

@ -14,6 +14,7 @@ var VicDualPlatform = function(mainElement) {
var cpu, ram, membus, iobus, rom;
var video, audio, timer, pixels;
var inputs = [0xff, 0xff, 0xff, 0xff]; // most things active low
var palbank = 0;
var XTAL = 15468000.0;
var scanlinesPerFrame = 0x106;
@ -25,18 +26,31 @@ var VicDualPlatform = function(mainElement) {
var cpuCyclesPerLine = cpuFrequency/hsyncFrequency;
var timerFrequency = 500; // TODO
// TODO: programmable palette
var palette = [
0xffcccccc,
0xff00ffff, // yellow
0xff000000, // black
0xff0000ff, // red
0xff00ffff, // yellow
0xffffff00, // cyan
0xff00ffff, // yellow 2
0xff00ff00, // green
0xff00ffff, // yellow
0xffff0000, // blue
0xffff00ff, // magenta
0xffffff00, // cyan
0xffffffff // white
];
var colorprom = [
0,0,0,0,0,0,0,0,
7,3,1,3,6,3,2,6,
7,0,0,0,0,0,0,0,
0,1,2,3,4,5,6,7,
4,5,6,7,0,0,0,0,
0,0,0,0,4,5,6,7,
1,2,4,7,0,0,0,0,
0,0,0,0,1,2,4,7,
];
// videoram 0xc000-0xc3ff
// RAM 0xc400-0xc7ff
// charram 0xc800-0xcfff
function drawScanline(pixels, sl) {
if (sl >= 224) return;
var pixofs = sl*256;
@ -46,9 +60,9 @@ var VicDualPlatform = function(mainElement) {
for (var xx=0; xx<32; xx++) {
var attrib = ram.mem[vramofs+xx];
var data = ram.mem[0x800 + (attrib<<3) + yy];
var col = (attrib>>5); // + (palbank<<3);
var color1 = 0xff000000; // TODO
var color2 = palette[col & 0x7]; // TODO
var col = (attrib>>5) + (palbank<<4);
var color1 = palette[colorprom[col]];
var color2 = palette[colorprom[col+8]];
for (var i=0; i<8; i++) {
var bm = 128>>i;
pixels[outi] = (data&bm) ? color2 : color1;
@ -88,7 +102,7 @@ var VicDualPlatform = function(mainElement) {
if (addr & 0x1) { }; // audio 1
if (addr & 0x2) { }; // audio 2
if (addr & 0x8) { }; // coin status
if (addr & 0x40) { }; // palette
if (addr & 0x40) { palbank = val & 3; }; // palette
}
};
cpu = window.Z80({
@ -141,6 +155,7 @@ var VicDualPlatform = function(mainElement) {
inputs[1] = state.in1;
inputs[2] = state.in2;
inputs[3] = state.in3;
palbank = state.pb;
}
this.saveState = function() {
return {
@ -150,6 +165,7 @@ var VicDualPlatform = function(mainElement) {
in1:inputs[1],
in2:inputs[2],
in3:inputs[3],
pb:palbank,
};
}
this.getCPUState = function() {

View File

@ -117,14 +117,8 @@ var pcvisits;
var trace_pending_at_pc;
var store;
var pendingWorkerMessages = 0;
var editor;
var editor = CodeMirror(document.getElementById('editor'), {
theme: 'mbo',
lineNumbers: true,
matchBrackets: true,
tabSize: 8,
gutters: ["CodeMirror-linenumbers", "gutter-offset", "gutter-bytes", "gutter-clock", "gutter-info"],
});
var disasmview = CodeMirror(document.getElementById('disassembly'), {
mode: 'z80',
theme: 'cobalt',
@ -133,10 +127,22 @@ var disasmview = CodeMirror(document.getElementById('disassembly'), {
styleActiveLine: true
});
editor.on('changes', function(ed, changeobj) {
var text = editor.getValue() || "";
setCode(text);
});
function newEditor(mode) {
var isAsm = (mode != 'text/x-csrc');
editor = CodeMirror(document.getElementById('editor'), {
theme: 'mbo',
lineNumbers: true,
matchBrackets: true,
tabSize: 8,
gutters: isAsm ? ["CodeMirror-linenumbers", "gutter-offset", "gutter-bytes", "gutter-clock", "gutter-info"]
: ["CodeMirror-linenumbers", "gutter-offset", "gutter-info"],
});
editor.on('changes', function(ed, changeobj) {
var text = editor.getValue() || "";
setCode(text);
});
editor.setOption("mode", mode);
}
function getCurrentPresetTitle() {
if (current_preset_index < 0)
@ -158,7 +164,7 @@ function updatePreset(current_preset_id, text) {
function loadCode(text, fileid) {
var tool = platform.getToolForFilename(fileid);
editor.setOption("mode", tool && TOOL_TO_SOURCE_STYLE[tool]);
newEditor(tool && TOOL_TO_SOURCE_STYLE[tool]);
editor.setValue(text);
editor.clearHistory();
current_output = null;
@ -183,10 +189,15 @@ function loadFile(fileid, filename, index) {
}, 'text');
}
} else {
$.get( "presets/"+platform_id+"/skeleton.a", function( text ) {
var ext = platform.getToolForFilename(fileid);
$.get( "presets/"+platform_id+"/skeleton."+ext, function( text ) {
loadCode(text, fileid);
updatePreset(fileid, text);
}, 'text');
}, 'text')
.fail(function() {
console.log("Could not load skeleton for " + platform_id + "/" + ext);
loadCode("", fileid);
});
}
}

View File

@ -1,5 +1,26 @@
"use strict";
var PLATFORM_PARAMS = {
'mw8080bw': {
code_start: 0x0,
code_size: 0x2000,
data_start: 0x2000,
data_size: 0x400,
},
'vicdual': {
code_start: 0x0,
code_size: 0x4000,
data_start: 0xc400,
data_size: 0x400,
},
'galaxian': {
code_start: 0x0,
code_size: 0x4000,
data_start: 0x4000,
data_size: 0x400,
},
};
var loaded = {}
function load(modulename) {
if (!loaded[modulename]) {
@ -470,15 +491,6 @@ l_main00101 = 0003, L: test
}
}
var PLATFORM_PARAMS = {
'mw8080bw': {
code_start: 0x0,
code_size: 0x2000,
data_start: 0x2000,
data_size: 0x400,
},
};
function hexToArray(s, ofs) {
var buf = new ArrayBuffer(s.length/2);
var arr = new Uint8Array(buf);