ASMB,R,Q,C
* 
* 
* 
**************************************************************
* (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1978.  ALL RIGHTS    *
* RESERVED.  NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, RE- *
* PRODUCED, OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITH-  *
* OUT THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY.  *
**************************************************************
* 
* 
*     NAME:    DCT06 -- 1350A DEVICE COMMAND TABLE
*     SOURCE:  92840-18091
*     RELOC:   92840-16008
*     PGMR:    KH 5/18/78 
* 
*     MODIFIED BY: DJS      SEPT 27, 1979   > GOT THE DCT TO WORK 
*     MODIFIED BY: DJS      JAN  27, 1980   > FIXED RESET GIC (1) 
* 
**********************************************************************
* 
      NAM DCT06,7  92840-16008 REV.2013 800127
      EXT FLOAT 
      EXT .IENT 
      EXT FLTAS 
      EXT LNGTH 
      EXT GIC 
      EXT DCTAD 
      EXT GCBIM 
      EXT BYTE
      EXT INDCK 
      EXT REIO
* 
      ENT DCT06 
* 
* 
**********************************************************************
*                                                                    *
*     THIS IS THE DEVICE COMMAND TABLE FOR THE 1350A GRAPHICS        *
*     TANSLATOR.  GRAPHICS/1000 SUPPORTS THE HP 1350A WITH THE       *
*     FOLLOWING CRT'S:                                               *
*                                                                    *
*        HP 1310A          HP 1317A                                  *
*        HP 1311A          HP 1321A                                  *
*                                                                    *
*                                                                    *
**********************************************************************
      HED <HP 1350A DEVICE COMMAND TABLE> 
* 
**********************
*     CONSTANTS      *
**********************
* 
* 
A     EQU 0        A REG. 
B     EQU 1        B REG. 
* 
P0    OCT 0,0,0,0 
P1    OCT 1 
P2    OCT 2 
P3    OCT 3 
P4    OCT 4 
P8    DEC 8 
P9    DEC 9 
P10   DEC 10
P12   DEC 12
P16   DEC 16
P26   DEC 26
P32   DEC 32
P48   DEC 48
B137  OCT 137      USED TO SUPRESS CR-LF WHEN STARTING TEXT MODE
B177  OCT 177      ERRCK GIC (FIRST ONE THAT THE DCT SEES)
DG45  DEC .785       45 DEGREES IN RADIANS
DG135 DEC 2.355    135 DEGREES IN RADIANS 
B377  OCT 377      LOWER BYTE MASK
COMMA OCT 54       COMMA                   * 26000
SEMCL OCT 73       SEMI-COLON 
CRLF  OCT 6412     CR LF
M3    DEC -3
      SKP 
* 
* 
**********************
*       TEXT         *
**********************
* 
* 
TX    ASC 1,TX     TEXT (LABEL) MODE COMMAND
CS    ASC 1,CS     CHAR. SIZE COMMAND 
ID    ASC 3,1350A  ID NAME
* 
* 
********************* 
*    ADRESSES       * 
********************* 
* 
* 
AP0   DEF P0
AP1   DEF P1
AP2   DEF P2
AP3   DEF P3
AP4   DEF P4
AP8   DEF P8
AP9   DEF P9
AID   DEF ID       ADDRESS OF ID NAME 
AMMCS DEF MMCS     MIN-MAX CHAR. SIZE STARTING ADDRESS
ACINF DEF CINF     CHARACTER PLACEMENT INFO ADDRESS 
APLTU DEF PLTU     PLOT UNIT 1ST CHAR. ADDRESS
INX   DEF INTX1    TEMP AREA ADRESS 
      SKP 
*********************************************************************** 
*                                                                     * 
*    >>>>>>>>>>>>>>>>>   TABLE AREAS   <<<<<<<<<<<<<<<<<<<<<<<<       * 
*                                                                     * 
*       DO NOT CHANGE SEQUENCE OF THE INDIVIDUAL TABLES !!!!!!        * 
*                                                                     * 
*********************************************************************** 
* 
* 
*********************************************************** 
*  DISPLAY SURFACE TABLE.  THE SIZES ARE IN MILLIMETERS   * 
*********************************************************** 
* 
ADSMM DEF *+1      STARTING ADDRESS OF DISPLAY SURFACE TABLE
      DEF DSMM0    HP 1310 CRT
      DEF DSMM1    HP 1311 CRT
      DEF DSMM2    HP 1317 CRT
      DEF DSMM3    HP 1321 CRT
* 
*  THE DISPLAY SURFACE COORDINATES FOR THE CRT'S ARE IN THE 
*   FOLLOWING SEQUENCE: 
* 
*    X MIN  MM
*    Y MIN  MM
*    X MAX  MM
*    Y MAX  MM
* 
************* 
*  HP 1310  * 
************* 
* 
DSMM0 DEC 0.
      DEC 0.
      DEC 279.
      DEC 279.
* 
************* 
*  HP 1311  * 
************* 
* 
DSMM1 DEC 0.
      DEC 0.
      DEC 216.
      DEC 216.
* 
************* 
*  HP 1317  * 
************* 
* 
DSMM2 DEC 0.
      DEC 0.
      DEC 254.
      DEC 254.
* 
************* 
*  HP 1321  * 
************* 
* 
DSMM3 DEC 0.
      DEC 0.
      DEC 305.
      DEC 305.
      SKP 
**************************************************************
*                                                            *
*                  COMMAND LINK TABLE                        *
*          !!!! DO NOT CHANGE SEQUENCE !!!!                  *
**************************************************************
DCT06 NOP 
      DEF EMSUB    EMMULATOR ENTRY ADDRESS
      DEF RESET    1  RESET (POWER ON)
      NOP   -      2  DEFAULT P1, P2
      DEF PCLR     3  CLEAR SCREEN
      NOP   -      4  FLUSH I-O BUF.
      DEF HOPEN    5  HOME PEN (0,0)
      DEC -1       6 *GET I.D.
      NOP   -      7  - 
      DEC -2       8 *GET PLOT UNIT P1, P2
      DEC -3       9 *GET CHAR. SIZE
      DEC -4      10 *GET PEN LOCATION
      DEC -4      11 *GET CURSOR LOCATION 
      DEC -4      12 *DIGITIZE
      NOP   -     13  SET LABEL ORIGIN
      DEC -5      14  LABEL DIRECTION 
      NOP   -     15  SET CHAR. SLANT ON
      NOP   -     16  SET CHAR. SLANT OFF 
      DEC -6      17  SET CHAR. SIZE (MU) 
      NOP   -     18  SET RELATIVE ORIGIN 
      NOP   -     19  SET PLOT DIRECTION
      NOP   -     20  SET SCALE 
      NOP   -     21  SET ORIGIN = CURSOR LOCATION
      NOP   -     22  SET ORIGIN = PEN LOCATION 
      NOP   -     23  DRAW TO CURSOR
      NOP   -     24  SELECT CHAR. SET
      DEF PENUP   25  SELECT PEN # 0
      NOP   -     26  SELECT PEN # -1 
      NOP   -     27  SELECT PEN # -2 
      NOP   -     28  SELECT PEN # (1-N)
      DEC -7      29 *GET # OF PENS 
      NOP   -     30  DEFINE LINE TYPE
      NOP   -     31  SELECT DEFAULT LINE TYPE
      NOP   -     32  LINE TYPE WITH LENGTH 
      DEF PENUP   33  PEN UP
      DEF PENDN   34  PEN DOWN
      DEF PLTAB   35  PLOT ABSOLUTE 
      NOP         36  PLOT RELATIVE 
      NOP         37  PLOT INCREMENT
      DEF LABEL   38  SHORT LABEL 
      DEF LABEL   39  START LABEL MODE
      DEF ETXT    40  TERM. LABEL MODE
      DEC -8      41  FLOAT PT. TO ASCII CODE 
      DEC -9      42 *GET SURFACE SIZE IN MM
      NOP   -     43  POSITION CURSOR ABSOLUTE
      NOP   -     44  POSITION CURSOR RELATIVE
      NOP   -     45  SET G1, G2
      DEC -10     46 *GET MACHINE UNITS PER MM
      DEC -11     47 *GET DEVICE CLEARING CHARACTERISTICS 
      DEC -12     48 *GET # OF PHYSICALLY DIFFERENT PENS
      DEC -13     49 *GET # OF DIFFERENT TYPES OF CURSORS 
      DEC -14     50 *LORGABILITY 
      DEC -15     51 *MAX. CHAR. SLANT (TAN ANGLE)
      DEC -16     52 *HARD CLIPPING CAPABILITY
      DEC -17     53  CHARACTER PLACEMENT 
      DEC -18     54 *GET MIN-MAX CHAR. SIZE (MU) 
      DEC -19     55 *GET LABEL DIRECTION CAPABILITY
      DEC -20     56 *GET LORG RANGE
**************************************************************
      SKP 
**************************************************************
*     ASCII COMMAND STRINGS - FOR DIRECT DUMP TO I-O BUFFER  *
*                                                            *
*           FIRST WORD = NUMBER OF BYTES                     *
*                        NEG. = WRITE TO DEVICE              *
*                        POS. = READ FROM DEVICE             *
*                                                            *
*           SECOND WORD = TERMINATER                         *
*                                                            *
*           NEXT N WORDS = DATA                              *
*                                                            *
*  !!!!!! DO NOT CHANGE SEQUENCE OF COMMANDS STRINGS !!!!!!  *
**************************************************************
*********************** 
*  RESET GIC=1        * 
*********************** 
* 
* 
*  THE RESET GIC WAS CHANGED TO REMOVE ALL NECESSARY 'ONE TIME ONLY'
*  1350 INITIALIZATION.  THE DEVICE INITIALIZATION IS NOW PERFORMED 
*  IN DVG06 AFTER ERROR CHECKING HAS BEEN SUCCESSFULLY COMPLETED. 
* 
RESET DEC -4                                         DS2013 
      DEF CRLF
*     OCT 1424     CHAR(3) CHAR(20)                  DS2013 
*     OCT 6412                                       DS2013 
*     ASC 1,EM     ERASE MEMORY                      DS2013 
*     OCT 6412                                       DS2013 
*     ASC 1,EX     ERASE AUX. BITS                   DS2013 
*     OCT 6412                                       DS2013 
*     ASC 1,EN     ERASE SEGMENT NAMES               DS2013 
*     OCT 6412                                       DS2013 
*     ASC 1,UM     UNBLANK MEMORY                    DS2013 
*     OCT 6412                                       DS2013 
      ASC 2,CS0,   SET TO SMALLEST CHAR. SIZE 
* 
*********************** 
*  CLEAR SCREEN GIC=3 * 
*********************** 
* 
PCLR  DEC -2  
      DEF CRLF
      ASC 1,EM     ERASE MEMORY 
* 
*********************** 
*  HOME PEN GIC=5     * 
*********************** 
* 
HOPEN DEC -12 
      DEF CRLF
      ASC 2,PE0,   LIFT PEN UP
      OCT 6412
      ASC 3,PA0,0; MOVE TO HOME LOCATION
* 
*********************** 
* PEN UP GIC=25       * 
*********************** 
* 
PENUP DEC -4
      DEF CRLF
      ASC 2,PE0,   LIFT PEN UP
* 
*********************** 
*  PEN DOWN GIC=33    * 
*********************** 
* 
PENDN DEC -4
      DEF CRLF
PE    ASC 2,PE1,   PUT PEN DOWN 
* 
*********************** 
* START TEXT GIC=39   * 
*********************** 
* 
LABEL DEC -8
      DEF B137     SUPPRESS CR-LF 
      ASC 2,PE1,
      OCT 6412
      ASC 1,TX     START TEXT MODE
* 
*********************** 
* END TEXT GIC=40     * 
*********************** 
* 
* 
ETXT  DEC -1
      DEF CRLF
      OCT 1400     ETX
* 
************************
* PLOT ABSOLUTE GIC=35 *
************************
* 
PLTAB DEC -2
      DEF SEMCL 
      ASC 1,PA
**************************************************************
      SKP 
****************************************
*                                      *
*           EMMULATOR TABLE            *
*    !!! DO NOT CHANGE SEQUENCE !!!    *
*                                      *
****************************************
* 
* 
SBTBL DEF *        TABLE ADDRESS
      DEF SUB06    GET I.D. 
      DEF SUB08    GET PLOT UNIT
      DEF SUB09    GET CHAR. SIZE 
      DEF SUB10    GET PEN LOCATION, CURSOR LOCATION
      DEF SUB14    SET LABEL DIRECTION
      DEF SUB17    SET CHAR. SIZE 
      DEF SUB29    GET # OF PENS
      DEF SUB41    FLT PT. TO ASCII CONVERSION
      DEF SUB42    GET GET SURFACE SIZE IN MM 
      DEF SUB46    GET MACHINE UNITS PER MM 
      DEF SUB47    GET DEVICE CLEARING CHARACTERISTICS
      DEF SUB48    GET # OF PHYSICALLY DIFFERENT PENS 
      DEF SUB49    GET # OF DIFFERENT TYPES OF CURSORS
      DEF SUB50    GET LORGABILITY INFOMATION 
      DEF SUB51    GET MAX. CHAR. SLANT 
      DEF SUB52    GET HARD CLIPPING CAPABILITY 
      DEF SUB53    GET CHARACTER PLACEMENT INFO 
      DEF SUB54    GET MIN-MAX CHAR. SIZE 
      DEF SUB55    GET LABEL DIRECTION CAPABILITY 
      DEF SUB56    LORG RANGE 
* 
      SKP 
* 
************************************************
*     MACHINE UNIT PER MILLIMETER TABLE        *
************************************************
* 
AMUMM DEF *+1      STARTING ADDRESS OF MACHINE UNIT PER MM TABLE
      DEF MUMM0    HP 1310 CRT
      DEF MUMM1    HP 1311 CRT
      DEF MUMM2    HP 1317 CRT
      DEF MUMM3    HP 1321 CRT
* 
*  THE MACHINE UNIT / MM TABLE IS IN THE FOLLOWING ORDER: 
* 
*     X  MU / MM
*     Y  MU / MM
* 
****************
*    HP 1310   *
****************
* 
MUMM0 DEC 3.663 
      DEC 3.667 
* 
****************
*    HP 1311   *
****************
* 
MUMM1 DEC 4.731 
      DEC 4.736 
* 
****************
*    HP 1317   *
****************
* 
MUMM2 DEC 4.024 
      DEC 4.028 
* 
****************
*    HP 1321   *
****************
* 
MUMM3 DEC 3.351 
      DEC 3.354 
      SKP 
******************************************************
*                                                    *
*   MIN / MAX CHARACTER SIZE (MACHINE UNITS) TABLE   *
*                                                    *
******************************************************
* 
MMCS  DEC 12.0     X MIN CHAR. SIZE (MU)
      DEC 16.0     Y MIN CHAR. SIZE (MU)
      DEC 96.0     X MAX CHAR. SIZE (MU)
      DEC 128.0    Y MAX CHAR. SIZE (MU)
******************************************************
* 
* 
******************************************************
*                                                    *
*  MIN / MAX DISPLAY SIZE COORDINATE (MU) TABLE      *
*                                                    *
******************************************************
* 
PLTU  DEC 0.       X MIN (MU) 
      DEC 0.       Y MIN (MU) 
      DEC 1022.    X MAX (MU) 
      DEC 1023.    Y MAX (MU) 
******************************************************
* 
* 
******************************************************
*                                                    *
*  CHARCTER PLACEMENT INFORMATION TABLE              *
*                                                    *
******************************************************
* 
CINF  DEC 0.       X MIN IN CHAR. CELL
      DEC .6667    X MAX IN CHAR. CELL
      DEC 0.       Y MIN IN CHAR. CELL
      DEC 0.6      Y MAX IN CHAR. CELL
******************************************************
* 
* 
******************************************************* 
*                                                     * 
*  LABEL DIRECTION CAPABILITY TABLE                   * 
*                                                     * 
******************************************************* 
* 
LBLDR DEF *+1 
      OCT 1        FIXED INCREMENTS (THE 1350 IS ONLY 
*                  CAPABLE OF 0 AND 90 ROTATIONS) 
      DEC 1.57     INCREMENT ANGLE (90 DEG.)
******************************************************* 
      SKP 
*********************************************************** 
*                                                         * 
*               WORKING VARIABLES                         * 
*                                                         * 
*********************************************************** 
* 
* 
ADCNT BSS 1        WORKING ADDRESS COUNTER FOR I/O BUFFER 
BITE  BSS 1        "PUTBYTE" TEMPORARY REG. 
GCBCD BSS 1        GRAPHICS CONTROL BLOCK CODE
NBYTE BSS 1        # OF BYTES TO BE STORED IN I-O BUFFER
IOCNT BSS 1        I-O COUNT FOR EXEC (-NBYTE)
LNTH  BSS 1        # WORDS TO TRANSFER TO GCB 
TEMP  BSS 1        TEMPORARY REGISTER 
FXDN  BSS 1        FORMAT F7.N     WHERE N = FXDN 
* 
* 
**************************************************************
*              GCB INTERFACE VARIABLES                       *
**************************************************************
* 
INTX1 BSS 1  DO 
INTX2 BSS 1    NOT
INTX3 BSS 1       CHANGE
INTX4 BSS 1             SEQUENCE
INTX5 BSS 4                      !!!!!! 
**************************************************************
* 
* 
**************************************************************
*                                                            *
*               DEVICE SAVE AREA VARIABLES                   *
*            !!!! DO NOT CHANGE SEQUENCE !!!!                *
*                                                            *
**************************************************************
* 
BUFLN BSS 1    CURRENT BUFFER LENGTH (NOT USED IN DCT)
PX    BSS 1    X POSITION OF CURSOR (MU)
PY    BSS 1    Y POSITION OF CURSOR (MU)
IOFLG BSS 1    BUFFERING FLAG (NOT USED IN DCT) 
LUN   BSS 1    LU # OF GRAPHICS DEVICE
IOBUF BSS 1    BEGINNING ADDRESS OF I/O BUFFER
IOBL  BSS 1    TOTAL LENGTH OF I/O BUFFER (NOT USED IN DCT) 
TCSIZ BSS 1    CURRENT CHARACTER SIZE (0,1,2 OR 3)
LDIR  BSS 1    CURRENT LABEL DIRECTION (0=0, 4=90)
CRT#  BSS 1    CRT # (0=1310, 1=1311, 2=1317, 3=1321) 
* 
**************************************************************
      SKP 
**************************************************************
*                                                            *
*        ENTRY ROUTINE FOR ALL EMULATED COMMANDS             *
*                                                            *
**************************************************************
* 
* 
EMSUB NOP          EMULATOR ENTRY PONIT 
      LDA GIC      GET THE GIC
      CPA B177     ERROR CHECK GIC (1ST ONE THAT THE DCT SEES)
      JMP ERRCK    YEP! GO DO ERROR CHECK 
* 
      JSB SETUP    GO SET THINGS UP 
      LDA DCTAD    GET EMULATE SUB CODE (DCT ADDRESS) 
      CMA,INA      CHANGE SIGN (TO POSITIVE)
      STA B         AND STORE IT IN B-REG.
      LDA SBTBL    GET ADDRESS OF EMULATOR TABLE
      JSB INDCK     AND TAKE OUT THE INDIRECT BIT 
      ADA B        COMPUTE THE POINTER
      LDB LNGTH    # OF ITEMS IN GIC (EX. PA = 2) 
      INB          INCREMENT TO ACCOMODATE CONTROL WORD 
      STB LNTH      AND STORE IT AS TOTAL LENGTH
      LDA A,I 
      JMP A,I      JMP TO SUB-- FOR EMULATE 
* 
* 
**************************
*     ERROR CHECKING     *
**************************
* 
ERRCK LDA .1350    GET 1350 FOR DCT/DVG CHECK 
      JMP EMSUB,I 
* 
.1350 DEC 1350
      SKP 
***************************************************** 
*                                                   * 
*             EMMULATOR ROUTINES                    * 
*                                                   * 
***************************************************** 
* 
* 
**************************************
*  GET THE ID OF THE DEVICE (1350A)  *
**************************************
* 
SUB06 LDA AID      GET ADDRESS OF ID
      LDB AP3      IT'S 3 WORDS LONG
      JMP USGB     SEND IT BACK IN THE GICB 
* 
* 
******************************
*  GET THE PLOT UNITS P1,P2  *
******************************
* 
SUB08 JSB GCBIM    GET THE MECHANICAL LIMITS FROM THE GCB 
      DEF *+6      RETURN 
      DEF P8       GCB LOGICAL POINTER #8 
      DEF P1       1 POINTER
      DEF INTX1    PUT INFO IN INTX1-INTX8
      DEF P0       DEFAULT LENGTH = 8 WORDS 
      DEF P1       READ IT
* 
* 
* SEE IF G1X AND G2X = 0       IF YES, DO NOT CHANGE
*                              IF NO, XFR DEFAULT G1 AND G2 TO GICB 
* 
      DLD INTX1    GET G1X
      SZA,RSS      G1X UPPER=0
      SZB          YEP ! G1X LOWER=0
      JMP SB081    NOPE! SEND BACK CURRENT G1,G2
* 
      DLD INTX5    GET G2X
      SZA,RSS      G2X UPPER=0
      SZB          YEP! G2X LOWER=0 
      JMP SB081    NOPE! SEND BACK CURRENT G1,G2
* 
      LDA APLTU    ADDRESS OF DEFUALT PLOT UNIT 
      LDB AP8      P1 = 0, 0     P2 = 1022, 1023
      JMP USGB     SHIP BACK DEFAULTS 
* 
SB081 LDA INX      GET ADDRESS OF GCB TEMPS (INTX1) 
      LDB AP8      THERE'S 8 BYTES
      JMP USGB     SHIP BACK CURRENT G1,G2
* 
* 
****************************************
*    GET THE CURRENT CHARACTER SIZE    *
****************************************
* 
* 
SUB09 LDB TCSIZ    B=1350 CSIZE 
      CMB,INB      B= SHIFT COUNT 
      LDA P1       SET MULTIPLY FACTOR
      CLE 
* 
*  CONVERT TCSIZ (0,1,2,3) TO GET MULTIPLY FACTOR(0,2,4,8)
* 
SB091 SZB,RSS      SHIFTED ENOUGH?
      JMP SB092    YEP! 
* 
      RAL          SHIFT LEFT 
      INB          INCREMENT SHIFT COUNT
      JMP SB091    SEE IF WE'RE DONE
* 
SB092 STA TEMP     SAVE MULTIPLY FACTOR 
      MPY P12      GET WIDTH  IN MU'S 
      JSB FLOAT    CONVERT TO FLOAT 
      DST INTX1    PUT IT IN GCB TEMP1,2
      LDA TEMP     GET THE MULTIPLY FACTOR
      MPY P16      GET HEIGHT IN MU'S 
      JSB FLOAT    CONVERT IT TO FLOAT
      DST INTX1+2  PUT HEIGHT IN GCB TEMP3,4
      LDA P16      GET GICB POINTER 
      JSB GB2      SEND THE CHAR. INFO BACK IN THE GCB
      JMP EMSUB,I  EXIT THRU EMULATE ROUTINE
* 
* 
**********************************
*  GET THE CURRENT PEN POSITION  *
**********************************
* 
* 
SUB10 JSB GCBIM    GET PX AND PY FROM THE SAVE AREA 
      DEF GOTXY    RETURN 
      DEF P32      SAVE AREA POINTER
      DEF P1       1 POINTER
      DEF BUFLN    SAVE AREA TABLE ADDRESS
      DEF P3       3 BYTES
      DEF P1       READ IT
* 
GOTXY DLD PX       GET PEN POSITION INFO. 
      DST INTX1    STORE IT FOR TRANSFER
      CLA          IN CASE IT USES IZ PARM
      STA INTX3      SHIP BACK A 0 IN IZ
      LDA P16      GET GICB POINTER 
      JSB GB2      SEND POSITION BACK IN THE GICB 
      JMP EMSUB,I  EXIT THRU EMULATE ROUTINE
* 
* 
* 
*************************** 
*   SET LABEL DIRECTION   * 
*************************** 
* 
*   LDIR = 0 (0  DEG.) IF REQUESTED ANGLE >=0 AND <45 
*   LDIR = 1 (90 DEG.) IF REQUESTED ANGLE >=45 AND <135 
*   LDIR = 0 (0  DEG.) IF REQUESTED ANGLE >135
* 
SUB14 LDA P16      GET GICB POINTER 
      JSB GB1      PUT GICB INFO INTO INTX1,3 
      LDA P0       SET LABEL
      STA LDIR          DIRECTION TO 0
      DLD DG45     GET 45 DEG. IN RADIANS 
      FSB INTX2    CHECK OUT THE ANGLE REQUESTED
      SSA,RSS      IS ANGLE < 45 DEG. 
      JMP OUTCS    YEP! LDIR=0 -- GO OUTPUT IT
* 
      DLD DG135    GET 135 DEG. IN RADIANS
      FSB INTX2    CHECK OUT THE ANGLE REQUESTED
      SSA          IS ANGLE >135 DEGREES
      JMP OUTCS    YEP! LDIR=0 -- GO OUTPUT IT
* 
      LDA P4       NOPE! IT'S IN BOUNDS 
      STA LDIR     SET LDIR = 4 = 90 DEGREES
      JMP OUTCS    GO OUTPUT IT 
* 
********************************
*    SET THE CHARACTER SIZE    *
********************************
* 
* 
SUB17 LDA P16      GET CHAR INFO FROM GICB
      JSB GB1 
      DLD INTX4    READ IN CHAR. HEIGHT 
      JSB .IENT    CONVERT TO INTEGER 
      NOP          NO ERROR ROUTINE 
      SZA,RSS      IS IT ZERO?
      JMP SAVSZ    YEP, SAVE THE CSIZE
* 
      ALF,ALF      SHIFT CSIZE 8 BITS TO THE LEFT 
      LDB A        CHECK FOR
      AND B377          BIG CSIZE 
      SZA          IS IT A BIGGY? 
      JMP BIGSZ    YEP! SET TO THE BIGGEST SIZE 
* 
      LDA M3       SHIFT COUNTER=-3 
SLOOP CLE,ELB      SHIFT CSIZE LEFT ONE 
      SEZ          CSIZE = 2 OR 3?
      JMP NEGA     YEP! GO SAVE IT
* 
      INA          UPDATE SHIFT COUNT 
      SZA          DONE SHIFTING? 
      JMP SLOOP    NOPE! SHIFT IT AGAIN 
      JMP SAVSZ    YEP! SET CSIZE TO SMALLEST SIZE
* 
NEGA  CMA,INA      MAKE CSIZE POSITIVE
      JMP SAVSZ    GO SAVE IT 
* 
BIGSZ LDA P3       WE GOT THE BIGGY 
SAVSZ STA TCSIZ    SAVE THE CSIZE 
      JMP OUTCS    OUTPUT CHAR. SIZE TO 1350
* 
* 
***************************** 
*  GET THE NUMBER OF PENS   * 
***************************** 
* 
SUB29 LDA AP1      # OF PENS = 1
      LDB AP1 
      JMP USGB
* 
* 
**************************************
* OUTPUT LABELS FOR LAXES AND LGRID  *
**************************************
* 
SUB41 LDA PE        MAKE
      JSB WRDST         SURE
      LDA PE+1               THAT 
      JSB WRDST                  THE
      LDA CRLF                      PEN 
      JSB WRDST                         IS DOWN 
      LDA TX       GET MNUMONIC FOR TEXT MODE (TX)
      JSB WRDST     AND PUT IT IN I-O BUFFER
      LDA P16      GET DATA 
      JSB GB1       FROM GICB 
      JSB GCBIM    GET THE FXDN FROM THE GCB
      DEF GOTFX    RETURN 
      DEF P26      FXDN LOGICAL POINTER 
      DEF P1       1 POINTER
      DEF FXDN     PUT IT IN FXDN 
      DEF P0       DEFAULT LENGTH = 1 
      DEF P1       READ IT
* 
GOTFX JSB GLIDE    DO FLT PT. TO ASCII CONVERSION 
      LDA P3       TEXT TERMINATOR
      JSB PTBYT    PUT THE TERMINATOR IN THE BUFFER 
      LDA NBYTE    GET # OF BYTES 
      LDB P2       THIS IS A WRITE(RW = 2)
      JSB OUTPT     AND DO I-O XFR
      JMP EMSUB,I  EXIT THRU EMULATE ROUTINE
* 
* 
******************************* 
*   GET THE DISPLAY LIMITS    * 
******************************* 
* 
SUB42 LDA ADSMM    GET ADDRESS OF DISPLAY SIZE TABLE
      JSB INDCK    MAKE IT GOOD 
      ADA CRT#     INDEX IN WITH THE CRT# 
      LDA A,I      GET THE ADDRESS OF THE DISPLAY LIMITS
      LDB AP8      THERE'S 8 WORDS
      JMP USGB     SHIP THE DISPLAY SIZE BACK IN THE GICB 
* 
* 
******************************************* 
*  GET THE MACHINE UNITS PER MILLIMETER   * 
******************************************* 
* 
SUB46 LDA AMUMM    GET ADDRESS OF THE MU/MM TABLE 
      JSB INDCK    MAKE IT GOOD 
      ADA CRT#     INDEX IN WITH THE CRT# 
      LDA A,I      GET THE CRT'S MU/MM ADDRESS
      LDB AP4      THERE'S 4 WORDS
      JMP USGB     SHIP THE MU/MM BACK IN THE GICB
* 
***************************************** 
*  GET THE DEVICE CLEARING CAPABILITY   * 
***************************************** 
* 
* 
SUB47 LDA AP2      TRUE CLEAR (ERASE) MASK = 2
      LDB AP1      ONLY 1 WORD
      JMP USGB     SHIP IT BACK IN THE GICB 
* 
****************************
* GET # OF DIFFERENT PENS  *
****************************
* 
SUB48 JMP SUB29    # OF PENS = 1
* 
* 
**********************
* GET # OF CURSORS   *
**********************
* 
* 
SUB49 LDA AP0      # OF CURSORS = 0 
      LDB AP1 
      JMP USGB
* 
********************* 
*  GET LORGABILITY  * 
********************* 
* 
SUB50 JMP SUB49    LORGABILITY = NO 
* 
* 
******************************* 
*  GET CHAR SLANT CAPABILITY  * 
******************************* 
* 
SUB51 LDA AP0      CHAR. SLANT = NO 
      LDB AP4 
      JMP USGB
* 
* 
***************************** 
*  GET CLIPPING CAPABILITY  * 
***************************** 
* 
SUB52 JMP SUB49    NO HARD CLIPPING CAPABILITY
* 
* 
*********************************** 
*  GET CHARACTER PLACEMENT INFO   * 
*********************************** 
* 
SUB53 LDA ACINF    ADDRESS OF CHARACTER PLACEMENT  INFO 
      LDB AP8 
      JMP USGB
* 
* 
************************************
*  GET MIN/MAX CHARACTER SIZES     *
************************************
* 
SUB54 LDA AMMCS    MIN-MAX CHAR. SIZE 
      LDB AP9 
      JMP USGB
* 
* 
**************************
*  GET LDIR CAPABILITY   *
**************************
* 
SUB55 LDA LBLDR    LABEL DIRECTION = HORIZONTAL AND VERTICAL ONLY 
      LDB AP3 
      JMP USGB
* 
* 
************************* 
*  GET LORG CAPABILITY  * 
************************* 
* 
SUB56 LDA AP0      LORG =1 ONLY 
      LDB AP2 
      JMP USGB
      SKP 
******************************************************************* 
*                                                                 * 
*                  UTILITY SUBROUTINES                            * 
*                                                                 * 
******************************************************************* 
* 
* 
* 
**********************************************
*                                            *
* USGB:  WRITE DATA INTO THE GICB            *
*                                            *
* ON ENTRY:   A = ADDRESS OF DATA (CONSTANTS)*
*             B = ADDRESS OF # OF WORDS      *
**********************************************
* 
* 
USGB  STA ADDR     ADDRESS OF DATA
      STB NUM      ADDRESS OF # OF DATA ITEMS 
      JSB GCBIM    GRAPHICS CONTROL BLOCK INTERFACE MODULE
      DEF *+6 
      DEF P16      ICODE ( GCB POINTER )
      DEF P1       LENGTH OF ICODE
ADDR  NOP          BUFFER NAME               * DEF ADDR,I 
NUM   NOP          BUFFER LENGTH             * DEF NUM,I
      DEF P2       WRITE
      JMP EMSUB,I  EXIT THRU EMULATE ROUTINE
* 
********************************* 
*                               * 
* GB1:  READ DATA FROM GCB      * 
*                               * 
* ON ENTRY:   A = GCB POINTER   * 
********************************* 
* 
* 
GB1   NOP          READ DATA FROM GICB
      STA GCBCD    STORE THE GCB CODE (POINTER) 
      JSB GCBIM    GRAPHICS CONTROL BLOCK INTERFACE MODULE
      DEF *+6 
      DEF GCBCD    GCB CODE (POINTER) 
      DEF P1       LENGTH OF THE CODE 
      DEF INTX1    BUFFER NAME
      DEF LNTH     BUFFER LENGTH
      DEF P1       READ (RW = 1)
      JMP GB1,I    RETURN 
* 
********************************* 
*                               * 
* GB2:  WRITE DATA INTO THE GCB * 
*                               * 
* ON ENTRY:   A = GCB CODE      * 
********************************* 
* 
GB2   NOP          WRITE DATA INTO GICB 
      STA GCBCD    STORE THE GCB CODE (POINTER) 
      JSB GCBIM    GRAPHICS CONTROL BLOCK INTERFACE MODULE
      DEF *+6 
      DEF GCBCD    ICODE = GCB CODE (POINTER) 
      DEF P1       LENGTH OF THE CODE = 1 
      DEF INTX1    BUFFER NAME
      DEF LNGTH    BUFFER LENGTH
      DEF P2       WRITE (RW = 2) 
      JMP GB2,I    RETURN 
* 
**********************************************
*                                            *
* GLIDE: CONVERT FLT PT. TO ASCII            *
*                                            *
*   ON ENTRY: INTX2 CONTAINS THE NUMBER TO   *
*             BE CONVERTED                   *
**********************************************
* 
GLIDE NOP 
      JSB FLTAS    FLT PT. TO ASCII CONVERSION
      DEF *+6 
      DEF INTX2    DATA TO BE CONVERT 
      DEF IOBUF,I  PUT RESULT BACK IN HERE
      DEF NBYTE    # OF BYTES 
      DEF FXDN     FORMAT F7.N
      DEF TEMP
      JMP GLIDE,I  RETURN 
* 
******************************************* 
*                                         * 
* OUTPT: WRITE TO THE DEVICE              * 
*                                         * 
* ON ENTRY:   A = # OF BYTES TO BE SENT   * 
******************************************* 
* 
* 
OUTPT NOP          I-0 XFR ROUTINE
      CMA,INA      CHANGE SIGN (TO POSITIVE)
      STA IOCNT    MAKE IT A BUFFER COUNTER FOR OUTPUT
      JSB REIO     XFR CONTROL TO RTE (LINK TO DVR37 ??)
      DEF *+5 
      DEF P2       ICODE    2=WRITE 
      DEF LUN      CONTROL INFO.   ICNWD=LU # 
IOB   NOP          BUFFER LOCATION
      DEF IOCNT    BUFFER LENGTH
      JMP OUTPT,I  RETURN 
* 
* 
******************************************* 
*                                         * 
* PTBYT:  PUT A BYTE INTO THE I/O BUFFER  * 
*                                         * 
* ON ENTRY:   A = THE BYTE TO BE INSERTED * 
******************************************* 
* 
* 
PTBYT NOP 
      STA BITE
      JSB UPDTE    UPDATE ADDRESS COUNTER (ADCNT) 
      JSB BYTE     PUT CURRENT BYTE INTO NEXT AVAILABLE SPACE 
      DEF *+4 
      DEF NBYTE    # OF BYTES 
      DEF BITE     THE BYTE TO BE SEND
      DEF ADCNT,I  I-O BUFFER 
      ISZ NBYTE    INCREMENT BYTE COUNT 
      JSB UPDTE    UPDATE ADDRESS COUNTER 
      JMP PTBYT,I  RETURN 
* 
********************************************* 
*                                           * 
* SETUP: SET UP VARIABLES NEEDED BY THE DCT * 
*                                           * 
********************************************* 
* 
* 
SETUP NOP 
      JSB GCBIM    READ DATA FROM GCB DEVICE SAVE AREA
      DEF *+6      RETURN 
      DEF P32      ICODE FOR DEV. SUB. BUFFER AREA
      DEF P1       LENGTH OF ICODE = 1
      DEF BUFLN    STARTING ADDRESS OF SAVE AREA VARIABLES
      DEF P10      SAVE AREA SIZE =10 WORDS 
      DEF P1       READ-WRITE CODE     1 = READ 
NOLOD LDA IOBUF    GET THE BUFFER ADDRESS 
      JSB INDCK    MAKE IT CLEAN
      STA IOBUF    SAVE IT AGAIN
      STA IOB      BUFFER ADDRESS FOR OUTPUT
      STA ADCNT    VARIABLE ADDRESS COUNTER 
      LDA P0       CLEAR
      STA NBYTE     THE BYTE COUNTER
      JMP SETUP,I  RETURN 
* 
* 
********************************************* 
*                                           * 
* UPDTE: UP DATE THE ADDRESS COUNTER (ADCNT)* 
*                                           * 
********************************************* 
* 
UPDTE NOP          UP DATE
      LDA NBYTE    GET # OF BYTES 
      CLE,ERA      DIVIDE BY 2
      ADA IOBUF    ADD IT TO I-O BUFFER ADDRESS 
      STA ADCNT    STORE IT AS AN ADDRESS COUNT 
      JMP UPDTE,I  RETURN 
* 
********************************************* 
*                                           * 
* WRDST: STORE A WORD IN THE I/O BUFFER     * 
*                                           * 
* ON ENTRY:   A = WORD TO BE SAVED          * 
********************************************* 
* 
* 
WRDST NOP 
      STA ADCNT,I  PUT IT IN THE BUFFER 
      ISZ ADCNT    BUMP UP THE ADDRESS COUNT
      ISZ NBYTE    ADD 2 TO 
      ISZ NBYTE           THE BYTE COUNT
      JMP WRDST,I  RETURN 
* 
********************************************
*                                          *
*  OUTCS: OUTPUT THE CHARACTER SIZE/LDIR   *
*          TO THE 1350                     *
********************************************
* 
* 
OUTCS LDA CS       GET MNUMONIC FOR CHAR. SIZE
      JSB WRDST     AND PUT IT IN I/O BUFFER
      LDA LDIR     GET THE 1350 LDIR
      IOR TCSIZ    OR IT WITH THE 1350 CSIZE
      IOR P48      MAKE IT ASCII
      JSB PTBYT    PUT IT IN THE I/O BUFFER 
      LDA COMMA    MAKE COMMA THE TERMINATOR
      JSB PTBYT    STICK IT IN THE I/O BUFFER 
      LDA NBYTE    GET # BYTES TO OUTPUT
      LDB P2
      JSB OUTPT    OUTPUT THE BUFFER TO THE 1350
      JSB GCBIM    SAVE THE CSIZE AND LDIR IN THE SAVE AREA 
      DEF *+6      RETURN 
      DEF P32      SAVE AREA PTR IN THE GCB 
      DEF P1       1 POINTER
      DEF BUFLN    START OF SAVE AREA VARIABLES 
      DEF P9       9 WORDS (WE DON'T NEED TO SAVE THE CRT#) 
      DEF P2       WRITE IT 
      JMP EMSUB,I  EXIT THRU EMULATE ROUTINE
* 
* 
      END 
EOF 
                                                                                                                                                                                                                                            