8bitworkshop/gen/vic20-PC2ZVKOB.js.map

8 lines
16 KiB
Plaintext

{
"version": 3,
"sources": ["../src/machine/vic20.ts", "../src/platform/vic20.ts"],
"sourcesContent": ["\n//// WASM Machine\n\n// http://www.zimmers.net/anonftp/pub/cbm/documents/chipdata/VIC-I.txt\n// http://www.zimmers.net/anonftp/pub/cbm/maps/Vic20.MemoryMap.txt\n// http://sleepingelephant.com/denial/wiki/index.php/Autostart\n\nimport { Machine } from \"../common/baseplatform\";\nimport { Probeable, TrapCondition } from \"../common/devices\";\nimport { KeyFlags } from \"../common/emu\";\nimport { hex } from \"../common/util\";\nimport { BaseWASMMachine } from \"../common/wasmplatform\";\n\nexport class VIC20_WASMMachine extends BaseWASMMachine implements Machine, Probeable {\n\n numTotalScanlines = 312;\n cpuCyclesPerLine = 71;\n videoOffsetBytes = -24 * 4;\n\n prgstart : number;\n joymask0 = 0;\n joymask1 = 0;\n\n getBIOSLength() { return 0x5000 };\n\n loadBIOS(srcArray: Uint8Array) {\n super.loadBIOS(srcArray);\n }\n async fetchBIOS() {\n let bios = new Uint8Array(20480);\n bios.set(DEFAULT_BIOS, bios.length - DEFAULT_BIOS.length);\n this.allocateBIOS(bios);\n this.loadBIOS(new Uint8Array(bios));\n }\n reset() {\n super.reset();\n // clear keyboard\n for (var ch=0; ch<128; ch++) {\n this.setKeyInput(ch, 0, KeyFlags.KeyUp);\n }\n // load rom\n if (this.romptr && this.romlen) {\n let rom = this.romarr;\n this.exports.machine_load_rom(this.sys, this.romptr, this.romlen);\n let iscart = rom[4+2]==0x41 && rom[5+2]==0x30 && rom[6+2]==0xC3 && rom[7+2]==0xC2 && rom[8+2]==0xCD;\n if (!iscart) {\n this.prgstart = rom[0] + (rom[1]<<8); // get load address\n // look for BASIC program start\n if (this.prgstart == 0x1001) {\n this.prgstart = rom[2] + (rom[3]<<8) + 2; // point to after BASIC program\n console.log(\"prgstart\", hex(this.prgstart));\n }\n // is program loaded into RAM?\n if (this.prgstart < 0x8000) {\n // advance BIOS a few frames\n this.exports.machine_exec(this.sys, 500000);\n // type in command (SYS 2061)\n var cmd = \"SYS \"+this.prgstart+\"\\r\";\n console.log(cmd);\n for (var i=0; i<cmd.length; i++) {\n var key = cmd.charCodeAt(i);\n this.exports.machine_exec(this.sys, 10000);\n this.exports.machine_exec(this.sys, 10000);\n this.exports.machine_key_down(this.sys, key);\n this.exports.machine_exec(this.sys, 10000);\n this.exports.machine_exec(this.sys, 10000);\n this.exports.machine_key_up(this.sys, key);\n }\n // advance clock until program starts\n for (var i=0; i<10000 && this.getPC() != this.prgstart; i++) {\n this.exports.machine_tick(this.sys);\n }\n }\n } else {\n // get out of reset\n //this.exports.machine_exec(this.sys, 100);\n // wait until cartridge start\n // TODO: detect ROM cartridge\n var warmstart = this.romarr[0x2+2] + this.romarr[0x3+2]*256;\n for (var i=0; i<10000 && this.getPC() != warmstart; i++) {\n this.exports.machine_tick(this.sys);\n }\n console.log('cart', i, hex(warmstart));\n }\n // TODO: shouldn't we return here @ start of frame?\n // and stop probing\n }\n }\n advanceFrame(trap: TrapCondition) : number {\n // TODO: does this sync with VSYNC?\n var scanline = this.getRasterY();\n var clocks = Math.floor((this.numTotalScanlines - scanline) * 22152 / this.numTotalScanlines);\n var probing = this.probe != null;\n if (probing) this.exports.machine_reset_probe_buffer();\n clocks = super.advanceFrameClock(trap, clocks);\n if (probing) this.copyProbeData();\n return clocks;\n }\n getRasterY() {\n return this.exports.machine_get_raster_line(this.sys);\n }\n getRasterCanvasPosition() {\n return {\n x: -1, // TODO?\n y: this.getRasterY() - 14,\n }\n }\n getCPUState() {\n this.exports.machine_save_cpu_state(this.sys, this.cpustateptr);\n var s = this.cpustatearr;\n var pc = s[2] + (s[3]<<8);\n return {\n PC:pc,\n SP:s[9],\n A:s[6],\n X:s[7],\n Y:s[8],\n C:s[10] & 1,\n Z:s[10] & 2,\n I:s[10] & 4,\n D:s[10] & 8,\n V:s[10] & 64,\n N:s[10] & 128,\n o:this.readConst(pc),\n }\n }\n saveState() {\n this.exports.machine_save_state(this.sys, this.stateptr);\n return {\n c:this.getCPUState(),\n state:this.statearr.slice(0),\n ram:this.statearr.slice(18640, 18640+0x200), // ZP and stack (TODO)\n };\n }\n loadState(state) : void {\n this.statearr.set(state.state);\n this.exports.machine_load_state(this.sys, this.stateptr);\n }\n getVideoParams() {\n return {width:232, height:272, overscan:true, videoFrequency:50, aspect:1.5};\n }\n setKeyInput(key: number, code: number, flags: number): void {\n // TODO: handle shifted keys\n if (key == 16 || key == 17 || key == 18 || key == 224) return; // meta keys\n //console.log(key, code, flags);\n //if (flags & KeyFlags.Shift) { key += 64; }\n // convert to vic20\n var mask = 0;\n var mask2 = 0;\n if (key == 37) { key = 0x8; mask = 0x4; } // LEFT\n if (key == 38) { key = 0xb; mask = 0x1; } // UP\n if (key == 39) { key = 0x9; mask = 0x8; } // RIGHT\n if (key == 40) { key = 0xa; mask = 0x2; } // DOWN\n if (key == 32) { mask = 0x10; } // FIRE\n /* player 2 (TODO)\n if (key == 65) { key = 65; mask2 = 0x4; } // LEFT\n if (key == 87) { key = 87; mask2 = 0x1; } // UP\n if (key == 68) { key = 68; mask2 = 0x8; } // RIGHT\n if (key == 83) { key = 83; mask2 = 0x2; } // DOWN\n if (key == 69) { mask2 = 0x10; } // FIRE\n */\n if (key == 113) { key = 0xf1; } // F2\n if (key == 115) { key = 0xf3; } // F4\n if (key == 119) { key = 0xf5; } // F8\n if (key == 121) { key = 0xf7; } // F10\n if (flags & KeyFlags.KeyDown) {\n this.exports.machine_key_down(this.sys, key);\n this.joymask0 |= mask;\n this.joymask1 |= mask2;\n } else if (flags & KeyFlags.KeyUp) {\n this.exports.machine_key_up(this.sys, key);\n this.joymask0 &= ~mask;\n this.joymask1 &= ~mask2;\n }\n this.exports.vic20_joystick(this.sys, this.joymask0, this.joymask1);\n }\n\n}\n\n// pretty much just runs autostart ROM and not much else...\nconst DEFAULT_BIOS = [\n 0xA2, 0x10, 0xA0, 0x91, 0x60, 0x71, 0xFF, 0x71, 0xFF, 0x5C, 0xFF, 0xA2, 0xFF, 0x78, 0x9A, 0xD8, \n 0x6C, 0x00, 0xA0, 0xA2, 0x45, 0xA0, 0xFF, 0x18, 0x78, 0x6C, 0x18, 0x03, 0x48, 0x8A, 0x48, 0x98, \n 0x48, 0xAD, 0x1D, 0x91, 0x10, 0x03, 0x6C, 0x02, 0xA0, 0x4C, 0x6C, 0xFF, 0x68, 0xA8, 0x68, 0xAA, \n 0x68, 0x40, 0x48, 0x8A, 0x48, 0x98, 0x48, 0xBA, 0xBD, 0x04, 0x01, 0x29, 0x10, 0xF0, 0x03, 0x6C, \n 0x16, 0x03, 0x6C, 0x14, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x4C, 0x53, 0xFF, 0x4C, 0x44, 0xFF, \n 0x4C, 0x44, 0xFF, 0x4C, 0x44, 0xFF, 0x4C, 0x44, 0xFF, 0x4C, 0x44, 0xFF, 0x4C, 0x44, 0xFF, 0x4C, \n 0x44, 0xFF, 0x4C, 0x44, 0xFF, 0x4C, 0x44, 0xFF, 0x4C, 0x44, 0xFF, 0x4C, 0x44, 0xFF, 0x4C, 0x44, \n 0xFF, 0x4C, 0x44, 0xFF, 0x4C, 0x44, 0xFF, 0x4C, 0x44, 0xFF, 0x4C, 0x44, 0xFF, 0x4C, 0x44, 0xFF, \n 0x6C, 0x1A, 0x03, 0x6C, 0x1C, 0x03, 0x6C, 0x1E, 0x03, 0x6C, 0x20, 0x03, 0x6C, 0x22, 0x03, 0x6C, \n 0x24, 0x03, 0x6C, 0x26, 0x03, 0x4C, 0x44, 0xFF, 0x4C, 0x44, 0xFF, 0x4C, 0x44, 0xFF, 0x4C, 0x44, \n 0xFF, 0x6C, 0x28, 0x03, 0x6C, 0x2A, 0x03, 0x6C, 0x2C, 0x03, 0x4C, 0x44, 0xFF, 0x4C, 0x44, 0xFF, \n 0x4C, 0x44, 0xFF, 0x4C, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x58, 0xFF, 0x4B, 0xFF, 0x72, 0xFF\n];\n", "\nimport { VIC20_WASMMachine } from \"../machine/vic20\";\nimport { Platform, Base6502MachinePlatform, getToolForFilename_6502, getOpcodeMetadata_6502 } from \"../common/baseplatform\";\nimport { PLATFORMS } from \"../common/emu\";\nimport { BaseMAME6502Platform } from \"../common/mameplatform\";\n\nconst VIC20_PRESETS = [\n// {id:'hello.dasm', name:'Hello World (ASM)'},\n {id:'hellocart.dasm', name:'Hello Cartridge (ASM)'},\n// {id:'siegegame.c', name:'Siege Game (C)'},\n];\n\nconst VIC20_MEMORY_MAP = { main:[\n {name:'RAM', start:0x0000,size:0x0400,type:'ram'},\n {name:'RAM', start:0x1000,size:0x1000,type:'ram'},\n {name:'BLK1 Cart ROM',start:0x2000,size:0x2000,type:'rom'},\n {name:'BLK2 Cart ROM',start:0x4000,size:0x2000,type:'rom'},\n {name:'BLK3 Cart ROM',start:0x6000,size:0x2000,type:'rom'},\n {name:'Character ROM',start:0x8000,size:0x1000,type:'rom'},\n {name:'I/O 1', start:0x9000,size:0x0400,type:'io'},\n {name:'Color RAM', start:0x9400,size:0x0400,type:'io'},\n {name:'I/O 2', start:0x9800,size:0x0400,type:'io'},\n {name:'I/O 3', start:0x9c00,size:0x0400,type:'io'},\n {name:'BLK5 Autostart',start:0xa000,size:0x2000,type:'rom'},\n {name:'BASIC ROM', start:0xc000,size:0x2000,type:'rom'},\n {name:'KERNAL ROM', start:0xe000,size:0x2000,type:'rom'},\n] }\n\n// WASM VIC20 platform\nclass VIC20WASMPlatform extends Base6502MachinePlatform<VIC20_WASMMachine> implements Platform {\n\n newMachine() { return new VIC20_WASMMachine('vic20'); }\n\n getPresets() { return VIC20_PRESETS; }\n getDefaultExtension() { return \".c\"; };\n readAddress(a) { return this.machine.readConst(a); }\n getMemoryMap() { return VIC20_MEMORY_MAP; }\n showHelp() {\n return \"https://8bitworkshop.com/docs/platforms/vic20/\";\n }\n getROMExtension(rom:Uint8Array) { \n /*\n if (rom && rom[0] == 0x00 && rom[1] == 0x80 && rom[2+4] == 0xc3 && rom[2+5] == 0xc2) return \".crt\";\n */\n if (rom && rom[0] == 0x01 && rom[1] == 0x08) return \".prg\";\n else return \".bin\";\n }\n}\n\n// VIC20 MAME platform (TODO)\nabstract class VIC20MAMEPlatform extends BaseMAME6502Platform {\n getPresets() { return VIC20_PRESETS; }\n getToolForFilename = getToolForFilename_6502;\n getOpcodeMetadata = getOpcodeMetadata_6502;\n getDefaultExtension() { return \".c\"; }\n loadROM(title, data) {\n if (!this.started) {\n this.startModule(this.mainElement, {\n jsfile:'mame8bitpc.js',\n biosfile:'vic20.zip',\n cfgfile:'vic20.cfg',\n driver:'vic20',\n width:418,\n height:235,\n romfn:'/emulator/image.crt',\n romdata:new Uint8Array(data),\n romsize:0x10000,\n extraargs: ['-autoboot_delay','5','-autoboot_command','load \"$\",8,1\\n'],\n preInit:function(_self) {\n },\n });\n } else {\n this.loadROMFile(data);\n this.loadRegion(\":quickload\", data);\n var result = this.luacall(`image:load(\"/emulator/image.prg\")`)\n console.log('load rom', result);\n //this.loadRegion(\":exp:standard\", data);\n }\n }\n start() {\n }\n getMemoryMap() { return VIC20_MEMORY_MAP; }\n}\n\n\nPLATFORMS['vic20'] = VIC20WASMPlatform;\nPLATFORMS['vic20.wasm'] = VIC20WASMPlatform;\nPLATFORMS['vic20.mame'] = VIC20MAMEPlatform;\n"],
"mappings": "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",
"names": []
}