8bitworkshop/gen/galaxian-KKUCSTLZ.js.map

8 lines
25 KiB
Plaintext

{
"version": 3,
"sources": ["../src/machine/galaxian.ts", "../src/platform/galaxian.ts"],
"sourcesContent": ["\nimport { Z80, Z80State } from \"../common/cpu/ZilogZ80\";\nimport { BasicScanlineMachine } from \"../common/devices\";\nimport { KeyFlags, newAddressDecoder, padBytes, noise, Keys, makeKeycodeMap, newKeyboardHandler, EmuHalt } from \"../common/emu\";\nimport { TssChannelAdapter, MasterAudio, AY38910_Audio } from \"../common/audio\";\nimport { hex } from \"../common/util\";\n\nconst GALAXIAN_KEYCODE_MAP = makeKeycodeMap([\n [Keys.A, 0, 0x10], // P1\n [Keys.LEFT, 0, 0x4],\n [Keys.RIGHT, 0, 0x8],\n [Keys.P2_A, 1, 0x10], // P2\n [Keys.P2_LEFT, 1, 0x4],\n [Keys.P2_RIGHT, 1, 0x8],\n [Keys.SELECT, 0, 0x1],\n [Keys.START, 1, 0x1],\n [Keys.VK_2, 1, 0x2],\n]);\n\nconst SCRAMBLE_KEYCODE_MAP = makeKeycodeMap([\n [Keys.UP, 0, -0x1], // P1\n [Keys.B, 0, -0x2], // fire\n [Keys.VK_7, 0, -0x4], // credit\n [Keys.A, 0, -0x8], // bomb\n [Keys.RIGHT, 0, -0x10],\n [Keys.LEFT, 0, -0x20],\n [Keys.VK_6, 0, -0x40],\n [Keys.SELECT, 0, -0x80],\n [Keys.START, 1, -0x80],\n [Keys.VK_2, 1, -0x40],\n [Keys.DOWN, 2, -0x40],\n //[Keys.VK_UP, 2, -0x10],\n]);\n\nconst bitcolors = [\n 0x000021, 0x000047, 0x000097, // red\n 0x002100, 0x004700, 0x009700, // green\n 0x510000, 0xae0000 // blue\n];\n\nconst GalaxianVideo = function (rom: Uint8Array, vram: Uint8Array, oram: Uint8Array, palette: Uint32Array, options) {\n\n var gfxBase = options.gfxBase || 0x2800;\n this.missileWidth = options.missileWidth || 4;\n this.missileOffset = options.missileOffset || 0;\n this.showOffscreenObjects = false;\n this.frameCounter = 0;\n this.starsEnabled = 0;\n var stars = [];\n for (var i = 0; i < 256; i++)\n stars[i] = noise();\n\n this.advanceFrame = function () {\n this.frameCounter = (this.frameCounter + 1) & 0xff;\n }\n\n this.drawScanline = function (pixels, sl) {\n var pixofs = sl * 264;\n // hide offscreen on left + right (b/c rotated)\n if (!this.showOffscreenObjects && (sl < 16 || sl >= 240)) {\n for (var i = 0; i < 264; i++)\n pixels[pixofs + i] = 0xff000000;\n return; // offscreen\n }\n // draw tiles\n var outi = pixofs; // starting output pixel in frame buffer\n for (var xx = 0; xx < 32; xx++) {\n var xofs = xx;\n var scroll = oram[xofs * 2]; // even entries control scroll position\n var attrib = oram[xofs * 2 + 1]; // odd entries control the color base\n var sl2 = (sl + scroll) & 0xff;\n var vramofs = (sl2 >> 3) << 5; // offset in VRAM\n var yy = sl2 & 7; // y offset within tile\n var tile = vram[vramofs + xofs]; // TODO: why undefined?\n var color0 = (attrib & 7) << 2;\n var addr = gfxBase + (tile << 3) + yy;\n var data1 = rom[addr];\n var data2 = rom[addr + 0x800];\n for (var i = 0; i < 8; i++) {\n var bm = 128 >> i;\n var color = color0 + ((data1 & bm) ? 1 : 0) + ((data2 & bm) ? 2 : 0);\n pixels[outi] = palette[color];\n outi++;\n }\n }\n // draw sprites\n for (var sprnum = 7; sprnum >= 0; sprnum--) {\n var base = (sprnum << 2) + 0x40;\n var base0 = oram[base];\n var sy = 240 - (base0 - ((sprnum < 3) ? 1 : 0)); // the first three sprites match against y-1\n var yy = (sl - sy);\n if (yy >= 0 && yy < 16) {\n var sx = oram[base + 3] + 1; // +1 pixel offset from tiles\n if (sx == 0 && !this.showOffscreenObjects) {\n continue; // drawn off-buffer\n }\n var code = oram[base + 1];\n var flipx = code & 0x40; // TODO: flipx\n if (code & 0x80) // flipy\n yy = 15 - yy;\n code &= 0x3f;\n var color0 = (oram[base + 2] & 7) << 2;\n var addr = gfxBase + (code << 5) + (yy < 8 ? yy : yy + 8);\n outi = pixofs + sx; //<< 1\n var data1 = rom[addr];\n var data2 = rom[addr + 0x800];\n for (var i = 0; i < 8; i++) {\n var bm = 128 >> i;\n var color = ((data1 & bm) ? 1 : 0) + ((data2 & bm) ? 2 : 0);\n if (color)\n pixels[flipx ? (outi + 15 - i) : (outi + i)] = palette[color0 + color];\n }\n var data1 = rom[addr + 8];\n var data2 = rom[addr + 0x808];\n for (var i = 0; i < 8; i++) {\n var bm = 128 >> i;\n var color = ((data1 & bm) ? 1 : 0) + ((data2 & bm) ? 2 : 0);\n if (color)\n pixels[flipx ? (outi + 7 - i) : (outi + i + 8)] = palette[color0 + color];\n }\n }\n }\n // draw bullets/shells\n var shell = 0xff;\n var missile = 0xff;\n for (var which = 0; which < 8; which++) {\n var sy = oram[0x60 + (which << 2) + 1];\n if (((sy + sl - ((which < 3) ? 1 : 0)) & 0xff) == 0xff) {\n if (which != 7)\n shell = which;\n else\n missile = which;\n }\n }\n for (var i = 0; i < 2; i++) {\n which = i ? missile : shell;\n if (which != 0xff) {\n var sx = 255 - oram[0x60 + (which << 2) + 3];\n var outi = pixofs + sx - this.missileOffset;\n var col = which == 7 ? 0xffffff00 : 0xffffffff;\n for (var j = 0; j < this.missileWidth; j++)\n pixels[outi++] = col;\n }\n }\n // draw stars\n if (this.starsEnabled) {\n var starx = ((this.frameCounter + stars[sl & 0xff]) & 0xff);\n if ((starx + sl) & 0x10) {\n var outi = pixofs + starx;\n if ((pixels[outi] & 0xffffff) == 0) {\n pixels[outi] = palette[sl & 0x1f];\n }\n }\n }\n }\n\n}\n\nconst XTAL = 18432000.0;\nconst scanlinesPerFrame = 264;\nconst cpuFrequency = XTAL / 6; // 3.072 MHz\nconst hsyncFrequency = XTAL / 3 / 192 / 2; // 16 kHz\nconst vsyncFrequency = hsyncFrequency / 132 / 2; // 60.606060 Hz\nconst vblankDuration = 1 / vsyncFrequency * (20 / 132); // 2500 us\nconst cpuCyclesPerLine = cpuFrequency / hsyncFrequency;\nconst INITIAL_WATCHDOG = 8;\n\nconst audioOversample = 2;\nconst audioSampleRate = 60 * scanlinesPerFrame; // why not hsync?\n\nexport class GalaxianMachine extends BasicScanlineMachine {\n\n options = {};\n palBase = 0x3800;\n keyMap = GALAXIAN_KEYCODE_MAP;\n\n cpuFrequency = cpuFrequency;\n canvasWidth = 264;\n numTotalScanlines = 264;\n numVisibleScanlines = 264;\n defaultROMSize = 0x4000;\n sampleRate = audioSampleRate * audioOversample;\n cpuCyclesPerLine = cpuCyclesPerLine | 0;\n rotate = 90;\n\n cpu: Z80 = new Z80();\n ram = new Uint8Array(0x800);\n vram = new Uint8Array(0x400);\n oram = new Uint8Array(0x100);\n palette: Uint32Array;\n gfx; // GalaxianVideo\n audioadapter;\n psg1: AY38910_Audio;\n psg2: AY38910_Audio;\n watchdog_counter: number = 0;\n interruptEnabled: number = 0;\n defaultInputs: number[] = [0xe, 0x8, 0x0];\n\n constructor() {\n super();\n var audio = new MasterAudio();\n this.psg1 = new AY38910_Audio(audio);\n this.psg2 = new AY38910_Audio(audio);\n this.audioadapter = new TssChannelAdapter([this.psg1.psg, this.psg2.psg], audioOversample, this.sampleRate);\n this.init();\n }\n\n init() {\n this.rom = new Uint8Array(this.defaultROMSize);\n this.palette = new Uint32Array(new ArrayBuffer(32 * 4));\n this.gfx = new GalaxianVideo(this.rom, this.vram, this.oram, this.palette, this.options);\n this.connectCPUMemoryBus(this);\n this.connectCPUIOBus(this.newIOBus());\n this.inputs.set(this.defaultInputs);\n this.handler = newKeyboardHandler(this.inputs, this.keyMap);\n }\n\n read = newAddressDecoder([\n [0x0000, 0x3fff, 0, (a) => { return this.rom ? this.rom[a] : null; }],\n [0x4000, 0x47ff, 0x3ff, (a) => { return this.ram[a]; }],\n [0x5000, 0x57ff, 0x3ff, (a) => { return this.vram[a]; }],\n [0x5800, 0x5fff, 0xff, (a) => { return this.oram[a]; }],\n [0x6000, 0x6000, 0, (a) => { return this.inputs[0]; }],\n [0x6800, 0x6800, 0, (a) => { return this.inputs[1]; }],\n [0x7000, 0x7000, 0, (a) => { return this.inputs[2]; }],\n [0x7800, 0x7800, 0, (a) => { this.watchdog_counter = INITIAL_WATCHDOG; }],\n ]);\n \n readConst(a : number) {\n return (a < 0x7000) ? this.read(a) : null;\n }\n\n write = newAddressDecoder([\n [0x4000, 0x47ff, 0x3ff, (a, v) => { this.ram[a] = v; }],\n [0x5000, 0x57ff, 0x3ff, (a, v) => { this.vram[a] = v; }],\n [0x5800, 0x5fff, 0xff, (a, v) => { this.oram[a] = v; }],\n //[0x6004, 0x6007, 0x3, function(a,v) => { }], // lfo freq\n //[0x6800, 0x6807, 0x7, function(a,v) => { }], // sound\n //[0x7800, 0x7800, 0x7, function(a,v) => { }], // pitch\n //[0x6000, 0x6003, 0x3, (a, v) => { this.outlatches[a] = v; }],\n [0x7001, 0x7001, 0, (a, v) => { this.interruptEnabled = v & 1; }],\n [0x7004, 0x7004, 0, (a, v) => { this.gfx.starsEnabled = v & 1; }],\n ]);\n\n newIOBus() {\n return {\n read: (addr) => {\n return 0;\n },\n write: (addr, val) => {\n if (addr & 0x1) { this.psg1.selectRegister(val & 0xf); };\n if (addr & 0x2) { this.psg1.setData(val); };\n if (addr & 0x4) { this.psg2.selectRegister(val & 0xf); };\n if (addr & 0x8) { this.psg2.setData(val); };\n }\n };\n }\n\n reset() {\n super.reset();\n this.psg1.reset();\n this.psg2.reset();\n this.watchdog_counter = INITIAL_WATCHDOG;\n }\n\n startScanline() {\n this.audio && this.audioadapter && this.audioadapter.generate(this.audio);\n }\n\n drawScanline() {\n this.gfx.drawScanline(this.pixels, this.scanline);\n }\n\n advanceFrame(trap) {\n var steps = super.advanceFrame(trap);\n\n // advance graphics\n this.gfx.advanceFrame();\n // clear bottom of screen?\n if (!this.gfx.showOffscreenObjects) {\n for (var i = 0; i < 264; i++)\n this.pixels.fill(0xff000000, 256 + i * 264, 264 + i * 264);\n }\n // watchdog fired?\n if (this.watchdog_counter-- <= 0) {\n throw new EmuHalt(\"WATCHDOG FIRED\");\n }\n // NMI interrupt @ 0x66\n if (this.interruptEnabled) { this.cpu.NMI(); }\n\n return steps;\n }\n\n loadROM(data) {\n this.rom.set(padBytes(data, this.defaultROMSize));\n for (var i = 0; i < 32; i++) {\n var b = this.rom[this.palBase + i];\n this.palette[i] = 0xff000000;\n for (var j = 0; j < 8; j++)\n if (((1 << j) & b))\n this.palette[i] += bitcolors[j];\n }\n }\n\n loadState(state) {\n super.loadState(state);\n this.vram.set(state.bv);\n this.oram.set(state.bo);\n this.watchdog_counter = state.wdc;\n this.interruptEnabled = state.ie;\n this.gfx.starsEnabled = state.se;\n this.gfx.frameCounter = state.fc;\n }\n\n saveState() {\n var state = super.saveState();\n state['bv'] = this.vram.slice(0);\n state['bo'] = this.oram.slice(0);\n state['fc'] = this.gfx.frameCounter;\n state['ie'] = this.interruptEnabled;\n state['se'] = this.gfx.starsEnabled;\n state['wdc'] = this.watchdog_counter;\n return state;\n }\n\n}\n\nexport class GalaxianScrambleMachine extends GalaxianMachine {\n\n defaultROMSize = 0x5020;\n palBase = 0x5000;\n scramble = true;\n keyMap = SCRAMBLE_KEYCODE_MAP;\n options = {\n gfxBase: 0x4000,\n missileWidth: 1,\n missileOffset: 6,\n };\n defaultInputs = [0xff, 0xfc, 0xf1];\n\n constructor() {\n super();\n this.init(); // TODO: why do we have to call twice?\n }\n\n read = newAddressDecoder([\n [0x0000, 0x3fff, 0, (a) => { return this.rom[a]; }],\n [0x4000, 0x47ff, 0x7ff, (a) => { return this.ram[a]; }],\n [0x4800, 0x4fff, 0x3ff, (a) => { return this.vram[a]; }],\n [0x5000, 0x5fff, 0xff, (a) => { return this.oram[a]; }],\n [0x7000, 0x7000, 0, (a) => { this.watchdog_counter = INITIAL_WATCHDOG; }],\n [0x7800, 0x7800, 0, (a) => { this.watchdog_counter = INITIAL_WATCHDOG; }],\n //[0x8000, 0x820f, 0, function(a) { return noise(); }], // TODO: remove\n [0x8100, 0x8100, 0, (a) => { return this.inputs[0]; }],\n [0x8101, 0x8101, 0, (a) => { return this.inputs[1]; }],\n [0x8102, 0x8102, 0, (a) => { return this.inputs[2] | this.scramble_protection_alt_r(); }],\n [0x8202, 0x8202, 0, (a) => { return this.m_protection_result; }], // scramble (protection)\n [0x9100, 0x9100, 0, (a) => { return this.inputs[0]; }],\n [0x9101, 0x9101, 0, (a) => { return this.inputs[1]; }],\n [0x9102, 0x9102, 0, (a) => { return this.inputs[2] | this.scramble_protection_alt_r(); }],\n [0x9212, 0x9212, 0, (a) => { return this.m_protection_result; }], // scramble (protection)\n //[0, 0xffff, 0, function(a) { console.log(hex(a)); return 0; }]\n ]);\n write = newAddressDecoder([\n [0x4000, 0x47ff, 0x7ff, (a, v) => { this.ram[a] = v; }],\n [0x4800, 0x4fff, 0x3ff, (a, v) => { this.vram[a] = v; }],\n [0x5000, 0x5fff, 0xff, (a, v) => { this.oram[a] = v; }],\n [0x6801, 0x6801, 0, (a, v) => { this.interruptEnabled = v & 1; /*console.log(a,v,cpu.getPC().toString(16));*/ }],\n [0x6802, 0x6802, 0, (a, v) => { /* TODO: coin counter */ }],\n [0x6803, 0x6803, 0, (a, v) => { /* TODO: backgroundColor = (v & 1) ? 0xFF000056 : 0xFF000000; */ }],\n [0x6804, 0x6804, 0, (a, v) => { this.gfx.starsEnabled = v & 1; }],\n [0x6808, 0x6808, 0, (a, v) => { this.gfx.missileWidth = v; }], // not on h/w\n [0x6809, 0x6809, 0, (a, v) => { this.gfx.missileOffset = v; }], // not on h/w\n [0x8202, 0x8202, 0, this.scramble_protection_w.bind(this)],\n //[0x8100, 0x8103, 0, function(a,v){ /* PPI 0 */ }],\n //[0x8200, 0x8203, 0, function(a,v){ /* PPI 1 */ }],\n //[0, 0xffff, 0, function(a,v) { console.log(hex(a),hex(v)); }]\n ]);\n\n m_protection_state = 0;\n m_protection_result = 0;\n scramble_protection_w(addr, data) {\n /*\n This is not fully understood; the low 4 bits of port C are\n inputs; the upper 4 bits are outputs. Scramble main set always\n writes sequences of 3 or more nibbles to the low port and\n expects certain results in the upper nibble afterwards.\n */\n this.m_protection_state = (this.m_protection_state << 4) | (data & 0x0f);\n switch (this.m_protection_state & 0xfff) {\n /* scramble */\n case 0xf09: this.m_protection_result = 0xff; break;\n case 0xa49: this.m_protection_result = 0xbf; break;\n case 0x319: this.m_protection_result = 0x4f; break;\n case 0x5c9: this.m_protection_result = 0x6f; break;\n\n /* scrambls */\n case 0x246: this.m_protection_result ^= 0x80; break;\n case 0xb5f: this.m_protection_result = 0x6f; break;\n }\n }\n scramble_protection_alt_r() {\n var bit = (this.m_protection_result >> 7) & 1;\n return (bit << 5) | ((bit ^ 1) << 7);\n }\n}\n", "\nimport { Platform } from \"../common/baseplatform\";\nimport { PLATFORMS } from \"../common/emu\";\nimport { GalaxianMachine, GalaxianScrambleMachine } from \"../machine/galaxian\";\nimport { BaseZ80MachinePlatform } from \"../common/baseplatform\";\n\nconst GALAXIAN_PRESETS = [\n { id: 'gfxtest.c', name: 'Graphics Test' },\n { id: 'shoot2.c', name: 'Solarian Game' },\n];\n\nclass GalaxianPlatform extends BaseZ80MachinePlatform<GalaxianMachine> implements Platform {\n\n newMachine() { return new GalaxianMachine(); }\n getPresets() { return GALAXIAN_PRESETS; }\n getDefaultExtension() { return \".c\"; };\n readAddress(a) { return this.machine.readConst(a); }\n readVRAMAddress(a) { return (a < 0x800) ? this.machine.vram[a] : this.machine.oram[a-0x800]; }\n // TODO loadBIOS(bios)\t{ this.machine.loadBIOS(a); }\n getMemoryMap = function() { return { main:[\n {name:'Video RAM',start:0x5000,size:0x400,type:'ram'},\n {name:'Sprite RAM',start:0x5800,size:0x100,type:'ram'},\n {name:'I/O Registers',start:0x6000,size:0x2000,type:'io'},\n ] } };\n showHelp() { return \"https://8bitworkshop.com/docs/platforms/arcade/index.html#galaxian-scramble\" }\n}\n\nclass GalaxianScramblePlatform extends GalaxianPlatform implements Platform {\n\n newMachine() { return new GalaxianScrambleMachine(); }\n\n}\n\nPLATFORMS['galaxian'] = GalaxianPlatform;\nPLATFORMS['galaxian-scramble'] = GalaxianScramblePlatform;\n"],
"mappings": "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",
"names": []
}