mirror of
https://github.com/SDL-Hercules-390/hyperion.git
synced 2026-04-13 07:25:22 +02:00
Original/legacy cmpsc.c implementation moved to altcmpsc.dll module. Refer to Release Notes and/or README.CMPSC documents for more details.
95 lines
3.2 KiB
C
95 lines
3.2 KiB
C
/* CMPSCBIT.H (c) Copyright "Fish" (David B. Trout), 2012-2014 */
|
|
/* Compression Call Bit Extraction Macros */
|
|
/* */
|
|
/* Released under "The Q Public License Version 1" */
|
|
/* (http://www.hercules-390.org/herclic.html) as modifications to */
|
|
/* Hercules. */
|
|
|
|
#ifndef _CMPSCBIT_H_
|
|
#define _CMPSCBIT_H_
|
|
|
|
/*********************************************************************\
|
|
Masks for extracting bits from unsigned 64-bit value
|
|
\*********************************************************************/
|
|
|
|
// NOTE: for the benefit of non-mainframe people, mainframes are
|
|
// big-endian and thus we count our bits from left to right.
|
|
|
|
// (right justified)
|
|
|
|
#define U8R1 0x01
|
|
#define U8R2 0x03
|
|
#define U8R3 0x07
|
|
#define U8R4 0x0F
|
|
#define U8R5 0x1F
|
|
#define U8R6 0x3F
|
|
#define U8R7 0x7F
|
|
#define U8R8 0xFF
|
|
|
|
#define U16R1 0x0001
|
|
#define U16R2 0x0003
|
|
#define U16R3 0x0007
|
|
#define U16R4 0x000F
|
|
#define U16R5 0x001F
|
|
#define U16R6 0x003F
|
|
#define U16R7 0x007F
|
|
#define U16R8 0x00FF
|
|
#define U16R9 0x01FF
|
|
#define U16R10 0x03FF
|
|
#define U16R11 0x07FF
|
|
#define U16R12 0x0FFF
|
|
#define U16R13 0x1FFF
|
|
#define U16R14 0x3FFF
|
|
#define U16R15 0x7FFF
|
|
#define U16R16 0xFFFF
|
|
|
|
// (left justified)
|
|
|
|
#define U8L1 0x80
|
|
#define U8L2 0xC0
|
|
#define U8L3 0xE0
|
|
#define U8L4 0xF0
|
|
#define U8L5 0xF8
|
|
#define U8L6 0xFC
|
|
#define U8L7 0xFE
|
|
#define U8L8 0xFF
|
|
|
|
#define U16L1 0x8000
|
|
#define U16L2 0xC000
|
|
#define U16L3 0xE000
|
|
#define U16L4 0xF000
|
|
#define U16L5 0xF800
|
|
#define U16L6 0xFC00
|
|
#define U16L7 0xFE00
|
|
#define U16L8 0xFF00
|
|
#define U16L9 0xFF80
|
|
#define U16L10 0xFFC0
|
|
#define U16L11 0xFFE0
|
|
#define U16L12 0xFFF0
|
|
#define U16L13 0xFFF8
|
|
#define U16L14 0xFFFC
|
|
#define U16L15 0xFFFE
|
|
#define U16L16 0xFFFF
|
|
|
|
/*********************************************************************\
|
|
Macros for extracting bits from unsigned 64-bit value
|
|
\*********************************************************************/
|
|
|
|
// NOTE: for the benefit of non-mainframe people, mainframes are
|
|
// big-endian and thus we count our bits from left to right.
|
|
|
|
#define U64BITSR( u64, start, len, mask ) (((u64) >> (64-(start+len ))) & mask)
|
|
#define U64BITSL( u64, start, len, width, mask ) (((u64) >> (64-(start+width))) & mask)
|
|
|
|
#define ECE_U8R( start, len ) ((U8) U64BITSR( ece, start, len, U8R ## len ))
|
|
#define ECE_U16R( start, len ) ((U16) U64BITSR( ece, start, len, U16R ## len ))
|
|
|
|
#define CCE_U8R( start, len ) ((U8) U64BITSR( cce, start, len, U8R ## len ))
|
|
#define CCE_U16R( start, len ) ((U16) U64BITSR( cce, start, len, U16R ## len ))
|
|
#define SD1_U8R( start, len ) ((U8) U64BITSR( sd1, start, len, U8R ## len ))
|
|
|
|
#define CCE_U16L( start, len ) ((U16) U64BITSL( cce, start, len, 16, U16L ## len ))
|
|
#define SD1_U16L( start, len ) ((U16) U64BITSL( sd1, start, len, 16, U16L ## len ))
|
|
|
|
#endif // _CMPSCBIT_H_
|