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:    DVG07 -- 9874A DEVICE SUBROUTINE
*      SOURCE:  92840-18088 
*      RELOC:   92840-16007 
* 
* 
* 
************************************************************* 
* 
      NAM DVG07,7  92840-16007 REV. 1913 790123 
      EXT EXEC,GCBIM,BYTE 
      EXT .IENT 
      EXT FLOAT 
      EXT EMULX 
      EXT INDCK 
      EXT INTX
      EXT DCTIM 
      EXT CONVT 
      EXT LNGTH,GIC,DCTAD 
      EXT GRSTS 
      EXT REIO
      ENT DVG07 
* 
*     THIS IS THE DEVICE SUBROUTINE FOR THE HP 9872A HARD COPY
*     PLOTTER, THE HP 7245A PLOTTER PRINTER, AND THE 9874A
*     DIGITIZER.  THIS ROUTINE ALONG WITH DVR37 CONTROLS THE
*     DEVICES.
* 
DVG07 NOP 
      CLA           INITIALIZE THE READ/WRITE FLAG AND BYTE COUNTER 
      STA RWFLG     COUNTER 
      STA FIN 
      STA NBYTE 
      STA IBYTE 
      LDA SEMCL     SEMICOLON - TERMINATOR
      STA TERM
      JSB DCTIM     FILL UP GIC, LENGTH AND DEVICE COMMAND
      LDA GIC           ADDRESS (DCTAD) 
      SKP 
      CPA .177
      JMP ERRCK 
      JSB SETUP 
CONT  LDA DCTAD     SEE WHAT TYPE OF COMMAND THIS IS
      SSA           EMULATOR? 
      JMP EMULT     YES 
      SZA,RSS       A NOP?
      JMP DVG07,I   DO NOTHING A'TALL AND RETURN
      LDB DCTAD     A COMMAND ADDRESS 
      LDA B,I 
      SSA,RSS       READ OR WRITE?
      JMP CONT0     READ
      ISZ RWFLG     WRITE 
      CMA,INA       SET BYTE COUNT POSITIVE 
CONT0 STA NBYTE 
      AND .1        COMPUTE NWORD = NBYTE/2 + REMAINDER 
      STA NWORD 
      STA ODFLG     = 0 IF EVEN, AND 1 IF ODD 
      LDA NBYTE 
      CLE,ERA       NBYTE/2 
      ADA NWORD 
      CMA,INA 
      STA NWORD 
      INB 
      LDA B,I 
      LDA A,I       TERMINATOR
      STA TERM
      INB 
      LDA B,I 
      STA FIRST     SAVE FIRST WORD OF COMMAND STRING 
      STB DCTAD     NOW POINT TO FIRST WORD OF COMMAND STG
XFER  LDA DCTAD,I   NOW TRANSFER COMMAND STG TO THE I/O BUFF
      STA ADCNT,I 
      ISZ NWORD 
      JMP CONT2 
      JMP XEND      FINISHED
CONT2 ISZ DCTAD 
      ISZ ADCNT     INCREMENT ADDRESS POINTERS
      JMP XFER      CONTINUE
XEND  LDA ODFLG 
      SZA,RSS 
      ISZ ADCNT 
      LDA RWFLG     READ OR WRITE?
      SZA,RSS 
      JMP READ
      LDA LNGTH     WRITE - SEE IF ANY INTS TO CONVERT TO ASC 
      SZA           THIS IS LENGTH FROM GICB
      JMP CNVRT     YES GO CONVERT TO ASCII 
      JSB TRBYT     GO INSERT TERMINATOR
      LDA NBYTE     NUMBER OF BYTES 
      LDB .2        WRITE 
      JSB OUTPT     EXEC I/O
      JMP DVG07,I   GO HOME BABY
      SKP 
* 
* 
* 
*     PROCESS READ REQUEST. FIRST A WRITE MUST BE DONE TO 
*     OUTPUT THE COMMAND CODE, AND THEN A READ MUST BE DONE TO
*     THE DEVICE INTO THE TALK MODE TO GET THE STATUS DATA. 
* 
READ  NOP 
      JSB TRBYT     FIRST INSERT TERMINATOR 
      LDA NBYTE 
      LDB .2
      JSB OUTPT     OUTPUT STATUS REQUEST COMMAND 
      LDA M19       FILL BUFFER WITH BLANKS 
      STA CNTR
      LDA IOBUF 
      STA BACNT 
      SPC 1 
BLOOP LDA BLNK
      STA BACNT,I 
      ISZ BACNT 
      ISZ CNTR
      JMP BLOOP 
      SPC 1 
      LDB .1        NOW PUT DEVICE INTO TALK MODE 
      LDA .40       TO GET DATA 
      JSB OUTPT 
      JSB INTEG     GO CONVERT FROM ASCII TO INTEGER
      JSB GB2       TRANSFER RESULTS TO GICB
      JMP DVG07,I 
      SPC 1 
CNVRT LDA LNGTH 
      INA 
      STA LNTH
      JSB GB1       RETRIVE INTEGER VALUES
      JMP FINI
      SKP 
* 
*     SPECIAL INTERNAL UTILITY ROUTINES 
* 
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 
* 
*     NOW CHECK BIT 4 OF STATUS WORD TO SEE IF A SHORT LABEL WAS
*     PREVIOUSLY EMITTED - IF SO EMIT LABEL TERMINATOR AND RESET BIT 4
* 
      JSB GRSTS 
      DEF *+4 
      DEF .1
      DEF BIT4
      DEF TEMP
      LDA TEMP
      SZA,RSS       BIT SET?
      JMP SETUP,I   NO
      JSB GRSTS     RESET BIT 4 
      DEF *+4 
      DEF .2
      DEF MASK4 
      DEF .0
      CLA 
      STA NBYTE 
      LDA IOBUF 
      STA ADCNT 
      JMP SETUP,I 
* 
*     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 
      CPA OF
      JMP FIXIT 
CONIN ISZ INTAD 
      ISZ LNTH
      JMP INTLP     CONTINUE
      JMP INTEG,I 
FIXIT LDA INTAD,I   CONVERT INTEGER TO FLOATING POINT 
      JSB FLOAT 
      DST INTAD,I 
      ISZ INTAD 
      ISZ LNTH
      JMP CONIN     CONTINUE
      SKP 
* 
*     TAKE VALUES PLACED IN INTX1(1) TO INTX1(LNGTH) AND TRANSFER 
*     THIS DATA TO GICB.
* 
GB2   NOP 
      JSB GCBIM     TRANSFER DATA TO AGL
      DEF RTX 
      DEF .16 
      DEF .1
      DEF INTX1 
      DEF LNGTH 
      DEF .2
RTX   JMP GB2,I 
* 
*     RETRIEVE DATA FROM GICB AND PLACE IT IN INTX1(1) TO INTX1(LNTH) 
* 
GB1   NOP 
      JSB GCBIM     RETRIEVE INTEGER VALUES FROM
      DEF RTGB1     GCB 
      DEF .16       GICB
      DEF .1
      DEF INTX1 
      DEF LNTH
      DEF .1
RTGB1 JMP GB1,I 
* 
*     FINI DOES THE FOLLOWING:
*     1. CONVERTS INTEGERS TO ASCII 
*     2. TRANSFERS THIS ASCII TO THE DEVICE (VIA OUTPT).
*     3. RETURNS TO CALLER
* 
FIN   NOP 
FINI  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 
      LDA FIN 
      SZA,RSS 
      JMP DVG07,I 
      JMP FIN,I 
      SKP 
* 
*     EXIT DVG07 AND SET MODE TO LABEL IF NOT ALREADY SET 
* 
* 
* 
TRBYT NOP           INSERT TERMINATOR INTO OUTPUT BUFFER
      LDA TERM      SEMI-COLON
      JSB PTBYT 
      JMP TRBYT,I 
* 
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 
      JMP PTBYT,I 
* 
* 
UPDTE NOP 
      LDA NBYTE 
      CLE,ERA 
      ADA IOBUF 
      STA ADCNT 
      JMP UPDTE,I 
* 
* 
BITE  NOP 
* 
OUTPT NOP           I/O TRANSFER ROUTINE
      STB RW
      LDB TERM
      CPB .137
      JMP *+2 
      INA 
      CMA,INA 
      STA IOCNT     BYTE COUNTER FOR OUTPUT 
      LDA .137
      JSB PTBYT     SUPRESS CRLF
      JSB REIO
      DEF RTOUT 
      DEF RW
      DEF LUN 
IOB   NOP 
      DEF IOCNT 
RTOUT JMP OUTPT,I 
      SKP 
ERRCK JSB SETUP 
* 
      JSB EXEC      SEE IF THE LU IS INTERACTIVE
      DEF *+6 
      DEF D13I      STATUS REQUEST
      DEF LUN       THE LU WE WANT THE INFO ABOUT 
      DEF YTEMP     EQT WORD 5 PLACED HERE
      DEF DTYPE     EQT WORD 4 PLACED HERE(NOT NEEDED)
      DEF ZTEMP     SUB CHANNEL IN LOWER 5 BIT HERE 
* 
      JMP ITSNT     IT AIN'T EVEN AN LU !!!!
      LDA YTEMP     GET EQT WORD 5
      AND MEQT      KEEP ONLY THE EQT TYPE FIELD
      LDB A         AND SAVE IT 
      LDA ZTEMP     GET THE SUBCHANNEL BITS 
      AND M37 
      STA ZTEMP 
      ADA B         CONFIGURE B REGISTER RETURN WORD
      STA DTYPE 
      CPB M1740     IF DVR 05 THEN
      JMP ERR1      DO ONE MORE CHECK FOR SUB CHANNEL 
ITSNT LDA .5
      JMP ERRPT 
ERR1  JSB EMULX,I   NOW ASK DEVICE COMMAND TABLE ABOUT ITSELF 
      CPA .9874 
      JMP ERR2
      CPA .3
      JMP ERR3      SOMETHING IS VERY WRONG 
      CPA .5
      JMP ERR3
      LDA .3
      JMP ERR3
ERR2  CLA 
ERR3  STA INTX1 
      LDA .1
      STA LNGTH 
      JSB GB2 
      LDA INTX1 
      SZA 
      JMP DVG07,I 
      JSB EXEC      DEVICE CLEAR
      DEF *+3 
      DEF .3
      DEF LUN 
      JMP DVG07,I 
ERRPT LDA .5
      JMP ERR3
      SKP 
.9872 DEC 9872
.7245 DEC 7245
.9874 DEC 9874
.177  OCT 177 
* 
* 
D13I  OCT 100015
M1740 OCT 17400 
M37   OCT 37
MEQT  OCT 37400 
ANLU# NOP 
DTYPE NOP 
YTEMP NOP 
ZTEMP NOP 
* 
* 
EMULT JSB EMULX,I 
      JMP DVG07,I 
A     EQU 0 
B     EQU 1 
NBYTE NOP 
NWORD NOP 
LUN   NOP 
IOBUF NOP 
IOBL  NOP 
FXDN  NOP 
FIRST NOP 
INTX1 NOP 
INTX2 NOP 
INTX3 NOP 
INTX4 NOP 
INTXX BSS 8 
RW    NOP 
IOCNT NOP 
*     DO NO CHANGE POSITION OF THESE CONSTANTS
.0    OCT 0 
.1    OCT 1 
.2    OCT 2 
.4    OCT 4 
.26   DEC 26
.3    OCT 3 
.16   DEC 16
.20   DEC 20
.40   DEC 40
.5    OCT 5 
INX   DEF INTX1 
INX1  DEF INTX4 
.21   DEC 21
.7    DEC 7 
TERM  NOP 
ETX   OCT 1400
BIT4  OCT 20
TEMP  NOP 
MASK4 OCT 77757 
SEMCL OCT 73
DF7   DEF .7
.600  OCT 6000
.137  OCT 137 
ADCNT NOP 
IBYTE NOP 
RWFLG NOP 
ODFLG NOP 
LNTH  NOP 
SKPBK NOP 
OP    ASC 1,OP
OF    ASC 1,OF
M19   DEC -19 
BACNT NOP 
CNTR  NOP 
BLNK  OCT 20040 
      END 
                                                                                                                                                                  