8bitworkshop/gen/c64-4PGUJH5R.js.map

8 lines
24 KiB
Plaintext

{
"version": 3,
"sources": ["../src/machine/c64.ts", "../src/platform/c64.ts"],
"sourcesContent": ["\nimport { AcceptsPaddleInput, Probeable } from \"../common/devices\";\nimport { dumpRAM, KeyFlags } from \"../common/emu\";\nimport { clamp, hex, lpad } from \"../common/util\";\n\n// https://www.c64-wiki.com/wiki/C64\n// http://www.zimmers.net/cbmpics/cbm/c64/vic-ii.txt\n// http://www.zimmers.net/cbmpics/cbm/c64/c64prg.txt\n// http://sta.c64.org/cbm64mem.html\n// http://hitmen.c02.at/temp/palstuff/\n\n//// WASM Machine\n\nimport { Machine } from \"../common/baseplatform\";\nimport { TrapCondition } from \"../common/devices\";\nimport { BaseWASMMachine } from \"../common/wasmplatform\";\n\nexport class C64_WASMMachine extends BaseWASMMachine \n implements Machine, Probeable, AcceptsPaddleInput {\n\n numTotalScanlines = 312;\n cpuCyclesPerLine = 63;\n\n prgstart : number;\n joymask0 = 0;\n joymask1 = 0;\n lightpen_x = 0;\n lightpen_y = 0;\n\n loadBIOS(srcArray: Uint8Array) {\n var patch1ofs = 0xea24 - 0xe000 + 0x3000;\n if (srcArray[patch1ofs] == 0xc4) srcArray[patch1ofs] = 0x60; // cursor move, KIL -> RTS\n super.loadBIOS(srcArray);\n }\n reset() {\n super.reset();\n // clear keyboard\n for (var ch=0; ch<128; ch++) {\n this.exports.machine_key_up(this.sys, ch);\n }\n // load rom\n if (this.romptr && this.romlen) {\n this.exports.machine_load_rom(this.sys, this.romptr, this.romlen);\n this.prgstart = this.romarr[0] + (this.romarr[1]<<8); // get load address\n // look for BASIC program start\n if (this.prgstart == 0x801) {\n // decode SYS address from decimal?\n if (this.romarr[6] == 0x9e) {\n var addr = 0;\n for (var i=0; i<5; i++) {\n var ch = this.romarr[7+i];\n if (ch == 0x9b || ch == 0) break;\n addr = addr * 10 + (ch & 0xf);\n }\n this.prgstart = addr;\n console.log(\"SYS\", addr, hex(addr));\n } else {\n this.prgstart = this.romarr[2] + (this.romarr[3]<<8) + 2; // point to after BASIC program\n console.log(\"RUN\", this.prgstart, hex(this.prgstart));\n }\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, 250000);\n // type in command (SYS 2061)\n var cmd = \"\\rSYS \"+this.prgstart;\n for (var i=0; i<cmd.length; i++) {\n var key = cmd.charCodeAt(i);\n this.exports.machine_exec(this.sys, 30000);\n this.exports.machine_key_down(this.sys, key);\n this.exports.machine_exec(this.sys, 30000);\n this.exports.machine_key_up(this.sys, key);\n this.exports.machine_exec(this.sys, 1); // chips/kbd.c has a \"sticky counter\"\n }\n // advance clock until program starts\n this.exports.machine_key_down(this.sys, 13);\n this.exports.machine_exec(this.sys, 1); // chips/kbd.c has a \"sticky counter\"\n for (var i=0; i<100000 && this.getPC() != this.prgstart; i++) {\n this.exports.machine_tick(this.sys);\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[0x4] + this.romarr[0x5]*256;\n for (var i=0; i<150000 && this.getPC() != warmstart; i++) {\n this.exports.machine_tick(this.sys);\n }\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 // TODO: ticks, not msec (machine_tick() has different rate then machine_exec())\n var scanline = this.getRasterY();\n var clocks = Math.floor((this.numTotalScanlines - scanline) * 19656 / 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 //console.log(clocks, this.getRasterY());\n return clocks;\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 R:s[19] != 0x37, // bit 28 of PINS\n }\n }\n saveState() {\n this.exports.machine_save_state(this.sys, this.stateptr);\n let cia1 = this.getDebugStateOffset(1);\n let cia2 = this.getDebugStateOffset(2);\n let vic = this.getDebugStateOffset(3);\n let sid = this.getDebugStateOffset(4);\n let ramofs = this.getDebugStateOffset(5);\n let pla = this.getDebugStateOffset(9);\n return {\n c:this.getCPUState(),\n state:this.statearr.slice(0),\n ram:this.statearr.slice(ramofs, ramofs+0x10000),\n cia1:this.statearr.slice(cia1, cia1+64),\n cia2:this.statearr.slice(cia2, cia2+64),\n vic:this.statearr.slice(vic+1, vic+1+64),\n sid:this.statearr.slice(sid, sid+32),\n pla:this.statearr.slice(pla, pla+16)\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:392, height:272, overscan:true, videoFrequency:50, aspect:392/272*0.9365};\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 c64\n var mask = 0;\n var mask2 = 0;\n switch (key) {\n case 32: mask = 0x10; break;\n case 37: key = 0x8; mask = 0x4; break; // LEFT\n case 38: key = 0xb; mask = 0x1; break; // UP\n case 39: key = 0x9; mask = 0x8; break; // RIGHT\n case 40: key = 0xa; mask = 0x2; break; // DOWN\n case 113: key = 0xf1; break; // F2\n case 115: key = 0xf3; break; // F4\n case 119: key = 0xf5; break; // F8\n case 121: key = 0xf7; break; // F10\n case 188: key = flags & KeyFlags.Shift ? 0x3c : 0x2e; break; // < .\n case 190: key = flags & KeyFlags.Shift ? 0x3e : 0x2c; break; // > ,\n case 191: key = flags & KeyFlags.Shift ? 0x3f : 0x2f; break; // ? /\n case 222: key = flags & KeyFlags.Shift ? 0x22 : 0x27; break; // \" '\n case 219: key = flags & KeyFlags.Shift ? 0x7b : 0x5b; break; // [\n case 221: key = flags & KeyFlags.Shift ? 0x7d : 0x5d; break; // ]\n case 48: if (flags & KeyFlags.Shift) key = 0x29; break; // )\n case 49: if (flags & KeyFlags.Shift) key = 0x21; break; // !\n case 50: if (flags & KeyFlags.Shift) key = 0x40; break; // @\n case 51: if (flags & KeyFlags.Shift) key = 0x23; break; // #\n case 52: if (flags & KeyFlags.Shift) key = 0x24; break; // $\n case 53: if (flags & KeyFlags.Shift) key = 0x25; break; // %\n case 54: if (flags & KeyFlags.Shift) key = 0x5e; break; // ^\n case 55: if (flags & KeyFlags.Shift) key = 0x26; break; // &\n case 56: if (flags & KeyFlags.Shift) key = 0x2a; break; // *\n case 57: if (flags & KeyFlags.Shift) key = 0x28; break; // (\n case 59: if (flags & KeyFlags.Shift) key = 0x3a; break; // ;\n case 61: if (flags & KeyFlags.Shift) key = 0x2b; break; // +\n case 173: key = flags & KeyFlags.Shift ? 0x5f : 0x2d; break; // _ -\n }\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.c64_joystick(this.sys, this.joymask0, this.joymask1);\n }\n getRasterX() {\n return this.statearr[0xf4];\n }\n getRasterY() {\n return this.exports.machine_get_raster_line(this.sys);\n }\n getRasterCanvasPosition() {\n return {\n x: this.getRasterX() * 392/63,\n y: this.getRasterY() - 14,\n }\n }\n getDebugStateOffset(index: number) {\n var p = this.exports.machine_get_debug_pointer(this.sys, index);\n return p - this.sys;\n }\n getDebugCategories() {\n return ['CPU','ZPRAM','Stack','PLA','CIA','VIC','SID'];\n }\n getDebugInfo(category:string, state:any) {\n switch (category) {\n case 'PLA': {\n let s = \"\";\n let iomapped = state.pla[0];\n let port = state.pla[3];\n s += `$0000 - $9FFF RAM\\n`;\n s += `$A000 - $BFFF ${(port&3)==3 ? 'BASIC ROM' : 'RAM'}\\n`;\n s += `$C000 - $CFFF RAM\\n`;\n s += `$D000 - $DFFF ${iomapped ? 'I/O' : (port&3)!=0 ? 'CHAR ROM' : 'RAM'}\\n`;\n s += `$E000 - $FFFF ${(port&2)==2 ? 'KERNAL ROM' : 'RAM'}\\n`;\n return s;\n }\n case 'CIA': {\n let s = \"\";\n for (let i=0; i<2; i++) {\n let m = i ? state.cia2 : state.cia1;\n s += `CIA ${i+1}\\n`;\n s += ` A: Data ${hex(m[0])} DDR ${hex(m[1])} Input ${hex(m[2])}`;\n s += ` Timer ${hex(m[10]+m[11]*256, 4)}\\n`;\n s += ` B: Data ${hex(m[4])} DDR ${hex(m[5])} Input ${hex(m[6])}`;\n s += ` Timer ${hex(m[10+10]+m[11+10]*256, 4)}\\n`;\n //s += ` IMR ${hex(m[48])} ICR ${hex(m[50])}\\n`\n }\n return s;\n }\n case 'VIC': {\n let m = state.vic;\n let s = '';\n let vicbank = ((state.cia2[0] & 3) ^ 3) * 0x4000;\n let charmem = vicbank + (state.vic[0x18] & 14) * 0x400;\n let screen = vicbank + (state.vic[0x18] >> 4) * 0x400;\n let isbitmap = state.vic[0x11] & 0x20;\n let ischar = (state.cia2[0]&1)==1 && (state.vic[0x18]&12)==4;\n let rasterX = state.state[0xf4];\n let rasterY = this.getRasterY();\n s += 'Mode:';\n if (state.vic[0x11] & 0x20) s += ' BITMAP'; else s += ' CHAR';\n if (state.vic[0x16] & 0x10) s += ' MULTICOLOR';\n if (state.vic[0x11] & 0x40) s += ' EXTENDED';\n s += \"\\n\";\n s += `Raster: (${lpad(rasterX,3)}, ${lpad(rasterY,3)}) `;\n s += `Scroll: (${state.vic[0x16] & 7}, ${state.vic[0x11] & 7})`;\n s += \"\\n\";\n s += `VIC Bank: $${hex(vicbank,4)} Scrn: $${hex(screen,4)} `;\n if (isbitmap) s += `Bitmap: $${hex(charmem&0xe000,4)}`\n else if (ischar) s += `Char: ROM $${hex(charmem,4)}`;\n else s += `Char: $${hex(charmem,4)}`;\n s += \"\\n\";\n s += dumpRAM(m, 0xd000, 64);\n return s;\n }\n case 'SID': {\n let m = state.sid;\n let s = ''\n s += dumpRAM(m, 0xd400, 32);\n return s;\n }\n }\n }\n\n setPaddleInput(controller: number, value: number): void {\n if (controller == 0) this.lightpen_x = value;\n if (controller == 1) this.lightpen_y = value;\n const x1 = 22;\n const y1 = 36;\n const x2 = 228;\n const y2 = 220;\n let x = clamp(0, 255, (this.lightpen_x - x1) / (x2 - x1) * 160 + 24);\n let y = clamp(0, 255, (this.lightpen_y - y1) / (y2 - y1) * 200 + 50);\n this.exports.machine_set_mouse(this.sys, x, y);\n }\n\n}\n", "\nimport { C64_WASMMachine } from \"../machine/c64\";\nimport { Platform, Base6502MachinePlatform, getToolForFilename_6502, getOpcodeMetadata_6502, Preset } from \"../common/baseplatform\";\nimport { PLATFORMS } from \"../common/emu\";\nimport { BaseMAME6502Platform } from \"../common/mameplatform\";\n\nconst C64_PRESETS : Preset[] = [\n {id:'helloc.c', name:'Hello World', category:'C'},\n {id:'screen_ram.c', name:'Screen RAM'},\n {id:'joymove.c', name:'Sprite Movement'},\n {id:'sprite_collision.c', name:'Sprite Collision'},\n {id:'scroll1.c', name:'Scrolling (Single Buffer)'},\n {id:'test_setirq.c', name:'Raster Interrupts'},\n {id:'test_display_list.c', name:'Raster IRQ Library'},\n {id:'scrolling_text.c', name:'Big Scrolling Text'},\n {id:'side_scroller.c', name:'Side-Scrolling Game'},\n {id:'scroll2.c', name:'Scrolling (Double Buffer)'},\n {id:'scroll3.c', name:'Scrolling (Multidirectional)'},\n {id:'scroll4.c', name:'Scrolling (Color RAM Buffering)'},\n {id:'scroll5.c', name:'Scrolling (Camera Following)'},\n {id:'scrollingmap1.c', name:'Scrolling Tile Map'},\n {id:'fullscrollgame.c', name:'Full-Scrolling Game'},\n {id:'test_multiplex.c', name:'Sprite Retriggering'},\n {id:'test_multispritelib.c', name:'Sprite Multiplexing Library'},\n {id:'mcbitmap.c', name:'Multicolor Bitmap Mode'},\n {id:'testlz4.c', name:'LZ4 Bitmap Compression'},\n //{id:'mandel.c', name:'Mandelbrot Fractal'},\n {id:'musicplayer.c', name:'Music Player'},\n //{id:'sidtune.dasm', name:'Tiny SID Tune (ASM)'},\n {id:'siddemo.c', name:'SID Player Demo'},\n {id:'climber.c', name:'Climber Game'},\n {id:'test_border_sprites.c', name:'Sprites in the Borders'},\n {id:'sprite_stretch.c', name:'Sprite Stretching'},\n {id:'plasma.c', name:'Plasma Demo'},\n {id:'siegegame.c', name:'Siege Game'},\n {id:'23matches.c', name:'23 Matches'},\n {id:'tgidemo.c', name:'TGI Graphics Demo'},\n {id:'upandaway.c', name:'Up, Up and Away'},\n {id:'hello.dasm', name:'Hello World (DASM)', category:'Assembly Language'},\n {id:'hello.dasm', name:'Hello World (ACME)'},\n {id:'hello.wiz', name:'Hello Wiz (Wiz)'},\n];\n\nconst C64_MEMORY_MAP = { main:[\n {name:'6510 Registers',start:0x0, size:0x2,type:'io'},\n {name:'BIOS Reserved', start:0x200, size:0xa7},\n {name:'Default Screen RAM', start:0x400, size:1024,type:'ram'},\n //{name:'RAM', start:0x2, size:0x7ffe,type:'ram'},\n {name:'Cartridge ROM',start:0x8000,size:0x2000,type:'rom'},\n {name:'BASIC ROM', start:0xa000,size:0x2000,type:'rom'},\n {name:'Upper RAM', start:0xc000,size:0x1000,type:'ram'},\n {name:'Character ROM',start:0xd000,size:0x1000,type:'rom'},\n {name:'VIC-II I/O', start:0xd000,size:0x0400,type:'io'},\n {name:'SID', start:0xd400,size:0x0400,type:'io'},\n {name:'Color RAM', start:0xd800,size:0x0400,type:'io'},\n {name:'CIA 1', start:0xdc00,size:0x0100,type:'io'},\n {name:'CIA 2', start:0xdd00,size:0x0100,type:'io'},\n {name:'I/O 1', start:0xde00,size:0x0100,type:'io'},\n {name:'I/O 2', start:0xdf00,size:0x0100,type:'io'},\n {name:'KERNAL ROM', start:0xe000,size:0x2000,type:'rom'},\n] }\n\n// WASM C64 platform\nclass C64WASMPlatform extends Base6502MachinePlatform<C64_WASMMachine> implements Platform {\n\n newMachine() { return new C64_WASMMachine('c64'); }\n\n getPresets() { return C64_PRESETS; }\n getDefaultExtension() { return \".c\"; };\n readAddress(a) { return this.machine.readConst(a); }\n getMemoryMap() { return C64_MEMORY_MAP; }\n showHelp() { return \"https://8bitworkshop.com/docs/platforms/c64/\" }\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// C64 MAME platform\nabstract class C64MAMEPlatform extends BaseMAME6502Platform {\n getPresets() { return C64_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:'c64.zip',\n cfgfile:'c64.cfg',\n driver:'c64',\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 C64_MEMORY_MAP; }\n}\n\n\nPLATFORMS['c64'] = C64WASMPlatform;\nPLATFORMS['c64.wasm'] = C64WASMPlatform;\nPLATFORMS['c64.mame'] = C64MAMEPlatform;\n"],
"mappings": "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",
"names": []
}