1
0
mirror of https://github.com/sehugg/8bitworkshop.git synced 2024-05-28 23:41:32 +00:00

"use strict" for all; atarivec: include vector ROM in asm file

This commit is contained in:
Steven Hugg 2017-01-03 10:43:40 -05:00
parent 14f3667e7e
commit 3e817adcb1
8 changed files with 61 additions and 48 deletions

View File

@ -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

View File

@ -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;

View File

@ -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,

View File

@ -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;

View File

@ -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();
} }

View File

@ -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?

View File

@ -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({