mirror of
https://github.com/sehugg/8bitworkshop.git
synced 2025-02-18 00:30:43 +00:00
"use strict" for all; atarivec: include vector ROM in asm file
This commit is contained in:
parent
14f3667e7e
commit
3e817adcb1
@ -191,7 +191,6 @@ a.dropdown-toggle {
|
|||||||
<script src="src/platform/vcs.js"></script>
|
<script src="src/platform/vcs.js"></script>
|
||||||
<script src="src/platform/apple2.js"></script>
|
<script src="src/platform/apple2.js"></script>
|
||||||
<script src="src/platform/atarivec.js"></script>
|
<script src="src/platform/atarivec.js"></script>
|
||||||
<script src="local/vecrom.js"></script>
|
|
||||||
<script src="src/ui.js"></script>
|
<script src="src/ui.js"></script>
|
||||||
|
|
||||||
</body>
|
</body>
|
||||||
|
@ -1 +1 @@
|
|||||||
Subproject commit b785efb3b9d653e7c1497301e093257206f25875
|
Subproject commit 531e945457a1714c11b7cf71aafc4216d14992bb
|
11
src/emu.js
11
src/emu.js
@ -1,7 +1,8 @@
|
|||||||
|
"use strict";
|
||||||
|
|
||||||
// Emulator classes
|
// Emulator classes
|
||||||
|
|
||||||
RasterVideo = function(mainElement, width, height, options) {
|
var RasterVideo = function(mainElement, width, height, options) {
|
||||||
var self = this;
|
var self = this;
|
||||||
var canvas, ctx;
|
var canvas, ctx;
|
||||||
var imageData, buf8, datau32;
|
var imageData, buf8, datau32;
|
||||||
@ -85,7 +86,7 @@ mainElement.appendChild(borderElement);
|
|||||||
*/
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
VectorVideo = function(mainElement, width, height) {
|
var VectorVideo = function(mainElement, width, height) {
|
||||||
var self = this;
|
var self = this;
|
||||||
var canvas, ctx;
|
var canvas, ctx;
|
||||||
var persistenceAlpha = 0.5;
|
var persistenceAlpha = 0.5;
|
||||||
@ -151,17 +152,17 @@ VectorVideo = function(mainElement, width, height) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
SampleAudio = function(clockfreq) {
|
var SampleAudio = function(clockfreq) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
RAM = function(size) {
|
var RAM = function(size) {
|
||||||
var memArray = new ArrayBuffer(size);
|
var memArray = new ArrayBuffer(size);
|
||||||
this.mem = new Uint8Array(memArray);
|
this.mem = new Uint8Array(memArray);
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO
|
// TODO
|
||||||
AnimationTimer = function(frequencyHz, callback) {
|
var AnimationTimer = function(frequencyHz, callback) {
|
||||||
var intervalMsec = 1000.0 / frequencyHz;
|
var intervalMsec = 1000.0 / frequencyHz;
|
||||||
var curTime = 0;
|
var curTime = 0;
|
||||||
var running;
|
var running;
|
||||||
|
@ -1,14 +1,19 @@
|
|||||||
|
"use strict";
|
||||||
|
|
||||||
var PRESETS = [
|
var APPLE2_PRESETS = [
|
||||||
]
|
];
|
||||||
|
|
||||||
Apple2Platform = function(mainElement) {
|
var Apple2Platform = function(mainElement) {
|
||||||
var self = this;
|
var self = this;
|
||||||
var cpuFrequency = 1.023;
|
var cpuFrequency = 1.023;
|
||||||
var cpuCyclesPerLine = 65;
|
var cpuCyclesPerLine = 65;
|
||||||
var cpu, ram, rom, bus;
|
var cpu, ram, rom, bus;
|
||||||
var video, audio, timer;
|
var video, audio, timer;
|
||||||
|
|
||||||
|
this.getPresets = function() {
|
||||||
|
return APPLE2_PRESETS;
|
||||||
|
}
|
||||||
|
|
||||||
this.start = function() {
|
this.start = function() {
|
||||||
cpu = new jt.M6502();
|
cpu = new jt.M6502();
|
||||||
ram = new RAM(0xc000);
|
ram = new RAM(0xc000);
|
||||||
@ -185,7 +190,7 @@ Apple2Platform = function(mainElement) {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
APPLEIIGO_LZG = [
|
var APPLEIIGO_LZG = [
|
||||||
76,90,71,0,0,48,0,0,0,5,159,47,60,46,159,1,21,25,30,52,65,80,80,76,69,73,73,71,79,32,82,79,
|
76,90,71,0,0,48,0,0,0,5,159,47,60,46,159,1,21,25,30,52,65,80,80,76,69,73,73,71,79,32,82,79,
|
||||||
77,49,46,48,0,52,31,52,31,52,31,52,31,52,31,52,31,52,31,52,31,52,28,52,6,32,0,224,25,30,67,52,
|
77,49,46,48,0,52,31,52,31,52,31,52,31,52,31,52,31,52,31,52,31,52,28,52,6,32,0,224,25,30,67,52,
|
||||||
30,52,28,25,31,174,52,31,52,30,52,28,52,6,25,63,107,52,31,52,30,52,28,25,63,101,52,19,25,31,139,52,
|
30,52,28,25,31,174,52,31,52,30,52,28,52,6,25,63,107,52,31,52,30,52,28,25,63,101,52,19,25,31,139,52,
|
||||||
|
@ -1,8 +1,9 @@
|
|||||||
|
"use strict";
|
||||||
|
|
||||||
var PRESETS = [
|
var ATARIVEC_PRESETS = [
|
||||||
]
|
]
|
||||||
|
|
||||||
AtariVectorPlatform = function(mainElement) {
|
var AtariVectorPlatform = function(mainElement) {
|
||||||
var self = this;
|
var self = this;
|
||||||
var cpuFrequency = 1500000.0;
|
var cpuFrequency = 1500000.0;
|
||||||
var cpuCyclesPerNMI = 6000;
|
var cpuCyclesPerNMI = 6000;
|
||||||
@ -13,11 +14,14 @@ AtariVectorPlatform = function(mainElement) {
|
|||||||
var switches = new RAM(16).mem;
|
var switches = new RAM(16).mem;
|
||||||
var nmicount = cpuCyclesPerNMI;
|
var nmicount = cpuCyclesPerNMI;
|
||||||
|
|
||||||
|
this.getPresets = function() {
|
||||||
|
return ATARIVEC_PRESETS;
|
||||||
|
}
|
||||||
|
|
||||||
this.start = function() {
|
this.start = function() {
|
||||||
cpu = new jt.M6502();
|
cpu = new jt.M6502();
|
||||||
cpuram = new RAM(0x400);
|
cpuram = new RAM(0x400);
|
||||||
dvgram = new RAM(0x2000);
|
dvgram = new RAM(0x2000);
|
||||||
vecrom = VECROM;
|
|
||||||
//switches[5] = 0xff;
|
//switches[5] = 0xff;
|
||||||
//switches[7] = 0xff;
|
//switches[7] = 0xff;
|
||||||
// bus
|
// bus
|
||||||
@ -79,6 +83,7 @@ AtariVectorPlatform = function(mainElement) {
|
|||||||
//console.log(n, clock, nmicount);
|
//console.log(n, clock, nmicount);
|
||||||
}
|
}
|
||||||
cpu.clockPulse();
|
cpu.clockPulse();
|
||||||
|
//cpu.executeInstruction();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
video.setKeyboardEvents(function(key,flags) {
|
video.setKeyboardEvents(function(key,flags) {
|
||||||
@ -107,10 +112,11 @@ AtariVectorPlatform = function(mainElement) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
this.loadROM = function(title, data) {
|
this.loadROM = function(title, data) {
|
||||||
if(data.length != 0x1800) {
|
if(data.length != 0x2000) {
|
||||||
throw "ROM length must be == 0x1800";
|
throw "ROM length must be == 0x2000";
|
||||||
}
|
}
|
||||||
rom = data;
|
rom = data.slice(0,0x1800);
|
||||||
|
vecrom = data.slice(0x1800,0x2000);
|
||||||
this.reset();
|
this.reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -230,7 +236,7 @@ AtariVectorPlatform = function(mainElement) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
DVGStateMachine = function(bus, video) {
|
var DVGStateMachine = function(bus, video) {
|
||||||
var self = this;
|
var self = this;
|
||||||
var pc = 0;
|
var pc = 0;
|
||||||
var x = 0;
|
var x = 0;
|
||||||
@ -246,7 +252,7 @@ DVGStateMachine = function(bus, video) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function decodeSigned(w, o2) {
|
function decodeSigned(w, o2) {
|
||||||
s = w & (1<<o2);
|
var s = w & (1<<o2);
|
||||||
w = w & ((1<<o2)-1);
|
w = w & ((1<<o2)-1);
|
||||||
if (s)
|
if (s)
|
||||||
return -w;
|
return -w;
|
||||||
@ -269,7 +275,7 @@ DVGStateMachine = function(bus, video) {
|
|||||||
//console.log('DVG',i);
|
//console.log('DVG',i);
|
||||||
}
|
}
|
||||||
|
|
||||||
GSCALES = [7, 6, 5, 4, 3, 2, 1, 0, 15, 14, 13, 12, 11, 10, 9, 8];
|
var GSCALES = [7, 6, 5, 4, 3, 2, 1, 0, 15, 14, 13, 12, 11, 10, 9, 8];
|
||||||
|
|
||||||
this.nextInstruction = function() {
|
this.nextInstruction = function() {
|
||||||
if (!running) return;
|
if (!running) return;
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
|
"use strict";
|
||||||
|
|
||||||
var PRESETS = [
|
var VCS_PRESETS = [
|
||||||
{id:'examples/hello', chapter:4, name:'Hello 6502 and TIA'},
|
{id:'examples/hello', chapter:4, name:'Hello 6502 and TIA'},
|
||||||
{id:'examples/vsync', chapter:5, name:'Painting on the CRT', title:'Color Bars'},
|
{id:'examples/vsync', chapter:5, name:'Painting on the CRT', title:'Color Bars'},
|
||||||
{id:'examples/playfield', chapter:6, name:'Playfield Graphics'},
|
{id:'examples/playfield', chapter:6, name:'Playfield Graphics'},
|
||||||
@ -35,9 +36,11 @@ Javatari.CARTRIDGE_CHANGE_DISABLED = true;
|
|||||||
Javatari.DEBUG_SCANLINE_OVERFLOW = false; // TODO: make a switch
|
Javatari.DEBUG_SCANLINE_OVERFLOW = false; // TODO: make a switch
|
||||||
Javatari.AUDIO_BUFFER_SIZE = 256;
|
Javatari.AUDIO_BUFFER_SIZE = 256;
|
||||||
|
|
||||||
VCSPlatform = function() {
|
var VCSPlatform = function() {
|
||||||
var self = this;
|
var self = this;
|
||||||
|
|
||||||
|
this.getPresets = function() { return VCS_PRESETS; }
|
||||||
|
|
||||||
this.start = function() {
|
this.start = function() {
|
||||||
Javatari.start();
|
Javatari.start();
|
||||||
}
|
}
|
||||||
|
41
src/ui.js
41
src/ui.js
@ -1,3 +1,4 @@
|
|||||||
|
"use strict";
|
||||||
|
|
||||||
// 8bitworkshop IDE user interface
|
// 8bitworkshop IDE user interface
|
||||||
|
|
||||||
@ -9,7 +10,7 @@ var offset2line = null;
|
|||||||
var line2offset = null;
|
var line2offset = null;
|
||||||
var trace_pending_at_pc;
|
var trace_pending_at_pc;
|
||||||
|
|
||||||
// vars: PRESETS, platform
|
var PRESETS, platform;
|
||||||
|
|
||||||
var CODE = 'code1';
|
var CODE = 'code1';
|
||||||
var editor = CodeMirror(document.getElementById('editor'), {
|
var editor = CodeMirror(document.getElementById('editor'), {
|
||||||
@ -21,7 +22,7 @@ var editor = CodeMirror(document.getElementById('editor'), {
|
|||||||
});
|
});
|
||||||
//editor.setSize("100%", "95%"); // TODO
|
//editor.setSize("100%", "95%"); // TODO
|
||||||
editor.on('changes', function(ed, changeobj) {
|
editor.on('changes', function(ed, changeobj) {
|
||||||
text = editor.getValue() || "";
|
var text = editor.getValue() || "";
|
||||||
setCode(text);
|
setCode(text);
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -243,7 +244,7 @@ worker.onmessage = function(e) {
|
|||||||
current_output = null;
|
current_output = null;
|
||||||
} else {
|
} else {
|
||||||
gutters.removeClass("has-errors");
|
gutters.removeClass("has-errors");
|
||||||
updatePreset(current_preset_id, text);
|
updatePreset(current_preset_id, editor.getValue()); // update persisted entry
|
||||||
// load ROM
|
// load ROM
|
||||||
var rom = e.data.output.slice(2);
|
var rom = e.data.output.slice(2);
|
||||||
var rom_changed = rom && !arrayCompare(rom, current_output);
|
var rom_changed = rom && !arrayCompare(rom, current_output);
|
||||||
@ -266,7 +267,7 @@ worker.onmessage = function(e) {
|
|||||||
editor.clearGutter("gutter-clock");
|
editor.clearGutter("gutter-clock");
|
||||||
offset2line = {};
|
offset2line = {};
|
||||||
line2offset = {};
|
line2offset = {};
|
||||||
for (info of e.data.listing.lines) {
|
for (var info of e.data.listing.lines) {
|
||||||
if (info.offset) {
|
if (info.offset) {
|
||||||
var textel = document.createTextNode(info.offset.toString(16));
|
var textel = document.createTextNode(info.offset.toString(16));
|
||||||
editor.setGutterMarker(info.line-1, "gutter-offset", textel);
|
editor.setGutterMarker(info.line-1, "gutter-offset", textel);
|
||||||
@ -658,6 +659,7 @@ function showWelcomeMessage() {
|
|||||||
{
|
{
|
||||||
// Instance the tour
|
// Instance the tour
|
||||||
var tour = new Tour({
|
var tour = new Tour({
|
||||||
|
autoscroll:false,
|
||||||
//storage:false,
|
//storage:false,
|
||||||
steps: [
|
steps: [
|
||||||
{
|
{
|
||||||
@ -688,12 +690,8 @@ function showWelcomeMessage() {
|
|||||||
content: "Click the menu to create new files and share your work with others."
|
content: "Click the menu to create new files and share your work with others."
|
||||||
},
|
},
|
||||||
]});
|
]});
|
||||||
|
|
||||||
// Initialize the tour
|
|
||||||
tour.init();
|
tour.init();
|
||||||
|
setTimeout(function() { tour.start(); }, 2000);
|
||||||
// Start the tour
|
|
||||||
tour.start();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -735,6 +733,18 @@ try {
|
|||||||
if (!qs['platform']) {
|
if (!qs['platform']) {
|
||||||
qs['platform'] = 'vcs';
|
qs['platform'] = 'vcs';
|
||||||
}
|
}
|
||||||
|
// load and start platform object
|
||||||
|
if (qs['platform'] == 'vcs') {
|
||||||
|
platform = new VCSPlatform();
|
||||||
|
} else if (qs['platform'] == 'apple2') {
|
||||||
|
platform = new Apple2Platform($("#emulator")[0]);
|
||||||
|
} else if (qs['platform'] == 'atarivec') {
|
||||||
|
platform = new AtariVectorPlatform($("#emulator")[0]);
|
||||||
|
} else {
|
||||||
|
alert("Platform " + qs['platform'] + " not recognized");
|
||||||
|
}
|
||||||
|
PRESETS = platform.getPresets();
|
||||||
|
platform.start();
|
||||||
// reset file?
|
// reset file?
|
||||||
if (qs['file'] && qs['reset']) {
|
if (qs['file'] && qs['reset']) {
|
||||||
localStorage.removeItem(qs['file']);
|
localStorage.removeItem(qs['file']);
|
||||||
@ -750,19 +760,6 @@ try {
|
|||||||
var lastid = localStorage.getItem("__lastid");
|
var lastid = localStorage.getItem("__lastid");
|
||||||
gotoPresetNamed(lastid || PRESETS[0].id);
|
gotoPresetNamed(lastid || PRESETS[0].id);
|
||||||
}
|
}
|
||||||
// load and start platform object
|
|
||||||
if (qs['platform'] == 'vcs') {
|
|
||||||
platform = new VCSPlatform();
|
|
||||||
platform.start();
|
|
||||||
} else if (qs['platform'] == 'apple2') {
|
|
||||||
platform = new Apple2Platform($("#emulator")[0]);
|
|
||||||
platform.start();
|
|
||||||
} else if (qs['platform'] == 'atarivec') {
|
|
||||||
platform = new AtariVectorPlatform($("#emulator")[0]);
|
|
||||||
platform.start();
|
|
||||||
} else {
|
|
||||||
alert("Platform " + qs['platform'] + " not recognized");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
alert(e+""); // TODO?
|
alert(e+""); // TODO?
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
"use strict";
|
||||||
|
|
||||||
// set up require.js for worker
|
// set up require.js for worker
|
||||||
importScripts("../../dasm.js");
|
importScripts("../../dasm.js");
|
||||||
|
|
||||||
@ -17,9 +19,9 @@ var document = noop();
|
|||||||
document.documentElement = noop();
|
document.documentElement = noop();
|
||||||
document.documentElement.style = noop();
|
document.documentElement.style = noop();
|
||||||
|
|
||||||
MAIN_FILENAME = "main.a";
|
var MAIN_FILENAME = "main.a";
|
||||||
PREAMBLE = "\tprocessor 6502\n";
|
var PREAMBLE = "\tprocessor 6502\n";
|
||||||
PREAMBLE_LINES = 1;
|
var PREAMBLE_LINES = 1;
|
||||||
|
|
||||||
function parseListing(code, unresolved) {
|
function parseListing(code, unresolved) {
|
||||||
var errorMatch = /main.a [(](\d+)[)]: error: (.+)/;
|
var errorMatch = /main.a [(](\d+)[)]: error: (.+)/;
|
||||||
@ -60,7 +62,7 @@ function parseListing(code, unresolved) {
|
|||||||
}
|
}
|
||||||
// TODO: check filename too
|
// TODO: check filename too
|
||||||
// TODO: better symbol test (word boundaries)
|
// TODO: better symbol test (word boundaries)
|
||||||
for (key in unresolved) {
|
for (var key in unresolved) {
|
||||||
var pos = restline ? restline.indexOf(key) : line.indexOf(key);
|
var pos = restline ? restline.indexOf(key) : line.indexOf(key);
|
||||||
if (pos >= 0) {
|
if (pos >= 0) {
|
||||||
errors.push({
|
errors.push({
|
||||||
|
Loading…
x
Reference in New Issue
Block a user