8bitworkshop/gen/vector-6PAX7NWQ.js.map

8 lines
32 KiB
Plaintext

{
"version": 3,
"sources": ["../src/platform/vector.ts"],
"sourcesContent": ["\nimport { Platform, BaseZ80Platform, Base6502Platform } from \"../common/baseplatform\";\nimport { PLATFORMS, RAM, newAddressDecoder, padBytes, noise, setKeyboardFromMap, AnimationTimer, VectorVideo, Keys, makeKeycodeMap } from \"../common/emu\";\nimport { hex } from \"../common/util\";\nimport { MasterAudio, POKEYDeviceChannel, newPOKEYAudio } from \"../common/audio\";\n\n// http://www.computerarcheology.com/Arcade/Asteroids/DVG.html\n// http://arcarc.xmission.com/Tech/neilw_xy.txt\n\nvar VECTOR_PRESETS = [\n {id:'font.c', name:'Vector Fonts'},\n {id:'threed.c', name:'3D Transformations'},\n {id:'game.c', name:'Space Game'},\n {id:'music.c', name:'POKEY Music'},\n]\n\nvar ASTEROIDS_KEYCODE_MAP = makeKeycodeMap([\n [Keys.B, 3, 0xff],\n [Keys.A, 4, 0xff],\n [Keys.SELECT, 8, 0xff],\n [Keys.VK_6, 9, 0xff],\n [Keys.VK_7, 10, 0xff],\n [Keys.START, 11, 0xff],\n [Keys.P2_START, 12, 0xff],\n [Keys.UP, 13, 0xff],\n [Keys.RIGHT, 14, 0xff],\n [Keys.LEFT, 15, 0xff],\n]);\n\nvar GRAVITAR_KEYCODE_MAP = makeKeycodeMap([\n [Keys.B, 1, -0x1],\n [Keys.A, 1, -0x2],\n [Keys.VK_5, 0, 0x2],\n [Keys.VK_6, 0, 0x1],\n [Keys.START, 2, 0x20],\n [Keys.P2_START, 2, 0x40],\n [Keys.UP, 1, -0x10],\n [Keys.DOWN, 1, -0x20],\n [Keys.RIGHT, 1, -0x4],\n [Keys.LEFT, 1, -0x8],\n]);\n\nvar AtariVectorPlatform = function(mainElement) {\n var XTAL = 12096000;\n var cpuFrequency = XTAL/8;\n var cpuCyclesPer3khz = Math.round(cpuFrequency/(XTAL/4096)); // ~3 Khz\n var cpuCyclesPerNMI = Math.round(cpuFrequency*12/(XTAL/4096)); // ~250 Hz\n var cpuCyclesPerFrame = Math.round(cpuFrequency/60);\n var cpu, cpuram, dvgram, rom, vecrom, bus, dvg;\n var video, audio, timer;\n var clock;\n var watchdog = 0;\n var switches = new RAM(16).mem;\n var nmicount = cpuCyclesPerNMI;\n\n this.__proto__ = new (Base6502Platform as any)();\n\n this.showHelp = function() {\n return \"https://8bitworkshop.com/docs/platforms/arcade/index.html#vector-games\"\n }\n\n this.getPresets = function() {\n return VECTOR_PRESETS;\n }\n\n this.start = function() {\n cpuram = new RAM(0x400);\n dvgram = new RAM(0x2000);\n //switches[5] = 0xff;\n //switches[7] = 0xff;\n // bus\n bus = {\n\n read: newAddressDecoder([\n [0x0, 0x3ff, 0x3ff, function(a) { return cpuram.mem[a]; }],\n [0x2001, 0x2001, 0, function(a) { return ((clock / cpuCyclesPer3khz) & 1) ? 0xff : 0x00; }],\n [0x2000, 0x2007, 0x7, function(a) { return switches[a]; }],\n [0x2400, 0x2407, 0x7, function(a) { return switches[a+8]; }],\n [0x4000, 0x4fff, 0xfff, function(a) { return dvgram.mem[a]; }],\n [0x5000, 0x5fff, 0xfff, function(a) { return vecrom[a]; }],\n [0x6800, 0x7fff, 0, function(a) { return rom ? rom[a - 0x6800] : 0; }],\n ], {gmask:0x7fff}),\n\n write: newAddressDecoder([\n [0x0, 0x3ff, 0x3ff, function(a,v) { cpuram.mem[a] = v; }],\n [0x3000, 0x3000, 0, function(a,v) { dvg.runUntilHalt(0); }],\n [0x3400, 0x3400, 0, function(a,v) { watchdog = 0; }],\n // TODO: draw asynchronous or allow poll of HALT ($2002)\n [0x4000, 0x5fff, 0x1fff, function(a,v) { dvgram.mem[a] = v; }],\n ], {gmask:0x7fff})\n\n };\n this.readAddress = bus.read;\n cpu = this.newCPU(bus);\n // create video/audio\n video = new VectorVideo(mainElement,1024,1024);\n dvg = new DVGBWStateMachine(bus, video, 0x4000);\n audio = newPOKEYAudio(2);\n video.create();\n timer = new AnimationTimer(60, this.nextFrame.bind(this));\n setKeyboardFromMap(video, switches, ASTEROIDS_KEYCODE_MAP);\n }\n\n this.advance = (novideo) => {\n if (!novideo) video.clear();\n var debugCond = this.getDebugCallback();\n clock = 0;\n for (var i=0; i<cpuCyclesPerFrame; i++) {\n if (debugCond && debugCond()) {\n debugCond = null;\n break;\n }\n clock++;\n if (--nmicount == 0) {\n //console.log(\"NMI\", cpu.saveState());\n var n = cpu.setNMIAndWait();\n clock += n;\n nmicount = cpuCyclesPerNMI - n;\n }\n cpu.clockPulse();\n //cpu.executeInstruction();\n }\n //if (++watchdog == 256) { watchdog = 0; cpu.reset(); }\n }\n\n this.loadROM = function(title, data) {\n if(data.length != 0x2000) {\n throw Error(\"ROM length must be == 0x2000\");\n }\n rom = data.slice(0,0x1800);\n vecrom = data.slice(0x1800,0x2000);\n this.reset();\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 this.clearDebug();\n cpu.reset();\n }\n\n this.loadState = function(state) {\n cpu.loadState(state.c);\n cpuram.mem.set(state.b);\n dvgram.mem.set(state.db);\n switches.set(state.sw);\n nmicount = state.nmic;\n }\n this.saveState = function() {\n return {\n c:cpu.saveState(),\n b:cpuram.mem.slice(0),\n db:dvgram.mem.slice(0),\n sw:switches.slice(0),\n nmic:nmicount\n }\n }\n this.loadControlsState = function(state) {\n switches.set(state.sw);\n }\n this.saveControlsState = function() {\n return {\n sw:switches.slice(0),\n }\n }\n this.getCPUState = function() {\n return cpu.saveState();\n }\n this.getMemoryMap = function() { return { main:[\n {name:'Switches/POKEY I/O',start:0x7800,size:0x1000,type:'io'},\n {name:'DVG I/O',start:0x8800,size:0x100,type:'io'},\n {name:'EAROM',start:0x8900,size:0x100,type:'ram'},\n ] } };\n}\n\nvar AtariColorVectorPlatform = function(mainElement) {\n var masterFrequency = 12096000.0;\n var cpuFrequency = masterFrequency / 8;\n var nmiFrequency = masterFrequency / 4096 / 12;\n var cpuCyclesPerNMI = Math.round(cpuFrequency / nmiFrequency);\n var cpuCyclesPerFrame = Math.round(cpuFrequency / 60);\n var cpu, cpuram, dvgram, rom, vecrom, bus, dvg, earom;\n var video, audio, timer;\n var clock;\n var switches = new RAM(16).mem;\n var nmicount = cpuCyclesPerNMI;\n var earom_offset, earom_data;\n\n this.__proto__ = new (Base6502Platform as any)();\n //this.debugPCDelta = 0;\n\n this.getPresets = function() {\n return VECTOR_PRESETS;\n }\n\n this.start = function() {\n cpuram = new RAM(0x800);\n dvgram = new RAM(0x2000);\n earom = new RAM(0x40);\n //rom = padBytes(new lzgmini().decode(GRAVITAR_ROM).slice(0), 0x7000+1);\n //vecrom = padBytes(new lzgmini().decode(GRAVITAR_VECROM).slice(0), 0x6000-0x2800+1);\n switches[0] = 0x0;\n switches[1] = 0xff;\n switches[2] = 0x0;\n // bus\n bus = {\n\n read: newAddressDecoder([\n [0x0, 0x7ff, 0x7ff, function(a) { return cpuram.mem[a]; }],\n [0x2000, 0x27ff, 0x7ff, function(a) { return dvgram.mem[a]; }],\n [0x2800, 0x5fff, 0x7fff, function(a) { return vecrom[a - 0x2800]; }],\n //[0x2001, 0x2001, 0, function(a) { return ((clock/500) & 1) ? 0xff : 0x00; }],\n //[0x6000, 0x67ff, 0x7ff, function(a) { /* pokey1 */ return 0; }],\n //[0x6800, 0x6fff, 0x7ff, function(a) { /* pokey2 */ return 0; }],\n [0x7800, 0x7800, 0, function(a) { return switches[0]; }],\n [0x8000, 0x8000, 0, function(a) { return switches[1]; }],\n [0x8800, 0x8800, 0, function(a) { return switches[2]; }],\n //[0x7000, 0x7000, 0, function(a) { /* EAROM read */ return 0; }],\n //[0x8940, 0x897f, 0x3f, function(a) { /* EAROM data */ return 0; }],\n [0x8900, 0x8900, 0, function(a) { /* EAROM read */ return earom_data; }],\n [0x9000, 0xffff, 0xffff, function(a) { return rom ? rom[a - 0x9000] : 0; }],\n ]),\n\n write: newAddressDecoder([\n [0x0, 0x7ff, 0x7ff, function(a,v) { cpuram.mem[a] = v; }],\n [0x2000, 0x27ff, 0x7ff, function(a,v) { dvgram.mem[a] = v; }],\n [0x2800, 0x5fff, 0x7fff, function(a,v) { vecrom[a - 0x2800] = v; }], // TODO: remove (it's ROM!)\n [0x6000, 0x67ff, 0xf, function(a,v) { audio.pokey1.setRegister(a, v); }],\n [0x6800, 0x6fff, 0xf, function(a,v) { audio.pokey2.setRegister(a, v); }],\n [0x8800, 0x8800, 0, function(a,v) { /* LEDs, etc */ }],\n [0x8840, 0x8840, 0, function(a,v) { dvg.runUntilHalt(0); }],\n [0x8880, 0x8880, 0, function(a,v) { dvg.reset(); }],\n [0x88c0, 0x88c0, 0, function(a,v) { /* IRQ ACK */ }],\n [0x8900, 0x8900, 0, function(a,v) { /* EAROM ctrl */\n if (v == 9) earom_data=earom.mem[earom_offset];\n if (v == 12) earom.mem[earom_offset]=earom_data;\n }],\n [0x8940, 0x897f, 0x3f, function(a,v) { /* EAROM data */ earom_offset = a; earom_data = v; }],\n [0x8980, 0x8980, 0, function(a,v) { /* TODO: watchdog */ }],\n // TODO: draw asynchronous or allow poll of HALT ($2002)\n //[0, 0xffff, 0, function(a,v) { console.log(hex(a,4),hex(v,2)); }],\n ])\n\n };\n this.readAddress = bus.read;\n cpu = this.newCPU(bus);\n // create video/audio\n video = new VectorVideo(mainElement,1024,1024);\n dvg = new DVGColorStateMachine(bus, video, 0x2000);\n audio = newPOKEYAudio(2);\n video.create();\n timer = new AnimationTimer(60, this.nextFrame.bind(this));\n setKeyboardFromMap(video, switches, GRAVITAR_KEYCODE_MAP);\n }\n\n this.advance = (novideo) => {\n if (!novideo) video.clear();\n var debugCond = this.getDebugCallback();\n clock = 0;\n for (var i=0; i<cpuCyclesPerFrame; i++) {\n if (debugCond && debugCond()) {\n debugCond = null;\n break;\n }\n clock++;\n if (--nmicount == 0) {\n //console.log(\"NMI\", cpu.saveState());\n var n = cpu.setIRQ(); // TODO: only if I flag set\n clock += n;\n nmicount = cpuCyclesPerNMI - n;\n //console.log(n, clock, nmicount);\n }\n cpu.clockPulse();\n //cpu.executeInstruction();\n }\n }\n\n this.loadROM = function(title, data) {\n rom = data.slice(0, 0x7000);\n vecrom = padBytes(data.slice(0x7000), 0x3800);\n this.reset();\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 this.clearDebug();\n cpu.reset();\n }\n\n this.loadState = function(state) {\n this.unfixPC(state.c);\n cpu.loadState(state.c);\n this.fixPC(state.c);\n cpuram.mem.set(state.b);\n dvgram.mem.set(state.db);\n switches.set(state.sw);\n nmicount = state.nmic;\n }\n this.saveState = function() {\n return {\n c:this.getCPUState(),\n b:cpuram.mem.slice(0),\n db:dvgram.mem.slice(0),\n sw:switches.slice(0),\n nmic:nmicount\n }\n }\n this.loadControlsState = function(state) {\n switches.set(state.sw);\n }\n this.saveControlsState = function() {\n return {\n sw:switches.slice(0),\n }\n }\n this.getCPUState = function() {\n return this.fixPC(cpu.saveState());\n }\n}\n\n//\n\nvar Z80ColorVectorPlatform = function(mainElement, proto) {\n var cpuFrequency = 4000000.0;\n var cpuCyclesPerFrame = Math.round(cpuFrequency/60);\n var cpu, cpuram, dvgram, rom, bus, dvg;\n var video, audio, timer;\n var clock;\n var switches = new RAM(16).mem;\n var mathram = new RAM(16).mem;\n\n this.__proto__ = new (BaseZ80Platform as any)();\n\n this.getPresets = function() {\n return VECTOR_PRESETS;\n }\n\n function do_math() {\n var sum = (((mathram[0] + (mathram[1]<<8)) << 16) >> 16);\n var a = (mathram[2] << 24) >> 24;\n var b = (mathram[3] << 24) >> 24;\n var d = a!=0 ? (sum/a) : 0;\n sum += (a*b) & 0xffff;\n mathram[0] = sum & 0xff;\n mathram[1] = (sum >> 8) & 0xff;\n mathram[4] = d & 0xff;\n mathram[5] = (d >> 8) & 0xff;\n }\n\n this.start = function() {\n cpuram = new RAM(0x2000);\n dvgram = new RAM(0x4000);\n switches[0] = 0x0;\n switches[1] = 0xff;\n switches[2] = 0x0;\n // bus\n bus = {\n\n read: newAddressDecoder([\n [0x0, 0x7fff, 0, function(a) { return rom ? rom[a] : 0; }],\n [0x8000, 0x800f, 0xf, function(a) { return switches[a]; }],\n [0x8100, 0x810f, 0xf, function(a) { return mathram[a]; } ],\n [0xa000, 0xdfff, 0x3fff, function(a) { return dvgram.mem[a]; }],\n [0xe000, 0xffff, 0x1fff, function(a) { return cpuram.mem[a]; }],\n ]),\n\n write: newAddressDecoder([\n [0x8000, 0x800f, 0xf, function(a,v) { audio.pokey1.setRegister(a, v); }],\n [0x8010, 0x801f, 0xf, function(a,v) { audio.pokey2.setRegister(a, v); }],\n [0x8100, 0x810e, 0xf, function(a,v) { mathram[a] = v; } ],\n [0x810f, 0x810f, 0, function(a,v) { do_math(); } ],\n [0x8840, 0x8840, 0, function(a,v) { dvg.runUntilHalt(0); }],\n [0x8880, 0x8880, 0, function(a,v) { dvg.reset(); }],\n [0x8980, 0x8980, 0, function(a,v) { switches[0xe] = 16; }],\n [0xa000, 0xdfff, 0x3fff, function(a,v) { dvgram.mem[a] = v; }],\n [0xe000, 0xffff, 0x1fff, function(a,v) { cpuram.mem[a] = v; }],\n ])\n\n };\n this.readAddress = bus.read;\n cpu = this.newCPU(bus, bus);\n // create video/audio\n video = new VectorVideo(mainElement,1024,1024);\n dvg = new DVGColorStateMachine(bus, video, 0xa000);\n audio = newPOKEYAudio(2);\n video.create();\n timer = new AnimationTimer(60, this.nextFrame.bind(this));\n setKeyboardFromMap(video, switches, GRAVITAR_KEYCODE_MAP);\n }\n\n this.advance = (novideo) => {\n if (!novideo) video.clear();\n this.runCPU(cpu, cpuCyclesPerFrame);\n cpu.interrupt(0xff); // RST 0x38\n switches[0xf] = (switches[0xf] + 1) & 0x3;\n if (--switches[0xe] <= 0) {\n console.log(\"WATCHDOG FIRED\"); // TODO: alert on video\n this.reset(); // watchdog reset\n }\n }\n\n this.loadROM = function(title, data) {\n rom = padBytes(data, 0x8000);\n this.reset();\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 switches[0xe] = 16;\n cpu.reset();\n }\n\n this.loadState = function(state) {\n cpu.loadState(state.c);\n cpuram.mem.set(state.b);\n dvgram.mem.set(state.db);\n switches.set(state.sw);\n mathram.set(state.mr);\n }\n this.saveState = function() {\n return {\n c:cpu.saveState(),\n b:cpuram.mem.slice(0),\n db:dvgram.mem.slice(0),\n sw:switches.slice(0),\n mr:mathram.slice(0),\n }\n }\n this.loadControlsState = function(state) {\n switches.set(state.sw);\n }\n this.saveControlsState = function() {\n return {\n sw:switches.slice(0),\n }\n }\n this.getCPUState = function() {\n return cpu.saveState();\n }\n this.getMemoryMap = function() { return { main:[\n {name:'Switches/POKEY I/O',start:0x8000,size:0x100,type:'io'},\n {name:'Math Box I/O',start:0x8100,size:0x100,type:'io'},\n {name:'DVG I/O',start:0x8800,size:0x100,type:'io'},\n {name:'DVG RAM',start:0xa000,size:0x4000,type:'ram'},\n ] } };\n}\n\n// DIGITAL VIDEO GENERATOR\n\nvar DVGBWStateMachine = function(bus, video, bofs) {\n var pc = 0;\n var x = 0;\n var y = 0;\n var gsc = 0;\n var pcstack = [];\n var running = false;\n bofs &= 0xffff;\n\n function readWord(a) {\n a &= 0xfff;\n var v = bus.read(a*2+bofs) + (bus.read(a*2+bofs+1) << 8);\n //console.log(hex(a*2+bofs,4), hex(v,4), hex(x>>2), hex(y>>2));\n return v;\n }\n\n function decodeSigned(w, o2) {\n var s = w & (1<<o2);\n w = w & ((1<<o2)-1);\n if (s)\n return -w;\n else\n return w;\n }\n\n this.reset = function() {\n pc = 0;\n gsc = 7;\n running = false;\n }\n\n this.go = function() {\n this.reset();\n running = true;\n }\n\n this.runUntilHalt = function(startpc) {\n this.go();\n pc = startpc;\n for (var i=0; i<10000; i++) { // TODO: limit execution\n if (!running) break;\n this.nextInstruction();\n }\n //console.log('DVG',i);\n }\n\n var GSCALES = [7, 6, 5, 4, 3, 2, 1, 0, 15, 14, 13, 12, 11, 10, 9, 8];\n\n this.nextInstruction = function() {\n if (!running) return;\n var w = readWord(pc);\n var op = w >> 12;\n //console.log(hex(pc*2+bofs), hex(w), hex(x>>2), hex(y>>2), hex(32-pcstack.length*2));\n pc++;\n switch (op) {\n // VEC\n case 0:\n case 1:\n case 2:\n case 3:\n case 4:\n case 5:\n case 6:\n case 7:\n case 8:\n case 9: { // VCTR\n var sc = gsc + 9 - op;\n var w2 = readWord(pc++);\n var z = w2 >> 12;\n var x2 = x + ((decodeSigned(w2, 10) << 7) >> sc);\n var y2 = y + ((decodeSigned(w, 10) << 7) >> sc);\n video.drawLine(x, y, x2, y2, z*32, 7);\n //console.log(pc.toString(16), w.toString(16), w2.toString(16), gsc, sc, x, y, x2, y2);\n x = x2;\n y = y2;\n break;\n }\n case 10: { // LABS\n var w2 = readWord(pc++);\n gsc = GSCALES[w2 >> 12];\n x = w2 & 0x3ff;\n y = w & 0x3ff;\n break;\n }\n case 11: // HALT\n running = false;\n break;\n case 13: // RTSL\n pc = pcstack.pop();\n break;\n case 12: // JSRL\n pcstack.push(pc);\n case 14: // JMPL\n pc = w & 0xfff;\n break;\n case 15: { // SVEC\n var sc = ((w>>11)&1) + ((w>>2)&2);\n sc = gsc - sc - 1;\n var x2 = x + ((decodeSigned(w, 2) << 7) >> sc);\n var y2 = y + ((decodeSigned(w>>8, 2) << 7) >> sc);\n var z = (w >> 4) & 0xf;\n video.drawLine(x, y, x2, y2, z*32, 7);\n x = x2;\n y = y2;\n break;\n }\n }\n }\n}\n\nvar DVGColorStateMachine = function(bus, video, bofs) {\n var pc = 0;\n var x = 0;\n var y = 0;\n var scale = 1.0;\n var color;\n var statz;\n var sparkle;\n var pcstack = [];\n var running = false;\n\n bofs &= 0xffff;\n\n function readWord(a) {\n a &= 0x1fff;\n return bus.read(a*2+bofs) + (bus.read(a*2+bofs+1) << 8);\n }\n\n // twos complement\n function decodeSigned(w, o2) {\n var s = w & (1<<o2);\n w = w & ((1<<o2)-1);\n if (s)\n return w-(1<<o2);\n else\n return w;\n }\n\n function sparkle_color() {\n return (Math.random() * 256) & 0x7;\n }\n\n this.reset = function() {\n pc = 0;\n scale = 1.0;\n color = 7;\n statz = 15;\n x = 512;\n y = 512;\n sparkle = false;\n running = false;\n }\n\n this.go = function() {\n this.reset();\n running = true;\n }\n\n this.runUntilHalt = function(startpc) {\n this.go();\n pc = startpc;\n for (var i=0; i<10000; i++) { // TODO: limit execution\n if (!running) break;\n this.nextInstruction();\n }\n //console.log('DVG',i);\n }\n\n this.nextInstruction = function() {\n if (!running) return;\n var w = readWord(pc);\n var op = w >> 13;\n //video.drawLine(pc, 1023, pc+1, 1023-op, 7);\n //console.log(hex(pc), hex(w), op);\n pc++;\n switch (op) {\n case 0: { // VCTR\n var w2 = readWord(pc++);\n var z = w2 >> 13;\n if (z == 2) z = statz;\n var x2 = x + Math.round(decodeSigned(w2, 12) * scale);\n var y2 = y + Math.round(decodeSigned(w, 12) * scale);\n if (sparkle) color = sparkle_color();\n video.drawLine(x, y, x2, y2, z<<4, color);\n x = x2;\n y = y2;\n break;\n }\n case 1: // HALT\n running = false;\n break;\n case 2: { // SVEC\n var x2 = x + Math.round(decodeSigned(w, 4) * scale * 2);\n var y2 = y + Math.round(decodeSigned(w>>8, 4) * scale * 2);\n var z = (w >> 5) & 0x7;\n if (z == 2) z = statz;\n if (sparkle) color = sparkle_color();\n video.drawLine(x, y, x2, y2, z<<4, color);\n x = x2;\n y = y2;\n break;\n }\n case 3: { // STAT/SCAL\n if (w & 0x1000) { // SCAL\n var b = ((w >> 8) & 0x07)+8;\n var l = (~w) & 0xff;\n scale = ((l << 16) >> b) / 32768.0;\n } else { // STAT\n color = w & 7;\n statz = (w >> 4) & 0xf;\n sparkle = (w & 0x800) != 0;\n }\n break;\n }\n case 4: // CNTR\n x = 512;\n y = 512;\n break;\n case 6: // RTSL\n if (pcstack.length == 0) {\n //console.log(\"stack underflow\"); // TODO: error?\n } else {\n pc = pcstack.pop();\n }\n break;\n case 5: // JSRL\n pcstack.push(pc);\n case 7: // JMPL\n if (pc == 0)\n running = false;\n else\n pc = w & 0x1fff;\n break;\n }\n }\n}\n\n//\n\nPLATFORMS['vector-ataribw'] = AtariVectorPlatform;\nPLATFORMS['vector-ataricolor'] = AtariColorVectorPlatform;\nPLATFORMS['vector-z80color'] = Z80ColorVectorPlatform;\n"],
"mappings": "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",
"names": []
}