ASMB,R,Q,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: DCT06 -- 1350A DEVICE COMMAND TABLE * SOURCE: 92840-18091 * RELOC: 92840-16008 * PGMR: KH 5/18/78 * * MODIFIED BY: DJS SEPT 27, 1979 > GOT THE DCT TO WORK * MODIFIED BY: DJS JAN 27, 1980 > FIXED RESET GIC (1) * ********************************************************************** * NAM DCT06,7 92840-16008 REV.2013 800127 EXT FLOAT EXT .IENT EXT FLTAS EXT LNGTH EXT GIC EXT DCTAD EXT GCBIM EXT BYTE EXT INDCK EXT REIO * ENT DCT06 * * ********************************************************************** * * * THIS IS THE DEVICE COMMAND TABLE FOR THE 1350A GRAPHICS * * TANSLATOR. GRAPHICS/1000 SUPPORTS THE HP 1350A WITH THE * * FOLLOWING CRT'S: * * * * HP 1310A HP 1317A * * HP 1311A HP 1321A * * * * * ********************************************************************** HED * ********************** * CONSTANTS * ********************** * * A EQU 0 A REG. B EQU 1 B REG. * P0 OCT 0,0,0,0 P1 OCT 1 P2 OCT 2 P3 OCT 3 P4 OCT 4 P8 DEC 8 P9 DEC 9 P10 DEC 10 P12 DEC 12 P16 DEC 16 P26 DEC 26 P32 DEC 32 P48 DEC 48 B137 OCT 137 USED TO SUPRESS CR-LF WHEN STARTING TEXT MODE B177 OCT 177 ERRCK GIC (FIRST ONE THAT THE DCT SEES) DG45 DEC .785 45 DEGREES IN RADIANS DG135 DEC 2.355 135 DEGREES IN RADIANS B377 OCT 377 LOWER BYTE MASK COMMA OCT 54 COMMA * 26000 SEMCL OCT 73 SEMI-COLON CRLF OCT 6412 CR LF M3 DEC -3 SKP * * ********************** * TEXT * ********************** * * TX ASC 1,TX TEXT (LABEL) MODE COMMAND CS ASC 1,CS CHAR. SIZE COMMAND ID ASC 3,1350A ID NAME * * ********************* * ADRESSES * ********************* * * AP0 DEF P0 AP1 DEF P1 AP2 DEF P2 AP3 DEF P3 AP4 DEF P4 AP8 DEF P8 AP9 DEF P9 AID DEF ID ADDRESS OF ID NAME AMMCS DEF MMCS MIN-MAX CHAR. SIZE STARTING ADDRESS ACINF DEF CINF CHARACTER PLACEMENT INFO ADDRESS APLTU DEF PLTU PLOT UNIT 1ST CHAR. ADDRESS INX DEF INTX1 TEMP AREA ADRESS SKP *********************************************************************** * * * >>>>>>>>>>>>>>>>> TABLE AREAS <<<<<<<<<<<<<<<<<<<<<<<< * * * * DO NOT CHANGE SEQUENCE OF THE INDIVIDUAL TABLES !!!!!! * * * *********************************************************************** * * *********************************************************** * DISPLAY SURFACE TABLE. THE SIZES ARE IN MILLIMETERS * *********************************************************** * ADSMM DEF *+1 STARTING ADDRESS OF DISPLAY SURFACE TABLE DEF DSMM0 HP 1310 CRT DEF DSMM1 HP 1311 CRT DEF DSMM2 HP 1317 CRT DEF DSMM3 HP 1321 CRT * * THE DISPLAY SURFACE COORDINATES FOR THE CRT'S ARE IN THE * FOLLOWING SEQUENCE: * * X MIN MM * Y MIN MM * X MAX MM * Y MAX MM * ************* * HP 1310 * ************* * DSMM0 DEC 0. DEC 0. DEC 279. DEC 279. * ************* * HP 1311 * ************* * DSMM1 DEC 0. DEC 0. DEC 216. DEC 216. * ************* * HP 1317 * ************* * DSMM2 DEC 0. DEC 0. DEC 254. DEC 254. * ************* * HP 1321 * ************* * DSMM3 DEC 0. DEC 0. DEC 305. DEC 305. SKP ************************************************************** * * * COMMAND LINK TABLE * * !!!! DO NOT CHANGE SEQUENCE !!!! * ************************************************************** DCT06 NOP DEF EMSUB EMMULATOR ENTRY ADDRESS DEF RESET 1 RESET (POWER ON) NOP - 2 DEFAULT P1, P2 DEF PCLR 3 CLEAR SCREEN NOP - 4 FLUSH I-O BUF. DEF HOPEN 5 HOME PEN (0,0) DEC -1 6 *GET I.D. NOP - 7 - DEC -2 8 *GET PLOT UNIT P1, P2 DEC -3 9 *GET CHAR. SIZE DEC -4 10 *GET PEN LOCATION DEC -4 11 *GET CURSOR LOCATION DEC -4 12 *DIGITIZE NOP - 13 SET LABEL ORIGIN DEC -5 14 LABEL DIRECTION NOP - 15 SET CHAR. SLANT ON NOP - 16 SET CHAR. SLANT OFF DEC -6 17 SET CHAR. SIZE (MU) NOP - 18 SET RELATIVE ORIGIN NOP - 19 SET PLOT DIRECTION NOP - 20 SET SCALE NOP - 21 SET ORIGIN = CURSOR LOCATION NOP - 22 SET ORIGIN = PEN LOCATION NOP - 23 DRAW TO CURSOR NOP - 24 SELECT CHAR. SET DEF PENUP 25 SELECT PEN # 0 NOP - 26 SELECT PEN # -1 NOP - 27 SELECT PEN # -2 NOP - 28 SELECT PEN # (1-N) DEC -7 29 *GET # OF PENS NOP - 30 DEFINE LINE TYPE NOP - 31 SELECT DEFAULT LINE TYPE NOP - 32 LINE TYPE WITH LENGTH DEF PENUP 33 PEN UP DEF PENDN 34 PEN DOWN DEF PLTAB 35 PLOT ABSOLUTE NOP 36 PLOT RELATIVE NOP 37 PLOT INCREMENT DEF LABEL 38 SHORT LABEL DEF LABEL 39 START LABEL MODE DEF ETXT 40 TERM. LABEL MODE DEC -8 41 FLOAT PT. TO ASCII CODE DEC -9 42 *GET SURFACE SIZE IN MM NOP - 43 POSITION CURSOR ABSOLUTE NOP - 44 POSITION CURSOR RELATIVE NOP - 45 SET G1, G2 DEC -10 46 *GET MACHINE UNITS PER MM DEC -11 47 *GET DEVICE CLEARING CHARACTERISTICS DEC -12 48 *GET # OF PHYSICALLY DIFFERENT PENS DEC -13 49 *GET # OF DIFFERENT TYPES OF CURSORS DEC -14 50 *LORGABILITY DEC -15 51 *MAX. CHAR. SLANT (TAN ANGLE) DEC -16 52 *HARD CLIPPING CAPABILITY DEC -17 53 CHARACTER PLACEMENT DEC -18 54 *GET MIN-MAX CHAR. SIZE (MU) DEC -19 55 *GET LABEL DIRECTION CAPABILITY DEC -20 56 *GET LORG RANGE ************************************************************** SKP ************************************************************** * ASCII COMMAND STRINGS - FOR DIRECT DUMP TO I-O BUFFER * * * * FIRST WORD = NUMBER OF BYTES * * NEG. = WRITE TO DEVICE * * POS. = READ FROM DEVICE * * * * SECOND WORD = TERMINATER * * * * NEXT N WORDS = DATA * * * * !!!!!! DO NOT CHANGE SEQUENCE OF COMMANDS STRINGS !!!!!! * ************************************************************** *********************** * RESET GIC=1 * *********************** * * * THE RESET GIC WAS CHANGED TO REMOVE ALL NECESSARY 'ONE TIME ONLY' * 1350 INITIALIZATION. THE DEVICE INITIALIZATION IS NOW PERFORMED * IN DVG06 AFTER ERROR CHECKING HAS BEEN SUCCESSFULLY COMPLETED. * RESET DEC -4 DS2013 DEF CRLF * OCT 1424 CHAR(3) CHAR(20) DS2013 * OCT 6412 DS2013 * ASC 1,EM ERASE MEMORY DS2013 * OCT 6412 DS2013 * ASC 1,EX ERASE AUX. BITS DS2013 * OCT 6412 DS2013 * ASC 1,EN ERASE SEGMENT NAMES DS2013 * OCT 6412 DS2013 * ASC 1,UM UNBLANK MEMORY DS2013 * OCT 6412 DS2013 ASC 2,CS0, SET TO SMALLEST CHAR. SIZE * *********************** * CLEAR SCREEN GIC=3 * *********************** * PCLR DEC -2 DEF CRLF ASC 1,EM ERASE MEMORY * *********************** * HOME PEN GIC=5 * *********************** * HOPEN DEC -12 DEF CRLF ASC 2,PE0, LIFT PEN UP OCT 6412 ASC 3,PA0,0; MOVE TO HOME LOCATION * *********************** * PEN UP GIC=25 * *********************** * PENUP DEC -4 DEF CRLF ASC 2,PE0, LIFT PEN UP * *********************** * PEN DOWN GIC=33 * *********************** * PENDN DEC -4 DEF CRLF PE ASC 2,PE1, PUT PEN DOWN * *********************** * START TEXT GIC=39 * *********************** * LABEL DEC -8 DEF B137 SUPPRESS CR-LF ASC 2,PE1, OCT 6412 ASC 1,TX START TEXT MODE * *********************** * END TEXT GIC=40 * *********************** * * ETXT DEC -1 DEF CRLF OCT 1400 ETX * ************************ * PLOT ABSOLUTE GIC=35 * ************************ * PLTAB DEC -2 DEF SEMCL ASC 1,PA ************************************************************** SKP **************************************** * * * EMMULATOR TABLE * * !!! DO NOT CHANGE SEQUENCE !!! * * * **************************************** * * SBTBL DEF * TABLE ADDRESS DEF SUB06 GET I.D. DEF SUB08 GET PLOT UNIT DEF SUB09 GET CHAR. SIZE DEF SUB10 GET PEN LOCATION, CURSOR LOCATION DEF SUB14 SET LABEL DIRECTION DEF SUB17 SET CHAR. SIZE DEF SUB29 GET # OF PENS DEF SUB41 FLT PT. TO ASCII CONVERSION DEF SUB42 GET GET SURFACE SIZE IN MM DEF SUB46 GET MACHINE UNITS PER MM DEF SUB47 GET DEVICE CLEARING CHARACTERISTICS DEF SUB48 GET # OF PHYSICALLY DIFFERENT PENS DEF SUB49 GET # OF DIFFERENT TYPES OF CURSORS DEF SUB50 GET LORGABILITY INFOMATION DEF SUB51 GET MAX. CHAR. SLANT DEF SUB52 GET HARD CLIPPING CAPABILITY DEF SUB53 GET CHARACTER PLACEMENT INFO DEF SUB54 GET MIN-MAX CHAR. SIZE DEF SUB55 GET LABEL DIRECTION CAPABILITY DEF SUB56 LORG RANGE * SKP * ************************************************ * MACHINE UNIT PER MILLIMETER TABLE * ************************************************ * AMUMM DEF *+1 STARTING ADDRESS OF MACHINE UNIT PER MM TABLE DEF MUMM0 HP 1310 CRT DEF MUMM1 HP 1311 CRT DEF MUMM2 HP 1317 CRT DEF MUMM3 HP 1321 CRT * * THE MACHINE UNIT / MM TABLE IS IN THE FOLLOWING ORDER: * * X MU / MM * Y MU / MM * **************** * HP 1310 * **************** * MUMM0 DEC 3.663 DEC 3.667 * **************** * HP 1311 * **************** * MUMM1 DEC 4.731 DEC 4.736 * **************** * HP 1317 * **************** * MUMM2 DEC 4.024 DEC 4.028 * **************** * HP 1321 * **************** * MUMM3 DEC 3.351 DEC 3.354 SKP ****************************************************** * * * MIN / MAX CHARACTER SIZE (MACHINE UNITS) TABLE * * * ****************************************************** * MMCS DEC 12.0 X MIN CHAR. SIZE (MU) DEC 16.0 Y MIN CHAR. SIZE (MU) DEC 96.0 X MAX CHAR. SIZE (MU) DEC 128.0 Y MAX CHAR. SIZE (MU) ****************************************************** * * ****************************************************** * * * MIN / MAX DISPLAY SIZE COORDINATE (MU) TABLE * * * ****************************************************** * PLTU DEC 0. X MIN (MU) DEC 0. Y MIN (MU) DEC 1022. X MAX (MU) DEC 1023. Y MAX (MU) ****************************************************** * * ****************************************************** * * * CHARCTER PLACEMENT INFORMATION TABLE * * * ****************************************************** * CINF DEC 0. X MIN IN CHAR. CELL DEC .6667 X MAX IN CHAR. CELL DEC 0. Y MIN IN CHAR. CELL DEC 0.6 Y MAX IN CHAR. CELL ****************************************************** * * ******************************************************* * * * LABEL DIRECTION CAPABILITY TABLE * * * ******************************************************* * LBLDR DEF *+1 OCT 1 FIXED INCREMENTS (THE 1350 IS ONLY * CAPABLE OF 0 AND 90 ROTATIONS) DEC 1.57 INCREMENT ANGLE (90 DEG.) ******************************************************* SKP *********************************************************** * * * WORKING VARIABLES * * * *********************************************************** * * ADCNT BSS 1 WORKING ADDRESS COUNTER FOR I/O BUFFER BITE BSS 1 "PUTBYTE" TEMPORARY REG. GCBCD BSS 1 GRAPHICS CONTROL BLOCK CODE NBYTE BSS 1 # OF BYTES TO BE STORED IN I-O BUFFER IOCNT BSS 1 I-O COUNT FOR EXEC (-NBYTE) LNTH BSS 1 # WORDS TO TRANSFER TO GCB TEMP BSS 1 TEMPORARY REGISTER FXDN BSS 1 FORMAT F7.N WHERE N = FXDN * * ************************************************************** * GCB INTERFACE VARIABLES * ************************************************************** * INTX1 BSS 1 DO INTX2 BSS 1 NOT INTX3 BSS 1 CHANGE INTX4 BSS 1 SEQUENCE INTX5 BSS 4 !!!!!! ************************************************************** * * ************************************************************** * * * DEVICE SAVE AREA VARIABLES * * !!!! DO NOT CHANGE SEQUENCE !!!! * * * ************************************************************** * BUFLN BSS 1 CURRENT BUFFER LENGTH (NOT USED IN DCT) PX BSS 1 X POSITION OF CURSOR (MU) PY BSS 1 Y POSITION OF CURSOR (MU) IOFLG BSS 1 BUFFERING FLAG (NOT USED IN DCT) LUN BSS 1 LU # OF GRAPHICS DEVICE IOBUF BSS 1 BEGINNING ADDRESS OF I/O BUFFER IOBL BSS 1 TOTAL LENGTH OF I/O BUFFER (NOT USED IN DCT) TCSIZ BSS 1 CURRENT CHARACTER SIZE (0,1,2 OR 3) LDIR BSS 1 CURRENT LABEL DIRECTION (0=0, 4=90) CRT# BSS 1 CRT # (0=1310, 1=1311, 2=1317, 3=1321) * ************************************************************** SKP ************************************************************** * * * ENTRY ROUTINE FOR ALL EMULATED COMMANDS * * * ************************************************************** * * EMSUB NOP EMULATOR ENTRY PONIT LDA GIC GET THE GIC CPA B177 ERROR CHECK GIC (1ST ONE THAT THE DCT SEES) JMP ERRCK YEP! GO DO ERROR CHECK * JSB SETUP GO SET THINGS UP LDA DCTAD GET EMULATE SUB CODE (DCT ADDRESS) CMA,INA CHANGE SIGN (TO POSITIVE) STA B AND STORE IT IN B-REG. LDA SBTBL GET ADDRESS OF EMULATOR TABLE JSB INDCK AND TAKE OUT THE INDIRECT BIT ADA B COMPUTE THE POINTER LDB LNGTH # OF ITEMS IN GIC (EX. PA = 2) INB INCREMENT TO ACCOMODATE CONTROL WORD STB LNTH AND STORE IT AS TOTAL LENGTH LDA A,I JMP A,I JMP TO SUB-- FOR EMULATE * * ************************** * ERROR CHECKING * ************************** * ERRCK LDA .1350 GET 1350 FOR DCT/DVG CHECK JMP EMSUB,I * .1350 DEC 1350 SKP ***************************************************** * * * EMMULATOR ROUTINES * * * ***************************************************** * * ************************************** * GET THE ID OF THE DEVICE (1350A) * ************************************** * SUB06 LDA AID GET ADDRESS OF ID LDB AP3 IT'S 3 WORDS LONG JMP USGB SEND IT BACK IN THE GICB * * ****************************** * GET THE PLOT UNITS P1,P2 * ****************************** * SUB08 JSB GCBIM GET THE MECHANICAL LIMITS FROM THE GCB DEF *+6 RETURN DEF P8 GCB LOGICAL POINTER #8 DEF P1 1 POINTER DEF INTX1 PUT INFO IN INTX1-INTX8 DEF P0 DEFAULT LENGTH = 8 WORDS DEF P1 READ IT * * * SEE IF G1X AND G2X = 0 IF YES, DO NOT CHANGE * IF NO, XFR DEFAULT G1 AND G2 TO GICB * DLD INTX1 GET G1X SZA,RSS G1X UPPER=0 SZB YEP ! G1X LOWER=0 JMP SB081 NOPE! SEND BACK CURRENT G1,G2 * DLD INTX5 GET G2X SZA,RSS G2X UPPER=0 SZB YEP! G2X LOWER=0 JMP SB081 NOPE! SEND BACK CURRENT G1,G2 * LDA APLTU ADDRESS OF DEFUALT PLOT UNIT LDB AP8 P1 = 0, 0 P2 = 1022, 1023 JMP USGB SHIP BACK DEFAULTS * SB081 LDA INX GET ADDRESS OF GCB TEMPS (INTX1) LDB AP8 THERE'S 8 BYTES JMP USGB SHIP BACK CURRENT G1,G2 * * **************************************** * GET THE CURRENT CHARACTER SIZE * **************************************** * * SUB09 LDB TCSIZ B=1350 CSIZE CMB,INB B= SHIFT COUNT LDA P1 SET MULTIPLY FACTOR CLE * * CONVERT TCSIZ (0,1,2,3) TO GET MULTIPLY FACTOR(0,2,4,8) * SB091 SZB,RSS SHIFTED ENOUGH? JMP SB092 YEP! * RAL SHIFT LEFT INB INCREMENT SHIFT COUNT JMP SB091 SEE IF WE'RE DONE * SB092 STA TEMP SAVE MULTIPLY FACTOR MPY P12 GET WIDTH IN MU'S JSB FLOAT CONVERT TO FLOAT DST INTX1 PUT IT IN GCB TEMP1,2 LDA TEMP GET THE MULTIPLY FACTOR MPY P16 GET HEIGHT IN MU'S JSB FLOAT CONVERT IT TO FLOAT DST INTX1+2 PUT HEIGHT IN GCB TEMP3,4 LDA P16 GET GICB POINTER JSB GB2 SEND THE CHAR. INFO BACK IN THE GCB JMP EMSUB,I EXIT THRU EMULATE ROUTINE * * ********************************** * GET THE CURRENT PEN POSITION * ********************************** * * SUB10 JSB GCBIM GET PX AND PY FROM THE SAVE AREA DEF GOTXY RETURN DEF P32 SAVE AREA POINTER DEF P1 1 POINTER DEF BUFLN SAVE AREA TABLE ADDRESS DEF P3 3 BYTES DEF P1 READ IT * GOTXY DLD PX GET PEN POSITION INFO. DST INTX1 STORE IT FOR TRANSFER CLA IN CASE IT USES IZ PARM STA INTX3 SHIP BACK A 0 IN IZ LDA P16 GET GICB POINTER JSB GB2 SEND POSITION BACK IN THE GICB JMP EMSUB,I EXIT THRU EMULATE ROUTINE * * * *************************** * SET LABEL DIRECTION * *************************** * * LDIR = 0 (0 DEG.) IF REQUESTED ANGLE >=0 AND <45 * LDIR = 1 (90 DEG.) IF REQUESTED ANGLE >=45 AND <135 * LDIR = 0 (0 DEG.) IF REQUESTED ANGLE >135 * SUB14 LDA P16 GET GICB POINTER JSB GB1 PUT GICB INFO INTO INTX1,3 LDA P0 SET LABEL STA LDIR DIRECTION TO 0 DLD DG45 GET 45 DEG. IN RADIANS FSB INTX2 CHECK OUT THE ANGLE REQUESTED SSA,RSS IS ANGLE < 45 DEG. JMP OUTCS YEP! LDIR=0 -- GO OUTPUT IT * DLD DG135 GET 135 DEG. IN RADIANS FSB INTX2 CHECK OUT THE ANGLE REQUESTED SSA IS ANGLE >135 DEGREES JMP OUTCS YEP! LDIR=0 -- GO OUTPUT IT * LDA P4 NOPE! IT'S IN BOUNDS STA LDIR SET LDIR = 4 = 90 DEGREES JMP OUTCS GO OUTPUT IT * ******************************** * SET THE CHARACTER SIZE * ******************************** * * SUB17 LDA P16 GET CHAR INFO FROM GICB JSB GB1 DLD INTX4 READ IN CHAR. HEIGHT JSB .IENT CONVERT TO INTEGER NOP NO ERROR ROUTINE SZA,RSS IS IT ZERO? JMP SAVSZ YEP, SAVE THE CSIZE * ALF,ALF SHIFT CSIZE 8 BITS TO THE LEFT LDB A CHECK FOR AND B377 BIG CSIZE SZA IS IT A BIGGY? JMP BIGSZ YEP! SET TO THE BIGGEST SIZE * LDA M3 SHIFT COUNTER=-3 SLOOP CLE,ELB SHIFT CSIZE LEFT ONE SEZ CSIZE = 2 OR 3? JMP NEGA YEP! GO SAVE IT * INA UPDATE SHIFT COUNT SZA DONE SHIFTING? JMP SLOOP NOPE! SHIFT IT AGAIN JMP SAVSZ YEP! SET CSIZE TO SMALLEST SIZE * NEGA CMA,INA MAKE CSIZE POSITIVE JMP SAVSZ GO SAVE IT * BIGSZ LDA P3 WE GOT THE BIGGY SAVSZ STA TCSIZ SAVE THE CSIZE JMP OUTCS OUTPUT CHAR. SIZE TO 1350 * * ***************************** * GET THE NUMBER OF PENS * ***************************** * SUB29 LDA AP1 # OF PENS = 1 LDB AP1 JMP USGB * * ************************************** * OUTPUT LABELS FOR LAXES AND LGRID * ************************************** * SUB41 LDA PE MAKE JSB WRDST SURE LDA PE+1 THAT JSB WRDST THE LDA CRLF PEN JSB WRDST IS DOWN LDA TX GET MNUMONIC FOR TEXT MODE (TX) JSB WRDST AND PUT IT IN I-O BUFFER LDA P16 GET DATA JSB GB1 FROM GICB JSB GCBIM GET THE FXDN FROM THE GCB DEF GOTFX RETURN DEF P26 FXDN LOGICAL POINTER DEF P1 1 POINTER DEF FXDN PUT IT IN FXDN DEF P0 DEFAULT LENGTH = 1 DEF P1 READ IT * GOTFX JSB GLIDE DO FLT PT. TO ASCII CONVERSION LDA P3 TEXT TERMINATOR JSB PTBYT PUT THE TERMINATOR IN THE BUFFER LDA NBYTE GET # OF BYTES LDB P2 THIS IS A WRITE(RW = 2) JSB OUTPT AND DO I-O XFR JMP EMSUB,I EXIT THRU EMULATE ROUTINE * * ******************************* * GET THE DISPLAY LIMITS * ******************************* * SUB42 LDA ADSMM GET ADDRESS OF DISPLAY SIZE TABLE JSB INDCK MAKE IT GOOD ADA CRT# INDEX IN WITH THE CRT# LDA A,I GET THE ADDRESS OF THE DISPLAY LIMITS LDB AP8 THERE'S 8 WORDS JMP USGB SHIP THE DISPLAY SIZE BACK IN THE GICB * * ******************************************* * GET THE MACHINE UNITS PER MILLIMETER * ******************************************* * SUB46 LDA AMUMM GET ADDRESS OF THE MU/MM TABLE JSB INDCK MAKE IT GOOD ADA CRT# INDEX IN WITH THE CRT# LDA A,I GET THE CRT'S MU/MM ADDRESS LDB AP4 THERE'S 4 WORDS JMP USGB SHIP THE MU/MM BACK IN THE GICB * ***************************************** * GET THE DEVICE CLEARING CAPABILITY * ***************************************** * * SUB47 LDA AP2 TRUE CLEAR (ERASE) MASK = 2 LDB AP1 ONLY 1 WORD JMP USGB SHIP IT BACK IN THE GICB * **************************** * GET # OF DIFFERENT PENS * **************************** * SUB48 JMP SUB29 # OF PENS = 1 * * ********************** * GET # OF CURSORS * ********************** * * SUB49 LDA AP0 # OF CURSORS = 0 LDB AP1 JMP USGB * ********************* * GET LORGABILITY * ********************* * SUB50 JMP SUB49 LORGABILITY = NO * * ******************************* * GET CHAR SLANT CAPABILITY * ******************************* * SUB51 LDA AP0 CHAR. SLANT = NO LDB AP4 JMP USGB * * ***************************** * GET CLIPPING CAPABILITY * ***************************** * SUB52 JMP SUB49 NO HARD CLIPPING CAPABILITY * * *********************************** * GET CHARACTER PLACEMENT INFO * *********************************** * SUB53 LDA ACINF ADDRESS OF CHARACTER PLACEMENT INFO LDB AP8 JMP USGB * * ************************************ * GET MIN/MAX CHARACTER SIZES * ************************************ * SUB54 LDA AMMCS MIN-MAX CHAR. SIZE LDB AP9 JMP USGB * * ************************** * GET LDIR CAPABILITY * ************************** * SUB55 LDA LBLDR LABEL DIRECTION = HORIZONTAL AND VERTICAL ONLY LDB AP3 JMP USGB * * ************************* * GET LORG CAPABILITY * ************************* * SUB56 LDA AP0 LORG =1 ONLY LDB AP2 JMP USGB SKP ******************************************************************* * * * UTILITY SUBROUTINES * * * ******************************************************************* * * * ********************************************** * * * USGB: WRITE DATA INTO THE GICB * * * * ON ENTRY: A = ADDRESS OF DATA (CONSTANTS)* * B = ADDRESS OF # OF WORDS * ********************************************** * * USGB STA ADDR ADDRESS OF DATA STB NUM ADDRESS OF # OF DATA ITEMS JSB GCBIM GRAPHICS CONTROL BLOCK INTERFACE MODULE DEF *+6 DEF P16 ICODE ( GCB POINTER ) DEF P1 LENGTH OF ICODE ADDR NOP BUFFER NAME * DEF ADDR,I NUM NOP BUFFER LENGTH * DEF NUM,I DEF P2 WRITE JMP EMSUB,I EXIT THRU EMULATE ROUTINE * ********************************* * * * GB1: READ DATA FROM GCB * * * * ON ENTRY: A = GCB POINTER * ********************************* * * GB1 NOP READ DATA FROM GICB STA GCBCD STORE THE GCB CODE (POINTER) JSB GCBIM GRAPHICS CONTROL BLOCK INTERFACE MODULE DEF *+6 DEF GCBCD GCB CODE (POINTER) DEF P1 LENGTH OF THE CODE DEF INTX1 BUFFER NAME DEF LNTH BUFFER LENGTH DEF P1 READ (RW = 1) JMP GB1,I RETURN * ********************************* * * * GB2: WRITE DATA INTO THE GCB * * * * ON ENTRY: A = GCB CODE * ********************************* * GB2 NOP WRITE DATA INTO GICB STA GCBCD STORE THE GCB CODE (POINTER) JSB GCBIM GRAPHICS CONTROL BLOCK INTERFACE MODULE DEF *+6 DEF GCBCD ICODE = GCB CODE (POINTER) DEF P1 LENGTH OF THE CODE = 1 DEF INTX1 BUFFER NAME DEF LNGTH BUFFER LENGTH DEF P2 WRITE (RW = 2) JMP GB2,I RETURN * ********************************************** * * * GLIDE: CONVERT FLT PT. TO ASCII * * * * ON ENTRY: INTX2 CONTAINS THE NUMBER TO * * BE CONVERTED * ********************************************** * GLIDE NOP JSB FLTAS FLT PT. TO ASCII CONVERSION DEF *+6 DEF INTX2 DATA TO BE CONVERT DEF IOBUF,I PUT RESULT BACK IN HERE DEF NBYTE # OF BYTES DEF FXDN FORMAT F7.N DEF TEMP JMP GLIDE,I RETURN * ******************************************* * * * OUTPT: WRITE TO THE DEVICE * * * * ON ENTRY: A = # OF BYTES TO BE SENT * ******************************************* * * OUTPT NOP I-0 XFR ROUTINE CMA,INA CHANGE SIGN (TO POSITIVE) STA IOCNT MAKE IT A BUFFER COUNTER FOR OUTPUT JSB REIO XFR CONTROL TO RTE (LINK TO DVR37 ??) DEF *+5 DEF P2 ICODE 2=WRITE DEF LUN CONTROL INFO. ICNWD=LU # IOB NOP BUFFER LOCATION DEF IOCNT BUFFER LENGTH JMP OUTPT,I RETURN * * ******************************************* * * * PTBYT: PUT A BYTE INTO THE I/O BUFFER * * * * ON ENTRY: A = THE BYTE TO BE INSERTED * ******************************************* * * PTBYT NOP STA BITE JSB UPDTE UPDATE ADDRESS COUNTER (ADCNT) JSB BYTE PUT CURRENT BYTE INTO NEXT AVAILABLE SPACE DEF *+4 DEF NBYTE # OF BYTES DEF BITE THE BYTE TO BE SEND DEF ADCNT,I I-O BUFFER ISZ NBYTE INCREMENT BYTE COUNT JSB UPDTE UPDATE ADDRESS COUNTER JMP PTBYT,I RETURN * ********************************************* * * * SETUP: SET UP VARIABLES NEEDED BY THE DCT * * * ********************************************* * * SETUP NOP JSB GCBIM READ DATA FROM GCB DEVICE SAVE AREA DEF *+6 RETURN DEF P32 ICODE FOR DEV. SUB. BUFFER AREA DEF P1 LENGTH OF ICODE = 1 DEF BUFLN STARTING ADDRESS OF SAVE AREA VARIABLES DEF P10 SAVE AREA SIZE =10 WORDS DEF P1 READ-WRITE CODE 1 = READ NOLOD LDA IOBUF GET THE BUFFER ADDRESS JSB INDCK MAKE IT CLEAN STA IOBUF SAVE IT AGAIN STA IOB BUFFER ADDRESS FOR OUTPUT STA ADCNT VARIABLE ADDRESS COUNTER LDA P0 CLEAR STA NBYTE THE BYTE COUNTER JMP SETUP,I RETURN * * ********************************************* * * * UPDTE: UP DATE THE ADDRESS COUNTER (ADCNT)* * * ********************************************* * UPDTE NOP UP DATE LDA NBYTE GET # OF BYTES CLE,ERA DIVIDE BY 2 ADA IOBUF ADD IT TO I-O BUFFER ADDRESS STA ADCNT STORE IT AS AN ADDRESS COUNT JMP UPDTE,I RETURN * ********************************************* * * * WRDST: STORE A WORD IN THE I/O BUFFER * * * * ON ENTRY: A = WORD TO BE SAVED * ********************************************* * * WRDST NOP STA ADCNT,I PUT IT IN THE BUFFER ISZ ADCNT BUMP UP THE ADDRESS COUNT ISZ NBYTE ADD 2 TO ISZ NBYTE THE BYTE COUNT JMP WRDST,I RETURN * ******************************************** * * * OUTCS: OUTPUT THE CHARACTER SIZE/LDIR * * TO THE 1350 * ******************************************** * * OUTCS LDA CS GET MNUMONIC FOR CHAR. SIZE JSB WRDST AND PUT IT IN I/O BUFFER LDA LDIR GET THE 1350 LDIR IOR TCSIZ OR IT WITH THE 1350 CSIZE IOR P48 MAKE IT ASCII JSB PTBYT PUT IT IN THE I/O BUFFER LDA COMMA MAKE COMMA THE TERMINATOR JSB PTBYT STICK IT IN THE I/O BUFFER LDA NBYTE GET # BYTES TO OUTPUT LDB P2 JSB OUTPT OUTPUT THE BUFFER TO THE 1350 JSB GCBIM SAVE THE CSIZE AND LDIR IN THE SAVE AREA DEF *+6 RETURN DEF P32 SAVE AREA PTR IN THE GCB DEF P1 1 POINTER DEF BUFLN START OF SAVE AREA VARIABLES DEF P9 9 WORDS (WE DON'T NEED TO SAVE THE CRT#) DEF P2 WRITE IT JMP EMSUB,I EXIT THRU EMULATE ROUTINE * * END EOF