mirror of
https://github.com/sehugg/8bitworkshop.git
synced 2024-06-13 09:29:35 +00:00
fixed tests, printFlags, debug info
This commit is contained in:
parent
05f5b96256
commit
bf584674ab
|
@ -62,7 +62,8 @@ TODO:
|
||||||
- figure out folders for projects for real
|
- figure out folders for projects for real
|
||||||
- verilog download rom
|
- verilog download rom
|
||||||
- why loadState() on verilog kill perf?
|
- why loadState() on verilog kill perf?
|
||||||
|
- click to break on raster position
|
||||||
|
- restructure folders
|
||||||
|
|
||||||
|
|
||||||
WEB WORKER FORMAT
|
WEB WORKER FORMAT
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
|
|
||||||
import { RAM, RasterVideo, dumpRAM, lookupSymbol } from "./emu";
|
import { RAM, RasterVideo, dumpRAM, lookupSymbol } from "./emu";
|
||||||
import { hex } from "./util";
|
import { hex, printFlags } from "./util";
|
||||||
import { CodeAnalyzer } from "./analysis";
|
import { CodeAnalyzer } from "./analysis";
|
||||||
import { disassemble6502 } from "./cpu/disasm6502";
|
import { disassemble6502 } from "./cpu/disasm6502";
|
||||||
import { disassembleZ80 } from "./cpu/disasmz80";
|
import { disassembleZ80 } from "./cpu/disasmz80";
|
||||||
|
@ -362,11 +362,7 @@ export function getOpcodeMetadata_6502(opcode, address) {
|
||||||
|
|
||||||
export function cpuStateToLongString_Z80(c) {
|
export function cpuStateToLongString_Z80(c) {
|
||||||
function decodeFlags(flags) {
|
function decodeFlags(flags) {
|
||||||
var flagspec = "SZ-H-VNC";
|
return printFlags(flags, ["S","Z",,"H",,"V","N","C"], true);
|
||||||
var s = "";
|
|
||||||
for (var i=0; i<8; i++)
|
|
||||||
s += (flags & (128>>i)) ? flagspec.slice(i,i+1) : "-";
|
|
||||||
return s; // TODO
|
|
||||||
}
|
}
|
||||||
return "PC " + hex(c.PC,4) + " " + decodeFlags(c.AF) + "\n"
|
return "PC " + hex(c.PC,4) + " " + decodeFlags(c.AF) + "\n"
|
||||||
+ "SP " + hex(c.SP,4) + " IR " + hex(c.IR,4) + "\n"
|
+ "SP " + hex(c.SP,4) + " IR " + hex(c.IR,4) + "\n"
|
||||||
|
@ -553,11 +549,7 @@ export function getToolForFilename_z80(fn) {
|
||||||
|
|
||||||
export function cpuStateToLongString_6809(c) {
|
export function cpuStateToLongString_6809(c) {
|
||||||
function decodeFlags(flags) {
|
function decodeFlags(flags) {
|
||||||
var flagspec = "EFHINZVC";
|
return printFlags(flags, ["E","F","H","I", "N","Z","V","C"], true);
|
||||||
var s = "";
|
|
||||||
for (var i=0; i<8; i++)
|
|
||||||
s += (flags & (128>>i)) ? flagspec.slice(i,i+1) : "-";
|
|
||||||
return s; // TODO
|
|
||||||
}
|
}
|
||||||
return "PC " + hex(c.PC,4) + " " + decodeFlags(c.CC) + "\n"
|
return "PC " + hex(c.PC,4) + " " + decodeFlags(c.CC) + "\n"
|
||||||
+ "SP " + hex(c.SP,4) + "\n"
|
+ "SP " + hex(c.SP,4) + "\n"
|
||||||
|
|
|
@ -11,7 +11,7 @@ const ASTROCADE_PRESETS = [
|
||||||
{id:'03-horcbpal.asm', name:'Paddle Demo'},
|
{id:'03-horcbpal.asm', name:'Paddle Demo'},
|
||||||
];
|
];
|
||||||
|
|
||||||
// TODO: fix keys, more controllers, paddles, vibrato/noise, border color, full refresh
|
// TODO: fix keys, more controllers, paddles, vibrato/noise, border color, full refresh, debug info
|
||||||
|
|
||||||
const ASTROCADE_KEYCODE_MAP = makeKeycodeMap([
|
const ASTROCADE_KEYCODE_MAP = makeKeycodeMap([
|
||||||
// player 1
|
// player 1
|
||||||
|
@ -79,6 +79,8 @@ const _BallyAstrocadePlatform = function(mainElement) {
|
||||||
// default palette
|
// default palette
|
||||||
for (var i=0; i<8; i++)
|
for (var i=0; i<8; i++)
|
||||||
palette[i] = ASTROCADE_PALETTE[i];
|
palette[i] = ASTROCADE_PALETTE[i];
|
||||||
|
|
||||||
|
var refreshlines = 0;
|
||||||
|
|
||||||
function ramwrite(a:number, v:number) {
|
function ramwrite(a:number, v:number) {
|
||||||
ram.mem[a] = v;
|
ram.mem[a] = v;
|
||||||
|
@ -90,6 +92,12 @@ const _BallyAstrocadePlatform = function(mainElement) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function refreshline(y:number) {
|
||||||
|
var ofs = y*swidth/4;
|
||||||
|
for (var i=0; i<swidth/4; i++)
|
||||||
|
ramwrite(ofs+i, ram.mem[ofs+i]);
|
||||||
|
}
|
||||||
|
|
||||||
function magicwrite(a:number, v:number) {
|
function magicwrite(a:number, v:number) {
|
||||||
// expand
|
// expand
|
||||||
if (magicop & 0x8) {
|
if (magicop & 0x8) {
|
||||||
|
@ -142,6 +150,7 @@ const _BallyAstrocadePlatform = function(mainElement) {
|
||||||
|
|
||||||
function setpalette(a:number, v:number) {
|
function setpalette(a:number, v:number) {
|
||||||
palette[a&7] = ASTROCADE_PALETTE[v&0xff];
|
palette[a&7] = ASTROCADE_PALETTE[v&0xff];
|
||||||
|
refreshlines = sheight;
|
||||||
}
|
}
|
||||||
|
|
||||||
function setbordercolor() {
|
function setbordercolor() {
|
||||||
|
@ -263,6 +272,10 @@ const _BallyAstrocadePlatform = function(mainElement) {
|
||||||
if (sl == inlin && (inmod & 0x8)) {
|
if (sl == inlin && (inmod & 0x8)) {
|
||||||
cpu.requestInterrupt(infbk);
|
cpu.requestInterrupt(infbk);
|
||||||
}
|
}
|
||||||
|
if (refreshlines>0) {
|
||||||
|
refreshline(sl);
|
||||||
|
refreshlines--;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (!novideo) {
|
if (!novideo) {
|
||||||
video.updateFrame(0, 0, 0, 0, swidth, verbl+2);
|
video.updateFrame(0, 0, 0, 0, swidth, verbl+2);
|
||||||
|
|
|
@ -225,14 +225,12 @@ const _JSNESPlatform = function(mainElement) {
|
||||||
}
|
}
|
||||||
|
|
||||||
getDebugCategories() {
|
getDebugCategories() {
|
||||||
return ['CPU','ZPRAM','Stack','PPU'];
|
return super.getDebugCategories().concat(['PPU']);
|
||||||
}
|
}
|
||||||
getDebugInfo(category, state) {
|
getDebugInfo(category, state) {
|
||||||
switch (category) {
|
switch (category) {
|
||||||
case 'CPU': return cpuStateToLongString_6502(state.c);
|
|
||||||
case 'ZPRAM': return dumpRAM(state.b, 0x0, 0x100);
|
|
||||||
case 'Stack': return dumpStackToString(this, state.b, 0x100, 0x1ff, 0x100+state.c.SP, 0x20);
|
|
||||||
case 'PPU': return this.ppuStateToLongString(state.ppu, state.b);
|
case 'PPU': return this.ppuStateToLongString(state.ppu, state.b);
|
||||||
|
default: return super.getDebugInfo(category, state);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ppuStateToLongString(ppu, mem) {
|
ppuStateToLongString(ppu, mem) {
|
||||||
|
|
12
src/util.ts
12
src/util.ts
|
@ -360,3 +360,15 @@ export function safe_extend(deep, dest, src) {
|
||||||
return dest;
|
return dest;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function printFlags(val:number, names:string[], r2l:boolean) {
|
||||||
|
var s = '';
|
||||||
|
for (var i=0; i<names.length; i++) {
|
||||||
|
if (names[i]) {
|
||||||
|
var bit = 1 << (r2l ? names.length-1-i : i);
|
||||||
|
if (i > 0) s += " ";
|
||||||
|
s += (val & (1<<bit)) ? names[i] : "-";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -175,7 +175,7 @@ describe('Worker', function() {
|
||||||
assert.ok(fn);
|
assert.ok(fn);
|
||||||
done(err, msg);
|
done(err, msg);
|
||||||
};
|
};
|
||||||
doBuild(msgs, done2, 2799, 0, 0);
|
doBuild(msgs, done2, 2781, 0, 0);
|
||||||
});
|
});
|
||||||
it('should NOT compile verilog example', function(done) {
|
it('should NOT compile verilog example', function(done) {
|
||||||
var csource = "foobar";
|
var csource = "foobar";
|
||||||
|
@ -197,7 +197,7 @@ describe('Worker', function() {
|
||||||
assert.ok(fn);
|
assert.ok(fn);
|
||||||
done(err, msg);
|
done(err, msg);
|
||||||
};
|
};
|
||||||
doBuild(msgs, done2, 49357, 0, 0);
|
doBuild(msgs, done2, 49339, 0, 0);
|
||||||
});
|
});
|
||||||
it('should compile verilog assembler file (JSASM)', function(done) {
|
it('should compile verilog assembler file (JSASM)', function(done) {
|
||||||
var csource = ab2str(fs.readFileSync('presets/verilog/test2.asm'));
|
var csource = ab2str(fs.readFileSync('presets/verilog/test2.asm'));
|
||||||
|
@ -214,7 +214,7 @@ describe('Worker', function() {
|
||||||
assert.ok(fn);
|
assert.ok(fn);
|
||||||
done(err, msg);
|
done(err, msg);
|
||||||
};
|
};
|
||||||
doBuild(msgs, done2, 1997627, 0, 0);
|
doBuild(msgs, done2, 1997609, 0, 0);
|
||||||
});
|
});
|
||||||
it('should NOT preprocess SDCC', function(done) {
|
it('should NOT preprocess SDCC', function(done) {
|
||||||
compile('sdcc', 'int x=0\n#bah\n', 'mw8080bw', done, 0, 0, 1);
|
compile('sdcc', 'int x=0\n#bah\n', 'mw8080bw', done, 0, 0, 1);
|
||||||
|
|
Loading…
Reference in New Issue
Block a user