1
0
mirror of https://github.com/sehugg/8bitworkshop.git synced 2024-07-27 08:29:06 +00:00
8bitworkshop/gen/williams-RRVBPADN.js.map

8 lines
24 KiB
Plaintext

{
"version": 3,
"sources": ["../src/platform/williams.ts"],
"sourcesContent": ["\nimport { Platform, BaseZ80Platform, Base6809Platform } from \"../common/baseplatform\";\nimport { PLATFORMS, RAM, newAddressDecoder, padBytes, noise, setKeyboardFromMap, AnimationTimer, RasterVideo, Keys, makeKeycodeMap } from \"../common/emu\";\nimport { hex } from \"../common/util\";\nimport { MasterAudio, WorkerSoundChannel } from \"../common/audio\";\n\nvar WILLIAMS_PRESETS = [\n { id: 'gfxtest.c', name: 'Graphics Test' },\n { id: 'sprites.c', name: 'Sprite Test' },\n { id: 'game1.c', name: 'Raster Paranoia Game' },\n { id: 'bitmap_rle.c', name: 'RLE Bitmap' },\n];\n\nvar WilliamsPlatform = function(mainElement, proto, options) {\n var self = this;\n this.__proto__ = new (proto ? proto : Base6809Platform)();\n\n options = options || {};\n var isDefender = options.isDefender;\n var SCREEN_HEIGHT = 304;\n var SCREEN_WIDTH = 256;\n\n var cpu, ram, rom, nvram;\n var portsel = 0;\n var banksel = 0;\n var watchdog_counter;\n var watchdog_enabled = false;\n var pia6821 = new RAM(8).mem;\n var blitregs = new RAM(8).mem;\n\n var video, timer, pixels, displayPCs;\n var screenNeedsRefresh = false;\n var membus;\n var video_counter;\n\n var audio, worker, workerchannel;\n\n var xtal = 12000000;\n var cpuFrequency = xtal / 3 / 4;\n var cpuCyclesPerFrame = cpuFrequency / 60; // TODO\n var cpuScale = 1;\n var INITIAL_WATCHDOG = 8;\n var PIXEL_ON = 0xffeeeeee;\n var PIXEL_OFF = 0xff000000;\n\n var DEFENDER_KEYCODE_MAP = makeKeycodeMap([\n [Keys.A, 4, 0x1],\n [Keys.RIGHT, 4, 0x2],\n [Keys.B, 4, 0x4],\n [Keys.VK_X, 4, 0x8],\n [Keys.P2_START, 4, 0x10],\n [Keys.START, 4, 0x20],\n [Keys.LEFT, 4, 0x40],\n [Keys.DOWN, 4, 0x80],\n [Keys.UP, 6, 0x1],\n [Keys.SELECT, 0, 0x4],\n [Keys.VK_7, 0, 0x1],\n [Keys.VK_8, 0, 0x2],\n [Keys.VK_9, 0, 0x8],\n ]);\n\n var ROBOTRON_KEYCODE_MAP = makeKeycodeMap([\n [Keys.P2_UP, 0, 0x1],\n [Keys.P2_DOWN, 0, 0x2],\n [Keys.P2_LEFT, 0, 0x4],\n [Keys.P2_RIGHT, 0, 0x8],\n [Keys.START, 0, 0x10],\n [Keys.P2_START, 0, 0x20],\n [Keys.UP, 0, 0x40],\n [Keys.DOWN, 0, 0x80],\n [Keys.LEFT, 2, 0x1],\n [Keys.RIGHT, 2, 0x2],\n [Keys.VK_7, 4, 0x1],\n [Keys.VK_8, 4, 0x2],\n [Keys.VK_6, 4, 0x4],\n [Keys.VK_9, 4, 0x8],\n [Keys.SELECT, 4, 0x10],\n ]);\n\n var KEYCODE_MAP = isDefender ? DEFENDER_KEYCODE_MAP : ROBOTRON_KEYCODE_MAP;\n\n // TODO: sound board handshake\n\n var palette = [];\n for (var ii = 0; ii < 16; ii++)\n palette[ii] = 0xff000000;\n\n this.getPresets = function() {\n return WILLIAMS_PRESETS;\n }\n\n // Defender\n\n var ioread_defender = newAddressDecoder([\n [0x400, 0x5ff, 0x1ff, function(a) { return nvram.mem[a]; }],\n [0x800, 0x800, 0, function(a) { return video_counter; }],\n [0xc00, 0xc07, 0x7, function(a) { return pia6821[a]; }],\n [0x0, 0xfff, 0, function(a) { /*console.log('ioread',hex(a));*/ }],\n ]);\n\n var iowrite_defender = newAddressDecoder([\n [0x0, 0xf, 0xf, setPalette],\n [0x3fc, 0x3ff, 0, function(a, v) { if (v == 0x38) watchdog_counter = INITIAL_WATCHDOG; watchdog_enabled=true; }],\n [0x400, 0x5ff, 0x1ff, function(a, v) { nvram.mem[a] = v; }],\n [0xc02, 0xc02, 0x1, function(a, v) { if (worker) worker.postMessage({ command: v & 0x3f }); }],\n [0xc00, 0xc07, 0x7, function(a, v) { pia6821[a] = v; }],\n [0x0, 0xfff, 0, function(a, v) { console.log('iowrite', hex(a), hex(v)); }],\n ]);\n\n var memread_defender = newAddressDecoder([\n [0x0000, 0xbfff, 0xffff, function(a) { return ram.mem[a]; }],\n [0xc000, 0xcfff, 0x0fff, function(a) {\n switch (banksel) {\n case 0: return ioread_defender(a);\n case 1: return rom[a + 0x3000];\n case 2: return rom[a + 0x4000];\n case 3: return rom[a + 0x5000];\n case 7: return rom[a + 0x6000];\n default: return 0; // TODO: error light\n }\n }],\n [0xd000, 0xffff, 0xffff, function(a) { return rom ? rom[a - 0xd000] : 0; }],\n ]);\n\n var memwrite_defender = newAddressDecoder([\n [0x0000, 0x97ff, 0, write_display_byte],\n [0x9800, 0xbfff, 0, function(a, v) { ram.mem[a] = v; }],\n [0xc000, 0xcfff, 0x0fff, iowrite_defender],\n [0xd000, 0xdfff, 0, function(a, v) { banksel = v & 0x7; }],\n [0, 0xffff, 0, function(a, v) { console.log(hex(a), hex(v)); }],\n ]);\n\n // Robotron, Joust, Bubbles, Stargate\n\n var ioread_robotron = newAddressDecoder([\n [0x804, 0x807, 0x3, function(a) { return pia6821[a]; }],\n [0x80c, 0x80f, 0x3, function(a) { return pia6821[a + 4]; }],\n [0xb00, 0xbff, 0, function(a) { return video_counter; }],\n [0xc00, 0xfff, 0x3ff, function(a) { return nvram.mem[a]; }],\n [0x0, 0xfff, 0, function(a) { /* console.log('ioread',hex(a)); */ }],\n ]);\n\n var iowrite_robotron = newAddressDecoder([\n [0x0, 0xf, 0xf, setPalette],\n [0x80c, 0x80c, 0xf, function(a, v) { if (worker) worker.postMessage({ command: v }); }],\n //[0x804, 0x807, 0x3, function(a,v) { console.log('iowrite',a); }], // TODO: sound\n //[0x80c, 0x80f, 0x3, function(a,v) { console.log('iowrite',a+4); }], // TODO: sound\n [0x900, 0x9ff, 0, function(a, v) { banksel = v & 0x1; }],\n [0xa00, 0xa07, 0x7, setBlitter],\n [0xbff, 0xbff, 0, function(a, v) { if (v == 0x39) { watchdog_counter = INITIAL_WATCHDOG; watchdog_enabled=true; } }],\n [0xc00, 0xfff, 0x3ff, function(a, v) { nvram.mem[a] = v; }],\n //[0x0, 0xfff, 0, function(a,v) { console.log('iowrite',hex(a),hex(v)); }],\n ]);\n\n var memread_robotron = newAddressDecoder([\n [0x0000, 0x8fff, 0xffff, function(a) { return banksel ? rom[a] : ram.mem[a]; }],\n [0x9000, 0xbfff, 0xffff, function(a) { return ram.mem[a]; }],\n [0xc000, 0xcfff, 0x0fff, ioread_robotron],\n [0xd000, 0xffff, 0xffff, function(a) { return rom ? rom[a - 0x4000] : 0; }],\n ]);\n\n var memwrite_robotron = newAddressDecoder([\n [0x0000, 0x97ff, 0, write_display_byte],\n [0x9800, 0xbfff, 0, function(a, v) { ram.mem[a] = v; }],\n [0xc000, 0xcfff, 0x0fff, iowrite_robotron],\n //[0x0000, 0xffff, 0, function(a,v) { console.log(hex(a), hex(v)); }],\n ]);\n\n var memread_williams = isDefender ? memread_defender : memread_robotron;\n var memwrite_williams = isDefender ? memwrite_defender : memwrite_robotron;\n\n // d1d6 ldu $11 / beq $d1ed\n\n function setPalette(a, v) {\n // RRRGGGBB\n var color = 0xff000000 | ((v & 7) << 5) | (((v >> 3) & 7) << 13) | (((v >> 6) << 22));\n if (color != palette[a]) {\n palette[a] = color;\n screenNeedsRefresh = true;\n }\n }\n\n function write_display_byte(a: number, v: number) {\n ram.mem[a] = v;\n drawDisplayByte(a, v);\n if (displayPCs) displayPCs[a] = cpu.getPC(); // save program counter\n }\n\n function drawDisplayByte(a, v) {\n var ofs = ((a & 0xff00) << 1) | ((a & 0xff) ^ 0xff);\n pixels[ofs] = palette[v >> 4];\n pixels[ofs + 256] = palette[v & 0xf];\n }\n\n function setBlitter(a, v) {\n if (a) {\n blitregs[a] = v;\n } else {\n var cycles = doBlit(v);\n this.waitCycles -= cycles * cpuScale; // wait CPU cycles\n }\n }\n\n function doBlit(flags) {\n //console.log(hex(flags), blitregs);\n flags &= 0xff;\n var offs = SCREEN_HEIGHT - blitregs[7];\n var sstart = (blitregs[2] << 8) + blitregs[3];\n var dstart = (blitregs[4] << 8) + blitregs[5];\n var w = blitregs[6] ^ 4; // blitter bug fix\n var h = blitregs[7] ^ 4;\n if (w == 0) w++;\n if (h == 0) h++;\n if (h == 255) h++;\n var sxinc = (flags & 0x1) ? 256 : 1;\n var syinc = (flags & 0x1) ? 1 : w;\n var dxinc = (flags & 0x2) ? 256 : 1;\n var dyinc = (flags & 0x2) ? 1 : w;\n var pixdata = 0;\n for (var y = 0; y < h; y++) {\n var source = sstart & 0xffff;\n var dest = dstart & 0xffff;\n for (var x = 0; x < w; x++) {\n var data = memread_williams(source);\n if (flags & 0x20) {\n pixdata = (pixdata << 8) | data;\n blit_pixel(dest, (pixdata >> 4) & 0xff, flags);\n } else {\n blit_pixel(dest, data, flags);\n }\n source += sxinc;\n source &= 0xffff;\n dest += dxinc;\n dest &= 0xffff;\n }\n if (flags & 0x2)\n dstart = (dstart & 0xff00) | ((dstart + dyinc) & 0xff);\n else\n dstart += dyinc;\n if (flags & 0x1)\n sstart = (sstart & 0xff00) | ((sstart + syinc) & 0xff);\n else\n sstart += syinc;\n }\n return w * h * (2 + ((flags & 0x4) >> 2)); // # of memory accesses\n }\n\n function blit_pixel(dstaddr, srcdata, flags) {\n var curpix = dstaddr < 0xc000 ? ram.mem[dstaddr] : memread_williams(dstaddr);\n var solid = blitregs[1];\n var keepmask = 0xff; //what part of original dst byte should be kept, based on NO_EVEN and NO_ODD flags\n //even pixel (D7-D4)\n if ((flags & 0x8) && !(srcdata & 0xf0)) { //FG only and src even pixel=0\n if (flags & 0x80) keepmask &= 0x0f; // no even\n } else {\n if (!(flags & 0x80)) keepmask &= 0x0f; // not no even\n }\n //odd pixel (D3-D0)\n if ((flags & 0x8) && !(srcdata & 0x0f)) { //FG only and src odd pixel=0\n if (flags & 0x40) keepmask &= 0xf0; // no odd\n } else {\n if (!(flags & 0x40)) keepmask &= 0xf0; // not no odd\n }\n curpix &= keepmask;\n if (flags & 0x10) // solid bit\n curpix |= (solid & ~keepmask);\n else\n curpix |= (srcdata & ~keepmask);\n if (dstaddr < 0x9800) // can cause recursion otherwise\n memwrite_williams(dstaddr, curpix);\n }\n\n // TODO\n /*\n var trace = false;\n var _traceinsns = {};\n function _trace() {\n var pc = cpu.getPC();\n if (!_traceinsns[pc]) {\n _traceinsns[pc] = 1;\n console.log(hex(pc), cpu.getTstates());\n }\n }\n */\n this.start = function() {\n ram = new RAM(0xc000);\n nvram = new RAM(0x400);\n rom = new Uint8Array(0xc000);\n // TODO: save in browser storage?\n //displayPCs = new Uint16Array(new ArrayBuffer(0x9800*2));\n membus = {\n read: memread_williams,\n write: memwrite_williams,\n };\n this.readAddress = membus.read;\n var iobus = {\n read: function(a) { return 0; },\n write: function(a, v) { console.log(hex(a), hex(v)); }\n }\n cpu = self.newCPU(membus, iobus);\n\n audio = new MasterAudio();\n worker = new Worker(\"./src/common/audio/z80worker.js\");\n workerchannel = new WorkerSoundChannel(worker);\n audio.master.addChannel(workerchannel);\n\n let rotate = options.rotate == null ? -90 : parseFloat(options.rotate);\n video = new RasterVideo(mainElement, SCREEN_WIDTH, SCREEN_HEIGHT, { rotate });\n video.create();\n $(video.canvas).click(function(e) {\n var x = Math.floor(e.offsetX * video.canvas.width / $(video.canvas).width());\n var y = Math.floor(e.offsetY * video.canvas.height / $(video.canvas).height());\n var addr = (x >> 3) + (y * 32) + 0x400;\n if (displayPCs) console.log(x, y, hex(addr, 4), \"PC\", hex(displayPCs[addr], 4));\n });\n var idata = video.getFrameData();\n setKeyboardFromMap(video, pia6821, KEYCODE_MAP);\n pixels = video.getFrameData();\n timer = new AnimationTimer(60, this.nextFrame.bind(this));\n }\n\n this.getRasterScanline = function() { return video_counter; }\n\n this.advance = function(novideo: boolean) {\n var cpuCyclesPerSection = Math.round(cpuCyclesPerFrame / 65);\n for (var sl = 0; sl < 256; sl += 4) {\n video_counter = sl;\n // interrupts happen every 1/4 of the screen\n if (sl == 0 || sl == 0x3c || sl == 0xbc || sl == 0xfc) {\n if (membus.read != memread_defender || pia6821[7] == 0x3c) { // TODO?\n if (cpu.interrupt)\n cpu.interrupt();\n if (cpu.requestInterrupt)\n cpu.requestInterrupt();\n }\n }\n this.runCPU(cpu, cpuCyclesPerSection);\n if (sl < 256) video.updateFrame(0, 0, 256 - 4 - sl, 0, 4, 304);\n }\n // last 6 lines\n this.runCPU(cpu, cpuCyclesPerSection * 2);\n if (screenNeedsRefresh && !novideo) {\n for (var i = 0; i < 0x9800; i++)\n drawDisplayByte(i, ram.mem[i]);\n screenNeedsRefresh = false;\n }\n if (watchdog_enabled && watchdog_counter-- <= 0) {\n console.log(\"WATCHDOG FIRED, PC =\", cpu.getPC().toString(16)); // TODO: alert on video\n // TODO: this.breakpointHit(cpu.T());\n this.reset();\n }\n }\n\n this.loadSoundROM = function(data) {\n console.log(\"loading sound ROM \" + data.length + \" bytes\");\n var soundrom = padBytes(data, 0x4000);\n worker.postMessage({ rom: soundrom });\n }\n\n this.loadROM = function(title, data) {\n if (data.length > 2) {\n if (isDefender) {\n self.loadSoundROM(data.slice(0x6800));\n rom = rom.slice(0, 0x6800);\n } else if (data.length > 0xc000) {\n self.loadSoundROM(data.slice(0xc000));\n rom = rom.slice(0, 0xc000);\n } else if (data.length > 0x9000 && data[0x9000]) {\n self.loadSoundROM(data.slice(0x9000));\n }\n rom = padBytes(data, 0xc000);\n }\n self.reset();\n }\n\n this.loadState = function(state) {\n cpu.loadState(state.c);\n ram.mem.set(state.b);\n nvram.mem.set(state.nvram);\n pia6821.set(state.pia);\n blitregs.set(state.blt);\n watchdog_counter = state.wdc;\n banksel = state.bs;\n portsel = state.ps;\n }\n this.saveState = function() {\n return {\n c: self.getCPUState(),\n b: ram.mem.slice(0),\n nvram: nvram.mem.slice(0),\n pia: pia6821.slice(0),\n blt: blitregs.slice(0),\n wdc: watchdog_counter,\n bs: banksel,\n ps: portsel,\n };\n }\n this.loadControlsState = function(state) {\n pia6821.set(state.pia);\n }\n this.saveControlsState = function() {\n return {\n pia: pia6821.slice(0),\n };\n }\n this.getCPUState = function() {\n return cpu.saveState();\n }\n\n this.isRunning = function() {\n return timer && timer.isRunning();\n }\n this.pause = function() {\n timer.stop();\n audio.stop();\n }\n this.resume = function() {\n timer.start();\n audio.start();\n }\n this.reset = function() {\n cpu.reset();\n watchdog_counter = INITIAL_WATCHDOG;\n watchdog_enabled = false;\n banksel = 1;\n }\n this.scaleCPUFrequency = function(scale) {\n cpuScale = scale;\n cpuFrequency *= scale;\n cpuCyclesPerFrame *= scale;\n }\n this.getMemoryMap = function() { return { main:[\n {name:'Video RAM',start:0x0000,size:0xc000,type:'ram'},\n {name:'I/O Registers',start:0xc000,size:0x1000,type:'io'},\n ] } };\n}\n\nvar Williams6809Platform = function(mainElement, options) {\n this.__proto__ = new WilliamsPlatform(mainElement, null, options);\n}\n\nvar WilliamsZ80Platform = function(mainElement, options) {\n this.__proto__ = new WilliamsPlatform(mainElement, BaseZ80Platform, options);\n\n // Z80 @ 4 MHz\n // also scale bitblt clocks\n this.scaleCPUFrequency(4);\n\n this.ramStateToLongString = function(state) {\n var blt = state.blt;\n var sstart = (blt[2] << 8) + blt[3];\n var dstart = (blt[4] << 8) + blt[5];\n var w = blt[6] ^ 4; // blitter bug fix\n var h = blt[7] ^ 4;\n return \"\\nBLIT\"\n + \" \" + hex(sstart, 4) + \" \" + hex(dstart, 4)\n + \" w:\" + hex(w) + \" h:\" + hex(h)\n + \" f:\" + hex(blt[0]) + \" s:\" + hex(blt[1]);\n }\n}\n\nvar WilliamsDefenderPlatform = function(mainElement, options) {\n this.__proto__ = new WilliamsPlatform(mainElement, null, {isDefender:true});\n this.getMemoryMap = function() { return { main:[\n {name:'NVRAM',start:0x400,size:0x200,type:'ram'},\n {name:'Video RAM',start:0x0000,size:0xc000,type:'ram'},\n {name:'I/O Registers',start:0xc000,size:0x1000,type:'io'},\n {name:'ROM',start:0xd000,size:0x3000,type:'rom'},\n] } };\n}\n\nPLATFORMS['williams'] = Williams6809Platform;\nPLATFORMS['williams-defender'] = WilliamsDefenderPlatform;\nPLATFORMS['williams-z80'] = WilliamsZ80Platform;\n\n// http://seanriddle.com/willhard.html\n"],
"mappings": "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",
"names": []
}