home *** CD-ROM | disk | FTP | other *** search
- /***********************************************************************
- * öá⌐½ TERM.C
- *
- * ¥¼π½∩Γ«α ΓÑନ¡á½á
- *
- * é맮ó:
- * term [Å«αΓ [欫α«ßΓ∞ [ùÑΓ¡«ßΓ∞ [潫ó« [æΓ«»]]]]]
- * Å«αΓ - ¡«¼Ñα »«αΓá. Å« π¼«½τá¡¿ε 1.
- * 欫α«ßΓ∞ - ù¿ß½« «Γ 50 ñ« 115200. Å« π¼«½τá¡¿ε 2400
- * ùÑΓ¡«ßΓ∞ - Äñ¿¡ ¿º ß¿¼ó«½«ó N, O, E, M ¿½¿ S úñÑ
- * N - ìÑΓ ¬«¡Γα«½∩ (NONE)
- * O - æπ¼¼á í¿Γ«ó ¡ÑτÑΓ¡á∩ (ODD)
- * E - æπ¼¼á í¿Γ«ó τÑΓ¡á∩ (EVEN)
- * M - ü¿Γ 7 óßÑúñá 1 (MARK)
- * S - ü¿Γ 7 óßÑúñá 0 (SPACE)
- * Å« π¼«½τá¡¿ε ¬«¡Γα«½∞ »« τÑΓ¡«ßΓ¿ «ΓßπΓßΓóπÑΓ.
- * 潫ó« - τ¿ß½« ¿¡Σ«α¼áµ¿«¡¡δσ í¿Γ ó íá⌐ΓÑ. Å« π¼«½τá¡¿ε 8.
- * æΓ«» - τ¿ß½« ßΓ«»«óδσ í¿Γ, 1 ¿½¿ 2. Å« π¼«½τá¡¿ε 1.
- *
- * 諼»¿½∩Γ«α Microsoft C 5.1
- */
-
- #include <conio.h> /* ñ½∩ αáí«Γδ ß ¬«¡ß«½∞ε */
- #include <graph.h> /* »α«Γ«Γ¿»δ úαáΣ¿τÑ߬¿σ Σπ¡¬µ¿⌐ */
- #include <stdlib.h> /* æΓá¡ñáαΓ¡δÑ Σπ¡¬µ¿¿ */
- #include <dos.h> /* Ä»αÑñѽѡ¿∩ FP_OFF ¿ FP_SEG */
-
- #define USAGE "term [Å«αΓ [欫α«ßΓ∞ [ùÑΓ¡«ßΓ∞ [潫ó« [æΓ«»]]]]]"
-
- /* æ¼ÑΘÑ¡¿∩ αÑú¿ßΓα«ó «Γ¡«ß¿Γѽ∞¡« íáºδ */
- #define LCR 3 /* ÉÑú¿ßΓα π»αáó½Ñ¡¿∩ ½¿¡¿Ñ⌐ */
- #define MCR 4 /* ÉÑú¿ßΓα π»αáó½Ñ¡¿∩ ¼«ñѼ«¼ */
- #define IER 1 /* ÉÑú¿ßΓα ¿ñÑ¡Γ¿Σ¿¬áµ¿¿ »αÑαδóá¡¿⌐ */
- #define LSR 5 /* ÉÑú¿ßΓα ßΓáΓπßá ½¿¡¿¿ */
-
- /* îá߬¿ ñ½∩ πßΓá¡«ó¬¿ í¿Γ«ó ó αÑú¿ßΓαáσ */
- #define GPO2 8 /* æ¿ú¡á½ αáºαÑΦÑ¡¿∩ á»»áαáΓ¡δσ »αÑαδóá¡¿⌐ */
- #define R_INT 1 /* ÅαÑαδóá¡¿Ñ »« »α¿σ«ñπ íá⌐Γá */
-
- /* è«¡ßΓá¡Γδ «Γ¡«ß∩Θ¿Ñß∩ ¬ ¬«¡Γα«½Ñαπ »αÑαδóá¡¿⌐ 8259 */
- #define IMR 0x21 /* ÇñαÑß αÑú¿ßΓαá ¼áß«¬ »αÑαδóá¡¿⌐ */
- #define ICR 0x20 /* ÇñαÑß αÑú¿ßΓαá ¬«¼á¡ñ */
- #define IRQ3 0xF7 /* îá߬á ñ½∩ αáºαÑΦÑ¡¿∩ »αÑαδóá¡¿∩ «Γ COM2 */
- #define IRQ4 0xEF /* îá߬á ñ½∩ αáºαÑΦÑ¡¿∩ »αÑαδóá¡¿⌐ «Γ COM1 */
- #define EOI3 0x63 /* æ¿ú¡á½ «í «¬«¡τá¡¿¿ «íαáí«Γ¬¿ »αÑαδóá¡¿∩ «Γ COM2 */
- #define EOI4 0x64 /* æ¿ú¡á½ «í «¬«¡τá¡¿¿ «íαáí«Γ¬¿ »αÑαδóá¡¿∩ «Γ COM1 */
-
- int eoi; /* æ¿ú¡á½ «í «¬«¡τá¡¿¿ «íαáí«Γ¬¿ »αÑαδóá¡¿∩ */
-
- /* îá߬¿ ñ½∩ πßΓá¡«ó¬¿ í¿Γ«ó ó αÑú¿ßΓαÑ π»αáó½Ñ¡¿∩ ¼«ñѼ«¼ */
- #define DTR 1 /* æ¿ú¡á½ ú«Γ«ó¡«ßΓ¿ ΓÑନ¡á½á */
- #define RTS 2 /* æ¿ú¡á½ ºá»α«ßá ¡á »ÑαÑñáτπ */
-
- #define TRRDY 0x20 /* îá߬á ñ½∩ «»αÑñѽѡ¿∩ ú«Γ«ó¡«ßΓ¿ »«αΓá ¬ »ÑαÑñáτÑ
- íá⌐Γá */
-
- /* ⽫íá½∞¡δÑ »ÑαѼѡ¡δÑ */
- int p_base; /* üẫóδ⌐ áñαÑß »«ß½Ññ«óáΓѽ∞¡«ú« »«αΓá */
- void (interrupt far *oldvect)(); /* æΓáαδ⌐ óÑ¬Γ«α »αÑαδóá¡¿∩ 0xB/0xC */
-
- #define BSIZE 4096 /* ÉẼÑα ¬«½∞µÑó«ú« íπΣÑαá */
- unsigned char buf[BSIZE]; /* 諽∞µÑó«⌐ íπΣÑα */
- unsigned char *inptr = buf; /* ô¬áºáΓѽ∞ ¡á »Ñαó«Ñ ßó«í«ñ¡«Ñ ¼ÑßΓ« */
- unsigned char *outptr = buf; /* ô¬áºáΓѽ∞ ¡á »Ñαóδ⌐ ßτ¿ΓδóáѼδ⌐ íá⌐Γ */
-
- #define ESC 0x1B /* ASCII ¬«ñ ß¿¼ó«½á Esc */
-
- /* Åα«Γ«Γ¿»δ Σπ¡¬µ¿⌐ */
- void interrupt far i_handler(void);
- int portbase(short);
- void setparm(long, char, int, int);
- void porton(short);
- void portoff(short);
- int portin(unsigned char *);
- int portout(unsigned char);
-
- void main(int argc, char *argv[])
- {
- short port = 1; /* 쫼Ñα ¿ß»«½∞ºπѼ«ú« »«αΓá */
- long speed = 2400; /* 欫α«ßΓ∞ »ÑαÑñáτ¿ */
- char parity = 'N'; /* è«¡Γα«½∞ »« τÑΓ¡«ßΓ¿ */
- short word = 8; /* ù¿ß½« ¿¡Σ«α¼áµ¿«¡¡δσ í¿Γ«ó */
- short stop = 1; /* ù¿ß½« ßΓ«»«óδσ í¿Γ«ó */
- unsigned char ch; /* Éáí«τá∩ »ÑαѼѡ¡á∩. Äñ¿¡«τ¡δ⌐ ß¿¼ó«½ */
-
- /* Éáºí«α áαúπ¼Ñ¡Γ«ó ¬«¼á¡ñ¡«⌐ ßΓ᫬¿ */
- if (argc > 6) {
- cprintf("\a%s\r\n",USAGE);
- exit(1);
- }
-
- switch (argc) {
- case 6: /* ù¿ß½« ßΓ«»«óδσ í¿Γ«ó */
- stop = atoi(argv[5]);
- case 5: /* ù¿ß½« ¿¡Σ«α¼áµ¿«¡¡δσ í¿Γ«ó */
- word = atoi(argv[4]);
- case 4: /* è«¡Γα«½∞ »« τÑΓ¡«ßΓ¿ */
- parity = (char)toupper(*argv[3]);
- case 3: /* 欫α«ßΓ∞ »ÑαÑñáτ¿ */
- speed = atol(argv[2]);
- case 2: /* 쫼Ñα ¿ß»«½∞ºπѼ«ú« »«αΓá */
- port = atoi(argv[1]);
- }
-
- /* ǡ὿º »áαá¼ÑΓα«ó αáí«Γδ */
- if ((port < 1) || (port > 4)) {
- cprintf("\aìÑ»αáó¿½∞¡δ⌐ ¡«¼Ñα »«αΓá! '%d'\r\n%s",port,USAGE);
- exit(1);
- }
-
- if ((speed < 50) || (speed > 115200)) {
- cprintf("\aìÑ»αáó¿½∞¡« ºáñá¡á ߬«α«ßΓ∞! '%ld'\r\n%s",speed,USAGE);
- exit(1);
- }
-
- if ((word > 8) || (word < 5)) {
- cprintf("\aìÑ»αáó¿½∞¡« ºáñá¡ αẼÑα ß½«óá! '%d'\r\n%s",word,USAGE);
- exit(1);
- }
-
- if ((parity != 'N') && (parity != 'O') && (parity != 'M') &&
- (parity != 'S') && (parity != 'E')) {
- cprintf("\aìÑ»αáó¿½∞¡« ºáñá¡á τÑΓ¡«ßΓ∞! '%c'\r\n%s",parity,USAGE);
- exit(1);
- }
-
- if ((stop > 2) || (stop < 1)) {
- cprintf("\aìÑ»αáó¿½∞¡« ºáñá¡« τ¿ß½« ßΓ«»«óδσ í¿Γ«ó! '%d'\r\n%s",stop,USAGE);
- exit(1);
- }
-
- /* Ä»αÑñѽѡ¿Ñ íẫó«ú« áñαÑßá »«ß½Ññ«óáΓѽ∞¡«ú« »«αΓá */
- if (portbase(port) == -1) {
- cprintf("\aÅ«αΓ COM%d «ΓßπΓßóπÑΓ ¡á éáΦÑ⌐ ¼áΦ¿¡Ñ!",port);
- exit(1);
- }
-
- /* ôßΓá¡«ó¬á »áαá¼ÑΓα«ó «í¼Ñ¡á */
- setparm(speed, parity, word, stop);
-
- /* Å«ñú«Γ«ó¬á »«αΓá ¬ αáí«ΓÑ */
- porton(port);
-
- cprintf("\r\nÅ«αΓ %d 欫α«ßΓ∞ %ld\r\nä½∩ óδσ«ñá ¡áª¼¿ΓÑ Esc\r\n\n\n");
-
- /*** Äß¡«ó¡«⌐ µ¿¬½ ***/
- while (1) {
- if (portin(&ch) > -1) /* àßΓ∞ ñá¡¡δÑ ó íπΣÑαÑ? */
- putch(ch); /* ÄΓ«íαế¼ ¡á φ¬αá¡Ñ */
-
- if (kbhit()) /* ü佫 ¡áªáΓ¿Ñ ¬½áó¿Φ? */
- if ((ch = (unsigned char)getch()) != ESC) /* äá. 諡ѵ αáí«Γδ? */
- portout(ch); /* ìÑΓ. Å«ßδ½áѼ ó ½¿¡¿ε */
- else break; /* äá. 諡ѵ */
- }
-
- /* éÑα¡Ñ¼ »«αΓ ó «íδτ¡«Ñ ß«ßΓ«∩¡¿Ñ */
- portoff(port);
- exit(0);
- }
-
- /*************************************************************************
- * öπ¡¬µ¿∩ portbase óδí¿αáÑΓ íẫóδ⌐ áñαÑß ºáñá¡¡«ú« »«αΓá ¿º
- * Γáí½¿µδ ú½«íá½∞¡δσ »ÑαѼѡ¡δσ BIOS ¿ πßΓá¡áó½¿óáÑΓ ú½«íá½∞¡πε
- * »ÑαѼѡ¡πε p_base.
- *
- * 髺óαáΘáÑΓ º¡áτÑ¡¿Ñ p_base ¿½¿ -1 »α¿ «ΓßπΓßΓó¿¿ »«αΓá ó ¼áΦ¿¡Ñ
- */
- int portbase(short pnum)
- {
- int far *biosdata; /* ô¬áºáΓѽ∞ ó BIOS Data Area */
-
- FP_SEG(biosdata) = 0x40; /* æÑú¼Ñ¡Γ 40H */
- FP_OFF(biosdata) = 0; /* æ¼ÑΘÑ¡¿Ñ 0 */
-
- p_base = *(biosdata + pnum - 1); /* üÑαѼ áñαÑß */
-
- if (!p_base) /* 0 «º¡áτáÑΓ «ΓßπΓßΓó¿Ñ »«αΓá */
- return -1; /* ß¿ú¡á½ «í «Φ¿í¬Ñ */
-
- return p_base;
- }
-
- /*************************************************************************
- * öπ¡¬µ¿∩ setparm πßΓá¡áó½¿óáÑΓ »áαá¼ÑΓαδ «í¼Ñ¡á: ߬«α«ßΓ∞,
- * ó¿ñ ¬«¡Γα«½∩ »« τÑΓ¡«ßΓ¿, τ¿ß½« í¿Γ«ó ñá¡¡δσ ¿ τ¿ß½« ßΓ«»«óδσ í¿Γ«ó.
- */
- void setparm(long baud, char parity, int word, int stop)
- {
- register unsigned divisor; /* äѽ¿Γѽ∞ τáßΓ«Γδ ñ½∩ πßΓá¡«ó¬¿ ß¬«α«ßΓ¿ */
- register unsigned char parm; /* üá⌐Γ »áαá¼ÑΓα«ó ñ½∩ αÑú¿ßΓαá π»αáó½Ñ¡¿∩ ½¿¡¿Ñ⌐ */
-
- if (!p_base) /* 0 «º¡áτáÑΓ Γ«, τΓ« íẫóδ⌐ áñαÑß */
- return; /* »«αΓá ¡Ñ πßΓá¡«ó½Ñ¡ */
-
- parm = (unsigned char)inp(p_base + LCR); /* ùΓÑ¡¿Ñ ΓѬπΘ¿σ »áαá¼ÑΓα«ó ½¿¡¿¿ */
-
- /* ôßΓá¡«ó¬á ߬«α«ßΓ¿ «í¼Ñ¡á */
- /* äѽ¿Γѽ∞ = 1.8432 îâµ / (baud * 16) */
- divisor = (unsigned)(115200L / baud);
-
- outp(p_base + LCR, parm | 0x80); /* Å«ñú«Γ«ó¬á »«αΓá ¬ πßΓá¡«ó¬Ñ
- ߬«α«ßΓ¿. ü¿Γ 7 ó 1 */
- outp(p_base + 1, divisor >> 8); /* æΓáαΦ¿⌐ íá⌐Γ ñѽ¿Γѽ∩ */
- outp(p_base, divisor & 0xFF); /* î½áñΦ¿⌐ íá⌐Γ ñѽ¿Γѽ∩ */
-
- /* Å«ñú«Γ«ó¬á íá⌐Γá »áαá¼ÑΓα«ó ñ½∩ αÑú¿ßΓαá π»αáó½Ñ¡¿∩ ½¿¡¿Ñ⌐ */
- /* ùÑΓ¡«ßΓ∞ */
- parm &= 7; /* Å« π¼«½τá¡¿ε NONE */
- switch (parity) {
- case 'S': /* SPACE */
- case 's':
- parm |= (7 << 3);
- break;
- case 'M': /* MARK */
- case 'm':
- parm |= (5 << 3);
- break;
- case 'E': /* EVEN */
- case 'e':
- parm |= (3 << 3);
- break;
- case 'O': /* ODD */
- case 'o':
- parm |= (1 << 3);
- break;
- }
-
- /* ôßΓá¡«ó¬á τ¿ß½á í¿Γ«ó ñá¡¡δσ ¿ τ¿ß½á ßΓ«»«óδσ í¿Γ«ó */
- parm |= (((stop - 1) << 2) | (word - 5));
-
- /* ôßΓá¡«ó¬á »áαá¼ÑΓα«ó ½¿¡¿¿ ¿ »ÑαѬ½ετÑ¡¿Ñ »«αΓá ó αáí«τ¿⌐ αѪ¿¼ */
- outp(p_base + LCR, parm);
- }
-
- /*************************************************************************
- * öπ¡¬µ¿∩ porton »ÑαÑó«ñ¿Γ »«αΓ ó αáí«τ¿⌐ αѪ¿¼.
- * Å«ñ¼Ñ¡∩ÑΓ óÑ¬Γ«α »αÑαδóá¡¿∩, αáºαÑΦáÑΓ »αÑαδóá¡¿∩ «Γ »«αΓá ¿
- * óδßΓáó½∩ÑΓ ß¿ú¡á½δ ú«Γ«ó¡«ßΓ¿ ΓÑନ¡á½á ¿ ºá»α«ßá ¡á »ÑαÑñáτπ.
- */
- void porton(short pnum)
- {
- register unsigned i_num; /* 쫼Ñα »αÑαδóá¡¿∩ */
- register int c; /* Éáí«τá∩ »ÑαѼѡ¡á∩ */
-
- if ((pnum == 2) || (pnum == 4)) /* Ä»αÑñѽѡ¿Ñ ¡«¼Ñαá »αÑαδóá¡¿∩ */
- i_num = 0xB;
- else i_num = 0xC;
-
- oldvect = _dos_getvect(i_num); /* æ«σαá¡¿¼ ΓѬπΘ¿⌐ óÑ¬Γ«α »αÑαδóá¡¿∩ */
- _dos_setvect(i_num, i_handler); /* çá¼Ñ¡¿¼ «íαáí«Γτ¿¬ »αÑαδóá¡¿∩ ¡á ßó«⌐ */
-
- /* ÉáºαÑΦ¿¼ »αÑαδóá¡¿∩ «Γ »«αΓá */
- c = inp(p_base + MCR) | GPO2 | DTR | RTS; /* ÉáºαÑΦÑ¡¿Ñ »αÑαδóá¡¿∩ «Γ
- ßσѼ RS-232 ¿ πßΓá¡«ó¬á
- ß¿ú¡á½«ó DTR ¿ RTS */
- outp(p_base + MCR, c);
-
- outp(p_base + IER, R_INT); /* ÅαÑαδóá¡¿∩ Γ«½∞¬« »« »α¿σ«ñπ íá⌐Γá */
-
- /* Åα«úαἿα«óá¡¿Ñ ¬«¡Γα«½½Ñαá 8259 */
- c = inp(IMR);
- if ((pnum == 2) || (pnum == 4))
- {
- c &= IRQ3; /* ÉáºαÑΦÑ¡¿Ñ »αÑαδóá¡¿∩ «Γ COM2 */
- eoi = EOI3; /* æ¿ú¡á½ «í «¬«¡τá¡¿¿ «íαáí«Γ¬¿ »αÑαδóá¡¿∩ «Γ COM2 */
- }
- else {
- c &= IRQ4; /* ÉáºαÑΦÑ¡¿Ñ »αÑαδóá¡¿∩ «Γ COM1 */
- eoi = EOI4; /* æ¿ú¡á½ «í «¬«¡τá¡¿¿ «íαáí«Γ¬¿ »αÑαδóá¡¿∩ «Γ COM1 */
- }
- outp(IMR, c);
- }
-
- /*************************************************************************
- * öπ¡¬µ¿∩ portoff »ÑαÑó«ñ¿Γ »«αΓ ó ¿º αáí«τÑú« αѪ¿¼á ó «íδτ¡«Ñ
- * ß«ßΓ«∩¡¿Ñ ñ½∩ MS-DOS («íαáΓ¡á∩ ¬ porton).
- * çá»αÑΘáÑΓ »αÑαδóá¡¿∩ «Γ »«αΓá, ó«ßΓá¡áó½¿óáÑΓ «íαáí«Γτ¿¬ »αÑαδóá¡¿⌐
- * ¿ ¼á߬¿απÑΓ ß¿ú¡á½δ MCR.
- */
- void portoff(short pnum)
- {
- register unsigned i_num; /* 쫼Ñα »αÑαδóá¡¿∩ */
- register int c; /* Éáí«τá∩ »ÑαѼѡ¡á∩ */
-
- /* çá»αÑΘáѼ »αÑαδóá¡¿∩ «Γ »«αΓá */
- /* Åα«úαἿα«óá¡¿Ñ ¬«¡Γα«½½Ñαá 8259 */
- c = inp(IMR);
- if ((pnum == 2) || (pnum == 4))
- c |= ~IRQ3; /* çá»αÑΘÑ¡¿Ñ »αÑαδóá¡¿⌐ «Γ COM2 */
- else c |= ~IRQ4; /* çá»αÑΘÑ¡¿Ñ »αÑαδóá¡¿⌐ «Γ COM1 */
- outp(IMR, c);
-
- outp(p_base + IER, 0); /* çá»αÑΘÑ¡¿Ñ óßÑσ Γ¿»«ó »αÑαδóá¡¿⌐ */
-
- outp(p_base + MCR, 0); /* îá߬¿απѼ óßÑ ß¿ú¡á½δ */
-
- if ((pnum == 2) || (pnum == 4)) /* Ä»αÑñѽѡ¿Ñ ¡«¼Ñαá »αÑαδóá¡¿∩ */
- i_num = 0xB;
- else i_num = 0xC;
-
- _dos_setvect(i_num, oldvect); /* é«ßßΓá¡«ó¿¼ «íαáí«Γτ¿¬ »αÑαδóá¡¿∩ */
- }
-
- /*************************************************************************
- * öπ¡¬µ¿∩ i_handler ∩ó½∩ÑΓß∩ «íαáí«Γτ¿¬«¼ »αÑαδóá¡¿⌐ «Γ »«αΓá.
- * öπ¡¬µ¿∩ »«½πτáÑΓ π»αáó½Ñ¡¿Ñ »α¿ 󫺡¿¬¡«óÑ¡¿¿ »αÑαδóá¡¿∩. Ä¡á
- * ºáí¿αáÑΓ íá⌐Γ ¿º »«αΓá ¿ ¬½áñÑΓ Ñú« ó íπΣÑα. üπΣÑα ¬«½∞µÑó«⌐ - Γ.Ñ.
- * »α¿ ºá»«½¡Ñ¡¿¿ «¡ ¡áτ¿¡áÑΓ ºá»«½¡∩Γ∞ß∩ ß¡áτá½á.
- */
- void interrupt far i_handler(void)
- {
- *inptr = (unsigned char)inp(p_base); /* æτ¿ΓáѼ íá⌐Γ */
-
- if (++inptr >= &buf[BSIZE]) /* Åα«óÑα¬á óδσ«ñá ºá úαá¡¿µπ íπΣÑαá */
- inptr = buf; /* àß½¿ ñá, Γ« ¡áτ¡Ñ¼ ß¡áτá½á */
-
- outp(ICR, eoi);
- }
-
- /*************************************************************************
- * öπ¡¬µ¿∩ portin óδí¿αáÑΓ «ñ¿¡ íá⌐Γ ¿º ¬«½∞µÑó«ú« íπΣÑαá. àß½¿ íπΣÑα »πßΓ,
- * Γ« ó«ºóαáΘáÑΓß∩ -1
- */
- int portin(unsigned char *ch)
- {
- int rc = 0; /* è«ñ ºáóÑαΦÑ¡¿∩ */
-
- if (inptr != outptr) { /* àßΓ∞ ó íπΣÑαÑ ñá¡¡δÑ? */
- *ch = *outptr & 0x7F; /* äá. üÑαѼ ASCII ß¿¼ó«½ */
- if (++outptr >= &buf[BSIZE]) /* Åα«óÑα¬á óδσ«ñá ºá úαá¡¿µπ íπΣÑαá */
- outptr = buf; /* àß½¿ ñá, Γ« ¡áτ¡Ñ¼ ß¡áτá½á */
- }
- else rc = -1;
-
- return rc;
- }
-
- /*************************************************************************
- * öπ¡¬µ¿∩ portout »«ßδ½áÑΓ íá⌐Γ ch ó ½¿¡¿ε. 髺óαáΘáÑΓ 0 »α¿ ¡«α¼á½∞¡«¼
- * ºáóÑαΦÑ¡¿¿. Åα¿ «Φ¿í¬Ñ ó«ºóαáΘáÑΓß∩ -1
- */
- int portout(unsigned char ch)
- {
- register int tm = -32000; /* æτÑΓτ¿¬ ñ½∩ «αúá¡¿ºáµ¿¿ Γá⌐¼áπΓá */
-
- while ((inp(p_base + LSR) & TRRDY) == 0) /* Å«¬á »«αΓ ¡Ñ ú«Γ«ó ¬ »ÑαÑñáτÑ */
- if (tm++ > 0)
- return -1; /* ÄΦ¿í¬á. éδσ«ñ »« Γá⌐¼áπΓπ */
-
- outp(p_base, ch); /* éδó«ñ ß¿¼ó«½á */
- return 0;
- }
-