mirror of
https://github.com/sehugg/8bitworkshop.git
synced 2024-06-07 17:29:31 +00:00
loadBIOS() now on Machine interface, updated c64 BIOS, emulator types SYS command
This commit is contained in:
parent
aba1072abd
commit
08af6ae3a5
|
@ -178,7 +178,8 @@ TODO:
|
||||||
- C64
|
- C64
|
||||||
- disk image support
|
- disk image support
|
||||||
- https://github.com/cc65/cc65/issues/946
|
- https://github.com/cc65/cc65/issues/946
|
||||||
- need to sync advanceFrame() w/ vsync
|
- player 2 joystick and keyboard conflict
|
||||||
|
- problems with cgetc()
|
||||||
|
|
||||||
- upgrade to ES2020?
|
- upgrade to ES2020?
|
||||||
- https://github.com/microsoft/TypeScript/issues/16577
|
- https://github.com/microsoft/TypeScript/issues/16577
|
||||||
|
@ -386,6 +387,7 @@ Emulator Lib
|
||||||
- MAME
|
- MAME
|
||||||
- debugging?
|
- debugging?
|
||||||
- kbd instructions don't work
|
- kbd instructions don't work
|
||||||
|
|
||||||
|
|
||||||
Markdown (showdown) interface
|
Markdown (showdown) interface
|
||||||
- add code patches to files
|
- add code patches to files
|
||||||
|
|
15
package-lock.json
generated
15
package-lock.json
generated
|
@ -32,9 +32,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"@types/node": {
|
"@types/node": {
|
||||||
"version": "14.0.22",
|
"version": "14.0.23",
|
||||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-14.0.22.tgz",
|
"resolved": "https://registry.npmjs.org/@types/node/-/node-14.0.23.tgz",
|
||||||
"integrity": "sha512-emeGcJvdiZ4Z3ohbmw93E/64jRzUHAItSHt8nF7M4TGgQTiWqFVGB8KNpLGFmUHmHLvjvBgFwVlqNcq+VuGv9g==",
|
"integrity": "sha512-Z4U8yDAl5TFkmYsZdFPdjeMa57NOvnaf1tljHzhouaPEp7LCj2JKkejpI1ODviIAQuW4CcQmxkQ77rnLsOOoKw==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"@types/sizzle": {
|
"@types/sizzle": {
|
||||||
|
@ -1067,7 +1067,8 @@
|
||||||
"lodash": {
|
"lodash": {
|
||||||
"version": "4.17.19",
|
"version": "4.17.19",
|
||||||
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz",
|
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz",
|
||||||
"integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ=="
|
"integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==",
|
||||||
|
"dev": true
|
||||||
},
|
},
|
||||||
"lodash.sortby": {
|
"lodash.sortby": {
|
||||||
"version": "4.7.0",
|
"version": "4.7.0",
|
||||||
|
@ -1766,9 +1767,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"typescript": {
|
"typescript": {
|
||||||
"version": "3.9.6",
|
"version": "3.9.7",
|
||||||
"resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.6.tgz",
|
"resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.7.tgz",
|
||||||
"integrity": "sha512-Pspx3oKAPJtjNwE92YS05HQoY7z2SFyOpHo9MqJor3BXAGNaPUs83CuVp9VISFkSjyRfiTpmKuAYGJB7S7hOxw==",
|
"integrity": "sha512-BLbiRkiBzAwsjut4x/dsibSTB6yWpwT5qWmC2OfuCg3GgVQCSgMs4vEctYPhsaGtd0AeuuHMkjZ2h2WG8MSzRw==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"typescript-formatter": {
|
"typescript-formatter": {
|
||||||
|
|
|
@ -18,7 +18,7 @@
|
||||||
"@types/bootbox": "^4.4.36",
|
"@types/bootbox": "^4.4.36",
|
||||||
"@types/bootstrap": "^3.4.0",
|
"@types/bootstrap": "^3.4.0",
|
||||||
"@types/jquery": "^3.5.0",
|
"@types/jquery": "^3.5.0",
|
||||||
"@types/node": "^14.0.22",
|
"@types/node": "^14.0.23",
|
||||||
"atob": "^2.1.x",
|
"atob": "^2.1.x",
|
||||||
"btoa": "^1.2.x",
|
"btoa": "^1.2.x",
|
||||||
"clipboard": "^2.0.6",
|
"clipboard": "^2.0.6",
|
||||||
|
@ -28,7 +28,7 @@
|
||||||
"octokat": "^0.10.0",
|
"octokat": "^0.10.0",
|
||||||
"pngjs": "^3.4.0",
|
"pngjs": "^3.4.0",
|
||||||
"rgbquant": "^1.1.2",
|
"rgbquant": "^1.1.2",
|
||||||
"typescript": "^3.9.6",
|
"typescript": "^3.9.7",
|
||||||
"typescript-formatter": "^7.2.2",
|
"typescript-formatter": "^7.2.2",
|
||||||
"vgm-parser": "^0.6.3"
|
"vgm-parser": "^0.6.3"
|
||||||
},
|
},
|
||||||
|
|
|
@ -262,7 +262,7 @@ void readline(char *instr) {
|
||||||
printf("Exceeded Max Line Length\n");
|
printf("Exceeded Max Line Length\n");
|
||||||
}
|
}
|
||||||
c=getchar();
|
c=getchar();
|
||||||
}
|
}
|
||||||
instr[slen]='\0';
|
instr[slen]='\0';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -278,7 +278,7 @@ void main()
|
||||||
char inputstr[MAXLINELEN];
|
char inputstr[MAXLINELEN];
|
||||||
int x,s;
|
int x,s;
|
||||||
char *location;
|
char *location;
|
||||||
|
|
||||||
// use the first reply for each keyword match the first time you see that keyword
|
// use the first reply for each keyword match the first time you see that keyword
|
||||||
for (x=0;x<NUMKEYWORDS; x++) {
|
for (x=0;x<NUMKEYWORDS; x++) {
|
||||||
whichReply[x] = 0;
|
whichReply[x] = 0;
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
;Character cell data for default font
|
;Character cell data for default font
|
||||||
;(built into BIOS on ColecoVision)
|
;(built into BIOS on ColecoVision)
|
||||||
|
|
||||||
;;{w:8,h:8,brev:1,count:224};;
|
;;{w:8,h:8,brev:1,count:96};;
|
||||||
Font_Space:
|
Font_Space:
|
||||||
.DB 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ;32
|
.DB 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ;32
|
||||||
.DB 0x10,0x38,0x38,0x10,0x10,0x00,0x10,0x00 ;33
|
.DB 0x10,0x38,0x38,0x10,0x10,0x00,0x10,0x00 ;33
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
.globl _font_bitmap_0
|
.globl _font_bitmap_0
|
||||||
|
|
||||||
;Character cell data for default font
|
;Character cell data for default font
|
||||||
;;{w:8,h:8,brev:1,count:224};;
|
;;{w:8,h:8,brev:1,count:96};;
|
||||||
Font_Space:
|
Font_Space:
|
||||||
.DB 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ;32
|
.DB 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ;32
|
||||||
.DB 0x10,0x38,0x38,0x10,0x10,0x00,0x10,0x00 ;33
|
.DB 0x10,0x38,0x38,0x10,0x10,0x00,0x10,0x00 ;33
|
||||||
|
|
BIN
res/c64.bios
BIN
res/c64.bios
Binary file not shown.
|
@ -970,7 +970,7 @@ export function lookupSymbol(platform:Platform, addr:number, extra:boolean) {
|
||||||
|
|
||||||
/// new Machine platform adapters
|
/// new Machine platform adapters
|
||||||
|
|
||||||
import { Bus, Resettable, FrameBased, VideoSource, SampledAudioSource, AcceptsROM, AcceptsKeyInput, SavesState, SavesInputState, HasCPU, TrapCondition, CPU } from "./devices";
|
import { Bus, Resettable, FrameBased, VideoSource, SampledAudioSource, AcceptsROM, AcceptsBIOS, AcceptsKeyInput, SavesState, SavesInputState, HasCPU, TrapCondition, CPU } from "./devices";
|
||||||
import { Probeable, RasterFrameBased, AcceptsPaddleInput, SampledAudioSink, ProbeAll, NullProbe } from "./devices";
|
import { Probeable, RasterFrameBased, AcceptsPaddleInput, SampledAudioSink, ProbeAll, NullProbe } from "./devices";
|
||||||
import { SampledAudio } from "./audio";
|
import { SampledAudio } from "./audio";
|
||||||
import { ProbeRecorder } from "./recorder";
|
import { ProbeRecorder } from "./recorder";
|
||||||
|
@ -996,6 +996,9 @@ function isRaster(arg:any): arg is RasterFrameBased {
|
||||||
function hasProbe(arg:any): arg is Probeable {
|
function hasProbe(arg:any): arg is Probeable {
|
||||||
return typeof arg.connectProbe == 'function';
|
return typeof arg.connectProbe == 'function';
|
||||||
}
|
}
|
||||||
|
function hasBIOS(arg:any): arg is AcceptsBIOS {
|
||||||
|
return typeof arg.loadBIOS == 'function';
|
||||||
|
}
|
||||||
|
|
||||||
export abstract class BaseMachinePlatform<T extends Machine> extends BaseDebugPlatform implements Platform {
|
export abstract class BaseMachinePlatform<T extends Machine> extends BaseDebugPlatform implements Platform {
|
||||||
machine : T;
|
machine : T;
|
||||||
|
@ -1064,6 +1067,11 @@ export abstract class BaseMachinePlatform<T extends Machine> extends BaseDebugPl
|
||||||
m.connectProbe(null);
|
m.connectProbe(null);
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
if (hasBIOS(m)) {
|
||||||
|
this.loadBIOS = (title, data) => {
|
||||||
|
m.loadBIOS(data, title);
|
||||||
|
};
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
loadROM(title, data) {
|
loadROM(title, data) {
|
||||||
|
@ -1071,12 +1079,18 @@ export abstract class BaseMachinePlatform<T extends Machine> extends BaseDebugPl
|
||||||
this.reset();
|
this.reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
loadBIOS; // only set if hasBIOS() is true
|
||||||
|
|
||||||
pollControls() {
|
pollControls() {
|
||||||
this.poller && this.poller.poll();
|
this.poller && this.poller.poll();
|
||||||
if (hasPaddleInput(this.machine)) {
|
if (hasPaddleInput(this.machine)) {
|
||||||
this.machine.setPaddleInput(0, this.video.paddle_x);
|
this.machine.setPaddleInput(0, this.video.paddle_x);
|
||||||
this.machine.setPaddleInput(1, this.video.paddle_y);
|
this.machine.setPaddleInput(1, this.video.paddle_y);
|
||||||
}
|
}
|
||||||
|
// TODO: put into interface
|
||||||
|
if (this.machine['pollControls']) {
|
||||||
|
this.machine['pollControls']();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
advance(novideo:boolean) {
|
advance(novideo:boolean) {
|
||||||
|
@ -1209,6 +1223,8 @@ export abstract class BaseWASMMachine {
|
||||||
romptr : number;
|
romptr : number;
|
||||||
romlen : number;
|
romlen : number;
|
||||||
romarr : Uint8Array;
|
romarr : Uint8Array;
|
||||||
|
biosptr : number;
|
||||||
|
biosarr : Uint8Array;
|
||||||
audio : SampledAudioSink;
|
audio : SampledAudioSink;
|
||||||
audioarr : Float32Array;
|
audioarr : Float32Array;
|
||||||
probe : ProbeAll;
|
probe : ProbeAll;
|
||||||
|
@ -1246,12 +1262,11 @@ export abstract class BaseWASMMachine {
|
||||||
// fetch BIOS
|
// fetch BIOS
|
||||||
var biosResponse = await fetch('res/'+this.prefix+'.bios');
|
var biosResponse = await fetch('res/'+this.prefix+'.bios');
|
||||||
var biosBinary = await biosResponse.arrayBuffer();
|
var biosBinary = await biosResponse.arrayBuffer();
|
||||||
const cBIOSPointer = this.exports.malloc(0x5000);
|
this.biosptr = this.exports.malloc(biosBinary.byteLength);
|
||||||
const srcArray = new Uint8Array(biosBinary);
|
this.biosarr = new Uint8Array(this.exports.memory.buffer, this.biosptr, biosBinary.byteLength);
|
||||||
const destArray = new Uint8Array(this.exports.memory.buffer, cBIOSPointer, 0x5000);
|
this.loadBIOS(new Uint8Array(biosBinary));
|
||||||
destArray.set(srcArray);
|
|
||||||
// init machine instance
|
// init machine instance
|
||||||
this.sys = this.exports.machine_init(cBIOSPointer);
|
this.sys = this.exports.machine_init(this.biosptr);
|
||||||
console.log('machine_init', this.sys);
|
console.log('machine_init', this.sys);
|
||||||
// create state buffers
|
// create state buffers
|
||||||
var statesize = this.exports.machine_get_state_size();
|
var statesize = this.exports.machine_get_state_size();
|
||||||
|
@ -1287,9 +1302,18 @@ export abstract class BaseWASMMachine {
|
||||||
this.romlen = rom.length;
|
this.romlen = rom.length;
|
||||||
this.reset();
|
this.reset();
|
||||||
}
|
}
|
||||||
|
// TODO: can't load after machine_init
|
||||||
|
loadBIOS(srcArray: Uint8Array) {
|
||||||
|
this.biosarr.set(srcArray);
|
||||||
|
}
|
||||||
reset() {
|
reset() {
|
||||||
this.exports.machine_reset(this.sys);
|
this.exports.machine_reset(this.sys);
|
||||||
}
|
}
|
||||||
|
/* TODO: we don't need this because c64_exec does this?
|
||||||
|
pollControls() {
|
||||||
|
this.exports.machine_start_frame(this.sys);
|
||||||
|
}
|
||||||
|
*/
|
||||||
read(address: number) : number {
|
read(address: number) : number {
|
||||||
return this.exports.machine_mem_read(this.sys, address & 0xffff);
|
return this.exports.machine_mem_read(this.sys, address & 0xffff);
|
||||||
}
|
}
|
||||||
|
|
|
@ -63,6 +63,10 @@ export interface AcceptsROM {
|
||||||
loadROM(data:Uint8Array, title?:string) : void;
|
loadROM(data:Uint8Array, title?:string) : void;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export interface AcceptsBIOS {
|
||||||
|
loadBIOS(data:Uint8Array, title?:string) : void;
|
||||||
|
}
|
||||||
|
|
||||||
export interface Resettable {
|
export interface Resettable {
|
||||||
reset() : void;
|
reset() : void;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1076,8 +1076,8 @@ async function loadBIOSFromProject() {
|
||||||
var biospath = platform_id + '.rom';
|
var biospath = platform_id + '.rom';
|
||||||
var biosdata = await store.getItem(biospath);
|
var biosdata = await store.getItem(biospath);
|
||||||
if (biosdata instanceof Uint8Array) {
|
if (biosdata instanceof Uint8Array) {
|
||||||
console.log('loading BIOS')
|
console.log('loading BIOS', biospath, biosdata.length + " bytes")
|
||||||
platform.loadBIOS('BIOS', biosdata);
|
platform.loadBIOS(biospath, biosdata);
|
||||||
} else {
|
} else {
|
||||||
console.log('BIOS file must be binary')
|
console.log('BIOS file must be binary')
|
||||||
}
|
}
|
||||||
|
|
|
@ -24,8 +24,17 @@ export class C64_WASMMachine extends BaseWASMMachine implements Machine, Probeab
|
||||||
joymask0 = 0;
|
joymask0 = 0;
|
||||||
joymask1 = 0;
|
joymask1 = 0;
|
||||||
|
|
||||||
|
loadBIOS(srcArray: Uint8Array) {
|
||||||
|
var patch1ofs = 0xea24 - 0xe000 + 0x3000;
|
||||||
|
/*if (srcArray[patch1ofs] == 0x02)*/ srcArray[patch1ofs] = 0x60; // cursor move, KIL -> RTS
|
||||||
|
super.loadBIOS(srcArray);
|
||||||
|
}
|
||||||
reset() {
|
reset() {
|
||||||
super.reset();
|
super.reset();
|
||||||
|
// clear keyboard
|
||||||
|
for (var ch=0; ch<128; ch++) {
|
||||||
|
this.setKeyInput(ch, 0, KeyFlags.KeyUp);
|
||||||
|
}
|
||||||
// load rom
|
// load rom
|
||||||
if (this.romptr && this.romlen) {
|
if (this.romptr && this.romlen) {
|
||||||
this.exports.machine_load_rom(this.sys, this.romptr, this.romlen);
|
this.exports.machine_load_rom(this.sys, this.romptr, this.romlen);
|
||||||
|
@ -35,38 +44,36 @@ export class C64_WASMMachine extends BaseWASMMachine implements Machine, Probeab
|
||||||
this.prgstart = this.romarr[2] + (this.romarr[3]<<8) + 2; // point to after BASIC program
|
this.prgstart = this.romarr[2] + (this.romarr[3]<<8) + 2; // point to after BASIC program
|
||||||
console.log("prgstart", hex(this.prgstart));
|
console.log("prgstart", hex(this.prgstart));
|
||||||
}
|
}
|
||||||
}
|
// is program loaded into RAM?
|
||||||
// clear keyboard
|
if (this.prgstart < 0x8000) {
|
||||||
for (var ch=0; ch<128; ch++) {
|
// advance BIOS a few frames
|
||||||
this.setKeyInput(ch, 0, KeyFlags.KeyUp);
|
this.exports.machine_exec(this.sys, 250000);
|
||||||
}
|
// type in command (SYS 2061)
|
||||||
// is program loaded into RAM?
|
var cmd = "SYS "+this.prgstart+"\r";
|
||||||
if (this.prgstart < 0x8000) {
|
for (var i=0; i<cmd.length; i++) {
|
||||||
// advance BIOS a few frames
|
var key = cmd.charCodeAt(i);
|
||||||
this.exports.machine_exec(this.sys, 150000);
|
this.exports.machine_exec(this.sys, 10000);
|
||||||
// set IRQ routine @ 0x314
|
this.exports.machine_key_down(this.sys, key);
|
||||||
var old0x314 = this.read(0x314) + this.read(0x315) * 256;
|
this.exports.machine_exec(this.sys, 10000);
|
||||||
this.write(0x314, this.prgstart & 0xff);
|
this.exports.machine_key_up(this.sys, key);
|
||||||
this.write(0x315, (this.prgstart >> 8) & 0xff);
|
}
|
||||||
// wait until IRQ fires
|
// advance clock until program starts
|
||||||
for (var i=0; i<50000 && this.getPC() != this.prgstart; i++) {
|
for (var i=0; i<100000 && this.getPC() != this.prgstart; i++) {
|
||||||
this.exports.machine_tick(this.sys);
|
this.exports.machine_tick(this.sys);
|
||||||
}
|
}
|
||||||
// reset 0x314 to old value
|
} else {
|
||||||
this.write(0x314, old0x314 & 0xff);
|
// get out of reset
|
||||||
this.write(0x315, old0x314 >> 8);
|
this.exports.machine_exec(this.sys, 100);
|
||||||
} else {
|
// wait until cartridge start
|
||||||
// get out of reset
|
// TODO: detect ROM cartridge
|
||||||
this.exports.machine_exec(this.sys, 100);
|
var warmstart = this.romarr[0x4] + this.romarr[0x5]*256;
|
||||||
// wait until cartridge start
|
for (var i=0; i<150000 && this.getPC() != warmstart; i++) {
|
||||||
// TODO: detect ROM cartridge
|
this.exports.machine_tick(this.sys);
|
||||||
var warmstart = this.romarr[0x4] + this.romarr[0x5]*256;
|
}
|
||||||
for (var i=0; i<150000 && this.getPC() != warmstart; i++) {
|
|
||||||
this.exports.machine_tick(this.sys);
|
|
||||||
}
|
}
|
||||||
|
// TODO: shouldn't we return here @ start of frame?
|
||||||
|
// and stop probing
|
||||||
}
|
}
|
||||||
// TODO: shouldn't we return here @ start of frame?
|
|
||||||
// and stop probing
|
|
||||||
}
|
}
|
||||||
advanceFrame(trap: TrapCondition) : number {
|
advanceFrame(trap: TrapCondition) : number {
|
||||||
// TODO: does this sync with VSYNC?
|
// TODO: does this sync with VSYNC?
|
||||||
|
@ -129,11 +136,13 @@ export class C64_WASMMachine extends BaseWASMMachine implements Machine, Probeab
|
||||||
if (key == 39) { key = 0x9; mask = 0x8; } // RIGHT
|
if (key == 39) { key = 0x9; mask = 0x8; } // RIGHT
|
||||||
if (key == 40) { key = 0xa; mask = 0x2; } // DOWN
|
if (key == 40) { key = 0xa; mask = 0x2; } // DOWN
|
||||||
if (key == 32) { mask = 0x10; } // FIRE
|
if (key == 32) { mask = 0x10; } // FIRE
|
||||||
|
/* player 2 (TODO)
|
||||||
if (key == 65) { key = 65; mask2 = 0x4; } // LEFT
|
if (key == 65) { key = 65; mask2 = 0x4; } // LEFT
|
||||||
if (key == 87) { key = 87; mask2 = 0x1; } // UP
|
if (key == 87) { key = 87; mask2 = 0x1; } // UP
|
||||||
if (key == 68) { key = 68; mask2 = 0x8; } // RIGHT
|
if (key == 68) { key = 68; mask2 = 0x8; } // RIGHT
|
||||||
if (key == 83) { key = 83; mask2 = 0x2; } // DOWN
|
if (key == 83) { key = 83; mask2 = 0x2; } // DOWN
|
||||||
if (key == 69) { mask2 = 0x10; } // FIRE
|
if (key == 69) { mask2 = 0x10; } // FIRE
|
||||||
|
*/
|
||||||
if (key == 113) { key = 0xf1; } // F2
|
if (key == 113) { key = 0xf1; } // F2
|
||||||
if (key == 115) { key = 0xf3; } // F4
|
if (key == 115) { key = 0xf3; } // F4
|
||||||
if (key == 119) { key = 0xf5; } // F8
|
if (key == 119) { key = 0xf5; } // F8
|
||||||
|
|
|
@ -32,7 +32,6 @@ class BallyAstrocadePlatform extends BaseZ80MachinePlatform<BallyAstrocade> impl
|
||||||
getPresets() { return ASTROCADE_PRESETS; }
|
getPresets() { return ASTROCADE_PRESETS; }
|
||||||
getDefaultExtension() { return ".c"; };
|
getDefaultExtension() { return ".c"; };
|
||||||
readAddress(a) { return this.machine.read(a); }
|
readAddress(a) { return this.machine.read(a); }
|
||||||
loadBIOS(title,bios) { this.machine.loadBIOS(bios); }
|
|
||||||
getMemoryMap = function() { return { main:[
|
getMemoryMap = function() { return { main:[
|
||||||
{name:'BIOS',start:0x0,size:0x2000,type:'rom'},
|
{name:'BIOS',start:0x0,size:0x2000,type:'rom'},
|
||||||
//{name:'Cart ROM',start:0x2000,size:0x2000,type:'rom'},
|
//{name:'Cart ROM',start:0x2000,size:0x2000,type:'rom'},
|
||||||
|
|
|
@ -32,6 +32,9 @@ class ColecoVisionPlatform extends BaseZ80MachinePlatform<ColecoVision> implemen
|
||||||
{name:'BIOS',start:0x0,size:0x2000,type:'rom'},
|
{name:'BIOS',start:0x0,size:0x2000,type:'rom'},
|
||||||
{name:'Cartridge Header',start:0x8000,size:0x100,type:'rom'},
|
{name:'Cartridge Header',start:0x8000,size:0x100,type:'rom'},
|
||||||
] } };
|
] } };
|
||||||
|
showHelp(tool:string, ident:string) {
|
||||||
|
window.open("https://8bitworkshop.com/blog/platforms/coleco/", "_help");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// MAME support
|
/// MAME support
|
||||||
|
|
Loading…
Reference in New Issue
Block a user