8bitworkshop/gen/coleco-5Q7P7SYW.js.map

8 lines
12 KiB
Plaintext

{
"version": 3,
"sources": ["../src/machine/coleco.ts", "../src/platform/coleco.ts"],
"sourcesContent": ["\nimport { Z80, Z80State } from \"../common/cpu/ZilogZ80\";\nimport { BasicScanlineMachine } from \"../common/devices\";\nimport { BaseZ80VDPBasedMachine } from \"./vdp_z80\";\nimport { KeyFlags, newAddressDecoder, padBytes, Keys, makeKeycodeMap, newKeyboardHandler } from \"../common/emu\";\nimport { hex, lzgmini, stringToByteArray } from \"../common/util\";\nimport { TssChannelAdapter, MasterAudio, SN76489_Audio } from \"../common/audio\";\nimport { TMS9918A } from \"../common/video/tms9918a\";\n\n// http://www.colecovision.eu/ColecoVision/development/tutorial1.shtml\n// http://www.colecovision.eu/ColecoVision/development/libcv.shtml\n// http://www.kernelcrash.com/blog/recreating-the-colecovision/2016/01/27/\n// http://www.atarihq.com/danb/files/CV-Tech.txt\n// http://www.atarihq.com/danb/files/CV-Sound.txt\n// http://www.colecoboxart.com/faq/FAQ05.htm\n// http://www.theadamresource.com/manuals/technical/Jeffcoleco.html\n// http://bifi.msxnet.org/msxnet//tech/tms9918a.txt\n// http://www.colecovision.dk/tools.htm?refreshed\n// http://www.theadamresource.com/manuals/technical/ColecoVision%20Coding%20Guide.pdf\n// http://www.unige.ch/medecine/nouspikel/ti99/tms9918a.htm\n// http://map.grauw.nl/articles/vdp_tut.php\n// http://www.msxcomputermagazine.nl/mccw/91/msx1demos1/en.html\n// http://www.segordon.com/colecovision.php\n// http://samdal.com/svvideo.htm\n// https://github.com/tursilion/convert9918\n// http://www.harmlesslion.com/cgi-bin/showprog.cgi?ColecoVision\n\nvar COLECOVISION_KEYCODE_MAP = makeKeycodeMap([\n [Keys.UP, 0, 0x1],\n [Keys.DOWN, 0, 0x4],\n [Keys.LEFT, 0, 0x8],\n [Keys.RIGHT, 0, 0x2],\n [Keys.A, 0, 0x40],\n [Keys.B, 1, 0x40],\n [Keys.GP_A, 0, 0x40],\n [Keys.GP_B, 1, 0x40],\n\n [Keys.P2_UP, 2, 0x1],\n [Keys.P2_DOWN, 2, 0x4],\n [Keys.P2_LEFT, 2, 0x8],\n [Keys.P2_RIGHT, 2, 0x2],\n [Keys.P2_A, 2, 0x40],\n [Keys.P2_B, 3, 0x40],\n]);\n\nexport class ColecoVision extends BaseZ80VDPBasedMachine {\n\n defaultROMSize = 0x8000;\n ram = new Uint8Array(0x400);\n bios: Uint8Array;\n keypadMode: boolean;\n\n constructor() {\n super();\n this.init(this, this.newIOBus(), new SN76489_Audio(new MasterAudio()));\n this.bios = new lzgmini().decode(stringToByteArray(atob(COLECO_BIOS_LZG)));\n }\n \n getKeyboardMap() { return COLECOVISION_KEYCODE_MAP; }\n \n vdpInterrupt() {\n this.probe.logInterrupt(0);\n this.cpu.NMI();\n }\n \n read = newAddressDecoder([\n [0x0000, 0x1fff, 0x1fff, (a) => { return this.bios ? this.bios[a] : 0; }],\n [0x6000, 0x7fff, 0x03ff, (a) => { return this.ram[a]; }],\n [0x8000, 0xffff, 0x7fff, (a) => { return this.rom ? this.rom[a] : 0; }],\n ]);\n\n write = newAddressDecoder([\n [0x6000, 0x7fff, 0x03ff, (a, v) => { this.ram[a] = v; }],\n ]);\n\n newIOBus() {\n return {\n read: (addr:number):number => {\n addr &= 0xff;\n //console.log('IO read', hex(addr,4));\n switch (addr) {\n case 0xfc: return this.inputs[this.keypadMode ? 1 : 0] ^ 0xff;\n case 0xff: return this.inputs[this.keypadMode ? 3 : 2] ^ 0xff;\n }\n if (addr >= 0xa0 && addr <= 0xbf) {\n if (addr & 1)\n return this.vdp.readStatus();\n else\n return this.vdp.readData();\n }\n return 0;\n },\n write: (addr:number, val:number) => {\n addr &= 0xff;\n val &= 0xff;\n //console.log('IO write', hex(addr,4), hex(val,2));\n switch (addr >> 4) {\n case 0x8: case 0x9: this.keypadMode = true; break;\n case 0xc: case 0xd: this.keypadMode = false; break;\n case 0xa: case 0xb:\n if (addr & 1)\n return this.vdp.writeAddress(val);\n else\n return this.vdp.writeData(val);\n case 0xf: this.psg.setData(val); break;\n }\n }\n };\n }\n\n loadState(state) {\n super.loadState(state);\n this.keypadMode = state['kpm'];\n }\n saveState() {\n var state = super.saveState();\n state['kpm'] = this.keypadMode;\n return state;\n }\n reset() {\n super.reset();\n this.keypadMode = false;\n }\n}\n\nvar COLECO_BIOS_LZG = `\nTFpHAAAgAAAAB7djQcnHAQEDBgcx/3MYawAAAMMMgAehB+EPB+USB+UVB+UYB+UbB+UeB+QHHAZm\nIYA8igUCBYIAKgCAff5VIAl8/qogBCoKgOnHAwkfgICAAAMFT6CgB4LgByEH4WDAYMBABlggQIAg\nB+HAwOCgYAMGKweBQAYxBphAQEAG+KBABnAGEuAGUAabB+QA4AflBkggIAYyB+FgoKCgwAZdwAY5\nB+HABhAGYAfhIAZQoKDgIAMCcOCAwAaIYIDgoAZY4AMFOAYGBsgGIAZYAwJWBlAAQAMEcAYfQAZ4\nBhoDA3gGBgaQBjgGGwYfoOCAAwLIB+EDA/DAoAchAwNggAaQwAMFmOCAByEH5QZ4AwKABligAwUw\n4EBAQAZYICAgoAMCUAYuBpAGPwawoOAG4AfhAyNQQKCgBqDAoMADJECgoOADBGjgwAZYYIADBPgD\nAlADBEigAwVooAMFCAMEQAYHAwRQBg8GUAMiEAMEoAMEcAMD6gaQICAGyAADJZgDJ4gDI7gAwGAD\nI0CAwAME6AMC+QMCaCBgAwRwAGCgwAaIQOADA2AGJiAH4gZoAwPgA0M6ACAAAwX4gKDAAwPAAyLP\nAwNgAwXwAyNJAwR+AwX4oMADRQBgAyOgAyJxB+PAYANDEOBAQAMDeAMF+AfhA0RQAyJBB+NAAwPI\nBncGkOBgwAZQYECABrADQs8DAkjAQCBAA0QYAAMDUAcLOERsRFREOAA4fFR8RHw4AAAofHx8OBAA\nABA4B+MQODgQfHwDBQgQBhgAADAwB4H8/PzMzAeBAAB4SEh4BkiEtLSEBggcDDRISDAAOEREOBAG\neBgUEDBwYAAMNCw0LGxgAABUOGw4VAAAIDA4PDgwIAAIGDh4OBgIAwJXEAMCaCgHAgAoADxUVDQU\nFBQAOEQwKBhEAwNwAAB4eAMGIAchfBAHAQAHggMEqBh8GAfBABAwfDAH4gAAQEBAfAAAKCh8KCgG\nDxA4OHwGB3x8ODgGLwcHBg8GfgBsbEgGyQZnfCgAIDhAMAhwEABkZAgQIExMACBQUCBUSDQAMDAD\nZEsQIAcCEAAgAwJ5EAYMKDh8OCgGURB8AwdYBuV8AwdlAyIyBAgQAyKmOERMVGREOAAQMAZ4OAYI\nBBggQHwH4jgEBhAIGChIfAgIAHxAQHgGSAYVeEQH4XwGeCAgAyNYBkgHgTwECAMiijAwAySSB+Mg\nBh5AIBAIAwR3B0EGBAZyAwNgAwLoOERcVFxABrhEfEREAHhERAdCBghAQEBEOAZIBwF4AwN4AyJA\nB+RABlhcREQ8AAbvRAA4AwP4OAAEBwEDAohESFBgUEhEAyJ1AyN4RGxUBh9EAERkVEwGqAZGAwRY\nAwVIREQDIlAGSEgGmEADA/gDI9YQEAMCYAaoB8MoBkhUBwEoB+EoECgGKAaOBiB4AwLpQHgAOAMj\nkDgAAAMC9gQAADgIBwI4AAYlA0rv/DADRR0GGgQ8RDwABjQDA+gGCEQDAvgEBg4DAuAGSHhAAyJ4\nIHgDInAAAAYQPAQ4QEBwSAcBAANEehgACAAYCAgISDBAQAMD+QaOBlAAAGhUVEQDAnQG6AMCSAMC\nyAADI1p4QAMDSEQ8BAAAWCQgIHAGWEA4BAYYAwJnKAMCnAYuWANCUQME+AfiVHwGSEhIMAMDSAYY\nOBBgAAB4CDBAeAMCoGAgIBgDAngHYzAICAwICDAAKFADRuhsRER8AwPeQEQ4EDBIAwVYDAMF4Ach\nAyMIKAflMAflOCgH5AMkFxAwBiAGqAYgB+MGIAMFCAME8BAGgRgAIAMFCAYHKER8RAMCQGwH4gwA\nfEB4A2KYAHgUfFA8ADxQUHxQUFwAOAAwSAOCOCgH5WAH5TgDBaBgB+UoAwXwAwL9BugH5AAQOEBA\nOBAAGCQgeCAkXABEKBB8ByEAYFBQaFxISAAIFBA4EBBQIBgDBdADIyIQGAfhAwRgGAMGWFADI6kH\n4khoWEgDBSY8AwUeeAMi8DADQiAAA2ISA6N2/AQEB6FASFA4RAgcB+IsVBwEBmADglsGEiRIJAZf\nAEgkAyKuVACoB2SoBySo/FT8B2IDRDAHA/AHpQfjUFBQ0AdhAyK+8AfjAwYQ0BAGkAcGBhAGyNAQ\n8AYkAAYCB+MGJgfjBngDBVgcBpAQEPwDZgwDBhAHggZIAwYYAwUOBpBQUFBcAwNYXAMjtQMC9wbI\n3AboB6HcAwUYBpAGCAaQBhgGkBADBghQUAMGKAMDWAZCAwW7AwNQAwJoBpgDBXAGAnwG11ADB0AD\nJiADBbgGoPwHBQZJB+LgBwUcBwUDBhQAADRISDQDY49wSEhwQHhIA4OpAAB8A8R6eEggECADwtEA\nPANDTwNjYHAGWShQAwKHOBA4A8LZA0IIeAaZOEREKChsADBAIBA4BqkoA4KfA0KIVFQDIvg4QANi\nFwAGaQNjr3gHIwZYEAAGEEAwCDBABgkHoTAIBlEIFANIAlAgBiAAfAdhAwJ3B0IGfwMDjgPmiAcB\nA8SRHAYnBihQAwK9BwFgEAODTQPjNXgDAmgHHwcfBx8HHwcfBx8HHwcfBx8HHwcfBx8HHwcfBx8H\nHwcfBx8HHwcfBx8HHwcfBx8HHwcfBx8HHwcfBx8HHwcfBx8HHwcfBx8HHwcfBx8HHwcfBwM=`;\n\n", "\nimport { ColecoVision } from \"../machine/coleco\";\nimport { Platform, BaseZ80MachinePlatform, getToolForFilename_z80 } from \"../common/baseplatform\";\nimport { PLATFORMS } from \"../common/emu\";\nimport { BaseMAMEZ80Platform } from \"../common/mameplatform\";\n\nexport var ColecoVision_PRESETS = [\n { id: 'text.c', name: 'Text Mode' },\n { id: 'hello.c', name: 'Scrolling Text' },\n { id: 'text32.c', name: '32-Column Color Text' },\n { id: 'stars.c', name: 'Scrolling Starfield' },\n { id: 'cursorsmooth.c', name: 'Moving Cursor' },\n { id: 'simplemusic.c', name: 'Simple Music' },\n { id: 'musicplayer.c', name: 'Multivoice Music' },\n { id: 'mode2bitmap.c', name: 'Mode 2 Bitmap' },\n { id: 'mode2compressed.c', name: 'Mode 2 Bitmap (LZG)' },\n { id: 'lines.c', name: 'Mode 2 Lines' },\n { id: 'multicolor.c', name: 'Multicolor Mode' },\n { id: 'siegegame.c', name: 'Siege Game' },\n { id: 'shoot.c', name: 'Solarian Game' },\n { id: 'climber.c', name: 'Climber Game' },\n];\n\nclass ColecoVisionPlatform extends BaseZ80MachinePlatform<ColecoVision> implements Platform {\n\n newMachine() { return new ColecoVision(); }\n getPresets() { return ColecoVision_PRESETS; }\n getDefaultExtension() { return \".c\"; };\n readAddress(a) { return this.machine.read(a); }\n readVRAMAddress(a) { return this.machine.readVRAMAddress(a); }\n // TODO loadBIOS(bios)\t{ this.machine.loadBIOS(a); }\n getMemoryMap = function() { return { main:[\n {name:'BIOS',start:0x0,size:0x2000,type:'rom'},\n {name:'Cartridge Header',start:0x8000,size:0x100,type:'rom'},\n ] } };\n showHelp() {\n return \"https://8bitworkshop.com/docs/platforms/coleco/\";\n }\n}\n\n/// MAME support\n\nclass ColecoVisionMAMEPlatform extends BaseMAMEZ80Platform implements Platform {\n\n start() {\n this.startModule(this.mainElement, {\n jsfile: 'mame8bitws.js',\n cfgfile: 'coleco.cfg',\n biosfile: 'coleco/313 10031-4005 73108a.u2',\n driver: 'coleco',\n width: 280 * 2,\n height: 216 * 2,\n romfn: '/emulator/cart.rom',\n romsize: 0x8000,\n preInit: function(_self) {\n },\n });\n }\n\n loadROM(title, data) {\n this.loadROMFile(data);\n this.loadRegion(\":coleco_cart:rom\", data);\n }\n\n getPresets() { return ColecoVision_PRESETS; }\n\n getToolForFilename = getToolForFilename_z80;\n getDefaultExtension() { return \".c\"; };\n}\n\n\n///\n\nPLATFORMS['coleco.mame'] = ColecoVisionMAMEPlatform;\nPLATFORMS['coleco'] = ColecoVisionPlatform;\n"],
"mappings": "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",
"names": []
}