diff --git a/src/ide/ui.ts b/src/ide/ui.ts
index 2362e991..63c3cbe3 100644
--- a/src/ide/ui.ts
+++ b/src/ide/ui.ts
@@ -15,7 +15,7 @@ import { GHSession, GithubService, getRepos, parseGithubURL } from "./services";
import Split = require('split.js');
import { importPlatform } from "../platform/_index";
import { DisassemblerView, ListingView, PC_LINE_LOOKAHEAD, SourceEditor } from "./views/editors";
-import { AddressHeatMapView, BinaryFileView, MemoryMapView, MemoryView, ProbeLogView, ProbeSymbolView, RasterPCHeatMapView, ScanlineIOView, VRAMMemoryView } from "./views/debugviews";
+import { AddressHeatMapView, BinaryFileView, MemoryMapView, MemoryView, ProbeLogView, ProbeSymbolView, RasterPCHeatMapView, RasterStackMapView, ScanlineIOView, VRAMMemoryView } from "./views/debugviews";
import { AssetEditorView } from "./views/asseteditor";
import { isMobileDevice } from "./views/baseviews";
import { CallStackView, DebugBrowserView } from "./views/treeviews";
@@ -367,6 +367,9 @@ function refreshWindowList() {
addWindowItem("#crtheatmap", "CRT Probe", () => {
return new RasterPCHeatMapView();
});
+ addWindowItem("#stackheatmap", "Stack Activity", () => {
+ return new RasterStackMapView();
+ });
addWindowItem("#probelog", "Probe Log", () => {
return new ProbeLogView();
});
diff --git a/src/ide/views/debugviews.ts b/src/ide/views/debugviews.ts
index df425037..a2a7d0fd 100644
--- a/src/ide/views/debugviews.ts
+++ b/src/ide/views/debugviews.ts
@@ -370,6 +370,7 @@ export abstract class ProbeViewBaseBase {
var row=0;
var col=0;
var clk=0;
+ this.sp = 0;
for (var i=0; i
> 8) & 0xff;
@@ -593,25 +594,32 @@ export class AddressHeatMapView extends ProbeBitmapViewBase implements ProjectVi
export class RasterPCHeatMapView extends ProbeBitmapViewBase implements ProjectView {
drawEvent(op, addr, col, row) {
- var iofs = col + row * this.canvas.width;
- var rgb = this.getOpRGB(op);
+ var rgb = this.getOpRGB(op, addr);
if (!rgb) return;
- var data = this.datau32[iofs];
- data = data | rgb | 0xff000000;
- this.datau32[iofs] = data;
+ var iofs = col + row * this.canvas.width;
+ var data = rgb | 0xff000000;
+ this.datau32[iofs] |= data;
}
}
export class RasterStackMapView extends ProbeBitmapViewBase implements ProjectView {
+ interrupt: number;
+
drawEvent(op, addr, col, row) {
- var iofs = col + row * this.canvas.width;
- var rgb = this.getOpRGB(op);
- rgb = (0x1f3f7f << (this.sp & 15)) & 0xffffff;
- if (!rgb) return;
- var data = this.datau32[iofs];
- data = data | rgb | 0xff000000;
- this.datau32[iofs] = data;
+ var rgb;
+ rgb = (0x030609 * (this.sp & 7)) | 0x404040;
+ if (op == ProbeFlags.INTERRUPT) this.interrupt = 1;
+ if (this.interrupt == 1 && op == ProbeFlags.SP_PUSH) this.interrupt = addr;
+ if (this.interrupt > 1 && this.sp > this.interrupt) this.interrupt = 0;
+ if (this.interrupt) rgb |= 0x800000;
+ if (op == ProbeFlags.EXECUTE) {
+ var iofs = col + row * this.canvas.width;
+ var data = rgb | 0xff000000;
+ while (iofs >= 0 && !(this.datau32[iofs] & 0xffffff)) {
+ this.datau32[iofs--] = data;
+ }
+ }
}
}
diff --git a/src/machine/c64.ts b/src/machine/c64.ts
index 8acfcee4..f107c75c 100644
--- a/src/machine/c64.ts
+++ b/src/machine/c64.ts
@@ -226,17 +226,21 @@ export class C64_WASMMachine extends BaseWASMMachine implements Machine, Probeab
let screen = vicbank + (state.vic[0x18] >> 4) * 0x400;
let isbitmap = state.vic[0x11] & 0x20;
let ischar = (state.cia2[0]&1)==1 && (state.vic[0x18]&12)==4;
- s += `Scanline: ${lpad(this.getRasterY(),3)} `;
+ let rasterX = state.state[0xf4];
+ let rasterY = this.getRasterY();
+ s += 'Mode:';
if (state.vic[0x11] & 0x20) s += ' BITMAP'; else s += ' CHAR';
if (state.vic[0x16] & 0x10) s += ' MULTICOLOR';
if (state.vic[0x11] & 0x40) s += ' EXTENDED';
s += "\n";
+ s += `Raster: (${lpad(rasterX,3)}, ${lpad(rasterY,3)}) `;
+ s += `Scroll: (${state.vic[0x16] & 7}, ${state.vic[0x11] & 7})`;
+ s += "\n";
s += `VIC Bank: $${hex(vicbank,4)} Scrn: $${hex(screen,4)} `;
if (isbitmap) s += `Bitmap: $${hex(charmem&0xe000,4)}`
else if (ischar) s += `Char: ROM $${hex(charmem,4)}`;
else s += `Char: $${hex(charmem,4)}`;
s += "\n";
- s += `Scroll X:${state.vic[0x16] & 7} Y:${state.vic[0x11] & 7}\n`;
s += dumpRAM(m, 0xd000, 64);
return s;
}
diff --git a/src/platform/c64.ts b/src/platform/c64.ts
index 1f227ff8..ecc07101 100644
--- a/src/platform/c64.ts
+++ b/src/platform/c64.ts
@@ -19,12 +19,12 @@ const C64_PRESETS = [
{id:'scroll5.c', name:'Scrolling (Camera Following)'},
{id:'side_scroller.c', name:'Side-Scrolling Game'},
{id:'fullscrollgame.c', name:'Full-Scrolling Game'},
- {id:'test_multiplex.c', name:'Sprite Multiplexing (Simple)'},
- {id:'test_multispritelib.c', name:'Sprite Multiplexing (Library)'},
- {id:'mcbitmap.c', name:'Multicolor Lines+Flood Fill'},
+ {id:'test_multiplex.c', name:'Sprite Retriggering'},
+ {id:'test_multispritelib.c', name:'Sprite Multiplexing Library'},
+ {id:'mcbitmap.c', name:'Multicolor Bitmap Mode'},
//{id:'mandel.c', name:'Mandelbrot Fractal'},
{id:'musicplayer.c', name:'Music Player'},
- {id:'sidtune.dasm', name:'Tiny SID Tune (ASM)'},
+ //{id:'sidtune.dasm', name:'Tiny SID Tune (ASM)'},
{id:'siddemo.c', name:'SID Player Demo'},
{id:'climber.c', name:'Climber Game'},
];