ASMB,Q,C * * MULTIPLEXER DEVICE DRIVER FOR 26XX TERMINALS (DISPLAY/KEYBOARD ONLY) * * SOURCE: 12792-18003 &DDV05 * RELOC : 12792-16003 %DDV05 * PRGMR : GDD * ***************************************************************** * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1980. ALL RIGHTS * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * REPRODUCED OR TRANSALATED TO ANOTHER PROGRAM LANGUAGE WITHOUT * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ***************************************************************** * * THIS DRIVER EMULATES DVR05 SUBCHANNEL 0 OPERATION, INCLUDING CHARACTER * AND LINE/PAGE BLOCK MODE, EXCEPT AS FOLLOWS: * * 1. NO CHARACTER STRIPPING IS PERFORMED BY THE MUX FIRMWARE, SO ESC'S * LF'S, AND US'S ARE NEVER REMOVED FROM INPUT DATA. BE SURE THE * AUTO LINEFEED KEY IS UP, AND THAT PROGRAMS DOING FORMAT MODE DATA * ENTRY DON'T DEPEND ON US'S BEING STRIPPED. * * 2. CHARACTER MODE READS ONLY END ON CR, NOT CR OR RS * * 3. PROGRAM ENABLED BLOCK READS DO NOT REQUIRE THE 3000B FUNCTION CODE * * 4. THE DRIVER IS LESS FORGIVING OF TERMINALS IN THE WRONG MODE (BLOCK * VS CHAR, LINE VS PAGE) SO DON'T FORGET THOSE CN,LU,25B CMDS! * * 5. NOT ALL DVR05 QUIRKS ARE EMULATED (CTRL-D IN COLUMN 1 ON 2000B READS * DON'T RETURN EOT, ETC, ETC....) * * NAM DDV05,8 12792-16003 REV.2032 800602 V.02 ENT DDV05 * A EQU 0 B EQU 1 EQT5 EQU 1664B EQT6 EQU 1665B EQT14 EQU 1773B * EXST EQU * * PHBLN NOP EXCOD NOP BUFRA NOP BUFLN NOP RTN NOP STATS NOP TEMP1 NOP * EXND EQU * #EXSZ ABS EXST-EXND LEN OF EXTENT .EXST DEF EXST TMP NOP XLOG NOP * DDV05 NOP DRIVER ENTRY POINT JSB SETUP SET EXTENT POINTERS JMP NEWRQ ..NEW REQUEST LDA RTN,I ..PREVIOUS PIECE COMPLETE JMP A,I * NEWRQ LDA EQT5,I SET TO DRIVER TYPE 05 IOR #DVTP STA EQT5,I * LDA EXCOD,I GET REQUEST CODE RAR,SLA JMP CRT20 JMP CRTRD CRT READ REQUEST * CRT20 SSA,RSS JMP CRTWC CRT WRITE REQUEST * * . . . CHECK, IF CONTROL REQUEST 25 THEN PROCESS * IN THIS LOGICAL DRIVER; OTHERWISE LET THE * INTERFACE DRIVER PROCESS THE REQUEST * * CHECK, IF CONTROL REQUEST 11, THEN PROCESS IN THIS * LOGICAL DRIVER * * LDA EXCOD,I CHECK FUNCTION CODE AND B3700 CPA B2500 CONTROL REQUEST 25? JMP CN250 YES CPA B1100 CONTROL REQUEST 11? JMP CN110 YES * CRTWC EQU * * * . . . PROCESS WRITE & CONTROL REQUEST AS IS * JSB DOIT * DONE CLA JMP DDV05,I * * . . . CRT CONTROL REQUEST 11, SPACE N LINES IF THE OPTIONAL * PARAMETER IS POSITIVE; OTHERWISE, SPACE 1 LINE * CN110 EQU * LDA BUFRA,I IF THE OPTIONAL PARAMETER IS POSITIVE SSA THEN USE AS LINE SPACING CLA,INA ELSE SPACE ONLY 1 LINES AND B77 LIMIT MAX LINE SPACING CMA,INA CONVERT TO LOOP COUNTER SZA,RSS MAKE SURE COUNT IS NOT ZERO CCA STA TEMP1,I SAVE LOOP COUNTER * CN112 LDA B2 SEND A CR-LF BY SENDING A ZERO STA EXCOD,I RECORD LENGTH WRITE CLA STA BUFLN,I JSB DOIT * ISZ TEMP1,I LOOP DONE? JMP CN112 NO JMP DONE YES * * ********************* * READ REQUEST * ********************* * * . . . CHECK TO SEE IF HAVE READ STRAPPING YET * IF NOT, GET IT NOW * CRTRD LDA EQT6,I REMOVE KEEP BIT IN USER EXEC AND !BIT9 ..FUNCTION SINCE IT'S NOT USED STA EQT6,I ..IN DVR05 * LDA STATS,I RAL SSA READ STRAPPING ALREADY? JMP CRTRE YES * CN250 LDA .PTST SET ESC SEQ TO GET PRIMARY STATUS LDB DM3 JSB SETW LDA #CRRS END ON CR OR RS JSB DOIT2 SEND ESC ^ DC1 * JSB SETK2 READ ESC \ TO TEMP1 AND SAVE REST ON CARD JSB DOIT2 * JSB SETK2 READ STATUS BYTES 0 & 1 TO TEMP JSB DOIT2 * LDB TEMP1,I GET LINE/PAGE MODE BIT & RRR 3 SAVE IT IN STATUS WORD LDA STATS,I RAL RRR 1 STA STATS,I * JSB SETK2 READ BYTES 2&3 JSB DOIT2 * LDA #CNCL CANCEL REST STA EXCOD,I CLA ..ONLY CANCEL CURRENT STUFF STA BUFRA,I JSB DOIT * LDB TEMP1,I GET CHARACTER/BLOCK MODE BIT RBR LDA STATS,I ALF,RAR RRR 1 RAR,RAR STA STATS,I * LSL 2 SLB CONTROL FUNCTION 25? JMP DONE YES * INB NO LSR 2 SET FLAG FOR CN 25 SO THAT ANY STA STATS,I SUBSEQUENT ENTRY IS DUE TO CN 25 * CRTRE JSB SETD1 SET UP TO SEND DC1 * LDA EQT6,I GET REAL USER EXEC CODE AND BIT6 BINARY TRANSFER?? SZA ..IF YES... JMP RDCHR ..MUST DO KEYBOARD READ * LDA STATS,I DETERMINE IF CHARACTER OR BLOCK MODE RAL,RAL SSA JMP RDBLK BLOCK MODE READ * **************************** * CHARACTER MODE READ * **************************** * RDCHR JSB DOIT SEND DC1 * * . . . DO A READ USING USER BUFFER ADDRESS & BUFFER LENGTH * JSB DOIT * * . . . IF ECHO IS OFF, SEND A LINEFEED BEFORE * RETURNING TO THE USER. * ECHLF LDA EXCOD,I IF ECHO IS ON AND #ECBR ...OR BINARY REQUEST SZA JMP DONE NO, WE ARE DONE * STB TEMP1,I SAVE TRANSMISSION LOG * LDA B2 WRITE ZERO LENGTH RECORD STA EXCOD,I FOR ONE REQUIRED CARRIAGE RETURN LINEFEED CLA STA BUFLN,I JSB DOIT * LDB TEMP1,I RETRIEVE TRANSMISSION LOG FOR USER JMP DONE * #ECBR OCT 500 ECHO AND BINARY BITS IN EXCOD #CRRS OCT 142005 READ END ON CR OR RS DM3 DEC -3 B15 OCT 15 B2 OCT 2 DM2 DEC -2 B3700 OCT 3700 B2500 OCT 2500 B1100 OCT 1100 #RDKP OCT 3001 TRANSPARENT READ WITH KEEP #DC2 OCT 11000 DC2 #DVTP OCT 2400 DRIVER TYPE IN EQT5 B77 OCT 77 #UPPR OCT 177400 UPPER BYTE B5 OCT 5 !BIT9 OCT 176777 NOT BIT 9 #CNCL OCT 2603 CANCEL EXEC FUNCTION CODE BIT6 OCT 100 #WRTB OCT 102 BINARY WRITE EXEC CODE * ******************** * BLOCK MODE * ******************** * * . . . IF LINE MODE READ A DC2 & CRLF * IF PAGE MODE READ ONLY A DC2 * RDBLK LDA STATS,I SSA JMP PAGE * * . . . LINE MODE * LDA BKCDA STA TEMP1,I JSB DOIT2 SEND DC1 * LDA B15 JSB DOIT2 READ DC2 CR OR USER LINE * LDA BUFRA,I CHECK IF FIRST CHAR IS DC2 LDA A,I AND #UPPR CPA #DC2 RSS YUP, MORE PROCESSING NEEDED JMP DONE USER MUST HAVE NOT REALLY BEEN IN BLOCK MODE, EXIT * PAGEA JSB SETD1 SEND DC1 TO TRIGGER REAL DATA LDA TEMP1,I JSB DOIT2 * CLA,INA SET PLAIN READ (ECHO,KEEP,BI OFF) STA EXCOD,I LDA B15 JSB DOIT2 DO IT LDA TEMP1,I IF LINE MODE, SEND A CRLF CPA BKCDA JMP ECHLF JMP DONE * PAGE LDA BKCDB SET END ON RS FOR LATER STA TEMP1,I LDA BKCDC SET READ FOR DC2 OR RS JSB DOIT2 SEND DC1 * LDA B15 JSB DOIT2 READ DC2 OR DATA SZB ZERO XMIT LOG?? JMP DONE NO, MUST BE REAL DATA JMP PAGEA YES, SEND DC1 AND FINISH * * . . . READ FUNCTION CODE AND EXIT COMMAND WORD * BKCDA OCT 102005 READ, END ON CR BKCDB OCT 42005 READ, END ON RS BKCDC OCT 52005 READ, END ON DC2 OR RS * .DC1 DEF *+1 OCT 10400 DC1 * .PTST DEF *+1 BYT 33,136,21 ESC ^ DC1 GET PRIMARY TERMINAL STATUS * * . . . SET TO SEND A DC1 * SETD1 NOP LDA .DC1 CCB JSB SETW JMP SETD1,I * * . . . SET TO READ 2 BYTES, BUT DO NOT CANCEL BUFFER * SETK2 NOP LDA #RDKP STA EXCOD,I LDA TEMP1 STA BUFRA,I LDA DM2 STA BUFLN,I LDA B15 JMP SETK2,I * * . . . SETUP EXCOD, BUFRA, & BUFLN FOR BINARY WRITE * * A-REG CONTAINS BUFFER LOCATION * B-REG IS LEN * SETW NOP SET UP FOR ONE WORD BINARY WRITE STA BUFRA,I LDA #WRTB STA EXCOD,I STB BUFLN,I JMP SETW,I * DOIT2 NOP LDB DOIT2 JMP DOITA * DOIT NOP DO REQUEST SET IN EXTENT LDB DOIT SAVE RETURN ADDR LDA B5 * DOITA STB RTN,I LDB EQT14,I SET TIMER JMP DDV05,I * SETUP NOP SET EQT EXTENT POINTERS STB XLOG SAVE XMIT LOG SSA,RSS NEW REQUEST?? ISZ SETUP YES, P+2 RETURN RAL,CLE,ERA STRIP LDB #EXSZ LEN OF EXTENT (NEG) STB TMP LDB .EXST ADDR OF EXTENT POINTERS * SET2 STA B,I SET ONE INA INB BUMP'M ISZ TMP DONE? JMP SET2 NO LDB XLOG RECOVER XMIT LOG JMP SETUP,I YES * END