8bitworkshop/gen/devel-ZI5EIHUT.js.map

8 lines
9.8 KiB
Plaintext

{
"version": 3,
"sources": ["../src/machine/devel.ts", "../src/platform/devel.ts"],
"sourcesContent": ["\nimport { MOS6502 } from \"../common/cpu/MOS6502\";\nimport { BasicHeadlessMachine, HasSerialIO, SerialIOInterface } from \"../common/devices\";\nimport { padBytes, newAddressDecoder } from \"../common/emu\"; // TODO\n\nconst INPUT_HALTED = 31;\n\nexport class Devel6502 extends BasicHeadlessMachine implements HasSerialIO {\n\n cpuFrequency = 1000000;\n defaultROMSize = 0x8000;\n \n cpu = new MOS6502();\n ram = new Uint8Array(0x4000);\n rom : Uint8Array;\n serial : SerialIOInterface;\n\n constructor() {\n super();\n this.connectCPUMemoryBus(this);\n }\n \n connectSerialIO(serial: SerialIOInterface) {\n this.serial = serial;\n }\n\n read = newAddressDecoder([\n [0x0000, 0x3fff, 0x3fff, (a) => { return this.ram[a]; }],\n [0x4000, 0x4000, 0xffff, (a) => { return this.serial.byteAvailable() ? 0x80 : 0 }],\n [0x4001, 0x4001, 0xffff, (a) => { return this.serial.recvByte() }],\n [0x4002, 0x4002, 0xffff, (a) => { return this.serial.clearToSend() ? 0x80 : 0 }],\n [0x8000, 0xffff, 0x7fff, (a) => { return this.rom && this.rom[a]; }],\n ]);\n \n write = newAddressDecoder([\n [0x0000, 0x3fff, 0x3fff, (a,v) => { this.ram[a] = v; }],\n [0x4003, 0x4003, 0xffff, (a,v) => { return this.serial.sendByte(v) }],\n [0x400f, 0x400f, 0xffff, (a,v) => { this.inputs[INPUT_HALTED] = 1; }],\n ]);\n \n readConst(a:number) : number {\n return this.read(a);\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 advanceCPU() {\n if (this.isHalted()) return 1;\n var n = super.advanceCPU();\n if (this.serial) this.serial.advance(n);\n return n;\n }\n\n reset() {\n this.inputs[INPUT_HALTED] = 0;\n super.reset();\n if (this.serial) this.serial.reset();\n }\n\n isHalted() { return this.inputs[INPUT_HALTED] != 0; }\n}\n\n", "\nimport { Platform } from \"../common/baseplatform\";\nimport { EmuHalt, PLATFORMS } from \"../common/emu\";\nimport { Devel6502 } from \"../machine/devel\";\nimport { Base6502MachinePlatform } from \"../common/baseplatform\";\nimport { SerialIOInterface } from \"../common/devices\";\nimport { byteArrayToString, convertDataToUint8Array } from \"../common/util\";\nimport { TeleType } from \"../common/teletype\";\nimport { haltEmulation } from \"../ide/ui\";\n\nvar DEVEL_6502_PRESETS = [\n {id:'hello.dasm', name:'Hello World (ASM)'},\n];\n\nclass SerialInOutViewer {\n div : HTMLElement;\n tty : TeleType;\n \n constructor(div: HTMLElement) {\n div.style.overflowY = 'auto';\n var gameport = $('<div id=\"gameport\"/>').appendTo(div);\n $('<p class=\"transcript-header\">Serial Output</p>').appendTo(gameport);\n var windowport = $('<div id=\"windowport\" class=\"transcript\"/>').appendTo(gameport);\n this.div = windowport[0];\n }\n start() {\n this.tty = new TeleType(this.div, false);\n //this.tty.ncols = 40;\n }\n reset() {\n this.tty.clear();\n }\n saveState() {\n return this.tty.saveState();\n }\n loadState(state) {\n this.tty.loadState(state);\n }\n}\n\nfunction byteToASCII(b: number) : string {\n if (b == 10) return '';\n if (b < 32)\n return String.fromCharCode(b + 0x2400);\n else\n return String.fromCharCode(b);\n}\n\nexport class SerialTestHarness implements SerialIOInterface {\n\n viewer : SerialInOutViewer;\n bufferedRead : boolean = true;\n cyclesPerByte = 1000000/(57600/8); // 138.88888 cycles\n maxOutputBytes = 4096;\n inputBytes : Uint8Array;\n\n outputBytes : number[];\n inputIndex : number;\n clk : number;\n bufin : string;\n\n clearToSend(): boolean {\n return this.outputBytes.length < this.maxOutputBytes;\n }\n sendByte(b: number) {\n if (this.clearToSend()) {\n this.outputBytes.push(b);\n this.viewer.tty.addtext(byteToASCII(b), 2|32);\n if (b == 10) this.viewer.tty.newline();\n if (!this.clearToSend()) {\n this.viewer.tty.newline();\n this.viewer.tty.addtext(\"\u26A0\uFE0F OUTPUT BUFFER FULL \u26A0\uFE0F\", 4);\n }\n }\n }\n byteAvailable(): boolean {\n return this.readIndex() > this.inputIndex;\n }\n recvByte(): number {\n var index = this.readIndex();\n this.inputIndex = index;\n var b = (this.inputBytes && this.inputBytes[index]) | 0;\n //this.bufin += byteToASCII(b);\n this.viewer.tty.addtext(byteToASCII(b), 2|16);\n if (b == 10) this.viewer.tty.newline();\n return b;\n }\n readIndex(): number {\n return this.bufferedRead ? (this.inputIndex+1) : Math.floor(this.clk / this.cyclesPerByte);\n }\n\n reset() {\n this.inputIndex = -1;\n this.clk = 0;\n this.outputBytes = [];\n this.bufin = '';\n }\n\n advance(clocks: number) {\n this.clk += clocks;\n }\n\n saveState() {\n return {\n clk: this.clk,\n idx: this.inputIndex,\n out: this.outputBytes.slice()\n }\n }\n loadState(state) {\n this.clk = state.clk;\n this.inputIndex = state.idx;\n this.outputBytes = state.out.slice();\n }\n}\n\nclass Devel6502Platform extends Base6502MachinePlatform<Devel6502> implements Platform {\n\n serial : SerialTestHarness;\n serview : SerialInOutViewer;\n\n constructor(mainElement: HTMLElement) {\n super(mainElement);\n this.serview = new SerialInOutViewer(mainElement);\n }\n\n async start() {\n super.start();\n this.serial = new SerialTestHarness();\n this.serial.viewer = this.serview;\n this.serview.start();\n this.machine.connectSerialIO(this.serial);\n }\n\n reset() {\n this.serial.inputBytes = convertDataToUint8Array(this.internalFiles['serialin.dat']);\n super.reset();\n this.serview.reset();\n }\n\n isBlocked() {\n return this.machine.isHalted();\n }\n\n advance(novideo: boolean) {\n if (this.isBlocked()) {\n this.internalFiles['serialout.dat'] = byteArrayToString(this.serial.outputBytes);\n haltEmulation();\n return 0;\n }\n return super.advance(novideo);\n }\n\n saveState() {\n var state : any = super.saveState();\n state.serial = this.serial.saveState();\n state.serview = this.serview.saveState();\n return state;\n }\n\n loadState(state) {\n super.loadState(state);\n this.serial.loadState(state.serial);\n this.serview.loadState(state.serview);\n // TODO: reload tty UI\n }\n\n newMachine() { return new Devel6502(); }\n getPresets() { return DEVEL_6502_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:0x4000,type:'ram'},\n {name:'ROM', start:0x8000,size:0x8000,type:'rom'},\n ] } };\n}\n\n///\n\nPLATFORMS['devel-6502'] = Devel6502Platform;\n"],
"mappings": "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",
"names": []
}