Turbo-C
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
터보-C 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
Lua 게시판
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C/C++ Q/A
[4598] Re:한번더 조언을 부탁 합니다.
컴러기 [comlegi] 1495 읽음    2004-07-29 22:37
일단 사용하시는 OS가 winnt계열이시라면 아래 소스는 컴파일은 정상적으로 될지 몰라도 실행은 불가능합니다.

이유는 bios콜을 사용하는 bioscom함수는 dos 베이스에서만 동작합니다.
따라서
win98정도 이하 버전의 오에스에서 도스모드상테에서 실행하셔야 결과를 볼수 있을 것을 판단됩니다.
즉 윈도우 2000이나 xp의 커멘트 모드는 도스 모드가 아닙니다.
이모든 32비트 명령 프로프트 일뿐 도스모드는 아니며, 윈도우에 의해서 바이오스 콜을 철처히 감시되므로
정상동작할지 않을 것을 판단됩니다.

그리고 해석에 대해서 말씀하셨는데 지금 제가 하도 도스모드에서의 이야기를 오래전에 사용했던관계로 정확한 해석을 불가능할것으로 보입니다.



일송 님이 쓰신 글 :
:
:  다시 한 번더 조언을 부탁 합니다.
:  도스상에서 컴파일할 경우 에러는 없는데 실행이 안되고 결과를 얻을 수 없습니다.
:  사용한 OS는 터보 C++ 3.0 도스 버전입니다.
:  도스상에서 다른 프로그램을 실행했을 때 이상 없었습니다.
:  이 프로그램에서 무엇이 잘못 되었는지, 잘못 했는지를 지적하여 주십시요.
:  고참님들에 조언을 부탁 드립니다.
:  해석도 욕심을 내고 싶군요....
:
:
: #include <bios.h>
: #include <conio.h>
: #include <stdio.h>
:            <------- 이부분까지는 해석 되시리라 생각하며
: #define COM1        0     <-- com1 포트이군요
: #define COM2        1     <-- com2 포트이군요
: #define TRUE        1
: #define DATA_READY      0x100
: #define COM_9600        0xE0
: #define COM_NOPARITY    0x00
: #define COM_CHR8        0x03
: #define COM_STOP1       0x00
: #define SETTINGS ( COM_9600 | COM_NOPARITY | COM_CHR8 | COM_STOP1)
:  // 워낙 오래된 기억이라 바이오스는  basic input output system 의 약자로 컴이 시동할때 기본적으로
// 오에스를 로드한다던지하는 작업을 하기 위한 기본 기능이라 보시면됩니다.
// 여기에 포트에 관한 제어라던지 몇가지 부분의 펑션이 있습니다.
// 윈도그의 API를 이해하시고 있다면 오에스이전의 컴의 기본 API라고 보시면 됩니다.
// 보통 이것을 호출하는 것을 인트럽트 콜이라고도 부릅니다.
// 거기에 사용되는 기본적인 상수들을 정의해 두었다고 보시면됩니다.
// 여기에 대한 자세한 내용을 아시고 싶다면 도스책자등을 찾아보셔야 할것입니다.(지금도 출간하는지 알수
// 없어요)
// IBS XT Hand book, IBM XT/AT 기술사전 <-- 대충 이런이름으로 출간되었던 책자들이 있는것을 알고
// 있습니다. 아마 지금은 철판 된지 오랜인 책들로 생각됩니다.
// 아래의 코딩은 무난한내용입니다. 특별히 문제될만한것은 거의 없는것 같습니다.
// 제가 기억만을 의존해서 이글을 쓰다보니 확실한 함수 콜등의 미미한 부분은 정확히 집어 내지는 못하겠
// 습니다.
// bisocom()<-- 함수는 이 바이어스 콜을 이용해서 com포트에 접근하는 함수입니다.
// 아마 뒤의 파라메타들로 세팅, 쓰기, 읽기를 하는 것을 알고 있습니다.
// 내용을 풀이하자면 루프백을 만드셨다니 말씀 드리겠습니다.
// com1 포트로 0~255까지 증가하면서 그 값을 하나씩 넣고, com1포트로 그것을 되받는 프로그램입니다.
// 여기서 만일 잘못되면 종료하라는 루틴이군요
//
: main()
: {
:
:     unsigned long a,b,cnt=0;
:     int done=TRUE;
:     bioscom(0, SETTINGS, COM1); <-- com1초기화
:
:
:     clrscr();
:     while (done)
:         {
:         for(a=0;a<=0xff;a++)
:         {
:         cnt++;
:         bioscom(1,a,COM1); <-- com1에 a를 쓰는 것입니다.
:         b=bioscom(2,0,COM1); <-- com1에서 값을 읽어서 b에 저장하는 것입니다.
:         if (a!=b) goto err;
:         }
:
:     printf("%ld",cnt);
:     }
:
: err:
:
:     printf("COM TEST ERROR!");
:     getch();
:
: }

+ -

관련 글 리스트
4596 한번더 조언을 부탁 합니다. 일송 1358 2004/07/27
4598     Re:한번더 조언을 부탁 합니다. 컴러기 1495 2004/07/29
4600         컴러기님 감사 합니다. 일송 1243 2004/07/30
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.