- . PCjr PCjr. . . , , , . : 100 OUT BASEADDRESS+4,1 ' DTR 110 ''' - 120 ''' - . . 200 X = INP(BASEADDRESS+2) ' 210 IF X AND 2 <> 2 THEN 200 ' 1 220 OUT BASEADDRESS+4,3 ' RTS 230 X = INP(BASEADDRESS+2) ' 240 IF X AND 1 <> 1 THEN 230 ' 0 250 ''' . : ;--- DTR MOV DX,BASE_ADDRESS ; ADD DX,4 ; MOV AL,1 ; 1 OUT DX,AL ; ;--- . ( ) . ;--- DSR INC DX ; INC DX ; TRY_AGAIN: IN AL,DX ; TEST AL,10B ; JZ TRY_AGAIN ; 1 ;--- RTS DEC DX ; DEC DX ; MOV AL,3 ; RTS OUT DX,AL ; ;--- CTS INC DX ; INC DX ; ONCE_MORE: IN AL,DX ; TEST AL,1 ; CTS JZ ONCE_MORE ; ;--- 7.1.6 . , , . , , . XON/XOFF. ASCII 17(XON) 19(XOFF), , . , ( , , ). , , , , - ( 4) [7.1.4]. . 7-2 ( [7.1.7]) - , - . , . , [7.1.7] , . , , . . , - PRINT#, PRINT# USING WRITE#. , - , . PRINT#. . , COM1 , [7.1.2]. . . . 500 C$ = INKEY$: IF C$ <> "" THEN PRINT #1,C$ 510 X = INP(BASEADDRESS + 5) ' 520 IF X AND 32 = 32 THEN 1000 ' 530 IF EOF(1) THEN 500 ' , . ( ) . 1000 ''' . 1 14H BIOS , AL . DX (0 1). AH , 7 = 1, . - : 4 ( "" ) 5 6 MS DOS , DL. 4 21H, BIOS; ( COM1). 40H 21H. . COM1 - #3. BX, - CX. DS:DX . MOV AH,40H ; MOV BX,3 ; COM1 MOV CX,50 ; 50 LEA DX,DATA_BUFFER ;DS:DX INT 21H ; JC COM_ERROR ; , . , , AX 5 6 . . , , . - , - . 5 . - , 5 1. , . 5 0 1, . , . . , ( , - ). - , , [7.1.2] [7.1.5]. . [7.1.7] . ;--- KEEP_TRYING: MOV DX,BASE_ADDRESS ; ADD DX,5 ; IN AL,DX ; TEST AL,00011110B ; JNZ ERROR_ROUTINE ; , TEST AL,00000001B ; JNZ RECEIVE ; , TEST AL,00100000B ; JZ KEEP_TRYING ; , ;--- MOV AH,1 ; INT 16H ; BIOS JZ KEEP_TRYING ;, MOV AH,0 ; INT 16H ; AL SUB DX,5 ; OUT DX,AL ; JMP SHORT KEEP_TRYING ; 7.1.7 . [7.1.2] [7.1.5]. , - XOFF (ASCII 19), , . XON (ASCII 17) , . , PCjr ; XON XOFF. , . , [7.1.9]. , . - (ASCII 10), ( ) ; , . . 7-2 , , [7.1.6]. . , , . , , (.. ) . - . - /C:. BASICA /C:1024 1K 1200 ( 4096 ). 256 , . - 300 . INPUT$ ( INPUT# LINE INPUT#, INPUT$ ). INPUT$(,). , INPUT$(10,#1) 10 , - #1. 256 , . LOC - . INPUT$(LOC(1),#1) S$ . - , LOC(1) = 0, . , EOF(1) - , -1 0, . S$ . INSTR . , , , , , ( ) . XOFF (ASCII 19) INSTR(1,S$,CHR$(19)). - , , , . - , . , - , . . , , - XOFF, . , , . , XON XOFF. , - , XON/XOFF - , - XOFF. . . 500 ''' (. [7.1.6]) . . 600 IF LOC(1)>100 THEN XOFF = 1: PRINT #1,CHR$(19) 610 C$ = INPUT$(LOC(1),#1) ' 620 ''' 630 IF INSTR(1,C$,CHR$(19))>0 THEN 800 ' XOFF 640 IF INSTR(1,C$,CHR$(17))>0 THEN 900 ' XON . ( . 700 PRINT C$ ' 710 IF LOC(1) > 0 THEN 600 ' , 720 IF XOFF = 1 THEN XOFF = 0: PRINT #1,CHR$(17) . . 800 ' XOFF . 900 ' XON LOF , , - . , COM1 #1, LOF(1) - . , . , , LOC . , COM1 #3, 256 , , LOC(3) 256, . . 2 14H BIOS - , AL . (0-1) DX. AX , . AH 0, , 5 . : 1 ( , ) 2 (, - ) 3 ( - ) 4 ( 0) 5 ( DSR) MS DOS , 3 21H. COM1 AL. , , BIOS , [7.1.2]. 2400 , - , - 8 . BIOS . . - [7.1.8] , 5 . 0 , - . 0 1, , - . , 0 0 , - . , - - . [3.1.1]. , 1200 , BIOS [4.5.1] - . , - [7.1.8]. , . . 2 [7.1.2] [7.1.5] - / . KEEP_TRYING: MOV DX,BASE_ADDRESS ; ADD DX,5 ; IN AL,DX ; TEST AL,00011110B ; JNZ ERROR_ROUTINE ; , TEST AL,00000001B ; JNZ RECEIVE ; TEST AL,00100000B ; JZ KEEP_TRYING ; , . ( - . [7.1.6]) . ;--- RECEIVE: MOV DX,BASE_ADDRESS ; IN AL,DX ; CMP AL,19 ; XOFF JE XOFF_ROUTINE ; . ( ..) . MOV DL,AL ; MOV AH,2 ; INT 21H ; JMP SHORT KEEP_TRYING ; 7.1.8 / . , /. , , . / , . , , - , - , - , , . - [1.2.3], . IBM PC , 3 (COM1) 4 (COM2). , PCjr, - 3, COM1 - 4. UART 8250 4 , - : 00 01 10 11 , 2-1 - , 2 , - . 0 - , - 0. , - , 1 . : 0 1 = 1 1 = 2 1 = 3 1 = 7-4 , 0 , , 8259 3 COM1 4 COM2. , . - , [1.2.2]. , MOV AL,20H/OUT 20H,AL. . 7-3 . - . , - , . , 0 - , - . , , . - . "" , - : "" 11 10 01 00 . , : ;--- PUSH DS ; DS MOV DX,OFFSET IO_INT ;DS:DX MOV AX,SEG IO_INT ; MOV DS,AX ; MOV AL,0BH ; COM1 MOV AH,25H ; INT 21H ; ;--- (COM1) MOV AX,40H ;DS BIOS MOV DS,AX ; MOV DX,DS:[0] ; COM1 INC DX ; MOV AL,3 ; OUT DX,AL ; POP DS ; ;--- - IO_INT PROC FAR NEXT_INT: MOV DX,BASEADDRESS ; INC DX ; INC DX ; IN AL,DX ; TEST AL,10B ; ? JNZ TRANSMIT ; , RECEIVE: ; . . JMP SHORT ANOTHER ; TRANSMIT: ; . . ;--- , ANOTHER: MOV DX,BASEADDRESS ; INC DX ; INC DX ; IN AL,DX ; TEST AL,1 ; 1 JNZ NEXT_INT ; , MOV AL,20H ; OUT 20H,AL ; IRET IO_INT ENDP 7.1.9 , . 32 ASCII, - , . ASCII 127 - DEL (), , Ctrl + . - , , . - - , - . ASCII - 10- 16- Ctrl 00 00 ^@ NUL - ( , ) 01 01 ^A SOH . - . 02 02 ^B STX . , - . 03 03 ^C ETX . , . 04 04 ^D EOT . , - . 05 05 ^E ENQ . . 06 06 ^F ACK . . 07 07 ^G BEL . , . 08 08 ^H BS . 09 09 ^I HT . 10 0A ^J LF . 11 0B ^K VT . 12 0C ^L FF . 13 0D ^M CR . 14 0E ^N SO . . 15 0F ^O SI . . 16 10 ^P DLE Data Link Escape. ( Esc). 17 11 ^Q DC1 1. XON . 18 12 ^R DC2 2. - . 19 13 ^S DC3 3. XOFF . 20 14 ^T DC4 4. - . 21 15 ^U NAK . . 22 16 ^V SYN . . 23 17 ^W TB . ETX. 24 18 ^X CAN . . 25 19 ^Y EM . . 26 1A ^Z SUB . , - . 27 1B ^[ ESC , - . 28 1C ^/ FS . - . 29 1D ^] GS . - . 30 1E ^^ RS . - . 31 1F ^_ US . . 127 7F DEL . .  2. . , - , . - , - - , . 4 : 1. . , , . . 2. , - (.. , [1.3.5]). 3. , , . . - , , [1.3.4]. . 4. , - CONFIG.SYS. MS DOS - DOS, . IOCTL ( /) - , . , . . , . - , . , , SERIALPR - , - . OPEN "SE- RIALPR" FOR OUTPUT AS #2 . , , IOCTL. - COPY A:MY- FILE SERIALPR:, . . : . , - . , - , - . , . , , , . , - . . - MS DOS - - . , - . - . - , - . . , . (1) , - , (2) , - , MS DOS, , (3) , , . 7.2.1 . COM [1.3.6]. , . ORG 100H , COM . ORG 0, . (far) , . DEVICE12. AUX, MS DOS, 4 21H. , - ; , . . 18 , 5 . (DD) -1 (FFFFFFFFH), MS DOS , - . , . -1. . 7 : 15 1 = , 0 = 14 1 = IOCTL, 0 = IOCTL 13 1 = IBM, 0 = 3 1 = , 0 = 2 1 = , 0 = 1 1 = , 0 = 0 1 = , 0 = 15, 15 14, - IOCTL ( [7.2.4]). 13 - . - , MS DOS ( ; BIOS; (NULL) - , ). - , . , . 8 . DOS , LPT1 COM1, , . . - . "DEVICE12" - , , . 15, - IOCTL. DEV_STRATEGY DEV_INTERRUPT - , - . AUX, - MS DOS . - , - AUX (- ). , COM . CSEG SEGMENT PUBLIC 'CODE' ' ORG 0 ' ASSUME CS:CSEG,DS:CSEG,ES:CSEG DEVICE12 PROC FAR ' DD 0FFFFFFFFH ' DW 8000H ' DW DEV_STATEGY ' DW DEV_INTERRUPT ' DB 'AUX ' ' ( ) 7.2.2 . . , , . . - . , , . , , . , - , , - . MS DOS - ( ). - . ES:BX , . . , , - ES:BX, . , (. , ). 13 . : 1. (DB). 2. (DB). . 3. (DB). . [7.2.3]. 4. (DW). . 15, - . [7.2.3]. 5. (8 ). MS DOS. 6. ( ). . 5 . , , ES BX, - RET, COM. DEV_STRATEGY: MOV CS:KEEP_ES,ES MOV CS:KEEP_BX,BX RET KEEP_CS DW ? KEEP_BX DW ? 7.2.3 . , . . , , - , RET. 13 , - . DOS ( 3FH 21H, ), 1 13 2 ( - 5). , [7.2.1].