mirror of
https://github.com/moshix/mvs.git
synced 2026-05-05 07:43:49 +00:00
660 lines
18 KiB
Plaintext
660 lines
18 KiB
Plaintext
*********
|
||
*
|
||
* PGMID. MVS.ALC (LINKED TO MVS.MOD FOR DYNMAIC LOAD AND EXEC)
|
||
* AUTHOR. DON HIGGINS
|
||
* DATE. 05/26/87
|
||
* REMARKS.
|
||
* THIS MODULE DEFINES MVS SVC HANDLER AND EXTERNAL
|
||
* INTERRUPT HANDLER TO SUPPORT EXECUTION OF MODULES WITH
|
||
* MVS SVC'S. RETRUN FROM THIS MODULE IS VIA LPSW WHICH
|
||
* PLACES CALLING PROGRAM IN PROBLEM STATE WITH SUPERVISOR
|
||
* AND NO EXTERNAL INTERRUPTS ENABLED (EXTERNAL CAN BE TURNED
|
||
* ON LATER IF DESIRED). FOR MVS SVC EQU'S SEE MVS.DOC.
|
||
*
|
||
* MAINTENANCE.
|
||
*
|
||
* 05/30/87 CHANGE SVC 3 EXIT TO RETURN IN SUPR STATE, ADD SVC 10
|
||
* 05/31/87 ADD IGC013 ABEND T1/T4
|
||
* 06/01/87 USE SVCR15 TO SIMPLIFY RTN SAVE/RESTORE, CHANGE IGC NAMES
|
||
* 06/04/87 SAVE R14,R1 ACROSS EXECRTN FOR SVC'S AND INS'S
|
||
* 06/06/87 FIX WTOR TO CLEAR R15 AND USE EXTERNAL INTERRUPT TO POST
|
||
*********
|
||
*
|
||
* MVS NUCLEUS INITIALIZATION PROGRAM (NIP)
|
||
*
|
||
*********
|
||
MVS CSECT
|
||
USING MVS,R15
|
||
STM R14,R6,12(R13)
|
||
LR R6,R15
|
||
DROP R15
|
||
USING MVS,R6
|
||
SVC TRACE
|
||
DC C'IOF' TURN OFF INTERRUPTS FOR WTOR FACILITY
|
||
*
|
||
* INIT CVT
|
||
*
|
||
LA R1,CVT
|
||
USING IHACVT,R1
|
||
ST R1,16 STORE CVT ADDRESS IN LOW MEMORY
|
||
LA R0,TCB
|
||
ST R0,CVTTCBP CVT TCB PTR
|
||
LA R0,SMCA
|
||
ST R0,CVTSMCA CVT SMCA PTR
|
||
L R0,ASCASL
|
||
ST R0,CVTMZ00 CVT END OF REAL MEMORY
|
||
*
|
||
* INIT SVC TABLE
|
||
*
|
||
LA R1,4*256
|
||
SVC GMAIN
|
||
LTR R0,R0
|
||
BNZ ABEND80A NO MEMORY FOR SVC TABLE
|
||
ST R2,ASVCTAB
|
||
LR R0,R2
|
||
LA R1,4*256
|
||
SR R14,R14
|
||
SR R15,R15
|
||
MVCL R0,R14 CLEAR SVC TABLE
|
||
LA R0,IGC0001
|
||
ST R0,4*1(R2) INIT SVC 1 WAIT
|
||
LA R0,IGC0002
|
||
ST R0,4*2(R2) INIT SVC 2 POST
|
||
LA R0,IGC0003
|
||
ST R0,4*3(R2) INIT SVC 3 EXIT
|
||
LA R0,IGC0010
|
||
ST R0,4*10(R2) INIT SVC 10 GMAINR/FMAINR
|
||
LA R0,IGC0013
|
||
ST R0,4*13(R2) INIT SVC 13 ABEND T1
|
||
LA R0,IGC0035
|
||
ST R0,4*35(R2) INIT SVC 35 WTO/WTOR
|
||
*
|
||
* INIT INS TABLE
|
||
*
|
||
LA R1,4*256
|
||
SVC GMAIN
|
||
LTR R0,R0
|
||
BNZ ABEND80A NO MEMORY FOR INS TABLE
|
||
ST R2,AINSTAB
|
||
LR R0,R2
|
||
LA R1,4*256
|
||
SR R14,R14
|
||
SR R15,R15
|
||
MVCL R0,R14 CLEAR SVC TABLE
|
||
*
|
||
* INIT SVC, PGM, AND EXT NEW PSW'S
|
||
*
|
||
LA R0,SVCRTN
|
||
ST R0,SVCPSW+4 INIT NEW SVC PSW ADDR
|
||
LA R0,PGMRTN
|
||
ST R0,PGMPSW+4 INIT NEW PGM PSW ADDR
|
||
LA R0,EXTRTN
|
||
ST R0,EXTPSW+4 INIT NEW EXT PSW ADDR
|
||
MVC NEWSVC(8),SVCPSW SET NEW SVC PSW
|
||
MVC NEWPGM(8),PGMPSW SET NEW PGM PSW
|
||
MVC NEWEXT(8),EXTPSW SET NEW EXT PSW
|
||
LM R14,R6,12(R13) RESTORE CALLER'S REG'S
|
||
DROP R6
|
||
USING MVS,R15
|
||
ST R14,PRBPSW+4 INIT PROBLEM STATE EXIT PSW ADDR
|
||
*
|
||
* EXIT TO CALLER IN PROBLEM STATE TO ACTIVATE MVS SHELL ENVIRONMENT
|
||
*
|
||
LPSW PRBPSW EXIT WITH NEW PROBLEM PSW
|
||
DROP
|
||
SVCPSW DS 0D
|
||
DC X'060C0000',A(*-*) ENTER SVC HANDLER IN SUPR STATE
|
||
PGMPSW DS 0D
|
||
DC X'060C0000',A(*-*) ENTER PGM HANDLER IN SUPR STATE
|
||
EXTPSW DS 0D
|
||
DC X'060C0000',A(*-*) ENTER EXT HANDLER IN SUPR STATE
|
||
PRBPSW DS 0D
|
||
DC X'070D0000',A(*-*) RETURN WITH PROB. STATE AND EXT. INT.
|
||
*********
|
||
*
|
||
* MVS SVC INTERRUPT HANDLER
|
||
*
|
||
*********
|
||
SVCRTN EQU *
|
||
SVC TRACE
|
||
DC C'SVC'
|
||
DROP
|
||
ST R15,SVCR15
|
||
L R15,NEWSVC+4
|
||
USING SVCRTN,R15
|
||
STM R0,R14,SVCSAV
|
||
L R14,SVCR15
|
||
ST R14,SVCSAV+15*4
|
||
L R14,OLDSVC+4 R14 = ADDR SVC + 2
|
||
BCTR R14,0
|
||
SR R2,R2
|
||
IC R2,0(R14) R2=SVC#
|
||
L R3,ASVCTAB
|
||
LA R4,IGC0NNN
|
||
BAL R14,EXECRTN EXECUTE SVC
|
||
USING *,R14
|
||
LTR R15,R15 WAS EXEC OK
|
||
BNZ ABEND106
|
||
LM R2,R13,SVCSAV+2*4 RESTORE USER REGS (2-13 ONLY)
|
||
LPSW OLDSVC EXIT TO INSTR AFTER ORIG SVC IN PROB STATE
|
||
ABEND106 EQU *
|
||
L R1,=X'80106000' NO, ABEND 106 WITH DUMP
|
||
LA R2,13
|
||
L R3,ASVCTAB
|
||
LA R4,IGC0NNN
|
||
BAL R14,EXECRTN EXECUTE ABEND SVC
|
||
DROP
|
||
USING *,R14
|
||
OI OLDSVC+1,X'02' TURN ON WAIT BIT IN OLD SVC PSW
|
||
LM R0,R15,SVCSAV RESTORE ALL REGS TO ORIG.
|
||
LPSW OLDSVC IF IT RETURN'S, LOAD WAIT STATE OLD PSW
|
||
DROP
|
||
SVCSAV DC 16F'0'
|
||
********
|
||
*
|
||
* PROGRAM INTERRUPT ROUTINE
|
||
*
|
||
********
|
||
PGMRTN EQU *
|
||
SVC TRACE
|
||
DC C'PGM'
|
||
DROP
|
||
ST R15,PGMR15 TEMP SAVE R15 IN LOW MEMORY
|
||
L R15,NEWPGM+4
|
||
USING PGMRTN,R15
|
||
STM R0,R14,PGMSAV SAVE REGS
|
||
L R14,PGMR15
|
||
ST R14,PGMSAV+4*15
|
||
CLI OLDPGM+3,2 IS THIS PRIVILEGED OR OPERATION EXCEPTION
|
||
BH ABEND0CX NO, ABEND 0CX WITH DUMP
|
||
L R14,OLDPGM+4 YES, TRY TO LOAD INS0NNN MACRO INSTRUCTION
|
||
SR R2,R2
|
||
IC R2,0(R14) R2 = OPERATION CODE
|
||
L R3,AINSTAB
|
||
LA R4,INS0NNN
|
||
BAL R14,EXECRTN EXECUTE INS RTN IF FOUND
|
||
USING *,R14
|
||
LTR R15,R15 WAS MACRO INSTR. EXEC OK
|
||
BNZ ABEND0CX NO, ABEND 0CX WITH DUMP
|
||
LM R0,R15,PGMSAV RESTORE ALL REGS
|
||
LPSW OLDPGM EXIT TO NEXT INSTR IN PROB STATE
|
||
DROP
|
||
ABEND0CX EQU *
|
||
BALR R15,0
|
||
USING *,R15
|
||
SR R1,R1
|
||
IC R1,OLDPGM+3
|
||
SLL R1,12
|
||
O R1,=X'800C0000' R1=0CX SYSTEM ABEND WITH DUMP
|
||
LA R2,13
|
||
L R3,ASVCTAB
|
||
LA R4,IGC0NNN
|
||
BAL R14,EXECRTN EXECUTE ABEND SVC
|
||
DROP
|
||
USING *,R14
|
||
OI OLDPGM+1,X'02' TURN ON WAIT BIT IN OLD PGM PSW
|
||
LM R0,R15,PGMSAV
|
||
LPSW OLDPGM IF IT RETURN'S, LOAD WAIT STATE OLD PSW
|
||
DROP
|
||
PGMSAV DC 16F'0' SAVE R0-R15
|
||
********
|
||
*
|
||
* EXTERNAL INTERRUPT ROUTINE
|
||
*
|
||
* 1. CURRENTLY ONLY FUNCTION IMPLEMENTED VIA EXTERNAL INTERRUPT IS
|
||
* ENTRY OF WTOR REPLY WITH POST OF ECB WHEN DONE. ONLY ONE WTOR
|
||
* ACTIVE AT A TIME IS SUPPORTED IN THIS SINGLE USER SHELL.
|
||
* PC/370 RELEASE 2.0 EXECUTES EXTERNAL INTERRUPT ROUTINE EVERY
|
||
* 256 INSTRUCTIONS IF ENABLED AND PROBLEM STATE. THIS WILL
|
||
* CAUSE HESITATION ON SLOWER PC'S AND HAVING EXTERNAL INTERRUPT
|
||
* ENABLED FOR THIS FACILITY INTRODUCES AROUND 10% OVERHEAD (25
|
||
* EXTRA INSTRUCTIONS EVERY 256 INSTRUCTIONS).
|
||
*
|
||
********
|
||
EXTRTN EQU *
|
||
SVC TRACE
|
||
DC C'EXT'
|
||
DROP
|
||
ST R15,EXTR15 TEMP SAV R15
|
||
L R15,NEWEXT+4
|
||
USING EXTRTN,R15
|
||
STM R0,R14,EXTSAV SAVE REGS
|
||
L R14,EXTR15
|
||
ST R14,EXTSAV+4*15
|
||
CLI WTORPEND,TRUE EXIT IF NO WTOR PENDING
|
||
BNE EXTEXT
|
||
SVC KEYSTAT IS THERE KEYBOARD INPUT PENDING
|
||
LTR R0,R0 EXIT IF NO KEY PENDING
|
||
BZ EXTEXT
|
||
L R3,WTORCCNT
|
||
L R4,WTORCRPY
|
||
WTORLOOP EQU *
|
||
SVC KEYSTAT IS THERE KEYBOARD INPUT PENDING
|
||
LTR R0,R0
|
||
BZ WTORSAVE
|
||
SVC KEYREAD
|
||
CLM R0,1,=AL1(CR)
|
||
BE WTORDONE STOP AT CARRIAGE RETURN
|
||
STC R0,0(R4)
|
||
LA R4,1(R4)
|
||
BCT R3,WTORLOOP REPEAT UNTIL NO MORE CHAR OR FULL
|
||
WTORDONE EQU *
|
||
MVI WTORPEND,FALSE
|
||
LA R2,LF
|
||
SVC WRITECHR
|
||
LA R2,CR
|
||
SVC WRITECHR
|
||
L R2,WTORTCNT
|
||
SR R2,R3
|
||
BZ WTORSKIP SKIP CONVERT IF NO CHAR.
|
||
L R1,WTORARPY
|
||
SVC ASCEBC CONVERT REPLY TO EBCDIC
|
||
WTORSKIP EQU *
|
||
L R1,WTORAECB
|
||
LA R6,IGC0002
|
||
BALR R14,R6 POST WTOR ECB VIA BRANCH ENTRY TO POST
|
||
USING *,R14
|
||
LM R0,R15,EXTSAV RESTORE ALL REGS
|
||
LPSW OLDEXT EXIT TO NEXT INSTR. OR EXIT FROM WAIT
|
||
DROP R14
|
||
WTORSAVE EQU *
|
||
ST R3,WTORCCNT
|
||
ST R4,WTORCRPY
|
||
EXTEXT EQU *
|
||
LM R0,R15,EXTSAV RESTORE ALL REGS
|
||
LPSW OLDEXT EXIT TO NEXT INSTR
|
||
DROP
|
||
EXTSAV DC 16F'0' SAVE R0-R15
|
||
********
|
||
*
|
||
* EXECUTE SVC/INS ROUTINE FROM SVC, PGM, OR EXT INTERRUPT HANDLER
|
||
*
|
||
* NOTE THIS ROUTINE ALONG WITH INTERRUPT HANDLERS IS CURRENTLY ONLY
|
||
* SERIALLY REUSABLE SO NO SVC CAN ISSUE MVS SVC ETC. (PC/370 SVC'S OK).
|
||
* THIS IS A SINGLE USER NON-MULTI-TASKING VERSION OF MVS.
|
||
*
|
||
* R2 = NUMBER OF SVC OR USER DEFINED INSTRUCTION OP CODE
|
||
* R3 = SVC/INS TABLE
|
||
* R4 = ADDRES OF MODULE NAME 'IGC0NNN' OR 'INS0NNN'
|
||
* R14 = RETURN ADDRESS
|
||
* R15 = NZ IF LOAD FAILED ELSE ZERO FOR SUCCESSFUL EXECUTION
|
||
*
|
||
EXECRTN EQU *
|
||
BALR R7,0
|
||
USING *,R7
|
||
CLI LOCK,BUSY
|
||
BE ABENDFXX ABEND FXX FOR INVALID RECURSIVE ENTRY
|
||
MVI LOCK,BUSY
|
||
ST R14,EXECEXT
|
||
AR R2,R2
|
||
AR R2,R2 R2=4*SVC#
|
||
L R6,0(R2,R3) R6=A(SVC RTN ENTRY)
|
||
LTR R6,R6
|
||
BNZ CALLRTN
|
||
BAL R14,LOADRTN LOAD SVC/INS IF NO ADDR IN TABLE
|
||
BNZ EXITRTN
|
||
CALLRTN EQU *
|
||
LA R3,CVT
|
||
LA R4,TCB
|
||
LA R5,RB
|
||
LA R7,ASCB
|
||
BALR R14,R6 CALL SVC ROUTINE
|
||
EXITRTN EQU *
|
||
BALR R14,0
|
||
USING *,R14
|
||
MVI LOCK,FREE
|
||
L R14,EXECEXT
|
||
BR R14
|
||
DROP R14
|
||
LOCK DC AL1(FREE) PREVENT RECURSIVE CALLS
|
||
FREE EQU 0
|
||
BUSY EQU 1
|
||
EXECEXT DC A(0)
|
||
LOADRTN EQU *
|
||
ST R14,LOADEXT
|
||
STM R0,R1,LOADSAV SAVE R0-R1 ACROSS LOAD
|
||
LA R3,0(R2,R3) SAVE TABLE ENTRY ADDR IN R3
|
||
SRL R2,2
|
||
CVD R2,PWORK
|
||
MVC 3(4,R4),=X'F0202020'
|
||
ED 3(4,R4),PWORK+6
|
||
LR R1,R4
|
||
SVC LOAD LOAD TYPE 3/4 DYNAMIC SVC ROUTINE
|
||
L R14,LOADEXT
|
||
LTR R15,R15
|
||
BNZR R14
|
||
ST R0,0(R3) SAVE SVC ENTRY IN SVC TABLE
|
||
LR R6,R0
|
||
LM R0,R1,LOADSAV
|
||
BR R14 RETURN FROM LOAD SVC
|
||
DROP
|
||
LOADEXT DC A(0)
|
||
LOADSAV DC 2F'0'
|
||
IGC0NNN DC C'IGC0NNN.MOD' TYPE 3/4 SVC MODULE
|
||
INS0NNN DC C'INS0NNN.MOD' TYPE 3/4 USER DEFINED OPCODE ROUTINE
|
||
ASVCTAB DC A(*-*) ADDRESS OF SVC TABLE
|
||
AINSTAB DC A(*-*) USER DEFINED INSTRUCTION RTN TABLE
|
||
*********
|
||
*
|
||
* WAIT STATE ERRORS
|
||
*
|
||
*********
|
||
ABEND80A EQU * MEMORY ERROR DURING NIP
|
||
SVC TRACE
|
||
DC C'80A'
|
||
SVC TRACE
|
||
DC C'BUG'
|
||
ABENDFXX EQU * RECURSIVE CALL TO EXECRTN
|
||
SVC TRACE
|
||
DC C'FXX'
|
||
SVC TRACE
|
||
DC C'BUG'
|
||
*********
|
||
*
|
||
* IGC0001 - WAIT
|
||
*
|
||
*********
|
||
IGC0001 DS 0H
|
||
USING *,R6
|
||
SR R15,R15
|
||
LTR R1,R1
|
||
BZ IGC0001E EXIT WITH ERROR IF ECBLIST
|
||
TM 0(R1),X'40'
|
||
BOR R14 EXIT OK IF POSTED ALREADY
|
||
OI 0(R1),X'80' TURN ON WAIT BIT FOR EXT. INT. POST
|
||
LA R0,IGC0001L
|
||
ST R0,WAITLOOP+4
|
||
LPSW WAITLOOP ENTER ENABLED PROB. STATE AND LOOP
|
||
IGC0001L B * LOOP UNTIL POST OCCURS VIA EXT. INT.
|
||
IGC0001E EQU *
|
||
LA R15,4
|
||
BR R14
|
||
WAITLOOP DC 0D'0',X'070D0000',A(*-*) PROB STATE LOOP
|
||
*********
|
||
*
|
||
* IGC0002 - POST
|
||
*
|
||
*********
|
||
IGC0002 DS 0H
|
||
USING *,R6
|
||
SR R15,R15
|
||
LTR R1,R1
|
||
BM IGC0002E EXIT WITH ERROR IF ECBLIST
|
||
OI 0(R1),X'40' TURN ON ECB POST BIT
|
||
TM 0(R1),X'80' IS WAIT BIT ON
|
||
BZR R14 EXIT NOW IF TASK NOT WAITING
|
||
NI OLDEXT+1,X'FE' TURN OFF PROB. STATE IF WAITING
|
||
LA R0,IGC0002P FORCE EXIT FROM WAIT SVC LOOP
|
||
ST R0,OLDEXT+4 RESET EXT RETURN ADDR. TO BR R14
|
||
IGC0002P EQU *
|
||
BR R14 EXIT IN SUPERVISOR STATE
|
||
IGC0002E EQU *
|
||
LA R15,4
|
||
BR R14
|
||
*********
|
||
*
|
||
* IGC0003 - EXIT
|
||
*
|
||
*********
|
||
IGC0003 DS 0H
|
||
USING *,R6
|
||
NI OLDSVC+1,X'FE' TURN OFF PROBLEM STATE
|
||
SR R15,R15
|
||
BR R14 EXIT IN SUPERVISOR STATE
|
||
*********
|
||
*
|
||
* IGC0010 - GMAINR/FMAINR R0=SPL,LENGTH, R1=NEG GMAIN/POS. FMAIN ADDR.
|
||
*
|
||
*********
|
||
IGC0010 DS 0H
|
||
USING *,R6
|
||
LTR R1,R1
|
||
BNM IGC0010F
|
||
IGC0010G EQU *
|
||
LR R1,R0
|
||
SVC GMAIN
|
||
LR R0,R1
|
||
LR R1,R2
|
||
SR R15,R15
|
||
BR R14
|
||
IGC0010F EQU *
|
||
LR R2,R1
|
||
LR R1,R0
|
||
SVC FMAIN
|
||
SR R15,R15
|
||
BR R14
|
||
*********
|
||
*
|
||
* IGC0013 - ABEND R1 = COMPLETION CODE
|
||
*
|
||
*********
|
||
IGC0013 DS 0H
|
||
USING *,R6
|
||
STM R14,R2,IGC0013S
|
||
ST R1,PWORK
|
||
UNPK DWORK(9),PWORK(5)
|
||
TR DWORK(8),HEXTAB-240
|
||
MVC DCMP,DWORK
|
||
UNPK DWORK(9),OLDSVC(5)
|
||
TR DWORK(8),HEXTAB-240
|
||
MVC DPSW(8),DWORK
|
||
UNPK DWORK(9),OLDSVC+4(5)
|
||
TR DWORK(8),HEXTAB-240
|
||
MVC DPSW+8(8),DWORK
|
||
LA R2,DABEND
|
||
SVC WTO DISPLAY COMPLETION CODE AND PSW
|
||
LTR R1,R1
|
||
BP IGC0013N NO DUMP REQUESTED
|
||
L R0,AIGC1013
|
||
LTR R0,R0
|
||
BNZ IGC0013D
|
||
LA R1,=C'IGC1013.MOD'
|
||
SVC LOAD
|
||
LTR R15,R15
|
||
BNZ IGC0013A EXIT WITH ERROR TO FORCE ABEND 106
|
||
ST R0,AIGC1013 SAVE ADDRESS OF TYPE 4 ABEND FORMATTED DUMP
|
||
IGC0013D EQU * TYPE 4 FOUND, GO PRINT FORMATTED DUMP
|
||
LM R14,R2,IGC0013S
|
||
L R6,AIGC1013
|
||
BR R6 LINK TO TYPE 4 FORMATTED ABEND DUMP ROUTINE
|
||
IGC0013N EQU * NO DUMP REQUESTED, EXIT NORMALLY
|
||
LM R14,R2,IGC0013S
|
||
SR R15,R15 CLEAR R15 TO PREVENT 106 ABEND FOR IGC1013 ONLY
|
||
BR R14 EXIT NORMALLY
|
||
IGC0013A EQU *
|
||
LM R14,R2,IGC0013S
|
||
LA R15,4 SET ERROR TO FORCE 106 ABEND FOR IGC1013 NOT FOUND
|
||
BR R14 EXIT NORMALLY
|
||
AIGC1013 DC A(0) ADDRESS OF TYPE 4 ABEND FORMATTED DUMP ROUTINE
|
||
IGC0013S DC 5F'0' SAVE R14,R2 ACROSS LOAD
|
||
DABEND DC C'IGC0013A ABEND = '
|
||
DCMP DC CL8'XXSSSUUU',C' PSW = '
|
||
DPSW DC CL16' ',C'$'
|
||
*********
|
||
*
|
||
* IGC0035 - WTO/WTOR
|
||
*
|
||
*********
|
||
IGC0035 DS 0H
|
||
USING *,R6
|
||
SR R2,R2
|
||
CLI 0(R1),0
|
||
BNE IGCWTOR
|
||
IGCWTO EQU *
|
||
IC R2,1(R1)
|
||
SH R2,=H'4'
|
||
EX R2,MVCWTO MOVE WTO TEXT
|
||
LA R2,WTOMSG(R2)
|
||
MVI 0(R2),C'$' ADD MS-DOS END OF TEXT
|
||
LA R2,WTOMSG
|
||
SVC WTO ISSUE MS-DOS WTO
|
||
SR R15,R15
|
||
BR R14
|
||
IGCWTOR EQU *
|
||
SR R15,R15
|
||
IC R15,9(R1)
|
||
EX R15,MVCWTORM
|
||
LA R2,WTOMSG-4(R15)
|
||
MVI 0(R2),C'$'
|
||
LA R2,WTOMSG
|
||
SVC WTO
|
||
CLI WTORPEND,TRUE ONLY ONE AT A TIME ALLOWED
|
||
BE WTORERR
|
||
IC R15,0(R1) R15 = REPLY LENGTH
|
||
ST R15,WTORTCNT SAVE COUNT FOR EXT. INT. RTN.
|
||
ST R15,WTORCCNT
|
||
L R0,0(R1)
|
||
ST R0,WTORARPY SAVE REPLY ADDR.
|
||
ST R0,WTORCRPY
|
||
L R15,4(R1)
|
||
ST R15,WTORAECB SAVE ECB ADDR.
|
||
SR R0,R0
|
||
ST R0,0(R15) CLEAR ECB
|
||
MVI WTORPEND,TRUE ENABLE EXT. INT. REPLY ROUTINE
|
||
SR R15,R15
|
||
BR R14 EXIT WITH REPLY PENDING
|
||
WTORERR EQU *
|
||
LA R15,4
|
||
BR R14
|
||
WTOMSG DC CL256' ',C' '
|
||
MVCWTO MVC WTOMSG(0),4(R1)
|
||
MVCWTORM MVC WTOMSG(0),12(R1)
|
||
WTORPEND DC AL1(FALSE)
|
||
TRUE EQU 1
|
||
FALSE EQU 0
|
||
WTORTCNT DC A(*-*) TOTAL REPLY CHAR ALLOWED
|
||
WTORCCNT DC A(*-*) CURRENT REPLY COUNTER DEC BY EXT. INT. RTN.
|
||
WTORARPY DC A(*-*) ADDRESS OF REPLY FIELD
|
||
WTORCRPY DC A(*-*) CURRENT REPLY CHAR. ADDR. INC BY EXT. INT. RTN.
|
||
WTORAECB DC A(*-*) ADDRESS OF ECB
|
||
********
|
||
*
|
||
* COMMON DATA
|
||
*
|
||
********
|
||
*
|
||
* PC/370 SVC'S
|
||
*
|
||
PWORK DC D'0'
|
||
DWORK DC CL9' '
|
||
HEXTAB DC C'0123456789ABCDEF'
|
||
EXIT EQU 0
|
||
TRACE EQU 9
|
||
GMAIN EQU 10
|
||
FMAIN EQU 11
|
||
EBCASC EQU 12
|
||
ASCEBC EQU 12
|
||
LOAD EQU 25
|
||
WTO EQU 200+9 MS-DOS PRINT TEXT
|
||
WRITECHR EQU 200+2 MS-DOS PRINT CHAR
|
||
KEYREAD EQU 200+1 MS-DOS READ CHAR WITH ECHO
|
||
KEYSTAT EQU 200+11 MS-DOS TEST KEYBOARD
|
||
CR EQU X'0D' ASCII CARRIAGE RETURN
|
||
LF EQU X'0A' ASCII LINE FEED
|
||
*
|
||
* GENERAL REGISTERS
|
||
*
|
||
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
|
||
*********
|
||
*
|
||
* CVT - MVS COMMUNICATIONS VECTOR TABLE
|
||
*
|
||
*********
|
||
DS 0F
|
||
DC CL16'PC/370 MVS CVT'
|
||
DC X'8386' MACHINE #
|
||
DC C'2.0A' PC/370 RELEASE 2.0A
|
||
CVT DS 0F
|
||
DC A(*-*) CVTTCBP ACCRESS OF NEXT TCB
|
||
ORG CVT+56
|
||
DC PL4'87200' CVTDATE PACKED DECIMAL DATE
|
||
ORG CVT+116
|
||
DC X'93' MVS/XA OS OPTIONS
|
||
ORG CVT+128
|
||
DC A(X'200') CVTNUCB END OF NUCLEUS
|
||
ORG CVT+164
|
||
DC A(*-*) CVTMZ00 HIGHEST ADDRESS IN MACHINE
|
||
ORG CVT+196
|
||
DC A(*-*) CVTSMCA SMF COMMON AREA
|
||
DC A(*-*) CVTUSER USER POINTER
|
||
*********
|
||
*
|
||
* MISC. MVS CONTROL BLOCKS
|
||
*
|
||
*********
|
||
TCB DS 0F TASK CONTROL BLOCK
|
||
RB DS 0F
|
||
ASCB DS 0F ADDRESS SPACE CONTROL BLOCK
|
||
SMCA DS 0F SMF COMMON AREA
|
||
*********
|
||
*
|
||
* PSW.DOC LOW MEMORY PSW EQUATES
|
||
*
|
||
*********
|
||
OLDEXT EQU X'18' OLD EXTERNAL PSW
|
||
OLDSVC EQU X'20' OLD SUPERVISOR CALL PSW
|
||
OLDPGM EQU X'28' OLD PROGRAM CHECK PSW
|
||
OLDMCK EQU X'30' OLD MACHINE CHECK PSW
|
||
OLDIOS EQU X'38' OLD I/O INTERRUPT PSW
|
||
CSW EQU X'40' CHANNEL STATUS WORD
|
||
CAW EQU X'48' CHANNEL ADDRESS WORD
|
||
ITIMER EQU X'50' INTERVAL TIMER
|
||
NEWEXT EQU X'58' NEW EXTERNAL PSW
|
||
NEWSVC EQU X'60' NEW SUPERVISOR CALL PSW
|
||
NEWPGM EQU X'68' NEW PROGRAM CHECK PSW
|
||
NEWMCK EQU X'70' NEW MACHINE CHECK PSW
|
||
NEWIOS EQU X'78' NEW I/O INTERRUPT PSW
|
||
SVCR15 EQU X'190' SVC TEMP SAV R15
|
||
PGMR15 EQU X'194' PGM TEMP SAV R15
|
||
EXTR15 EQU X'198' EXT TEMP SAV R15
|
||
IHACVT DSECT
|
||
CVTTCBP DS A NEXT TCB
|
||
ORG IHACVT+56
|
||
CVTDATE DS PL4 PACKED DATE
|
||
ORG IHACVT+128
|
||
CVTNUCB DS A END OF NUCLEUS
|
||
ORG IHACVT+164
|
||
CVTMZ00 DS A END OF REAL MEMORY
|
||
ORG IHACVT+196
|
||
CVTSMCA DS A SMF COMMON AREA
|
||
CVTABEND DS A SECONDARY CVT
|
||
CVTUSER DS A USER POINTER
|
||
*********************************************************************
|
||
*
|
||
* ASCB - ADDRESS SPACE CONTROL BLOCK FOR PC/370 RELEASE 2.0+
|
||
*
|
||
*********************************************************************
|
||
*
|
||
* THIS CONTROL BLOCK IS INITIALIZED BY THE PC/370 EMULATOR AT EXECUTION
|
||
* TIME FOR THE MAIN PROGRAM COM FILE AND IS LOCATED AT VIRTUAL MEMORY
|
||
* ADDRESS X'104'. THIS CONTROL BLOCK IS ALSO CREATED FOR EACH ATTACHED
|
||
* COM PROGRAM ADDRESS SPACE DURING ATTACH SVC 26 EXECUTION (SEE SVC.DOC).
|
||
*
|
||
*********************************************************************
|
||
ASCB DSECT
|
||
ASCIDR DS CL4 ASCB IDENTIFIER C'ASCB'
|
||
ASCNXT DS A ABSOLUTE ADDRESS OF NEXT DAUGHTER TASK ASCB
|
||
ASCPRV DS A ABSOLUTE ADDRESS OF PREVIOUS MOTHER TASK ASCB
|
||
ASCASO DS A ABSOLUTE ADDRESS OF ADDRESS SPACE ORIGIN
|
||
ASCASL DS F LENGTH OF ADDRESS SPACE (USED FOR ADDRESS PROTECTION)
|
||
ASCASF DS A RELATIVE ADDRESS OF FIRST FREE QUEUE ELEMENT (FQE)
|
||
ASCENT DS A RELATIVE ADDRESS OF ENTRY POINT (FROM COM PREFIX)
|
||
ASCEXT DS A RELATIVE ADDRESS OF RETURN IN MOTHER TASK ASCB
|
||
LASCB EQU *-ASCB
|
||
END MVS
|
||
|