ASMB,R,F,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: DVG05 -- 7221A/B/S DEVICE SUBROUTINE * * SOURCE: 92840-18092 * * RELOC: 92840-16011 * * * * * * * *************************************************************** * NAM DVG05,7 92840-16011 REV.1940 790726 EXT EXEC,GCBIM EXT EMULX EXT FLTAS EXT REIO EXT INTX EXT .IENT EXT GRSTS EXT DCTIM EXT LNGTH,GIC,DCTAD ENT DVG05 * * THIS IS THE DEVICE SUBROUTINE FOR THE HP 7221 GRAPHICS * PLOTTER. THIS ROUTINE ALONG WITH DVR05 CONTROL THE PICTURE * DRAWING ON THE PLOTTER. * * DVG05 NOP CLA INITIALIZE THE VARIOUS FLAGS STA RWFLG STA FGMBA FLAG MULTIPLE BYTE ANGLE 0=NOT FROM MBA 1=YES STA MBAOF FLAG TO SET BIT 16 OF MBN 0=NO SET 1=YES SET JSB DCTIM GET GIC LNGTH,DCTAD * * THIS IS WHERE WE NEED TO CHECK IF GIC = 177 IF SO * NEED TO DO A LOT OF INTITIALIZING * JSB BUFCK NEED TO CHECK IF BUFFERING IS IN EFFECT LDA GIC CHECK FOR INTIAL COMMAND CPA B177 IS IT THE FIRST ONE JMP INIT YES, CHECK THE SIGNON AND THEN EXIT FROM DRIVER LDA .1 READ REQUEST JSB GB32 GO AND READ THE GLOBALS JSB GBLUN GET THE LUN, BUFFER ADDRESS, AND BUFFER LENGTH LDA LPLCM CHECK TO SEE IF PREVIOUS COMMAND WAS LABELING CPA .N2 WAS IT LABELING?? JMP *+2 YES, PROCEED TO OUTPUT A ETX TO TURN OFF LABELING JMP CONTB NO, CONTINUE ON NORMALLY LDA .ETX POINTER TO ETX STA IOB LDA .8 NUMBER OF BYTES LDB .2 WRITE IT OUT JSB OUTPT LDA .N1 NEED TO RESET THE POINTER STA LPLCM FOR LAST PLOTTER COMMAND NON-DRAW CONTB LDA BUFFG NEED TO CHECK IF BUFFERING IS IN EFFECT SZA JMP CONTA YES, BUFFERING THUS WE DO NOT NEED TO PUB ESC.( IN CLA STA CBFCT CLEAR THE COMPUTER BUFFER FLAG LDA ESC. LOAD THE FWA OF THE ESC.( SEQUENCE LDB .3 THERE ARE THREE BYTES JSB TRANS STORE INTO THE BUFFER CONTA LDA DCTAD START CHECKING FOR TYPE OF COMMAND STRING SSA EMULATOR? JMP EMULT YES SZA,RSS A NOP? JMP EXIT1 YES, A NOP SO UPDATE GLOBAL AND EXIT CONT LDB DCTAD ACTUAL COMMAND ADDRESS LDA B,I READ LENGHT OF STRING SSA,RSS READ OR WRITE? JMP CONT0 READ,SET RWFLG=0 ISZ RWFLG WRITE,SET RWFLG=+1 CMA,INA SET BYTE COUNTER POSITVE CONT0 STA NBYTE STORE POSITIVE BYTE COUNTER LDA B INB LDA B,I LOAD THE INFORMATION TYPE STA TYPE LDA RWFLG SZA READ? JMP CONT1 NO, CONTINUE INB YES,NEED TO GET THE NEXT WORD LDA B,I YES, NEED TO LOAD THE INSTRUCTION TYPE FOR READS STA INTYP THIS IS THE LETTER OF THE REAL TIME COMMAND CONT1 INB GET FIRST WORD OF COMMAND STRING STB DCTAD NOW DCTAD POINTS TO THE FIRST COMMAND STRING STB CMDAD STORE AWAY THE COMMAND STRING ADDRESS LDA TYPE IS TYPE=0 SZA,RSS JMP LITRT YES, GO TO LITERAL RETURN TO COMPUTER LDA CMDAD LOAD THE STARTING ADDRESS OF TRANSFER LDB NBYTE NUMBER OF BYTES TO TRANSFER CPB B340 NULL LENGTH COMMAND STRING JMP *+2 YES, DON'T TRANSFER ANYTHING JSB TRANS TRANSFER THE DATA LDA RWFLG SZA,RSS IS IT A READ CONT2 JSB RITE YES, TRANSMIT THE BUFFER CONT3 LDA RWFLG SZA,RSS IS IT A READ REQUEST JSB RDCHK YES, GO OFF AND READ THE INPUT LDA .N1 LAST COMMAND FLAG LDB TYPE SSB IS THERE ANY THING SPECIAL TO DO JMP EXIT NO, GO HOME SKP SPC 3 * * * SPECIAL MODE LDA .SPEC LOAD THE FWA OF THE SPECIAL CASES ADA B LOAD WHAT WAS IN TYPE TO FWA TO GET INDEX PROPERLY LDB A,I NEED TO LOAD THE POINTER TO THE ROUTINE JMP B,I GO TO THE PROPER ROUTINE NOW * * * * RESET SPECIAL #1 * RDVAR IS FILLED WITH * GX1,GY1,GX2,GY2 RESPECTIVELY * * NOW WE NEED TO LOAD ~W INTO THE BUFFER * * RESET LDA .RSET INSERT THE DEFAULTS (TILDE,UNDERSCORE) INIT LDB .4 4 BYTES LONG (TILDE,W) SET GRAPHIC LIMITS JSB TRANS TRANSFER THE DATA * * NOW PUT IN THE PARAMETERS FOR GRAPH LIMITS * LDA RWD1 CONVERT GX1,GY1 LDB RWD2 TO MBP STA GX1MU STORE GX1 LOWER LEFT AWAY STB GY1MU STORE GY1 AWAY JSB MBP LDA RWD3 CONVERT GX2,GY2 LDB RWD4 TO MBP STA GX2MU STORE GX2 UPPER RIGHT AWAY STA GY2MU STORE GY2 AWAY JSB MBP * LDA .RSET GET FWA OF THE RESET PREAMBLES ADA .2 GET THE TILDE,S FOR SCALING LDB .2 TWO BYTES LONG JSB TRANS GO AND PUT IT IN THE BUFFER * * LDA RWD1 A=GX2-GX1 CMA,INA ADA RWD3 SSA NEED ABSOLUTE VALUE OF (GX2-GX1) CMA,INA LDB RWD2 B=GY2-GY1 CMB,INB ADB RWD4 SSB NEED ABSOLUTE VALUE (GY2-GY1) CMB,INB JSB MBP CONVERT TO MBP LDA .RSET GET FWA OF THE RESET PREAMBLES ADA .3 LOOK FOR THE RESET/CHARACTER SIZE LDB .5 IT IS 5 BYTES LONG JSB TRANS GO AND PUT IT IN THE BUFFER LDA .N1 LOAD THE LAST PLOTTER COMMAND TO NON-DRAW JMP EXIT * * * NUMBER 8 * RESET P1,P2 * * GX1,GY1,GX2,GY2 IN RDVAR *NEED TO SEND BACK GX3-GX1, GY4-GY2 * AND UPDATE ~S UPDATE GLOBALS * * GTG12 LDA .RSET GET FWA OF THE ~S PREAMBLE ADA .2 MOVE POINTER TO THE ~S PART LDB .2 G1,G2 SCALLING JSB TRANS PUT (0,GX2-GX1 IN ADDR) LDA RWD1 LOAD THE GX1 LOWER LEFT COORDINATE STA GX1MU STORE IN GLOBAL VARIABLE FLT DST INTX1 PUT IT AWAY TO SEND BACK TO THE COMPUTER LDA RWD2 LOAD THE GY1 LOWER LEFT COORDINATE STA GY1MU GLOBAL FLT DST INTX3 PUT IN BUFFER LDA RWD3 LOAD THE GX2 UPPER RIGHT COORDINATE STA GX2MU GLOBAL FLT DST INTX5 PUT IN BUFFER LDA RWD4 LOAD THE GY2 UPPER RIGHT COORDINATE STA GY2MU GLOBAL FLT DST INTX7 PUT IN BUFFER LDA .RDBF THE BUFFER THE FLT PT NUMBERS ARE LDB .8 8 WORDS TO RETURN JSB GBRET LDB RWD2 B=GY2-GY1 CMB,INB ADB RWD4 SSB RWD4=ABS(GY2-GY1) CMB,INB LDA RWD1 A=GX2-GX1 CMA,INA ADA RWD3 SSA RWD3=ABS(GX2-GX1) CMA,INA JSB MBP PUT THE SCALING DATA AWAY LDA .N1 LAST PLOTTER COMMAND IS A NON-DRAW JMP EXIT RETURN SPC 3 * * * * NUMBER 10 AND 11 * * OUTPUT CURRENT PEN POSITION IN PU * * X,Y PEN STATUS IN RDVAR * * RWD1=X POSITION IN MACHINE UNITS * RWD2=Y POSITION IN MACHINE UNITS * RWD3=PEN STATUS 0=UP;1=DOWN * * OUTCP LDB .3 NUMBER OF RETURN PARAMETERS LDA RDVAR FWA OF THE DATA JSB GBRET STORE IT IN THE GCBIM LDA .N1 ASSUME THEY SHOULD START OVER FOR LAST PLOT CMD JMP EXIT * * * * NUMBER 12 DIGITIZE * OUTPUT THE DIGITIZED PEN POSITION IN MU. * NEED TO CONVERT PU TO MU * SEND BACK THE RWD1=X POSITION IN MU. * RWD2=Y POSITION IN MU. * RWD3=PEN STATUS 0=UP 1=DOWN * * DIGIT LDA GX1MU LOAD THE GRAPHIC LIMIT X VALUE ADA RWD1 A = GX1MU + CURRENT X POSITION STA RWD1 * CONVERT THE MU LDA GY1MU VALUE TO PU BY OFFSETTING LL AMOUNT ADA RWD2 B = GX2MU + CURRENT Y POSITION STA RWD2 PUT THE Y PLOTTER UNIT VALUE AWAY LDA RDVAR GET THE FWA OF THE BUFFER TO BE TRANSFERED LDB .3 THREE LONG JSB GBRET SEND IT BACK TO THE GICB LDA .N1 ASSUME SHOULD START FOR LAST PLOTTER COMMAND JMP EXIT RETURN * * * * * NUMBER 15 * SET CHARACTER SLANT ON * NEED TO CONVERT TO MBA * * SLANT LDA .16 NEED TO GET THE SLANT ANGLE PARAMETER FROM GCBIM LDB .3 THERE ARE THREE WORDS TO GET JSB GBGET GET IT DLD SLANG LOAD IN 90 DEGREES IN RADIANS FSB INTX2 7221 SLANT = 90 DEGREES - AGL SLANT ANGLE JSB MBA LDA .N1 LAST PLOTTER COMMAND IS NOT-DRAW JMP EXIT * * NUMBER 17 * * CONVERT X,Y PARAMETER IN GCBIM TO MBP * FLOATING POINT PARAMETERS * MBPOT LDA .16 GET THE FLOATING POINT PARAMETERS LDB .5 THERE ARE FIVE WORDS JSB GBGET DLD INTX4 LOAD THE Y PORTION OF MBP JSB .IENT INTEGERIZE THE FLOATING POINT NUMBER NOP STA INTX1 STORE INTEGER VALUE AWAY DLD INTX2 LOAD THE Y PROTION OF MBP JSB .IENT INTEGERIZE THE FLOATING POINT NUMBER NOP LDB INTX1 JSB MBP CONVERT THE DATA LDA .N1 LAST PLOTTER COMMAND IS A NON-DRAW JMP EXIT RETURN * * * NUMBER 24 * * CONVERT X,Y PARAMETER IN GICBM MBP * * THIS IS THE INTEGER FORMAT * * MBPBN LDA .16 GET THE PARAMETERS FROM THE GIC LDB .3 THERE ARE TWO INTEGER FORMAT NUMBERS + THE HEADER JSB GBGET LDA INTX2 GET THE X VALUE LDB INTX3 GET THE Y VALUE JSB MBP CONVERT THE DATA TO MBP FORMAT LDA .N1 LAST PLOTTER COMMND IS A NON-DRAW JMP EXIT RETURN * * * * NUMBER 28 * SELECT PEN (1-N) * * SLPEN LDA .16 SELECT PEN (); GET THE DATA FROM GIC LDB .2 THERE IS THE HEADER AND THE PEN NUMBER JSB GBGET LDA INTX2 LOAD THE PEN NUMBER JSB SBN CONVERT TO BINARY SYNTAX LDA .N1 LAST PLOTTER COMMAND IS A NON-DRAW JMP EXIT RETURN * * * * NUMBER 31 AND 32 * * ENTER RWD1 = LINETYPE * NEED TO FIND OUT IF * LNGHT=1 IMPLIES DEFAULT LENGTH * LNGTH=2 IMPLIES SPECIFIED LENGTH * * DASHL LDA .16 GET PARAMETERS FROM GIC LDB .4 THERE ARE 4 WORDS HEADER,LINETYPE,FL PT LENGTH JSB GBGET LDB INTX2 LOAD THE LINE TYPE NUMBER IN ADB .LNTP ADD TO INDEX OF LINETYPES LDA B,I LOAD THE POINTER TO # OF BYTES LDB A,I NOW LOAD THE NUMBER OF BYTES IN INA INCREMENT OVER THE 1ST WORD OF INSTRUCTION STRING JSB TRANS GO AND TRANSMIT IT * * NOW CHECK FOR LINE TYPE * LDA INTX2 LOAD THE LINE TYPE AGAIN CPA .5 IS THE LINETYPE (DOTS AT END POINTS) JMP DASH0 YES, THE LENGTH IS ENCODED AREADY IN THE STRING CPA .0 IS THE LINE TYPE (SOLID LINES) JMP DASH0 YES, THE LENGTH IS NOT SENT OUT CPA .1 IS THE LINETYPE (DIME LINES) JMP DASH0 YES, THE LENGTH IS NOT SENT OUT LDA .460 LOAD THE DEFAULT LENGTH LDB GIC LOAD THE TYPE OF COMMAND CPB .31 IS A DASHLINE WITH DEFULT LENGTH JMP DASH1 YES, USE .460 AS THE DEFAULT LENGTH DLD INTX3 LOAD THE FLOATING POINT NUMBER IN A/B JSB .IENT INTEGERIZE NOP DASH1 JSB MBN CONVERT DATA DASH0 LDA .N1 LAST PLOTTER COMMAND IS A NON-DRAW JMP EXIT RETURN * * * * NUMBER 43 * POSITION CURSOR ABSOLUE WITH PEN UP * PEN = CURSOR ON THIS PLOTTER, THUS WE ONLY NEED TO * USE REGULAR MOVE; THIS ACTUAL USES THE MBPBN ROUTINE * * * MVCUR LDA .16 GET THE PARAMETERS FROM THE GIC LDB .3 THERE ARE TWO INTEGER FORMATS NUMBER +HEADER JSB GBGET LDA GX1MU LOAD THE OFFSET CMA,INA A = X PU - X OFFSET ADA INTX2 LDB GY1MU LOAD THE Y OFFSET CMB,INB B = Y PU - Y OFFSET ADB INTX3 JSB MBP CONVER THE DATA TO MBP FORMAT LDA .N1 LAST PLOTTER COMMAND IS A NON-DRAW JMP EXIT RETURN * * * * * * NUMBER 45 * USED TO SET THE GRAPHIC LIMITS G1 AND G2 * THE PARAMETERS ARE INTEGER FROM THE GIC * * * SG1G2 LDA .16 SET G1 AND G2; GET THE PARAMETERS LDB .5 FIVE WORDS INCLUDING HEADER JSB GBGET LDA INTX2 GET GX1 LDB INTX3 GET GY1 STA GX1MU STORE GLOBAL GX1 AWAY STB GY1MU STORE GLOBAL GY2 LOWER LEFT AWAY JSB MBP GO CONVERT THE LOWER LEFT HAND CORNER LDA INTX4 GET GX2 LDB INTX5 GET GY2 STA GX2MU STORE GLOBAL GX2 UPPER RIGHT AWAY STB GY2MU STORE GLOBAL GY2 JSB MBP GO CONVERT THE UPPER RIGHT HAND CORNER LDA .RSET NEED TO LOAD THE GRIDDING FACTOR ADA .2 THIS IS A TILDE,S INSTRUCTION LDB .2 THERE ARE TWO BYTES JSB TRANS LDA INTX2 NEED TO CALCULATE THE GRID RANGE CMA,INA A = ABS( GX2 - GX1) ADA INTX4 SSA MAKE SURE ITS A POSITIVE RANGE CMA,INA LDB INTX3 NEED TO CALCULATE THE Y COMPONENT CMB,INB B = ABS( GY2 - GY1) ADB INTX5 SSB MAKE SURE ITS A POSITIVE RANGE CMB,INB JSB MBP LDA .N1 LAST PLOTTER COMMAND IS A NON-DRAW JMP EXIT SKP SPC 3 * * A = EMULATOR # COMES IN AS A NEGATIVE NUMBER * * THIS IS USED TO FIND THE CORRECT EMULATOR TO EXECUTE * * EMULT CMA,INA THIS IS THE EMULATOR SECTION LDB EM0 FWA OF EMULATOR POINTERS ADA B NOW INDEX TO THE PROPER PLACE LDB A,I NEED TO LOAD THE POINTER TO THE ROUTINE JMP B,I JUMP TO THE PROPER ROUTINE SPC 3 * * * NUMBER 3 * PAGE FEED * * A PAGE FEED COMMAND WILL BE GIVEN HERE THE 7221. IF THE * PLOTTER IS A 7221A OR 7221B THE PLOTTER WILL GIVE AN ERROR. * (THE 7221S WITH CHART ADVANCE PAPER WILL GIVE A PAGE FEED). * THE ERROR STATE WILL BE READ TO CLEAR THE ERROR CONDITION. * * PAGEF LDA .MCMD LOAD ADR OF COMMAND STRING (PG) LDB .3 TRANSFER NUMBER OF BYTES IN COMMAND(+TERM) JSB TRANS AND SEND IT * * SINCE THE 7221A WILL GIVE AN ERROR WITH A PAGE FEED COMMAND * AN OUTPUT ERROR WAS SENT TO CLEAR THE ERROR AT THE END OF * THE LAST COMMAND STRING. NOW WE MUST READ FROM THE PLOTTER * TO CLEAR THE BUS. * JSB RITE WRITE OUT BUFFER * JSB RWAIT WAIT UNTIL BUFFER IS EMPTY * LDA .MOE LOAD ADR OF MY OUTPUT ERROR CMD STA IOB STORE IT. LDA .7 SEND ( ESC.(ESC.E LDB .2 WRITE OUT CMMD JSB OUTPT DO THE DEVICE WRITE * LDA .RDBF START OF READ IO AREA STA IOB * LDA .40 MAX OF 40 BYTES TO READ LDB .1 READ BACK ERROR NUM ETC JSB OUTPT PERFORM READ * JMP HOME ALL DONE WITH PAGE FEED SEND THE PEN HOME * * * * * NUMBER 4 * TRANSMIT I/O BUFFER * * ONLY NEED TO EMPTY THE BUFFER IF IT HAS ANYTHING * * XMIT JSB RITE GO AND EMPTY THE COMPUTER BUFFER LDA .N1 ASSUME SHOULD START FOR LAST PLOTTER COMMAND JMP EXIT * * * * * NUMBER 5 * HOME PEN * * GET THE UPPER RIGHT HARD CLIP REGION * * HOME LDA .P LOAD SMALL P IN BUFFER LDB .1 1 BYTE LONG JSB TRANS LDA GX1MU NEED TO CALCULATE THE RANGE CMA,INA A=ABS(GX2-GX1) ADA GX2MU SSA CMA,INA LDB GY1MU NEED TO CALUCLATE Y RANGE CMB,INB B=ABS(GY2-GY1) ADB GY2MU SSB CMB,INB JSB MBP CONVERT IT LDA .1 LAST PLOTTER COMMAND WAS A MOVE + PARAMETER JMP EXIT RETURN * * * NUMBER 5 * GET CHARACTER SPACING/WIDTH * * NEED TO GET OLD VALUE * * GTCHR JSB GCBIM CALL GCBIM(7,1,(),4,1) DEF *+6 DEF .7 GET CHARACTER SPACING HEIGHT/WIDTH DEF .1 DEF INTX1 PUT INTO BUFFER LOCATION DEF .4 NEED TWO FLOATING POINT NUMBERS DEF .1 READ * * NOW CHECK FOR DEFAULTS * DLD INTX1 WIDTH SZA,RSS IS WIDTH = 0 SZB JMP EML1 NOT EQUAL 0, THUS USE GICB VALUES. DLD INTX3 CHECK THE HEIGHT SZA,RSS IS THE HEIGHT = 0 SZB JMP EML1 # = 0 THUS USE THESE VALUES DLD CHRW THUS WIDTH AND HEIGHT = 0 IMPLY DEFAULTS DST INTX1 STORE THE DEFAULT WIDTH DLD CHRH DST INTX3 STORE THE DEFAULT WIDTH EML1 LDA .RDBF LOCATION OF BUFFER LDB .4 FOUR ITEMS TO BE TRANSFERRED JSB GBRET TRANSFER TO GICB LDA .N1 ASSUME SHOULD START OVER FOR LAST PLOTTER CMD JMP EXIT RETURN CHRW DEC 125. CHARACTER WIDTH CHRH DEC 250. CHARACTER HEIGHT SPC 3 * * * * NUMBER 35 * PLOT ABSOLUTE * * CPENS = 0 IMPLIES UP * 1 IMPLIES DOWN * * LPLCM = -1 IMPLIES NON-MOVE OR NON-DRAW COMMAND * 1 IMPLIES DRAW AND MOVE WITH PARAMETERS * PLABS LDB CPENS PLOAT ABSOLUTE, LOAD COMPUTER PEN STATUS 0=UP,1=DN LDA BUFFG BUFFER FLAG 0=NO BUFFERING 1 = YES BUFFERING SZA,RSS IS THERE BUFFERING JMP PLAB3 NO,THUS WE NEED TO PUT IN THE MOVE OR DRAW IN CPB LPLCM YES, CHECK FOR REDUNDENT DRAWS, PEN AND LAST CMD = JMP PLAB2 YES, JUST NEED TO CONVERT DATA TO MBP FORM PLAB3 LDA .P NO, NEED TO INSERT P/Q SZB IS IT A DRAW OR A MOVE?? LDA .Q YES, USE DRAW LDB .1 1 BYTE LONG JSB TRANS INSERT COMMAND PLAB2 LDB LNGTH LOAD THE NUMBER OF PARAMETERS IN WORDS INB NEED TO ADD ONE FOR THE HEADER INFORMATION LDA .16 JSB GBGET GO AND GET THE PASSED PARAMETERS LDA .RDBF NEED TO SET-UP THE INDEX POINTER INA MOVE ONE PAST THE HEADER INFORMATION STA PLTCT PLOT ABSOLUTE POINTER LDB LNGTH NOW SET UP THE LOOP CONTROL COUNTER CMB,INB STB LNTH LENTH OF THE LOOP COUNTER PLAB1 LDA GX1MU NEED TO CALCULATE THE P.U. FROM M.U. CMA,INA X MU = X PU - X OFFSET(GX1) ADA PLTCT,I ISZ PLTCT MOVE POINTER TO THE LDB GY1MU NEED TO CALCULATE PU FROM MU CMB,INB Y MU = Y PU - Y OFFSET(GY1) ADB PLTCT,I ISZ PLTCT SET TO THE NEXT COORDINATE PAIR JSB MBP GO AND CONVERT LDA LNTH CHECK TO SEE IF WE HAVE ANY MORE PARAMETERS ADA .2 NOTE THIS IS A DO UNTIL STRUCTURE AND THUS STA LNTH ASSUME WE SHOULD GO THROUGH AT LEAST ONCE SSA ARE YES DONE?? JMP PLAB1 NO, DO THE NEXT PAIR LDA .1 YES, LOAD DRAW AS THE LAST PLOTTER COMMAND JMP EXIT RETURN SPC 3 * * * * NUMBER 38 AND 39 * SHORT AND LONG LABEL * * * * LABEL JSB CKANG LABEL MODE AND NEED TO CHECK THE PLOTTER ANGLE JSB RITE GO AND OUTPUT THE CURRENT BUFFER LDA .N2 LAST PLOTTER COMMAND IS A LABEL ON MODE STA LPLCM WILL BE USED AS FLAG IN READ NOT TO TURN OFF PLOTTER JSB RWAIT GO AND WAIT UNTIL THE PLOTTER BUFFER IS EMPTY LDA .LLAB IT IS A LONG LABEL STA IOB STORE AWAY FWA FOR OUTPUT LDA .5 NUMBER OF BYTES TO OUTPUT LDB .2 WRITE JSB OUTPT WRITE IT OUT TO THE PLOTTER INHIBIT CR/LF LDA .0 SINCE WE DON'T KNOW HOW MUCH THE USER WILL PUT INTO STA PBFLN PLOTTER BUFFER ASSUME THERE IS NO SPACE JMP EXIT1 BY PASS THE OUTPUT OF EXIT * * * NEED TO LOOK AT THIS ALOT MORE * * NUMBER 42 * FLOAT ASCII * * CONVT JSB CKANG NEED TO CHECK THE PLOTTER ANGLE JSB RITE NEED TO FLUSH OUT THE COMPUTER BUFFER SO WE CAN * GUARANTEE THE ASCII LABEL WILL BE SENT CONTINOUS. LDA .LLAB CONVERT FLOATING POINT TO ASCII LDB .5 JSB TRANS TRANFER SHORT LABEL OVER LDA .16 NEED TO GET THE FLOATING POINT NUMBER LDB .3 1 WORD FOR HEADER + 2 WORDS FOR FLT PT NUMBER JSB GBGET GET NUMBER DLD INTX2 GET THE NUMBER AND PUT INTO THE SMALLER BUFFER DST RWD1 THIS WILL ALLOW FLOAT TO ASCII ROUTINE MORE SPACE LDA .0 LOAD THE BYTE COUNTER STA TEMP USE A TEMPORARY VARIABLE CAUTION JSB FLTAS FLOAT TO ASCII ROUTINE DEF RTFL RETURN POINT DEF RWD1 THE NUMBER TO BE CONVERTED (FROM BUFFER) DEF INTX1 THE CONVERTED ASCII NUMBER (TO BUFFER) DEF TEMP THE NUMBER OF BYTES DEF FXDN THE FLOATING POINT FRACTION REPRESENTATION DEF SKPBK USE FOR FUTURE ENHANCEMENTS RTFL LDA .RDBF POINTER TO THE ASCII NUMBER BUFFER LDB TEMP THE NUMBER OF BYTES TO TRANSFER JSB TRANS LDA DFETX POINTER TO THE B1400 WHICH IS A ETX. LDB .1 NEED ONLY ONE BYTE, THIS IS A TERMINATOR JSB TRANS FOR THE SHORT LABEL MODE LDA .N1 JMP EXIT * * CHARACTER PLACEMENT * CPLMT LDA ACINF LDB .8 JSB GBRET LDA .N1 JMP EXIT * ACINF DEF CINFO * CINFO DEC 0.00000 DEC 0.66667 DEC 0.00000 DEC 0.50000 * * * * CKANG NOP CHECK ANGLE OF PLOTTER COMPARED TO LABEL LDA .22 GET THE LABEL ANGLE LDB .2 TWO WORDS LONG; REPRESENTS A FLT PT NUMBER JSB GBGET LDA INTX1 GET THE ANGLE OF ROTATION CPA PANG1 DOES LABEL ANGLE = PLOTTER ANGLE JMP *+2 YES THE FIRST PART DOES GO CHECK 2 WORD JMP SLAN0 NO, GO AND SEND THE ANGLE TO THE PLOTTER LDB INTX2 GO AND CHECK THE SECOND WORD OF FLT PT # CPB PANG2 ARE THE TWO ANGLES EQUAL JMP CKAN1 YES, AND SKIP OUTPUTTING THE ANGLE TO PLOTTER SLAN0 LDA .WW WRITE OUT "WW"; SEND LABEL ANGLE LDB .2 TWO BYTE LONG JSB TRANS LOAD PRE-AMBLE DLD INTX1 LOAD AND CONVERT JSB MBA CONVERT TO MULTIBYTE ANGLE DLD INTX1 UPDATE GLOBAL DST PANG1 PLOTTER ANGLE CKAN1 JMP CKANG,I RETURN SPC 3 * * * NUMBER 2 * USED TO DEFAULT LL AND UR * * DFG12 LDA .520 NEED TO UPDATE THE GLOBALS STA GX1MU X LOWER LEFT LDA .1572 ACTUALLY LOADING IN 15720 STA GX2MU X UPPER RIGHT LDA .380 STA GY1MU Y LOWER LEFT LDA .1038 ACTUALLY LOADING IN 10380 STA GY2MU Y UPPER RIGHT LDA .N1 LAST PLOTTER COMMAND WAS NOT A DRAW JMP EXIT RETURN * * * * NUMBER 33 * PEN UP ROUTINE * NEED ONLY TO STORE THE GLOBAL AWAW * CPENS COMPUTER PEN STATUS 0=UP 1=DOWN PENUP CLA SET CPENS=0 IMPLES PEN UP STA CPENS LDA .0 MEANS THE LAST WAS A PEN-UP COMMAND JMP EXIT GO AND UPDATE THE GLOBALS * * * * NUMBER 34 * PEN DOWN ROUTINE * NEED TO ONLY SOTRE THE GLOBALS AWAY * CPENS COMPUTER PEN STATUS 0=UP 1=DOWN * PENDN LDA BUFFG CHECK TO SEE IF WE ARE BUFFERING SZA,RSS IF SO NEED TO CHECK PEN STATUS JMP PEND1 NO, SO GO AHEAD AND INSERT THE LOWER CASE Q LDA LPLCM YES, CHECK THE LAST PLOTTER COMMAND CPA .1 WAS IT A DRAW?? JMP PEND2 YES, DON'T OUTPUT THE LOWER CASE Q PEND1 LDA .Q POINTER TO THE LOWER CASE Q LDB .1 ONE BYTE LONG JSB TRANS OUTPUT IT TO THE BUFFER PEND2 LDA .1 LAST PLOTTER COMMAND STA CPENS COMPUTER PEN STATUS GLOBAL JMP EXIT FINISH IT UP SKP SPC 3 * * SPC 3 * * * * * ENTER A=FWA OF DATA TO INPUT * B=NUMBER OF BYTES * * CBFCT = EXACT NUMBER OF BYTES * CURRENTLY IN THE BUFFER * RANGE 0 TO N RANGE. * * * TRANS NOP TRANSFER THE ENTER BUFFER IN A TO IOBUFFER STB BYTES STORE THE NUMBER OF BYTES TO BE TRANSFERRED SZB,RSS ARE THERE ANY BYTES TO BE TRANSFERRED JMP TRANS,I NO, GO BACK STA TEMP7 STORE AWAY THE FWA POINTER JSB CBFCK CHECK THE BUFFER SPACE LDB TEMP7 GET THE FWA POINTER LDA CBFCT GET THE COMPUTER BUFFER COUNT ARS SHIFT THE NUMBER OF BYTES TO NUMBER OF WORDS TO ADA CBFAD THIS POINTS TO FIRST ENTRY STA TEMP9 PTR TO 1ST WORD WITH AVAILABLE SPACE LDA CBFCT IS THERE ODD NUMBER OF BYTES SLA IN THE IO BUFFER?? JMP TRAN3 YES, ODD NUMBER OF BYTES LDA BYTES SET UP THE LOOP COUNTER INA ROUND UP THE THE NEAREST WHOLE INTEGER ARS CMA,INA NEGATE THE LOOP COUNTER STA TLOOP TRAN2 LDA B,I NO, EVEN NUMBER OF BYTES THUS ITS EASY STA TEMP9,I STORE AWAY IN THE IO BUFFER INB INCREMENT THE FROM BUFFER AREA ISZ TEMP9 INCREMENT THE TO BUFFER AREA POINTER ISZ TLOOP ARE WE DONE? JMP TRAN2 NO, GO THRU AGAIN JMP TRAN6 YES, GO AND UPDATE THE GLOBALS TRAN3 LDA BYTES SET UP THE LOOP COUNTER CMA,INA NEGATE THE LOOP COUNTER STA TLOOP TRAN4 LDA B,I LOAD THE WORD FROM BUFFER ALF,ALF NEED THE HIGH BYTE AND LOBYT MASK OFF THE BYTE STA TEMP8 STORE HIBYTE INTO LOW BYTE OF TEMP8 LDA TEMP9,I GET THE TO BUFFER WORD AND MASK OFF HIGH BYTE AND HIBYT IOR TEMP8 STORE HIBYTE INTO LOW BYTE STA TEMP9,I STORE AWAY THE FIRST HALF OF FROM BUFFER WORD ISZ TEMP9 INCREMENT THE TO BUFFER POINTER ISZ TLOOP INDEX LOOP COUNTER JMP *+2 CONTINUE THE LOOP JMP TRAN6 DONE LDA B,I LOAD THE SECOND BYTE UP ALF,ALF MOVE THE HIGH BYTE TO LOW BYTE AND HIBYT GET THE HIGH BYTE STA TEMP9,I STORE AWAY THE HIGH BYTE;WITH LOW BYTE CLEAR INB MOVE TO THE NEXT WORD ISZ TLOOP ARE WE DONE? JMP TRAN4 NO GO THRU THE LOOP AGAIN TRAN6 LDA CBFCT UPDATE THE GLOBAL ADA BYTES STA CBFCT JMP TRANS,I RETURN SPC 3 * * * SPC 3 * * INTIALIZING ROUTINE * THIS IS DONE EVERYTIME THE SYSTEM DOES A RESET * WE NEED TO INIT THE VARIOUS GLOBAL VARIABLES * * * INIT CLA NEED TO INITIALIZE THE GLOBAL FOR DRIVER PACKAGE STA CBFCT UPDATE GLOBALS; COMPUTER BUFFER COUNT STA PANG1 PLOTTER ANGLE FOR CHAR/RELATIVE MOVES STA PANG2 SECOND PART OF THE FLOATING PT. ANGLE STA CPENS COMPUTER PEN STATUS STA GX1MU LOWER LEFT GRAPHIC LIMITS STA GX2MU UPPER RIGHT GRAPHIC LIMITS STA GY1MU LOWER LEFT STA GY2MU UPPER RIGHT LDA .38 NEED TO ASSUME THERE IS SOME SPACE INTIALLY STA PBFLN PLOTTER BUFFER LENGTH LDA .N1 LAST PLOTTER COMMAND IS A NON-DRAW STA LPLCM JSB GBLUN LDA ESC. LOAD THE FWA OF THE ESC.( SEQUENCE LDB .3 THREE BYTES TO TRANSFER JSB TRANS TRANSFER THE ESC SEQ TO THE COMPUTER BUFFER LDA .HAND NEED TO LOAD THE HANDSHAKING STUFF LDB .19 THERE ARE 19 BYTES JSB TRANS GO AND TRANSFER IT JSB EMULX,I INTERROGATE DEVICE COMMAND TABLE CPA .7221 RIGHT COMMAND TABLE?? JMP INIT3 YES, GO AND CHECK PROPER I/O DRIVER LDA .3 NO, REPORT ERROR JMP INIT5 INIT3 JSB IFTTY GO AND CHECK IF DVR05 DEF *+2 DEF LUN LDA DTYPE CPA B2400 IS IT DVR05? JMP INIT4 YES, EVERTHING IS OK LDA .5 NO, REPORT ERROR JMP INIT5 INIT4 CLA EVERYTHING IS OK RETURN A ZERO INIT5 STA INTX1 PUT THE RETURN VARIABLE IN BUFFER LDA .RDBF POINTER TO READ BUFFER LDB .1 ONE PARAMETER TO RETURN JSB GBRET RETURN SUBROUTINE LDA .N1 LOAD THE LAST PLOTTER COMMAND MEANS NON-DRAW JMP EXIT EXIT ROUTINE * * IFTTY NOP ENTRY POINT TO GET DRIVER NUMBER DLD IFTTY,I GET RETURN ADDRESS AND LUN STA IFTTY STORE THE RETURN ADDRESS LDA B,I GET THE LOGICAL UNIT NUMBER AND B77 MASK OFF THE TRANSPARENT BIT STA ANLU# SAVE LUN NUMBER 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 BITS HERE * JMP ITSNT ERROR NOT VALID LUN NUMBER, SEND BACK ZERO LDA YTEMP GET EQT WORD 5 AND MEQT KEEP ONLY THE EQT TYPE FIELD STA DTYPE JMP IFTTY,I GO BACK ITSNT CLA SET NON-INTERACTIVE FLAG JMP IFTTY,I GO BACK * * D13I OCT 100015 EXEC #13., AND ERROR CHECK INVOKED .7221 DEC 7221 NAME OF PLOTTER B2400 OCT 2400 MASK FOR PROPER DRIVER NUMBER (5) MEQT OCT 37400 MASK OFF THE DRIVER NUMBER ANLU# NOP LUN NUMBER TO FIND INFO ABOUT DTYPE NOP TEMPORARY VARABLE YTEMP NOP ZTEMP NOP SPC 3 * * EXIT ROUTINE CHECK NEED TO STORE THE LAST PLOTTER CO * AND CHECK THE BUFFG BUFFER FLAG FOR RITE OR NOT * ALSO UPDATE THE GLOBAL VARIABLES IN GICB * * * A = NUMBER FOR LAST COMMAND * 0 = DRAW * 1 = MOVE * -1 = OTHER COMMANDS * * * CHECK FOR EXIT OUT OF THE ROUTINES EXIT STA LPLCM STORE LAST PLOTTER COMMAND LDA GIC XMIT GIC IF SO WE NEED TO FORCE A LOWER CASE CPA .4 Z IN THERE TO TERMINATE THE TOTAL SEQUENCE JMP EXITA PUT THE TERMINATOR IN AND SEND IT OFF LDA BUFFG BUFFER FLAG 0=NO BUFFERING; 1=YES BUFFERING SZA IS THERE BUFFERING JMP EXIT1 YES, DO NOT TRANSMIT THE BUFFER LDA CBFCT LOAD THE COMPUTER BUFFER COUNT CPA .3 CHECK TO SEE IF IT IS AN EMPTY BUFFER JMP EXIT1 YES, IT IS DON'T WRITE ANYTHING OUT EXITA LDA .Z NO, PUT IN TERMINATOR AND TRANSMIT THE BUFFER LDB .1 ONLY ONE LONG JSB TRANS TRANSMIT IT LDA .N1 NEED TO PUT IN NON-DRAW/NON-MOVE STA LPLCM PUT IT AWAW EXIT0 JSB RITE GO AND TRANSMIT THE COMPUTER BUFFER EXIT1 LDA .2 WRITE JSB GB32 UPDATE THE GLOBALS JMP DVG05,I RETURN, AND LET'S GO HOME SPC 3 * * * * * SPC 3 * * * RETURN VALUE IN BUFFER FLAG * BUFFG 0 = NO, BUFFERING * 1 = YES, BUFFERING * * THIS ROUTINE WILL GO AND GET THE BUFFERING STATUS * BUFCK NOP SEE IF BUFFERING IS IN EFFECT JSB GRSTS CHECK TO SEE IF BUFFERING DEF BUFRT IS IN EFFECT DEF .1 GET STATUS DEF B1000 GET BIT 9;BUFFERING STATUS BIT DEF BUFFG RETURN VALUE; 0 =NO; 1=YES; I/O BUFFERING BUFRT JMP BUFCK,I * * * * * * * IS USED TO CHECK FOR COMPUTER BUFFER FULL * * ENTER WITH B = NUMBER OF BYTES TO ADD TO COMPUTER BUFFER * CBFCK NOP CHECK FOR COMPUTER BUFFER FULL ADB .3 B=TOTAL OF COMPUTER BUFFER SPACE NEEDED ADB CBFCT 3 IS ADDED TO END FOR THE ESC . ) SEQUENCE CMB,INB ADD COMPUTER BUFFER COUNT ADB CBFLN B=CBFLN-(CBFCT+ADDITIONAL DATA) SSB IS THERE GOING TO BE ANY OVERFLOW JSB RITE YES; NEED TO OUTPUT THE DATA TO PLOTTER JMP CBFCK,I NO, RETURN * * * * * * * * * * * SPC 3 * * RITE NOP OUTPUT THE COMPUTER BUFFER TO THE PLOTTER LDA .3 NEED TO CHECK FOR AN EMPTY BUFFER CPA CBFCT THERE ARE ALWAYS AT LEAST THREE IN BUFFER JMP RITE,I RETURN JSB CKPSI NEED TO CHECK PLOTTER BUFFER SIZE JSB TRBYT NEED TO ADD TERMINATOR TO END;UPDATE CBFCT LDA CBFAD COMPUTER BUFFER ADDRESS STA IOB LOCATION OF BUFFER TO OUTPUT LDA CBFCT NUMBER OF BYTES LDB .2 WRITE JSB OUTPT LDA CBFCT UPDATE PLOTTER BUFFER LENGTH CMA,INA ADA PBFLN PBFLN=PBFLN-CBFCT STA PBFLN JSB GBLUN GET THE ACTUAL COMPUTER BUFFER ADDRESS LDA CBFAD LDB ESC.1 NEED TO INSERT THE ESC.( SEQUENCE IN I/O BUF STB A,I INA LDB ESC.2 STB A,I LDA .3 THIS IS THE STARTING COMPUTER BUFFER COUNT STA CBFCT RESET THE COMPUTER BUFFER COUNTER JMP RITE,I GO BACK * * * WANT TO MAKE THIS TRANSPARENT TO THE REST OF THE * SYSTEM ,WHICH WILL ENABLE THE ENQ/ACK HANDSHAKE * TO WORK BY TAKING THIS OUT. * * IS THRE ROOM IN THE PLOTTER * * CKPSI NOP CHECK PLOTTER SIZE CKPS LDA CBFCT CMA,INA COMPUTER BUFFER COUNT ADA PBFLN A=PLOTTER BUFFER LENGTH - COMPUTER BUFFER COUNTER SSA,RSS IS THERE ROOM IN THE PLOTTER JMP CKPSI,I YES, GO BACK * NO, NEED TO OUTPUT AS MUCH AS WE CAN, LESS ONE THEN * WE UPDATE THE PTR'S AND COUNTER AND LET THE CALLING * ROUTINE FINISH THE LAST WRITE TO THE DEVICE.. * * * NEED TO FIX THE NEXT ROUTINE UP HAVE A PROBLEM OF OUTPUTING * PARTIAL DATA ARRAY AMOUNT. * ALSO NEED TO UPDATE THE GLOBALS PBFLN,CBFCT,CBFAD * CKPS0 LDA PBFLN CKECK TO SEE IF WE NEED MORE ROOM IN PLOTTER CKPS2 ADA .N20 MAKE SURE THERE AT LEAST 20 BYTES AVAILABLE SSA,RSS IS THERE ANY ROOM JMP *+3 YES, OUTPUT IT JSB RDBFL NO, READ NEW BUFFER AVAILABLE LENGTH JMP CKPS NEED TO GO AND COMPARE AGAINST COMPUTER BUFFER LENGTH LDA CBFAD LOAD THE COMPUTER BUFFER LOCATION STA IOB THIS WILL BE USED AS OUTPUT POINTER LDA PBFLN NOW CHECK AMOUNT OF ROOM IN PLOTTER BUFFER ARS ROUND TO THE NEAREST WORD STA TEMP2 PLOTTER BUFFER LENGHT ROUNDED DOWN TO NEAREST WORD ADA CBFAD STORE AWAY THE TWO WORDS THAT WILL BE * PLACED REPLACED WITH THE ESC.) SEQUENCE LDB A,I STB OUT1 LDB TERM STB A,I PUT THE ESC.) SEQUENCE AT THE END INA LDB A,I STB OUT2 NOW WE HAVE PUT IT IN OUT1,OUT2 LDB TERM1 REST OF THE ESC.) SEQUENCE STB A,I LDA TEMP2 ALS CONVERT TO # OF BYTES FROM # OF WORDS ADA .4 A = NUMBER OF BYTES TO TRANSMIT LDB .2 WRITE JSB OUTPT OUTPUT THE DATA CLB NOW UP DATE THE PLOTTER BUFFER LENGTH STB PBFLN ALWAYS ASSUME THERE IS NO SPACE LEFT * IN REALITY IT SHOULD BE A ONE OR ZERO;TAKE WORSE CA LDA TEMP2 UPDATE THE GLOBALS ALS CONVERT TO NUMBER OF BYTES CMA,INA ADA CBFCT CBFCT = CBFCT - AMOUNT OF DATA SENT ADA .4 ROOM FOR THE PREAMBLE REMEMBER THERE IS A NULL THERE STA CBFCT NEEDED TO UPDATE THE COMPUTER BUFFER COUNT LDA TEMP2 ADA CBFAD THE START OF THE SEQUENCE ADA .N2 NEED TO ADD ESC.( SEQUENCE BACK IN BEGINNING STA CBFAD UPDATE COMPUTER BUFFER ADDRESS(LOCATION) LDB .N4 LOOP COUNTER STB TEMP2 LDB TBUF FWA OF THE ESC.( OUT1 OUT2 SEQUENCE BUFFER STB TEMP3 CKPS1 LDB TEMP3,I STORE THE PREAMBLE & RESTORE THE REPLACED DATA STB A,I ISZ TEMP3 INA ISZ TEMP2 JMP CKPS1 GO AND DO ANOTHER LOOP JMP CKPS WE ARE DONE GO BACK * * * VARIABLES FOR THIS ROUTINE * * TBUF DEF ESC FWA OF THE ESC.( OUT1 OUT2 BUFFFER ESC OCT 33 ESCAPE CHARACTER (NULL,ESC) .LP OCT 027050 DOT LEFT PARAN (PERIOD,LEFT PARENTHESIS) OUT1 NOP TEMPORARY STORAGE OUT2 NOP TEMPORARY STORAGE TEMP2 NOP TEMPORARY STORAGE .ASKB DEF ASKB THE POINTER TO THE ESC.(ESC.B SEQUENCE ASKB OCT 15456 ESC . OCT 24033 ( ESC OCT 027102 . B * * * * * BE NICE IF THERE WAS A PAUSE HERE TO ALLOW TIME * FOR THE PLOTTER TO MUNCH ON DATA BEFORE ANOTHER IO * RDBFL NOP READ THE PLOTTER BUFFER SIZE ESC . B SEQUENCE LDA .ASKB POINTER TO THE ESC . B SEQUENCE STA IOB LOCATION OF THE BUFFER ESC.(ESC.B SEQUENCE LDA .1 NUMBER OF PARAMETERS TO CONVERT STA LEN THERE ARE ONE PARAMETER ON A BUFFER SIZE REQUEST JSB READ GO AND READ THE BUFFER SIZE LDA RWD1 LOAD THE NUMBER OF BYTES AVAILABLE IN THE BUFFER ADA .N40 NEED TO SUBSTRACT THE PREBUFFER IN 7221 STA PBFLN PLOTTER BUFFER LENGHT JMP RDBFL,I RETURN * * SKP SPC 3 * * READ THE GLOBAL VARIABLES * * GCBIM(32,1,(),?,1) * READ = 1 * WRITE = 2 * * GB32 NOP GCBIM(32,1,(),?,1) STA RW READ WRITE FLAG JSB GCBIM DEF *+6 DEF .32 GET GCBIM GLOBAL DATA DEF .1 ONE ITEM DEF CBFCT LOCATION OF BUFFER DEF .10 NUMBER OF ITEMS DEF RW READ/WRITE FLAG JMP GB32,I * * * * GET IOBUF ADDRESS PTR AND IOBL BLOCK LENGTH * GCBIM(2,1,(),2,1) * * * GBLUN NOP GET IOBUF ADDR, IOBL LENGTH, LUN JSB GCBIM DEF GBLRT DEF .2 NOTE WE ARE GOING TO READ ITEMS 2,4,26 DEF .3 NOTE THAT WE ARE GOING TO READ 3 GICBM ITEMS DEF LUN NOTE THAT LUN,CBFAD,CBFLN,FXDN MUST BE IN SEQUENCE DEF .0 TAKE THE DEFAULT FOR THE 3 ITEMS DEF .1 READ GBLRT LDA LUN ESTABLISH TRANSPARENT MODE IN DVR05 IOR B2000 SET BIT-10 FOR TRANSPARENT MODE IN DVR05 STA LUN LDA CBFLN LOAD THE COMPUTER BUFFER LENGHT ADA .N1 REDUCE THE SIZE BY ONE WORD ALS CONVERT WORDS TO BYTES STA CBFLN NOW BUFFER LENGTH IS IN BYTES JMP GBLUN,I RETURN * * * * ENTER A = GICBM # TO READ * B = NUMBER OF PARAMETERS * EXIT DATA IN INTX1 BUFFER * * * GBGET NOP GET DATA FROM THE GIC STA NUMB THE NUMBER OF GICB TO READ STB SIZE THE NUMBER OF PARAMETERS TO BE TRANSFERRED JSB GCBIM CALL GCBIM(NUMB,1,INTX1,2,SIZE) DEF *+6 DEF NUMB THE NUMBER OF GICB TO READ DEF .1 GET ONE SET DEF INTX1 LOCATION OF BUFFER DEF SIZE NUMBER OF PARAMETERS DEF .1 READ ONLY JMP GBGET,I * * GBRET NOP GRAPHIC CONTROL BLOCK RETURN STA ADDR A IS WHERE THE DATA IS AT STB NUMB B IS NUMBER OF WORDS TO SEND JSB GCBIM GCBIM(16,1,ADDR,NUMB,2) DEF *+6 DEF .16 DEF .1 ADDR NOP LOCATION OF THE BUFFER DEF NUMB NUMBER OF PARAMETERS DEF .2 WRITE JMP GBRET,I * ADD THE TERMINATOR TO THEN END * * TRBYT NOP NEED TO ADD TERMINATOR TO THE END LDB CBFCT LOAD THE COMPUTER BUFFER COUNT BRS SHIFT OVER TO MAKE IT WORDS ADB CBFAD WORD ADDRESS OF THE FIRST AVAILABLE BYTE STB TEMP9 LDA CBFCT SLA IS THE HOLE ON THE MSB OR LSBYTE OF THE AVAIL WORD JMP TRBY1 ITS ON THE LSBYTE OF THE WORD LDB TERM LOAD THE ESC PERIOD SEQUENCE IN DIRECTLY STB TEMP9,I STORE IT AWAY IN THE BUFFER ISZ TEMP9 MOVE UP THE POINTERS BY ONE LDB TERM1 LOAD THE RIGHT ) IN STB TEMP9,I PUT THE RIGHT ) IN JMP TRBY2 NOW UPDATE THE COUNTER TRBY1 LDA TEMP9,I LOAD THE LAST WORD OF THE CURRENT BUFFER AND HIBYT CLEAR OUT THE LOWER BYTE IOR B33 INSERT THE ESC CHARACTER STA TEMP9,I STORE IT AWAY ISZ TEMP9 INCREMENT THE POINTER LDA TERM2 LOAD THE PERIOD LEFT ) STA TEMP9,I UPDATE THE BUFFER ISZ TEMP9 MAKE ROOM FOR THE BACK SPACE CHARACTER LDA TERM3 LOAD THE CONTROL H IN STA TEMP9,I STORE IT TRBY2 LDA CBFCT NOW UPDATE THE COMPUTER BUFFER COUNTER ADA .4 WE PUT IN FOUR MORE (ESC, . , ), CONTROL H ) STA CBFCT JMP TRBYT,I WE ARE DONE AND RETURN * * OUTPUTS THE BUFFER WITH A NUMBER OF BYTES * ENTER WITH A= BYTE COUNT * B= READ = 1; WRITE = 2 * IOB= PTR TO THE START OF THE BUFFER TRANSFER AREA * LUN= LOGICAL UNIT NUMBER * * * OUTPT NOP CMA,INA STA IOCNT NEGATIVE VALUE OF BYTE COUNT STB RW READ/WRITE FLAG;1=READ;2=WRITE CPB .2 IS IT A WRITE REQUEST JMP OUTST YES, THUS DO NOT DELETE TRANSPARENT MODE LDA LUN NO, NEED TO MAKE NON-TRANSPARENT MODE AND B77 JUST MASK OFF THE LOGICAL UNIT NUMBER STA LUN OUTST JSB REIO READ/WRITE REIO ROUTINE DEF RTOUT RETURN ADDRESS DEF RW READ/WRITE FLAG DEF LUN LOGICAL UNIT NUMBER IOB NOP BUFFER LOCATION DEF IOCNT HOW MANY? RTOUT LDA LUN PUT TRANPARENT BIT BACK ON, IF ON DOESN'T MATTER IOR B2000 SET BIT-10 SO WHAT IF WE DO THIS UNNECCESARLY STA LUN IT TAKES CODE THE SAME AMOUNT OF CODE THE OTHERWAY JMP OUTPT,I RETURN SKP SPC 3 * * THIS IS USED TO SEE WHAT KIND OF READ IS NEEDED * * RDCHK NOP READ CHECK JSB RITE OUTPUT THE COMPUTER BUFFER LDA INTYP SSA,RSS ARE WE SUPPOSE TO WAIT? JSB RWAIT YES, GO AND WAIT UNTIL THE BUFFER IS EMPTY * * NOW PERFOR IN THE ACTUAL REQUEST * RCONT LDB INTYP GET THE PROPER COMMAND SSB NEED THE ABOLUTE VALUE OF TYPE CMB,INB ADB ESCTB INDEX TO THE PROPER COMMAND LDA ESC.3 PUT IN PROPER CODE IN ESC. SEQUENCE AND HIBYT MASK OFF THE HIGH BYTE STA ESC.3 LDA B,I GET THE PROPER LETTER COMMAND AND LOBYT MASK OFF THE LETTER ONLY IOR ESC.3 STORE IT IN THE ESC SEQUENCE STA ESC.3 LDA B,I GET THE NUMBER OF PARAMETERS ALF,ALF ITS IN THE HIGH BYTE PUT IT IN THE LOW BYTE AND LOBYT MASK IT OFF STA LEN STORE IT AWAY AS NUMBER OF PARAMETERS IN READ LDA ESC. LOCATION OF ESC SEQUENCE STA IOB JSB READ JMP RDCHK,I * * * THIS ROUTINE IS USED TO READ THE PLOTTER BUFFER SIZE * WHICH MEANS TO WAIT UNTIL THE PLOTTER BUFFER IS COMPLETELY * EMPTY. * * RWAIT NOP READ BUFFER SIZE, BUT WAIT UNTIL IT'S EMPTY LDA ESC.3 NEED TO USE ESC.(ESC.L SEQUENCE AND HIBYT MASK OFF THE MOST SIGNIFICANT BYTE IOR .76 PUT IN A 'L' IN STA ESC.3 NOW ESC. HAS ESC.(ESC.L SEQUENCE IN IT LDA ESC. LOAD THE ESC SEQUENCE POINTER STA IOB PUT ESC SEQUENCE AS OUTPUT BUFFER LDA .1 ONE PARAMETER LONG STA LEN JSB READ GO GET BUFFER LENGHT LDA RWD1 BUFFER IS NOW EMPTY ADA .N40 NEED TO SUBSTRACT THE PREBUFFER IN 7221 STA PBFLN UPDATE THE GLOBAL VARIABLE JMP RWAIT,I RETURN * * * SKP * * * READ NEED TO PUT POINTER IN IOB FOR OUTPUT * COMMAND WITH ESC.( PRECEEDING. * * ASSUME 3 WORDS LONGS * * LEN = # PARAMETERS * * IOBUF SHOULD BE CLEAN * * PUT THE ANSWER IN RDVAR * * READ NOP READ AN INQUIRY LDA .6 ASSUME 3 WORDS OF OUTPUT LDB .2 WRITE REQUEST JSB OUTPT LDB .SPAC NEED TO PUT SPACES IN THE BUFFER LDA .N15 SO THE FORMATTER MAY WORK CORRECTLY STA TEMP9 ASSUME 15 WORDS IN BUFFER LDA .RDBF THIS IS THE BUFFER FWA READ1 STB A,I PUT SPACES IN THE BUFFER INA ISZ TEMP9 INCREMENT POINTERS JMP READ1 CONTINUE ON LDA .RDBF READ BUFFER LOCATION STA IOB RESOTRE THE I/O BUFFER LDA .40 ONE LINE LENGTH LDB .1 READ JSB OUTPT LDA LPLCM LOAD LAST PLOTTER COMMAND CPA .N2 IS IT A LABEL ON MODE?? JMP READ,I YES, GO BACK HOME LDA .TERM NO, NEED TO TURN OFF THE PLOTTER STA IOB POINTS TO THE ESC . ) SEQUENCE (TERMINATOR) LDA .4 THREE BYTES LONG FOR THE TERMINATOR LDB .2 WRITE JSB OUTPT LDA LEN NOW CONVERT THE DATA SZA,RSS NO PARAMETER CONVERSION NECESSARY JMP READ,I RETURN CMA,INA STA LEN NEGATIVE # PARAMETER CLA STA IBYTE LDA .RDBF FROM I/O BUFFER STA INTIO LDA RDVAR STA INTAD PUT THE PARAMETER IN RDVAR INTLP JSB INTX DEF RTINT INTIO NOP FROM BUFFER INTAD NOP TO BUFFER DEF IBYTE COUNT OF WHICH CELL IN RDVAR RTINT ISZ INTAD ISZ LEN JMP INTLP JMP READ,I * SKP SPC 3 * * * LITERAL RETURN * ENTER GIC, LNGTH,DCTAD * * LITRT LDA CMDAD LITERAL RETURN; LOAD THE LOCATION OF LITERAL STRING LDB NBYTE LOAD THE NUMBER OF BYTES INB ROUND UP TO THE NEAREST WORD BOUNDARY BRS DIVIDE BY TWO TO GIVE WORDS JSB GBRET PUT INTO GCBIM(16,1,A,B,2) JMP EXIT1 UPDATE GLOBALS AND RETURN * * SKP SPC 3 * * THIS IS USED TO SEND DATA BACK TO THE GCBIM * * ENTER WITH DATA IN A * FORMAT *DDDDDD RANGE 0 TO 63 * * SBN NOP SINGLE BYTE NUMBER JSB CHECK CHECK FOR THE 6 BIT ON/OFF;AND STORE IT JMP SBN,I WE ARE FINISHED SPC 3 * * * ENTER WITH A = VALUE * * FORMAT 110NNNN 110NNNN 110NNNN * *NNNNNN *NNNNNN * *NNNNNN * * * MBN NOP MULTIPLE BYTE NUMBER STA DATAX STORE VALUE TO BE CONVERTED LDB FGMBA CHECK TO SEE IF FROM MBA ROUTINE CPB .1 IF SO NEED TO USE 3 BYTE ROUTINE JMP MBN3 YES, GO TO THREE BYTE ROUTINE AND B76K ELSE MBN SZA CHECK TO SEE HOW MANY BYTES JMP MBN3 NEED THREE BYTES LDA DATAX AND B1760 SZA JMP MBN2 NEED TWO BYTES MBN1 LDA DATAX THEN WE NEED ONE BYTE JSB HDCK ONE BYTE STORE OF HEAD VALUE IN I/O BUFFER JMP MBN,I DONE WITH ONE BYTE PARAMETER MBN2 LDA DATAX 2 BYTE PARAMETER ALF,ALF NEED BITS 9-6 TO 3-0 RAL,RAL JSB HDCK STORE HEAD VALUE IN I/O BUFFER JMP BLAST SKIP TO LAST BYTE OF MBP3 WHICH IS IDENTICAL MBN3 LDA DATAX THREE BYTE PARAMETER ALF NEED BIT 14-12 TO 2-0 LDB MBAOF CHECK TO SEE IF WE NEED TO SET BIT 16 SZB THIS IS FROM THE MBA ROUTINE IOR .8 SET BIT 4 IMPLIES ANGLES > 90 DEGREES. JSB HDCK STORE HEAD VALUE IN I/O BUFFER LDA DATAX SECOND BYTE OF MBN ALF,ALF MOVE BITS 11-6 TO 5-0 RAL,RAL JSB CHECK SPC 3 BLAST LDA DATAX LAST BYTE JSB CHECK JMP MBN,I GO BACK HOME SPC 3 * THIS IS USED TO CHECK TO SEE IF * BIT 7 IS TO BE COMPLEMENTED OR NOT * CHECK NOP SET UP 6/7 BIT OF BYTE AND B77 MASK OFF THE BITS 5-0 STA TEMP AND B40 MASK OFF THE BIT-6 SZA,RSS IS BIT 6=0 LDA .64 YES, SET BIT 7 OTHERWISE LEAVE BIT 6 SET IOR TEMP SET BIT 6 OR 7 ALF,ALF NEED TO MOVE TO HIBYTE TO OUTPUT ONE BYTE STA SINGL PUT IT INTO THE TEMPORARY BUFFER TO BE TRANSFERRED LDB .1 NOW SET UP THE PARAMETERS FOR JSB TRANS ROUTINE LDA .SING SET UP THE POINTER JSB TRANS JMP CHECK,I * SPC 3 * * * USED TO PUT IN HEADER FORMAT * FORMAT IS 110NNNN * * HDCK NOP HEADER CHECK FOR PARAMETER CONVERSION ROUTINES AND B17 MASK OFF THE 3-0 BITS IOR B140 NEED TO INSERT THE HEADING PREAMBLE ALF,ALF NEED TO MOVE TO HIBYTE TO GET OUTPUTTED STA SINGL STORE INTO THE TEMPORARY BUFFER TO BE TRANSFERRED LDB .1 1 BYTES LONG LDA .SING POINTER TO THE TEMPORARY BUFFER JSB TRANS TRANSFER THE DATA OVER JMP HDCK,I RETURN * * * SPC 3 * * MULTIPLE BYTE PARAMETERS * * FORMAT 110XXYY 110XXXX 110XXXX 110XXXX 110XXXX * *XYYYYY *XXXXYY *XXXXXX *XXXXXX * *YYYYYY *XYYYYY *XXXXYY * *YYYYYY *YYYYYY * *YYYYYY * * * MBP NOP MULTIPLE BYTE PARAMETERS STB DATAY STA DATAX IOR B CHECK TO FIND OUT WHICH MAGNITUDE IS LARGER STA TEMP AND B74K BITS 13-11 ANY ON? SZA JMP MBP5 YES, WE HAVE A 5 BYTE PARAMETER LDA TEMP AND B3400 BIT 10-8 ANY ON? SZA JMP MBP4 GO TO 5 BYTE PARAMETER LDA TEMP AND B340 BITS 7-5 ANY ON? SZA JMP MBP3 WE HAVE 3 BYTE PARAMETER LDA TEMP AND B34 BITS 4-2 ANY ON? SZA JMP MBP2 TWO BYTE PARAMETER JMP MBP1 ELSE ONE BYTE PARAMETER * * * MBP5 LDA DATAX FIVE BYTE PARAMETER ALF MOVE THE BITS OVER TO GET LSB'S RAL,RAL 13-10 TO 3-0 BITS MOVEMENT JSB HDCK LDA DATAX SECOND BYTE ALF,ALF GET THE NEXT BYTE OF INFORMATION ALF MOVE BITS 904 TO 5-0 JSB CHECK LDA DATAY THIRD BYTE PARAMETER ALF SHIFT OVER TO GET THE Y BITS AND .3 MASK OFF WHAT WE NEED STA TEMP LDA DATAX THE SECOND HALF OF THE THRID BYTE AND B17 MOVE BITS 3-0 TO 5-2 RAL,RAL MOVE IT TO THE PROPER PLACE IN MBP IOR TEMP MERGE THE Y AND X BITS FOR BYTE 3 JSB CHECK LDA DATAY FOURTH BYTE ALF,ALF MOVE BITS 11-6 TO 5-0 RAL,RAL JSB CHECK LDA DATAY FIFTH BYTE JSB CHECK GO AND STORE IT JMP MBP,I * * * MBP4 LDA DATAX WE HAVE A FOUR BYTE MBP ALF,ALF SHIFT OVER BITS 10-7 TO 3-0 RAL JSB HDCK LDA DATAX SECOND BYTE RAR MOVE BITS 6-1 TO 5-0 JSB CHECK GO AND PUT IT IN LDA DATAX THIRD BYTE BYTE AND .1 MASK OFF THE ONE BIT WE NEED ALF,RAL MOVE BITS 0 TO BIT 5 STA TEMP STORE IT AWAY; NEED IT LATER TO MERGE WITH THE Y LDA DATAY ALF,ALF SHIFT BITS 10-6 TO 4-0 RAL,RAL AND B37 MASK OFF THE 5 BITS WE NEED IOR TEMP MERGE THE X AND Y TOGETHER JSB CHECK LDA DATAY FOURTH BYTE JSB CHECK STORE IT JMP MBP,I RETURN * * * MBP3 LDA DATAX 3 BYTE PARAMETER ALF,ALF MOVE THE BITS 7-4 TO 3-0 ALF JSB HDCK INSERT THE HEADER IN LDA DATAX SECOND BYTE AND B17 GET THE 4 BITS 3-0 TO 5-2 RAL,RAL SHIFT IT OVER FOR POSITIONING STA TEMP SAVE FOR MERGE LATER LDA DATAY ALF,ALF MOVE 7-6 TO 1-0 RAL,RAL NEED TO SHIFT OVER 12 AND .3 NEED THE TWO Y BITS IOR TEMP MERGE THE X AND Y TOGETHER JSB CHECK LDA DATAY THRID BYTE JSB CHECK JMP MBP,I * * * MBP2 LDA DATAX GOING AFTER THE TWO BYTE PARAMETER RAR SHIFT BITS 4-1 TO 3-0 JSB HDCK LDA DATAX SECOND BYTE AND .1 ALF,RAL MOVE OVER TO POSITION 0 TO 5 STA TEMP LDA DATAY AND B37 NEED TO MASK OFF THE LAST 5 BITS OF Y IOR TEMP MERGE THE X AND Y TOGETHER JSB CHECK PUT IT AWAY JMP MBP,I * * * MBP1 LDA DATAX HAVE ONE BYTE MODE AND .3 MOVE BITS 1-0 TO 3-2 RAL,RAL MOVE THE 2 BITS TO PROPER PLACE STA TEMP LDA DATAY AND .3 MOVE BITS 1-0 TO 1-0 IOR TEMP MERGE THE X AND Y TOGETHER JSB HDCK NEED TO PUT THE HEADER INFO IN AND PUT INTO BUFFER JMP MBP,I * * * * * * * FOR MBA MULTIPLE BYTE ANGLE WE NEED TO HAVE * FLOATING POINT SO WE CAN CONVERT FROM * RADIANS TO DEGREES AND TO BINARY SYNTAX * NEED FOR THE 7221 * * 10430.03 * X RADIANS = D BINARY DEGREES * MBA NOP THIS IS MULTIPLE BYTE ANGLE FMP MBACT MULTIPLY BY THE 10430.03 CONSTANT DST TEMP8 THIS IS THE FLOATING REPRESENTATION OF MBA FSB B77.K NEED TO CHECK FOR ANGLES > 90 DEGREES FIX LDB .1 INDICATES OVERFLOW BITS OR > 90DEGREES SSA,RSS ARE WE OVER 90 DEGREES? JMP MBA1 YES, USE A AND B AS IS DLD TEMP8 NO, ANGLE IS <= 90 DEGREES FIX PUT IT IN THE FORM FOR MBN TO USE LDB .0 CLEAR OVERFLOW FLAG MBA1 STB MBAOF STORE OVERFLOW FLAG LDB .1 NEED TO SET FLAG FOR MBA SO MBN ROUTINE KNOWS IT STB FGMBA IS FROM MBA TO DO THREE BYTE PART JSB MBN GO AND CONVERT IT SINCE ITS THE SAME AS MBN CLA RESET THE FLAG TO NOT-FROM MBA STA FGMBA STA MBAOF CLEAR THE OVERFLOW FLAG JMP MBA,I RETURN SKP SPC 3 * * * * * DATA VARIABLESL * .SING DEF SINGL USED FOR TEMPORARY BUFFER LOCATION IN CONVERSIONS SINGL NOP * * ESC. DEF ESC.1 ESC.1 OCT 015456 ESC . ESC.2 OCT 024033 (ESC ESC.3 OCT 027040 . BLANK SPC 3 .ETX DEF ETXNO USED TO POINT TO THE ETX TERMINATOR SEQUENCE ETXNO OCT 015456 ESC . OCT 024003 ( ETX OCT 015456 ESC . OCT 024410 ) BACK SPACE (CONTROL H) SPC 3 .TERM DEF TERM START OF TERMINATOR SEQUENCE TERM OCT 015456 ESC. TERM1 OCT 024410 ) CONTROL H TERM2 OCT 027051 PERIOD, ) TERM3 OCT 004000 CONTROL H, NULL SPC 3 HIBYT OCT 177600 MOST SIGNIFICANT BYTE LOBYT OCT 000377 LEAST SIGNIFICANT BYTE SPC 3 RDVAR DEF RWD1 THE PARAMETER FROM READ RWD1 BSS 1 RWD2 BSS 1 RWD3 BSS 1 RWD4 BSS 1 SPC 3 ESCTB DEF * START OF ESC SEQ TABLE OCT 001501 3 A; NUMBER OF PARAMETERS, LETTER OF OUTPUT COMMAND OCT 000502 1 B OCT 001503 3 C OCT 002104 4 D OCT 001505 3 E OCT 000506 1 F OCT 002107 4 G OCT 000110 0 H OCT 000111 0 I OCT 000112 0 J OCT 000113 0 K OCT 000514 1 L SPC 3 .RSET DEF RSET FOR RESET COMMAND RSET OCT 077121 TILDE P - DEFAULT LABEL FONT OCT 077127 TILDA W (W) SET GRAPHIC LIMITS OCT 077123 TILDA S (~S) SET GRIDDING OCT 077045 TILDA % (~%) SET CHARACTER SIZE OCT 063467 SMALL G7(g7) PARAMETER VALUES FOR (125,250) OCT 035000 COLON (: ) SPC 3 * * ETX,ESC.M10:17:10:13:ESC.J SEQUENCE * .HAND DEF HAND FWA FOR START HANDSHAKING HAND OCT 1433 TURN OFF TEXT MODE IF ON (ETX,ESC) OCT 027115 SET UP HANDSHAKE MODE (.,M) OCT 30460 WITH 10 MILLISECOND DELAY (1,0) OCT 35461 DC1 CHARACTER TRIGGER (SEMICOLON,1) OCT 33473 (7,SEMICOLON) OCT 30060 TRY NO ECHO BYPASS CHARACTER(0,0) OCT 35461 CR TERMINATOR FOR PLOTTER (SEMICOLON,1) OCT 31472 (3,:) OCT 15456 CANCEL ANY CURRENT REQUESTS (ESC,.) OCT 45000 (J,NULL) SPC 3 * * GLOBALS * CBFCT BSS 1 COMPUTER BUFFER COUNTER PBFLN BSS 1 PLOTTER BUFFER LENGTH LPLCM BSS 1 LAST PLOTTER COMMAND PANG1 BSS 1 PLOTTER ANGLE PANG2 BSS 1 PLOTTER ANGLE PART TWO (REAL NUMBER) CPENS BSS 1 PLOTTER PEN STATUS GX1MU BSS 1 GRAPHIC LIMIT X MIN GX2MU BSS 1 GRAPHIC LIMIT X MAX GY1MU BSS 1 GRAPHIC LIMIT Y MIN LENGTH GY2MU BSS 1 GRAPHIC LIMIT Y MAX * * * .LNTP DEF LNTP LINE TYPE REFERENCE LNTP DEF LNTP0 LINETYPE 0 SOLID LINES DEF LNTP1 1, DIME DEF LNTP2 2,SHORT DASH DEF LNTP3 3,LONG DASH DEF LNTP4 4,CENTER LINE DEF LNTP5 5,DOTS AT END POINT DEF LNTP6 6,DOUBLE CENTER LINE * * PATLN DEC 460.0 DEFAULT DASHLINE LENGTH * LNTP0 OCT 0 DEFAULT SOLID LINES LNTP1 OCT 5 LENGTH IN BYTES OCT 020101 SPACE, CAPITAL A DIM LINES OCT 020141 SPACE , LOWER CASE A OCT 022000 $ DOLLAR SIGN, NULL LNTP2 OCT 2 BYTES OCT 022505 PERCENT , CAPITAL E; SHORT DASH LNTP3 OCT 2 OCT 021501 POUND SIGN, CAPITAL A LONG DASH LNTP4 OCT 4 OCT 023501 SINGLE QUOTE MARK,CAPITAL A; CENTER LINE OCT 020501 EXCLAIMATION POINT,CAPITAL A LNTP5 DEC 8 NUMBER OF BYTES OCT 077122 TILDE R - VARIABLE DASH LINE FORMAT OCT 020101 SPACE ,CAPITAL A OCT 020143 SPACE ,SMALL C OCT 037477 QUESTION ,QUESTION MARK LNTP6 OCT 6 OCT 020101 PERCENT ,CAPITAL A; DOUBLE CENTER LINES OCT 020501 EXCLAMATION,CAPITAL A OCT 020501 EXCLAMATION,CAPITAL A * A EQU 0 B EQU 1 BUFFG BSS 1 BUFFER FLAG NBYTE BSS 1 ABSOLUTE NUMBER OF BYTES IN CMD $ BYTES BSS 1 NUMBER OF BYTES IN CMD $ TYPE BSS 1 NUMBER OF BYTES IN CMD $ INTYP BSS 1 READ INSTRUCTION TYPE FOR READ REQUESTS * RW BSS 1 READ/WRITE FOR GCBIM FGMBA NOP MBA FLAG 0=NOT FROM MBA 1=YES FROM MBA ROUTINE MBAOF NOP MBA OVERFLOW FLAG 0=NO SET BIT-16 1=YES SET BIT-16 DFETX DEF B1400 POINTER TO THE 1400 OCTAL (ETX) * * .0 OCT 0 .1 OCT 1 .1038 DEC 10380 Y UPPER RIGHT DEFAULT LIMIT .10 DEC 10 .11 DEC 11 .1572 DEC 15720 X UPPER RIGHT DEFAULT LIMIT .16 DEC 16 .19 DEC 19 .2 OCT 2 READ LUN NUMBER ALSO KEEP NEXT TWO WORDS ALWAYS TOGETHER .4 OCT 4 READ CBFAD,CBFLN .26 DEC 26 READ THE AXIS FIX # FXDN .200 OCT 200 .SPAC OCT 20040 THIS IS SPACES IN BOTH BYTES FOR INPUT BUFFER CLEAR .22 DEC 22 .3 OCT 3 .380 DEC 380 Y LOWER LEFT DEFAULT LIMIT .31 DEC 31 .32 DEC 32 .38 DEC 38 .39 DEC 39 .40 DEC 40 .41 DEC 41 .64 DEC 64 .460 DEC 460 .5 OCT 5 .520 DEC 520 X LOWER LEFT DEFAULT LIMIT .6 OCT 6 .7 OCT 7 .76 DEC 76 A CAPITAL L .8 DEC 8 .N1 OCT -1 .N15 DEC -15 .N2 OCT -2 .N20 DEC -20 .N3 OCT -3 .N4 OCT -4 .N40 DEC -40 .N5 OCT -5 B1000 OCT 1000 B140 OCT 140 B1400 OCT 1400 ETX IS THE HIGH BYTE B17 OCT 17 B177 OCT 177 B1760 OCT 1760 B200 OCT 200 B2000 OCT 2000 B33 OCT 33 B34 OCT 34 B3400 OCT 3400 B340 OCT 340 B37 OCT 37 B40 OCT 40 B60 OCT 60 B6400 OCT 6400 CARRIAGE RETURN, FOR SHORT LABEL TERMINATOR B74K OCT 74000 B76K OCT 76000 B77 OCT 77 B77.K DEC 32767. THIS FOR MBA ROUTINE SPC 3 CMDAD BSS 1 COMMAND ADDRESS = DCTAD RWFLG BSS 1 =0 READ, -1 WRITE IOCNT BSS 1 I/O COUNTER FOR # BYTES TO BE TRANSFERRED TEMP BSS 1 TEMPORARY VARIABLE IN CONVERSIONS ROUTINES TEMP3 BSS 1 TEMPORARY STOREGE TEMP7 BSS 1 TEMPORARY STORAGE TEMP8 BSS 1 TEMPORAY STORAGE FOR TRANS TEMP9 BSS 1 TEMPORARY STORAGE FOR TRANS ROUTINE TLOOP BSS 1 LOOP COUNTER FOR TRANS ROUTINE PLTCT BSS 1 PLOT ABSOLUTE PARAMETER POINTER LNTH BSS 1 LENGHT OR NUMBER OF PARAMETERS .RDBF DEF INTX1 READ BUFFER LOCATION INTX1 BSS 1 INTX2 BSS 1 INTX3 BSS 1 INTX4 BSS 1 INTX5 BSS 1 INTX6 BSS 1 INTX7 BSS 1 INTX8 BSS 1 INTX9 BSS 11 NUMB BSS 1 NUMBER OF ITEMS SIZE BSS 1 NUMBER OF ITEMS LEN BSS 1 # OF PARAMETER TO CONVERT IN READ REQUEST * * * LUN BSS 1 LOGICAL UNIT NUMBER CBFAD BSS 1 COMPUTER BUFFER ADDRESS LOCATION CBFLN BSS 1 COMPUTER BUFFER LENGTH FXDN BSS 1 READ THE AXIS FORMAT NUMBER * * * .SPEC DEF * FWA FOR SPECIAL TABLES DEF RESET DEF GTG12 GET G1,G2 DEF OUTCP OUTPUT CURRENT POINT DEF DIGIT OUTPUT THE DIGITIZE POINT DEF SLANT OUTPUT THE SLANT FOR CHARACTERS DEF MBPOT MBP OUTPUT FLOATING POINT NUMBER DEF MBPBN MBP OUTPUT BINARY NUMBER DEF SLPEN SELECT PEN NUMBER DEF DASHL DASH LINE TYPE SELECTION DEF DASHL DASH LINE WITH PATTERN LENGTH SPECIFIED DEF MVCUR MOVE CURSOR NEED TO OUTPUT BINARY # IN MBP DEF SG1G2 SET G1,G2; GRAPHIC LIMITS DEF DFG12 DEFAULT G1 AND G2 DEF PENUP PEN-UP * * * EM0 DEF * FWA FOR EMULATOR TABLE DEF XMIT TRANSMIT I/O BUFFER DEF HOME HOME THE PEN DEF GTCHR GET CHARACTER DATA DEF PLABS PLOT ABSOLUTE DEF LABEL LABEL MODE DEF CONVT CONVERT TO ASCII DEF PENDN PEN DOWN DEF CPLMT CHARACTER PLACEMENT DEF PAGEF PAGE FEED SPC 3 .P DEF P P OCT 70000 SMALL P (LOWER CASE P) .Q DEF Q Q OCT 070400 SMALL Q (LOWER CASE Q) .Z DEF Z Z OCT 75000 SMALL Z (LOWER CASE) * AGCT DEC 1.0 CONVERSION RADIANS TO DEGREES TO MBA FORMAT .LLAB DEF LLAB LLAB OCT 077134 TILDE, BACKSLASH (,\) OCT 061576 ETX,TILDE DEFINES THE LABEL TERMINATOR OCT 023400 SINGLE TICK MARK, NULL - TURN LABEL MODE ON .SLAB DEF SLAB SHORT LABEL MODE SLAB OCT 077134 TILDE, BACK SLASH OCT 066576 CARRIAGE RETURN, TILDE OCT 023400 SINGEL TIC MARK, NULL SPC 3 * .WW DEF WW WW OCT 073567 SMALL WW (ABSOLUTE ROTATE) SKPBK NOP USED IN FLOAT TO ASCII ROUTINE * BUFFER EMPTY 1=NO,WAIT; 0 = YES, WAIT IBYTE BSS 1 INTX ROUTINE DATAX BSS 1 X VALUE USED IN CONVERSION ROUTINE DATAY BSS 1 Y VALUE USED IN CONVERSION ROUTINE * MBACT DEC 10430.03 FLOATING POINT ANGLE CONSTAND SLANG DEC 1.570795 FLOATING POINT OF 90 DEGREES USED IN SLANT ROUTINE * * .MCMD DEF MCMD COMMAND STRING TO DO PAGE FEED MCMD OCT 077053 (TILDE,+) OCT 76433 (],ESC) TERM,START OF OUTPUT ERROR (ESC.E) .MOE DEF MOE COMMAND STRING TO DO OUTPUT ERROR MOE OCT 15456 (ESC,.) OCT 24033 ((,ESC) OCT 27105 (.,E) OCT 76400 (],NOP) TERM END