mirror of
https://github.com/sehugg/8bitworkshop.git
synced 2024-07-27 08:29:06 +00:00
196 lines
8.1 KiB
JavaScript
196 lines
8.1 KiB
JavaScript
|
"use strict";
|
||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||
|
const baseplatform_1 = require("../common/baseplatform");
|
||
|
const emu_1 = require("../common/emu");
|
||
|
const mameplatform_1 = require("../common/mameplatform");
|
||
|
const atari8_1 = require("../machine/atari8");
|
||
|
var Atari8_PRESETS = [
|
||
|
{ id: 'hello.dasm', name: 'Hello World (ASM)' },
|
||
|
{ id: 'hellopm.dasm', name: 'Hello Sprites (ASM)' },
|
||
|
{ id: 'helloconio.c', name: 'Text Mode (C)' },
|
||
|
{ id: 'siegegame.c', name: 'Siege Game (C)' },
|
||
|
{ id: 'hellodlist.c', name: 'Display List (C)' },
|
||
|
];
|
||
|
var Atari800_PRESETS = Atari8_PRESETS.concat([
|
||
|
{ id: 'sieve.bas', name: 'Benchmark (FastBasic)' },
|
||
|
{ id: 'pmtest.bas', name: 'Sprites Test (FastBasic)' },
|
||
|
{ id: 'dli.bas', name: 'DLI Test (FastBasic)' },
|
||
|
{ id: 'joyas.bas', name: 'Match-3 Game (FastBasic)' },
|
||
|
]);
|
||
|
const ATARI8_KEYCODE_MAP = (0, emu_1.makeKeycodeMap)([
|
||
|
[emu_1.Keys.VK_SPACE, 0, 0],
|
||
|
[emu_1.Keys.VK_ENTER, 0, 0],
|
||
|
]);
|
||
|
const Atari800_MemoryMap = { main: [
|
||
|
{ name: 'RAM', start: 0x0, size: 0x10000, type: 'ram' },
|
||
|
{ name: 'Left Cartridge ROM', start: 0xa000, size: 0x2000, type: 'rom' },
|
||
|
{ name: 'GTIA', start: 0xd000, size: 0x20, type: 'io' },
|
||
|
{ name: 'POKEY', start: 0xd200, size: 0x10, type: 'io' },
|
||
|
{ name: 'PIA', start: 0xd300, size: 0x04, type: 'io' },
|
||
|
{ name: 'ANTIC', start: 0xd400, size: 0x10, type: 'io' },
|
||
|
{ name: 'Cartridge Control Line', start: 0xd600, size: 0x100, type: 'io' },
|
||
|
{ name: 'ROM', start: 0xd800, size: 0x800, type: 'rom' },
|
||
|
{ name: 'ATARI Character Set', start: 0xe000, size: 0x400, type: 'rom' },
|
||
|
{ name: 'ROM', start: 0xe400, size: 0x1c00, type: 'rom' },
|
||
|
] };
|
||
|
function getToolForFilename_Atari8(fn) {
|
||
|
if (fn.endsWith(".bas") || fn.endsWith(".fb") || fn.endsWith(".fbi"))
|
||
|
return "fastbasic";
|
||
|
else
|
||
|
return (0, baseplatform_1.getToolForFilename_6502)(fn);
|
||
|
}
|
||
|
/// MAME support
|
||
|
class Atari8MAMEPlatform extends mameplatform_1.BaseMAME6502Platform {
|
||
|
constructor() {
|
||
|
super(...arguments);
|
||
|
this.getToolForFilename = getToolForFilename_Atari8;
|
||
|
this.getOpcodeMetadata = baseplatform_1.getOpcodeMetadata_6502;
|
||
|
}
|
||
|
getPresets() { return Atari8_PRESETS; }
|
||
|
getDefaultExtension() { return ".asm"; }
|
||
|
;
|
||
|
showHelp(tool, ident) {
|
||
|
if (tool == 'fastbasic')
|
||
|
window.open("https://github.com/dmsc/fastbasic/blob/master/manual.md", "_help");
|
||
|
else
|
||
|
window.open("https://atariwiki.org/wiki/Wiki.jsp?page=Assembler", "_help"); // TODO
|
||
|
}
|
||
|
}
|
||
|
class Atari8WASIMAMEPlatform extends mameplatform_1.BaseMAME6502Platform {
|
||
|
constructor() {
|
||
|
super(...arguments);
|
||
|
this.getToolForFilename = getToolForFilename_Atari8;
|
||
|
this.getOpcodeMetadata = baseplatform_1.getOpcodeMetadata_6502;
|
||
|
}
|
||
|
getPresets() { return Atari8_PRESETS; }
|
||
|
getDefaultExtension() { return ".asm"; }
|
||
|
;
|
||
|
showHelp(tool, ident) {
|
||
|
if (tool == 'fastbasic')
|
||
|
window.open("https://github.com/dmsc/fastbasic/blob/master/manual.md", "_help");
|
||
|
else
|
||
|
window.open("https://atariwiki.org/wiki/Wiki.jsp?page=Assembler", "_help"); // TODO
|
||
|
}
|
||
|
}
|
||
|
class Atari800MAMEPlatform extends Atari8MAMEPlatform {
|
||
|
constructor() {
|
||
|
super(...arguments);
|
||
|
this.getMemoryMap = function () { return Atari800_MemoryMap; };
|
||
|
}
|
||
|
getPresets() { return Atari800_PRESETS; }
|
||
|
loadROM(title, data) {
|
||
|
if (!this.started) {
|
||
|
this.startModule(this.mainElement, {
|
||
|
jsfile: 'mame8bitws.js',
|
||
|
biosfile: 'a800xl.zip',
|
||
|
cfgfile: 'a800xl.cfg',
|
||
|
driver: 'a800xl',
|
||
|
width: 336 * 2,
|
||
|
height: 225 * 2,
|
||
|
romfn: '/emulator/cart.rom',
|
||
|
romdata: new Uint8Array(data),
|
||
|
romsize: 0x2000,
|
||
|
preInit: function (_self) {
|
||
|
},
|
||
|
});
|
||
|
}
|
||
|
else {
|
||
|
this.loadROMFile(data);
|
||
|
this.loadRegion(":cartleft:cart:rom", data);
|
||
|
}
|
||
|
}
|
||
|
start() {
|
||
|
}
|
||
|
}
|
||
|
class Atari5200MAMEPlatform extends Atari8MAMEPlatform {
|
||
|
constructor() {
|
||
|
super(...arguments);
|
||
|
this.getMemoryMap = function () {
|
||
|
return { main: [
|
||
|
{ name: 'RAM', start: 0x0, size: 0x4000, type: 'ram' },
|
||
|
{ name: 'Cartridge ROM', start: 0x4000, size: 0x8000, type: 'rom' },
|
||
|
{ name: 'GTIA', start: 0xc000, size: 0x20, type: 'io' },
|
||
|
{ name: 'ANTIC', start: 0xd400, size: 0x10, type: 'io' },
|
||
|
{ name: 'POKEY', start: 0xe800, size: 0x10, type: 'io' },
|
||
|
{ name: 'ATARI Character Set', start: 0xf800, size: 0x400, type: 'rom' },
|
||
|
{ name: 'ROM', start: 0xfc00, size: 0x400, type: 'rom' },
|
||
|
] };
|
||
|
};
|
||
|
}
|
||
|
loadROM(title, data) {
|
||
|
if (!this.started) {
|
||
|
this.startModule(this.mainElement, {
|
||
|
jsfile: 'mame8bitws.js',
|
||
|
biosfile: 'a5200/5200.rom',
|
||
|
cfgfile: 'a5200.cfg',
|
||
|
driver: 'a5200',
|
||
|
width: 336 * 2,
|
||
|
height: 225 * 2,
|
||
|
romfn: '/emulator/cart.rom',
|
||
|
romdata: new Uint8Array(data),
|
||
|
romsize: 0x8000,
|
||
|
preInit: function (_self) {
|
||
|
},
|
||
|
});
|
||
|
}
|
||
|
else {
|
||
|
this.loadROMFile(data);
|
||
|
this.loadRegion(":cartleft:cart:rom", data);
|
||
|
}
|
||
|
}
|
||
|
start() {
|
||
|
}
|
||
|
}
|
||
|
///
|
||
|
// Altirra Superkernel ROM (http://www.virtualdub.org/altirra.html) compiled with MADS
|
||
|
const ALTIRRA_SUPERKERNEL_LZG = `
|
||
|
TFpHAAAIAAAABJGU01hQARcZHSUAACUFGCUBABgAAGZmZh2IZv9mJUEAGD5gPAZ8HVBsGDBmRgAcNhw4
|
||
|
b2Y7HagdoA4cGBgcDgAAcDgYGDhwHSA8/zwdehgYfhkFGh1EMCWhfhkGYx0IAAAGDBgwYEAAADxmbnZm
|
||
|
PB0MHTgYHRs8Zh0RJeF+DBgMHVAMHDxsfgwdCGB8Bh1IPGB8ZiXifh15MB1oPB2IPGY+Bgw4GQRVGQNx
|
||
|
JeMwHV4YDAYZBHclQWAdBhgwYBkEYBkC6Dxmbm5gPh0nHT9+ZgAAfGZ8ZmZ8HVBgYBkCUHhsZmZseBkD
|
||
|
eGBgHXwl4h04PmBgbmYdMB1uGSIrfhkiOR0YBiUBHXAdLR0zAAAdJR2wY3d/a2NjHRB2fn5uHRA8HS4d
|
||
|
YBkCZhkCSB1IbDYdyB1wPGA8BgYdGBkDUBkkkGZmfiXkPB0IY2Nrf3cZAkhmPB0zJeMdoH4ZAtcdIB4d
|
||
|
bx4AAEAZAuoGAAB4HUh4AAAIHDYdLiUF/wAANn9/PhwIGSLHHx8lgQMlBR0D+PgZRA/4+Bkk5CXjAwcO
|
||
|
HDhw4MDA4HA4HA4HAwEDBw8fP3//HRgADyUBgMDg8Pj8/v8dRB1M8CUBJeL/HZolBh3GHZQcHHd3CBwd
|
||
|
RxkDeBkGFR0D//8diDx+fn48GQUu///AJQUdhxkjEx0gGQVEJQIZA8AdCHhgeGB+GQL4GDwZIjoZA0l+
|
||
|
GSIwGDB+MBlDFwx+DCXjPH4dkAA8Bj4ZIshgGUJYfB1IYGBgPBkiyD5mHVAAPGZ+HUgOGD4ZBJ8dTwZ8
|
||
|
HehmAAAYADgYGB1oGSP6PB0QbBkj+B0OHZAAZn9/axkich1nHRAZI+kdUBkm+RkDSAYdSBlDWAAZY3EA
|
||
|
ABliPxgOHXglARkCgBkl+ABja38+Nh1IPBgZY2kdVwwZQqEZZDgZAtAYPBljzyUCAH54fG5mBgAIGDh4
|
||
|
OBgIABAYHB4cGBAAbAACSKkgLA7o0A1FAI0O6KUlgmwQAjAPqYAZCQkMAnAPqUAZCQkIAmodLfAZCi0S
|
||
|
AmokAPASGQ5EFAKpARkODBYCKhkOCxgZEAsaAopIur0BASkQ0ANsDgJoqmhA////aKgdQUiKSJhI5gLQ
|
||
|
COYBpQQwAuYEpQPQ5aUFjQLUpQaNA9SlB40A1KAAJAQQAqQBogiYVQidEsDKEPeiB70A6JURyhD4jQvo
|
||
|
bAQC////GQJBrQnoSikPqr0T/WwKAv8LAAoOCQgHDQYFBAwDAgEsD9SND9QQA2wGAmwCAnjYov+arf2/
|
||
|
yf/QA2z+v6IAqQCVAJ0AwJ0A1J0A6OjQ8qn4jQnUogu9lf6dAAIZAmtPvc39nQAQHUMTvei/nVAdQ6kQ
|
||
|
hQypD4UNqQCFDiVhDyVhEKkEjRvAogq9wh0nIB1cIoUHqcCNDtQdFQWpIIUGqQKND+ipwIUZIhapeMUC
|
||
|
0Pxs/r9wcHBCABCCB0HC/SFsdGlycmEAFRIQEAAyLy0AK2VybmVsGWpyJQMub3cAcGxheWluZxoZDxUZ
|
||
|
a58lHiUcJQkD/Lj8svyh/gL9svxI5gzQBBkiJhkj9SUfJR8lHiUBI/0x/QD8`;
|
||
|
/// WASM Atari8 platform
|
||
|
class Atari8WASMPlatform extends baseplatform_1.Base6502MachinePlatform {
|
||
|
constructor() {
|
||
|
super(...arguments);
|
||
|
this.getToolForFilename = getToolForFilename_Atari8;
|
||
|
}
|
||
|
newMachine() { return new atari8_1.Atari8_WASMMachine('atari8'); }
|
||
|
getPresets() { return Atari800_PRESETS; }
|
||
|
getDefaultExtension() { return ".c"; }
|
||
|
;
|
||
|
readAddress(a) { return this.machine.readConst(a); }
|
||
|
getMemoryMap() { return Atari800_MemoryMap; }
|
||
|
showHelp() {
|
||
|
// TODO
|
||
|
}
|
||
|
getROMExtension(rom) {
|
||
|
// TODO
|
||
|
if (rom && rom[0] == 0x01 && rom[1] == 0x08)
|
||
|
return ".prg";
|
||
|
else
|
||
|
return ".bin";
|
||
|
}
|
||
|
}
|
||
|
class Atari800WASMPlatform extends Atari8WASMPlatform {
|
||
|
}
|
||
|
///
|
||
|
emu_1.PLATFORMS['atari8-800xl.mame'] = Atari800MAMEPlatform;
|
||
|
emu_1.PLATFORMS['atari8-5200.mame'] = Atari5200MAMEPlatform;
|
||
|
emu_1.PLATFORMS['atari8-800xl'] = Atari800WASMPlatform;
|
||
|
//# sourceMappingURL=atari8.js.map
|