home *** CD-ROM | disk | FTP | other *** search
/ Columbia Kermit / kermit.zip / cmsqueens / cm2full.asm next >
Assembly Source File  |  2020-01-01  |  18KB  |  220 lines

  1. FULL     TITLE 'FULL SCREEN I/O SERVICE FOR CMS'                        FUL00010
  2.          SPACE                                                          FUL00020
  3. *                                                                       FUL00030
  4. *        THIS SUBROUTINE PROVIDES A REASONABLY SYSTEM INDEPENDENT       FUL00040
  5. *        INTERFACE TO PROBLEM PROGRAMS FOR 3270-STYLE I/O.              FUL00050
  6. *                                                                       FUL00060
  7. *        ATTRIBUTES: NOT REENTRANT.  SERIALLY REUSABLE IF INITIALIZE    FUL00070
  8. *              AND TERMINATE CALLS ARE PAIRED.                          FUL00080
  9. *                                                                       FUL00090
  10. *        ENTRY CONDITIONS:                                              FUL00100
  11. *              R15 --> ENTRY POINT                                      FUL00110
  12. *              R14 = RETURN ADDRESS                                     FUL00120
  13. *              R13 --> OS/STYLE SAVE AREA                               FUL00130
  14. *              R1 --> OS/STYLE PARAMETER LIST.                          FUL00140
  15. *        PARAMETERS:                                                    FUL00150
  16. *           0(R1) --> H'FUNCTION CODE'                                  FUL00160
  17. *           4(R1) --> BUFFER                                            FUL00170
  18. *           8(R1) --> H'LENGTH' OF BUFFER.                              FUL00180
  19. *           12(R1) --> HALFWORD RETURNED LENGTH FOR READ OPERATIONS.    FUL00190
  20. *        FUNCTION CODES:                                                FUL00200
  21. *           0 -- GET CONTROL OF SCREEN                                  FUL00210
  22. *           1 -- PERFORM ERASE WRITE OF BUFFER DATA                     FUL00220
  23. *           2 -- PERFORM NORMAL WRITE OF BUFFER DATA                    FUL00230
  24. *           3 -- PERFORM READ MODIFIED INTO BUFFER AFTER WAITING        FUL00240
  25. *             FOR ATTENTION                                             FUL00250
  26. *           4 -- PERFORM READ BUFFER INTO BUFFER                        FUL00260
  27. *           5 -- RELINQUISH CONTROL                                     FUL00270
  28. *                                                                       FUL00280
  29. *        OPERATING NOTES:                                               FUL00290
  30. *                                                                       FUL00300
  31. *        FUNCTION 0 MUST BE ISSUED FIRST.  FUNCTION 5 SHOULD BE ISSUED  FUL00310
  32. *        BEFORE THE FULL SCREEN APPLICATION TERMINATES.                 FUL00320
  33. *        AFTER WRITING A WCC TO UNLOCK THE KEYBOARD, FUNCTION 3 SHOULD  FUL00330
  34. *        BE ISSUED TO WAIT FOR ATTENTION.  AN I/O ERROR MIGHT OCCUR     FUL00340
  35. *        IF AN ATTENTION IS PENDING AND THE NEXT I/O IS A               FUL00350
  36. *        WRITE.                                                         FUL00360
  37. *        THIS ROUTINE USES A STAX EXIT.  THE APPLICATION SHOULD NOT     FUL00370
  38. *        ISSUE THE STAX MACRO BETWEEN INITIALIZING AND TERMINATING THIS FUL00380
  39. *        INTERFACE.                                                     FUL00390
  40. *        RETURN CODE 4 CAN INDICATE:                                    FUL00400
  41. *          1.  NOT PROPERLY INITIALIZED.                                FUL00410
  42. *          2.  SCREEN STOLEN BY THE OPERATING SYSTEM (ISSUE ERASE WRITE FUL00420
  43. *              GET IT BACK:  THIS IS A CMS-DEPENDENT CONVENTION).       FUL00430
  44. *          3.  NON FULL-SCREEN INPUT PENDING.  USE STANDARD INPUT       FUL00440
  45. *              ROUTINES TO ACQUIRE IT.                                  FUL00450
  46. *                                                                       FUL00460
  47. *        RETURN CODES:                                                  FUL00470
  48. *        0 -- SUCCESSFUL COMPLETION                                     FUL00480
  49. *        4 -- SCREEN NOT FORMATTED                                      FUL00490
  50. *        8 -- I/O ERROR ON DEVICE.                                      FUL00500
  51. *        12 -- ILLEGAL FUNCTION                                         FUL00510
  52. *        16 -- DEVICE NOT OPERATIONAL OR OF INCORRECT TYPE              FUL00520
  53. *                                                                       FUL00530
  54. FULLSERV CSECT                                                          FUL00540
  55.          SAVE  (14,12),,*                                               FUL00550
  56.          LR    R12,R15                                                  FUL00560
  57.          USING FULLSERV,R12                                             FUL00570
  58.          LM    R8,R11,0(R1)        R8 --> FUNCTION CODE                 FUL00580
  59. *                                  R9 --> BUFFER                        FUL00590
  60. *                                  R10 --> BUFFER LENGTH                FUL00600
  61. *                                  R11 --> RETURNED LENGTH FOR READ     FUL00610
  62.          LA    R7,12               SET ILLEGAL FUNCTION                 FUL00620
  63.          ST    R8,FUNCRET       QK                                      FUL00630
  64.          LH    R8,0(,R8)           GET FUNCTION CODE                    FUL00640
  65.          CL    R8,=A(FUNCMAX)      TEST FOR LEGAL FUNCTION              FUL00650
  66.          BH    RETURN              WORST FEARS REALIZED                 FUL00660
  67.          SLL   R8,2                MAKE BRANCHABLE                      FUL00670
  68.          B     *+4(R8)             AND BRANCH                           FUL00680
  69. FUNC0    B     INIT                0 -- INITIALIZE                      FUL00690
  70.          B     EWRITE              1 -- ERASE WRITE                     FUL00700
  71.          B     WRITE               2 -- NORMAL WRITE                    FUL00710
  72.          B     READM               3 -- READ MODIFIED                   FUL00720
  73.          B     READB               4 -- READ BUFFER                     FUL00730
  74.          B     TERMIN              5 -- TERMINATE                       FUL00740
  75. FUNCMAX  EQU   (*-FUNC0)/4-1                                            FUL00750
  76.          SPACE                                                          FUL00760
  77. *        RETURN TO CALLER.  RC IN R7                                    FUL00770
  78.          SPACE                                                          FUL00780
  79. RETURN   ST    R7,16(,R13)         SET RETURN CODE IN R15 POSITION      FUL00790
  80.          L     R8,FUNCRET       QK                                      FUL00800
  81.          ST    R7,0(,R8)           set FUNCTION CODE to return code     FUL00810
  82.          RETURN (14,12)            RETURN TO CALLER                     FUL00820
  83.          EJECT                                                          FUL00830
  84. *                                                                       FUL00840
  85. *        ESTABLISH CONTROL.                                             FUL00850
  86. *        1.  CHECK CONSOLE TYPE.                                        FUL00860
  87. *        2.  DISABLE FOR ALL INTERRUPTS.                                FUL00870
  88. *        3.  TAKE CONTROL OF ATTENTIONS VIA STAX.                       FUL00880
  89. *        4.  ISSUE ERASE WRITE TO CLEAR SCREEN AND PUT CONSOLE IN       FUL00890
  90. *            FULL SCREEN MODE.                                          FUL00900
  91. *                                                                       FUL00910
  92. INIT     LA    R7,16               GET TENTATIVE RETURN CODE            FUL00920
  93.          L     R1,=F'-1'           VIRTUAL CONSOLE DIAGNOSE             FUL00930
  94.          DIAG  R1,R2,X'24'         DO IT                                FUL00940
  95.          BNZ   RETURN              DON'T ALLOW ANYTHING SLEAZY          FUL00950
  96.          CLM   R3,B'0100',=X'04'   ACCEPT ONLY 3277 OR 3278 TYPES       FUL00960
  97.          BE    TYPEOK                                                   FUL00970
  98.          CLM   R3,B'0100',=X'01'   ACCEPT ONLY 3277 OR 3278 TYPES       FUL00980
  99.          BNE   RETURN                                                   FUL00990
  100. TYPEOK   STCM  R1,B'0011',CONSADDR SAVE CONSOLE ADDRESS                 FUL01000
  101.          SSM   *+1                 DISABLE FOR INTERRUPTS               FUL01010
  102.          MVI   STAXECB,0           CLEAR ECB                            FUL01020
  103.          STAX  CATCHATN            PLAN TO CATCH ATTENTIONS             FUL01030
  104.          LA    R1,GETSCRN          --> CCWS TO GET SCREEN               FUL01040
  105.          B     DIAG58              DO THE I/O                           FUL01050
  106. *                                                                       FUL01060
  107. *        RELINQUISH CONTROL.                                            FUL01070
  108. *        1.  CLEAR CONSOLE ADDRESS                                      FUL01080
  109. *        2.  CANCEL STAX                                                FUL01090
  110. *                                                                       FUL01100
  111. TERMIN   XC    CONSADDR,CONSADDR   CLEAR CONSOLE ADDRESS                FUL01110
  112.          STAX  ,                   CANCEL STAX                          FUL01120
  113.          SR    R7,R7               SET RETURN CODE                      FUL01130
  114.          B     RETURN                                                   FUL01140
  115.          EJECT                                                          FUL01150
  116. *                                                                       FUL01160
  117. *        WRITE, READ BUFFER, OR ERASE WRITE.                            FUL01170
  118. *        1.  --> CORRECT CCW.                                           FUL01180
  119. *        2.  FILL IN ADDRESSES AND DO I/O                               FUL01190
  120. *                                                                       FUL01200
  121. EWRITE   LA    R1,EWCCW            --> ERASE WRITE CCW                  FUL01210
  122.          B     FILLIN              GO FILL IN THE DATA                  FUL01220
  123. WRITE    LA    R1,WCCW             --> NORMAL WRITE CCW                 FUL01230
  124.          B     FILLIN              GO FILL IN THE DATA                  FUL01240
  125. READB    LA    R1,RBCCW            --> READ BUFFER CCW                  FUL01250
  126.          B     FILLIN              GO FILL IN THE DATA                  FUL01260
  127. *                                                                       FUL01270
  128. *        READ MODIFIED                                                  FUL01280
  129. *        1.  WAIT FOR ATTENTION.                                        FUL01290
  130. *        2.  --> CORRECT CCW.                                           FUL01300
  131. *        3.  FILL IN ADDRESSES AND DO I/O                               FUL01310
  132. *                                                                       FUL01320
  133. READM    MVC   DEBUG1,STAXECB      SAVE ECB STATE FOR DEBUGGING         FUL01330
  134.          WAIT  1,ECB=STAXECB       WAIT FOR ATTN                        FUL01340
  135.          MVC   DEBUG2,X'44'        SAVE CSW STATUS FOR DEBUGGING        FUL01350
  136.          LA    R1,RMCCW            --> READ MODIFIED CCW                FUL01360
  137.          B     FILLIN              GO FILL IN THE DATA                  FUL01370
  138.          EJECT                                                          FUL01380
  139. *                                                                       FUL01390
  140. *        FILL IN DATA FOR READ OR WRITE OPERATIONS PRIOR TO DIAGNOSE    FUL01400
  141. *                                                                       FUL01410
  142. FILLIN   STCM  R9,B'0111',1(R1)    MOVE 3 BYTE ADDRESS INTO CCW         FUL01420
  143.          MVC   6(2,R1),0(R10)      MOVE 2 BYTE LENGTH INTO CCW          FUL01430
  144. *                                                                       FUL01440
  145. *        PERFORM DIAGNOSE X'58' I/O                                     FUL01450
  146. *                                                                       FUL01460
  147. DIAG58   LR    R2,R1               SAVE CCW REGISTER                    FUL01470
  148.          LH    R3,CONSADDR         PICK UP CONSOLE ADDRESS              FUL01480
  149.          LA    R7,4                ASSUME NOT IN CONTROL                FUL01490
  150.          LTR   R3,R3               ARE WE?                              FUL01500
  151.          BZ    RETURN              NO.                                  FUL01510
  152.          WAITT ,                   YES.  LET CONSOLE QUIESCE.           FUL01520
  153.          LA    R4,10               RETRY 10 TIMES (ARBITRARY) IF BUSY   FUL01530
  154.          LA    R7,8                ASSUME ERROR                         FUL01540
  155. DO58     DIAG  R2,R3,X'58'         PERFORM THE DIAGNOSE                 FUL01550
  156.          BZ    WAITEND             OPERATION STARTED                    FUL01560
  157.          BM    CHECKEND            CCW STORED                           FUL01570
  158.          BO    RETURN              CC=3: RETURN ERROR.                  FUL01580
  159.          SSM   =X'FE'              CC=2: RETRY UP TO 10 TIMES           FUL01590
  160.          SSM   *+1                 (OPEN INTERRUPT WINDOW: IT MIGHT BE  FUL01600
  161.          BCT   R4,DO58             INTERRUPT PENDING ON ANOTHER CUU)    FUL01610
  162.          B     RETURN              RETURN ERROR IF RETRY EXHAUSTED      FUL01620
  163. WAITEND  TIO   0(R3)               WAIT FOR OPERATION TO END            FUL01630
  164.          BO    RETURN              CC=3:  RETURN ERROR                  FUL01640
  165.          BZ    RETURN              CC=0 IS IMPOSSIBLE!                  FUL01650
  166.          BP    WAITEND             LOOP ON BUSY.  WILL NOT SPIN.        FUL01660
  167.          TM    X'44',X'04'         INCLUDES DEVICE END?                 FUL01670
  168.          BNO   WAITEND             NO.  KEEP WAITING                    FUL01680
  169. CHECKEND LA    R7,4                ASSUME SCREEN STOLEN                 FUL01690
  170.          CLI   X'44',X'8E'         WAS IT?                              FUL01700
  171.          BE    RETURN              YES.  DONE                           FUL01710
  172.          LA    R7,8                ASSUME I/O ERROR                     FUL01720
  173.          MVI   STAXECB,X'40'       PSEUDO PREPOST THE ECB               FUL01730
  174.          TM    X'44',X'80'         ATTENTION STRUCK?                    FUL01740
  175.          BO    RETURN              YES.  RETURN ERROR.                  FUL01750
  176.          MVI   STAXECB,0           NO.  CLEAR ECB FOR EVENTUAL WAIT     FUL01760
  177.          TM    X'44',X'F3'         ANY FUNNY BITS ON?                   FUL01770
  178.          BNZ   RETURN              YES.  ERROR                          FUL01780
  179.          CLI   X'45',0             ANY CHANNEL STATUS?                  FUL01790
  180.          BNE   RETURN              YES.  ERROR                          FUL01800
  181.          SR    R7,R7               OTHERWISE, CALL IT A SUCCESS         FUL01810
  182.          CH    R8,=Y(4*3)          IS IT READ MODIFIED?                 FUL01820
  183.          BL    RETURN              RETURN IF LESS                       FUL01830
  184.          CH    R8,=Y(4*4)          HOW ABOUT READ BUFFER?               FUL01840
  185.          BH    RETURN              RETURN IF MORE                       FUL01850
  186.          LH    R1,X'46'            PICK UP CSW RESIDUAL COUNT           FUL01860
  187.          LNR   R1,R1               COMPLEMENT IT                        FUL01870
  188.          AH    R1,0(,R10)          ADD ORIGINAL COUNT                   FUL01880
  189.          STH   R1,0(,R11)          AND STORE DIFFERENCE (BYTES MOVED)   FUL01890
  190.          B     RETURN              AND GET OUT OF HERE                  FUL01900
  191.          EJECT                                                          FUL01910
  192. *                                                                       FUL01920
  193. *        STAX ROUTINE (SIMPLICITY ITSELF                                FUL01930
  194. *                                                                       FUL01940
  195. CATCHATN SAVE  (14,12)                                                  FUL01950
  196.          DROP  ,                   NO ADDRESSABILITY REALLY             FUL01960
  197.          LR    R12,R15             GET SOME                             FUL01970
  198.          USING CATCHATN,R12                                             FUL01980
  199.          POST  STAXECB             INDICATE SOMETHING                   FUL01990
  200.          RETURN (14,12)                                                 FUL02000
  201.          EJECT                                                          FUL02010
  202. *        STATIC DATA                                                    FUL02020
  203.          SPACE                                                          FUL02030
  204. GETSCRN  DS    0D                  CCWS TO GET CONTROL OF SCREEN        FUL02040
  205.          DC    X'1900000060FF0001'                                      FUL02050
  206.          DC    X'29',AL3(NULLWCC),X'20800001'                           FUL02060
  207. EWCCW    DC    X'2900000020800000' ERASE WRITE CCW                      FUL02070
  208. WCCW     DC    X'2900000020000000' WRITE CCW                            FUL02080
  209. RMCCW    DC    X'2A00000020800000' READ MODIFIED CCW                    FUL02090
  210. RBCCW    DC    X'2A00000020000000' READ BUFFER CCW                      FUL02100
  211. STAXECB  DC    F'0'                ECB FOR ATTENTION                    FUL02110
  212. CONSADDR DC    H'0'                CONSOLE ADDRESS                      FUL02120
  213. NULLWCC  DC    X'C0'                                                    FUL02130
  214. DEBUG1   DC    X'FF'               PLACE TO SAVE DEBUGGING INFORMATION  FUL02140
  215. DEBUG2   DC    X'FFFF'             PLACE TO SAVE DEBUGGING INFORMATION  FUL02150
  216. FUNCRET  DS    F                                                        FUL02160
  217.          LTORG                                                          FUL02170
  218.          REGEQU                                                         FUL02180
  219.          END                                                            FUL02190
  220.