mirror of
https://github.com/sehugg/8bitworkshop.git
synced 2026-10-25 15:05:25 +00:00
45 lines
2.0 KiB
TypeScript
45 lines
2.0 KiB
TypeScript
import assert from "assert";
|
|
import { describe, it } from "mocha";
|
|
import { sdccTarget, loadHeader } from "../../src/worker/tools/sdcc";
|
|
import { getToolForFilename_6502, getToolForFilename_z80, getToolForFilename_apple2 } from "../../src/common/toolselect";
|
|
|
|
describe("sdcc targets", function () {
|
|
|
|
it("maps the platform arch to an SDCC port", function () {
|
|
assert.deepStrictEqual(
|
|
['z80', 'gbz80', '6502', undefined].map((a) => sdccTarget(a).mflag),
|
|
['-mz80', '-mgbz80', '-mmos6502', '-mz80']);
|
|
assert.strictEqual(sdccTarget('6502').as, 'sdas6500');
|
|
assert.strictEqual(sdccTarget('gbz80').as, 'sdasgb');
|
|
});
|
|
|
|
it("only the mos6502 port is SDCC 4 only, and uses sdcccall(0)", function () {
|
|
assert.ok(sdccTarget('6502').only4);
|
|
assert.ok(!sdccTarget('z80').only4);
|
|
assert.strictEqual(sdccTarget('6502').sdcccall, 0);
|
|
assert.strictEqual(sdccTarget('z80').sdcccall, 1);
|
|
});
|
|
|
|
it("selects SDCC for -sdcc.c on 6502 platforms, cc65 otherwise", function () {
|
|
assert.strictEqual(getToolForFilename_6502('hello-sdcc.c'), 'sdcc');
|
|
assert.strictEqual(getToolForFilename_6502('hello.c'), 'cc65');
|
|
});
|
|
|
|
it("selects SDCC for .sdcc files", function () {
|
|
assert.strictEqual(getToolForFilename_6502('hello.sdcc'), 'sdcc');
|
|
assert.strictEqual(getToolForFilename_apple2('hello.sdcc'), 'sdcc');
|
|
assert.strictEqual(getToolForFilename_z80('skeleton.sdcc'), 'sdcc');
|
|
});
|
|
|
|
|
|
it("wraps linked images in a load header", function () {
|
|
const img = Uint8Array.of(1, 2, 3, 4, 5);
|
|
assert.deepStrictEqual(Array.from(loadHeader('dos33', img, 0x803, 3)), [3, 8, 3, 0, 1, 2, 3]);
|
|
// load address, link pointer, line 10, SYS 2061, then the code
|
|
assert.deepStrictEqual(Array.from(loadHeader('prg', img, 0x80d, 2)),
|
|
[1, 8, 0x0b, 8, 10, 0, 0x9e, 0x32, 0x30, 0x36, 0x31, 0, 0, 0, 1, 2]);
|
|
assert.throws(() => loadHeader('prg', img, 0x900, 2), /\$80d/);
|
|
assert.throws(() => loadHeader('bogus', img, 0, 0), /unknown load_header/);
|
|
});
|
|
});
|