MegaProcessor

Artifact Content
Login

Artifact 849df45501c179df6df141bcb8da42b59454b11e:


Bit operations of the MegaProcessor.

The opcodes 0xD8..0xDF encode the various bit shift-, rotate-, test- and change operations.
Each of these 8 opcodes take a postbyte to encode the exact operation.

The first byte [b1] of a bit-opeation only determines the destination, as shown in the table below.

<table>
0xD8 : R0 for LSL, LSR, ASL, ASR, ROL, ROR, ROXL, and ROXR instructions
0xD9 : R1    "       "       "     "      "      "      "
0xDA : R2    "       "       "     "      "      "      "
0xDB : R3    "       "       "     "      "      "      "

0xDC : R0 for BTST, BCHG, BCLR, and BSET instructions
0xDD : R1    "       "       "     "      "      "
0xDE : R2    "       "       "     "      "      "
0xDF : R3    "       "       "     "      "      "
</table>

All of the bit operations can only be applied on registers R0..R3.

The second byte specifies the particular operation, and the second parameter (e.g. number of shifts,
or bit-number to be tested)

In both tables below, decode the first byte of the bit-operation instruction to determine the destination register
   first byte [b1]  = 0xd8..0xdf
   destination register [Rx] : x = b1 & 0x03

To select between the tables for decoding of second byte below
    table = ( (b1 >> 3) & 0x01 )  -- 0 means 0xd8..0xdb, 1 means 0xdc..0xdf

Decoding of second byte [b2] for instructions 0xD8..0xDB
<table>
2nd byte    : fixed part : variable part
0x00..0x0f  :   LSL Rx,    #0 .. #15
0x10..0x1f  :   LSL Rx,    #-16 .. #-1
0x20..0x23  :   LSL Rx,    R0 .. R3
0x24..0x27  :   -- Redundant (4)
0x28..0x2b  :   LSL.WT Rx, R0 .. R3
0x2c..0x2f  :   -- Redundant (4)
0x30..0x33  :   LSR Rx,    R0 .. R3
0x34..0x37  :   -- Redundant (4)
0x38..0x3b  :   LSR.WT Rx, R0 .. R3
0x3c..0x3f  :   -- Redundant (4)
0x40..0x4f  :   ASL Rx,    #0 .. #15
0x50..0x5f  :   ASL Rx,    #-16 .. #-1
0x60..0x63  :   ASL Rx,    R0 .. R3
0x64..0x67  :   -- Redundant (4)
0x68..0x6b  :   ASL.WT,    R0 .. R3
0x6c..0x6f  :   -- Redundant (4)
0x70..0x73  :	ASR Rx,    R0 .. R3
0x74..0x77  :   -- Redundant (4)
0x78..0x7b  :   ASR.WT Rx, R0 .. R3
0x7c..0x7f  :   -- Redundant (4)
0x80..0x8f  :   ROL Rx,    #0 .. #15
0x90..0x9f  :   ROL Rx,    #-16 .. #-1
0xa0..0xa3  :   ROL Rx,    R0 .. R3
0xa4..0xa7  :   -- Redundant (4)
0xa8..0xab  :   ROL.WT Rx, R0 .. R3
0xac..0xaf  :   -- Redundant (4)
0xb0..0xb3  :   ROR Rx,    R0 .. R3
0xb4..0xb7  :   -- Redundant (4)
0xb8..0xbb  :   ROR.WT Rx, R0 .. R3
0xbc..0xbf  :   -- Redundant (4)
0xc0..0xcf  :   ROXL Rx,   #0 .. #15
0xd0..0xdf  :   ROXL Rx,   #-16 .. #-1
0xe0..0xe3  :   ROXL Rx,   R0 .. R3
0xe4..0xe7  :   -- Redundant (4)
0xe8..0xeb  :   ROXL.WT Rx, R0 .. R3
0xec..0xef  :   -- Redundant (4)
0xf0..0xf3  :	ROXR Rx,    R0 .. R3
0xf4..0xf7  :   -- Redundant (4)
0xf8..0xfb  :   ROXR.WT Rx, R0 .. R3
0xfc..0xff  :   -- Redundant (4)
</table>

Decoding of second byte [b2] for instructions 0xDC..0xDF

There are 8 different instructions in the category 'test-or-set'.
These are positioned at the bytes with even values for the high-nibble.
<table>
2nd byte    : fixed part : variable part
0x00..0x0f  :   BTST Rx,   #0 .. #15
0x10..0x1f  :   -- Redundant
0x20..0x23  :   BTST Rx,    R0 .. R3
0x24..0x27  :   -- Redundant
0x28..0x2c  :   -- Redundant
0x2d..0x2f  :   -- Redundant
0x30..0x33  :   -- Redundant
0x34..0x37  :   -- Redundant
0x38..0x3c  :   -- Redundant
0x3d..0x3f  :   -- Redundant
0x40..0x4f  :   BCHG Rx,   #0 .. #15
0x50..0x5f  :   -- Redundant
0x60..0x63  :   BCHG Rx,    R0 .. R3
0x64..0x67  :   -- Redundant
0x68..0x6c  :   -- Redundant
0x6d..0x6f  :   -- Redundant
0x70..0x73  :   -- Redundant
0x74..0x77  :   -- Redundant
0x78..0x7c  :   -- Redundant
0x7d..0x7f  :   -- Redundant
0x80..0x8f  :   BCLR Rx,   #0 .. #15
0x90..0x9f  :   -- Redundant
0xa0..0xa3  :   BCLR Rx,    R0 .. R3
0xa4..0xa7  :   -- Redundant
0xa8..0xac  :   -- Redundant
0xad..0xaf  :   -- Redundant
0xb0..0xb3  :   -- Redundant
0xb4..0xb7  :   -- Redundant
0xb8..0xbc  :   -- Redundant
0xbd..0xbf  :   -- Redundant
0xc0..0xcf  :   BSET Rx,   #0 .. #15
0xd0..0xdf  :   -- Redundant
0xe0..0xe3  :   BSET Rx,    R0 .. R3
0xe4..0xe7  :   -- Redundant
0xe8..0xec  :   -- Redundant
0xed..0xef  :   -- Redundant
0xf0..0xf3  :   -- Redundant
0xf4..0xf7  :   -- Redundant
0xf8..0xfc  :   -- Redundant
0xfd..0xff  :   -- Redundant

</table>