8bitworkshop/gen/kim1-J42RB7PR.js.map

8 lines
11 KiB
Plaintext

{
"version": 3,
"sources": ["../src/machine/kim1.ts", "../src/platform/kim1.ts"],
"sourcesContent": ["\nimport { MOS6502, MOS6502State } from \"../common/cpu/MOS6502\";\nimport { BasicHeadlessMachine } from \"../common/devices\";\nimport { padBytes, Keys, KeyFlags, newAddressDecoder } from \"../common/emu\"; // TODO\nimport { hex, stringToByteArray, lzgmini } from \"../common/util\";\n\nconst KIM1_KEYMATRIX_NOSHIFT = [\n Keys.VK_DELETE, Keys.VK_ENTER, Keys.VK_RIGHT, Keys.VK_F7,\tKeys.VK_F1, Keys.VK_F3, Keys.VK_F5, Keys.VK_DOWN,\n Keys.VK_3, Keys.VK_W, Keys.VK_A, Keys.VK_4,\t\t\tKeys.VK_Z, Keys.VK_S, Keys.VK_E, Keys.VK_SHIFT,\n Keys.VK_5, Keys.VK_R, Keys.VK_D, Keys.VK_6,\t\t\tKeys.VK_C, Keys.VK_F, Keys.VK_T, Keys.VK_X,\n Keys.VK_7, Keys.VK_Y, Keys.VK_G, Keys.VK_8,\t\t\tKeys.VK_B, Keys.VK_H, Keys.VK_U, Keys.VK_V,\n Keys.VK_9, Keys.VK_I, Keys.VK_J, Keys.VK_0,\t\t\tKeys.VK_M, Keys.VK_K, Keys.VK_O, Keys.VK_N,\n null/*Keys.VK_PLUS*/, Keys.VK_P, Keys.VK_L, Keys.VK_MINUS,\tKeys.VK_PERIOD, null/*Keys.VK_COLON*/, null/*Keys.VK_AT*/, Keys.VK_COMMA,\n null/*Keys.VK_POUND*/, null/*TIMES*/, Keys.VK_SEMICOLON, Keys.VK_HOME, Keys.VK_SHIFT/*right*/, Keys.VK_EQUALS, Keys.VK_TILDE, Keys.VK_SLASH,\n Keys.VK_1, Keys.VK_LEFT, Keys.VK_CONTROL, Keys.VK_2,\t\tKeys.VK_SPACE, Keys.VK_ALT, Keys.VK_Q, null/*STOP*/,\n];\n\nconst KEYBOARD_ROW_0 = 0;\n\nclass RRIOT_6530 {\n\n regs = new Uint8Array(16);\n ina : number = 0;\n inb : number = 0;\n\n read(a:number) : number {\n //console.log('read', hex(a), hex(this.regs[a]));\n return this.regs[a];\n }\n\n write(a:number,v:number) {\n this.regs[a] = v;\n //console.log('write', hex(a), hex(v));\n }\n \n input_a() { return this.ina & ~this.regs[1]; }\n input_b() { return this.inb & ~this.regs[1]; }\n output_a() { return (this.regs[0] ^ 0xff) | this.regs[1]; }\n output_b() { return (this.regs[2] ^ 0xff) | this.regs[3]; }\n}\n\nexport class KIM1 extends BasicHeadlessMachine {\n cpuFrequency = 1000000;\n defaultROMSize = 0x1000;\n \n cpu = new MOS6502();\n ram = new Uint8Array(0x1800);\n bios : Uint8Array;\n\n rriot1 : RRIOT_6530 = new RRIOT_6530();\n rriot2 : RRIOT_6530 = new RRIOT_6530();\n digits = [];\n\n constructor() {\n super();\n this.bios = new lzgmini().decode(stringToByteArray(atob(KIM1_BIOS_LZG)));\n this.connectCPUMemoryBus(this);\n }\n\n read = newAddressDecoder([\n [0x1700, 0x173f, 0x000f, (a) => { return this.readIO_1(a); }],\n [0x1740, 0x177f, 0x000f, (a) => { return this.readIO_2(a); }],\n [0x0000, 0x17ff, 0x1fff, (a) => { return this.ram[a]; }],\n [0x1800, 0x1fff, 0x07ff, (a) => { return this.bios[a]; }],\n ], {gmask:0x1fff});\n \n write = newAddressDecoder([\n [0x1700, 0x173f, 0x000f, (a,v) => { return this.writeIO_1(a,v); }],\n [0x1740, 0x177f, 0x000f, (a,v) => { return this.writeIO_2(a,v); }],\n [0x0000, 0x17ff, 0x1fff, (a,v) => { this.ram[a] = v; }],\n ], {gmask:0x1fff});\n \n readConst(a:number) : number {\n return this.read(a);\n }\n\n readIO_1(a:number) : number {\n return this.rriot1.read(a);\n }\n \n writeIO_1(a:number, v:number) {\n this.rriot1.write(a,v);\n }\n \n readIO_2(a:number) : number {\n switch (a & 0xf) {\n case 0x0:\n let cols = 0;\n for (let i=0; i<8; i++)\n if ((this.rriot2.regs[0] & (1<<i)) == 0)\n cols |= this.inputs[KEYBOARD_ROW_0 + i];\n //if (cols) console.log(this.rriot1.regs[0], cols);\n this.rriot2.ina = cols ^ 0xff;\n }\n return this.rriot2.read(a);\n }\n \n writeIO_2(a:number, v:number) {\n this.rriot2.write(a,v);\n // update LED\n let digit = this.rriot2.output_a();\n let segments = this.rriot2.output_b();\n console.log(digit, segments);\n }\n \n loadROM(data) {\n super.loadROM(data);\n this.ram.set(this.rom, 0x400);\n this.reset();\n }\n\n loadBIOS(data) {\n this.bios = padBytes(data, 0x800);\n this.reset();\n }\n\n setKeyInput(key:number, code:number, flags:number) : void {\n //console.log(key,code,flags);\n var keymap = KIM1_KEYMATRIX_NOSHIFT;\n for (var i=0; i<keymap.length; i++) {\n if (keymap[i] && keymap[i].c == key) {\n let row = i >> 3;\n let col = i & 7;\n // is column selected?\n if (flags & KeyFlags.KeyDown) {\n this.inputs[KEYBOARD_ROW_0 + row] |= (1<<col);\n } else if (flags & KeyFlags.KeyUp) {\n this.inputs[KEYBOARD_ROW_0 + row] &= ~(1<<col);\n }\n console.log(key, row, col, hex(this.inputs[KEYBOARD_ROW_0 + row]));\n break;\n }\n }\n }\n \n advanceFrame(trap) : number {\n var clock = 0;\n while (clock < this.cpuFrequency/60) {\n if (trap && trap()) break;\n clock += this.advanceCPU();\n }\n return clock;\n }\n}\n\n// https://github.com/jefftranter/6502/blob/master/asm/KIM-1/ROMs/kim.s\nconst KIM1_BIOS_LZG = `TFpHAAAIAAAABY3ivWkoAQsOJSiprY3sFyAyGaknjUIXqb+NQxeiZKkWIHoZytD4qSoo4a35FyBhGa31FyBeGa32KKPtF833F63uF+34F5AkqS8lXeclnegooqICqQQOBTgAhfqF+0xPHCDsJXAg6hlMMxgPGamNDgVrTI3vF61xGI3wF61yGI3xF6kHDgJ8/43pFyBBGk7pFw3pFyUErekXyRbQ7aIKICQaJQHfytD2JUIq8AYlBtHw8yDzGc35F/ANrfkXyQAlDf/wF9CcJQ0gTBmN7RcOBQHuF0z4GCXEKKSiAiV9L/AUIAAa0CPK0PElDEzsFw4CnCWhzecX0Awo4ugX0ASpAPACqf8OBcWt9ReN7Ret9heN7hepYI3vF6kAjecXjegXYKgYbSUB5xet6BdpACUJmGAgTBmoSigBIG8ZmChiYCkPyQoYMAJpB2kwjukXjOoXoAggnhlKsAYooUyRGSDEKEKI0Ouu6Res6hdgoglILEcXEPupfo1EF6mnjUIXDgkHDiKqytDfaGCiBg4FHsMODB4lhw4HHu7tF9AD7u4XYCAkGiAAGiikYMkwMB7JRxAayUAwAxhpCSooAaQEKi7pF4jQ+a3pF6AAYMhgjusXoggOIovqFw3qF43qF8rQ8a3qFypKrusXYCxCFxD7rUYXoP+MKIEUiND9JQow+zjtDgYLByULSf8pgGAOSFsOBJeaDgymJYclW0x1Gv8oHygfKB4oGWsaKCKF82iF8WiF74X6aIXwhfuE9Ib1uobyIIgeTE8cbPoXbP4Xov+aJYmp/43zF6kBLEAX0Bkw+an8GGkBkAPu8xesQBcQ843yDkIbah4gjB4l2x4gLx6iCiAxHkyvHakAhfiF+SBaHskB8AYgrB9M2x0gGR/Q0yWi8MwlBPD0KILvIGofyRUQu8kU8ETJEPAsyREoYRLwL8kT8DEKKAGF/KIEpP/QCrH6BvwqkfpMwxwKJvom+8rQ6vAIqQHQAqkAhf8OgmZjHyihTMgdpe+F+qXwDoR6Wh7JO9D5JRr3hfYgnR+qIJEfKMGF+yjl+ijhivAPJQORJUMlO8rQ8uglB8X20BcowvfQE4rQuaIMDkOaDgLPTxwlD6IR0O4OBNYoofaF9yAvHqk7IKAepfrN9xel+w6iGRipACA7HiDMHyAeHqX2JQOl9yiBTGQcqRiqJVGRJVGgALH6DgUFDgJy8A4IIeb40ALm+UxIHSV6Lx4lJCCeDgcnng4CQCUqTKwdpvKapftIpfpIpfFIpvWk9KXzQMkg8MrJf/AbyQ3w28kK8BzJLvAmyUfw1clR8ArJTPAJTGocDiIgQh1M5xw4pfrpAYX6sALG+0ysHaAApfiR+kzCHaX7DgSOpQ4FlmCiB73VHyCgHsoQ92CF/A6D00wepfwogw6K1UygHob9oggORAQiMPkg1B4g6x6tQBcpgEb+Bf6F/iUJytDvJQym/aX+KkpgogGG/6IAjkEXoj+OQxeiB45CF9h4YKkghf6G/SUkrUIXKf4OInLUHqIIJYVG/mkAJcnK0O4lCgkBJcam/WCt8xeN9Bet8hc46QGwA870F6z0FxDzDggPSk70F5DjCYCw4KADogGp/45CF+joLUAXiND1oAeMQhcJgEn/YA4iXIX5qX+NQReiCaADufgADgPmSB8lAikPKOGI0OslMakAJRlM/h6E/Ki55x+gAIxAFyUOjUAXoH+I0P3o6KT8YOb60ALm+2CiIaABIAIf0AfgJ9D1qRVgoP8KsAPIEPqKKQ9KqpgQAxhpB8rQ+mAYZfeF96X2aQCF9mAgWh4grB8opKX4DqKkG8lHEBcOqaSgBCom+Cb5iA7iZWCl+IX6pfmF+2AAKAMKDU1JSyATUlJFIBO/htvP5u39h//v9/y53vnx////HBwiHB8c`;\n\n", "\nimport { Platform, getOpcodeMetadata_6502, getToolForFilename_6502 } from \"../common/baseplatform\";\nimport { PLATFORMS } from \"../common/emu\";\nimport { KIM1 } from \"../machine/kim1\";\nimport { Base6502MachinePlatform } from \"../common/baseplatform\";\n\nvar KIM1_PRESETS = [\n {id:'hello.dasm', name:'Hello World (ASM)'},\n];\n\nclass KIM1Platform extends Base6502MachinePlatform<KIM1> implements Platform {\n\n newMachine() { return new KIM1(); }\n getPresets() { return KIM1_PRESETS; }\n getDefaultExtension() { return \".dasm\"; };\n readAddress(a) { return this.machine.readConst(a); }\n\n getMemoryMap = function() { return { main:[\n {name:'RAM', start:0x0000,size:0x1400,type:'ram'},\n {name:'6530', start:0x1700,size:0x0040,type:'io'},\n {name:'6530', start:0x1740,size:0x0040,type:'io'},\n {name:'RAM', start:0x1780,size:0x0080,type:'ram'},\n {name:'BIOS', start:0x1800,size:0x0800,type:'rom'},\n ] } };\n}\n\n///\n\nPLATFORMS['kim1'] = KIM1Platform;\n"],
"mappings": "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",
"names": []
}