mirror of
https://github.com/whscullin/apple2js.git
synced 2024-01-12 14:14:38 +00:00
Merge pull request #4 from whscullin/whscullin/audit_fixes_1
Fix things revealed by zellyn/a2audit
This commit is contained in:
commit
dc146bf630
@ -111,26 +111,34 @@ function Apple2IO(cpu, callbacks)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function _access(off) {
|
function _access(off, val) {
|
||||||
var result = 0;
|
var result = 0;
|
||||||
var now = cpu.cycles();
|
var now = cpu.cycles();
|
||||||
var delta = now - _trigger;
|
var delta = now - _trigger;
|
||||||
switch (off) {
|
switch (off) {
|
||||||
case LOC.CLR80VID:
|
case LOC.CLR80VID:
|
||||||
// _debug('80 Column Mode off');
|
if ('_80col' in callbacks && val !== undefined) {
|
||||||
if ('_80col' in callbacks) callbacks._80col(false);
|
_debug('80 Column Mode off');
|
||||||
|
callbacks._80col(false);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case LOC.SET80VID:
|
case LOC.SET80VID:
|
||||||
// _debug('80 Column Mode on');
|
if ('_80col' in callbacks && val !== undefined) {
|
||||||
if ('_80col' in callbacks) callbacks._80col(true);
|
_debug('80 Column Mode on');
|
||||||
|
callbacks._80col(true);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case LOC.CLRALTCH:
|
case LOC.CLRALTCH:
|
||||||
// _debug('Alt Char off');
|
if ('altchar' in callbacks && val !== undefined) {
|
||||||
if ('altchar' in callbacks) callbacks.altchar(false);
|
_debug('Alt Char off');
|
||||||
|
callbacks.altchar(false);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case LOC.SETALTCH:
|
case LOC.SETALTCH:
|
||||||
// _debug('Alt Char on');
|
if ('altchar' in callbacks && val !== undefined) {
|
||||||
if ('altchar' in callbacks) callbacks.altchar(true);
|
_debug('Alt Char on');
|
||||||
|
callbacks.altchar(true);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case LOC.CLRTEXT:
|
case LOC.CLRTEXT:
|
||||||
_debug('Graphics Mode');
|
_debug('Graphics Mode');
|
||||||
@ -227,7 +235,7 @@ function Apple2IO(cpu, callbacks)
|
|||||||
case LOC.STROBE:
|
case LOC.STROBE:
|
||||||
_key &= 0x7f;
|
_key &= 0x7f;
|
||||||
if (_buffer.length > 0) {
|
if (_buffer.length > 0) {
|
||||||
var val = _buffer.shift();
|
val = _buffer.shift();
|
||||||
if (val == '\n') {
|
if (val == '\n') {
|
||||||
val = '\r';
|
val = '\r';
|
||||||
}
|
}
|
||||||
@ -372,7 +380,7 @@ function Apple2IO(cpu, callbacks)
|
|||||||
|
|
||||||
switch (page) {
|
switch (page) {
|
||||||
case 0xc0:
|
case 0xc0:
|
||||||
this.ioSwitch(off);
|
this.ioSwitch(off, val);
|
||||||
break;
|
break;
|
||||||
case 0xc1:
|
case 0xc1:
|
||||||
case 0xc2:
|
case 0xc2:
|
||||||
|
@ -24,8 +24,7 @@ function LanguageCard(io, slot, rom) {
|
|||||||
var _readbsr = false;
|
var _readbsr = false;
|
||||||
var _writebsr = false;
|
var _writebsr = false;
|
||||||
var _bsr2 = false;
|
var _bsr2 = false;
|
||||||
|
var _prewrite = false;
|
||||||
var _last = 0x00;
|
|
||||||
|
|
||||||
var _read1 = null;
|
var _read1 = null;
|
||||||
var _read2 = null;
|
var _read2 = null;
|
||||||
@ -48,7 +47,8 @@ function LanguageCard(io, slot, rom) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function _debug() {
|
function _debug() {
|
||||||
// debug.apply(arguments);
|
/*eslint no-console: 0 */
|
||||||
|
// console.debug.apply(null, arguments);
|
||||||
}
|
}
|
||||||
|
|
||||||
_init();
|
_init();
|
||||||
@ -83,64 +83,72 @@ function LanguageCard(io, slot, rom) {
|
|||||||
_READWRBSR1: 0x8f
|
_READWRBSR1: 0x8f
|
||||||
};
|
};
|
||||||
|
|
||||||
function _access(off) {
|
function _access(off, val) {
|
||||||
var result = 0;
|
var result = 0;
|
||||||
switch (off) {
|
switch (off) {
|
||||||
case LOC.READBSR2:
|
case LOC.READBSR2: // 0xC080
|
||||||
case LOC._READBSR2:
|
case LOC._READBSR2: // 0xC084
|
||||||
_readbsr = true;
|
_readbsr = true;
|
||||||
_writebsr = false;
|
_writebsr = false;
|
||||||
_bsr2 = true;
|
_bsr2 = true;
|
||||||
|
_prewrite = false;
|
||||||
_debug('Bank 2 Read');
|
_debug('Bank 2 Read');
|
||||||
break;
|
break;
|
||||||
case LOC.WRITEBSR2:
|
case LOC.WRITEBSR2: // 0xC081
|
||||||
case LOC._WRITEBSR2:
|
case LOC._WRITEBSR2: // 0xC085
|
||||||
_readbsr = false;
|
_readbsr = false;
|
||||||
_writebsr = ((_last & 0xF3) == (off & 0xF3));
|
_writebsr = _prewrite;
|
||||||
_bsr2 = true;
|
_bsr2 = true;
|
||||||
|
_prewrite = true;
|
||||||
_debug('Bank 2 Write');
|
_debug('Bank 2 Write');
|
||||||
break;
|
break;
|
||||||
case LOC.OFFBSR2:
|
case LOC.OFFBSR2: // 0xC082
|
||||||
case LOC._OFFBSR2:
|
case LOC._OFFBSR2: // 0xC086
|
||||||
_readbsr = false;
|
_readbsr = false;
|
||||||
_writebsr = false;
|
_writebsr = false;
|
||||||
_bsr2 = true;
|
_bsr2 = true;
|
||||||
|
_prewrite = false;
|
||||||
_debug('Bank 2 Off');
|
_debug('Bank 2 Off');
|
||||||
break;
|
break;
|
||||||
case LOC.READWRBSR2:
|
case LOC.READWRBSR2: // 0xC083
|
||||||
case LOC._READWRBSR2:
|
case LOC._READWRBSR2: // 0xC087
|
||||||
_readbsr = true;
|
_readbsr = true;
|
||||||
_writebsr = ((_last & 0xF3) == (off & 0xF3));
|
_writebsr = _prewrite;
|
||||||
_bsr2 = true;
|
_bsr2 = true;
|
||||||
|
_prewrite = true;
|
||||||
_debug('Bank 2 Read/Write');
|
_debug('Bank 2 Read/Write');
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case LOC.READBSR1:
|
case LOC.READBSR1: // 0xC088
|
||||||
case LOC._READBSR1:
|
case LOC._READBSR1: // 0xC08C
|
||||||
_readbsr = true;
|
_readbsr = true;
|
||||||
_writebsr = false;
|
_writebsr = false;
|
||||||
_bsr2 = false;
|
_bsr2 = false;
|
||||||
|
_prewrite = false;
|
||||||
_debug('Bank 1 Read');
|
_debug('Bank 1 Read');
|
||||||
break;
|
break;
|
||||||
case LOC.WRITEBSR1:
|
case LOC.WRITEBSR1: // 0xC089
|
||||||
case LOC._WRITEBSR1:
|
case LOC._WRITEBSR1: // 0xC08D
|
||||||
_readbsr = false;
|
_readbsr = false;
|
||||||
_writebsr = ((_last & 0xF3) == (off & 0xF3));
|
_writebsr = _prewrite;
|
||||||
_bsr2 = false;
|
_bsr2 = false;
|
||||||
|
_prewrite = true;
|
||||||
_debug('Bank 1 Write');
|
_debug('Bank 1 Write');
|
||||||
break;
|
break;
|
||||||
case LOC.OFFBSR1:
|
case LOC.OFFBSR1: // 0xC08A
|
||||||
case LOC._OFFBSR1:
|
case LOC._OFFBSR1: // 0xC08E
|
||||||
_readbsr = false;
|
_readbsr = false;
|
||||||
_writebsr = false;
|
_writebsr = false;
|
||||||
_bsr2 = false;
|
_bsr2 = false;
|
||||||
|
_prewrite = false;
|
||||||
_debug('Bank 1 Off');
|
_debug('Bank 1 Off');
|
||||||
break;
|
break;
|
||||||
case LOC.READWRBSR1:
|
case LOC.READWRBSR1: // 0xC08B
|
||||||
case LOC._READWRBSR1:
|
case LOC._READWRBSR1: // 0xC08F
|
||||||
_readbsr = true;
|
_readbsr = true;
|
||||||
_writebsr = ((_last & 0xF3) == (off & 0xF3));
|
_writebsr = _prewrite;
|
||||||
_bsr2 = false;
|
_bsr2 = false;
|
||||||
|
_prewrite = true;
|
||||||
_debug('Bank 1 Read/Write');
|
_debug('Bank 1 Read/Write');
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -155,7 +163,10 @@ function LanguageCard(io, slot, rom) {
|
|||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
_last = off;
|
|
||||||
|
if (val !== undefined) {
|
||||||
|
_prewrite = false;
|
||||||
|
}
|
||||||
|
|
||||||
if (_readbsr) {
|
if (_readbsr) {
|
||||||
_read1 = _bsr2 ? _bank2 : _bank1;
|
_read1 = _bsr2 ? _bank2 : _bank1;
|
||||||
@ -207,7 +218,7 @@ function LanguageCard(io, slot, rom) {
|
|||||||
readbsr: _readbsr,
|
readbsr: _readbsr,
|
||||||
writebsr: _writebsr,
|
writebsr: _writebsr,
|
||||||
bsr2: _bsr2,
|
bsr2: _bsr2,
|
||||||
last: _last,
|
prewrite: _prewrite,
|
||||||
bank1: _bank1.getState(),
|
bank1: _bank1.getState(),
|
||||||
bank2: _bank2.getState()
|
bank2: _bank2.getState()
|
||||||
};
|
};
|
||||||
@ -219,7 +230,7 @@ function LanguageCard(io, slot, rom) {
|
|||||||
_bank1.setState(state.bank1);
|
_bank1.setState(state.bank1);
|
||||||
_bank2.setState(state.bank2);
|
_bank2.setState(state.bank2);
|
||||||
_access(-1);
|
_access(-1);
|
||||||
_last = state.last;
|
_prewrite = state.prewrite;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -784,7 +784,6 @@ function _keydown(evt) {
|
|||||||
io.keyDown(0x1b);
|
io.keyDown(0x1b);
|
||||||
} else if (evt.keyCode == 16) { // Shift
|
} else if (evt.keyCode == 16) { // Shift
|
||||||
keyboard.shiftKey(true);
|
keyboard.shiftKey(true);
|
||||||
io.buttonDown(2);
|
|
||||||
} else if (evt.keyCode == 17) { // Control
|
} else if (evt.keyCode == 17) { // Control
|
||||||
keyboard.controlKey(true);
|
keyboard.controlKey(true);
|
||||||
}
|
}
|
||||||
@ -796,7 +795,6 @@ function _keyup(evt) {
|
|||||||
|
|
||||||
if (evt.keyCode == 16) { // Shift
|
if (evt.keyCode == 16) { // Shift
|
||||||
keyboard.shiftKey(false);
|
keyboard.shiftKey(false);
|
||||||
io.buttonUp(2);
|
|
||||||
} else if (evt.keyCode == 17) { // Control
|
} else if (evt.keyCode == 17) { // Control
|
||||||
keyboard.controlKey(false);
|
keyboard.controlKey(false);
|
||||||
}
|
}
|
||||||
|
@ -766,7 +766,6 @@ function _keydown(evt) {
|
|||||||
io.keyDown(0x1b);
|
io.keyDown(0x1b);
|
||||||
} else if (evt.keyCode == 16) { // Shift
|
} else if (evt.keyCode == 16) { // Shift
|
||||||
keyboard.shiftKey(true);
|
keyboard.shiftKey(true);
|
||||||
io.buttonDown(2);
|
|
||||||
} else if (evt.keyCode == 17) { // Control
|
} else if (evt.keyCode == 17) { // Control
|
||||||
keyboard.controlKey(true);
|
keyboard.controlKey(true);
|
||||||
} else if (evt.keyCode == 91 || evt.keyCode == 93) { // Command
|
} else if (evt.keyCode == 91 || evt.keyCode == 93) { // Command
|
||||||
@ -782,7 +781,6 @@ function _keyup(evt) {
|
|||||||
|
|
||||||
if (evt.keyCode == 16) { // Shift
|
if (evt.keyCode == 16) { // Shift
|
||||||
keyboard.shiftKey(false);
|
keyboard.shiftKey(false);
|
||||||
io.buttonUp(2);
|
|
||||||
} else if (evt.keyCode == 17) { // Control
|
} else if (evt.keyCode == 17) { // Control
|
||||||
keyboard.controlKey(false);
|
keyboard.controlKey(false);
|
||||||
} else if (evt.keyCode == 91 || evt.keyCode == 93) { // Command
|
} else if (evt.keyCode == 91 || evt.keyCode == 93) { // Command
|
||||||
|
101
js/mmu.js
101
js/mmu.js
@ -29,6 +29,7 @@ function MMU(cpu, lores1, lores2, hires1, hires2, io, rom)
|
|||||||
var _bank1;
|
var _bank1;
|
||||||
var _readbsr;
|
var _readbsr;
|
||||||
var _writebsr;
|
var _writebsr;
|
||||||
|
var _prewrite;
|
||||||
|
|
||||||
// Auxilliary ROM
|
// Auxilliary ROM
|
||||||
var _intcxrom;
|
var _intcxrom;
|
||||||
@ -112,6 +113,7 @@ function MMU(cpu, lores1, lores2, hires1, hires2, io, rom)
|
|||||||
_bank1 = true;
|
_bank1 = true;
|
||||||
_readbsr = false;
|
_readbsr = false;
|
||||||
_writebsr = false;
|
_writebsr = false;
|
||||||
|
_prewrite = false;
|
||||||
|
|
||||||
_auxRamRead = false;
|
_auxRamRead = false;
|
||||||
_auxRamWrite = false;
|
_auxRamWrite = false;
|
||||||
@ -125,11 +127,9 @@ function MMU(cpu, lores1, lores2, hires1, hires2, io, rom)
|
|||||||
}
|
}
|
||||||
|
|
||||||
function _debug() {
|
function _debug() {
|
||||||
// debug.apply(this, arguments);
|
// console.debug.apply(this, arguments);
|
||||||
}
|
}
|
||||||
|
|
||||||
var _last = 0x00;
|
|
||||||
|
|
||||||
function Switches() {
|
function Switches() {
|
||||||
var locs = {};
|
var locs = {};
|
||||||
|
|
||||||
@ -187,9 +187,11 @@ function MMU(cpu, lores1, lores2, hires1, hires2, io, rom)
|
|||||||
var mem60_BF = [new RAM(0x60,0xBF), new RAM(0x60,0xBF)];
|
var mem60_BF = [new RAM(0x60,0xBF), new RAM(0x60,0xBF)];
|
||||||
var memC0_C0 = [switches];
|
var memC0_C0 = [switches];
|
||||||
var memC1_CF = [io, auxRom];
|
var memC1_CF = [io, auxRom];
|
||||||
var memD0_DF = [rom,
|
var memD0_DF = [
|
||||||
new RAM(0xD0,0xDF), new RAM(0xD0,0xDF),
|
rom,
|
||||||
new RAM(0xD0,0xDF), new RAM(0xD0,0xDF)];
|
new RAM(0xD0,0xDF), new RAM(0xD0,0xDF),
|
||||||
|
new RAM(0xD0,0xDF), new RAM(0xD0,0xDF)
|
||||||
|
];
|
||||||
var memE0_FF = [rom, new RAM(0xE0,0xFF), new RAM(0xE0,0xFF)];
|
var memE0_FF = [rom, new RAM(0xE0,0xFF), new RAM(0xE0,0xFF)];
|
||||||
|
|
||||||
io.setSlot(3, auxRom);
|
io.setSlot(3, auxRom);
|
||||||
@ -391,7 +393,7 @@ function MMU(cpu, lores1, lores2, hires1, hires2, io, rom)
|
|||||||
case LOC._80STOREOFF:
|
case LOC._80STOREOFF:
|
||||||
if (val !== undefined) {
|
if (val !== undefined) {
|
||||||
_80store = false;
|
_80store = false;
|
||||||
// _debug('80 Store Off');
|
_debug('80 Store Off');
|
||||||
} else {
|
} else {
|
||||||
// Chain to io for keyboard
|
// Chain to io for keyboard
|
||||||
result = io.ioSwitch(off, val);
|
result = io.ioSwitch(off, val);
|
||||||
@ -400,7 +402,7 @@ function MMU(cpu, lores1, lores2, hires1, hires2, io, rom)
|
|||||||
case LOC._80STOREON:
|
case LOC._80STOREON:
|
||||||
if (val !== undefined) {
|
if (val !== undefined) {
|
||||||
_80store = true;
|
_80store = true;
|
||||||
// _debug('80 Store On');
|
_debug('80 Store On');
|
||||||
} else
|
} else
|
||||||
result = 0;
|
result = 0;
|
||||||
break;
|
break;
|
||||||
@ -436,13 +438,13 @@ function MMU(cpu, lores1, lores2, hires1, hires2, io, rom)
|
|||||||
case LOC.INTCXROMOFF:
|
case LOC.INTCXROMOFF:
|
||||||
if (val !== undefined) {
|
if (val !== undefined) {
|
||||||
_intcxrom = false;
|
_intcxrom = false;
|
||||||
// _debug('Int CX ROM Off');
|
_debug('Int CX ROM Off');
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case LOC.INTCXROMON:
|
case LOC.INTCXROMON:
|
||||||
if (val !== undefined) {
|
if (val !== undefined) {
|
||||||
_intcxrom = true;
|
_intcxrom = true;
|
||||||
// _debug('Int CX ROM On');
|
_debug('Int CX ROM On');
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case LOC.ALTZPOFF: // 0x08
|
case LOC.ALTZPOFF: // 0x08
|
||||||
@ -473,14 +475,16 @@ function MMU(cpu, lores1, lores2, hires1, hires2, io, rom)
|
|||||||
// Graphics Switches
|
// Graphics Switches
|
||||||
|
|
||||||
case LOC.PAGE1:
|
case LOC.PAGE1:
|
||||||
_page2 = false;
|
if (_80store) {
|
||||||
if (!_80store) {
|
_page2 = false;
|
||||||
|
} else {
|
||||||
result = io.ioSwitch(off, val);
|
result = io.ioSwitch(off, val);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case LOC.PAGE2:
|
case LOC.PAGE2:
|
||||||
_page2 = true;
|
if (_80store) {
|
||||||
if (!_80store) {
|
_page2 = true;
|
||||||
|
} else {
|
||||||
result = io.ioSwitch(off, val);
|
result = io.ioSwitch(off, val);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -488,60 +492,68 @@ function MMU(cpu, lores1, lores2, hires1, hires2, io, rom)
|
|||||||
// Language Card Switches
|
// Language Card Switches
|
||||||
|
|
||||||
case LOC.READBSR2: // 0xC080
|
case LOC.READBSR2: // 0xC080
|
||||||
case LOC._READBSR2:
|
case LOC._READBSR2: // 0xC084
|
||||||
_bank1 = false;
|
_bank1 = false;
|
||||||
_readbsr = true;
|
_readbsr = true;
|
||||||
_writebsr = false;
|
_writebsr = false;
|
||||||
_debug('Bank 2 Read');
|
_prewrite = false;
|
||||||
|
// _debug('Bank 2 Read');
|
||||||
break;
|
break;
|
||||||
case LOC.WRITEBSR2: // 0xC081
|
case LOC.WRITEBSR2: // 0xC081
|
||||||
case LOC._WRITEBSR2:
|
case LOC._WRITEBSR2: // 0xC085
|
||||||
_bank1 = false;
|
_bank1 = false;
|
||||||
_readbsr = false;
|
_readbsr = false;
|
||||||
_writebsr = _writebsr || ((_last & 0xF3) == (off & 0xF3));
|
_writebsr = _prewrite;
|
||||||
_debug('Bank 2 Write');
|
_prewrite = true;
|
||||||
|
// _debug('Bank 2 Write');
|
||||||
break;
|
break;
|
||||||
case LOC.OFFBSR2: // 0xC082
|
case LOC.OFFBSR2: // 0xC082
|
||||||
case LOC._OFFBSR2:
|
case LOC._OFFBSR2: // 0xC086
|
||||||
_bank1 = false;
|
_bank1 = false;
|
||||||
_readbsr = false;
|
_readbsr = false;
|
||||||
_writebsr = false;
|
_writebsr = false;
|
||||||
_debug('Bank 2 Off');
|
_prewrite = false;
|
||||||
|
// _debug('Bank 2 Off');
|
||||||
break;
|
break;
|
||||||
case LOC.READWRBSR2: // 0xC083
|
case LOC.READWRBSR2: // 0xC083
|
||||||
case LOC._READWRBSR2:
|
case LOC._READWRBSR2: // 0xC087
|
||||||
_bank1 = false;
|
_bank1 = false;
|
||||||
_readbsr = true;
|
_readbsr = true;
|
||||||
_writebsr = _writebsr || ((_last & 0xF3) == (off & 0xF3));
|
_writebsr = _prewrite;
|
||||||
_debug('Bank 2 Read/Write');
|
_prewrite = true;
|
||||||
|
// _debug('Bank 2 Read/Write');
|
||||||
break;
|
break;
|
||||||
case LOC.READBSR1: // 0xC088
|
case LOC.READBSR1: // 0xC088
|
||||||
case LOC._READBSR1:
|
case LOC._READBSR1: // 0xC08c
|
||||||
_bank1 = true;
|
_bank1 = true;
|
||||||
_readbsr = true;
|
_readbsr = true;
|
||||||
_writebsr = false;
|
_writebsr = false;
|
||||||
_debug('Bank 1 Read');
|
_prewrite = false;
|
||||||
|
// _debug('Bank 1 Read');
|
||||||
break;
|
break;
|
||||||
case LOC.WRITEBSR1: // 0xC089
|
case LOC.WRITEBSR1: // 0xC089
|
||||||
case LOC._WRITEBSR1:
|
case LOC._WRITEBSR1: // 0xC08D
|
||||||
_bank1 = true;
|
_bank1 = true;
|
||||||
_readbsr = false;
|
_readbsr = false;
|
||||||
_writebsr = _writebsr || ((_last & 0xF3) == (off & 0xF3));
|
_writebsr = _prewrite;
|
||||||
_debug('Bank 1 Write');
|
_prewrite = true;
|
||||||
|
// _debug('Bank 1 Write');
|
||||||
break;
|
break;
|
||||||
case LOC.OFFBSR1: // 0xC08A
|
case LOC.OFFBSR1: // 0xC08A
|
||||||
case LOC._OFFBSR1:
|
case LOC._OFFBSR1: // 0xC08E
|
||||||
_bank1 = true;
|
_bank1 = true;
|
||||||
_readbsr = false;
|
_readbsr = false;
|
||||||
_writebsr = false;
|
_writebsr = false;
|
||||||
_debug('Bank 1 Off');
|
_prewrite = false;
|
||||||
|
// _debug('Bank 1 Off');
|
||||||
break;
|
break;
|
||||||
case LOC.READWRBSR1: // 0xC08B
|
case LOC.READWRBSR1: // 0xC08B
|
||||||
case LOC._READWRBSR1:
|
case LOC._READWRBSR1: // 0xC08F
|
||||||
_bank1 = true;
|
_bank1 = true;
|
||||||
_readbsr = true;
|
_readbsr = true;
|
||||||
_writebsr = _writebsr || ((_last & 0xF3) == (off & 0xF3));
|
_writebsr = _prewrite;
|
||||||
_debug('Bank 1 Read/Write');
|
_prewrite = true;
|
||||||
|
//_debug('Bank 1 Read/Write');
|
||||||
break;
|
break;
|
||||||
|
|
||||||
// Status registers
|
// Status registers
|
||||||
@ -587,7 +599,10 @@ function MMU(cpu, lores1, lores2, hires1, hires2, io, rom)
|
|||||||
debug('MMU missing register ' + toHex(off));
|
debug('MMU missing register ' + toHex(off));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
_last = off;
|
|
||||||
|
if (val !== undefined) {
|
||||||
|
_prewrite = false;
|
||||||
|
}
|
||||||
|
|
||||||
if (result !== undefined)
|
if (result !== undefined)
|
||||||
return result;
|
return result;
|
||||||
@ -601,11 +616,6 @@ function MMU(cpu, lores1, lores2, hires1, hires2, io, rom)
|
|||||||
|
|
||||||
return {
|
return {
|
||||||
start: function mmu_start() {
|
start: function mmu_start() {
|
||||||
// Fake call start to register switches
|
|
||||||
io.start();
|
|
||||||
lores1.start();
|
|
||||||
lores2.start();
|
|
||||||
|
|
||||||
return 0x00;
|
return 0x00;
|
||||||
},
|
},
|
||||||
end: function mmu_end() {
|
end: function mmu_end() {
|
||||||
@ -615,6 +625,7 @@ function MMU(cpu, lores1, lores2, hires1, hires2, io, rom)
|
|||||||
debug('reset');
|
debug('reset');
|
||||||
_initSwitches();
|
_initSwitches();
|
||||||
_updateBanks();
|
_updateBanks();
|
||||||
|
io.reset();
|
||||||
},
|
},
|
||||||
read: function mmu_read(page, off, debug) {
|
read: function mmu_read(page, off, debug) {
|
||||||
return _readPages[page].read(page, off, debug);
|
return _readPages[page].read(page, off, debug);
|
||||||
@ -630,7 +641,7 @@ function MMU(cpu, lores1, lores2, hires1, hires2, io, rom)
|
|||||||
readbsr: _readbsr,
|
readbsr: _readbsr,
|
||||||
writebsr: _writebsr,
|
writebsr: _writebsr,
|
||||||
bank1: _bank1,
|
bank1: _bank1,
|
||||||
last: _last,
|
prewrite: _prewrite,
|
||||||
|
|
||||||
intcxrom: _intcxrom,
|
intcxrom: _intcxrom,
|
||||||
slot3rom: _slot3rom,
|
slot3rom: _slot3rom,
|
||||||
@ -645,8 +656,10 @@ function MMU(cpu, lores1, lores2, hires1, hires2, io, rom)
|
|||||||
mem02_03: [mem02_03[0].getState(), mem02_03[1].getState()],
|
mem02_03: [mem02_03[0].getState(), mem02_03[1].getState()],
|
||||||
mem0C_1F: [mem0C_1F[0].getState(), mem0C_1F[1].getState()],
|
mem0C_1F: [mem0C_1F[0].getState(), mem0C_1F[1].getState()],
|
||||||
mem60_BF: [mem60_BF[0].getState(), mem60_BF[1].getState()],
|
mem60_BF: [mem60_BF[0].getState(), mem60_BF[1].getState()],
|
||||||
memD0_DF: [memD0_DF[0].getState(), memD0_DF[1].getState(),
|
memD0_DF: [
|
||||||
memD0_DF[2].getState(), memD0_DF[3].getState()],
|
memD0_DF[0].getState(), memD0_DF[1].getState(),
|
||||||
|
memD0_DF[2].getState(), memD0_DF[3].getState()
|
||||||
|
],
|
||||||
memE0_FF: [memE0_FF[0].getState(), memE0_FF[1].getState()]
|
memE0_FF: [memE0_FF[0].getState(), memE0_FF[1].getState()]
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
@ -680,7 +693,7 @@ function MMU(cpu, lores1, lores2, hires1, hires2, io, rom)
|
|||||||
memE0_FF[1].setState(state.memE0_FF[1]);
|
memE0_FF[1].setState(state.memE0_FF[1]);
|
||||||
|
|
||||||
_access(-1);
|
_access(-1);
|
||||||
_last = state.last;
|
_prewrite = state.prewrite;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user