PDP-8-E-Simulator/Emulation/eae.c

1256 lines
32 KiB
C

/*
* PDP-8/E Simulator
*
* Copyright © 1994-2015 Bernhard Baehr
*
* eae.c - EAE instructions code for the PDP-8/E
*
* This file is part of PDP-8/E Simulator.
*
* PDP-8/E Simulator 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 3 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.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/*
* EMUL-8: a pdp8e emulator.
*
* Author:
* Bill Haygood
* 41832 Ernest Road
* Loon Lake, WA 99148-9607
* Internet: billh@comtch.iea.com
* Voice/AnsMach/FAX \
* or 509-233-2555
* Cellular/Pager /
*
* Copyright 1992, 1993, 1994 by the author with all rights reserved.
*
* Operate microinstruction (OPR) module to handle EAE instructions.
*
* Questions:
*/
#import <Cocoa/Cocoa.h>
#define USE_PDP8_REGISTERS_DIRECTLY 1
#include "PDP8.h"
#include "eae.h"
#include "pdp8defines.h"
/*
* Operate microinstructions
*
* | | | |
* |---|---|---|---|---|---|---|---|---|
* | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10| 11|
* | 1 |CLA|MQA| 0 |MQL| 0 | 0 | 0 | 1 | Group III
* |---|---|---|---|---|---|---|---|---|
* Sequence: 1 2 2
*
* | | | |
* |---|---|---|---|---|---|---|---|---|
* | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10| 11|
* | 1 |CLA|MQA|SCA|MQL| | | | 1 | Group III Mode A
* |---|---|---|---|---|---|---|---|---|
* Sequence: 1 2 2 \____3____/
* V
* 0 = NOP 4 = NMI
* 1 = SCL 5 = SHL
* 2 = MUY 6 = ASR
* 3 = DVI 7 = LSR
*
* | | | |
* |---|---|---|---|---|---|---|---|---|
* | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10| 11|
* | 1 |CLA|MQA| |MQL| | | | 1 | Group III Mode B
* |---|---|---|---|---|---|---|---|---|
* Sequence: 1 2 \ 2 /
* \_______3_______/
* V
* 0 = NOP 10 = SCA
* 1 = ACS 11 = DAD
* 2 = MUY 12 = DST
* 3 = DVI 13 = SWBA
* 4 = NMI 14 = DPSZ
* 5 = SHL 15 = DPIC (MQL & MQA set)
* 6 = ASR 16 = DCM (MQL & MQA set)
* 7 = LSR 17 = SAM
*
* In the code below, the author refers to DPIC and DCM
* instructions without both MQL & MQA bits set as DPIC-
* and DCM- respectively (the author wonders whether he
* has implemented these odd-balls correctly).
*/
/* -------------------------------------------------------------------- */
VOID i7401 (VOID) /* NOP Grp III */
{
EXECUTION_TIME (12);
}
/* -------------------------------------------------------------------- */
VOID i7403 (VOID)
{
if (EAE == 'A') /* SCL */
{
if (++PC & 010000)
PC &= 07777 ;
SC = (~(*(base + (IF | PC)))) & 037 ;
EXECUTION_TIME (26);
}
else /* ACS */
{
SC = AC & 037 ;
AC &= 010000 ;
EXECUTION_TIME (12);
}
}
/* -------------------------------------------------------------------- */
VOID i7405 (VOID) /* MUY */
{
REG UWORD *p ;
REG ULONG temp ;
if (++PC & 010000)
PC &= 07777 ;
p = base + (IF | PC) ;
if (EAE == 'B')
{
if ((PC & 07770) == 010 && (++*p & 010000))
*p = 0 ;
p = base + (DF | *p) ;
EXECUTION_TIME (86);
} else
EXECUTION_TIME (74);
temp = ((ULONG) *p * MQ) + (AC & 07777) ;
AC = temp >> 12 ; /* no overflow into L can occure */
MQ = temp & 07777 ;
SC = 014 ;
}
/* -------------------------------------------------------------------- */
VOID i7407 (VOID) /* DVI */
{
REG UWORD *p ;
if (++PC & 010000)
PC &= 07777 ;
p = base + (IF | PC) ;
if (EAE == 'B')
{
if ((PC & 07770) == 010 && (++*p & 010000))
*p = 0 ;
p = base + (DF | *p) ;
}
/*
* Note from Bob Supnik at DEC: supnik@human.enet.dec.com
* DVI. If overflow occurs, the MQ is not changed, and the AC
* contains the original AC minus the divisor (result of first
* subtraction).
* Another note from Bob Supnik corrected the above:
* On a divide overflow, the action taken by the EAE is as follows:
* L = 1
* AC = unchanged
* MQ = ((MQ << 1) + 1) & 07777
* Also, the SC is 01 (normally, at end of divide, SC is 015).
* This from the EAE diagnostic.
*/
AC &= 07777 ;
if (AC < *p) /* Normal divide */
{
REG ULONG temp = ((ULONG) AC << 12) | MQ ;
MQ = temp / *p ;
AC = temp - ((ULONG) *p * MQ) ;
SC = 015 ;
EXECUTION_TIME (EAE == 'A' ? 74 : 86);
}
else /* Divide overflow */
{
AC |= 010000 ;
MQ = ((MQ << 1) + 1) & 07777 ;
SC = 01 ;
EXECUTION_TIME (EAE == 'A' ? 26 : 86);
}
}
/* -------------------------------------------------------------------- */
VOID i7411 (VOID) /* NMI */
{
/*
* Note from Bob Supnik at DEC: supnik@human.enet.dec.com
* NMI. The hardware executes a "for" loop with these conditions:
* for (sc = 0; (AC<0> == AC<1>) && ((AC<2:11>|MQ) != 0); sc++) {
* shift link'ac'mq left 1; }
* If, at the end of normalization, the AC'MQ = 4000'0000
* and the mode is B, AC is cleared.
*/
REG ULONG temp = ((ULONG) AC << 12) | MQ ;
for (SC = 0 ; (temp & 040000000) == ((temp & 020000000) << 1)
&& (temp & 017777777) ; SC++)
temp <<= 1 ;
if (EAE == 'B' && (temp & 077777777) == 040000000)
temp &= 0100000000 ;
AC = (temp >> 12) & 017777 ;
MQ = temp & 07777 ;
EXECUTION_TIME (15 + 3 * SC);
}
/* -------------------------------------------------------------------- */
VOID i7413 (VOID) /* SHL */
{
REG INT count ;
REG ULONG temp = ((ULONG) AC << 12) | MQ ;
if (++PC & 010000)
PC &= 07777 ;
count = *(base + (IF | PC)) & 037 ;
EXECUTION_TIME (29 + 3 * count); /* A: 2.6 + 0.3 * count; B: 2.9 + 0.3 * count */
if (EAE == 'A')
count++ ;
if (count)
temp <<= count ;
AC = (temp >> 12) & 017777 ;
MQ = temp & 07777 ;
SC = (EAE == 'B') ? 037 : 0 ;
}
/* -------------------------------------------------------------------- */
VOID i7415 (VOID) /* ASR */
{
REG INT count ;
REG LONG gtf ;
AC = ((AC & 04000) << 1) | (AC & 07777) ;
if (++PC & 010000)
PC &= 07777 ;
count = *(base + (IF | PC)) & 037 ;
EXECUTION_TIME (29 + 3 * count); /* A: 2.6 + 0.3 * count; B: 2.9 + 0.3 * count */
if (EAE == 'A')
count++ ;
if (count)
{
REG LONG temp = ((ULONG) AC << 12) | MQ ;
if (AC & 04000)
temp |= 0xff000000 ;
gtf = (count < 24) ? (temp & (1l << (count - 1))) : (AC & 04000) ;
if (AC & 04000)
{
while (count > 8)
{
temp = (temp >> 8) | 0xffff0000 ;
count -= 8 ;
}
}
temp >>= count ;
if (temp & 040000000)
temp |= 0100000000 ;
/*
* Note from Bob Supnik at DEC: supnik@human.enet.dec.com
* ASR, LSR. If B and count == 0, the GTF is not changed,
* rather than cleared.
*/
if (EAE == 'B')
GTF = (gtf) ? true : false ;
AC = (temp >> 12) & 017777 ;
MQ = temp & 07777 ;
}
SC = (EAE == 'B') ? 037 : 0 ;
}
/* -------------------------------------------------------------------- */
VOID i7417 (VOID) /* LSR */
{
REG INT count ;
REG ULONG temp ;
if (++PC & 010000)
PC &= 07777 ;
count = *(base + (IF | PC)) & 037 ;
EXECUTION_TIME (29 + 3 * count); /* A: 2.6 + 0.3 * count; B: 2.9 + 0.3 * count */
if (EAE == 'A')
count++ ;
AC &= 07777 ;
temp = ((ULONG) AC << 12) | MQ ;
if (EAE == 'B' && count)
GTF = (temp >> (count - 1)) & 1;
temp >>= count ;
AC = (temp >> 12) & 07777 ;
MQ = temp & 07777 ;
SC = (EAE == 'B') ? 037 : 0 ;
}
/* -------------------------------------------------------------------- */
VOID i7421 (VOID) /* MQL */
{
MQ = AC & 07777 ;
AC &= 010000 ;
EXECUTION_TIME (12);
}
/* -------------------------------------------------------------------- */
VOID i7423 (VOID) /* MQL SCL */
{
MQ = AC & 07777 ;
AC &= 010000 ;
i7403 () ;
}
/* -------------------------------------------------------------------- */
VOID i7425 (VOID) /* MQL MUY */
{
MQ = AC & 07777 ;
AC &= 010000 ;
i7405 () ;
}
/* -------------------------------------------------------------------- */
VOID i7427 (VOID) /* MQL DVI */
{
MQ = AC & 07777 ;
AC &= 010000 ;
i7407 () ;
}
/* -------------------------------------------------------------------- */
VOID i7431 (VOID) /* SWAB */
{
MQ = AC & 07777 ;
AC &= 010000 ;
EAE = 'B' ;
EXECUTION_TIME (12);
}
/* -------------------------------------------------------------------- */
VOID i7433 (VOID) /* MQL SHL */
{
MQ = AC & 07777 ;
AC &= 010000 ;
i7413 () ;
}
/* -------------------------------------------------------------------- */
VOID i7435 (VOID) /* MQL ASR */
{
MQ = AC & 07777 ;
AC &= 010000 ;
i7415 () ;
}
/* -------------------------------------------------------------------- */
VOID i7437 (VOID) /* MQL LSR */
{
MQ = AC & 07777 ;
AC &= 010000 ;
i7417 () ;
}
/* -------------------------------------------------------------------- */
VOID i7441 (VOID) /* SCA */
{
AC |= SC ;
EXECUTION_TIME (12);
}
/* -------------------------------------------------------------------- */
VOID i7443 (VOID)
{
REG UWORD *p ;
if (++PC & 010000)
PC &= 07777 ;
p = base + (IF | PC) ;
if (EAE == 'A') /* A: SCA SCL */
{
AC |= SC ;
SC = (~*p) & 037 ;
EXECUTION_TIME (26);
}
else /* B: DAD */
{
REG ULONG temp ;
REG UINT addr;
if ((PC & 07770) == 010 && (++*p & 010000))
*p = 0 ;
addr = *p;
temp = MQ + *(base + (DF | addr)) ;
temp += ((ULONG) ((AC & 07777)
+ *(base + (DF | ((addr+1) & 07777))))) << 12 ;
AC = temp >> 12 ;
MQ = temp & 07777 ;
EXECUTION_TIME (52);
}
}
/* -------------------------------------------------------------------- */
VOID i7445 (VOID)
{
if (EAE == 'A') /* A: SCA MUY */
{
AC |= SC ;
i7405 () ;
}
else /* B: DST */
{
REG UWORD *p ;
REG UINT addr;
if (++PC & 010000)
PC &= 07777 ;
p = base + (IF | PC) ;
if ((PC & 07770) == 010 && (++*p & 010000))
*p = 0 ;
addr = *p;
*(base + (W_DF | addr)) = MQ ;
*(base + (W_DF | ((addr+1) & 07777))) = AC & 07777 ;
EXECUTION_TIME (52);
}
}
/* -------------------------------------------------------------------- */
VOID i7447 (VOID) /* SWBA */
{
EAE = 'A' ;
GTF = false ;
EXECUTION_TIME (12);
}
/* -------------------------------------------------------------------- */
VOID i7451 (VOID)
{
if (EAE == 'A') /* A: SCA NMI */
{
AC |= SC ;
i7411 () ;
}
else /* B: DPSZ */
{
if (!((AC & 07777) | MQ))
++PC ;
EXECUTION_TIME (12);
}
}
unsigned s7451 (VOID)
{
if (EAE == 'A') /* A: SCA NMI */
return (false);
else /* B: DPSZ */
return (!((AC & 07777) | MQ));
}
/* -------------------------------------------------------------------- */
VOID i7453 (VOID)
{
if (EAE == 'A') /* A: SCA SHL */
{
AC |= SC ;
i7413 () ;
}
else /* B: DPIC- */
{
/*
* Note from Bob Supnik at DEC: supnik@human.enet.dec.com
* DPIC, DCOM without SWP. The instructions use the swap to
* bring the MQ into the AC, perform step 1, swap back,
* perform step 2:
*
* <swap AC and MQ>
* increment/complement AC, carry out to link
* <swap AC and MQ>
* add link/complement and add link, carry out to link
*/
REG ULONG temp = (((ULONG) MQ << 12) | (AC & 07777)) + 1 ;
AC = temp >> 12 ;
MQ = temp & 07777 ;
EXECUTION_TIME (18); /* time of DPIC */
}
}
/* -------------------------------------------------------------------- */
VOID i7455 (VOID)
{
if (EAE == 'A') /* A: SCA ASR */
{
AC |= SC ;
i7415 () ;
}
else /* B: DCM- */
{
/*
* Note from Bob Supnik at DEC: supnik@human.enet.dec.com
* DPIC, DCOM without SWP. The instructions use the swap to
* bring the MQ into the AC, perform step 1, swap back,
* perform step 2:
*
* <swap AC and MQ>
* increment/complement AC, carry out to link
* <swap AC and MQ>
* add link/complement and add link, carry out to link
*/
REG ULONG temp = - (((ULONG) MQ << 12) | (AC & 07777)) ;
AC = (temp >> 12) & 017777 ;
MQ = temp & 07777 ;
EXECUTION_TIME (18); /* time of DCM */
}
}
/* -------------------------------------------------------------------- */
VOID i7457 (VOID)
{
if (EAE == 'A') /* A: SCA LSR */
{
AC |= SC ;
i7417 () ;
}
else /* B: SAM */
{
/*
* SAM code supplied by Bob Supnik at supnik@human.enet.dec.com
*/
REG INT temp = AC & 07777 ;
AC = MQ + (temp ^ 07777) + 1 ;
GTF = (temp <= MQ) ^ ((temp ^ MQ) >> 11) ;
EXECUTION_TIME (12);
}
}
/* -------------------------------------------------------------------- */
VOID i7461 (VOID) /* MQL SCA */
{
MQ = AC & 07777 ;
AC &= 010000 ;
AC |= SC ;
EXECUTION_TIME (12);
}
/* -------------------------------------------------------------------- */
VOID i7463 (VOID) /* A: MQL SCA SCL */
{ /* B: MQL DAD */
MQ = AC & 07777 ;
AC &= 010000 ;
i7443 () ;
}
/* -------------------------------------------------------------------- */
VOID i7465 (VOID) /* A: MQL SCA MUY */
{ /* B: MQL DST */
MQ = AC & 07777 ;
AC &= 010000 ;
i7445 () ;
}
/* -------------------------------------------------------------------- */
VOID i7467 (VOID) /* A: MQL SCA DVI */
{ /* B: MQL SWBA (SWBA ignored) */
MQ = AC & 07777 ;
AC &= 010000 ;
if (EAE == 'A') {
AC |= SC;
i7407 ();
} else
EXECUTION_TIME (12);
}
/* -------------------------------------------------------------------- */
VOID i7471 (VOID) /* A: MQL SCA NMI */
{ /* B: MQL DPSZ */
MQ = AC & 07777 ;
AC &= 010000 ;
i7451 () ;
}
/* -------------------------------------------------------------------- */
VOID i7473 (VOID) /* A: MQL SCA SHL */
{ /* B: MQL DPIC- (7453) */
MQ = AC & 07777 ;
AC &= 010000 ;
i7453 () ;
}
/* -------------------------------------------------------------------- */
VOID i7475 (VOID) /* A: MQL SCA ASR */
{ /* B: MQL DCM- (7455) */
MQ = AC & 07777 ;
AC &= 010000 ;
i7455 () ;
}
/* -------------------------------------------------------------------- */
VOID i7477 (VOID) /* A: MQL SCA LSR */
{ /* B: MQL SAM */
MQ = AC & 07777 ;
AC &= 010000 ;
i7457 () ;
}
/* -------------------------------------------------------------------- */
VOID i7501 (VOID) /* MQA */
{
AC |= MQ ;
EXECUTION_TIME (12);
}
/* -------------------------------------------------------------------- */
VOID i7503 (VOID) /* A: MQA SCL */
{ /* B: MQA ACS */
AC |= MQ ;
i7403 () ;
}
/* -------------------------------------------------------------------- */
VOID i7505 (VOID) /* MQA MUY */
{
AC |= MQ ;
i7405 () ;
}
/* -------------------------------------------------------------------- */
VOID i7507 (VOID) /* MQA DVI */
{
AC |= MQ ;
i7407 () ;
}
/* -------------------------------------------------------------------- */
VOID i7511 (VOID) /* MQA NMI */
{
AC |= MQ ;
i7411 () ;
}
/* -------------------------------------------------------------------- */
VOID i7513 (VOID) /* MQA SHL */
{
AC |= MQ ;
i7413 () ;
}
/* -------------------------------------------------------------------- */
VOID i7515 (VOID) /* MQA ASR */
{
AC |= MQ ;
i7415 () ;
}
/* -------------------------------------------------------------------- */
VOID i7517 (VOID) /* MQA LSR */
{
AC |= MQ ;
i7417 () ;
}
/* -------------------------------------------------------------------- */
VOID i7521 (VOID) /* SWP */
{
REG UINT temp = MQ ;
MQ = AC & 07777 ;
AC = (AC & 010000) | temp ;
EXECUTION_TIME (12);
}
/* -------------------------------------------------------------------- */
VOID i7523 (VOID) /* A: SWP SCL */
{ /* B: SWP ACS */
REG UINT temp = MQ ;
MQ = AC & 07777 ;
AC = (AC & 010000) | temp ;
i7403 () ;
}
/* -------------------------------------------------------------------- */
VOID i7525 (VOID) /* SWP MUY */
{
REG UINT temp = MQ ;
MQ = AC & 07777 ;
AC = (AC & 010000) | temp ;
i7405 () ;
}
/* -------------------------------------------------------------------- */
VOID i7527 (VOID) /* SWP DVI */
{
REG UINT temp = MQ ;
MQ = AC & 07777 ;
AC = (AC & 010000) | temp ;
i7407 () ;
}
/* -------------------------------------------------------------------- */
VOID i7531 (VOID) /* SWP NMI */
{
REG UINT temp = MQ ;
MQ = AC & 07777 ;
AC = (AC & 010000) | temp ;
i7411 () ;
}
/* -------------------------------------------------------------------- */
VOID i7533 (VOID) /* SWP SHL */
{
REG UINT temp = MQ ;
MQ = AC & 07777 ;
AC = (AC & 010000) | temp ;
i7413 () ;
}
/* -------------------------------------------------------------------- */
VOID i7535 (VOID) /* SWP ASR */
{
REG UINT temp = MQ ;
MQ = AC & 07777 ;
AC = (AC & 010000) | temp ;
i7415 () ;
}
/* -------------------------------------------------------------------- */
VOID i7537 (VOID) /* SWP LSR */
{
REG UINT temp = MQ ;
MQ = AC & 07777 ;
AC = (AC & 010000) | temp ;
i7417 () ;
}
/* -------------------------------------------------------------------- */
VOID i7541 (VOID) /* MQA SCA */
{
AC |= MQ ;
AC |= SC ;
EXECUTION_TIME (12);
}
/* -------------------------------------------------------------------- */
VOID i7543 (VOID) /* A: MQA SCA SCL */
{ /* B: MQA DAD */
AC |= MQ ;
i7443 () ;
}
/* -------------------------------------------------------------------- */
VOID i7545 (VOID) /* A: MQA SCA MUY */
{ /* B: MQA DST */
AC |= MQ ;
i7445 () ;
}
/* -------------------------------------------------------------------- */
VOID i7547 (VOID) /* A: MQA SCA DVI */
{ /* B: MQA SWBA (SWBA ignored) */
AC |= MQ ;
if (EAE == 'A') {
AC |= SC;
i7407 ();
} else
EXECUTION_TIME (12);
}
/* -------------------------------------------------------------------- */
VOID i7551 (VOID) /* A: MQA SCA NMI */
{ /* B: MQA DPSZ */
AC |= MQ ;
i7451 () ;
}
/* -------------------------------------------------------------------- */
VOID i7553 (VOID) /* A: MQA SCA SHL */
{ /* B: MQA DPIC- (7453) */
AC |= MQ ;
i7453 () ;
}
/* -------------------------------------------------------------------- */
VOID i7555 (VOID) /* A: MQA SCA ASR */
{ /* B: MQA DCM- (7455) */
AC |= MQ ;
i7455 () ;
}
/* -------------------------------------------------------------------- */
VOID i7557 (VOID) /* A: MQA SCA LSR */
{ /* B: MQA SAM */
AC |= MQ ;
i7457 () ;
}
/* -------------------------------------------------------------------- */
VOID i7561 (VOID) /* SWP SCA */
{
REG UINT temp = MQ ;
MQ = AC & 07777 ;
AC = (AC & 010000) | temp | SC ;
EXECUTION_TIME (12);
}
/* -------------------------------------------------------------------- */
VOID i7563 (VOID) /* A: SWP SCA SCL */
{ /* B: SWP DAD */
REG UINT temp = MQ ;
MQ = AC & 07777 ;
AC = (AC & 010000) | temp ;
i7443 () ;
}
/* -------------------------------------------------------------------- */
VOID i7565 (VOID) /* A: SWP SCA MUY */
{ /* B: SWP DST */
REG UINT temp = MQ ;
MQ = AC & 07777 ;
AC = (AC & 010000) | temp ;
i7445 () ;
}
/* -------------------------------------------------------------------- */
VOID i7567 (VOID) /* A: SWP SCA DVI */
{ /* B: SWP SWBA (SWBA ignored) */
REG UINT temp = MQ ;
MQ = AC & 07777 ;
AC = (AC & 010000) | temp ;
if (EAE == 'A') {
AC |= SC;
i7407 ();
} else
EXECUTION_TIME (12);
}
/* -------------------------------------------------------------------- */
VOID i7571 (VOID) /* A: SWP SCA NMI */
{ /* B: SWP DPSZ */
REG UINT temp = MQ ;
MQ = AC & 07777 ;
AC = (AC & 010000) | temp ;
i7451 () ;
}
/* -------------------------------------------------------------------- */
VOID i7573 (VOID) /* A: SWP SCA SHL */
{ /* B: DPIC */
if (EAE == 'A')
{
REG UINT temp = MQ ;
MQ = AC & 07777 ;
AC = (AC & 010000) | temp ;
i7453 () ;
}
else
{
REG ULONG temp = (((ULONG) (AC & 07777) << 12) | MQ) + 1 ;
AC = temp >> 12 ;
MQ = temp & 07777 ;
EXECUTION_TIME (18);
}
}
/* -------------------------------------------------------------------- */
VOID i7575 (VOID) /* A: SWP SCA ASR */
{ /* B: DCM */
if (EAE == 'A')
{
REG UINT temp = MQ ;
MQ = AC & 07777 ;
AC = (AC & 010000) | temp ;
i7455 () ;
}
else
{
REG ULONG temp = (((((ULONG) (AC & 07777)) << 12) | MQ)
^ 077777777) + 1 ;
AC = (temp >> 12) & 017777 ;
MQ = temp & 07777 ;
EXECUTION_TIME (18);
}
}
/* -------------------------------------------------------------------- */
VOID i7577 (VOID) /* A: SWP SCA LSR */
{ /* B: SWP SAM */
REG INT temp = MQ ;
MQ = AC & 07777 ;
AC = (AC & 010000) | temp ;
i7457 () ;
}
/* -------------------------------------------------------------------- */
VOID i7601 (VOID) /* CLA Grp III */
{
AC &= 010000 ;
EXECUTION_TIME (12);
}
/* -------------------------------------------------------------------- */
VOID i7603 (VOID) /* CLA SCA */
{
AC &= 010000 ;
i7403 () ;
}
/* -------------------------------------------------------------------- */
VOID i7605 (VOID) /* CLA MUY */
{
AC &= 010000 ;
i7405 () ;
}
/* -------------------------------------------------------------------- */
VOID i7607 (VOID) /* CLA DVI */
{
AC &= 010000 ;
i7407 () ;
}
/* -------------------------------------------------------------------- */
VOID i7611 (VOID) /* CLA NMI */
{
AC &= 010000 ;
i7411 () ;
}
/* -------------------------------------------------------------------- */
VOID i7613 (VOID) /* CLA SHL */
{
AC &= 010000 ;
i7413 () ;
}
/* -------------------------------------------------------------------- */
VOID i7615 (VOID) /* CLA ASR */
{
AC &= 010000 ;
i7415 () ;
}
/* -------------------------------------------------------------------- */
VOID i7617 (VOID) /* CLA LSR */
{
AC &= 010000 ;
i7417 () ;
}
/* -------------------------------------------------------------------- */
VOID i7621 (VOID) /* CLA MQL */
{
AC &= 010000 ;
MQ = 0 ;
EXECUTION_TIME (12);
}
/* -------------------------------------------------------------------- */
VOID i7623 (VOID) /* CLA MQL SCL */
{
AC &= 010000 ;
MQ = 0 ;
i7403 () ;
}
/* -------------------------------------------------------------------- */
VOID i7625 (VOID) /* CLA MQL MUY */
{
AC &= 010000 ;
MQ = 0 ;
i7405 () ;
}
/* -------------------------------------------------------------------- */
VOID i7627 (VOID) /* CLA MQL DVI */
{
AC &= 010000 ;
MQ = 0 ;
i7407 () ;
}
/* -------------------------------------------------------------------- */
VOID i7631 (VOID) /* CLA MQL NMI */
{
AC &= 010000 ;
MQ = 0 ;
i7411 () ;
}
/* -------------------------------------------------------------------- */
VOID i7633 (VOID) /* CLA MQL SHL */
{
AC &= 010000 ;
MQ = 0 ;
i7413 () ;
}
/* -------------------------------------------------------------------- */
VOID i7635 (VOID) /* CLA MQL ASR */
{
AC &= 010000 ;
MQ = 0 ;
i7415 () ;
}
/* -------------------------------------------------------------------- */
VOID i7637 (VOID) /* CLA MQL LSR */
{
AC &= 010000 ;
MQ = 0 ;
i7417 () ;
}
/* -------------------------------------------------------------------- */
VOID i7641 (VOID) /* CLA SCA */
{
AC = (AC & 010000) | SC ;
EXECUTION_TIME (12);
}
/* -------------------------------------------------------------------- */
VOID i7643 (VOID) /* A: CLA SCA SCL */
{ /* B: CLA DAD */
AC &= 010000 ;
i7443 () ;
}
/* -------------------------------------------------------------------- */
VOID i7645 (VOID) /* A: CLA SCA MUY */
{ /* B: CLA DST */
AC &= 010000 ;
i7445 () ;
}
/* -------------------------------------------------------------------- */
VOID i7647 (VOID) /* A: CLA SCA DVI */
{ /* B: CLA SWBA (SWBA ignored) */
AC &= 010000 ;
if (EAE == 'B') {
AC |= SC;
i7407 ();
} else
EXECUTION_TIME (12);
}
/* -------------------------------------------------------------------- */
VOID i7651 (VOID) /* A: CLA SCA NMI */
{ /* B: CLA DPSZ */
AC &= 010000 ;
i7451 () ;
}
/* -------------------------------------------------------------------- */
VOID i7653 (VOID) /* A: CLA SCA SHL */
{ /* B: CLA DPIC- (7453) */
AC &= 010000 ;
i7453 () ;
}
/* -------------------------------------------------------------------- */
VOID i7655 (VOID) /* A: CLA SCA ASR */
{ /* B: CLA DCM- (7455) */
AC &= 010000 ;
i7455 () ;
}
/* -------------------------------------------------------------------- */
VOID i7657 (VOID) /* A: CLA SCA LSR */
{ /* B: CLA SAM */
AC &= 010000 ;
i7457 () ;
}
/* -------------------------------------------------------------------- */
VOID i7661 (VOID) /* CLA MQL SCA */
{
AC = (AC & 010000) | SC ;
MQ = 0 ;
EXECUTION_TIME (12);
}
/* -------------------------------------------------------------------- */
VOID i7663 (VOID) /* A: CLA MQL SCA SCL */
{ /* B: CLA MQL DAD (DLD) */
AC &= 010000 ;
MQ = 0 ;
i7443 () ;
}
/* -------------------------------------------------------------------- */
VOID i7665 (VOID) /* A: CLA MQL SCA MUY */
{ /* B: CLA MQL DST (DDZ) */
AC &= 010000 ;
MQ = 0 ;
i7445 () ;
}
/* -------------------------------------------------------------------- */
VOID i7667 (VOID) /* A: CLA MQL SCA DVI */
{ /* B: CLA MQL SWBA (SWBA ignored) */
AC &= 010000 ;
MQ = 0 ;
if (EAE == 'A') {
AC |= SC;
i7407 ();
} else
EXECUTION_TIME (12);
}
/* -------------------------------------------------------------------- */
VOID i7671 (VOID) /* A: CLA MQL SCA NMI */
{ /* B: CLA MQL DPSZ */
AC &= 010000 ;
MQ = 0 ;
i7451 () ;
}
/* -------------------------------------------------------------------- */
VOID i7673 (VOID) /* A: CLA MQL SCA SHL */
{ /* B: CLA MQL DPIC- (7453) */
AC &= 010000 ;
MQ = 0 ;
i7453 () ;
}
/* -------------------------------------------------------------------- */
VOID i7675 (VOID) /* A: CLA MQL SCA ASR */
{ /* B: CLA MQL DCM- (7455) */
AC &= 010000;
MQ = 0;
i7455 ();
}
/* -------------------------------------------------------------------- */
VOID i7677 (VOID) /* A: CLA MQL SCA LSR */
{ /* B: CLA MQL SAM */
AC &= 010000 ;
MQ = 0 ;
i7457 () ;
}
/* -------------------------------------------------------------------- */
VOID i7701 (VOID) /* CLA MQA */
{
AC = (AC & 010000) | MQ ;
EXECUTION_TIME (12);
}
/* -------------------------------------------------------------------- */
VOID i7703 (VOID) /* CLA MQA SCL */
{
AC = (AC & 010000) | MQ ;
i7403 () ;
}
/* -------------------------------------------------------------------- */
VOID i7705 (VOID) /* CLA MQA MUY */
{
AC = (AC & 010000) | MQ ;
i7405 () ;
}
/* -------------------------------------------------------------------- */
VOID i7707 (VOID) /* CLA MQA DVI */
{
AC = (AC & 010000) | MQ ;
i7407 () ;
}
/* -------------------------------------------------------------------- */
VOID i7711 (VOID) /* CLA MQA NMI */
{
AC = (AC & 010000) | MQ ;
i7411 () ;
}
/* -------------------------------------------------------------------- */
VOID i7713 (VOID) /* CLA MQA SHL */
{
AC = (AC & 010000) | MQ ;
i7413 () ;
}
/* -------------------------------------------------------------------- */
VOID i7715 (VOID) /* CLA MQA ASR */
{
AC = (AC & 010000) | MQ ;
i7415 () ;
}
/* -------------------------------------------------------------------- */
VOID i7717 (VOID) /* CLA MQA LSR */
{
AC = (AC & 010000) | MQ ;
i7417 () ;
}
/* -------------------------------------------------------------------- */
VOID i7721 (VOID) /* CLA SWP */
{
AC = (AC & 010000) | MQ ;
MQ = 0 ;
EXECUTION_TIME (12);
}
/* -------------------------------------------------------------------- */
VOID i7723 (VOID) /* CLA SWP SCL */
{
AC = (AC & 010000) | MQ ;
MQ = 0 ;
i7403 () ;
}
/* -------------------------------------------------------------------- */
VOID i7725 (VOID) /* CLA SWP MUY */
{
AC = (AC & 010000) | MQ ;
MQ = 0 ;
i7405 () ;
}
/* -------------------------------------------------------------------- */
VOID i7727 (VOID) /* CLA SWP DVI */
{
AC = (AC & 010000) | MQ ;
MQ = 0 ;
i7407 () ;
}
/* -------------------------------------------------------------------- */
VOID i7731 (VOID) /* CLA SWP NMI */
{
AC = (AC & 010000) | MQ ;
MQ = 0 ;
i7411 () ;
}
/* -------------------------------------------------------------------- */
VOID i7733 (VOID) /* CLA SWP SHL */
{
AC = (AC & 010000) | MQ ;
MQ = 0 ;
i7413 () ;
}
/* -------------------------------------------------------------------- */
VOID i7735 (VOID) /* CLA SWP ASR */
{
AC = (AC & 010000) | MQ ;
MQ = 0 ;
i7415 () ;
}
/* -------------------------------------------------------------------- */
VOID i7737 (VOID) /* CLA SWP LSR */
{
AC = (AC & 010000) | MQ ;
MQ = 0 ;
i7417 () ;
}
/* -------------------------------------------------------------------- */
VOID i7741 (VOID) /* CLA MQA SCA */
{
AC = (AC & 010000) | MQ | SC ;
EXECUTION_TIME (12);
}
/* -------------------------------------------------------------------- */
VOID i7743 (VOID) /* A: CLA MQA SCA SCL */
{ /* B: CLA MQA DAD */
AC = (AC & 010000) | MQ ;
i7443 () ;
}
/* -------------------------------------------------------------------- */
VOID i7745 (VOID) /* A: CLA MQA SCA MUY */
{ /* B: CLA MQA DST */
AC = (AC & 010000) | MQ ;
i7445 () ;
}
/* -------------------------------------------------------------------- */
VOID i7747 (VOID) /* A: CLA MQA SCA DVI */
{ /* B: CLA MQA SWBA (SWBA ignored) */
AC = (AC & 010000) | MQ ;
if (EAE == 'A') {
AC |= SC;
i7407 ();
} else
EXECUTION_TIME (12);
}
/* -------------------------------------------------------------------- */
VOID i7751 (VOID) /* A: CLA MQA SCA NMI */
{ /* B: CLA MQA DPSZ */
AC = (AC & 010000) | MQ ;
i7451 () ;
}
/* -------------------------------------------------------------------- */
VOID i7753 (VOID) /* A: CLA MQA SCA SHL */
{ /* B: CLA MQA DPIC- (7453) */
AC = (AC & 010000) | MQ ;
i7453 () ;
}
/* -------------------------------------------------------------------- */
VOID i7755 (VOID) /* A: CLA MQA SCA ASR */
{ /* B: CLA MQA DCM- (7455) */
AC = (AC & 010000) | MQ ;
i7455 () ;
}
/* -------------------------------------------------------------------- */
VOID i7757 (VOID) /* A: CLA MQA SCA LSR */
{ /* B: CLA MQA SAM */
AC = (AC & 010000) | MQ ;
i7457 () ;
}
/* -------------------------------------------------------------------- */
VOID i7761 (VOID) /* CLA SWP SCA */
{
AC = (AC & 010000) | MQ | SC ;
MQ = 0 ;
EXECUTION_TIME (12);
}
/* -------------------------------------------------------------------- */
VOID i7763 (VOID) /* A: CLA SWP SCA SCL */
{ /* B: CLA DAD */
AC = (AC & 010000) | MQ ;
MQ = 0 ;
i7443 () ;
}
/* -------------------------------------------------------------------- */
VOID i7765 (VOID) /* A: CLA SWP SCA MUY */
{ /* B: CLA DST */
AC = (AC & 010000) | MQ ;
MQ = 0 ;
i7445 () ;
}
/* -------------------------------------------------------------------- */
VOID i7767 (VOID) /* A: CLA SWP SCA DVI */
{ /* B: CLA SWP SWBA (SWBA ignored) */
AC = (AC & 010000) | MQ ;
MQ = 0 ;
if (EAE == 'A') {
AC |= SC;
i7407 ();
} else
EXECUTION_TIME (12);
}
/* -------------------------------------------------------------------- */
VOID i7771 (VOID) /* CLA SWP DPSZ */
{
AC = (AC & 010000) | MQ ;
MQ = 0 ;
i7451 () ;
}
/* -------------------------------------------------------------------- */
VOID i7773 (VOID) /* A: CLA SWP SCA SHL */
{ /* B: CLA DPIC */
AC &= 010000 ;
if (EAE == 'A')
{
AC |= MQ ;
MQ = 0 ;
i7453 () ;
}
else
i7573 () ;
}
/* -------------------------------------------------------------------- */
VOID i7775 (VOID) /* A: CLA SWP SCA ASR */
{ /* B: CLA DCM */
AC &= 010000 ;
i7575 () ;
}
/* -------------------------------------------------------------------- */
VOID i7777 (VOID) /* A: CLA SWP SCA LSR */
{ /* B: CLA SWP SAM */
AC = (AC & 010000) | MQ ;
MQ = 0 ;
i7457 () ;
}
/* -------------------------------------------------------------------- */