.TITLE RSDRIVER .IDENT 'V04-001' ; ;**************************************************************************** ;* * ;* DRIVER FOR PRINTER SM6315 * ;* * ;**************************************************************************** ; ;++ ; ; FACILITY: ; ; VAX/VMS DRIVER FOR PRINTED RUSSIAN TEXT FROM DSM ; ; Copyright (C) ,1990 Laishev R.R, ; Efremov RI,CAD Division (System Group) ; ; PATCH DZ-DRIVER-a ; ------------------------------------- ; ; $ PATCH DZDRIVER.EXE ; PATCH> EX/W 0E ; PATCH> DEP/W 0E =140 ; PATCH> UPDATE ; PATCH> ^Z ; $ ; ; ; .SBTTL DEFINE INTERNAL & EXTERNAL SYMBOLS ; ; EXTERNAL DIFINITION ; $CANDEF ; Cancel reason codes $CRBDEF ; Channel request block $DCDEF ; Device classes and types $DDBDEF ; Device data block $DEVDEF ; Device characteristics $DYNDEF ; ??????????? $IDBDEF ; Interrupt data block $IODEF ; I/O function codes $IPLDEF ; Hardware IPL definitions $IRPDEF ; I/O request packet $SSDEF ; System status codes $UCBDEF ; Unit control block $VECDEF ; Interrupt vector block $TTYDEF ; simwoly terminalxnogo drajwera $TTYDEFS ; simwoly terminalxnogo drajwera ; ; LOCAL SYMBOLS ; ; ; OFFSET FROM (AP) QIO PARAMETRS ; P1 = 0 ; First QIO parameter P2 = 4 ; Second QIO parameter P3 = 8 ; Third QIO parameter P4 = 12 ; Fourth QIO parameter P5 = 16 ; Fifth QIO parameter P6 = 20 ; Sixth QIO parameter ESC = ^O033 CTRL_N = ^O016 CTRL_O = ^O017 RS_SW = ^O001 ; ; ; Other constants ; RS_DEF_BUFSIZ = 256 ; Default buffer size ; ; opredelenie dopolnitelxnyh polej UCB ; $DEFINI UCB ; Start of UCB definitions .=UCB$C_TT_LENGTH ; konec sistemnyh polej UCB $DEF UCB$L_RSI_ADDLONG ; dop. slowo russkoj klawiatury $DEF UCB$B_RSI_GL ; # tablicy perekodirowki wwoda .BLKB 1 ; kodow lewoj ~asti ASCII-8 $DEF UCB$B_RSI_GR ; # tablicy perekodirowki wwoda .BLKB 1 ; kodow prawoj ~asti ASCII-8 $DEF UCB$B_RSI_ESC ; sme}enie w sintaksi~eskoj tabl. ESC .BLKB 1 $DEF UCB$B_RSI_FLAGS ; flagi sostoqniq klawiatury .BLKB 1 $DEF UCB$L_RSO_PORT ; pole dlq sohraneniq adresa wektora .BLKL 1 ; drajwera porta $DEF UCB$L_RSO_ADDLONG ; dop. slowo russkogo |krana $DEF UCB$B_RSO_TAB ; nomer tablicy perekodirowki |krana .BLKB 1 $DEF UCB$B_RSO_ESC ; sme}enie w sintaksi~eskoj tablice ESC .BLKB 1 $DEF UCB$B_RSO_TANK ; bufer sohraneniq simwola .BLKB 1 $DEF UCB$B_RSO_FLAGS ; upraflq`}ie flavki .BLKB 1 $DEF UCB$K_RS_UCBLEN ; dlina ras{irennogo UCB ; ; opredelenie masok bajta flavkow klawiatury ; $VIELD UCB,0,<- ; ,- ; generaciq kodow prawoj ~asti 8-ASCII ,- ; polu~en ESC ,- ; ustanowlen perehwat kodow klawiatury > ; ; opredelenie sme}enij bajta flavkow klawiatury ; $VIELD UCB,0,<- ; ,- ; generaciq kodow prawoj ~asti 8-ASCII ,- ; polu~en ESC ,- ; ustanowlen perehwat kodow klawiatury > ; ; opredelenie masok bajta flavkow |krana ; $VIELD UCB,0,<- ; ,- ; pereda~a paketa dannyh ,- ; peredatx simwol iz obl. sohr. UCB ,- ; ustanowlen perehwat kodow |krana ,- ; na~alo operacii wywoda ,- ; perehod na dop. nabor s pomo}x` SO ,- ; idet ESC - posledowatelxnostx ,- ; rezerwiruetsq ,- ; |kran w revime dopolnitelxnogo nabora > ; ; opredelenie masok bajta flavkow |krana ; $VIELD UCB,0,<- ; ,- ; pereda~a paketa dannyh ,- ; peredatx simwol iz obl. sohr. UCB ,- ; ustanowlen perehwat kodow |krana ,- ; na~alo operacii wywoda ,- ; perehod na dop. nabor s pomo}x` SO ,- ; idet ESC - posledowatelxnostx ,- ; rezerwiruetsq ,- ; |kran w revime dop nabora > $DEFEND UCB ; konec opredeleniq UCB .SBTTL standartnye tablicy ; ; prologowaq tablica ; DPTAB - ; DPT-creation macro END=RS_END,- ; End of driver label ADAPTER=NULL,- ; Adapter type FLAGS=DPT$M_NOUNLOAD,- ; Do not allow unload MAXUNITS=1,- ; koli~estwo ustrojstw UCBSIZE=,- ; Length of UCB NAME=RSDRIVER ; Driver name DPT_STORE INIT ; Start of load ; initialization table DPT_STORE UCB,UCB$B_FIPL,B,8 ; Device fork IPL DPT_STORE UCB,UCB$B_DIPL,B,22 ; Device interrupt IPL DPT_STORE UCB,UCB$L_DEVCHAR,L,<- ; Device characteristics DEV$M_IDV!- ; input device DEV$M_ODV> ; output device DPT_STORE UCB,UCB$B_DEVCLASS,B,DC$_SCOM ; Sample device class DPT_STORE UCB,UCB$W_DEVBUFSIZ,W,- ; Default buffer size RS_DEF_BUFSIZ DPT_STORE REINIT ; Start of reload ; initialization table DPT_STORE DDB,DDB$L_DDT,D,RS$DDT ; Address of DDT DPT_STORE CRB,- ; Address of controller CRB$L_INTD+VEC$L_INITIAL,- ; initialization routine D,RS_CONTROL_INIT DPT_STORE CRB,- ; Address of device CRB$L_INTD+VEC$L_UNITINIT,- ; unit initialization D,RS_UNIT_INIT ; routine DPT_STORE END ; End of initialization ; tables ; ; Driver dispatch table ; DDTAB - ; DDT-creation macro DEVNAM=RS,- ; Name of device START=RS_START,- ; Start I/O routine FUNCTB=RS_FUNCTABLE ; FDT address ; ; Function decision table ; RS_FUNCTABLE: ; FDT for driver FUNCTAB ,- ; Valid I/O functions ; Set device mode ; SETMODE,- (VALYA) ; Set device mode ; SETCHAR> (VALYA) ; Set device chars. FUNCTAB , ; No buffered functions FUNCTAB +EXE$READ,- ; FDT read routine for ; and read physical. FUNCTAB +EXE$WRITE,- ; FDT write routine for ; and write physical. FUNCTAB RS_SETMODE,- ; FDT set mode routine ; set mode. ; FUNCTAB RS_SETCHAR,- (VALYA) ; FDT set char ; ;++ ; baza programmnogo koda drajwera ;__ RS$BASE:: .SBTTL RS_CONTROL_INIT, Controller initialization routine ;++ ; RS_CONTROL_INIT, Readies controller for I/O operations ; ; Functional description: ; ; The operating system calls this routine in 3 places: ; ; at system startup ; during driver loading and reloading ; during recovery from a power failure ; ; Inputs: ; ; R4 - address of the CSR (controller status register) ; R5 - address of the IDB (interrupt data block) ; R6 - address of the DDB (device data block) ; R8 - address of the CRB (channel request block) ; ; Outputs: ; ; The routine must preserve all registers except R0-R3. ; ;-- RS_CONTROL_INIT: ; inicializaciq kontrollera ; polu~enie adresa programmy priema simwola terminalxnogo drajwera MOVL G^TTY$GL_DPT,R1 ; polu~itx adres DPT term-nogo drajwera MOVZWL DPT$W_VECTOR(R1),R0 ; polu~itx sme}. wektora term-go dr-ra ADDL R0,R1 ; polu~itx polnyj adres MOVL CLASS_PUTNXT(R1),- ; zapomnitx adres progr. priema simwola CLS_PUTNXT ; MOVL CLASS_GETNXT(R1),- ; zapomnitx adres programmy CLS_GETNXT ; pereda~i simwola ; peremestitx adresa w spiske tablic perekodirowki klawiatury MOVAL RS$BASE,R1 ; polu~itx adres bazy MOVAL RS$STREL,R0 ; polu~itx adres spiska 1$: TSTL (R0) ; konec spiska, libo peremestili ranee? BLEQ 2$ ; da - wyhod ADDL R1,(R0)+ ; wy~islitx adres BRB 1$ ; perejti k sledu`}emu 2$: RSB ; wozwrat .SBTTL RS_UNIT_INIT, Unit initialization routine ;++ ; RS_UNIT_INIT, Readies unit for I/O operations ; ; Functional description: ; ; The operating system calls this routine after calling the ; controller initialization routine: ; ; at system startup ; during driver loading ; during recovery from a power failure ; ; Inputs: ; ; R4 - address of the CSR (controller status register) ; R5 - address of the UCB (unit control block) ; ; Outputs: ; ; The routine must preserve all registers except R0-R3. ; ;-- RS_UNIT_INIT: ; inicializaciq UCB BISW #UCB$M_ONLINE, - UCB$W_STS(R5) ; Set unit online RSB ; Return .SBTTL RS_FDT_ROUTINE, Sample FDT routine ;++ ; RS_FDT_ROUTINE ; ; Functional description: ; ; sostoit iz dwuh programm, kotorye ustanawliwa`t libo ; otmenq`t perehwat potoka dannyh mevdu terminalxnym ; drajwerom i drajwerom porta. ; ; Inputs: ; ; R0-R2 - scratch registers ; R3 - address of the IRP (I/O request packet) ; R4 - address of the PCB (process control block) ; R5 - address of the UCB (unit control block) ; R6 - address of the CCB (channel control block) ; R7 - bit number of the I/O function code ; R8 - address of the FDT table entry for this routine ; R9-R11 - scratch registers ; AP - address of the 1st function dependent QIO parameter ; ; Outputs: ; ; The routine must preserve all registers except R0-R2, and ; R9-R11. ; ;-- ;++ ; programma uprawleniq perehwatom obmena |krana terminala ; ; peredawaemye parametry: ; ; P1 - adres stroki s imenem kontrollera ; ; P2 - dlina stroki imeni kontrollera ; ; P3 - nomer ustrojstwa ; ; P4 - adres slowa s harakteristikami ustrojstwa ; 1 bajt - nomer tablicy perekodirowki |krana ; 2 bajt - 0 - uprawl. simwoly perehoda k dop. naboru ne isp-sq ; 1 - perehod k dop naboru po SO/SI ; esli P4 = 0, to neobhodimo otkl`~itx ustrojstwo ot obsluviwaniq ; ;-- RS_SETMODE: ; JSB GETUCB ; najti adres UCB po imeni ustrojstwa BGEQ 10$ ; UCB ne najden, nesootwetstwie dliny TSTL P4(AP) ; prowerka na SETCHAR (VALYA) BEQL 70$ ; perehod na SETCHAR (VALYA) TSTL P5(AP) ; otkl`~aem perehwat |krana ? BEQL 4$ ; da - perehod MOVL P5(AP),R1 ; polu~itx adres harakteristik MOVB (R1)+,UCB$B_RSO_TAB(R0) ; zanesti # tablicy perekodirowki BICB #^C,- ; o~istitx pole flavkow UCB$B_RSO_FLAGS(R0) ; TSTB (R1) ; SO/SI ? BEQL 1$ ; net - perehod BISB #UCB$M_RSO_SHIFT,- ; ustanowitx priznak SO/SI UCB$B_RSO_FLAGS(R0) ; 1$: BBSS #UCB$V_RSO_SET,- ; perejti, esli perehwat ustanowlen UCB$B_RSO_FLAGS(R0),9$ ; MOVL UCB$L_TT_PORT(R0),- ; zapomnitx adr. wektora drajwera porta UCB$L_RSO_PORT(R0) ; MOVAL RS_PORT_VEC,- ; ustanowitx adres wektora UCB$L_TT_PORT(R0) ; drajwera russkih bukw MOVAL RS_GETNXT,- ; ustanowitx perehwat po UCB$L_TT_GETNXT(R0) ; wywodu i MOVAL RS_PUTNXT,- ; wwodu simwola UCB$L_TT_PUTNXT(R0) ; s terminala BRB 9$ ; 4$: BBCC #UCB$V_RSO_SET,- ; perejti, esli perehwat UCB$B_RSO_FLAGS(R0),9$ ; |krana ne ustanowlen MOVL UCB$L_RSO_PORT(R0),- ; wosstanowitx adres wektora UCB$L_TT_PORT(R0) ; drajwera porta MOVL CLS_GETNXT,- ; otkl`~itx perehwat UCB$L_TT_GETNXT(R0) ; wywodimyh simwolow 9$: BBS #UCB$V_RSI_SET,- ; perejti, esli perehwat UCB$B_RSI_FLAGS(R0),91$ ; klawiatury ustanowlen ; UCB$B_RSI_FLAGS(R0),10$ ; klawiatury ustanowlen (Nick) MOVL CLS_PUTNXT,- ; otkl`~itx perehwat UCB$L_TT_PUTNXT(R0) ; klawiatury 91$: MOVZWL #SS$_NORMAL,R0 ; normalxnoe zawer{enie 10$: CLRL R1 ; wtoroe slowo IOSB JMP G^EXE$FINISHIO ; zawer{itx operaci` ;++ ; programma uprawleniq perehwatom obmena klawiatury terminala ; ; peredawaemye parametry: ; ; P1 - adres stroki s imenem kontrollera ; ; P2 - dlina stroki imeni kontrollera ; ; P3 - nomer ustrojstwa ; ; P4 - adres slowa s harakteristikami ustrojstwa ; 1 bajt - nomer tablicy perekodirowki lewoj ~asti ASCII-8 ; 1 bajt - nomer tablicy perekodirowki prawoj ~asti ASCII-8 ; esli P4 = 0, to neobhodimo otkl`~itx ustrojstwo ot obsluviwaniq ; ;-- 70$: ; JSB GETUCB (VALYA) ; najti adres UCB po imeni ustrojstwa ; BGEQ 10$ (VALYA) ; UCB ne najden, nesootwetstwie dliny TSTL P5(AP) ; tabl. perekodirowki zadana ? BEQL 74$ ; net - perehod MOVW @P5(AP),- ; zanesti nomer tablicy UCB$B_RSI_GL(R0) ; perekodirowki BBSS #UCB$V_RSI_SET,- ; perejti, esli perehwat UCB$B_RSI_FLAGS(R0),79$ ; klawiatury ustanowlen MOVAL RS_PUTNXT,- ; polu~itx adr. progr obrabotki wwoda UCB$L_TT_PUTNXT(R0) ; i zanesti ego w UCB BRB 79$ ; zawer{itx peraci` 74$: BBCC #UCB$V_RSI_SET,- ; perejti, esli perehwat klawiatury UCB$B_RSI_FLAGS(R0),79$ ; ne ustanowlen BBS #UCB$V_RSO_SET,- ; perejti, esli ustanowlen UCB$B_RSO_FLAGS(R0),79$ ; perehwat |krana MOVL CLS_PUTNXT,- ; otkl`~itx ustrojstwo ot UCB$L_TT_PUTNXT(R0) ; obsluviwaniq 79$: MOVZWL #SS$_NORMAL,R0 ; normalxnoe zawer{enie CLRL R1 ; wtoroe slowo IOSB JMP G^EXE$FINISHIO ; zawer{itx operaci` ;++ ; poisk UCB ; ; na whode: ; ; P1(AP) - adres imeni kontrollera ; P2(AP) - dlina imeni kontrollera ; ; na wyhode: ; ; R0 - kod zawer{eniq i ss - polovitelxno ili nulx ; R0 - adres UCB i ss - otricatelxno ;-- GETUCB: MOVL P1(AP),R0 ; zanesti adres imeni kontrollera MOVL P2(AP),R1 ; zanesti dlinu imeni kontrollera JSB G^EXE$WRITECHK ; proweritx imq na dostupnostx PUSHL R3 ; oswobodim rabo~ie MOVL R0,R10 ; registry MOVL R1,R11 ; dlq CMPC3 MOVL G^IOC$GL_DEVLIST,R9 ; polu~itx adres spiska DDB 1$: MOVL (R9),R9 ; polu~itx adres sledu`}ego DDB BEQL 11$ ; perehod po koncu spiska CMPB R11,DDB$T_NAME(R9) ; sowpadaet li dlina imeni ? BNEQ 1$ ; net - i}em sledu`}ij CMPC3 R11,(R10),DDB$T_NAME+1(R9) ; srawniwaem imena BNEQ 1$ ; ne sowpwda`t - perehod MOVL P3(AP),R2 ; zanesti nomer ustrojstwa MOVL DDB$L_UCB(R9),R0 ; polu~im adres perwogo UCB BRB 3$ ; perehod na prowerku 2$: MOVL UCB$L_LINK(R0),R0 ; polu~im adres sledu`}ego UCB 3$: BEQL 11$ ; konec spiska - wyhod SOBGEQ R2,2$ ; nuvnyj UCB ?, net - perehod ; CMPW #UCB$K_RS_UCBLEN,- ; imeet li UCB ; UCB$W_SIZE(R0) ; nuvnu` dlinu ? ; BNEQ 12$ ; net - soob}itx o nesootwetstwii 4$: POPR #^M ; wosstanowim R3 MOVL R0,R0 ; ustanowitx kod uslowiq RSB ; wozwrat 11$: MOVZWL #SS$_NOSUCHDEV,R0 ; ustrojstwo ne najdeno BRB 4$ ; zawer{enie 12$: MOVZWL #SS$_IVDEVNAM,R0 ; newernoe imq ustrojstwa BRB 4$ ; zawer{enie .SBTTL RS_START, Start I/O routine ;++ ; RS_START - Start a transmit, receive, or set mode operation ; ; Functional description: ; ; T.B.S. ; ; Inputs: ; ; R3 - address of the IRP (I/O request packet) ; R5 - address of the UCB (unit control block) ; ; Outputs: ; ; R0 - 1st longword of I/O status: contains status code and ; number of bytes transferred ; R1 - 2nd longword of I/O status: device-dependent ; ; The routine must preserve all registers except R0-R2 and R4. ; ;-- RS_START: ; Process an I/O packet MOVW #SS$_NORMAL,R0 ; uspe{noe zawer{enie COMPLETE_IO: ; Driver processing is finished. REQCOM ; Complete I/O. ;++ ; programma obrabotki o~erednogo simwola ot terminala ;-- RS_PUTNXT: BICL #^C<^X7F>,R3 ; o~istim star{ij bit simwola BBS #UCB$V_RSI_ESCSEQ,- ; obrabatywaem ESC - UCB$B_RSI_FLAGS(R5),- ; posledowatelxnostx ? RS_ESCTST ; da - perehod CMPB #ESC,R3 ; polu~en ESC ? BEQL RS_ESC ; da - perehod CMPB #RS_SW,R3 ; polu~en simwol perekl`~eniq koda ? BEQL RS_CN ; da perehod ; perekodiruem simwol BBC #UCB$V_RSI_RIGHT,- ; rabotaem w prawoj ~asti ASCII-8 ? UCB$B_RSI_FLAGS(R5),1$ ; net - perehod MOVZBL UCB$B_RSI_GR(R5),R4 ; polu~im indeks tablicy prawoj ~asti BRB 2$ ; 1$: MOVZBL UCB$B_RSI_GL(R5),R4 ; polu~im indeks tablicy lewoj ~asti 2$: MOVL RSI_TABLIST[R4],R4 ; polu~im adres tablicy perekodirowki MOVZBL (R4)[R3],R3 ; perekodiruem simwol ; pereda~a simwola terminalxnomu drajweru CLSPUT: JSB @CLS_PUTNXT ; wyhod w terminalxnyj drajwer BBC #UCB$V_RSO_SET,- ; perehod, esli wywod na |kran UCB$B_RSO_FLAGS(R5),1$ ; ne perehwatywaetsq TSTB UCB$B_TT_OUTYPE(R5) ; prowerim, nuvno li |ho BEQL 1$ ; net - |ho otsutstwuet BISB #UCB$M_RSO_START,- ; ustanowim priznak na~ala operacii UCB$B_RSO_FLAGS(R5) ; BRW RS_GETNXT ; perejdem k analizu wyhodnogo potoka 1$: RSB ; wyhod iz programmy ; perekl`~enie koda klawiatury RS_CN: XORB2 #UCB$M_RSI_RIGHT,- ; inwertiruem flag UCB$B_RSI_FLAGS(R5) ; koda klawiatury CLRL R3 ; |ho ne nuvno RSB ; wozwrat k drajweru porta ; na~atx obrabotku ESC - posledowatelxnosti RS_ESC: BISB #UCB$M_RSI_ESCSEQ,- ; ustanowitx flag obrabotki UCB$B_RSI_FLAGS(R5) ; ESC - posledowatelxnosti CLRB UCB$B_RSI_ESC(R5) ; na~atx wybor sintaksisa s na~ala BRB CLSPUT ; wyhod w terminalxnyj drajwer ; prodolvitx obrabotku ESC - posledowatelxnosti RS_ESCTST: JSB RSI_SYNTAX ; wyzow programmy prowerki sintaksisa BGTR CLSPUT ; posledowatelxnostx ne okon~ena BICB #UCB$M_RSI_ESCSEQ,- ; konec ESC - posledowatelxnosti, UCB$B_RSI_FLAGS(R5) ; libo newernyj sintaksis BRB CLSPUT ; wyhod w terminalxnyj drajwer ;++ ; FUNCTIONAL DESCRIPTION: ; This routine checks the syntax of escape sequences, one ; character at a time. ; ; INPUTS: ; R3 contains the next character to be checked for correct syntax ; UCB$B_RSI_ESC(R5) contains a offset to the next syntax ; rule in the TTY$A_ESCAPE syntax table ; Assume R4 is available ; ; OUTPUTS: ; Condition codes are set: ; CC = POSITIVE means the character is syntactically correct ; CC = EQUAL means syntactic correctness and sequence is complete ; CC = NEGATIVE means error in parsing sequence ; ; If CC = POSITIVE the UCB$B_TT_ESC offset is updated. ;-- RSI_SYNTAX: MOVZBL UCB$B_RSI_ESC(R5), R4 ; get syntax rule 10$: CMPB R3, W^TTY$A_ESCAPE[R4] ; check range of character BLSSU 20$ ; branch if not this rule CMPB R3, W^TTY$A_ESCAPE+1[R4]; lower than high limit? BGTRU 20$ ; look to next rule MOVB W^TTY$A_ESCAPE+2[R4],- ; character is valid UCB$B_RSI_ESC(R5) ; save offset to next rule RSB ; offset=POS => next rule exists ; offset=0 => end of sequence ; ; Continue looking for correct sequence rule ; 20$: TSTB W^TTY$A_ESCAPE+2[R4] ; any next rule? BEQL 30$ ; no; bad syntax ADDL #3, R4 ; offset to next rule BRB 10$ ; continue syntax check 30$: MNEGL #1, R4 ; error in sequence RSB ; ; kontrolx wywoda ESC - posledowatelxnosti ; RSO_SYNTAX: MOVZBL UCB$B_RSO_ESC(R5), R4 ; get syntax rule 10$: CMPB R3, W^TTY$A_ESCAPE[R4] ; check range of character BLSSU 20$ ; branch if not this rule CMPB R3, W^TTY$A_ESCAPE+1[R4]; lower than high limit? BGTRU 20$ ; look to next rule MOVB W^TTY$A_ESCAPE+2[R4],- ; character is valid UCB$B_RSO_ESC(R5) ; save offset to next rule RSB ; offset=POS => next rule exists ; offset=0 => end of sequence ; ; Continue looking for correct sequence rule ; 20$: TSTB W^TTY$A_ESCAPE+2[R4] ; any next rule? BEQL 30$ ; no; bad syntax ADDL #3, R4 ; offset to next rule BRB 10$ ; continue syntax check 30$: MNEGL #1, R4 ; error in sequence RSB ; ; ESCAPE SYNTAX TABLE ; TTY$A_ESCAPE:: ; ESCAPE SYNTAX TABLE ; ; ESCAPE SEQUENCE <;><32:47>....<48:126> ; .ASCII /;;/ ; ";" .BYTE 10$-TTY$A_ESCAPE ; ; ; ESCAPE SEQUENCE <32:47>....<48:126> ; .ASCII /??/ ; "?" .BYTE 10$-TTY$A_ESCAPE ; ; ; ESCAPE SEQUENCE <32:47>....<64:126> ; .ASCII /OO/ ; "O" .BYTE 20$-TTY$A_ESCAPE ; ; ; ESCAPE SEQUENCE <32:126><32:126> ; .ASCII /YY/ ; "Y" .BYTE 30$-TTY$A_ESCAPE ; ; ; ANSI CONTROL SEQUENCES <[><48:63>...<32:47>...<64:126> ; .ASCII /[[/ ; "[" .BYTE 15$-TTY$A_ESCAPE ; ; ESCAPE SEQUENCE <32:47>....<48:126> ; 10$: .ASCII ! /! ; SPACE TO "/" .BYTE 10$-TTY$A_ESCAPE ; INTERMEDIATE CHARACTER .ASCII /0/<126> ; "0" TO END .BYTE 0 ; FINAL 15$: .ASCII /0?/ ; "0" TO "?" .BYTE 15$-TTY$A_ESCAPE 20$: .ASCII ! /! ; SPACE TO "/" .BYTE 20$-TTY$A_ESCAPE .ASCII /@/<126> ; "@" TO END .BYTE 0 ; END OF ESC O. 30$: .ASCII ! !<126> ; SPACE TO END .BYTE 40$-TTY$A_ESCAPE 40$: .ASCII ! !<126> ; .BYTE 0 ; ; ; ESCAPE SEQUENCES WITH MEANING FOR OUTPUT ; ; THERE IS A CORRELATION BETWEEN THIS TABLE AND CODE! ; TTY$A_ESC_OUT:: .ASCIC /ABCDHIYFGKZ>=\[/ ; ;++ ; programma obrabotki potoka wywoda ;-- RS_GETNXT: BBSC #UCB$V_RSO_START,- ; perehod, esli zadano na~alo UCB$B_RSO_FLAGS(R5),3$ ; operacii wywoda ; ; analiz o~erednogo peredawaemogo simwola ; 100$: BBCC #UCB$V_RSO_HOLD,- ; perehod, esli simwola w oblasti UCB$B_RSO_FLAGS(R5),1$ ; sohraneniq net MOVB UCB$B_RSO_TANK(R5),R3 ; izwle~x sohranennyj simwol dlq BRB 4$ ; posledu`}ego wywoda 1$: BBC #UCB$V_RSO_BURST,- ; perehod, esli dannye pereda`tsq UCB$B_RSO_FLAGS(R5),2$ ; ne paketom MOVB @UCB$L_TT_OUTADR(R5),R3 ; izwle~x o~erednoj simwol paketa INCL UCB$L_TT_OUTADR(R5) ; uweli~itx teku}ij adres DECW UCB$W_TT_OUTLEN(R5) ; umenx{itx s~et~ik bajtow BGTR 4$ ; perehod, esli bajt ne poslednij BICB #UCB$M_RSO_BURST,- ; o~istitx priznak paketnoj UCB$B_RSO_FLAGS(R5) ; pereda~i BRB 4$ 2$: JSB @CLS_GETNXT ; polu~itx o~erednu` porci` wywoda 3$: TSTB UCB$B_TT_OUTYPE(R5) ; ~to sleduet wywesti ? BEQL 11$ ; konec operacii BGTR 4$ ; odino~nyj simwol BRW 12$ ; paket 4$: ; odino~nyj simwol MOVZBL R3,R3 ; o~istim star{ie bity registra CMPB #ESC,R3 ; peredaem ESC ? BNEQ 5$ ; net - perehod BISB #UCB$M_RSO_ESCSEQ,- ; ustanowitx priznak pereda~i UCB$B_RSO_FLAGS(R5) ; ESC - posledowatelxnosti CLRB UCB$B_RSO_ESC(R5) ; ust. na~alo sintaksi~eskoj prowerki BRB 10$ ; peredatx simwol 5$: BBC #UCB$V_RSO_ESCSEQ,- ; perehod, esli peredaem ne UCB$B_RSO_FLAGS(R5),6$ ; ESC - posledowatelxnostx JSB RSO_SYNTAX ; perejti k sintaksi~eskoj prowerke BGTR 10$ ; perehod, esli posl-tx ne okon~ena BICB #UCB$M_RSO_ESCSEQ,- ; sbrositx flag pereda~i UCB$B_RSO_FLAGS(R5) ; ESC - posledowatelxnosti BRB 10$ ; peredatx simwol ; ; perekodirowka o~erednogo simwola ; 6$: MOVB R3,UCB$B_RSO_TANK(R5) ; zapomnitx simwol w oblasti sohr-q MOVZBL UCB$B_RSO_TAB(R5),R4 ; polu~itx nomer tabl. perekodirowki MOVL RSO_TABLIST[R4],R4 ; polu~itx adres tablicy perekodirowki MOVB (R4)[R3],R3 ; perekodiruem simwol BBC #UCB$V_RSO_SHIFT,- ; perehod, esli ne nuvny SO/SI UCB$B_RSO_FLAGS(R5),10$ ; TSTB R3 ; simwol iz dopolnitelxnogo nabora ? BLSS 9$ ; da - perehod BBCC #UCB$V_RSO_RIGHT,- ; perehod, esli |kran nahoditsq UCB$B_RSO_FLAGS(R5),10$ ; w revime osnownogo nabora MOVB #CTRL_O,R3 ; wydatx SI BISB #UCB$M_RSO_HOLD,- ; ustanowitx priznak nali~iq simwola UCB$B_RSO_FLAGS(R5) ; w oblasti sohraneniq BRB 10$ ; wywesti simwol 9$: BBSS #UCB$V_RSO_RIGHT,- ; perehod, esli |kran nahoditsq UCB$B_RSO_FLAGS(R5),10$ ; w revime alxternatiwnogo nabora simw. MOVB #CTRL_N,R3 ; wydatx SO BISB #UCB$M_RSO_HOLD,- ; ustanowitx priznak nali~iq simwola UCB$B_RSO_FLAGS(R5) ; w oblasti sohraneniq 10$: MOVB #1,UCB$B_TT_OUTYPE(R5) ; priznak wywoda odino~nogo simwola BISB #UCB$M_INT,UCB$W_STS(R5) ; ust. priznak ovidaniq prerywaniq BBS #TTY$V_PC_NOTIME,- ; perehod, esli rabotaem bez tajmauta UCB$W_TT_PRTCTL(R5),110$ BISB #UCB$M_TIM,UCB$W_STS(R5) ; ustanowitx priznak tajmauta 11$: ADDL3 #2,G^EXE$GL_ABSTIM,- ; ustanowitx dlinu tajmauta UCB$L_DUETIM(R5) ; 110$: TSTB UCB$B_TT_OUTYPE(R5) ; ustanowitx kod uslowiq RSB ; wyhod iz programmy ; ; na~alo pereda~i paketa ; 12$: BISB #UCB$M_RSO_BURST,- ; ustanowitx priznak pereda~i paketa UCB$B_RSO_FLAGS(R5) ; BRW 100$ ; perehod na analiz pered-go simwola ;++ ; zapusk wywoda na |kran ;-- RS_STARTIO: BGEQ 1$ ; ustanowim sposob pereda~i dannyh MOVB #-1,UCB$B_TT_OUTYPE(R5) ; pereda~a paketom BRB 2$ ; podgotowka k wyhodu 1$: MOVB #1,UCB$B_TT_OUTYPE(R5) ; pereda~a odino~nogo simwola 2$: PUSHL #PORT_STARTIO ; wy~islim adres programmy ADDL UCB$L_RSO_PORT(R5),(SP) ; zapuska wywoda MOVL @(SP),(SP) ; informacii na terminal BISB #UCB$M_RSO_START,- ; ustanowim priznak na~ala UCB$B_RSO_FLAGS(R5) ; wywoda BRW RS_GETNXT ; perejti k obrabotke wyh. potoka ;++ ; programmy perehwata wywoda na |kran ; dannye programmy ne wypolnq`t nikakih dejstwij ; i pereda`t uprawlenie sootwetstwu`}ej programme ; drajwera porta ;-- RS_DISCONNECT: PUSHL #PORT_DISCONNECT BRB TOPORT RS_SET_LINE: PUSHL #PORT_SET_LINE BRB TOPORT RS_DS_SET: PUSHL #PORT_DS_SET BRB TOPORT RS_XON: PUSHL #PORT_XON BRB TOPORT RS_XOFF: PUSHL #PORT_XOFF BRB TOPORT RS_STOP: PUSHL #PORT_STOP BRB TOPORT RS_STOP2: PUSHL #PORT_STOP2 RS_ABORT: PUSHL #PORT_ABORT BICB #UCB$M_RSO_BURST,- ; sbrosit priznak pereda~i paketa, UCB$B_RSO_FLAGS(R5) ; esli on slu~ajno ustanowlen BRB TOPORT RS_RESUME: PUSHL #PORT_RESUME BRB TOPORT RS_SET_MODEM: PUSHL #PORT_SET_MODEM BRB TOPORT RS_DMA: PUSHL #PORT__DMA BRB TOPORT RS_MAINT: PUSHL #PORT_MAINT BRB TOPORT RS_FORKRET: PUSHL #PORT_FORKRET BRB TOPORT TOPORT: ADDL UCB$L_RSO_PORT(R5),- ; wy~islitx adres sootwetstwu`}ego (SP) ; |lementa w wektore drajwera porta MOVL @(SP),(SP) ; zanesti w stek adres perehoda MOVL R3,R3 ; ustanowitx kod uslowiq RSB ; wyhod w drajwer porta ;++ ; adres programm obrabotki simwola terminalxnogo drajwera ;-- CLS_PUTNXT: ; obrabotka simwola wwoda s klawiatury .BLKL 1 CLS_GETNXT: ; polu~enie simwolow wywoda na |kran terminala .BLKL 1 ;++ ; na~alo oblasti pereme}aemyh adresnyh konstant ;-- RS$STREL: ;++ ; wektor porta wywoda na |kran ;-- RS_PORT_VEC: .LONG RS_STARTIO - RS$BASE .LONG RS_DISCONNECT - RS$BASE .LONG RS_SET_LINE - RS$BASE .LONG RS_DS_SET - RS$BASE .LONG RS_XON - RS$BASE .LONG RS_XOFF - RS$BASE .LONG RS_STOP - RS$BASE .LONG RS_STOP2 - RS$BASE .LONG RS_ABORT - RS$BASE .LONG RS_RESUME - RS$BASE .LONG RS_SET_MODEM - RS$BASE .LONG RS_DMA - RS$BASE .LONG RS_MAINT - RS$BASE .LONG RS_FORKRET - RS$BASE ;++ ; spisok adresow tablic perekodirowki klawiatury ;-- RSI_TABLIST: .LONG VT200GL - RS$BASE .LONG VT200GR - RS$BASE .LONG DVK - RS$BASE ;++ ; spisok adresow tablic perekodirowki |krana ;-- RSO_TABLIST: .LONG VT200SCR - RS$BASE .LONG DVKSCR - RS$BASE .LONG P600SCR - RS$BASE .LONG LQ2SCR - RS$BASE .LONG RKDSCR - RS$BASE ;++ ; ;-- .LONG 0 ;++ ; tablicy perekodirowki kodow, wwodimyh s klawiatury ;-- RSI_KEYTAB: ; tablica klawiatury VT200 ; Main ASCII Table VT200GL: .BYTE ^X00,^X01,^X02,^X03,^X04,^X05,^X06,^X07 ; 00 - 07 .BYTE ^X08,^X09,^X0A,^X0B,^X0C,^X0D,^X0E,^X0F ; 08 - 0F .BYTE ^X10,^X11,^X12,^X13,^X14,^X15,^X16,^X17 ; 10 - 17 .BYTE ^X18,^X19,^X1A,^X1B,^X1C,^X1D,^X1E,^X1F ; 18 - 1F .BYTE ^X20,^X21,^X22,^X23,^X24,^X25,^X26,^X27 ; 20 - 27 .BYTE ^X28,^X29,^X2A,^X2B,^X2C,^X2D,^X2E,^X2F ; 28 - 2F .BYTE ^X30,^X31,^X32,^X33,^X34,^X35,^X36,^X37 ; 30 - 37 .BYTE ^X38,^X39,^X3A,^X3B,^X3C,^X3D,^X3E,^X3F ; 38 - 3F .BYTE ^X40,^X41,^X42,^X43,^X44,^X45,^X46,^X47 ; 40 - 47 .BYTE ^X48,^X49,^X4A,^X4B,^X4C,^X4D,^X4E,^X4F ; 48 - 4F .BYTE ^X50,^X51,^X52,^X53,^X54,^X55,^X56,^X57 ; 50 - 57 .BYTE ^X58,^X59,^X5A,^X5B,^X5C,^X5D,^X5E,^X5F ; 58 - 5F ; ; Edit by Laishev R.R. 1991 , for users DSM ; Table of ASCII for input ; .BYTE ^X7D,^X60,^X61,^X76,^X64,^X65,^X74,^X63 ; 60 - 67 .BYTE ^X75,^X68,^X69,^X6A,^X6B,^X6C,^X6D,^X6E ; 68 - 6F .BYTE ^X6F,^X7E,^X70,^X71,^X72,^X73,^X66,^X62 ; 70 - 77 .BYTE ^X7A,^X7B,^X67,^X78,^X7C,^X79,^X77,^X7F ; 78 - 7F ; russkie bukwy na klawiature VT200 VT200GR: .BYTE ^X00,^X01,^X02,^X03,^X04,^X05,^X06,^X07 ; 00 - 07 .BYTE ^X08,^X09,^X0A,^X0B,^X0C,^X0D,^X0E,^X0F ; 08 - 0F .BYTE ^X10,^X11,^X12,^X13,^X14,^X15,^X16,^X17 ; 10 - 17 .BYTE ^X18,^X19,^X1A,^X1B,^X1C,^X1D,^X1E,^X1F ; 18 - 1F .BYTE ^X20,^X23,^XD8,^X2F,^X22,^X3A,^X2E,^XFB ; 20 - 27 ; ! # " | # / $ " % : & . ' | .BYTE ^X3F,^X25,^X5F,^X2B,^XDC,^X24,^XFC,^XE2 ; 28 - 2F ; ( ? ) % * _ + + , b - $ . ` / e .BYTE ^X30,^X31,^X32,^X33,^X34,^X35,^X36,^X37 ; 30 - 37 ; 0 0 1 1 2 2 3 3 4 4 5 5 6 6 7 7 .BYTE ^X38,^X39,^XC0,^XE3,^XB9,^X3D,^XD9,^XBF ; 38 - 3F ; 8 8 9 9 : v ; v < b = = > ` ? e .BYTE ^X2D,^XCE,^XC2,^XCB,^XBA,^XCD,^XB7,^XC9 ; 40 - 47 ; @ - A f B i C s D w E u F a G p .BYTE ^XCA,^XD3,^XC8,^XC5,^XBC,^XD5,^XCC,^XD4 ; 48 - 4F ; H r I { J o K l L d M x N t O } .BYTE ^XC1,^XC3,^XC4,^XD6,^XBD,^XBB,^XC6,^XD1 ; 50 - 57 ; P z Q j R k S y T e U g V m W c .BYTE ^XD2,^XC7,^XDA,^XF3,^X29,^XFA,^X2C,^X21 ; 58 - 5F ; X ~ Y n Z q [ h \ ) [ ' ^ , _ ! .BYTE ^X27,^XF2,^XE5,^XEE,^XDD,^XF1,^XDB,^XEC ; 60 - 67 ; ' a f b i c s d w e u f a g p .BYTE ^XED,^XF6,^XEB,^XE8,^XE0,^XF8,^XEF,^XF7 ; 68 - 6F ; h r i { j o k l l d m x n t o } .BYTE ^XE4,^XE6,^XE7,^XF9,^XE1,^XDF,^XE9,^XF4 ; 70 - 77 ; p z q j r k s y t e u g v m w c .BYTE ^XF5,^XEA,^XFD,^XCF,^X28,^XD7,^X3B,^X7F ; 78 - 7F ; x ~ y n z q { h | ( } ' ~ ; ; russkie bukwy na klawiature DVK DVK: .BYTE ^X00,^X01,^X02,^X03,^X04,^X05,^X06,^X07 .BYTE ^X08,^X09,^X0A,^X0B,^X0C,^X0D,^X0E,^X0F .BYTE ^X10,^X11,^X12,^X13,^X14,^X15,^X16,^X17 .BYTE ^X18,^X19,^X1A,^X1B,^X1C,^X1D,^X1E,^X1F .BYTE ^X20,^X21,^X22,^X23,^X24,^X25,^XD7,^X27 .BYTE ^X28,^X29,^X2A,^X2B,^X2C,^X2D,^X2E,^X2F .BYTE ^X30,^X31,^X32,^X33,^X34,^X35,^X36,^X37 .BYTE ^X38,^X39,^X3A,^X3B,^X3C,^X3D,^X3E,^X3F .BYTE ^XFC,^XDB,^XDC,^XF4,^XE0,^XE1,^XF2,^XDF .BYTE ^XF3,^XE5,^XE6,^XE7,^XE8,^XE9,^XEA,^XEB .BYTE ^XEC,^XFD,^XED,^XEE,^XEF,^XF1,^XE3,^XDD .BYTE ^XF8,^XF9,^XE4,^XF6,^XFB,^XF7,^XF5,^XFA .BYTE ^XD9,^XB7,^XB9,^XD1,^XBC,^XBD,^XCE,^XBB .BYTE ^XCF,^XC2,^XC3,^XC4,^XC5,^XC6,^XC7,^XC8 .BYTE ^XC9,^XDA,^XCA,^XCB,^XCC,^XCD,^XC0,^XBA .BYTE ^XD5,^XD6,^XC1,^XD3,^XD8,^XD4,^XD2,^X7F ;++ ; tablicy perekodirowki informacii, wywodimoj na |kran ;-- RSO_SCRTAB: ; ; |kran tipa VT200 ; VT200SCR: .BYTE ^X00,^X01,^X02,^X03,^X04,^X05,^X06,^X07 ; 00 - 07 .BYTE ^X08,^X09,^X0A,^X0B,^X0C,^X0D,^X0E,^X0F ; 08 - 0F .BYTE ^X10,^X11,^X12,^X13,^X14,^X15,^X16,^X17 ; 10 - 17 .BYTE ^X18,^X19,^X1A,^X1B,^X1C,^X1D,^X1E,^X1F ; 18 - 1F .BYTE ^X20,^X21,^X22,^X23,^X24,^X25,^X26,^X27 ; 20 - 27 .BYTE ^X28,^X29,^X2A,^X2B,^X2C,^X2D,^X2E,^X2F ; 28 - 2F .BYTE ^X30,^X31,^X32,^X33,^X34,^X35,^X36,^X37 ; 30 - 37 .BYTE ^X38,^X39,^X3A,^X3B,^X3C,^X3D,^X3E,^X3F ; 38 - 3F .BYTE ^X40,^X41,^X42,^X43,^X44,^X45,^X46,^X47 ; 40 - 47 .BYTE ^X48,^X49,^X4A,^X4B,^X4C,^X4D,^X4E,^X4F ; 48 - 4F .BYTE ^X50,^X51,^X52,^X53,^X54,^X55,^X56,^X57 ; 50 - 57 .BYTE ^X58,^X59,^X5A,^X5B,^X5C,^X5D,^X5E,^X5F ; 58 - 5F ; ; Edit by Laishev R.R. 1991 , for users DSM ; Table of ASCII for output ; .BYTE ^X61,^X62,^X77,^X67,^X64,^X65,^X76,^X7A ; 60 - 67 .BYTE ^X69,^X6A,^X6B,^X6C,^X6D,^X6E,^X6F,^X70 ; 68 - 6F .BYTE ^X72,^X73,^X74,^X75,^X66,^X68,^X63,^X7E ; 70 - 77 .BYTE ^X7B,^X7D,^X78,^X79,^X7C,^X60,^X71,^X7F ; 78 - 7F ; ; ; ; .BYTE ^X80,^X81,^X82,^X83,^X84,^X85,^X86,^X87 ; 80 - 87 .BYTE ^X88,^X89,^X8A,^X8B,^X8C,^X8D,^X8E,^X8F ; 88 - 8F .BYTE ^X90,^X91,^X92,^X93,^X94,^X95,^X96,^X97 ; 90 - 97 .BYTE ^X98,^X99,^X9A,^X9B,^X9C,^X9D,^X9E,^X9F ; 98 - 9F .BYTE ^XA0,^XA1,^XA2,^XA3,^XA4,^XA5,^XA6,^XA7 ; A0 - A7 .BYTE ^XA8,^XA9,^XAA,^XAB,^XAC,^XAD,^XAE,^XAF ; A8 - AF .BYTE ^XB0,^XB1,^XB2,^XB3,^XB4,^XB5,^XB6,^XB7 ; B0 - B7 .BYTE ^XB8,^XB9,^XBA,^XBB,^XBC,^XBD,^XBE,^XBF ; B8 - BF .BYTE ^XC0,^XC1,^XC2,^XC3,^XC4,^XC5,^XC6,^XC7 ; C0 - C7 .BYTE ^XC8,^XC9,^XCA,^XCB,^XCC,^XCD,^XCE,^XCF ; C8 - CF .BYTE ^XD0,^XD1,^XD2,^XD3,^XD4,^XD5,^XD6,^XD7 ; D0 - D7 .BYTE ^XD8,^XD9,^XDA,^XDB,^XDC,^XDD,^XDE,^XDF ; D8 - DF .BYTE ^XE0,^XE1,^XE2,^XE3,^XE4,^XE5,^XE6,^XE7 ; E0 - E7 .BYTE ^XE8,^XE9,^XEA,^XEB,^XEC,^XED,^XEE,^XEF ; E8 - EF .BYTE ^XF0,^XF1,^XF2,^XF3,^XF4,^XF5,^XF6,^XF7 ; F0 - F7 .BYTE ^XF8,^XF9,^XFA,^XFB,^XFC,^XFD,^XFE,^XFF ; F8 - FF ;++ ; |kran dwk ;-- DVKSCR: .BYTE ^X00,^X01,^X02,^X03,^X04,^X05,^X06,^X07 .BYTE ^X08,^X09,^X0A,^X0B,^X0C,^X0D,^X0E,^X0F .BYTE ^X10,^X11,^X12,^X13,^X14,^X15,^X16,^X17 .BYTE ^X18,^X19,^X1A,^X1B,^X1C,^X1D,^X1E,^X1F .BYTE ^X20,^X21,^X22,^X23,^X24,^X25,^X26,^X27 .BYTE ^X28,^X29,^X2A,^X2B,^X2C,^X2D,^X2E,^X2F .BYTE ^X30,^X31,^X32,^X33,^X34,^X35,^X36,^X37 .BYTE ^X38,^X39,^X3A,^X3B,^X3C,^X3D,^X3E,^X3F .BYTE ^X40,^X41,^X42,^X43,^X44,^X45,^X46,^X47 .BYTE ^X48,^X49,^X4A,^X4B,^X4C,^X4D,^X4E,^X4F .BYTE ^X50,^X51,^X52,^X53,^X54,^X55,^X56,^X57 .BYTE ^X58,^X59,^X5A,^X5B,^X5C,^X5D,^X5E,^X5F .BYTE ^X60,^X61,^X62,^X63,^X64,^X65,^X66,^X67 .BYTE ^X68,^X69,^X6A,^X6B,^X6C,^X6D,^X6E,^X6F .BYTE ^X70,^X71,^X72,^X73,^X74,^X75,^X76,^X77 .BYTE ^X78,^X79,^X7A,^X7B,^X7C,^X7D,^X7E,^X7F .BYTE ^X80,^X81,^X82,^X83,^X84,^X85,^X86,^X87 .BYTE ^X88,^X89,^X8A,^X8B,^X8C,^X8D,^X8E,^X8F .BYTE ^X90,^X91,^X92,^X93,^X94,^X95,^X96,^X97 .BYTE ^X98,^X99,^X9A,^X9B,^X9C,^X9D,^X9E,^X9F .BYTE ^XA0,^XA1,^XA2,^XA3,^XA4,^XA5,^XA6,^XA7 .BYTE ^XA8,^XA9,^XAA,^XAB,^XAC,^XAD,^XAE,^XAF .BYTE ^XB0,^XB1,^XB2,^XB3,^XB4,^XB5,^X24,^XE1 .BYTE ^X3F,^XE2,^XF7,^XE7,^XE4,^XE5,^X3F,^XE5 .BYTE ^XF6,^XFA,^XE9,^XEA,^XEB,^XEC,^XED,^XEE .BYTE ^XEF,^XF0,^XF2,^XF3,^XF4,^XF5,^XE6,^XE8 .BYTE ^X3F,^XE3,^XFE,^XFB,^XFD,^XF8,^XF9,^XFF .BYTE ^XFC,^XE0,^XF1,^XC1,^XC2,^XD7,^X3F,^XC7 .BYTE ^XC4,^XC5,^XC5,^XD6,^XDA,^XC9,^XCA,^XCB .BYTE ^XCC,^XCD,^XCE,^XCF,^XD0,^XD2,^XD3,^XD4 .BYTE ^X3F,^XD5,^XC6,^XC8,^XC3,^XDE,^XDB,^XDD .BYTE ^XD8,^XD9,^XDF,^XDC,^XC0,^XD1,^X3F,^X3F ; ; wyda~a na PRINTRONIX P600 ; P600SCR: .BYTE ^X00,^X01,^X02,^X03,^X04,^X05,^X06,^X07 .BYTE ^X08,^X09,^X0A,^X0B,^X0C,^X0D,^X0E,^X0F .BYTE ^X10,^X11,^X12,^X13,^X14,^X15,^X16,^X17 .BYTE ^X18,^X19,^X1A,^X1B,^X1C,^X1D,^X1E,^X1F .BYTE ^X20,^X21,^X22,^X23,^X24,^X25,^X26,^X27 .BYTE ^X28,^X29,^X2A,^X2B,^X2C,^X2D,^X2E,^X2F .BYTE ^X30,^X31,^X32,^X33,^X34,^X35,^X36,^X37 .BYTE ^X38,^X39,^X3A,^X3B,^X3C,^X3D,^X3E,^X3F .BYTE ^X40,^X41,^X42,^X43,^X44,^X45,^X46,^X47 .BYTE ^X48,^X49,^X4A,^X4B,^X4C,^X4D,^X4E,^X4F .BYTE ^X50,^X51,^X52,^X53,^X54,^X55,^X56,^X57 .BYTE ^X58,^X59,^X5A,^X5B,^X5C,^X5D,^X5E,^X5F .BYTE ^X60,^X61,^X62,^X63,^X64,^X65,^X66,^X67 .BYTE ^X68,^X69,^X6A,^X6B,^X6C,^X6D,^X6E,^X6F .BYTE ^X70,^X71,^X72,^X73,^X74,^X75,^X76,^X77 .BYTE ^X78,^X79,^X7A,^X7B,^X7C,^X7D,^X7E,^X7F .BYTE ^X80,^X81,^X82,^X83,^X84,^X85,^X86,^X87 .BYTE ^X88,^X89,^X8A,^X8B,^X8C,^X8D,^X8E,^X8F .BYTE ^X90,^X91,^X92,^X93,^X94,^X95,^X96,^X97 .BYTE ^X98,^X99,^X9A,^X9B,^X9C,^X9D,^X9E,^X9F .BYTE ^XA0,^XA1,^XA2,^XA3,^XA4,^XA5,^XA6,^XA7 .BYTE ^XA8,^XA9,^XAA,^XAB,^XAC,^XAD,^XAE,^XAF .BYTE ^XB0,^XB1,^XB2,^XB3,^XB4,^XB5,^X24,^XE1 .BYTE ^X3F,^XE2,^XF7,^XE7,^XE4,^XE5,^X3F,^XE5 .BYTE ^XF6,^XFA,^XE9,^XEA,^XEB,^XEC,^XED,^XEE .BYTE ^XEF,^XF0,^XF2,^XF3,^XF4,^XF5,^XE6,^XE8 .BYTE ^X3F,^XE3,^XFE,^XFB,^XFD,^XF8,^XF9,^XFF .BYTE ^XFC,^XE0,^XF1,^XC1,^XC2,^XD7,^X3F,^XC7 .BYTE ^XC4,^XC5,^XC5,^XD6,^XDA,^XC9,^XCA,^XCB .BYTE ^XCC,^XCD,^XCE,^XCF,^XD0,^XD2,^XD3,^XD4 .BYTE ^X3F,^XD5,^XC6,^XC8,^XC3,^XDE,^XDB,^XDD .BYTE ^XD8,^XD9,^XDF,^XDC,^XC0,^XD1,^X3F,^X3F ; ; LQP02 russkaq roma{ka 903 ; LQ2SCR: .BYTE ^X00,^X01,^X02,^X03,^X04,^X05,^X06,^X07 ; 00 - 07 .BYTE ^X08,^X09,^X0A,^X0B,^X0C,^X0D,^X0E,^X0F ; 08 - 0F .BYTE ^X10,^X11,^X12,^X13,^X14,^X15,^X16,^X17 ; 10 - 17 .BYTE ^X18,^X19,^X1A,^X1B,^X1C,^X1D,^X1E,^X1F ; 18 - 1F .BYTE ^X20,^X21,^X22,^X20,^X20,^X25,^X20,^X20 ; 20 - 27 ; ! " % .BYTE ^X28,^X29,^X2A,^X2B,^X2C,^X2D,^X2E,^X2F ; 28 - 2F ; ( ) * + , - . / .BYTE ^X30,^X31,^X32,^X33,^X34,^X35,^X36,^X37 ; 30 - 37 ; 0 1 2 3 4 5 6 7 .BYTE ^X38,^X39,^X3A,^X3B,^X3C,^X3D,^X3E,^X3F ; 38 - 3F ; 8 9 : ; < = > ? .BYTE ^X20,^X20,^X20,^X20,^X20,^X20,^X20,^X20 ; 40 - 47 .BYTE ^X20,^X20,^X20,^X20,^X20,^X20,^X20,^X20 ; 48 - 4F .BYTE ^X20,^X20,^X20,^X20,^X20,^X20,^X20,^X20 ; 50 - 57 .BYTE ^X20,^X20,^X20,^X20,^X20,^X20,^X20,^X5F ; 58 - 5F ; _ .BYTE ^X20,^X20,^X20,^X20,^X20,^X20,^X20,^X20 ; 60 - 67 .BYTE ^X20,^X20,^X20,^X20,^X20,^X20,^X20,^X20 ; 68 - 6F .BYTE ^X20,^X20,^X20,^X20,^X20,^X20,^X20,^X20 ; 70 - 77 .BYTE ^X20,^X20,^X20,^X20,^X20,^X20,^X20,^X7F ; 78 - 7F .BYTE ^X80,^X81,^X82,^X83,^X84,^X85,^X86,^X87 ; 80 - 87 .BYTE ^X88,^X89,^X8A,^X8B,^X8C,^X8D,^X8E,^X8F ; 88 - 8F .BYTE ^X90,^X91,^X92,^X93,^X94,^X95,^X96,^X97 ; 90 - 97 .BYTE ^X98,^X99,^X9A,^X9B,^X9C,^X9D,^X9E,^X9F ; 98 - 9F .BYTE ^X20,^X20,^X20,^X20,^X24,^X20,^X23,^X20 ; A0 - A7 ; $ # .BYTE ^X20,^X20,^X20,^X20,^X20,^X20,^X20,^X20 ; A8 - AF .BYTE ^X20,^X20,^X20,^X20,^X20,^X20,^X20,^X20 ; B0 - B7 .BYTE ^X20,^X20,^X20,^X20,^X20,^X61,^X62,^X77 ; B8 - BF ; a b w .BYTE ^X67,^X64,^X65,^X65,^X76,^X7A,^X69,^X6A ; C0 - C7 ; g d e e v z i j .BYTE ^X6B,^X6C,^X6D,^X6E,^X6F,^X70,^X72,^X73 ; C8 - CF ; k l m n o p r s .BYTE ^X74,^X75,^X66,^X68,^X63,^X7E,^X7B,^X7D ; D0 - D7 ; t u f h c ~ { } .BYTE ^X27,^X79,^X78,^X7C,^X60,^X71,^X41,^X42 ; D8 - DF ; ' y x | ` q a b .BYTE ^X57,^X47,^X44,^X45,^X45,^X56,^X5A,^X49 ; E0 - E7 ; w g d e e v z i .BYTE ^X4A,^X4B,^X4C,^X4D,^X4E,^X4F,^X50,^X52 ; E8 - EF ; j k l m n o p r .BYTE ^X53,^X54,^X55,^X46,^X48,^X43,^X5E,^X5B ; F0 - F7 ; s t u f h c ~ { .BYTE ^X5D,^X26,^X59,^X58,^X5C,^X40,^X51,^XFF ; F8 - FF ; } ' y x | ` q ; ; grafopostroitelx RIKADENKY ; RKDSCR: .BYTE ^X00,^X01,^X02,^X03,^X04,^X05,^X06,^X07 ; 00 - 07 .BYTE ^X08,^X09,^X0A,^X0B,^X0C,^X0D,^X0E,^X0F ; 08 - 0F .BYTE ^X10,^X11,^X12,^X13,^X14,^X15,^X16,^X17 ; 10 - 17 .BYTE ^X18,^X19,^X1A,^X1B,^X1C,^X1D,^X1E,^X1F ; 18 - 1F .BYTE ^X20,^X21,^X22,^X23,^X24,^X25,^X26,^X27 ; 20 - 27 .BYTE ^X28,^X29,^X2A,^X2B,^X2C,^X2D,^X2E,^X2F ; 28 - 2F .BYTE ^X30,^X31,^X32,^X33,^X34,^X35,^X36,^X37 ; 30 - 37 .BYTE ^X38,^X39,^X3A,^X3B,^X3C,^X3D,^X3E,^X3F ; 38 - 3F .BYTE ^X40,^X41,^X42,^X43,^X44,^X45,^X46,^X47 ; 40 - 47 .BYTE ^X48,^X49,^X4A,^X4B,^X4C,^X4D,^X4E,^X4F ; 48 - 4F .BYTE ^X50,^X51,^X52,^X53,^X54,^X55,^X56,^X57 ; 50 - 57 .BYTE ^X58,^X59,^X5A,^X5B,^X5C,^X5D,^X5E,^X5F ; 58 - 5F .BYTE ^X60,^X61,^X62,^X63,^X64,^X65,^X66,^X67 ; 60 - 67 .BYTE ^X68,^X69,^X6A,^X6B,^X6C,^X6D,^X6E,^X6F ; 68 - 6F .BYTE ^X70,^X71,^X72,^X73,^X74,^X75,^X76,^X77 ; 70 - 77 .BYTE ^X78,^X79,^X7A,^X7B,^X7C,^X7D,^X7E,^X7F ; 78 - 7F .BYTE ^X80,^X81,^X82,^X83,^X84,^X85,^X86,^X87 ; 80 - 87 .BYTE ^X88,^X89,^X8A,^X8B,^X8C,^X8D,^X8E,^X8F ; 88 - 8F .BYTE ^X90,^X91,^X92,^X93,^X94,^X95,^X96,^X97 ; 90 - 97 .BYTE ^X98,^X99,^X9A,^X9B,^X9C,^X9D,^X9E,^X9F ; 98 - 9F .BYTE ^XA0,^XA1,^XA2,^XA3,^XA4,^XA5,^XA6,^XA7 ; A0 - A7 .BYTE ^XA8,^XA9,^XAA,^XAB,^XAC,^XAD,^XAE,^XAF ; A8 - AF .BYTE ^XB0,^XB1,^XB2,^XB3,^XB4,^XB5,^XB6,^XB7 ; B0 - B7 .BYTE ^XB8,^XB9,^XBA,^XBB,^XBC,^XBD,^XBE,^XBF ; B8 - BF .BYTE ^XC0,^XC1,^XC2,^XC3,^XC4,^XC5,^XC6,^XC7 ; C0 - C7 .BYTE ^XC8,^XC9,^XCA,^XCB,^XCC,^XCD,^XCE,^XCF ; C8 - CF .BYTE ^XD0,^XD1,^XD2,^XD3,^XD4,^XD5,^XD6,^XD7 ; D0 - D7 .BYTE ^XD8,^XD9,^XDA,^XDB,^XDC,^XDD,^XDE,^XDF ; D8 - DF .BYTE ^XE0,^XE1,^XE2,^XE3,^XE4,^XE5,^XE6,^XE7 ; E0 - E7 .BYTE ^XE8,^XE9,^XEA,^XEB,^XEC,^XED,^XEE,^XEF ; E8 - EF .BYTE ^XF0,^XF1,^XF2,^XF3,^XF4,^XF5,^XF6,^XF7 ; F0 - F7 .BYTE ^XF8,^XF9,^XFA,^XFB,^XFC,^XFD,^XFE,^XFF ; F8 - FF .SBTTL RS_END, End of driver ;++ ; Label that marks the end of the driver ;-- RS_END: ; Last location in driver .END