mirror of
https://github.com/sehugg/8bitworkshop.git
synced 2025-02-26 22:29:56 +00:00
working on c platforms; skeleton has tool extension
This commit is contained in:
parent
ec2391f16e
commit
0f26d3cc35
@ -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">
|
||||
|
@ -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) {
|
||||
|
@ -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() {
|
||||
|
39
src/ui.js
39
src/ui.js
@ -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);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
|
Loading…
x
Reference in New Issue
Block a user