ASMB,R,L,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:    DCT07 -- 9874A DEVICE COMMAND TABLE 
*      SOURCE:  92840-18089 
*      RELOC:   92840-16007 
* 
* 
* 
************************************************************* 
* 
      NAM DCT07,7  92840-16007 REV. 1913 790123 
      ENT DCT07 
* 
      EXT EXEC,FLOAT
      EXT INDCK,INTX,GCBIM,BYTE 
      EXT CONVT,FLTAS 
      EXT LNGTH,GIC,DCTAD 
      EXT REIO
* 
*     THIS IS THE DEVICE COMMAND AND EMULATOR MODULE FOR THE
*     9874A DIGITIZER.
* 
DCT07 NOP 
      DEF EML07 
      DEF RESET     RESET DEVICE
      DEF DEFLT     DEFAULT 
      NOP           FORM FEED 
      NOP 
      NOP           HOME PEN
      DEC -1        GET DEVICE ID 
      NOP           GET CAPABILITIES
      DEF PLTUN     GET PLOT UNITS P1 AND P2
      NOP           GET CHARACTER SPACE SIZE INFORMATION
      DEF CRLOC     GET PEN LOCATION
      DEF CRLOC     GET CURSOR LOCATION 
      OCT -2        DIGITIZE
      NOP           SET LABEL ORIGIN
      NOP           SET LABEL DIRECTION 
      NOP           SLANT ON
      NOP           SLANT OFF 
      NOP           SET CHARACTER SIZE
      NOP           SET RELATIVEW ORIGIN (PORG) 
      NOP           SET PLOT DIRECTION
      NOP           SET SCALE 
      SKP 
      NOP           SET ORIGIN = CURSOR 
      NOP           SET ORIGIN = PEN
      NOP           DRAW TO CURSOR
      NOP           SELECT CHARACTER SIZE 
      NOP           SELECT PEN 0
      NOP           SELECT PEN -1 (ERASE) 
      NOP           SELECT PEN -2 (COMPLEMENT)
      NOP           LINE TYPE 
      NOP           GET NUMBER OF PENS
      NOP           DEFINE LINE TYPE
      NOP           SELECT DEFAULT LINE TYPE
      NOP           DEFAULT LINE TYPE WITH LENGTH 
      NOP           PEN UP
      NOP           PEN DOWN
      NOP           PLOT ABSOLUTE 
      NOP           PLOT RELATIVE 
      NOP           PLOT INCREMENTAL
      NOP           SHORT LABEL 
      NOP           START LONG LABEL
      NOP           STOP LONG LABEL MODE
      DEC -3        FLOAT TO ASCII
      DEC -4        SURFACE SIZE IN MM
      NOP           POSITION CURSOR 
      NOP           POSITION CURSOR RELATIVE
      DEC -5        SET P1,P2 
      DEF GTMUM     GET MU/MM 
      DEC -6        GET DEVICE CLEARING CHARACTERISTICS 
      NOP           NUMBER OF PHYSICALLY DIFFERENT PENS 
      NOP           NUMBER OFC CURSORS
      NOP           LORGABILITY 
      NOP           MAXIMUM CHARACTER SLANT 
      DEC -7        DEVICE HARD CLIPPING CAPABILITY 
      DEC -8        INQUIRE CHARACTER PLACEMENT 
      NOP 
      NOP 
      NOP 
      SKP 
* 
*     ASCII COMMAND STRINGS FIRST WORD = NUMBER OF BYTES
*                           SECOND WORD = TERMINATOR
* 
RESET DEC -5        5 BYTES, WRITE
      DEF SEMCL 
      ASC 3,DF;SG   COMMAND STRING
* 
DEFLT DEC -20 
      DEF SEMCL 
      ASC 10,IP0,0,17500,12600;IW 
* 
PLTUN DEC 2 
      DEF SEMCL 
OP    ASC 1,OP
* 
CRLOC DEC 2 
      DEF SEMCL 
      ASC 1,OC
* 
GTMUM DEC 2 
      DEF SEMCL 
      ASC 1,OF
      SKP 
* 
*     SETUP 
* 
SETUP NOP 
      JSB GCBIM     RETRIEVE IOBUF ADDRESS AND IOBL FROM THE GCB
      DEF CONT1 
      DEF .2        CODE IN IGTBL, FOR IOBUF,IOBL,AND LUN 
      DEF .3        TWO CODES 
      DEF LUN 
      DEF .0        THREE WORDS 
      DEF .1        READ
CONT1 LDA IOBUF 
      JSB INDCK 
      STA IOBUF 
      STA IOB 
      STA ADCNT     INITIALIZE ADDRESS COUNTER
      STA INTIO 
      LDA SEMCL     TERMINATOR
      STA TERM
      CLA 
      STA NBYTE     BYTE COUNTER
      STA IBYTE 
RTSET JMP SETUP,I 
* 
*     INTEG  --  CONVERT INCOMING DATA FROM ASCII TO INTEGER
* 
INTEG NOP 
      LDA LNGTH     SET TO CONVERT FROM ASCII TO INTEGER
      CMA,INA 
      STA LNTH
      CLA 
      STA IBYTE 
      LDA INX 
      STA INTAD 
INTLP JSB INTX      BEGIN TO CONVERT DATA 
      DEF RTINT 
INTIO NOP 
INTAD NOP 
      DEF IBYTE 
RTINT LDA FIRST     SEE IF WE ARE RETRIEVING PLOT UNITS 
      CPA OP
      JMP FIXIT     YES 
CONIN ISZ INTAD 
      ISZ LNTH
      JMP INTLP     CONTINUE
RTING JMP INTEG,I 
      SKP 
* 
*     FIXIT 
* 
FIXIT LDA INTAD,I   CONVERT INTEGER TO FLOATING POINT 
      JSB FLOAT 
      DST INTAD,I 
      ISZ INTAD 
      ISZ LNTH
      JMP CONIN     CONTINUE
* 
*     GB2  --  TAKE VALUES PLACED IN INTX1(1) TO INTX1(LNGTH) AND 
*              TRANSFER THIS DATA TO GICB.
* 
GB2   NOP 
      STA GCBCD 
      JSB GCBIM     TRANSFER DATA TO AGL
      DEF RTGB2 
      DEF GCBCD 
      DEF .1
      DEF INTX1 
      DEF LNGTH 
      DEF .2
RTGB2 JMP GB2,I 
* 
*     GB1  --  RETRIEVE DATA FROM GICB AND PLACE IT IN INTX1(1) TO
*              INTX1(LNTH)
* 
GB1   NOP 
      STA GCBCD     GCB POINTER 
      JSB GCBIM     RETRIEVE INTEGER VALUES FROM
      DEF RTGB1     GCB 
      DEF GCBCD 
      DEF .1
      DEF INTX1 
      DEF LNTH
      DEF .1
RTGB1 JMP GB1,I 
* 
*     FIN  --  1) CONVERTS INTEGERS TO ASCII
*              2) TRANSFERS THIS ASCII TO THE DEVICE (VIA OUTPT). 
*              3) RETURNS TO CALLER 
* 
FIN   NOP 
      JSB CONVT 
      DEF RTCON 
      DEF INTX2     FWA FOR INTEGERS TO BE CONVERTED
      DEF IOBUF,I   I O BUFFER
      DEF NBYTE 
      DEF LNGTH 
RTCON JSB TRBYT     INSERT TERMINATOR 
      LDA NBYTE 
      LDB .2
      JSB OUTPT 
RTFIN JMP FIN,I 
      SKP 
* 
*     TRBYT 
* 
TRBYT NOP           INSERT TERMINATOR INTO OUTPUT BUFFER
      LDA TERM      SEMI-COLON
      JSB PTBYT 
RTTBT JMP TRBYT,I 
* 
*     PTBYT 
* 
PTBYT NOP 
      STA BITE
      JSB UPDTE     UPDATE ADDRESS COUNTER (ADCNT)
      JSB BYTE
      DEF RTBYT 
      DEF NBYTE 
      DEF BITE
      DEF ADCNT,I 
RTBYT ISZ NBYTE 
      JSB UPDTE 
RTPBT JMP PTBYT,I 
* 
BITE  NOP 
* 
*     UPDTE 
* 
UPDTE NOP 
      LDA NBYTE 
      CLE,ERA 
      ADA IOBUF 
      STA ADCNT 
RTUDT JMP UPDTE,I 
* 
*     OUTPT 
* 
OUTPT NOP           I/O TRANSFER ROUTINE
      STB RW
      LDB TERM
      CPB .137      CHECK IF SUPRESS CRLF ALREADY HERE
      JMP *+2       YES, DONT INCREMENT CONUT 
      INA           GOING TO ADD SUPRESS
      CMA,INA 
      STA IOCNT     COUNT OF TRANSFER IN CHARACTERS 
      LDA .137      NEED SUPRESS
      JSB PTBYT     STORE IT
      JSB REIO
      DEF RTOUT 
      DEF RW
      DEF LUN 
IOB   NOP 
      DEF IOCNT 
RTOUT JMP OUTPT,I 
      SKP 
* 
*     EMULATORS 
* 
EML07 NOP 
      JSB SETUP     GO GET IOBUF,IOBL,LUN AND FXD N 
      LDA GIC 
      CPA .177
      JMP ERRCK 
      LDA DCTAD     EMULATOR NUMBER (NEGATIVE)
      CMA,INA 
      STA B 
      LDA EM0       TOP OF LIST OF EMULATORS AND OTHER THINGS.
      JSB INDCK     GET RID OF INDIRECT BIT 
      ADA B         COMPUTE POINTER 
      LDB LNGTH 
      INB 
      STB LNTH
      LDA A,I 
      JMP A,I 
* 
* 
EM0   DEF * 
      DEF EMUL1 
      DEF EMUL2 
      DEF EMUL3 
      DEF EMUL4 
      DEF EMUL5 
      DEF EMUL6 
      DEF EMUL7 
      DEF EMUL8 
* 
*     EMULATOR #1  --  GET DEVICE ID
* 
EMUL1 LDA IDCD
      LDB DF3 
      JSB GB
      JMP EML07,I 
* 
IDCD  DEF .984A 
.984A ASC 3,9874A 
      SKP 
* 
*     EMULATOR #2  --  DIGITIZE 
* 
EMUL2 NOP 
EM4LP LDA OS        OUTPUT STATUS 
      JSB PROUT 
      LDA .40       NOW CHECK STATUS WORD BIT 2 TO SEE IF POINT 
      LDB .1
      JSB OUTPT    HAS BEEN ENTERRED
      LDA .1
      STA LNGTH 
      STA LNTH
      JSB INTEG     CONVERT ASCII TO INTEGER
      LDA INTX1 
      AND .4
      SZA 
      JMP GETPT     BIT 2 IS SET GO GET POINT 
      JMP EM4LP     CONTINUE LOOPING UNTIL WHATS -ITS ENTERS POINT
GETPT LDA OD        OUTPUT DIGITIZED POINT
      JSB PROUT 
      LDA .40 
      LDB .1
      JSB OUTPT 
      LDA .4
      STA LNGTH 
      JSB INTEG 
      LDA .3        RESET LENGTH TO EXPECTED 3 PARAMETERS 
      STA LNGTH 
      LDA .16 
      JSB GB2 
      JMP EML07,I 
* 
*     PROUT 
* 
PROUT NOP 
      JSB WRDST 
      JSB TRBYT 
      LDA .3
      LDB .2
      JSB OUTPT 
      CLA 
      STA NBYTE 
      LDA IOBUF 
      STA ADCNT 
RTPRO JMP PROUT,I 
* 
OD    ASC 1,OD
OS    ASC 1,OS
      SKP 
* 
*     EMULATOR #3  --  FLOAT TO ASCII 
* 
EMUL3 LDA .3        ETX 
      STA TERM
      LDA LB
      JSB WRDST 
      LDA .16 
      JSB GB1 
      JSB GLIDE 
      JSB TRBYT 
      JSB NBYTE 
      LDB .2
      JSB OUTPT 
      JMP EML07,I 
LB    ASC 1,LB
* 
*     GLIDE  --  FLOAT TO ASCII CONVERSION
* 
GLIDE NOP 
      JSB FLTAS 
      DEF RTGLD 
      DEF INTX2 
      DEF IOBUF,I 
      DEF NBYTE 
      DEF FXDN      F7.N
      DEF SKPBK 
RTGLD JMP GLIDE,I 
* 
*     EMULATOR #4  --  GET DISPLAY SIZE IN MM 
* 
EMUL4 LDA SIZMM     LENGTH
      LDB DF8 
      JSB GB
      JMP EML07,I 
* 
SIZMM DEF SZMM
* 
*     EMULATOR #5  --  SET P1,P2
* 
EMUL5 LDA .16 
      JSB GB1       GET G1,G2 
      LDA IP
      JSB WRDST 
      JSB FIN 
      JMP EML07,I 
* 
IP    ASC 1,IP
      SKP 
* 
*     EMULATOR #6  --  DEVICE CLEARING CAPABILITY 
* 
EMUL6 LDA DVCLR     NO CLEAR
      LDB DF1 
      JSB GB
      JMP EML07,I 
* 
*     EMULATOR #7  --  DEVICE HARD CLIPPING CAPABILITY
* 
EMUL7 LDA DF1 
      LDB DF1 
      JSB GB
      JMP EML07,I 
* 
*     EMULTOR #8 -- CHARACTER PLACEMENT 
* 
EMUL8 LDA ACINF 
      LDB DF8 
      JSB GB
      JMP EML07,I 
* 
ACINF DEF CINFO 
* 
CINFO DEC 0.00000 
      DEC 0.00000 
      DEC 0.00000 
      DEC 0.00000 
      SKP 
* 
*     ERROR CHECKING
* 
ERRCK JSB EXEC      SELECT DEVICE CLEAR 
      DEF *+3 
      DEF .3
      DEF LUN 
* 
      LDA OE        CLEAR OUT PENDING ERROR 
      JSB WRDST 
      JSB TRBYT 
      LDA NBYTE 
      LDB .2
      JSB OUTPT 
      LDA .40 
      LDB .1
      JSB OUTPT 
      CLA 
      STA NBYTE 
      LDA IOBUF 
      STA ADCNT 
* 
      LDA OI        SEND OUT ID AND SEE IF IT FLIES 
      JSB WRDST 
      JSB TRBYT 
      LDA NBYTE 
      LDB .2
      JSB OUTPT 
      CLA 
      STA NBYTE 
      LDA IOBUF 
      STA ADCNT 
* 
      LDA OE
      JSB WRDST 
      JSB TRBYT 
      LDA NBYTE 
      LDB .2
      JSB OUTPT 
      LDA .40       NOW EXAMINE STATUS WORD 
      LDB .1
      JSB OUTPT 
      LDA .1
      STA LNGTH 
      JSB INTEG     CONVERT TO INTEGER
      LDA INTX1     CHECK BIT 1 
      AND .1
      SZA 
      JMP ERRPT     GOT PROBLEMS
      CLA 
      STA NBYTE     REINITIALIZE BYTE COUNT 
      LDA IOBUF 
      STA ADCNT     REINITIALIZE ADDR CTR TO TOP OF BUFFER
      SKP 
* 
      LDA OI
      JSB WRDST 
      JSB TRBYT 
      LDA NBYTE 
      LDB .2
      JSB OUTPT 
      LDA .40 
      LDB .1
      JSB OUTPT 
      LDA .1
      STA LNGTH 
      JSB INTEG 
      LDA INTX1 
      JMP EML07,I 
ERRPT LDA .3
      JMP EML07,I 
* 
OE    ASC 1,OE
OI    ASC 1,OI
* 
*     GB
* 
GB    NOP 
      STA ADDR      ADDRESS OF DATA 
      STB NUM       NUMBER OF DATA ITEMS
      JSB GCBIM 
      DEF *+6 
GB16  DEF .16 
      DEF .1
ADDR  NOP 
NUM   NOP 
      DEF .2
RTGB  JMP GB,I
* 
*     WRDST  --  STORE A WORD INTO THE IOBUF
* 
WRDST NOP 
      STA ADCNT,I 
      ISZ ADCNT 
      ISZ NBYTE 
      ISZ NBYTE 
RTWRD JMP WRDST,I 
      SKP 
* 
*     CONSTANTS AND TEMPORARY STORAGE 
* 
A     EQU 0 
B     EQU 1 
NBYTE NOP 
LUN   NOP 
IOBUF NOP 
IOBL  NOP 
FXDN  NOP 
FIRST NOP 
INTX1 NOP 
INTX2 NOP 
INTX3 NOP 
INTX4 NOP 
PORGX BSS 2 
PORGY BSS 2 
INTXX BSS 4 
RW    NOP 
IOCNT NOP 
TEMP  BSS 2 
* 
*     DO NOT CHANGE POSITION OF THESE CONSTANTS 
* 
.0    OCT 0 
.1    OCT 1 
.2    OCT 2 
.4    OCT 4 
.26   DEC 26
.16   DEC 16
.32   DEC 32
.3    OCT 3 
SEMCL OCT 73
.137  OCT 137 
.20   DEC 20
.40   DEC 40
.5    OCT 5 
INX1  DEF INTX4 
INX   DEF INTX1 
.7    DEC 7 
TERM  NOP 
DF3   DEF .3
.600  OCT 6000
SZMM  DEC 0.        ORIGIN 0.,0.
      DEC 0.
      DEC 435.      UPPER RIGHT 435.,315. 
.315  DEC 315.
DVCLR DEF .2
DF8   DEF .8
.8    DEC 8 
CHSLT DEF .155
.155  DEC 1.56      89 DEGREES
      DEC -1.56 
.03   OCT 1400
COMA  OCT 54
M7    OCT -7
.177  OCT 177 
GCBCD NOP 
DF4   DEF .4
DF2   DEF .2
DF1   DEF .1
DF0   DEF .0
ADCNT NOP 
IBYTE NOP 
LNTH  NOP 
SKPBK NOP 
M1    OCT -1
.6    DEC 6 
.13   DEC 13
      END 
                                                                                                                                                                        