GIO TITLE 'DMSGIO (CMS) VM/370 - RELEASE 6' 00001000
SPACE 2 00002000
*. 00003000
************************************************************ 00004000
* 00005000
* MODULE NAME: 00006000
* 00007000
* DMSGIO 00008000
* 00009000
* FUNCTION: 00010000
* 00011000
* CREATE THE DIAGNOSE AND CCW'S FOR AN I/O OPERATION TO 00012000
* A DISPLAY TERMINAL FROM A VIRTUAL MACHINE. 00013000
* 00014000
* ATTRIBUTES: 00015000
* 00016000
* DISK RESIDENT 00017000
* 00018000
* ENTRY POINTS: 00019000
* 00020000
* DMSGIO 00021000
* 00022000
* ENTRY CONDITIONS: 00023000
* 00024000
* GPR1 - A(PLIST) 00025000
* PLIST - A(BUFFER) ADDRESS OF INPUT BUFFER 00026000
* A(LINE) ADDRESS OF DISPLAY LINE 00027000
* A(COUNT) ADDRESS OF NUMBER OF BYTES TO 00028000
* BE WRITTEN 00029000
* A(FLAG) ADDRESS OF FUNCTION FLAG 00030000
* 00031000
* GPR13 - EDCB ADDRESS IF USED BY CMS EDITOR 00032000
* OR 00033000
* MUST BE ZERO IF NOT CALLED BY EDITOR 00034000
* 00035000
* OUTPUT: 00036000
* 1. A DIAGNOSE IS ISSUED TO CP TO WRITE TO THE DISPLAY 00037000
* TERMINAL. 00038000
* 2. R15 CONTAINS: 00039000
* A. 0 IF THE I/O OPERATION WAS SUCCESSFUL 00040000
* B. NON-ZERO IF AN I/O ERROR OCURRED 00041000
* 00042000
* EXIT CONDITIONS: 00043000
* 00044000
* NORMAL - GPR15 = 0 00045000
* 00046000
* ERROR - GPR15 ¬= 0 00047000
* 00048000
* CALLS TO OTHER ROUTINES: 00049000
* 00050000
* NONE 00051000
* 00052000
* EXTERNAL REFERENCES: 00053000
* 00054000
* ADEVTAB - ADDRESS OF DEVICE TABLE IN CMS NUCLEUS 00055000
* 00056000
* OPERATION: 00057000
* 00058000
* DMSGIO FIRST DETERMINES IF IT HAS BEEN CALLED BY THE 00059000
* CMS EDITOR. IF IT HAS, THEN A WORK AREA EXISTS IN THE 00060000
* EDITOR EDCB CONTROL BLOCK FOR USE IN BUILDING THE CCW 00061000
* TO BE PASSED TO CP. IF DMSGIO HAS BEEN CALLED FROM 00062000
* AN APPLICATION PROGRAM, POSSIBLY VIA THE DISPW MACRO, 00063000
* THEN DMSGIO GETS FREE STORAGE FOR THE CCW. 00064000
* 00065000
* DMSGIO CREATES A DIAGNOSE INSTRUCTION OF THE FORMAT: 00066000
* 00067000
* --------------------------------------- 00068000
* | 83 | R1 | R2 | 0058 | 00069000
* --------------------------------------- 00070000
* 00071000
* WHERE: 00072000
* 00073000
* 83 IS THE DIAGNOSE OPCADE 00074000
* R1 IS A REGISTER CONTAINING THE ADDRESS OF 00075000
* THE CCW 00076000
* R2 IS A REGISTER CONTAINING A VIRTUAL 00077000
* CONSOLE DEVICE ADDRESS 00078000
* 0058 IS THE DIAGNOSE CODE IN HEXADECIMAL 00079000
* 00080000
* DMSGIO CREATES A CCW OF THE FORMAT: 00081000
* 00082000
* ----------------------------------------------- 00083000
* | X'19' | DATA ADDR | FLGS | CTL | COUNT | 00084000
* ----------------------------------------------- 00085000
* 00086000
* WHERE: 00087000
* 00088000
* DATA ADDR IS THE ADDRESS RECEIVED IN THE 00089000
* PLIST OF THE INPUT BUFFER 00090000
* FLGS Z ARE THE NORMAL CCW FLAG BITS 00091000
* CTL IS THE LINE NUMBER POINTED TO BY 00092000
* THE LINE ADDRESS IN THE PARAMETER 00093000
* LIST. THE HIGH ORDER BIT IS 00094000
* INTERPRETED BY CP AS A REQUEST 00095000
* TO ERASE THE ENTIRE OUTPUT DISPLAY 00096000
* PRIOR TO DISPLAYING THE NEW DATA. 00097000
* IF THE FLAG IN THE PARAMETER LIST 00098000
* INDICATES A CANCEL FUNCTION, THIS 00099000
* FIELD WILL CONTAIN X'FF' TO CAUSE 00100000
* A SCREEN CANCEL OPERATION. 00101000
* COUNT IS THE HALFWORD COUNT POINTED TO 00102000
* BY THE COUNT ADDRESS IN THE 00103000
* PARAMETER LIST 00104000
* 00105000
* USING THE INPUT PARAMETER LIST, THIS MODULE IS A 00106000
* BASIC INTERFACE FOR CMS OR APPLICATIONS PROGRAMS. 00107000
* USING A STANDARD CALLING SEQUENCE, CMS OR AN 00108000
* APLLICATION PROGRAM CAN WRITE TO THE DISPLAY 00109000
* TERMINAL. 00110000
* 00111000
* 00112000
* 00113000
************************************************************ 00114000
*. 00115000
EJECT 00116000
DMSGIO START 0 00117000
USING DMSGIO,R10 @V305614 00118000
USING EDCB,R13 @V305614 00119000
LR R10,R15 @V305614 00120000
USING NUCON,R0 00121000
USING GIOLIST,R3 @VA05027 00122000
LR R3,R1 SAVE PLIST POINTER @VA05027 00123000
SPACE 1 00124000
LTR R9,R13 IF R13 IS 0 THERE IS NO EDCB @VA05027 00125000
BNZ HAVEDCB ..... @VA05027 00126000
SPACE 1 00127000
DMSFREE DWORDS=2 @VA05027 00128000
LR R13,R1 GET GIO FREE STOR ADR @VA05027 00129000
B READY NOW GO PLUG THE CCW @VA05027 00130000
SPACE 1 00131000
HAVEDCB LA R13,CMDBLOK ADDRESSABILITY FOR COMMAND @VA05027 00132000
DROP R13 @VA05027 00133000
USING GIOBLOK,R13 @VA05027 00134000
SPACE 1 00135000
READY MVI GIOCMD,GIOOP PLUG SPECIAL OP-CODE @VA05027 00136000
MVI GIOFLG,GIOSLI SET SILI BIT ON @VA05027 00137000
MVC GIOBUF(3),GIOLBUF GET BUFFER ADR FROM PLIST @VA05027 00138000
L R2,GIOLINE GET ADR OF LINE NUMBER @VA05027 00139000
MVC GIOCTL,1(R2) PLUG LINE NUMBER @VA05027 00140000
L R2,GIOLCNT GET ADR OF COUNT @VA05027 00141000
MVC GIOCNT,0(R2) PLUG COUNT INTO CCW @VA05027 00142000
L R2,GIOLFLG GET FLAG ADR @VA05027 00143000
TM 0(R2),CANCLB CANCEL REQUESTED ? 00144000
BNO NOCANC NO...BR 00145000
LA R5,CANCEL POINT TO CANCEL CCW @VA05027 00146000
B OVLAY GET DEVICE ADR 00147000
NOCANC LA R5,GIOCMD CCW ADR FOR NORMAL WRITE @VA05027 00148000
MVI 4(R5),X'20' SET ALL FLAGS TO NORMAL GG934D0 00148100
TM 0(R2),X'08' WANTS ATTRIBUTE BYTES ALLOWED? GG934D0 00148200
BNO *+8 NO, DO NOT TURN BIT ON GG934D0 00148300
OI 4(R5),X'02' SET ATTR. ALLOWED FLAG GG934D0 00148400
TM 0(R2),X'04' HI-INTENSITY WANTED? GG934D0 00148500
BNO NOHI NO, DON'T SET BIT GG934D0 00148600
OI 4(R5),X'01' TURN ON HI-INTENSITY GG934D0 00148700
NOHI EQU * GG934D0 00148800
TM 0(R2),ERASB DO WE ERASE ? 00149000
BNO OVLAY NO...BR 00150000
OI GIOCTL,CPMORE SET ERASE BIT FOR CP @VA05027 00151000
OVLAY L R2,ADEVTAB ADR OF DEVTAB IN NUCLEUS 00152000
LH R4,0(,R2) GET CONSOLE DEVICE ADDR 00153000
SR R15,R15 CLEAR RETCODE REGISTER @VM08823 00154000
WAITDISP TIO 0(R4) MAKE SURE DISPLAY @VM08823 00155000
BC 7,WAITDISP IS AVAILABLE @VM08823 00156000
DIAG DC X'83',X'54',X'0058' SPECIAL DISPLAY DIAGNOSE @VM08823 00157000
BZ DONE BR..IF I/O STARTED @VM08823 00158000
BC 3,CCER BR..IF NOT CSW STORED @VM08823 00159000
TM CSW+4,X'10' WAS DEVICE BUSY ? @VM08823 00160000
BO WAITDISP IF SO..TRY AGAIN @VM08823 00161000
CLI CSW+4,X'04' DE ONLY ? @VM08823 00162000
BE WAITDISP YES..BR @VM08823 00163000
B BADERR MUST BE A BAD ONE @VM08823 00164000
CCER EQU * @VM08823 00165000
BC 1,BADERR BR..NOT OPER @VM08823 00166000
B WAITDISP BR..MUST HAVE BEEN BUSY @VM08823 00167000
BADERR EQU * @VM08823 00168000
LA R15,4 SET ERROR CODE @VM08823 00169000
DONE EQU * @VM08823 00170000
LTR R13,R9 DID WE GET FREE STORAGE ? @VA05027 00171000
BNZR R14 JUST RETURN IF NOT @VA05027 00172000
DMSFRET DWORDS=(0),LOC=(1) @VA05027 00173000
BR R14 RETURN 00174000
SPACE 1 00175000
*************************************************************** 00176000
* 00177000
* EQUATES AND CONSTANTS 00178000
* 00179000
*************************************************************** 00180000
SPACE 1 00181000
ERASB EQU X'01' CAUSE MORE STATUS 00182000
CPMORE EQU X'80' TELL CP CAUSE MORE 00183000
CANCLB EQU X'02' CANCEL OP REQUESTED 00184000
GIOOP EQU X'19' SPECIAL OP CODE FOR GRAPHICS @VA05027 00185000
GIOSLI EQU X'20' SILI BIT FOR CCW FLAG @VA05027 00186000
SPACE 1 00187000
* KEEP THE NEXT TWO STATEMENTS TOGETHER * 00188000
DS 0D @VA05027 00189000
CANCEL DC X'1900000020FF0001' CANCEL SCREEN CCW @VA05027 00190000
SPACE 1 00191000
* GIOLIST MAPS THE PARAMETER LIST PASSED TO DMSGIO * 00192000
GIOLIST DSECT @VA05027 00193000
DS X @VA05027 00194000
GIOLBUF DS 3X ADR OF WRITE BUFFER @VA05027 00195000
GIOLINE DS F ADR OF THE LINE NUMBER @VA05027 00196000
GIOLCNT DS F ADR OF THE WRITE COUNT @VA05027 00197000
GIOLFLG DS F ADR OF THE INDICATOR FLAG @VA05027 00198000
SPACE 1 00199000
* GIOBLOK MAPS THE FREE STORAGE OBTAINED BY DMSGIO FOR 00200000
* USE IN BUILDING THE CCW TO BE PASSED TO CP 00201000
GIOBLOK DSECT @VA05027 00202000
GIOCMD DS X CCW OP-CODE @VA05027 00203000
GIOBUF DS 3X WRITE BUFFER ADDRESS @VA05027 00204000
GIOFLG DS X FLAG BYTE @VA05027 00205000
GIOCTL DS X LINE NUMBER @VA05027 00206000
GIOCNT DS H WRITE COUNT @VA05027 00207000
SPACE 1 00208000
EDCB @V305614 00209000
EJECT 00210000
NUCON 00211000
REGEQU 00212000
END 00213000