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