1
0
mirror of https://github.com/fadden/6502bench.git synced 2026-04-20 04:16:47 +00:00
Files
6502bench/SourceGen/SGTestData/20180-extension-scripts-c.cs
T
Andy McFadden 037b982d94 Allow scripts to handle COP and WDM inlines
The code that allows scripts to catch and handle BRK/JSR/JSL followed
by inline data now also handles COP and WDM.

(issue #177)
2025-11-30 14:59:39 -08:00

64 lines
2.0 KiB
C#

// Copyright 2025 faddenSoft. All Rights Reserved.
// See the LICENSE.txt file for distribution terms (Apache 2.0).
using System;
using System.Collections.Generic;
using PluginCommon;
// COP/WDM handler
namespace RuntimeData.Test20180 {
public class Test20180C : MarshalByRefObject, IPlugin, IPlugin_InlineCop, IPlugin_InlineWdm {
private IApplication mAppRef;
private byte[] mFileData;
private AddressTranslate mAddrTrans;
public string Identifier {
get {
return "Test 20180-extension-scripts C";
}
}
public void Prepare(IApplication appRef, byte[] fileData, AddressTranslate addrTrans) {
mAppRef = appRef;
mFileData = fileData;
mAddrTrans = addrTrans;
mAppRef.DebugLog("Test20180-C(id=" + AppDomain.CurrentDomain.Id + "): prepare()");
}
public void Unprepare() {
mAppRef = null;
mFileData = null;
mAddrTrans = null;
}
public void CheckCop(int offset, out bool noContinue) {
HandleString(offset, out noContinue);
}
public void CheckWdm(int offset, out bool noContinue) {
HandleString(offset, out noContinue);
}
private void HandleString(int offset, out bool noContinue) {
const int INSTR_LEN = 2; // opcode + byte
noContinue = false;
// Handle as string with 8-bit length prefix.
if (offset + INSTR_LEN >= mFileData.Length) {
return; // length byte is off end
}
int len = mFileData[offset + INSTR_LEN];
if (offset + INSTR_LEN + 1 + len > mFileData.Length) {
// ran off the end
mAppRef.DebugLog("L1 string ran off end of file at +" +
(offset + INSTR_LEN).ToString("x6"));
return;
}
mAppRef.SetInlineDataFormat(offset + INSTR_LEN, len + 1,
DataType.StringL8, DataSubType.Ascii, null);
}
}
}