ScriptedAmigaEmulator/sae/custom.js
Rupert Hausberger fbf36a4fa5 update 0.9.0
2016-07-15 19:44:16 +02:00

888 lines
40 KiB
JavaScript

/*-------------------------------------------------------------------------
| SAE - Scripted Amiga Emulator
| https://github.com/naTmeg/ScriptedAmigaEmulator
|
| Copyright (C) 2012-2016 Rupert Hausberger
|
| This program is free software; you can redistribute it and/or
| modify it under the terms of the GNU General Public License
| as published by the Free Software Foundation; either version 2
| of the License, or (at your option) any later version.
|
| This program is distributed in the hope that it will be useful,
| but WITHOUT ANY WARRANTY; without even the implied warranty of
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
| GNU General Public License for more details.
|
| Note: ported from WinUAE 3.2.x
-------------------------------------------------------------------------*/
/* global constants */
const SAEC_Custom_DMAF_AUD0EN = 1 << 0;
const SAEC_Custom_DMAF_AUD1EN = 1 << 1;
const SAEC_Custom_DMAF_AUD2EN = 1 << 2;
const SAEC_Custom_DMAF_AUD3EN = 1 << 3;
const SAEC_Custom_DMAF_DSKEN = 1 << 4;
const SAEC_Custom_DMAF_SPREN = 1 << 5;
const SAEC_Custom_DMAF_BLTEN = 1 << 6;
const SAEC_Custom_DMAF_COPEN = 1 << 7;
const SAEC_Custom_DMAF_BPLEN = 1 << 8;
const SAEC_Custom_DMAF_DMAEN = 1 << 9;
const SAEC_Custom_DMAF_BLTPRI = 1 << 10;
const SAEC_Custom_DMAF_BZERO = 1 << 13;
const SAEC_Custom_DMAF_BBUSY = 1 << 14;
const SAEC_Custom_DMAF_SETCLR = 1 << 15;
const SAEC_Custom_INTF_TBE = 1 << 0;
const SAEC_Custom_INTF_DSKBLK = 1 << 1;
//const SAEC_Custom_INTF_PORTS = 1 << 3;
//const SAEC_Custom_INTF_COPER = 1 << 4;
const SAEC_Custom_INTF_VERTB = 1 << 5;
const SAEC_Custom_INTF_BLIT = 1 << 6;
//const SAEC_Custom_INTF_AUD0 = 1 << 7;
//const SAEC_Custom_INTF_AUD1 = 1 << 8;
//const SAEC_Custom_INTF_AUD2 = 1 << 9;
//const SAEC_Custom_INTF_AUD3 = 1 << 10;
const SAEC_Custom_INTF_RBF = 1 << 11;
const SAEC_Custom_INTF_DSKSYN = 1 << 12;
//const SAEC_Custom_INTF_EXTER = 1 << 13;
const SAEC_Custom_INTF_INTEN = 1 << 14;
const SAEC_Custom_INTF_SETCLR = 1 << 15;
/*---------------------------------*/
/* global references */
var SAER_Custom_put16_real = null;
/*---------------------------------*/
/* global variables */
var SAEV_Custom_bank = null;
var SAEV_Custom_dmacon = 0;
var SAEV_Custom_intreq = 0;
var SAEV_Custom_intena = 0;
var SAEV_Custom_adkcon = 0;
var SAEV_Custom_last_value = 0;
/*---------------------------------*/
/* global functions */
function SAEF_Custom_dmaen(dmamask) {
return (SAEV_Custom_dmacon & dmamask) != 0 && (SAEV_Custom_dmacon & SAEC_Custom_DMAF_DMAEN) != 0;
}
/*---------------------------------*/
function SAEO_Custom() {
var readMap = null;
var writeMap = null;
//var last_custom_value = 0; -> SAEV_Custom_last_value
//var dmacon = 0; -> SAEV_Custom_dmacon
//var intreq = 0; -> SAEV_Custom_intreq
//var intena = 0; -> SAEV_Custom_intena
//var adkcon = 0; -> SAEV_Custom_adkcon
var intreq_internal = 0;
var intena_internal = 0;
const INT_PROCESSING_DELAY = 3 * SAEC_Events_CYCLE_UNIT;
/*-----------------------------------------------------------------------*/
this.setup = function () {
createReadMap();
createWriteMap();
}
this.reset = function () {
SAEV_Custom_dmacon = 0;
SAEV_Custom_intena = intena_internal = 0;
intreq_internal = 0;
}
/*-----------------------------------------------------------------------*/
function DMACONR(hpos) {
SAER.playfield.decide_line(hpos);
SAER.playfield.decide_fetch_safe(hpos);
SAEV_Custom_dmacon &= ~(0x4000 | 0x2000);
SAEV_Custom_dmacon |= (((SAEV_Blitter_interrupt || (!SAEV_Blitter_interrupt && SAEV_config.chipset.agnusBltBusyBug && !SAER_Blitter_blt_info.got_cycle)) ? 0 : 0x4000) | (SAER_Blitter_blt_info.blitzero ? 0x2000 : 0));
return SAEV_Custom_dmacon;
}
function DMACON(v, hpos) {
var oldcon = SAEV_Custom_dmacon;
SAER.playfield.decide_line(hpos);
SAER.playfield.decide_fetch_safe(hpos);
if (v & 0x8000) SAEV_Custom_dmacon |= v & 0x7FFF; else SAEV_Custom_dmacon &= ~v;
SAEV_Custom_dmacon &= 0x07FF;
var changed = SAEV_Custom_dmacon ^ oldcon;
var oldcop = (oldcon & SAEC_Custom_DMAF_COPEN) != 0 && (oldcon & SAEC_Custom_DMAF_DMAEN) != 0;
var newcop = (SAEV_Custom_dmacon & SAEC_Custom_DMAF_COPEN) != 0 && (SAEV_Custom_dmacon & SAEC_Custom_DMAF_DMAEN) != 0;
if (oldcop != newcop) {
if (newcop && !oldcop) {
SAER.copper.compute_spcflag_copper(hpos);
} else if (!newcop) {
SAER.copper.copper_stop();
}
}
if ((SAEV_Custom_dmacon & SAEC_Custom_DMAF_BLTPRI) > (oldcon & SAEC_Custom_DMAF_BLTPRI) && SAEV_Blitter_bltstate != SAEC_Blitter_bltstate_DONE)
SAEF_setSpcFlags(SAEC_spcflag_BLTNASTY);
if (SAEF_Custom_dmaen(SAEC_Custom_DMAF_BLTEN) && SAEV_Blitter_bltstate == SAEC_Blitter_bltstate_INIT)
SAER.blitter.blitter_check_start();
if ((SAEV_Custom_dmacon & (SAEC_Custom_DMAF_BLTPRI | SAEC_Custom_DMAF_BLTEN | SAEC_Custom_DMAF_DMAEN)) != (SAEC_Custom_DMAF_BLTPRI | SAEC_Custom_DMAF_BLTEN | SAEC_Custom_DMAF_DMAEN))
SAEF_clrSpcFlags(SAEC_spcflag_BLTNASTY);
if (changed & (SAEC_Custom_DMAF_DMAEN | 0x0f))
SAER.audio.state_machine();
if (changed & (SAEC_Custom_DMAF_DMAEN | SAEC_Custom_DMAF_BPLEN))
SAER.playfield.set_bitplane_maybe_start_hpos(hpos);
}
/*---------------------------------*/
function INTREQR() {
return SAEV_Custom_intreq;
}
this.INTREQ_0 = function(v) {
var old = SAEV_Custom_intreq;
if (v & 0x8000) SAEV_Custom_intreq |= v & 0x7FFF; else SAEV_Custom_intreq &= ~v;
//if ((old & 0x0800) && !(SAEV_Custom_intreq & 0x0800)) serial_rbf_clear();
var old2 = intreq_internal;
intreq_internal = SAEV_Custom_intreq;
if (old == SAEV_Custom_intreq && old2 == intreq_internal)
return false;
if (v & 0x8000)
SAER.m68k.doint();
return true;
}
this.INTREQ = function(v) {
if (this.INTREQ_0(v)) {
//serial_check_irq();
SAER.devices.rethink();
}
}
/*---------------------------------*/
function INTENAR() {
return SAEV_Custom_intena;
}
function INTENA(v, hpos) {
var old = SAEV_Custom_intena;
if (v & 0x8000) SAEV_Custom_intena |= v & 0x7FFF; else SAEV_Custom_intena &= ~v;
if (!(v & 0x8000) && old == SAEV_Custom_intena && SAEV_Custom_intena == intena_internal)
return;
intena_internal = SAEV_Custom_intena;
if (v & 0x8000)
SAER.m68k.doint();
}
/*---------------------------------*/
function ADKCONR() {
return SAEV_Custom_adkcon;
}
function ADKCON(v, hpos) {
if (SAEV_config.audio.mode != SAEC_Config_Audio_Mode_Off)
SAER.audio.update();
SAER.disk.update(hpos);
SAER.disk.update_adkcon(hpos, v);
if (v & 0x8000) SAEV_Custom_adkcon |= v & 0x7FFF; else SAEV_Custom_adkcon &= ~v;
SAER.audio.update_adkmasks();
//if ((v >> 11) & 1) serial_uartbreak((SAEV_Custom_adkcon >> 11) & 1);
}
/*---------------------------------*/
this.send_interrupt = function(num, delay) {
this.INTREQ_0(SAEC_Custom_INTF_SETCLR | num);
}
/*---------------------------------*/
/*
var irq_nmi = 0;
this.NMI_delayed = function() {
irq_nmi = 1;
}*/
this.intlev = function() {
var imask = intreq_internal & intena_internal;
/*if (irq_nmi) {
irq_nmi = 0;
return 7;
}*/
if (imask && (intena_internal & SAEC_Custom_INTF_INTEN)) { //0x4000)) {
if (imask & (0x4000 | 0x2000)) return 6; // 13 14
if (imask & (0x1000 | 0x0800)) return 5; // 11 12
if (imask & (0x0400 | 0x0200 | 0x0100 | 0x0080)) return 4; // 7 8 9 10
if (imask & (0x0040 | 0x0020 | 0x0010)) return 3; // 4 5 6
if (imask & 0x0008) return 2; // 3
if (imask & (0x0001 | 0x0002 | 0x0004)) return 1; // 0 1 2
}
return -1;
}
/*-----------------------------------------------------------------------*/
function get16_real(hpos, addr, noput, isbyte) {
var v = false;
addr &= 0xfff;
try {
v = readMap[(addr & 0x1fe) >> 1](hpos);
} catch(e) {
if (!(e instanceof Error))
throw e;
/* OCS/ECS:
* reading write-only register causes write with last value in chip
* bus (custom registers, chipram, slowram)
* and finally returns either all ones or something weird if DMA happens
* in next (or previous) cycle.. FIXME.
*
* OCS-only special case: DFF000 (BLTDDAT) will always return whatever was left in bus
*
* AGA:
* Can also return last CPU accessed value
* Remembers old SAEV_Custom_last_value
*/
v = SAEV_Custom_last_value;
SAER.playfield.set_line_cyclebased();
if (!noput) {
var l;
if (SAEV_config.chipset.mask & SAEC_Config_Chipset_Mask_AGA) {
l = 0;
} else {
// last chip bus value (read or write) is written to register
/*if (SAEV_config.cpu.compatible && SAEV_config.cpu.model == SAEC_Config_CPU_Model_68000) { //FIX 68000 prefetch not implemented
if (isbyte)
l = (SAER_CPU_regs.chipset_latch_rw << 8) | (SAER_CPU_regs.chipset_latch_rw & 0xff);
else
l = SAER_CPU_regs.chipset_latch_rw;
} else
l = SAER_CPU_regs.chipset_latch_rw;
*/
l = 0;
}
SAER.playfield.decide_line(hpos);
SAER.playfield.decide_fetch_safe(hpos);
var r = put16_real(hpos, addr, l, true);
/* CPU gets back (OCS/ECS only):
- if last cycle was DMA cycle: DMA cycle data
- if last cycle was not DMA cycle: FFFF or some ANDed old data. */
/*var c = SAER_Events_cycle_line[hpos] & SAEC_Events_cycle_line_MASK;
var bmdma = SAER.playfield.is_bitplane_dma(hpos);
if (SAEV_config.chipset.mask & SAEC_Config_Chipset_Mask_AGA) {
if (bmdma || (c > SAEC_Events_cycle_line_REFRESH && c < SAEC_Events_cycle_line_CPU))
v = SAEV_Custom_last_value;
else if (c == SAEC_Events_cycle_line_CPU)
v = SAER_CPU_regs.db;
else
v = SAEV_Custom_last_value >>> ((addr & 2) ? 0 : 16);
} else {
if (bmdma || (c > SAEC_Events_cycle_line_REFRESH && c < SAEC_Events_cycle_line_CPU))
v = SAEV_Custom_last_value;
else
// refresh checked because refresh cycles do not always set SAEV_Custom_last_value for performance reasons.
v = 0xffff;
}*/
var bmdma = SAER.playfield.is_bitplane_dma(hpos);
if (SAEV_config.chipset.mask & SAEC_Config_Chipset_Mask_AGA) {
if (bmdma)
v = SAEV_Custom_last_value & 0xffff;
else
v = (SAEV_Custom_last_value >>> ((addr & 2) ? 0 : 16)) & 0xffff;
} else {
if (bmdma)
v = SAEV_Custom_last_value & 0xffff;
else
v = 0xffff;
}
//SAEF_log("Custom.get16_real() %08x read = %04x. value written = %04x", 0xdff000 | addr, v, l);
return v;
}
}
return v;
}
function get16_2(addr, isbyte) {
var hpos = SAER.events.current_hpos();
SAER.copper.sync_copper_with_cpu(hpos, 1);
//var v =
return get16_real(hpos, addr, false, isbyte);
/*#ifdef ACTION_REPLAY
#ifdef ACTION_REPLAY_COMMON
addr &= 0x1ff;
ar_custom[addr + 0] = (uae_u8)(v >> 8);
ar_custom[addr + 1] = (uae_u8)(v);
#endif
#endif
return v;*/
}
function get8(addr) {
if ((addr & 0xffff) < 0x8000 && SAEV_config.chipset.fatGaryRev >= 0)
return SAER.memory.dummyGet(addr, 1, false, 0);
return (get16_2(addr & ~1, true) >> (addr & 1 ? 0 : 8)) & 0xff;
}
function get16(addr) {
if ((addr & 0xffff) < 0x8000 && SAEV_config.chipset.fatGaryRev >= 0)
return SAER.memory.dummyGet(addr, 2, false, 0);
if (addr & 1) {
/* think about move.w $dff005,d0.. (68020+ only) */
addr &= ~1;
return ((get16_2(addr, false) << 8) & 0xff00) | (get16_2(addr + 2, false) >> 8);
}
return get16_2(addr, false);
}
function getInst16(addr) {
if (SAEV_config.cpu.model >= SAEC_Config_CPU_Model_68020)
return SAEF_Memory_dummyGetInst16(addr);
return get16(addr);
}
function get32(addr) {
if ((addr & 0xffff) < 0x8000 && SAEV_config.chipset.fatGaryRev >= 0)
return SAER.memory.dummyGet(addr, 4, false, 0);
return ((get16(addr) << 16) | get16(addr + 2)) >>> 0;
}
function getInst32(addr) {
if (SAEV_config.cpu.model >= SAEC_Config_CPU_Model_68020)
return SAEF_Memory_dummyGetInst32(addr);
return get32(addr);
}
/*---------------------------------*/
function put16_real(hpos, addr, value, noget) {
addr &= 0x1FE;
value &= 0xffff;
/*#ifdef ACTION_REPLAY
#ifdef ACTION_REPLAY_COMMON
ar_custom[addr+0]=(uae_u8)(value>>8);
ar_custom[addr+1]=(uae_u8)(value);
#endif
#endif*/
try {
writeMap[addr >> 1](value, hpos);
} catch(e) {
if (!(e instanceof Error))
throw e;
/* writing to read-only register causes read access */
if (!noget) {
//SAEF_log("Custom.put16_real() %04x written", addr);
get16_real(hpos, addr, true, false);
}
return true;
}
return false;
}
SAER_Custom_put16_real = put16_real;
function put16(addr, value) {
var hpos = SAER.events.current_hpos();
if ((addr & 0xffff) < 0x8000 && SAEV_config.chipset.fatGaryRev >= 0) {
SAER.memory.dummyPut(addr, 2, value);
return;
}
SAER.copper.sync_copper_with_cpu(hpos, 1);
if (addr & 1) {
addr &= ~1;
put16_real(hpos, addr, (value >> 8) | (value & 0xff00), 0);
put16_real(hpos, addr + 2, ((value << 8) & 0xff00) | (value & 0x00ff), 0);
return;
}
put16_real(hpos, addr, value, 0);
}
function put8(addr, value) {
if ((addr & 0xffff) < 0x8000 && SAEV_config.chipset.fatGaryRev >= 0) {
SAER.memory.dummyPut(addr, 1, value);
return;
}
var rval;
if (SAEV_config.chipset.mask & SAEC_Config_Chipset_Mask_AGA) {
if (addr & 1)
rval = value & 0xff;
else
rval = (value << 8) | (value & 0xff);
} else
rval = (value << 8) | (value & 0xff);
/*if (currprefs.cs_bytecustomwritebug) {
if (addr & 1)
put16(addr & ~1, rval);
else
put16(addr, value << 8);
} else*/
put16(addr & ~1, rval);
}
function put32(addr, value) {
if ((addr & 0xffff) < 0x8000 && SAEV_config.chipset.fatGaryRev >= 0) {
SAER.memory.dummyPut(addr, 4, value);
return;
}
put16(addr & 0xfffe, value >>> 16);
put16((addr + 2) & 0xfffe, value & 0xffff);
}
SAEV_Custom_bank = new SAEO_Memory_addrbank(
get32, get16, get8,
put32, put16, put8,
SAEF_Memory_defaultXLate, SAEF_Memory_defaultCheck, null, null, "Custom chipset",
getInst32, getInst16,
//SAEC_Memory_addrbank_flag_IO, S_READ, S_WRITE, null, 0x1ff, 0xdff000
SAEC_Memory_addrbank_flag_IO, null, 0x1ff, 0xdff000
);
/*-----------------------------------------------------------------------*/
function createReadMap() {
var i;
readMap = new Array(0x100);
for (i = 0; i < readMap.length; i++) readMap[i] = false;
readMap[0x002 >> 1] = DMACONR;
readMap[0x004 >> 1] = function() { return SAER.playfield.VPOSR(); };
readMap[0x006 >> 1] = function() { return SAER.playfield.VHPOSR(); };
readMap[0x00A >> 1] = function() { return SAER.input.JOY0DAT(); };
readMap[0x00C >> 1] = function() { return SAER.input.JOY1DAT(); };
readMap[0x00E >> 1] = function() { return SAER.playfield.CLXDAT(); };
readMap[0x010 >> 1] = ADKCONR;
readMap[0x012 >> 1] = function() { return SAER.input.POT0DAT(); };
readMap[0x014 >> 1] = function() { return SAER.input.POT1DAT(); };
readMap[0x016 >> 1] = function() { return SAER.input.POTGOR(); };
readMap[0x018 >> 1] = function() { return SAER.serial.SERDATR(); };
readMap[0x01A >> 1] = function(hpos) { return SAER.disk.DSKBYTR(hpos); };
readMap[0x01C >> 1] = INTENAR;
readMap[0x01E >> 1] = INTREQR;
if (SAEV_config.chipset.mask & SAEC_Config_Chipset_Mask_ECS_DENISE)
readMap[0x07C >> 1] = function() { return SAER.playfield.DENISEID(); };
if (SAEV_config.chipset.mask & SAEC_Config_Chipset_Mask_AGA) {
readMap[0x180 >> 1] = function() { return SAER.playfield.COLOR_READ(0); };
readMap[0x182 >> 1] = function() { return SAER.playfield.COLOR_READ(1); };
readMap[0x184 >> 1] = function() { return SAER.playfield.COLOR_READ(2); };
readMap[0x186 >> 1] = function() { return SAER.playfield.COLOR_READ(3); };
readMap[0x188 >> 1] = function() { return SAER.playfield.COLOR_READ(4); };
readMap[0x18A >> 1] = function() { return SAER.playfield.COLOR_READ(5); };
readMap[0x18C >> 1] = function() { return SAER.playfield.COLOR_READ(6); };
readMap[0x18E >> 1] = function() { return SAER.playfield.COLOR_READ(7); };
readMap[0x190 >> 1] = function() { return SAER.playfield.COLOR_READ(8); };
readMap[0x192 >> 1] = function() { return SAER.playfield.COLOR_READ(9); };
readMap[0x194 >> 1] = function() { return SAER.playfield.COLOR_READ(10); };
readMap[0x196 >> 1] = function() { return SAER.playfield.COLOR_READ(11); };
readMap[0x198 >> 1] = function() { return SAER.playfield.COLOR_READ(12); };
readMap[0x19A >> 1] = function() { return SAER.playfield.COLOR_READ(13); };
readMap[0x19C >> 1] = function() { return SAER.playfield.COLOR_READ(14); };
readMap[0x19E >> 1] = function() { return SAER.playfield.COLOR_READ(15); };
readMap[0x1A0 >> 1] = function() { return SAER.playfield.COLOR_READ(16); };
readMap[0x1A2 >> 1] = function() { return SAER.playfield.COLOR_READ(17); };
readMap[0x1A4 >> 1] = function() { return SAER.playfield.COLOR_READ(18); };
readMap[0x1A6 >> 1] = function() { return SAER.playfield.COLOR_READ(19); };
readMap[0x1A8 >> 1] = function() { return SAER.playfield.COLOR_READ(20); };
readMap[0x1AA >> 1] = function() { return SAER.playfield.COLOR_READ(21); };
readMap[0x1AC >> 1] = function() { return SAER.playfield.COLOR_READ(22); };
readMap[0x1AE >> 1] = function() { return SAER.playfield.COLOR_READ(23); };
readMap[0x1B0 >> 1] = function() { return SAER.playfield.COLOR_READ(24); };
readMap[0x1B2 >> 1] = function() { return SAER.playfield.COLOR_READ(25); };
readMap[0x1B4 >> 1] = function() { return SAER.playfield.COLOR_READ(26); };
readMap[0x1B6 >> 1] = function() { return SAER.playfield.COLOR_READ(27); };
readMap[0x1B8 >> 1] = function() { return SAER.playfield.COLOR_READ(28); };
readMap[0x1BA >> 1] = function() { return SAER.playfield.COLOR_READ(29); };
readMap[0x1BC >> 1] = function() { return SAER.playfield.COLOR_READ(30); };
readMap[0x1BE >> 1] = function() { return SAER.playfield.COLOR_READ(31); };
}
}
function createWriteMap() {
var i;
writeMap = new Array(0x100);
for (i = 0; i < writeMap.length; i++) writeMap[i] = false;
writeMap[0x00E >> 1] = function(value, hpos) { SAER.playfield.CLXDAT(); };
writeMap[0x020 >> 1] = function(value, hpos) { SAER.disk.DSKPTH(value); };
writeMap[0x022 >> 1] = function(value, hpos) { SAER.disk.DSKPTL(value); };
writeMap[0x024 >> 1] = function(value, hpos) { SAER.disk.DSKLEN(value, hpos); };
writeMap[0x026 >> 1] = function(value, hpos) { /* SAER.disk.DSKDAT(value); */ };
writeMap[0x028 >> 1] = function(value, hpos) { SAER.playfield.REFPTR(value); };
writeMap[0x02A >> 1] = function(value, hpos) { SAER.playfield.VPOSW(value); };
writeMap[0x02C >> 1] = function(value, hpos) { SAER.playfield.VHPOSW(value); };
writeMap[0x02E >> 1] = function(value, hpos) { SAER.copper.COPCON(value); };
writeMap[0x030 >> 1] = function(value, hpos) { SAER.serial.SERDAT(value); };
writeMap[0x032 >> 1] = function(value, hpos) { SAER.serial.SERPER(value); };
writeMap[0x034 >> 1] = function(value, hpos) { SAER.input.POTGO(value); };
writeMap[0x036 >> 1] = function(value, hpos) { SAER.input.JOYTEST(value); };
/* 038 STREQU S * * * Strobe for horiz sync with VB and EQU
03A STRVBL S * * * Strobe for horiz sync with VB (vert blank)
03C STRHOR S * * * Strobe for horiz sync
03E STRLONG S * * * Strobe for identification of long horiz line*/
writeMap[0x040 >> 1] = function(value, hpos) { SAER.blitter.BLTCON0(hpos, value); };
writeMap[0x042 >> 1] = function(value, hpos) { SAER.blitter.BLTCON1(hpos, value); };
writeMap[0x044 >> 1] = function(value, hpos) { SAER.blitter.BLTAFWM(hpos, value); };
writeMap[0x046 >> 1] = function(value, hpos) { SAER.blitter.BLTALWM(hpos, value); };
writeMap[0x048 >> 1] = function(value, hpos) { SAER.blitter.BLTCPTH(hpos, value); };
writeMap[0x04A >> 1] = function(value, hpos) { SAER.blitter.BLTCPTL(hpos, value); };
writeMap[0x04C >> 1] = function(value, hpos) { SAER.blitter.BLTBPTH(hpos, value); };
writeMap[0x04E >> 1] = function(value, hpos) { SAER.blitter.BLTBPTL(hpos, value); };
writeMap[0x050 >> 1] = function(value, hpos) { SAER.blitter.BLTAPTH(hpos, value); };
writeMap[0x052 >> 1] = function(value, hpos) { SAER.blitter.BLTAPTL(hpos, value); };
writeMap[0x054 >> 1] = function(value, hpos) { SAER.blitter.BLTDPTH(hpos, value); };
writeMap[0x056 >> 1] = function(value, hpos) { SAER.blitter.BLTDPTL(hpos, value); };
writeMap[0x058 >> 1] = function(value, hpos) { SAER.blitter.BLTSIZE(hpos, value); };
if (SAEV_config.chipset.mask & SAEC_Config_Chipset_Mask_ECS_AGNUS) {
writeMap[0x05A >> 1] = function(value, hpos) { SAER.blitter.BLTCON0L(hpos, value); };
writeMap[0x05C >> 1] = function(value, hpos) { SAER.blitter.BLTSIZV(hpos, value); };
writeMap[0x05E >> 1] = function(value, hpos) { SAER.blitter.BLTSIZH(hpos, value); };
}
writeMap[0x060 >> 1] = function(value, hpos) { SAER.blitter.BLTCMOD(hpos, value); };
writeMap[0x062 >> 1] = function(value, hpos) { SAER.blitter.BLTBMOD(hpos, value); };
writeMap[0x064 >> 1] = function(value, hpos) { SAER.blitter.BLTAMOD(hpos, value); };
writeMap[0x066 >> 1] = function(value, hpos) { SAER.blitter.BLTDMOD(hpos, value); };
/* - */
writeMap[0x070 >> 1] = function(value, hpos) { SAER.blitter.BLTCDAT(hpos, value); };
writeMap[0x072 >> 1] = function(value, hpos) { SAER.blitter.BLTBDAT(hpos, value); };
writeMap[0x074 >> 1] = function(value, hpos) { SAER.blitter.BLTADAT(hpos, value); };
/*if (SAEV_config.chipset.mask & (SAEC_Config_Chipset_Mask_ECS_AGNUS | SAEC_Config_Chipset_Mask_ECS_DENISE)) {
078 SPRHDAT W * * Ext. logic UHRES sprite pointer and data identifier
07A BPLHDAT W * * Ext. logic UHRES bit plane identifier
}*/
writeMap[0x07E >> 1] = function(value, hpos) { SAER.disk.DSKSYNC(hpos, value); };
writeMap[0x080 >> 1] = function(value, hpos) { SAER.copper.COP1LCH(value); };
writeMap[0x082 >> 1] = function(value, hpos) { SAER.copper.COP1LCL(value); };
writeMap[0x084 >> 1] = function(value, hpos) { SAER.copper.COP2LCH(value); };
writeMap[0x086 >> 1] = function(value, hpos) { SAER.copper.COP2LCL(value); };
writeMap[0x088 >> 1] = function(value, hpos) { SAER.copper.COPJMP(1, 0); };
writeMap[0x08A >> 1] = function(value, hpos) { SAER.copper.COPJMP(2, 0); };
writeMap[0x08E >> 1] = function(value, hpos) { SAER.playfield.DIWSTRT(hpos, value); };
writeMap[0x090 >> 1] = function(value, hpos) { SAER.playfield.DIWSTOP(hpos, value); };
writeMap[0x092 >> 1] = function(value, hpos) { SAER.playfield.DDFSTRT(hpos, value); };
writeMap[0x094 >> 1] = function(value, hpos) { SAER.playfield.DDFSTOP(hpos, value); };
writeMap[0x096 >> 1] = DMACON;
writeMap[0x098 >> 1] = function(value, hpos) { SAER.playfield.CLXCON(value); };
writeMap[0x09A >> 1] = INTENA;
writeMap[0x09C >> 1] = function(value, hpos) { SAER.custom.INTREQ(value); };
writeMap[0x09E >> 1] = ADKCON;
writeMap[0x0A0 >> 1] = function(value, hpos) { SAER.audio.AUDxLCH(0, value); };
writeMap[0x0A2 >> 1] = function(value, hpos) { SAER.audio.AUDxLCL(0, value); };
writeMap[0x0A4 >> 1] = function(value, hpos) { SAER.audio.AUDxLEN(0, value); };
writeMap[0x0A6 >> 1] = function(value, hpos) { SAER.audio.AUDxPER(0, value); };
writeMap[0x0A8 >> 1] = function(value, hpos) { SAER.audio.AUDxVOL(0, value); };
writeMap[0x0AA >> 1] = function(value, hpos) { SAER.audio.AUDxDAT(0, value); };
writeMap[0x0B0 >> 1] = function(value, hpos) { SAER.audio.AUDxLCH(1, value); };
writeMap[0x0B2 >> 1] = function(value, hpos) { SAER.audio.AUDxLCL(1, value); };
writeMap[0x0B4 >> 1] = function(value, hpos) { SAER.audio.AUDxLEN(1, value); };
writeMap[0x0B6 >> 1] = function(value, hpos) { SAER.audio.AUDxPER(1, value); };
writeMap[0x0B8 >> 1] = function(value, hpos) { SAER.audio.AUDxVOL(1, value); };
writeMap[0x0BA >> 1] = function(value, hpos) { SAER.audio.AUDxDAT(1, value); };
writeMap[0x0C0 >> 1] = function(value, hpos) { SAER.audio.AUDxLCH(2, value); };
writeMap[0x0C2 >> 1] = function(value, hpos) { SAER.audio.AUDxLCL(2, value); };
writeMap[0x0C4 >> 1] = function(value, hpos) { SAER.audio.AUDxLEN(2, value); };
writeMap[0x0C6 >> 1] = function(value, hpos) { SAER.audio.AUDxPER(2, value); };
writeMap[0x0C8 >> 1] = function(value, hpos) { SAER.audio.AUDxVOL(2, value); };
writeMap[0x0CA >> 1] = function(value, hpos) { SAER.audio.AUDxDAT(2, value); };
writeMap[0x0D0 >> 1] = function(value, hpos) { SAER.audio.AUDxLCH(3, value); };
writeMap[0x0D2 >> 1] = function(value, hpos) { SAER.audio.AUDxLCL(3, value); };
writeMap[0x0D4 >> 1] = function(value, hpos) { SAER.audio.AUDxLEN(3, value); };
writeMap[0x0D6 >> 1] = function(value, hpos) { SAER.audio.AUDxPER(3, value); };
writeMap[0x0D8 >> 1] = function(value, hpos) { SAER.audio.AUDxVOL(3, value); };
writeMap[0x0DA >> 1] = function(value, hpos) { SAER.audio.AUDxDAT(3, value); };
writeMap[0x0E0 >> 1] = function(value, hpos) { SAER.playfield.BPLxPTH(hpos, value, 0); };
writeMap[0x0E2 >> 1] = function(value, hpos) { SAER.playfield.BPLxPTL(hpos, value, 0); };
writeMap[0x0E4 >> 1] = function(value, hpos) { SAER.playfield.BPLxPTH(hpos, value, 1); };
writeMap[0x0E6 >> 1] = function(value, hpos) { SAER.playfield.BPLxPTL(hpos, value, 1); };
writeMap[0x0E8 >> 1] = function(value, hpos) { SAER.playfield.BPLxPTH(hpos, value, 2); };
writeMap[0x0EA >> 1] = function(value, hpos) { SAER.playfield.BPLxPTL(hpos, value, 2); };
writeMap[0x0EC >> 1] = function(value, hpos) { SAER.playfield.BPLxPTH(hpos, value, 3); };
writeMap[0x0EE >> 1] = function(value, hpos) { SAER.playfield.BPLxPTL(hpos, value, 3); };
writeMap[0x0F0 >> 1] = function(value, hpos) { SAER.playfield.BPLxPTH(hpos, value, 4); };
writeMap[0x0F2 >> 1] = function(value, hpos) { SAER.playfield.BPLxPTL(hpos, value, 4); };
writeMap[0x0F4 >> 1] = function(value, hpos) { SAER.playfield.BPLxPTH(hpos, value, 5); };
writeMap[0x0F6 >> 1] = function(value, hpos) { SAER.playfield.BPLxPTL(hpos, value, 5); };
if (SAEV_config.chipset.mask & SAEC_Config_Chipset_Mask_AGA) {
writeMap[0x0F8 >> 1] = function(value, hpos) { SAER.playfield.BPLxPTH(hpos, value, 6); };
writeMap[0x0FA >> 1] = function(value, hpos) { SAER.playfield.BPLxPTL(hpos, value, 6); };
writeMap[0x0FC >> 1] = function(value, hpos) { SAER.playfield.BPLxPTH(hpos, value, 7); };
writeMap[0x0FE >> 1] = function(value, hpos) { SAER.playfield.BPLxPTL(hpos, value, 7); };
}
writeMap[0x100 >> 1] = function(value, hpos) { SAER.playfield.BPLCON0(hpos, value); };
writeMap[0x102 >> 1] = function(value, hpos) { SAER.playfield.BPLCON1(hpos, value); };
writeMap[0x104 >> 1] = function(value, hpos) { SAER.playfield.BPLCON2(hpos, value); };
if (SAEV_config.chipset.mask & SAEC_Config_Chipset_Mask_ECS_DENISE)
writeMap[0x106 >> 1] = function(value, hpos) { SAER.playfield.BPLCON3(hpos, value); };
writeMap[0x108 >> 1] = function(value, hpos) { SAER.playfield.BPL1MOD(hpos, value); };
writeMap[0x10A >> 1] = function(value, hpos) { SAER.playfield.BPL2MOD(hpos, value); };
if (SAEV_config.chipset.mask & SAEC_Config_Chipset_Mask_AGA) {
writeMap[0x10C >> 1] = function(value, hpos) { SAER.playfield.BPLCON4(hpos, value); };
writeMap[0x10E >> 1] = function(value, hpos) { SAER.playfield.CLXCON2(value); };
}
writeMap[0x110 >> 1] = function(value, hpos) { SAER.playfield.BPLxDAT(hpos, 0, value); };
writeMap[0x112 >> 1] = function(value, hpos) { SAER.playfield.BPLxDAT(hpos, 1, value); };
writeMap[0x114 >> 1] = function(value, hpos) { SAER.playfield.BPLxDAT(hpos, 2, value); };
writeMap[0x116 >> 1] = function(value, hpos) { SAER.playfield.BPLxDAT(hpos, 3, value); };
writeMap[0x118 >> 1] = function(value, hpos) { SAER.playfield.BPLxDAT(hpos, 4, value); };
writeMap[0x11A >> 1] = function(value, hpos) { SAER.playfield.BPLxDAT(hpos, 5, value); };
if (SAEV_config.chipset.mask & SAEC_Config_Chipset_Mask_AGA) {
writeMap[0x11C >> 1] = function(value, hpos) { SAER.playfield.BPLxDAT(hpos, 6, value); };
writeMap[0x11E >> 1] = function(value, hpos) { SAER.playfield.BPLxDAT(hpos, 7, value); };
}
writeMap[0x120 >> 1] = function(value, hpos) { SAER.playfield.SPRxPTH(hpos, value, 0); };
writeMap[0x122 >> 1] = function(value, hpos) { SAER.playfield.SPRxPTL(hpos, value, 0); };
writeMap[0x124 >> 1] = function(value, hpos) { SAER.playfield.SPRxPTH(hpos, value, 1); };
writeMap[0x126 >> 1] = function(value, hpos) { SAER.playfield.SPRxPTL(hpos, value, 1); };
writeMap[0x128 >> 1] = function(value, hpos) { SAER.playfield.SPRxPTH(hpos, value, 2); };
writeMap[0x12A >> 1] = function(value, hpos) { SAER.playfield.SPRxPTL(hpos, value, 2); };
writeMap[0x12C >> 1] = function(value, hpos) { SAER.playfield.SPRxPTH(hpos, value, 3); };
writeMap[0x12E >> 1] = function(value, hpos) { SAER.playfield.SPRxPTL(hpos, value, 3); };
writeMap[0x130 >> 1] = function(value, hpos) { SAER.playfield.SPRxPTH(hpos, value, 4); };
writeMap[0x132 >> 1] = function(value, hpos) { SAER.playfield.SPRxPTL(hpos, value, 4); };
writeMap[0x134 >> 1] = function(value, hpos) { SAER.playfield.SPRxPTH(hpos, value, 5); };
writeMap[0x136 >> 1] = function(value, hpos) { SAER.playfield.SPRxPTL(hpos, value, 5); };
writeMap[0x138 >> 1] = function(value, hpos) { SAER.playfield.SPRxPTH(hpos, value, 6); };
writeMap[0x13A >> 1] = function(value, hpos) { SAER.playfield.SPRxPTL(hpos, value, 6); };
writeMap[0x13C >> 1] = function(value, hpos) { SAER.playfield.SPRxPTH(hpos, value, 7); };
writeMap[0x13E >> 1] = function(value, hpos) { SAER.playfield.SPRxPTL(hpos, value, 7); };
writeMap[0x140 >> 1] = function(value, hpos) { SAER.playfield.SPRxPOS(hpos, value, 0); };
writeMap[0x142 >> 1] = function(value, hpos) { SAER.playfield.SPRxCTL(hpos, value, 0); };
writeMap[0x144 >> 1] = function(value, hpos) { SAER.playfield.SPRxDATA(hpos, value, 0); };
writeMap[0x146 >> 1] = function(value, hpos) { SAER.playfield.SPRxDATB(hpos, value, 0); };
writeMap[0x148 >> 1] = function(value, hpos) { SAER.playfield.SPRxPOS(hpos, value, 1); };
writeMap[0x14A >> 1] = function(value, hpos) { SAER.playfield.SPRxCTL(hpos, value, 1); };
writeMap[0x14C >> 1] = function(value, hpos) { SAER.playfield.SPRxDATA(hpos, value, 1); };
writeMap[0x14E >> 1] = function(value, hpos) { SAER.playfield.SPRxDATB(hpos, value, 1); };
writeMap[0x150 >> 1] = function(value, hpos) { SAER.playfield.SPRxPOS(hpos, value, 2); };
writeMap[0x152 >> 1] = function(value, hpos) { SAER.playfield.SPRxCTL(hpos, value, 2); };
writeMap[0x154 >> 1] = function(value, hpos) { SAER.playfield.SPRxDATA(hpos, value, 2); };
writeMap[0x156 >> 1] = function(value, hpos) { SAER.playfield.SPRxDATB(hpos, value, 2); };
writeMap[0x158 >> 1] = function(value, hpos) { SAER.playfield.SPRxPOS(hpos, value, 3); };
writeMap[0x15A >> 1] = function(value, hpos) { SAER.playfield.SPRxCTL(hpos, value, 3); };
writeMap[0x15C >> 1] = function(value, hpos) { SAER.playfield.SPRxDATA(hpos, value, 3); };
writeMap[0x15E >> 1] = function(value, hpos) { SAER.playfield.SPRxDATB(hpos, value, 3); };
writeMap[0x160 >> 1] = function(value, hpos) { SAER.playfield.SPRxPOS(hpos, value, 4); };
writeMap[0x162 >> 1] = function(value, hpos) { SAER.playfield.SPRxCTL(hpos, value, 4); };
writeMap[0x164 >> 1] = function(value, hpos) { SAER.playfield.SPRxDATA(hpos, value, 4); };
writeMap[0x166 >> 1] = function(value, hpos) { SAER.playfield.SPRxDATB(hpos, value, 4); };
writeMap[0x168 >> 1] = function(value, hpos) { SAER.playfield.SPRxPOS(hpos, value, 5); };
writeMap[0x16A >> 1] = function(value, hpos) { SAER.playfield.SPRxCTL(hpos, value, 5); };
writeMap[0x16C >> 1] = function(value, hpos) { SAER.playfield.SPRxDATA(hpos, value, 5); };
writeMap[0x16E >> 1] = function(value, hpos) { SAER.playfield.SPRxDATB(hpos, value, 5); };
writeMap[0x170 >> 1] = function(value, hpos) { SAER.playfield.SPRxPOS(hpos, value, 6); };
writeMap[0x172 >> 1] = function(value, hpos) { SAER.playfield.SPRxCTL(hpos, value, 6); };
writeMap[0x174 >> 1] = function(value, hpos) { SAER.playfield.SPRxDATA(hpos, value, 6); };
writeMap[0x176 >> 1] = function(value, hpos) { SAER.playfield.SPRxDATB(hpos, value, 6); };
writeMap[0x178 >> 1] = function(value, hpos) { SAER.playfield.SPRxPOS(hpos, value, 7); };
writeMap[0x17A >> 1] = function(value, hpos) { SAER.playfield.SPRxCTL(hpos, value, 7); };
writeMap[0x17C >> 1] = function(value, hpos) { SAER.playfield.SPRxDATA(hpos, value, 7); };
writeMap[0x17E >> 1] = function(value, hpos) { SAER.playfield.SPRxDATB(hpos, value, 7); };
writeMap[0x180 >> 1] = function(value, hpos) { SAER.playfield.COLOR_WRITE(hpos, value & 0xfff, 0); };
writeMap[0x182 >> 1] = function(value, hpos) { SAER.playfield.COLOR_WRITE(hpos, value & 0xfff, 1); };
writeMap[0x184 >> 1] = function(value, hpos) { SAER.playfield.COLOR_WRITE(hpos, value & 0xfff, 2); };
writeMap[0x186 >> 1] = function(value, hpos) { SAER.playfield.COLOR_WRITE(hpos, value & 0xfff, 3); };
writeMap[0x188 >> 1] = function(value, hpos) { SAER.playfield.COLOR_WRITE(hpos, value & 0xfff, 4); };
writeMap[0x18A >> 1] = function(value, hpos) { SAER.playfield.COLOR_WRITE(hpos, value & 0xfff, 5); };
writeMap[0x18C >> 1] = function(value, hpos) { SAER.playfield.COLOR_WRITE(hpos, value & 0xfff, 6); };
writeMap[0x18E >> 1] = function(value, hpos) { SAER.playfield.COLOR_WRITE(hpos, value & 0xfff, 7); };
writeMap[0x190 >> 1] = function(value, hpos) { SAER.playfield.COLOR_WRITE(hpos, value & 0xfff, 8); };
writeMap[0x192 >> 1] = function(value, hpos) { SAER.playfield.COLOR_WRITE(hpos, value & 0xfff, 9); };
writeMap[0x194 >> 1] = function(value, hpos) { SAER.playfield.COLOR_WRITE(hpos, value & 0xfff, 10); };
writeMap[0x196 >> 1] = function(value, hpos) { SAER.playfield.COLOR_WRITE(hpos, value & 0xfff, 11); };
writeMap[0x198 >> 1] = function(value, hpos) { SAER.playfield.COLOR_WRITE(hpos, value & 0xfff, 12); };
writeMap[0x19A >> 1] = function(value, hpos) { SAER.playfield.COLOR_WRITE(hpos, value & 0xfff, 13); };
writeMap[0x19C >> 1] = function(value, hpos) { SAER.playfield.COLOR_WRITE(hpos, value & 0xfff, 14); };
writeMap[0x19E >> 1] = function(value, hpos) { SAER.playfield.COLOR_WRITE(hpos, value & 0xfff, 15); };
writeMap[0x1A0 >> 1] = function(value, hpos) { SAER.playfield.COLOR_WRITE(hpos, value & 0xfff, 16); };
writeMap[0x1A2 >> 1] = function(value, hpos) { SAER.playfield.COLOR_WRITE(hpos, value & 0xfff, 17); };
writeMap[0x1A4 >> 1] = function(value, hpos) { SAER.playfield.COLOR_WRITE(hpos, value & 0xfff, 18); };
writeMap[0x1A6 >> 1] = function(value, hpos) { SAER.playfield.COLOR_WRITE(hpos, value & 0xfff, 19); };
writeMap[0x1A8 >> 1] = function(value, hpos) { SAER.playfield.COLOR_WRITE(hpos, value & 0xfff, 20); };
writeMap[0x1AA >> 1] = function(value, hpos) { SAER.playfield.COLOR_WRITE(hpos, value & 0xfff, 21); };
writeMap[0x1AC >> 1] = function(value, hpos) { SAER.playfield.COLOR_WRITE(hpos, value & 0xfff, 22); };
writeMap[0x1AE >> 1] = function(value, hpos) { SAER.playfield.COLOR_WRITE(hpos, value & 0xfff, 23); };
writeMap[0x1B0 >> 1] = function(value, hpos) { SAER.playfield.COLOR_WRITE(hpos, value & 0xfff, 24); };
writeMap[0x1B2 >> 1] = function(value, hpos) { SAER.playfield.COLOR_WRITE(hpos, value & 0xfff, 25); };
writeMap[0x1B4 >> 1] = function(value, hpos) { SAER.playfield.COLOR_WRITE(hpos, value & 0xfff, 26); };
writeMap[0x1B6 >> 1] = function(value, hpos) { SAER.playfield.COLOR_WRITE(hpos, value & 0xfff, 27); };
writeMap[0x1B8 >> 1] = function(value, hpos) { SAER.playfield.COLOR_WRITE(hpos, value & 0xfff, 28); };
writeMap[0x1BA >> 1] = function(value, hpos) { SAER.playfield.COLOR_WRITE(hpos, value & 0xfff, 29); };
writeMap[0x1BC >> 1] = function(value, hpos) { SAER.playfield.COLOR_WRITE(hpos, value & 0xfff, 30); };
writeMap[0x1BE >> 1] = function(value, hpos) { SAER.playfield.COLOR_WRITE(hpos, value & 0xfff, 31); };
if (SAEV_config.chipset.mask & SAEC_Config_Chipset_Mask_ECS_AGNUS) {
writeMap[0x1C0 >> 1] = function(value, hpos) { SAER.playfield.HTOTAL(value); };
writeMap[0x1C2 >> 1] = function(value, hpos) { SAER.playfield.HSSTOP(value); };
writeMap[0x1C4 >> 1] = function(value, hpos) { SAER.playfield.HBSTRT(value); };
writeMap[0x1C6 >> 1] = function(value, hpos) { SAER.playfield.HBSTOP(value); };
writeMap[0x1C8 >> 1] = function(value, hpos) { SAER.playfield.VTOTAL(value); };
writeMap[0x1CA >> 1] = function(value, hpos) { SAER.playfield.VSSTOP(value); };
writeMap[0x1CC >> 1] = function(value, hpos) { SAER.playfield.VBSTRT(value); };
writeMap[0x1CE >> 1] = function(value, hpos) { SAER.playfield.VBSTOP(value); };
/* 1D0 SPRHSTRT W * * UHRES sprite vertical start
1D2 SPRHSTOP W * * UHRES sprite vertical stop
1D4 BPLHSTRT W * * UHRES bit plane vertical start
1D6 BPLHSTOP W * * UHRES bit plane vertical stop
1D8 HHPOSW W * * DUAL mode hires H beam counter write
1DA HHPOSR R * * DUAL mode hires H beam counter read*/
writeMap[0x1DC >> 1] = function(value, hpos) { SAER.playfield.BEAMCON0(value); };
writeMap[0x1DE >> 1] = function(value, hpos) { SAER.playfield.HSSTRT(value); };
writeMap[0x1E0 >> 1] = function(value, hpos) { SAER.playfield.VSSTRT(value); };
writeMap[0x1E2 >> 1] = function(value, hpos) { SAER.playfield.HCENTER(value); };
}
if (SAEV_config.chipset.mask & (SAEC_Config_Chipset_Mask_ECS_AGNUS | SAEC_Config_Chipset_Mask_ECS_DENISE))
writeMap[0x1E4 >> 1] = function(value, hpos) { SAER.playfield.DIWHIGH(hpos, value); };
/* 1E6 BPLHMOD W * * UHRES bit plane modulo
1E8 SPRHPTH W * * UHRES sprite pointer (high 5 bits)
1EA SPRHPTL W * * UHRES sprite pointer (low 15 bits)
1EC BPLHPTH W * * VRam (UHRES) bitplane pointer (hi 5 bits)
1EE BPLHPTL W * * VRam (UHRES) bitplane pointer (lo 15 bits)
*/
if (SAEV_config.chipset.mask & SAEC_Config_Chipset_Mask_AGA)
writeMap[0x1FC >> 1] = function(value, hpos) { SAER.playfield.FMODE(hpos, value); };
writeMap[0x1FE >> 1] = function(value, hpos) { SAER.playfield.FNULL(value); };
}
}
/*-----------------------------------------------------------------------*/
function SAEO_Devices() {
this.virtualdevice_init = function() {
//#ifdef AUTOCONFIG
SAER.autoconf.init(); //rtarea_setup
//#endif
//#ifdef FILESYS
SAER.autoconf.setup(); //rtarea_init
/*uaeres_install();
hardfile_install();
#endif
#ifdef AUTOCONFIG*/
SAER.expansion.setup();
/*emulib_install();
uaeexe_install();
#endif
#ifdef FILESYS
filesys_install();
#endif
#ifdef CDTV
cdtvcr_reset();
#endif*/
}
this.reset = function(hardreset) {
SAER.gayle.reset(hardreset);
//idecontroller_reset();
SAER.memory.a1000_reset();
SAER.disk.reset();
SAER.cia.reset();
SAER.gayle.reset(0);
/*#ifdef WITH_TOCCATA
sndboard_reset();
#endif*/
//#ifdef AUTOCONFIG
SAER.expansion.reset();
SAER.autoconf.reset();
//#endif
}
this.vsync_pre = function() {
//SAER.audio.vsync(); empty
SAER.cia.vsync();
/*inputdevice_vsync();
filesys_vsync();
sampler_vsync();
clipboard_vsync();
#ifdef RETROPLATFORM
rp_vsync();
#endif
#ifdef CD32
cd32_fmv_vsync_handler();
#endif
statusline_vsync();
*/
}
this.vsync_post = function() {
/*#ifdef WITH_TOCCATA
sndboard_vsync();
#endif*/
}
this.hsync = function(onvsync) {
/*#ifdef CD32
AKIKO_hsync_handler();
cd32_fmv_hsync_handler();
#endif
#ifdef CDTV
CDTV_hsync_handler();
CDTVCR_hsync_handler();
#endif*/
SAER.blitter.decide_blitter(-1);
/*#ifdef PICASSO96
picasso_handle_hsync();
#endif
#ifdef WITH_TOCCATA
sndboard_hsync();
#endif*/
SAER.disk.hsync();
if (SAEV_config.audio.mode != SAEC_Config_Audio_Mode_Off)
SAER.audio.hsync();
//SAER.cia.hsync(); //OWN empty
//serial_hsynchandler();
if (SAEV_config.chipset.ide >= 0 || SAEV_config.chipset.pcmcia) //OWN ATT
SAER.gayle.hsync();
//idecontroller_hsync();
}
this.rethink = function() {
SAER.cia.rethink();
/*#ifdef CDTV
rethink_cdtv();
rethink_cdtvcr();
#endif
#ifdef CD32
rethink_akiko();
rethink_cd32fmv();
#endif
#ifdef WITH_TOCCATA
sndboard_rethink();
#endif*/
SAER.gayle.rethink();
//idecontroller_rethink();
//SAER.autoconf.rethink_traps(); //empty
}
this.update_sound = function(clk, syncadjust) {
SAER.audio.update_sound(clk);
//update_sndboard_sound (clk / syncadjust);
//update_cda_sound(clk / syncadjust);
}
/*this.update_sync = function(svpos, syncadjust) {
cd32_fmv_set_sync(svpos, syncadjust);
}*/
}