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: DVG01 -- 2648A/ 2647A DEVICE SUBROUTINE * SOURCE: 92840-18083 * RELOC: 92840-16003 * PGMR: MODIFIED BY GSB 8-8-79 * * * ************************************************************* * NAM DVG01,7 92840-16003 REV.2001 790801 EXT EXEC,GCBIM,BYTE EXT EMULX EXT .IENT,FLOAT EXT REIO EXT INDCK EXT INTX EXT DCTIM EXT CONVT EXT FLTAS EXT GRSTS EXT SMLAB EXT PKBIN EXT LNGTH,GIC,DCTAD ENT DVG01 * * THIS IS THE DEVICE SUBROUTINE FOR THE HP 2648A GRAPHICS * TERMINAL. THIS ROUTINE ALONG WITH DVR05 CONTROL THE * PICTURE DRAWING ON THE TERMINAL. * DVG01 NOP CLA INITIALIZE THE READ/WRITE FLAG AND BYTE COUNTER STA FIRST STA BUFLG STA FLTFG FLAG INDICATING FLOAT TO ASCII CONVERSION STA RWFLG COUNTER STA NUM STA NBYTE STA IBYTE STA SKPBK JSB DCTIM FILL UP GIC, LENGTH AND DEVICE COMMAND ADDR.(DCTAD) LDA GIC CPA .177 JMP ERRCK CHECK ON VALIDITY OF LU,ID,ETC LDA DCTAD SEE WHAT TYPE OF COMMAND THIS IS SSA EMULATOR? JMP EMULT YES SZA,RSS A NOP? JMP DVG01,I DO NOTHING A'TALL AND RETURN CONT 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 TERMINATOR SZA NOP? LDA A,I ADDRESS OF TERMINATOR STA TERM INB LDA B,I STA FIRST SAVE FIRST WORD OF COMMAND STRING STB DCTAD NOW POINT TO FIRST WORD OF COMMAND STRING JSB GTGLU CONT3 JSB BUFCK CHECK FOR I/O BUFFERING JSB SETUP XFER LDA DCTAD,I NOW TRANSFER COMMAND STRING TO THE I/O BUFFER 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 JSB IGNOR SEE IF LENGTH ASSOCIATED WITH COMMAND IS TO BE IGNORED LDA LNGTH WRITE - NOW SEE IF ANY INTEGERS TO CONVERT TO ASCII SZA,RSS THIS IS LENGTH FROM GICB JMP XEND1 JSB CNVRT JMP FINI XEND1 LDA NBYTE NUMBER OF BYTES LDB .2 WRITE JSB OUTPT EXEC I/O JMP DVG01,I GO HOME BABY * * SKP SPC 3 * * 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. * * ALL STATUS COMMANDS COME BACK HERE. ALL BUT DEVICE ID ARE CONVERTED * FROM ASCII TO INTEGER. * * THIS CODE MODIFIED BY GSB 8-8-79 READ NOP LDA NBYTE LENGTH OF BUFFER LDB .2 WRITE JSB OUTPT OUTPUT STATUS REQUEST COMMAND LDB .1 NOW PUT DEVICE INTO TALK MODE LDA .40 TO GET DATA JSB OUTPT LDA FIRST **** IF DEVICE ID COMMAND DO NOT CONVERT CPA S1 **** JMP ID **** * LDA LNGTH SET TO CONVERT FROM ASCII TO INTEGER CMA,INA LDB FIRST CPB S3 GET CURSOR POSITION? ADA .1 STA LNTH CLA STA IBYTE LDA INX STA INTAD INTLP JSB INTX BEGIN TO CONVERT DATA DEF RTINT INTIO NOP INPUT BUFFER INTAD NOP VALUE DEF IBYTE BYTE COUNTER RTINT LDA FIRST CPA S5 JMP FIXIT GET PLOT UNITS CPA S7 GET CHAR. SIZE JMP FIXIT CONIN ISZ INTAD ISZ LNTH JMP INTLP CONTINUE JSB GCBIM TRANSFER DATA TO AGL DEF RTX DEF .16 GICB DEF .1 LENGTH OF FIRST PARAMETER ABOVE DEF INTX1 BUFFER TO BE FILLED OR EMPTIED DEF LNGTH LENGTH DEF .2 READ RTX LDA FIRST SEE IF THIS TO GET PLOT UNITS CPA S5 JMP G12CK TAKE CARE OF CASE WHERE GPON(2) CALL JMP DVG01,I * * IF DEVICE ID STATUS COMMAND SIMPLY RETURN AS ASCII * ID LDA INTIO GET ADDRESS OF BUFFER CONTAINING ID STA IDADD JSB GCBIM **** TRANSFER TO GICB DEF RTX2 **** RETURN ADDRESS DEF .16 **** GICB DEF .1 **** REFERENCING ONLY ONE VARIABLE (GICB) IDADD NOP **** ADDRESS OF BUFFER TO BE SENT TO GICB DEF .3 **** LENGTH OF ABOVE BUFFER DEF .2 **** WRITE RTX2 JMP DVG01,I **** ALL DONE! * * CHECK TO SEE IF G1 G2 ALREADY INITIALIZED AND IF SO DO NOT CHANGE * G12CK JSB GCBIM DEF RG12 DEF .8 DEF .1 DEF INTX1 DEF .0 DEF .1 RG12 DLD INTX1 SEE IF G1X = 0 SZA,RSS SZB JMP LVG12 LEAVE IT AS IS DLD INTX1+4 SEE IF G2X =0 SZA,RSS SZB JMP LVG12 JMP DVG01,I LVG12 LDB DF8 SET OLD POINTS INTO GCB LDA INX JSB GB JMP DVG01,I * FIXIT LDA INTAD,I JSB FLOAT DST INTAD,I ISZ INTAD ISZ LNTH JMP CONIN SPC 3 CNVRT NOP LDA LNGTH INA STA LNTH JSB GB1 GO GET INTEGERS RTVRT LDA FLTFG IS THIS A FLOATING POINT SITUATION SZA NO THEN VAMOOSE JMP GLIDE GO GLIDE THE NUMBER INSTEAD OF FLOATING IT LDA FIRST GET FIRST CHR. OF CMD STRING AND DETERMINE AND MASK CHECK FOR A P(PLOT,IPLOT,RPLOT,DRAW,OR MOVE) CPA P JMP PACK GO DO SPECIAL DATA FORMATTING JMP CNVRT,I * PACK ISZ NUM LDA FIRST NOW LOOK AT SECOND CHR. OF CMND STRING TO AND .377 ASCERTAIN TYPE OF PLOT(ABSOLUTE,INCREMENTAL OR CPA I RELOCATABLE). JMP PKB ABSOLUTE * ISZ NUM * CPA J INCREMENTAL * JMP CHECK NOW WE MUST DETERMINE IF ITS SHORT INCREMENTAL * ISZ NUM OR LONG INCREMENTAL ( <-16 OR > +15) * JMP PKB RELOCATABLE *HECK LDA MIN2 SET UP TO EXAMINE X AND Y * STA TEMP * LDB INX POINTER TO INTEGERS *HKLP INB * LDA B,I * SSA,RSS IS IT NEGATIVE? * JMP CHKP NO * ADA .16 * SZA,RSS =0? * JMP CONCK =-16 * SSA <-16 * JMP CHNG * JMP CONCK YES IT IS * *HKP ADA M15 >+15? * SZA,RSS * JMP PKB * SSA,RSS * JMP CHNG *ONCK ISZ TEMP * JMP CHKLP * * GO TO PACKING ROUTINE TO FORMAT X,Y FOR TERMINAL * PKB JSB PKBIN DEF RTPK DEF INTX2 X,Y DEF ADCNT,I I/O BUFFER DEF NBYTE DEF NUM DEF LNGTH RTPK JMP RTCON * *HNG ISZ NUM LONG INCREMENTAL - SO INSERT SMALL K * LDA NBYTE * ADA M1 * STA TEMP * JSB BYTE * DEF RTCHG * DEF TEMP * DEF K LONG INCREMENTAL * DEF FWADR,I *TCHG JMP PKB SKP * * * ERROR CHECKING FOR DEVICE SUBROUTINE = DEVICE COMMAND TABLE * LU = 2648 = DVR05 OR DVR07 * ERRCK JSB GCBIM DEF ERR0 DEF .2 DEF .3 DEF LUN DEF .0 DEF .1 ERR0 JSB SETUP LDA IOBUF STA IOB STA INTIO JSB EMULX,I INTERROGATE DEV. CMD.TABLE CPA .2648 JMP ERR1 OKAY LDA .3 JMP ERRPT REPORT ERROR ERR1 JSB IFTTY DEF *+2 DEF LUN LDA DTYPE CPA M2400 JMP ERR3 CPA M3400 DVR07? JMP ERR3 LDA .5 SOMETHIN SCREWED UP!! JMP ERRPT RR2 LDA S1 INTERROGATE DEVICE FOR ID STA FIRST TO MAKE SURE DEVICE MATCHES STA ADCNT,I ISZ ADCNT ISZ NBYTE ISZ NBYTE LDA Z JSB TRBYT TERMINATOR LDA .1 STA LNGTH JMP READ+1 * EVID LDA INTX1 CPA .2648 JMP ERR3 OKDOKE = COPESETIC CPA .2647 JMP ERR3 LDA .5 JMP ERRPT MESSED UP ERR3 CLA ERRPT STA INTX1 LDA INX LDB DF1 JSB GB JMP DVG01,I SKP SPC 3 * * PROCESS * * SPECIAL INTERNAL UTILITY ROUTINES * TRBYT NOP INSERT TERMINATOR INTO OUTPUT BUFFER STA BITE JSB BYTE DEF RTBYT DEF NBYTE DEF BITE DEF ADCNT,I RTBYT ISZ NBYTE JMP TRBYT,I * BITE NOP * * OUTPT NOP I/O TRANSFER ROUTINE STB RW CMA,INA STA IOCNT LDA LUN STA LUN1 JSB IFTTY FIND OUT WHATS OUT THERE DEF *+2 DEF LUN LDA DTYPE CPA M3400 DVR07 JMP OUT1 YES DO NOT SET BIT 10 (TRANSPARENT MODE FOR DVR05) LDA LUN LDB RW CPB .2 SEE IF READ REQUEST AND IF SO DO NOT SET BIT 10 IOR .200 STA LUN1 OUT1 JSB REIO DEF RTOUT DEF RW DEF LUN1 IOB NOP DEF IOCNT RTOUT JMP OUTPT,I * .36 DEC 36 .38 DEC 38 LUN1 NOP * * * SKP SPC 3 * * MORE SPECIAL ROUTINES INVOKED THROUGHOUT THIS PROGRAM * SETUP NOP LDA ESCST ESC * STA IOBUF,I ISZ NBYTE BUMP BYTE COUNTER ISZ NBYTE LDA IOBUF INCREMENT IOBUF ADDRESS INA STA FWADR SAVE POINTER STA ADCNT JMP SETUP,I * * GET GRAPHICS LUN * GTGLU NOP JSB GCBIM DEF GTL DEF .2 DEF .3 DEF LUN DEF .0 DEF .1 LUN,IOBUF,IOBL GTL LDA IOBUF SET UP IO BUFFER ADDRESS POINTERS JSB INDCK STA IOBUF STA IOB STA INTIO JMP GTGLU,I * * THESE ARE COMMANDS WHERE THE LENGTH SPECIFICATION * ASSOCIATED WITH THE GIC IS IGNORED. * * IGNOR NOP LDA IGCNT STA NUM LDA IGCOD STA TEMP IGLOP LDA TEMP,I CPA FIRST JMP YES ISZ TEMP ISZ NUM JMP IGLOP JMP IGNOR,I YES CLA STA LNGTH IGNORE LENGTH FROM GICB JMP IGNOR,I * IGCNT DEC -3 IGCOD DEF *+1 OCT 66520 SLANT ON OCT 66517 SLANT OFF OCT 62150 CLEAR-IF CALLED FROM GCLR THERE WILL BE A 1 * SKP * * WRITE DATA TO GICB A= ADRRESS FROM WHENCE DATA IS TO COME * B = NUMBER OF WORDS * GB NOP STA ADDR STB NUMB JSB GCBIM DEF *+6 DEF .16 DEF .1 ADDR NOP NUMB NOP DEF .2 JMP GB,I * GB1 NOP JSB GCBIM RETRIEVE INTEGER VALUES TO BE CONVERTED DEF RTGB DEF .16 CODE FOR GICB DEF .1 DEF INTX1 WHERE TO PUT IT DEF LNTH DEF .1 READ IT MAN RTGB JMP GB1,I * * FINI JSB CONVT CONVERT FROM INTEGER TO ASCII DEF RTCON DEF INTX2 FROM HERE DEF IOB,I I/O BUFFER ADDRESS DEF NBYTE CURRENT NUMBER OF BYTES DEF LNGTH HOW MANY INTEGERS RTCON LDA NBYTE COMPUTE POINTER INTO I/O BUFFER CLE,ERA CALCULATE NBYTE/2 ADA IOBUF STA ADCNT ADDRESS POINTER LDA BUFLG I/O BUFFERING? SZA JMP BF3 YES LDA TERM JSB TRBYT INSERT TERMINATOR LDA NBYTE LDB .2 JSB OUTPT JMP DVG01,I * * * * ROUTINE TO DETERMINE IF THE SPECIFIED LU IS INTERACTIVE * CALLED AS FOLLOWS: * * IFLAG = IFTTY(LU) JSB IFTTY * DEF *+2 * DEF LU * * * * * IFTTY NOP ENTRY DLD IFTTY,I GET RETURN ADDRESS & LU# LDB B,I GET THE LU # STA IFTTY SAVE RETURN ADDRESS STB ANLU# AND LU # * JSB EXEC SEE IF THE LU IS INTERACTIVE DEF *+6 DEF D13I STATUS REQUEST DEF ANLU# 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 STA DTYPE JMP IFTTY,I ITSNT CLA SET NON INTERACTIVE FLAG JMP IFTTY,I * * D13I OCT 100015 M2400 OCT 2400 M37 OCT 37 M3400 OCT 3400 MEQT OCT 37400 ANLU# NOP DTYPE NOP YTEMP NOP ZTEMP NOP SKP SPC 3 * * EMULATORS * EMULT STA TEMP JSB GTGLU JSB BUFCK LDA TEMP CMA,INA STA B CLA STA NBYTE LDA EM0 FWA OF EMULATOR POINTERS JSB INDCK ADA B LDA A,I JMP A,I EMUL1 LDA SMLAB ESC*L JSB INDCK STA DCTAD FAKE OUT ISZ FLTFG JMP CONT * * CONVERT THE NUMBER FROM FLOAT(GLIDE) TO ASCII * GLIDE JSB FLTAS DEF RTGLD DEF INTX2 DEF IOBUF,I DEF NBYTE DEF FXDN DEF SKPBK RTGLD JSB UPDTE LDA CR CARRAIGE RETURN JSB TRBYT JSB UPDTE LDA LF LINE FEED JSB TRBYT LDA NBYTE LDB .2 JSB OUTPT JMP DVG01,I * * GET NUMBER OF PENS * EMUL2 LDA DF6 LDB DF1 JSB GB TRANSFER TO GICB JMP DVG01,I * * LINE TYPES * EMUL4 JSB SETUP LDA .4 STA LNTH JSB GB1 PICK UP GICB AND DATA- LINE TYPE AND LENGTH LDA M2 PUT DEVICE INTO DRAWING MODE STA ADCNT,I ISZ ADCNT ISZ NBYTE ISZ NBYTE LDA LB SMALL B JSB TRBYT LDA LT POINTER TO LINE TYPES JSB INDCK ADA INTX2 ADDR(LT) + LT# LDA A,I STA INTX2 DLD INTX2+1 LENGTH FDV D8 CALCULATE SCALE = LENGTH/8MUS JSB .IENT INTEGERIZE NOP LDB .1 SZA,RSS CHECK FOR 0 STB A STA INTX2+1 LDA .2 STA LNGTH LDA C TERMINATOR STA TERM JMP FINI * * LABEL DIRECTION - GICB LOOKS LIKE ( GIC/L),(ANGLE) * THE ANGLE IS IN FLOATING POINT. THE IDEA HERE IS TO * CONVERT THE ANGLE INTO: * * 1 (0 DEGREES) IF ANGLE IS BETWEEN 315 DEG AND 45 DEG * 2 (90 DEGREES) " " " " 45 " " 135 " * 3 (180 DEGREES) " " " " 135 " " 225 " * 4 (270 " ) " " " " 225 " " 360 " * * EMUL5 JSB SETUP LDA .3 STA LNTH JSB GB1 GET GICB LDA M MAKE IOBUF = ESC*LITTLE "M" JSB TRBYT CLA,INA LDIR = 1 STA LDIR DLD INTX2 NOW SEE IF THETA = 0 DEGREES SZA JMP EML51 SZB,RSS JMP EM5FN IT 0 EML51 LDA DEGPT POINTER TO ANGLE CONSTANTS IN RADIANS(DEG/57.3) STA TEMP EM5LP DLD TEMP,I FSB INTX2 C(DEGPT) - ANGLE SSA,RSS JMP EM5FN ANGLE < C(DEGPT) ISZ TEMP ANGLE > C(DEGPT) ISZ TEMP ISZ LDIR LDA LDIR CHECK FOR 360 CPA .5 JMP *+2 JMP EM5LP CLA,INA STA LDIR EM5FN LDA LDIR STA INTX2 LDA .1 STA LNGTH SET UP FOR CONVERSION TO ASCII LDA BIGN STA TERM JMP FINI * * NECESSARY CONSTANTS * LDIR NOP BIGN OCT 116 DEGPT DEF *+1 DEC .785 45 DEGREES DEC 2.355 135 DEG DEC 3.925 225 DEG DEC 5.455 315 DEG DEC 6.28 360 DEG * SPC 3 * * CHARACTER SIZE * EMUL6 JSB SETUP LDA .5 STA LNTH JSB GB1 GET GICB AND DATA LDA M JSB TRBYT DLD INTX2+2 FDV D10 COMPUTE SIZE = HEIGHT/10MUS JSB .IENT INTEGERIZE NOP LDB .1 SZA,RSS CHECK FOR 0 STB A STA INTX2 STB LNGTH LDA BIGM STA TERM JMP FINI * * GET DISPLAY SURFACE SIZE IN MILLIMETERS * EMUL9 LDA MMSIZ LDB DF8 8 WORDS JSB GB GO PUT IN GICB JMP DVG01,I * MMSIZ DEF *+1 DEC 0. DEC 0. DEC 239.6 LENGTH DEC 120. WIDTH * * DEFAULT LINE TYPE * EML10 JSB SETUP LDA MODE2 SET MODE STA ADCNT,I ISZ ADCNT LDA ATERM TERMINATOR A STA ADCNT,I LDA .5 LDB .2 JSB OUTPT LDA .2 STA LNTH JSB GB1 GET THE CONTENTS OF GICB LDA DFLT ADDRESS TO TOL FOR LINE TYPE NUMBERS JSB INDCK ADA INTX2 NUMBER FROM AGL LDA A,I GET 2648 EQUIVALENCE STA INTX2 LDA INX TRANSFER DATA BACK TO GICB LDB DF4 JSB GB LDA LNTYP FAKE OUT STA DCTAD JMP CONT GO PROCESS * * GET MU/MM * EML11 LDA DFD3 LDB DF4 JSB GB JMP DVG01,I * * FLUSH I/O BUFFER * EML12 JMP DVG01,I * * DEVICE CLEARING CHARACTERISTICS (TRUE CLEAR BIT 4=1) * EML13 LDA DF4 LDB DF1 JSB GB JMP DVG01,I * * NUMBER OF PHYSICALLY DIFFERENT PENS * EML14 LDA DF1 ONE PEN LDB DF1 JSB GB JMP DVG01,I * * NUMBER OF CURSORS * EML15 JMP EML14 * * LORGABILITY * EML16 JMP EML14 * *MAXIMUM CHARACTER SLANT * EML17 LDA DSLNT LDB DF4 JSB GB JMP DVG01,I * * DEVICE HARD CLIPPING CAPABILITY * EML18 LDA DF0 LDB DF1 JSB GB JMP DVG01,I * SPC 2 * SPC 2 * * MIN/MAX CHARACTER SIZES * EML19 LDA MMCSZ LDB DF9 JSB GB JMP DVG01,I * * LABEL DIRECTION CAPABILITY * EML20 LDA LBLDR LDB DF3 JSB GB JMP DVG01,I * * DEVICE ID (REPLACED BY A CALL TO OUTPUT IDENTIFY IE. * THIS INFO RETRIEVED DIRECTLY FROM TERMINAL. THIS CHANGE * MADE SO DRIVER COULD BE USED FOR 2648/2647) * *EML21 LDA ID26 * LDB DF3 * JSB GB * JMP DVG01,I * *ID26 DEF *+1 * ASC 3,2648A * JMP DVG01,I * * LORG RANGE * EML22 LDA DFL1 LDB DF2 JSB GB JMP DVG01,I * DFL1 DEF *+1 OCT 1 DEC 9 * * CHARACTER PLACEMENT * EML23 LDA ACINF LDB DF8 JSB GB JMP DVG01,I * ACINF DEF CINFO * CINFO DEC 0.00000 DEC 0.71429 DEC 0.00000 DEC 0.70000 SKP *CONSTANTS * * LINE TYPE EQUIVALENCY TABLE * DFLT DEF *+1 OCT 1 OCT 7 OCT 6 OCT 5 OCT 4 DEC 11 DEC 10 * * LINE TYPE COMMAND * LNTYP DEF *+1 DEC -1 DEF BB OCT 66400 "M BB OCT 102 * *POINTERS CONSTANTS ETC FOR EMULATORS * EM0 DEF * DEF EMUL1 DEF EMUL2 NOP DEF EMUL4 DEF EMUL5 DEF EMUL6 NOP NOP DEF EMUL9 DEF EML10 DEF EML11 DEF EML12 DEF EML13 DEF EML14 DEF EML15 DEF EML16 DEF EML17 DEF EML18 DEF EML19 DEF EML20 NOP DEVICE ID (REPLACED BY ENTRY IN DCT) DEF EML22 DEF EML23 * *LINE TYPES * LT DEF *+1 LT0 DEC 255 SOLID JACK!! LT1 DEC 170 DIMLY LIT LT2 DEC 224 DASHED LT3 DEC 254 LONG DASH LT4 DEC 235 CENTERLINE LT5 DEC 129 DOTS LT6 DEC 234 OPTIONAL C OCT 103 M OCT 155 D8 DEC 8.0 D10 DEC 10.0 BIGM OCT 115 LB OCT 142 "B M2 OCT 66462 "M2 LBLDR DEF *+1 OCT 1 DEC 1.57 * MMCSZ DEF *+1 DEC 7. DEC 10. DEC 56. DEC 80. OCT 0 * DF9 DEF .9 DF3 DEF .3 * SKP SPC 3 * * THIS PORTION OF THE DRIVER IS RESPONSIBLE FOR BUFFERING * PLOT COMMANDS (ESC*PX) SO THAT THE 2648A WILL OPERATE AT * ITS NORMAL VECTOR DRAWING SPEED. * BUFCK NOP JSB GRSTS CHECK STATUS TO SEE IF BUFFERING IS IN EFFECT DEF BFRTN DEF .1 GET STATUS DEF .1000 BIT 9 DEF BFTMP BFRTN LDA BFTMP SZA,RSS I/O BUFFERING? JMP BUFCK,I NO LDA LNGTH ALS STA BTEMP LDA DF1 JSB GB2 RETRIEVE CURRENT BUFFER LENGTH LDA RWFLG 0= READ,1= WRITE,3=EMULATOR CPA .1 JMP BF1 JMP EMPCK GO EMPTY BUFFER BF1 LDA FIRST SEE IF A PLOT COMMAND AND MASK CPA P JMP BF2 YES CONTINUE JMP EMPCK MODE CHANGE BF2 LDA GIC SEE IF "HOME PEN" CPA .5 JMP BUFCK,I YES GET OUT ISZ BUFLG SET FLAG TO INDICATE BUFFERING IN PROGRESS BF20 LDB BUFLN SEE IF CURRENT BUFFER LENGTH + NEW STUFF>IOBL STB NBYTE JSB UPDTE SZB IF ZERO STARTING A NEW STRING JMP BF2A JSB SETUP SET ESC* INTO I/O BUFFER LDA LP JSB TRBYT PREAMBLE PLOT COMMAND JSB UPDTE LDB NBYTE BF2A ADB .4 FOR GOOD MEASURE ADB BTEMP CLE,ERB CMB,INB ADB IOBL SSB JMP EMPCK FILLED TO THE TOP LDA FIRST EXTRACT SECOND BYTE OF PLOT COMMAND AND .377 IOR .32 INSURE LOWER CASE ASCII JSB TRBYT GO STORE IN IOBUF JSB UPDTE LDA LNGTH ANY INTEGERS TO CONVERT TO ASCII SZA,RSS JMP BF3 NO JSB CNVRT BF3 LDA NBYTE UPDATE BUFFER LENGTH STA BUFLN LDA DF2 JSB GB2 JMP DVG01,I * EMPCK LDB BUFLN SZB,RSS ANYTHING IN BUFFER JMP BUFCK,I NO-SO FORGET IT. LDA NBYTE STA BFTMP SAVE BYTE COUNT FOR NEW COMMAND. STB NBYTE JSB UPDTE LDA Z JSB TRBYT LDA NBYTE LDB .2 JSB OUTPT CLA STA BUFLN LDA BFTMP STA NBYTE LDA DF2 JSB GB2 LDA BUFLG SZA,RSS JMP BUFCK,I JMP BF20 * * RETRIEVE AND RESTORE CURRENT BUFFER BYTE COUNT * GB2 NOP STA GBRW JSB GCBIM DEF *+6 DEF .32 DEF .1 DEF BUFLN DEF .0 GBRW NOP JMP GB2,I * UPDTE NOP LDA NBYTE CLE,ERA ADA IOBUF STA ADCNT STA FWADR JMP UPDTE,I SKP SPC 3 * * CONSTANTS AND TEMPORARY STORAGE * A EQU 0 B EQU 1 NBYTE NOP TEMP NOP NWORD NOP BTEMP NOP LUN NOP IOBUF NOP IOBL NOP FXDN NOP FIRST NOP FWADR NOP INTX1 NOP INTX2 BSS 3 XMU NOP INTXX BSS 11 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 .200 OCT 2000 .77 OCT 77 .25 DEC 25 BFLSH OCT 2300 .1000 OCT 1000 S5 OCT 71465 S7 OCT 71467 S3 OCT 71463 .40 DEC 40 INX DEF INTX1 TERM NOP .377 OCT 377 .5 OCT 5 NUM NOP M16 DEC -16 M15 DEC -15 MASK OCT 177400 Z OCT 132 P OCT 70000 LP OCT 160 ESCST OCT 15452 ESC* I OCT 151 J OCT 152 ADCNT NOP IBYTE NOP RWFLG NOP ODFLG NOP LNTH NOP DF1 DEF .1 DF4 DEF .4 DF6 DEF .6 .6 OCT 6 .9 DEC 9 .137 OCT 137 S1 OCT 71461 CR OCT 15 LF OCT 12 DF2 DEF .2 .32 DEC 32 BUFLN NOP BFTMP NOP BUFLG NOP DFD3 DEF D3 D3 DEC 3. DEC 3. M1 OCT -1 MIN2 OCT -2 SKPBK NOP FLTFG NOP M4 OCT -4 K OCT 153 SMALL K DSLNT DEF .45DG .45DG DEC .785 DEC 0. DF0 DEF .0 DF8 DEF .8 .8 DEC 8 MODE2 OCT 66462 ATERM OCT 60400 .177 OCT 177 .2648 DEC 2648 .2647 DEC 2647 END