1
0
mirror of https://github.com/sehugg/8bitworkshop.git synced 2024-11-27 17:50:37 +00:00

vic20: default tiny bios

This commit is contained in:
Steven Hugg 2023-11-13 22:19:30 -06:00
parent 1c0b3e2fdd
commit a252ea65bd
4 changed files with 36 additions and 6 deletions

View File

@ -0,0 +1,5 @@
org $a000-2 ; so we can write the ...
.word $a000 ; cartridge 2-byte header
.word Start ; start vector
.word Start ; RESTORE vector
.byte $41, $30, $c3, $c2, $cd ; "A0CBM"

View File

@ -66,13 +66,16 @@ export abstract class BaseWASMMachine {
this.exports = wasmResult.exports; this.exports = wasmResult.exports;
} else throw new Error('could not load WASM file'); } else throw new Error('could not load WASM file');
} }
allocateBIOS(biosBinary: Uint8Array) {
this.biosptr = this.exports.malloc(biosBinary.byteLength);
this.biosarr = new Uint8Array(this.exports.memory.buffer, this.biosptr, biosBinary.byteLength);
}
async fetchBIOS() { async fetchBIOS() {
var biosResponse = await fetch('res/'+this.prefix+'.bios'); var biosResponse = await fetch('res/'+this.prefix+'.bios');
if (biosResponse.status == 200 || (biosResponse as any as Blob).size) { if (biosResponse.status == 200 || (biosResponse as any as Blob).size) {
var biosBinary = await biosResponse.arrayBuffer(); var biosBinary = new Uint8Array(await biosResponse.arrayBuffer());
this.biosptr = this.exports.malloc(biosBinary.byteLength); this.allocateBIOS(biosBinary);
this.biosarr = new Uint8Array(this.exports.memory.buffer, this.biosptr, biosBinary.byteLength); this.loadBIOS(biosBinary);
this.loadBIOS(new Uint8Array(biosBinary));
} else throw new Error('could not load BIOS file'); } else throw new Error('could not load BIOS file');
} }
async initWASM() { async initWASM() {

View File

@ -26,6 +26,12 @@ export class VIC20_WASMMachine extends BaseWASMMachine implements Machine, Probe
loadBIOS(srcArray: Uint8Array) { loadBIOS(srcArray: Uint8Array) {
super.loadBIOS(srcArray); super.loadBIOS(srcArray);
} }
async fetchBIOS() {
let bios = new Uint8Array(20480);
bios.set(DEFAULT_BIOS, bios.length - DEFAULT_BIOS.length);
this.allocateBIOS(bios);
this.loadBIOS(new Uint8Array(bios));
}
reset() { reset() {
super.reset(); super.reset();
// clear keyboard // clear keyboard
@ -170,3 +176,19 @@ export class VIC20_WASMMachine extends BaseWASMMachine implements Machine, Probe
} }
} }
// pretty much just runs autostart ROM and not much else...
const DEFAULT_BIOS = [
0xA2, 0x10, 0xA0, 0x91, 0x60, 0x71, 0xFF, 0x71, 0xFF, 0x5C, 0xFF, 0xA2, 0xFF, 0x78, 0x9A, 0xD8,
0x6C, 0x00, 0xA0, 0xA2, 0x45, 0xA0, 0xFF, 0x18, 0x78, 0x6C, 0x18, 0x03, 0x48, 0x8A, 0x48, 0x98,
0x48, 0xAD, 0x1D, 0x91, 0x10, 0x03, 0x6C, 0x02, 0xA0, 0x4C, 0x6C, 0xFF, 0x68, 0xA8, 0x68, 0xAA,
0x68, 0x40, 0x48, 0x8A, 0x48, 0x98, 0x48, 0xBA, 0xBD, 0x04, 0x01, 0x29, 0x10, 0xF0, 0x03, 0x6C,
0x16, 0x03, 0x6C, 0x14, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x4C, 0x53, 0xFF, 0x4C, 0x44, 0xFF,
0x4C, 0x44, 0xFF, 0x4C, 0x44, 0xFF, 0x4C, 0x44, 0xFF, 0x4C, 0x44, 0xFF, 0x4C, 0x44, 0xFF, 0x4C,
0x44, 0xFF, 0x4C, 0x44, 0xFF, 0x4C, 0x44, 0xFF, 0x4C, 0x44, 0xFF, 0x4C, 0x44, 0xFF, 0x4C, 0x44,
0xFF, 0x4C, 0x44, 0xFF, 0x4C, 0x44, 0xFF, 0x4C, 0x44, 0xFF, 0x4C, 0x44, 0xFF, 0x4C, 0x44, 0xFF,
0x6C, 0x1A, 0x03, 0x6C, 0x1C, 0x03, 0x6C, 0x1E, 0x03, 0x6C, 0x20, 0x03, 0x6C, 0x22, 0x03, 0x6C,
0x24, 0x03, 0x6C, 0x26, 0x03, 0x4C, 0x44, 0xFF, 0x4C, 0x44, 0xFF, 0x4C, 0x44, 0xFF, 0x4C, 0x44,
0xFF, 0x6C, 0x28, 0x03, 0x6C, 0x2A, 0x03, 0x6C, 0x2C, 0x03, 0x4C, 0x44, 0xFF, 0x4C, 0x44, 0xFF,
0x4C, 0x44, 0xFF, 0x4C, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x58, 0xFF, 0x4B, 0xFF, 0x72, 0xFF
];

View File

@ -5,9 +5,9 @@ import { PLATFORMS } from "../common/emu";
import { BaseMAME6502Platform } from "../common/mameplatform"; import { BaseMAME6502Platform } from "../common/mameplatform";
const VIC20_PRESETS = [ const VIC20_PRESETS = [
{id:'hello.dasm', name:'Hello World (ASM)'}, // {id:'hello.dasm', name:'Hello World (ASM)'},
{id:'hellocart.dasm', name:'Hello Cartridge (ASM)'}, {id:'hellocart.dasm', name:'Hello Cartridge (ASM)'},
{id:'siegegame.c', name:'Siege Game (C)'}, // {id:'siegegame.c', name:'Siege Game (C)'},
]; ];
const VIC20_MEMORY_MAP = { main:[ const VIC20_MEMORY_MAP = { main:[