mirror of
https://github.com/sehugg/8bitworkshop.git
synced 2024-11-28 23:49:20 +00:00
working on vector
This commit is contained in:
parent
e579663a8d
commit
52b58f471c
@ -192,7 +192,7 @@ canvas.pixelated {
|
|||||||
<ul class="dropdown-menu">
|
<ul class="dropdown-menu">
|
||||||
<li><a class="dropdown-item" href="?platform=vcs" id="item_platform_vcs">Atari VCS</a></li>
|
<li><a class="dropdown-item" href="?platform=vcs" id="item_platform_vcs">Atari VCS</a></li>
|
||||||
<li><a class="dropdown-item" href="?platform=apple2" id="item_platform_apple2">Apple ][</a></li>
|
<li><a class="dropdown-item" href="?platform=apple2" id="item_platform_apple2">Apple ][</a></li>
|
||||||
<li><a class="dropdown-item" href="?platform=atarivec" id="item_platform_atarivec">Asteroids</a></li>
|
<li><a class="dropdown-item" href="?platform=vector" id="item_platform_atarivec">Asteroids</a></li>
|
||||||
<li><a class="dropdown-item" href="?platform=mw8080bw" id="item_platform_mw8080bw">Midway 8080 B/W</a></li>
|
<li><a class="dropdown-item" href="?platform=mw8080bw" id="item_platform_mw8080bw">Midway 8080 B/W</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
|
29
src/emu.js
29
src/emu.js
@ -374,6 +374,12 @@ var AY38910_Audio = function(master) {
|
|||||||
|
|
||||||
var Base6502Platform = function() {
|
var Base6502Platform = function() {
|
||||||
|
|
||||||
|
this.newCPU = function(membus) {
|
||||||
|
var cpu = new jt.M6502();
|
||||||
|
cpu.connectBus(membus);
|
||||||
|
return cpu;
|
||||||
|
}
|
||||||
|
|
||||||
this.getOpcodeMetadata = function(opcode, offset) {
|
this.getOpcodeMetadata = function(opcode, offset) {
|
||||||
return Javatari.getOpcodeMetadata(opcode, offset); // TODO
|
return Javatari.getOpcodeMetadata(opcode, offset); // TODO
|
||||||
}
|
}
|
||||||
@ -544,12 +550,13 @@ function cpuStateToLongString_Z80(c) {
|
|||||||
;
|
;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
var BaseZ80Platform = function() {
|
||||||
|
|
||||||
window.buildZ80({
|
window.buildZ80({
|
||||||
applyContention: false // TODO???
|
applyContention: false // TODO???
|
||||||
});
|
});
|
||||||
|
|
||||||
var BaseZ80Platform = function() {
|
|
||||||
|
|
||||||
// TODO: refactor w/ platforms
|
// TODO: refactor w/ platforms
|
||||||
this.newCPU = function(membus, iobus) {
|
this.newCPU = function(membus, iobus) {
|
||||||
return window.Z80({
|
return window.Z80({
|
||||||
@ -559,6 +566,24 @@ var BaseZ80Platform = function() {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: refactor other parts into here
|
||||||
|
this.runCPU = function(cpu, cycles) {
|
||||||
|
var debugCond = this.getDebugCallback();
|
||||||
|
var targetTstates = cpu.getTstates() + cycles;
|
||||||
|
if (debugCond) { // || trace) {
|
||||||
|
while (cpu.getTstates() < targetTstates) {
|
||||||
|
//_trace(); // TODO
|
||||||
|
if (debugCond && debugCond()) {
|
||||||
|
debugCond = null;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
cpu.runFrame(cpu.getTstates() + 1);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
cpu.runFrame(targetTstates);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
var onBreakpointHit;
|
var onBreakpointHit;
|
||||||
var debugCondition;
|
var debugCondition;
|
||||||
var debugSavedState = null;
|
var debugSavedState = null;
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
var GALAXIAN_PRESETS = [
|
var GALAXIAN_PRESETS = [
|
||||||
];
|
];
|
||||||
|
|
||||||
@ -111,7 +112,8 @@ var GalaxianPlatform = function(mainElement) {
|
|||||||
missile = which;
|
missile = which;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (var which of [shell,missile]) {
|
for (var i=0; i<2; i++) {
|
||||||
|
which = i ? missile : shell;
|
||||||
if (which != 0xff) {
|
if (which != 0xff) {
|
||||||
var sx = 255 - oram.mem[0x60 + (which<<2)+3];
|
var sx = 255 - oram.mem[0x60 + (which<<2)+3];
|
||||||
var outi = pixofs+sx;
|
var outi = pixofs+sx;
|
||||||
|
@ -1,21 +1,8 @@
|
|||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
var ATARIVEC_PRESETS = [
|
var VECTOR_PRESETS = [
|
||||||
]
|
]
|
||||||
|
|
||||||
var AtariVectorPlatform = function(mainElement) {
|
|
||||||
var self = this;
|
|
||||||
var cpuFrequency = 1500000.0;
|
|
||||||
var cpuCyclesPerNMI = 6000;
|
|
||||||
var cpuCyclesPerFrame = Math.round(cpuFrequency/60);
|
|
||||||
var cpu, cpuram, dvgram, rom, vecrom, bus, dvg;
|
|
||||||
var video, audio, timer;
|
|
||||||
var clock;
|
|
||||||
var switches = new RAM(16).mem;
|
|
||||||
var nmicount = cpuCyclesPerNMI;
|
|
||||||
|
|
||||||
this.__proto__ = new Base6502Platform();
|
|
||||||
|
|
||||||
var ASTEROIDS_KEYCODE_MAP = makeKeycodeMap([
|
var ASTEROIDS_KEYCODE_MAP = makeKeycodeMap([
|
||||||
[Keys.VK_SHIFT, 3, 0xff],
|
[Keys.VK_SHIFT, 3, 0xff],
|
||||||
[Keys.VK_SPACE, 4, 0xff],
|
[Keys.VK_SPACE, 4, 0xff],
|
||||||
@ -29,12 +16,25 @@ var AtariVectorPlatform = function(mainElement) {
|
|||||||
[Keys.VK_LEFT, 15, 0xff],
|
[Keys.VK_LEFT, 15, 0xff],
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
|
||||||
|
var AtariVectorPlatform = function(mainElement) {
|
||||||
|
var self = this;
|
||||||
|
var cpuFrequency = 1500000.0;
|
||||||
|
var cpuCyclesPerNMI = 6000;
|
||||||
|
var cpuCyclesPerFrame = Math.round(cpuFrequency/60);
|
||||||
|
var cpu, cpuram, dvgram, rom, vecrom, bus, dvg;
|
||||||
|
var video, audio, timer;
|
||||||
|
var clock;
|
||||||
|
var switches = new RAM(16).mem;
|
||||||
|
var nmicount = cpuCyclesPerNMI;
|
||||||
|
|
||||||
|
this.__proto__ = new Base6502Platform();
|
||||||
|
|
||||||
this.getPresets = function() {
|
this.getPresets = function() {
|
||||||
return ATARIVEC_PRESETS;
|
return VECTOR_PRESETS;
|
||||||
}
|
}
|
||||||
|
|
||||||
this.start = function() {
|
this.start = function() {
|
||||||
cpu = new jt.M6502();
|
|
||||||
cpuram = new RAM(0x400);
|
cpuram = new RAM(0x400);
|
||||||
dvgram = new RAM(0x2000);
|
dvgram = new RAM(0x2000);
|
||||||
//switches[5] = 0xff;
|
//switches[5] = 0xff;
|
||||||
@ -60,7 +60,7 @@ var AtariVectorPlatform = function(mainElement) {
|
|||||||
], {gmask:0x7fff})
|
], {gmask:0x7fff})
|
||||||
|
|
||||||
};
|
};
|
||||||
cpu.connectBus(bus);
|
cpu = self.newCPU(bus);
|
||||||
// create video/audio
|
// create video/audio
|
||||||
video = new VectorVideo(mainElement,1024,1024);
|
video = new VectorVideo(mainElement,1024,1024);
|
||||||
dvg = new DVGStateMachine(bus, video);
|
dvg = new DVGStateMachine(bus, video);
|
||||||
@ -68,9 +68,6 @@ var AtariVectorPlatform = function(mainElement) {
|
|||||||
video.create();
|
video.create();
|
||||||
timer = new AnimationTimer(60, function() {
|
timer = new AnimationTimer(60, function() {
|
||||||
video.clear();
|
video.clear();
|
||||||
// 262.5 scanlines per frame
|
|
||||||
var iaddr = 0x4000;
|
|
||||||
var iofs = 0;
|
|
||||||
var debugCond = self.getDebugCallback();
|
var debugCond = self.getDebugCallback();
|
||||||
clock = 0;
|
clock = 0;
|
||||||
for (var i=0; i<cpuCyclesPerFrame; i++) {
|
for (var i=0; i<cpuCyclesPerFrame; i++) {
|
||||||
@ -101,7 +98,7 @@ var AtariVectorPlatform = function(mainElement) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
this.getRasterPosition = function() {
|
this.getRasterPosition = function() {
|
||||||
return {x:0, y:0};
|
return {x:0, y:0}; // TODO
|
||||||
}
|
}
|
||||||
|
|
||||||
this.isRunning = function() {
|
this.isRunning = function() {
|
||||||
@ -140,6 +137,107 @@ var AtariVectorPlatform = function(mainElement) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
|
||||||
|
var VectorZ80Platform = function(mainElement, proto) {
|
||||||
|
var self = this;
|
||||||
|
var cpuFrequency = 3000000.0;
|
||||||
|
var cpuCyclesPerFrame = Math.round(cpuFrequency/60);
|
||||||
|
var cpu, cpuram, dvgram, rom, bus, dvg;
|
||||||
|
var video, audio, timer;
|
||||||
|
var clock;
|
||||||
|
var switches = new RAM(16).mem;
|
||||||
|
|
||||||
|
this.__proto__ = new BaseZ80Platform();
|
||||||
|
|
||||||
|
this.getPresets = function() {
|
||||||
|
return VECTOR_PRESETS;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.start = function() {
|
||||||
|
cpuram = new RAM(0x1000);
|
||||||
|
dvgram = new RAM(0x2000);
|
||||||
|
//switches[5] = 0xff;
|
||||||
|
//switches[7] = 0xff;
|
||||||
|
// bus
|
||||||
|
bus = {
|
||||||
|
|
||||||
|
read: new AddressDecoder([
|
||||||
|
[0x0, 0x3fff, 0, function(a) { return rom[a]; }],
|
||||||
|
[0x4000, 0x5fff, 0x1fff, function(a) { return dvgram.mem[a]; }],
|
||||||
|
[0x6000, 0x6fff, 0xfff, function(a) { return cpuram.mem[a]; }],
|
||||||
|
[0x7001, 0x7001, 0, function(a) { return ((clock/1000) & 1) ? 0xff : 0x00; }],
|
||||||
|
[0x7000, 0x7007, 0x7, function(a) { return switches[a]; }],
|
||||||
|
[0x7400, 0x7407, 0x7, function(a) { return switches[a+8]; }],
|
||||||
|
]),
|
||||||
|
|
||||||
|
write: new AddressDecoder([
|
||||||
|
[0x7000, 0x7000, 0, function(a,v) { dvg.runUntilHalt(); }],
|
||||||
|
// TODO: draw asynchronous or allow poll of HALT ($2002)
|
||||||
|
[0x4000, 0x5fff, 0x1fff, function(a,v) { dvgram.mem[a] = v; }],
|
||||||
|
[0x6000, 0x6fff, 0xfff, function(a,v) { cpuram.mem[a] = v; }],
|
||||||
|
])
|
||||||
|
|
||||||
|
};
|
||||||
|
cpu = self.newCPU(bus);
|
||||||
|
// create video/audio
|
||||||
|
video = new VectorVideo(mainElement,1024,1024);
|
||||||
|
dvg = new DVGStateMachine(bus, video);
|
||||||
|
audio = new SampleAudio(cpuFrequency);
|
||||||
|
video.create();
|
||||||
|
timer = new AnimationTimer(60, function() {
|
||||||
|
video.clear();
|
||||||
|
self.runCPU(cpu, cpuCyclesPerFrame);
|
||||||
|
cpu.requestInterrupt();
|
||||||
|
self.restartDebugState();
|
||||||
|
});
|
||||||
|
setKeyboardFromMap(video, switches, ASTEROIDS_KEYCODE_MAP);
|
||||||
|
}
|
||||||
|
|
||||||
|
this.loadROM = function(title, data) {
|
||||||
|
rom = padBytes(data, 0x4000);
|
||||||
|
this.reset();
|
||||||
|
}
|
||||||
|
|
||||||
|
this.getRasterPosition = function() {
|
||||||
|
return {x:0, y:0}; // TODO
|
||||||
|
}
|
||||||
|
|
||||||
|
this.isRunning = function() {
|
||||||
|
return timer.isRunning();
|
||||||
|
}
|
||||||
|
this.pause = function() {
|
||||||
|
timer.stop();
|
||||||
|
}
|
||||||
|
this.resume = function() {
|
||||||
|
timer.start();
|
||||||
|
}
|
||||||
|
this.reset = function() {
|
||||||
|
cpu.reset();
|
||||||
|
}
|
||||||
|
this.readAddress = function(addr) {
|
||||||
|
return bus.read(addr);
|
||||||
|
}
|
||||||
|
|
||||||
|
this.loadState = function(state) {
|
||||||
|
cpu.loadState(state.c);
|
||||||
|
cpuram.mem.set(state.db);
|
||||||
|
dvgram.mem.set(state.db);
|
||||||
|
}
|
||||||
|
this.saveState = function() {
|
||||||
|
return {
|
||||||
|
c:cpu.saveState(),
|
||||||
|
cb:cpuram.mem.slice(0),
|
||||||
|
db:dvgram.mem.slice(0),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
this.getCPUState = function() {
|
||||||
|
return cpu.saveState();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// DIGITAL VIDEO GENERATOR
|
||||||
|
|
||||||
var DVGStateMachine = function(bus, video) {
|
var DVGStateMachine = function(bus, video) {
|
||||||
var self = this;
|
var self = this;
|
||||||
var pc = 0;
|
var pc = 0;
|
||||||
@ -172,7 +270,7 @@ var DVGStateMachine = function(bus, video) {
|
|||||||
|
|
||||||
this.runUntilHalt = function() {
|
this.runUntilHalt = function() {
|
||||||
this.go();
|
this.go();
|
||||||
for (var i=0; i<10000; i++) { // TODO
|
for (var i=0; i<10000; i++) { // TODO: limit execution
|
||||||
if (!running) break;
|
if (!running) break;
|
||||||
this.nextInstruction();
|
this.nextInstruction();
|
||||||
}
|
}
|
||||||
@ -243,4 +341,7 @@ var DVGStateMachine = function(bus, video) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
PLATFORMS['atarivec'] = AtariVectorPlatform;
|
//
|
||||||
|
|
||||||
|
PLATFORMS['vector-ataribw'] = AtariVectorPlatform;
|
||||||
|
PLATFORMS['vector-z80'] = VectorZ80Platform;
|
@ -246,6 +246,8 @@ var WilliamsPlatform = function(mainElement, proto) {
|
|||||||
memwrite_williams(dstaddr, curpix);
|
memwrite_williams(dstaddr, curpix);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO
|
||||||
|
/*
|
||||||
var trace = false;
|
var trace = false;
|
||||||
var _traceinsns = {};
|
var _traceinsns = {};
|
||||||
function _trace() {
|
function _trace() {
|
||||||
@ -255,7 +257,7 @@ var WilliamsPlatform = function(mainElement, proto) {
|
|||||||
console.log(hex(pc), cpu.getTstates());
|
console.log(hex(pc), cpu.getTstates());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
this.start = function() {
|
this.start = function() {
|
||||||
ram = new RAM(0xc000);
|
ram = new RAM(0xc000);
|
||||||
nvram = new RAM(0x400);
|
nvram = new RAM(0x400);
|
||||||
@ -283,7 +285,6 @@ var WilliamsPlatform = function(mainElement, proto) {
|
|||||||
timer = new AnimationTimer(60, function() {
|
timer = new AnimationTimer(60, function() {
|
||||||
if (!self.isRunning())
|
if (!self.isRunning())
|
||||||
return;
|
return;
|
||||||
var debugCond = self.getDebugCallback();
|
|
||||||
// interrupts happen every 1/4 of the screen
|
// interrupts happen every 1/4 of the screen
|
||||||
for (var quarter=0; quarter<4; quarter++) {
|
for (var quarter=0; quarter<4; quarter++) {
|
||||||
video_counter = [0x00, 0x3c, 0xbc, 0xfc][quarter];
|
video_counter = [0x00, 0x3c, 0xbc, 0xfc][quarter];
|
||||||
@ -293,19 +294,7 @@ var WilliamsPlatform = function(mainElement, proto) {
|
|||||||
if (cpu.requestInterrupt)
|
if (cpu.requestInterrupt)
|
||||||
cpu.requestInterrupt();
|
cpu.requestInterrupt();
|
||||||
}
|
}
|
||||||
var targetTstates = cpu.getTstates() + cpuCyclesPerFrame/4;
|
self.runCPU(cpu, cpuCyclesPerFrame/4);
|
||||||
if (debugCond || trace) {
|
|
||||||
while (cpu.getTstates() < targetTstates) {
|
|
||||||
_trace();
|
|
||||||
if (debugCond && debugCond()) {
|
|
||||||
debugCond = null;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
cpu.runFrame(cpu.getTstates() + 1);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
cpu.runFrame(targetTstates);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if (screenNeedsRefresh) {
|
if (screenNeedsRefresh) {
|
||||||
for (var i=0; i<0x9800; i++)
|
for (var i=0; i<0x9800; i++)
|
||||||
@ -377,6 +366,18 @@ var WilliamsPlatform = function(mainElement, proto) {
|
|||||||
|
|
||||||
var WilliamsZ80Platform = function(mainElement) {
|
var WilliamsZ80Platform = function(mainElement) {
|
||||||
this.__proto__ = new WilliamsPlatform(mainElement, BaseZ80Platform);
|
this.__proto__ = new WilliamsPlatform(mainElement, BaseZ80Platform);
|
||||||
|
|
||||||
|
this.ramStateToLongString = function(state) {
|
||||||
|
var blt = state.blt;
|
||||||
|
var sstart = (blt[2] << 8) + blt[3];
|
||||||
|
var dstart = (blt[4] << 8) + blt[5];
|
||||||
|
var w = blt[6] ^ 4; // blitter bug fix
|
||||||
|
var h = blt[7] ^ 4;
|
||||||
|
return "\nBLIT"
|
||||||
|
+ " " + hex(sstart,4) + " " + hex(dstart,4)
|
||||||
|
+ " w:" + hex(w) + " h:" + hex(h)
|
||||||
|
+ " f:" + hex(blt[0]) + " s:" + hex(blt[1]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
PLATFORMS['williams'] = WilliamsPlatform;
|
PLATFORMS['williams'] = WilliamsPlatform;
|
||||||
|
@ -25,6 +25,12 @@ var PLATFORM_PARAMS = {
|
|||||||
data_start: 0x9000,
|
data_start: 0x9000,
|
||||||
data_size: 0x3000,
|
data_size: 0x3000,
|
||||||
},
|
},
|
||||||
|
'vector-z80': {
|
||||||
|
code_start: 0x0,
|
||||||
|
code_size: 0x4000,
|
||||||
|
data_start: 0x4000,
|
||||||
|
data_size: 0x3000,
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
var loaded = {}
|
var loaded = {}
|
||||||
@ -96,6 +102,7 @@ function match_msvc(s) {
|
|||||||
var errline = parseInt(matches[2]);
|
var errline = parseInt(matches[2]);
|
||||||
msvc_errors.push({
|
msvc_errors.push({
|
||||||
line:errline,
|
line:errline,
|
||||||
|
type:matches[3],
|
||||||
msg:matches[4]
|
msg:matches[4]
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -417,6 +424,7 @@ function compileCC65(code, platform) {
|
|||||||
var errors = [];
|
var errors = [];
|
||||||
var errline = 0;
|
var errline = 0;
|
||||||
function match_fn(s) {
|
function match_fn(s) {
|
||||||
|
console.log(s);
|
||||||
var matches = re_err1.exec(s);
|
var matches = re_err1.exec(s);
|
||||||
if (matches) {
|
if (matches) {
|
||||||
errline = parseInt(matches[1]);
|
errline = parseInt(matches[1]);
|
||||||
@ -636,26 +644,38 @@ function compileSDCC(code, platform) {
|
|||||||
setupFS(FS, 'sdcc');
|
setupFS(FS, 'sdcc');
|
||||||
//FS.writeFile("main.c", code, {encoding:'utf8'});
|
//FS.writeFile("main.c", code, {encoding:'utf8'});
|
||||||
msvc_errors = [];
|
msvc_errors = [];
|
||||||
SDCC.callMain(['--vc', '--std-sdcc99', '-mz80', '-Wall',
|
SDCC.callMain(['--vc', '--std-sdcc99', '-mz80', //'-Wall',
|
||||||
'--c1mode', // '--debug',
|
'--c1mode', // '--debug',
|
||||||
//'-S', 'main.c',
|
//'-S', 'main.c',
|
||||||
//'--asm=z80asm',
|
//'--asm=z80asm',
|
||||||
'--fomit-frame-pointer', '--opt-code-speed',
|
'--fomit-frame-pointer', '--opt-code-speed',
|
||||||
'-o', 'main.asm']);
|
'-o', 'main.asm']);
|
||||||
if (msvc_errors.length) {
|
// ignore if all are warnings (TODO?)
|
||||||
|
var nwarnings = 0;
|
||||||
|
for (var err of msvc_errors) {
|
||||||
|
if (err.type && err.type.startsWith("warning"))
|
||||||
|
nwarnings++;
|
||||||
|
}
|
||||||
|
if (msvc_errors.length && nwarnings < msvc_errors.length) {
|
||||||
return {errors:msvc_errors};
|
return {errors:msvc_errors};
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
var asmout = FS.readFile("main.asm", {encoding:'utf8'});
|
var asmout = FS.readFile("main.asm", {encoding:'utf8'});
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
return {errors:[{line:1, msg:e+""}]};
|
msvc_errors.push({line:1, msg:e+""});
|
||||||
|
return {errors:msvc_errors};
|
||||||
}
|
}
|
||||||
var warnings = msvc_errors;
|
var warnings = msvc_errors;
|
||||||
|
try {
|
||||||
var result = assemblelinkSDASZ80(asmout, platform, true);
|
var result = assemblelinkSDASZ80(asmout, platform, true);
|
||||||
|
} catch (e) {
|
||||||
|
msvc_errors.push({line:1, msg:e+""});
|
||||||
|
return {errors:msvc_errors};
|
||||||
|
}
|
||||||
result.asmlines = result.lines;
|
result.asmlines = result.lines;
|
||||||
result.lines = result.srclines;
|
result.lines = result.srclines;
|
||||||
result.srclines = null;
|
result.srclines = null;
|
||||||
result.errors = result.errors.concat(warnings);
|
//result.errors = result.errors.concat(warnings);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -36,6 +36,9 @@
|
|||||||
<script src="src/disasm.js"></script>
|
<script src="src/disasm.js"></script>
|
||||||
<script src="src/platform/vcs.js"></script>
|
<script src="src/platform/vcs.js"></script>
|
||||||
<script src="src/platform/mw8080bw.js"></script>
|
<script src="src/platform/mw8080bw.js"></script>
|
||||||
|
<script src="src/platform/vicdual.js"></script>
|
||||||
|
<script src="src/platform/williams.js"></script>
|
||||||
|
<script src="src/platform/galaxian.js"></script>
|
||||||
|
|
||||||
<script src="test/ui/testemus.js"></script>
|
<script src="test/ui/testemus.js"></script>
|
||||||
<script>
|
<script>
|
||||||
|
0
tools/p4_to_48pix.py
Normal file → Executable file
0
tools/p4_to_48pix.py
Normal file → Executable file
0
tools/p4_to_pfbytes.py
Normal file → Executable file
0
tools/p4_to_pfbytes.py
Normal file → Executable file
4
tools/parsebdf3x5.py
Normal file → Executable file
4
tools/parsebdf3x5.py
Normal file → Executable file
@ -41,6 +41,7 @@ output = []
|
|||||||
outputlo = []
|
outputlo = []
|
||||||
outputhi = []
|
outputhi = []
|
||||||
for ch in range(lochar,hichar+1):
|
for ch in range(lochar,hichar+1):
|
||||||
|
x = 0
|
||||||
bytes = chars.get(ch)
|
bytes = chars.get(ch)
|
||||||
#bytes = bytes + [0]
|
#bytes = bytes + [0]
|
||||||
if not bytes:
|
if not bytes:
|
||||||
@ -57,8 +58,11 @@ for ch in range(lochar,hichar+1):
|
|||||||
|
|
||||||
def tohex(v):
|
def tohex(v):
|
||||||
return '%02x'%v
|
return '%02x'%v
|
||||||
|
def tohex2(v):
|
||||||
|
return '0x%02x'%v
|
||||||
|
|
||||||
print '\thex ' + string.join(map(tohex,output),'')
|
print '\thex ' + string.join(map(tohex,output),'')
|
||||||
|
print string.join(map(tohex2,output),',')
|
||||||
print '\thex ' + string.join(map(tohex,outputlo),'')
|
print '\thex ' + string.join(map(tohex,outputlo),'')
|
||||||
print '\thex ' + string.join(map(tohex,outputhi),'')
|
print '\thex ' + string.join(map(tohex,outputhi),'')
|
||||||
|
|
||||||
|
5
tools/parsebdf8.py
Normal file → Executable file
5
tools/parsebdf8.py
Normal file → Executable file
@ -36,6 +36,7 @@ with open(sys.argv[1],'r') as f:
|
|||||||
x = 0
|
x = 0
|
||||||
output = []
|
output = []
|
||||||
invoutput = []
|
invoutput = []
|
||||||
|
revoutput = []
|
||||||
rotoutput = []
|
rotoutput = []
|
||||||
rot2output = []
|
rot2output = []
|
||||||
for ch in range(lochar,hichar+1):
|
for ch in range(lochar,hichar+1):
|
||||||
@ -48,6 +49,8 @@ for ch in range(lochar,hichar+1):
|
|||||||
invoutput.append(b ^ 0xff)
|
invoutput.append(b ^ 0xff)
|
||||||
rotoutput.append(0)
|
rotoutput.append(0)
|
||||||
rot2output.append(0)
|
rot2output.append(0)
|
||||||
|
for i in range(0,8):
|
||||||
|
revoutput.append(bytes[7-i])
|
||||||
for x in range(0,height):
|
for x in range(0,height):
|
||||||
for y in range(0,height):
|
for y in range(0,height):
|
||||||
#rotoutput[-7+x] |= (((output[-1-y]>>x)&1)<<y)
|
#rotoutput[-7+x] |= (((output[-1-y]>>x)&1)<<y)
|
||||||
@ -59,7 +62,7 @@ def tohex(v):
|
|||||||
def tohex2(v):
|
def tohex2(v):
|
||||||
return '0x%02x'%v
|
return '0x%02x'%v
|
||||||
|
|
||||||
for arr in [output,invoutput,rotoutput,rot2output]:
|
for arr in [output,revoutput,invoutput,rotoutput,rot2output]:
|
||||||
print '\thex ' + string.join(map(tohex,arr),'')
|
print '\thex ' + string.join(map(tohex,arr),'')
|
||||||
for i in range(0,len(output),height):
|
for i in range(0,len(output),height):
|
||||||
print '{', string.join(map(tohex2,arr[i:i+height]),','), '},',
|
print '{', string.join(map(tohex2,arr[i:i+height]),','), '},',
|
||||||
|
0
tools/pbm_to_c.py
Normal file → Executable file
0
tools/pbm_to_c.py
Normal file → Executable file
Loading…
Reference in New Issue
Block a user