From f8985e38583d354f9cc964ec3fb614350f915f5e Mon Sep 17 00:00:00 2001 From: Steven Hugg Date: Tue, 23 Aug 2022 12:48:39 -0500 Subject: [PATCH] c64: debug info raster x/y --- src/ide/ui.ts | 5 ++++- src/ide/views/debugviews.ts | 36 ++++++++++++++++++++++-------------- src/machine/c64.ts | 8 ++++++-- src/platform/c64.ts | 8 ++++---- 4 files changed, 36 insertions(+), 21 deletions(-) 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'}, ];