'\'Fish\' (David B. Trout)' david.b.trout@gmail.com [hercules-390]
2017-12-15 21:04:01 UTC
Another question for the developers.
I'm working on revamping Hercules's facilities support implementation and in the 'archlvl.c' source file I'm seeing:
#define ALS0 0x01 /* S/370 */
#define ALS1 0x02 /* ESA/390 */
#define ALS2 0x04 /* Z/ARCH */
#define ALS3 0x08 /* ARCHLVL 3 */
and:
/*-------------------------------------------*/
/* Architecture Level Table (archtab) */
/*-------------------------------------------*/
static ARCHTAB archtab[] =
{
#if defined( _370 )
/* S/370 - ALS0 */
ARCHLVL( _ARCH_370_NAME, ARCH_370, ALS0 )
ARCHLVL( "370", ARCH_370, ALS0 )
ARCHLVL( "S370", ARCH_370, ALS0 )
ARCHLVL( "S/370", ARCH_370, ALS0 )
ARCHLVL( "ALS0", ARCH_370, ALS0 )
#endif
/*
Note that XA and XB are not offered, and
neither is G3 (debut of relative/immediate).
*/
#if defined( _390 )
/* ESA/390 - ALS1 */
ARCHLVL( _ARCH_390_NAME, ARCH_390, ALS1 )
ARCHLVL( "ESA", ARCH_390, ALS1 )
ARCHLVL( "ESA390", ARCH_390, ALS1 )
ARCHLVL( "S/390", ARCH_390, ALS1 )
ARCHLVL( "S390", ARCH_390, ALS1 )
ARCHLVL( "390", ARCH_390, ALS1 )
ARCHLVL( "ALS1", ARCH_390, ALS1 )
#endif
#if defined( _900 )
/* z/Arch - ALS2 */
ARCHLVL( "ESA/ME", ARCH_900, ALS2 )
ARCHLVL( "ESAME", ARCH_900, ALS2 )
ARCHLVL( "ALS2", ARCH_900, ALS2 )
/* z/Arch - ALS3 */
ARCHLVL( _ARCH_900_NAME, ARCH_900, ALS3 )
ARCHLVL( "zArch", ARCH_900, ALS3 )
ARCHLVL( "z", ARCH_900, ALS3 )
ARCHLVL( "ALS3", ARCH_900, ALS3 )
#endif
{ NULL, 0, 0 } // (end of table)
};
and:
/*--------------------------------------------------*/
/* FACTAB struct (Facility Table) */
/*--------------------------------------------------*/
struct FACTAB
{
const char* name; /* Facility Name */
const int bitno; /* Bit number */
const BYTE mode; /* Mode indicator */
#define S370 0x01 /* S/370 feature */
#define ESA390 0x02 /* ESA/390 feature */
#define ZARCH 0x04 /* ESAME feature */
#define Z390 (ZARCH|ESA390) /* Exists in ESAME only,
but is also indicated
in ESA390 */
[...etc...]
and:
static FACTAB factab[] =
{
/* Facility Default Mandatory Supported Group */
#if defined(_FEATURE_ESAME_N3_ESA390)
FACILITY( N3, ESA390|ZARCH, NONE, ESA390|ZARCH, ALS1|ALS2|ALS3 )
#endif
#if defined(_FEATURE_ESAME)
FACILITY( ESAME_INSTALLED, ESA390|ZARCH, NONE, ESA390|ZARCH, ALS2|ALS3 )
FACILITY( ESAME_ACTIVE, ZARCH, ZARCH, ZARCH, ALS2|ALS3 )
#endif
#if defined(_FEATURE_DAT_ENHANCEMENT_FACILITY_1)
FACILITY( IDTE_INSTALLED, Z390, NONE, Z390, ALS2|ALS3 )
FACILITY( IDTE_SC_SEGTAB, 0, /*ZARCH*/ NONE, 0, /*ZARCH*/ ALS2|ALS3 )
FACILITY( IDTE_SC_REGTAB, 0, /*ZARCH*/ NONE, 0, /*ZARCH*/ ALS2|ALS3 )
#endif
#if defined(_FEATURE_ASN_AND_LX_REUSE_FACILITY)
FACILITY( ASN_LX_REUSE, 0, /*Z390*/ NONE, Z390, ALS2|ALS3 )
#endif
[...etc...]
My question is, what the heck is an ALS? (Architecture Level Set)
Is that an IBM thing or a Hercules thing?
As best as I can tell its only purpose is to somehow indicate which archlvl (archmode) architectures each facility table entry is valid for. But if so, then why do we have a separate "Supported" column? What is supposed to be the difference between the "Supported" column and the "Group" column? Couldn't we just have one or the other and get rid of the other? It's very confusing to me!
Help!
I'm working on revamping Hercules's facilities support implementation and in the 'archlvl.c' source file I'm seeing:
#define ALS0 0x01 /* S/370 */
#define ALS1 0x02 /* ESA/390 */
#define ALS2 0x04 /* Z/ARCH */
#define ALS3 0x08 /* ARCHLVL 3 */
and:
/*-------------------------------------------*/
/* Architecture Level Table (archtab) */
/*-------------------------------------------*/
static ARCHTAB archtab[] =
{
#if defined( _370 )
/* S/370 - ALS0 */
ARCHLVL( _ARCH_370_NAME, ARCH_370, ALS0 )
ARCHLVL( "370", ARCH_370, ALS0 )
ARCHLVL( "S370", ARCH_370, ALS0 )
ARCHLVL( "S/370", ARCH_370, ALS0 )
ARCHLVL( "ALS0", ARCH_370, ALS0 )
#endif
/*
Note that XA and XB are not offered, and
neither is G3 (debut of relative/immediate).
*/
#if defined( _390 )
/* ESA/390 - ALS1 */
ARCHLVL( _ARCH_390_NAME, ARCH_390, ALS1 )
ARCHLVL( "ESA", ARCH_390, ALS1 )
ARCHLVL( "ESA390", ARCH_390, ALS1 )
ARCHLVL( "S/390", ARCH_390, ALS1 )
ARCHLVL( "S390", ARCH_390, ALS1 )
ARCHLVL( "390", ARCH_390, ALS1 )
ARCHLVL( "ALS1", ARCH_390, ALS1 )
#endif
#if defined( _900 )
/* z/Arch - ALS2 */
ARCHLVL( "ESA/ME", ARCH_900, ALS2 )
ARCHLVL( "ESAME", ARCH_900, ALS2 )
ARCHLVL( "ALS2", ARCH_900, ALS2 )
/* z/Arch - ALS3 */
ARCHLVL( _ARCH_900_NAME, ARCH_900, ALS3 )
ARCHLVL( "zArch", ARCH_900, ALS3 )
ARCHLVL( "z", ARCH_900, ALS3 )
ARCHLVL( "ALS3", ARCH_900, ALS3 )
#endif
{ NULL, 0, 0 } // (end of table)
};
and:
/*--------------------------------------------------*/
/* FACTAB struct (Facility Table) */
/*--------------------------------------------------*/
struct FACTAB
{
const char* name; /* Facility Name */
const int bitno; /* Bit number */
const BYTE mode; /* Mode indicator */
#define S370 0x01 /* S/370 feature */
#define ESA390 0x02 /* ESA/390 feature */
#define ZARCH 0x04 /* ESAME feature */
#define Z390 (ZARCH|ESA390) /* Exists in ESAME only,
but is also indicated
in ESA390 */
[...etc...]
and:
static FACTAB factab[] =
{
/* Facility Default Mandatory Supported Group */
#if defined(_FEATURE_ESAME_N3_ESA390)
FACILITY( N3, ESA390|ZARCH, NONE, ESA390|ZARCH, ALS1|ALS2|ALS3 )
#endif
#if defined(_FEATURE_ESAME)
FACILITY( ESAME_INSTALLED, ESA390|ZARCH, NONE, ESA390|ZARCH, ALS2|ALS3 )
FACILITY( ESAME_ACTIVE, ZARCH, ZARCH, ZARCH, ALS2|ALS3 )
#endif
#if defined(_FEATURE_DAT_ENHANCEMENT_FACILITY_1)
FACILITY( IDTE_INSTALLED, Z390, NONE, Z390, ALS2|ALS3 )
FACILITY( IDTE_SC_SEGTAB, 0, /*ZARCH*/ NONE, 0, /*ZARCH*/ ALS2|ALS3 )
FACILITY( IDTE_SC_REGTAB, 0, /*ZARCH*/ NONE, 0, /*ZARCH*/ ALS2|ALS3 )
#endif
#if defined(_FEATURE_ASN_AND_LX_REUSE_FACILITY)
FACILITY( ASN_LX_REUSE, 0, /*Z390*/ NONE, Z390, ALS2|ALS3 )
#endif
[...etc...]
My question is, what the heck is an ALS? (Architecture Level Set)
Is that an IBM thing or a Hercules thing?
As best as I can tell its only purpose is to somehow indicate which archlvl (archmode) architectures each facility table entry is valid for. But if so, then why do we have a separate "Supported" column? What is supposed to be the difference between the "Supported" column and the "Group" column? Couldn't we just have one or the other and get rid of the other? It's very confusing to me!
Help!
--
"Fish" (David B. Trout)
Software Development Laboratories
http://www.softdevlabs.com
mail: ***@softdevlabs.com
"Fish" (David B. Trout)
Software Development Laboratories
http://www.softdevlabs.com
mail: ***@softdevlabs.com