Article View: bit.listserv.asm370
Article #1577SVC Interface for HLL-Help Wanted
From: Paul Robinson, Contractor
Date: Fri, 04 Dec 1992 01:09
Date: Fri, 04 Dec 1992 01:09
152 lines
6010 bytes
6010 bytes
I am attempting to write a routine to allow a program in
AAEC (Australian Atomic Energy Commission) Pascal (for the
IBM-370 series computers) to be able to issue SVC instructions.
I haven't done any IBM 370 assembler in over five years, so
I'm a little rusty and having a little trouble in remembering
the concepts. (I've always had trouble with Pointers vs.
values.)
This is what I want to do:
TYPE REGLIST=RECORD
R14,R15,R0,R1,R2,R3,R4,R5,
R6,R7,R8,R9,R10,R11,R12:INTEGER;
PROCEDURE SVC(Number:INTEGER; REGS:REGLIST); EXTERNAL;
Where REGLIST would be a record of 15 integers, or if it
was called from a FORTRAN program, it would be an array of
15 integers.
Where I am having trouble is in the use of the pointers
to an argument whether it's an address or a pointer to
an address.
Here is the code I have written to do what I want. Note
that the Execute instruction is not supposed to modify
the instruction and should execute as stored, since the
instruction code will be inserted.
Note this code is obviously nonsharable, so I need to also
know if there's a way to do this using GETMAIN to allocate
an area for the executable area:
---
* THIS CODE IS WRITTEN TO ALLOW A HIGH LEVEL LANGUAGE
* WHICH CAN ACCESS THE ADDRESSES OF DATA TO BE ABLE TO
* ISSUE SUPERVISOR CALL INSTRUCTIONS, THUS GIVING A C,
* PASCAL, OR POSSIBLY FORTRAN PROGRAM, MUCH OF THE
* FUNCTIONALITY OF ASSEMBLY LANGUAGE, INCLUDING ACCESS
* TO FEATURES NOT AVAILABLE FROM THE RUN-TIME LIBRARY.
*
* USE CARE WHEN CALLING THIS PROCEDURE. WRONG SVCS COULD
* KILL THE JOB OR DAMAGE YOUR ACCOUNT OR CAUSE THINGS YOU
* MIGHT NOT WANT TO HAPPEN. USE AT YOUR OWN RISK, AND I'D
* APPRECIATE INFORMATION ABOUT ANY ERRORS THAT MAY APPEAR
* IN THIS CODE.
*
* PAUL ROBINSON - INTERNET: TDARCOS@MCIMAIL.COM
* NO COPYRIGHT IS CLAIMED UPON THIS CODE.
*
R0 EQU 0
R1 EQU 1
R2 EQU 2
R3 EQU 3
R4 EQU 4
R5 EQU 5
R6 EQU 6
R7 EQU 7
R8 EQU 8
R9 EQU 9
R10 EQU 10
R11 EQU 11
R12 EQU 12
R13 EQU 13
R14 EQU 14
R15 EQU 15
SVC CSECT
USING *,R15 HOUSEKEEPING
STM R14,R12,12(R13)
LA R5,SAVE ADDRESS THE NEW SAVE AREA
ST R5,8(R13) AND AT THE OLD ONE
ST R13,4(R5) AND AT THE NEW ONE
LR R13,R15
*
* NOW I NEED TO GET THE VALUE OF THE FIRST ARG, THE
* SVC NUMBER TO EXECUTE.
*
L R5,0(R1) GET ADDR OF ARG #1
IC R5,3(R5) INTEGER HAS 0..256 IN LOW BYTE
STC R5,1(R13) STORE THE SVC CODE
* AS BYTE 2 OF THE INSTRUCTION
MVI 0(R13),X'0A' 0A IS THE CODE FOR 'SVC'
*
* YES, I KNOW THAT THERE IS ALREADY AN SVC AT THAT LOCATION
* BUT I'D PREFER TO BE SAFE. ALSO, IF I CHANGE THIS CODE
* TO USE A GETMAINED AREA OF 20 WORDS, THIS WILL STILL WORK.
*
*
* NOW GET THE ADDRESS OF THE ARRAY OF 15 WORDS OR THE
* RECORD OF 15 INTEGERS.
*
L R5,4(R1) GET ADDR OF ARG #2
LA R4,15 WE WILL PICK UP 15 WORDS
LA R3,12(R13) STORE THEM AT 0@R3 AND ON
BAL R7,MOVE MOVE THEM OUT
*
* NOW WE ARE GOING TO MAKE THE CALL.
*
LM R14,R12,12(R13) GET THE NEW REGS VALUES
EX 0,0(R13) ISSUE THE SVC
*
* IF THE USER HASN'T ISSUED AN EXIT, OR A FATAL ERROR OR
* OTHERWISE KILLED THIS PROGRAM, THEN WE RETURN WHATEVER
* VALUES ARE IN THE REGISTERS AND GO BACK TO WHOEVER
* CALLED US. (IF WE'RE STILL ALIVE....)
*
STM R14,R12,12(R13) SAVE THE REG VALUES
*
* DO THE OPPOSITE OF THE EXTRACT; RELOAD THE VALUES
* THAT ARE IN THE REGISTERS TO THE 15 WORDS OF REGISTER
* VALUES.
*
L R3,4(R1) GET ARG #2
LA R5,12(R13) LIST OF REGISTERS
LA R4,15 MOVE 15 WORDS
BAL R7,MOVE MOVE ARRAY BACK
*
L R13,SAVE+4 RETORE OLD SAVE AREA
LM R14,R12,12(R13)
MVI 12(R13),X'FF' PREVENT FORTRAN CRASH
BR R14 RETURN TO CALLER
*
MOVE DC 0H'0' EVEN ALIGNMENT
MVC 0(4,R5),0(R3) MOVE 4 CHARS
*
* ANOTHER METHOD WOULD BE TO USE
* L R6,0(R5)
* ST R6,0(R3)
* I DON'T KNOW IF THAT MIGHT BE FASTER OR WORK BETTER
* ON SOME MODELS, EXCEPT THAT THE ABOVE WILL WORK
* EVEN IF THE VALUES ARE NOT ON WORD BOUNDARIES.
*
LA R5,4(R5) GET THE NEXT WORD
LA R3,4(R3) AND WHERE TO STORE IT
BCT R4,MOVE LOOP R4 TIMES
BR R7 RETURN FROM SUBROUTINE
*
DC 0D'0' DOUBLEWORD ALIGNMENT
*
SAVE SVC 0 0 REPLACED BY ACTUAL NO.
DC H'0'
DC 20F'0' REST OF SAVE AREA
END
---
I receive the IBM-MAIN list and have just started subscribing
to the IBM 370 Assembler list. Please send any direct replies
to me at Internet address TDARCOS@MCIMAIL.COM, or at bitnet
address TDARCOS%MCIMAIL.COM@PUCC
Thank you,
Paul Robinson
Technical Details
Message-ID:
<ASM370%92120320085949@UGA.CC.UGA.EDU>Path:
arc1-ca.pugleaf.net!sparky!uunet!paladin.american.edu!auvm!NIHCU.BITNET!FZCShow Full Headers
Complete Article Headers
X-Google-Language: ENGLISH,ASCII-7-bit X-Google-Thread: fcdcb,342f6f564b2854b9,start X-Google-Attributes: gidfcdcb,public X-Google-ArrivalTime: 1992-12-03 18:08:27 PST Comments: Gated by NETNEWS@AUVM.AMERICAN.EDU Path: arc1-ca.pugleaf.net!sparky!uunet!paladin.american.edu!auvm!NIHCU.BITNET!FZC Message-ID: <ASM370%92120320085949@UGA.CC.UGA.EDU> Newsgroups: bit.listserv.asm370 Date: Thu, 3 Dec 1992 20:09:37 EST Sender: IBM 370 Assembly Programming Discussion List <ASM370@UGA.BITNET> From: "Paul Robinson, Contractor" <FZC@NIHCU.BITNET> Subject: SVC Interface for HLL-Help Wanted Comments: To: ibm-main@dearn.BITNET, asm370@uga.BITNET, h198@hosp.med.umich.edu Comments: cc: tdarcos@mcimail.com Lines: 152