ISYS8020: Fix format of file
This commit is contained in:
parent
44e5c228c7
commit
06f9cbe41d
1 changed files with 65 additions and 55 deletions
|
@ -2,29 +2,35 @@
|
||||||
|
|
||||||
Copyright (c) 2010, William A. Beech
|
Copyright (c) 2010, William A. Beech
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a
|
Permission is hereby granted, free of charge, to any person obtaining a
|
||||||
copy of this software and associated documentation files (the "Software"),
|
copy of this software and associated documentation files (the "Software"),
|
||||||
to deal in the Software without restriction, including without limitation
|
to deal in the Software without restriction, including without limitation
|
||||||
the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||||
and/or sell copies of the Software, and to permit persons to whom the
|
and/or sell copies of the Software, and to permit persons to whom the
|
||||||
Software is furnished to do so, subject to the following conditions:
|
Software is furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in
|
The above copyright notice and this permission notice shall be included in
|
||||||
all copies or substantial portions of the Software.
|
all copies or substantial portions of the Software.
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||||
WILLIAM A. BEECH BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
WILLIAM A. BEECH BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||||
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
Except as contained in this notice, the name of William A. Beech shall not be
|
Except as contained in this notice, the name of William A. Beech shall not be
|
||||||
used in advertising or otherwise to promote the sale, use or other dealings
|
used in advertising or otherwise to promote the sale, use or other dealings
|
||||||
in this Software without prior written authorization from William A. Beech.
|
in this Software without prior written authorization from William A. Beech.
|
||||||
|
|
||||||
These functions support a simulated i8259 interface device on an iSBC.
|
NOTES:
|
||||||
24 Jan 13 - Original file.
|
|
||||||
|
This software was written by Bill Beech, 24 Jan 13, to allow emulation of
|
||||||
|
more complex Multibus Computer Systems.
|
||||||
|
|
||||||
|
This program simulates up to 2 i8259 devices. It handles 1 i8259
|
||||||
|
device on the iSBC 80/20 and iSBC 80/30 SBCs. Other devices could be on
|
||||||
|
other multibus boards in the simulated system.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "system_defs.h" /* system header in system dir */
|
#include "system_defs.h" /* system header in system dir */
|
||||||
|
@ -59,8 +65,8 @@ int32 icw_num0 = 1, icw_num1 = 1;
|
||||||
/* i8255 Standard I/O Data Structures */
|
/* i8255 Standard I/O Data Structures */
|
||||||
|
|
||||||
UNIT i8259_unit[] = {
|
UNIT i8259_unit[] = {
|
||||||
{ UDATA (0, 0, 0) },
|
{ UDATA (0, 0, 0) }, /* i8259 0 */
|
||||||
{ UDATA (0, 0, 0) }
|
{ UDATA (0, 0, 0) } /* i8259 1 */
|
||||||
};
|
};
|
||||||
|
|
||||||
DEBTAB i8259_debug[] = {
|
DEBTAB i8259_debug[] = {
|
||||||
|
@ -75,10 +81,10 @@ DEBTAB i8259_debug[] = {
|
||||||
};
|
};
|
||||||
|
|
||||||
REG i8259_reg[] = {
|
REG i8259_reg[] = {
|
||||||
{ HRDATA (IRR0, i8259_unit[0].u3, 8) },
|
{ HRDATA (IRR0, i8259_unit[0].u3, 8) }, /* i8259 0 */
|
||||||
{ HRDATA (ISR0, i8259_unit[0].u4, 8) },
|
{ HRDATA (ISR0, i8259_unit[0].u4, 8) },
|
||||||
{ HRDATA (IMR0, i8259_unit[0].u5, 8) },
|
{ HRDATA (IMR0, i8259_unit[0].u5, 8) },
|
||||||
{ HRDATA (IRR1, i8259_unit[1].u3, 8) },
|
{ HRDATA (IRR1, i8259_unit[1].u3, 8) }, /* i8259 0 */
|
||||||
{ HRDATA (ISR1, i8259_unit[1].u4, 8) },
|
{ HRDATA (ISR1, i8259_unit[1].u4, 8) },
|
||||||
{ HRDATA (IMR1, i8259_unit[1].u5, 8) },
|
{ HRDATA (IMR1, i8259_unit[1].u5, 8) },
|
||||||
{ NULL }
|
{ NULL }
|
||||||
|
@ -114,6 +120,8 @@ DEVICE i8259_dev = {
|
||||||
IN or OUT instruction is issued.
|
IN or OUT instruction is issued.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/* i8259 0 functions */
|
||||||
|
|
||||||
int32 i8259a0(int32 io, int32 data)
|
int32 i8259a0(int32 io, int32 data)
|
||||||
{
|
{
|
||||||
int32 bit;
|
int32 bit;
|
||||||
|
@ -151,38 +159,6 @@ int32 i8259a0(int32 io, int32 data)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int32 i8259b0(int32 io, int32 data)
|
|
||||||
{
|
|
||||||
if (io == 0) { /* read data port */
|
|
||||||
return (i8259_unit[0].u5); /* IMR */
|
|
||||||
} else { /* write data port */
|
|
||||||
if (icw_num0 >= 2 && icw_num0 < 5) { /* ICW mode */
|
|
||||||
switch (icw_num0) {
|
|
||||||
case 2: /* ICW2 */
|
|
||||||
i8259_icw2[0] = data;
|
|
||||||
break;
|
|
||||||
case 3: /* ICW3 */
|
|
||||||
i8259_icw3[0] = data;
|
|
||||||
break;
|
|
||||||
case 4: /* ICW4 */
|
|
||||||
if (i8259_icw1[0] & 0x01)
|
|
||||||
i8259_icw4[0] = data;
|
|
||||||
else
|
|
||||||
sim_printf("8259b-0: ICW4 not enabled - data=%02X\n", data);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
sim_printf("8259b-0: ICW Error %02X\n", data);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
icw_num0++;
|
|
||||||
} else {
|
|
||||||
i8259_ocw1[0] = data; /* OCW0 */
|
|
||||||
}
|
|
||||||
}
|
|
||||||
i8259_dump(0);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
int32 i8259a1(int32 io, int32 data)
|
int32 i8259a1(int32 io, int32 data)
|
||||||
{
|
{
|
||||||
int32 bit;
|
int32 bit;
|
||||||
|
@ -220,6 +196,40 @@ int32 i8259a1(int32 io, int32 data)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* i8259 1 functions */
|
||||||
|
|
||||||
|
int32 i8259b0(int32 io, int32 data)
|
||||||
|
{
|
||||||
|
if (io == 0) { /* read data port */
|
||||||
|
return (i8259_unit[0].u5); /* IMR */
|
||||||
|
} else { /* write data port */
|
||||||
|
if (icw_num0 >= 2 && icw_num0 < 5) { /* ICW mode */
|
||||||
|
switch (icw_num0) {
|
||||||
|
case 2: /* ICW2 */
|
||||||
|
i8259_icw2[0] = data;
|
||||||
|
break;
|
||||||
|
case 3: /* ICW3 */
|
||||||
|
i8259_icw3[0] = data;
|
||||||
|
break;
|
||||||
|
case 4: /* ICW4 */
|
||||||
|
if (i8259_icw1[0] & 0x01)
|
||||||
|
i8259_icw4[0] = data;
|
||||||
|
else
|
||||||
|
sim_printf("8259b-0: ICW4 not enabled - data=%02X\n", data);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
sim_printf("8259b-0: ICW Error %02X\n", data);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
icw_num0++;
|
||||||
|
} else {
|
||||||
|
i8259_ocw1[0] = data; /* OCW0 */
|
||||||
|
}
|
||||||
|
}
|
||||||
|
i8259_dump(0);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
int32 i8259b1(int32 io, int32 data)
|
int32 i8259b1(int32 io, int32 data)
|
||||||
{
|
{
|
||||||
if (io == 0) { /* read data port */
|
if (io == 0) { /* read data port */
|
||||||
|
|
Loading…
Add table
Reference in a new issue