PDP-11/VAX Update: NPR to/from IO Space
Matches PDP-10 change. Necessary for KDP, harmless otherwise.
This commit is contained in:
parent
3acbd0e2ca
commit
0cc3783711
1 changed files with 45 additions and 0 deletions
|
@ -243,6 +243,18 @@ int32 Map_ReadB (uint32 ba, int32 bc, uint8 *buf)
|
||||||
{
|
{
|
||||||
uint32 alim, lim, ma;
|
uint32 alim, lim, ma;
|
||||||
|
|
||||||
|
if (ba >= IOPAGEBASE) {
|
||||||
|
int32 value;
|
||||||
|
|
||||||
|
while (bc) {
|
||||||
|
if (iopageR( &value, (ba & ~1), READ) != SCPE_OK)
|
||||||
|
break;
|
||||||
|
*buf++ = (uint8) (((ba & 1)? (value >> 8): value) & 0xff);
|
||||||
|
ba++;
|
||||||
|
bc--;
|
||||||
|
}
|
||||||
|
return bc;
|
||||||
|
}
|
||||||
ba = ba & BUSMASK; /* trim address */
|
ba = ba & BUSMASK; /* trim address */
|
||||||
lim = ba + bc;
|
lim = ba + bc;
|
||||||
if (cpu_bme) { /* map enabled? */
|
if (cpu_bme) { /* map enabled? */
|
||||||
|
@ -275,6 +287,19 @@ int32 Map_ReadW (uint32 ba, int32 bc, uint16 *buf)
|
||||||
{
|
{
|
||||||
uint32 alim, lim, ma;
|
uint32 alim, lim, ma;
|
||||||
|
|
||||||
|
if (ba >= IOPAGEBASE) {
|
||||||
|
int32 value;
|
||||||
|
if ((ba & 1) || (bc & 1))
|
||||||
|
return bc;
|
||||||
|
while (bc) {
|
||||||
|
if (iopageR( &value, ba, READ) != SCPE_OK)
|
||||||
|
break;
|
||||||
|
*buf++ = (uint16) (value & 0xffff);
|
||||||
|
ba += 2;
|
||||||
|
bc -= 2;
|
||||||
|
}
|
||||||
|
return bc;
|
||||||
|
}
|
||||||
ba = (ba & BUSMASK) & ~01; /* trim, align addr */
|
ba = (ba & BUSMASK) & ~01; /* trim, align addr */
|
||||||
lim = ba + (bc & ~01);
|
lim = ba + (bc & ~01);
|
||||||
if (cpu_bme) { /* map enabled? */
|
if (cpu_bme) { /* map enabled? */
|
||||||
|
@ -303,6 +328,15 @@ int32 Map_WriteB (uint32 ba, int32 bc, uint8 *buf)
|
||||||
{
|
{
|
||||||
uint32 alim, lim, ma;
|
uint32 alim, lim, ma;
|
||||||
|
|
||||||
|
if (ba >= IOPAGEBASE) {
|
||||||
|
while (bc) {
|
||||||
|
if (iopageW( ((int32) *buf++) & 0xff, ba, WRITEB) != SCPE_OK)
|
||||||
|
break;
|
||||||
|
ba++;
|
||||||
|
bc--;
|
||||||
|
}
|
||||||
|
return bc;
|
||||||
|
}
|
||||||
ba = ba & BUSMASK; /* trim address */
|
ba = ba & BUSMASK; /* trim address */
|
||||||
lim = ba + bc;
|
lim = ba + bc;
|
||||||
if (cpu_bme) { /* map enabled? */
|
if (cpu_bme) { /* map enabled? */
|
||||||
|
@ -335,6 +369,17 @@ int32 Map_WriteW (uint32 ba, int32 bc, uint16 *buf)
|
||||||
{
|
{
|
||||||
uint32 alim, lim, ma;
|
uint32 alim, lim, ma;
|
||||||
|
|
||||||
|
if (ba >= IOPAGEBASE) {
|
||||||
|
if ((ba & 1) || (bc & 1))
|
||||||
|
return bc;
|
||||||
|
while (bc) {
|
||||||
|
if (iopageW( ((int32) *buf++) & 0xffff, ba, WRITE) != SCPE_OK)
|
||||||
|
break;
|
||||||
|
ba += 2;
|
||||||
|
bc -= 2;
|
||||||
|
}
|
||||||
|
return bc;
|
||||||
|
}
|
||||||
ba = (ba & BUSMASK) & ~01; /* trim, align addr */
|
ba = (ba & BUSMASK) & ~01; /* trim, align addr */
|
||||||
lim = ba + (bc & ~01);
|
lim = ba + (bc & ~01);
|
||||||
if (cpu_bme) { /* map enabled? */
|
if (cpu_bme) { /* map enabled? */
|
||||||
|
|
Loading…
Add table
Reference in a new issue