As an example of using the HSPSERV macro with the HSPALET parameter,
suppose PGM1 and PGM2 that are illustrated in Figure 2 want to gain fast transfer of data
to and from expanded storage. Both programs use ALESERV ADD to add
entries to access lists; PGM1 adds to its PASN-AL and PGM2 adds to
its DU-AL. They use HSPALET on HSPSERV. The HSPALET parameter is
available to both problem state programs and supervisor state programs. Figure 1 describes this scenario.
Before you issue the HSPSERV macro with the HSPALET parameter,
place the address of a 144-byte work area in GPR 13 and zero in AR
13.
Example of an HSPSERV with additional performance: The following
example shows a program creating a non-shared standard hiperspace.
To get additional performance from HSPSERV, the program obtains the
ALET from the ALESERV macro and uses the ALET as input to HSPSERV.
The example assumes the ASC mode is primary.
⋮
* DSPSERV CREATES A NON-SHARED STANDARD HIPERSPACE OF 20 4096 BYTE-BLOCKS
*
DSPSERV CREATE,NAME=HSNAME,TYPE=HIPERSPACE,HSTYPE=SCROLL, X
SHARE=NO,BLOCKS=20,STOKEN=HSSTOKEN,ORIGIN=HSORIG1
*
* ALESERV RETURNS AN ALET ON THE DU-AL FOR THE HIPERSPACE
*
ALESERV ADD,STOKEN=HSSTOKEN,ALET=HSALET,AL=WORKUNIT
*
* THE STORAGE MACRO OBTAINS FOUR PAGES OF ADDRESS SPACE STORAGE,
* THE BNDRY=PAGE PARAMETER ALIGNS PAGES ON A 4K BOUNDARY
* - THE FIRST AND SECOND PAGES ARE THE SWRITE SOURCE
* - THE THIRD AND FOURTH PAGES ARE THE SREAD TARGET
* COPY INTO FIRST AND SECOND PAGES THE DATA TO BE WRITTEN TO HIPERSPACE
.
STORAGE OBTAIN,LENGTH=4096*4,BNDRY=PAGE
ST 1,ASPTR * SAVE ADDR SPACE STORAGE ADDRESS
MVC 0(20,1),SRCTEXT1 * INIT FIRST ADDR SPACE PAGE
A 1,ONEBLK * COMPUTE PAGE TWO ADDRESS
MVC 0(20,1),SRCTEXT2 * INIT SECOND ADDR SPACE PAGE
.
* SET UP THE SWRITE RANGE LIST TO WRITE FROM THE FIRST AND SECOND
* ADDRESS SPACE PAGES INTO THE HIPERSPACE
.
L 1,ASPTR * GET FIRST ADDR PAGE ADDRESS
ST 1,ASPTR1 * PUT ADDRESS INTO RANGE LIST
.
* SAVE CONTENTS OF AR/GPR 13 BEFORE RESETTING THEM FOR HSPSERV
.
ST 13,SAVER13 * SAVE THE CONTENTS OF GPR 13
EAR 13,13 * LOAD GPR 13 FROM AR 13
ST 13,SAVEAR13 * SAVE THE CONTENTS OF AR 13
.
* ESTABLISH ADDRESS OF 144-BYTE SAVE AREA, AS HSPALET ON HSPSERV REQUIRES
* AND WRITE TWO PAGES FROM THE ADDRESS SPACE TO THE HIPERSPACE
.
SLR 13,13 * SET GPR 13 TO 0
SAR 13,13 * SET AR 13 TO 0
LA 13,WORKAREA * SET UP AR/GPR 13 TO WORKAREA ADDR
HSPSERV SWRITE,STOKEN=HSSTOKEN,RANGLIST=RANGPTR1,HSPALET=HSALET
* AFTER THE SWRITE, THE FIRST TWO ADDRESS SPACE PAGES MIGHT BE OVERLAID
.
* RESTORE ORIGINAL CONTENTS OF AR/GPR 13
.
L 13,SAVEAR13 * SET GPR 13 TO SAVED AR 13
SAR 13,13 * RESET AR 13
L 13,SAVER13 * RESET GPR 13
.
.
* SET UP THE SREAD RANGE LIST TO READ INTO THE THIRD AND FOURTH
* ADDRESS SPACE PAGES WHAT WAS PREVIOUSLY WRITTEN TO THE HIPERSPACE
.
MVC HSORIG2,HSORIG1 * COPY ORIGIN OF HIPERSPACE TO HSORIG2
L 1,ASPTR * GET FIRST ADDR PAGE ADDRESS
A 1,TWOBLKS * COMPUTE THIRD PAGE ADDRESS
ST 1,ASPTR2 * PUT ADDRESS INTO RANGE LIST
.
* SAVE CONTENTS OF AR/GPR 13
.
ST 13,SAVER13 * SAVE THE CONTENTS OF GPR 13
EAR 13,13 * LOAD GPR 13 FROM AR 13
ST 13,SAVEAR13 * SAVE THE CONTENTS OF AR 13
.
* ESTABLISH ADDRESS OF 144-BYTE SAVE AREA, AS HSPALET ON HSPSERV REQUIRES,
* AND READ TWO BLOCKS OF DATA FROM THE HIPERSPACE INTO THE
* THIRD AND FOURTH PAGES IN THE ADDRESS SPACE STORAGE USING HSPALET
.
SLR 13,13 * SET GPR 13 TO 0
SAR 13,13 * SET AR 13 TO 0
LA 13,WORKAREA * SET UP AR/GPR 13 TO WORKAREA ADDR
HSPSERV SREAD,STOKEN=HSSTOKEN,RANGLIST=RANGPTR2,HSPALET=HSALET
.
* RESTORE ORIGINAL CONTENTS OF AR/GPR 13
.
L 13,SAVEAR13 * SET GPR 13 TO SAVED AR 13
SAR 13,13 * RESET AR 13
L 13,SAVER13 * RESET GPR 13
.
* FREE THE ALET, FREE THE ADDRESS SPACE STORAGE, AND DELETE THE HIPERSPACE
.
* DATA AREAS AND CONSTANTS
.
HSNAME DC CL8'SCROLLHS' * NAME FOR THE HIPERSPACE
HSSTOKEN DS CL8 * STOKEN FOR THE HIPERSPACE
HSALET DS CL4 * ALET FOR THE HIPERSPACE
ASPTR DS 1F * LOCATION OF ADDR SPACE STORAGE
SAVER13 DS 1F * LOCATION TO SAVE GPR 13
SAVEAR13 DS 1F * LOCATION TO SAVE AR 13
WORKAREA DS CL144 * WORK AREA FOR HSPSERV
ONEBLK DC F'4096' * LENGTH OF ONE BLOCK OF STORAGE
TWOBLKS DC F'8092' * LENGTH OF TWO BLOCKS OF STORAGE
SRCTEXT1 DC CL20' INVENTORY ITEMS '
SRCTEXT2 DC CL20' INVENTORY SURPLUSES'
DS 0F
RANGPTR1 DC A(SWRITLST) * ADDRESS OF SWRITE RANGE LIST
RANGPTR2 DC A(SREADLST) * ADDRESS OF SREAD RANGE LIST
DS 0F
SWRITLST DS 0CL12 * SWRITE RANGE LIST
ASPTR1 DS F * START OF ADDRESS SPACE SOURCE
HSORIG1 DS F * TARGET LOCATION IN HIPERSPACE
NUMBLKS1 DC F'2' * NUMBER OF 4K BLOCKS IN SWRITE
DS 0F
SREADLST DS 0CL12 * SREAD RANGE LIST
ASPTR2 DS F * TARGET LOCATION IN ADDR SPACE
HSORIG2 DS F * START OF HIPERSPACE SOURCE
NUMBLKS2 DC F'2' * NUMBER OF 4K BLOCKS IN SREAD
DS 0F