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

C++빌더 Q&A
C++Builder Programming Q&A
[41017] Re:Re:Re:Re:Re:Re:dos 용 FP_SEG ,FP_OFF 를 어떻게 window용으로 바꿀수 있을까요?
황경록 [mpbox] 921 읽음    2005-07-13 14:59
그 먼 옜날....

메모리의 크기를 지정하기 위해 할당되었던 비트가 20비트라고...

그래서 2^20 = 1048576 bytes 가 되고 1M 의 주소를 나타낼 수 있었죠.

이 메모리를 16 바이트(세그먼트단위)로 나누면 65536 이 되죠.

이윤성 님이 쓰신 글 :
: 일딴 방태윤님 황경록님 감사 드립니다.
:  아직 잡아야 할 버그가 많기에...^^;
:  일딴 방태윤님 말씀대로 해놓았습니다.^^
:  근데..혹시나 왜 65536 인지 물어 봐도 될까요?
:  너무 궁금해서요...^^;
:
: 황경록 님이 쓰신 글 :
: : 문제는 Real 모드에서 동작하던걸 Protected 모드에서 돌아가게끔하는데
: : 초점이 있는것 같네요. -.0
: :
: : 문제가 크군요 ^^'''' 전 이쯤에서 손때겠습니다;;
: : 므흣;;;
: :
: : 방태윤 님이 쓰신 글 :
: : : FP_SEG,FP_OFF 가 매크로 인데요.도스니까 dos.h 에 있을라나..?
: : : 그거 풀어 쓰면 될거 같은데요...(함수에 대입,컴파일하는게 문제라면요)
: : :
: : : 아마
: : :
: : : FP_SEG 는 65536 로 나눈값
: : : FP_OFF  는 63336 로 나눈 나머지값 일거라로 예상은 합니다만...
: : :
: : : p3 = iptr / 65536;
: : : p4 = iptr % 65536;
: : :
: : : 로 한번해 보시던가요..
: : :
: : :
: : : 이윤성 님이 쓰신 글 :
: : : : 조언 감사 드립니다. far 포인터는 지우면 되는데...
: : : : 여기서 인자값을 받는게 있어서 문제가 생기고 있습니다.
: : : : int OurDonglePresent (void)
: : : : {
: : : :     int far        *iptr = (int far *) DongleByte;
: : : :
: : : :     p1 = 0;                         // Start Addr
: : : :     p2 = 56;                         // Block Length (in Words)
: : : : //
: : : :     p3 = FP_SEG (iptr);             // Buffer Segment
: : : :     p4 = FP_OFF (iptr);            // Buffer Offset
: : : :    
: : : :     offset1_1 = uVal1_1;
: : : :     offset1_2 = uVal1_2;
: : : :     offset2_1 = uVal2_1;
: : : :     offset2_2 = uVal2_2;
: : : :
: : : :     hasp (GET_HASP_STATUS, SeedCode, LptNum,
: : : :             GetPass1 (), GetPass2 (), &p1, &p2, &p3, &p4);
: : : :
: : : :     return (p1 == 1) && (p2 == 1) && (p3 == 1);
: : : : }
: : : :
: : : :  이분분에..되있어서요...
: : : :  저기 p3 랑 p4 에 어떤 값을 넣을지 모르겠더군요..
: : : : hasp 란 함수는 라이브러리로 되어 있는거 같은데..
: : : : far hasp (int,int,int,int,int,int far *,int far *,int far *,int far *);
: : : :  이런 인자들이 들어 가는거 같더군요... 물론 저기 far 부분은 삭제 해도 되지만....
: : : :  해당 여기에 무엇을 넣을지 고민됩니다.
: : : : 
: : : :
: : : : 황경록 님이 쓰신 글 :
: : : : : -.0
: : : : :
: : : : : 32bit 프로그래밍에서는 far 포인터는 의미가 없습니다.
: : : : : 모든 포인터가 32bit 형이기 때문이죠.
: : : : :
: : : : : 참고적으로 far 포인터는 16 비트 세크먼그 먼트 주소 + 16 비트 옵셋으로 구성되는데
: : : : :
: : : : : 이를 염두하여 컨버팅 하시면 되겠습니다.
: : : : :
: : : : : 어떤 부분인지 모르겠지만... 그냥 무시하시면 되겠습니다.
: : : : :
: : : : : 이윤성 님이 쓰신 글 :
: : : : : : 우연히 도스용 프로그램을 윈도우용으로 바꾸게 되었는데..
: : : : : :  FP_SEG ,FP_OFF  이거 변환 부분에서 막히네요..
: : : : : :  이걸 윈도우용으로 바꿀려면 어떻게 바꾸어야 할지 조언 부탁 드립니다.
: : : : : :
: : : : : :
: : : : : :  FP_SEG() 에 대해서 찾아 보았습니다.
: : : : : :
: : : : : :  FP_SEG()                Get or Set Segment Portion of a Far Pointer (Macro)
: : : : : :
: : : : : :  #include   <dos.h>
: : : : : :
: : : : : :  unsigned   FP_SEG(longptr);
: : : : : :  void far   *longptr;                    Long pointer to memory address
: : : : : :
: : : : : :     FP_SEG() gets or sets the segment portion of the far pointer
: : : : : :     'longptr'.
: : : : : :
: : : : : :        Returns:     An unsigned integer representing a segment address.
: : : : : :
: : : : : :          Notes:     FP_SEG() is a macro.
: : : : : :
: : : : : :    Portability:     MS-DOS only.
: : : : : :
: : : : : :    -------------------------------- Example ---------------------------------
: : : : : :
: : : : : :     The following example gets the segment and offset portion of a far
: : : : : :     pointer and increments the offset by one.
: : : : : :
: : : : : :            #include <dos.h>
: : : : : :
: : : : : :            char far *ptr;
: : : : : :            unsigned int seg_val, off_val;
: : : : : :
: : : : : :            main()
: : : : : :            {
: : : : : :                seg_val = FP_SEG(ptr);
: : : : : :                off_val = FP_OFF(ptr);
: : : : : :                FP_OFF(ptr) = ++off_val;
: : : : : :                printf("%04x:%04x",seg_val,off_val);
: : : : : :            }

+ -

관련 글 리스트
41006 dos 용 FP_SEG ,FP_OFF 를 어떻게 window용으로 바꿀수 있을까요? 이윤성 1119 2005/07/13
41007     Re:dos 용 FP_SEG ,FP_OFF 를 어떻게 window용으로 바꿀수 있을까요? 황경록 1192 2005/07/13
41009         Re:Re:dos 용 FP_SEG ,FP_OFF 를 어떻게 window용으로 바꿀수 있을까요? 이윤성 1135 2005/07/13
41012             Re:Re:Re:dos 용 FP_SEG ,FP_OFF 를 어떻게 window용으로 바꿀수 있을까요? evergreen 1080 2005/07/13
41015                 Re:Re:Re:Re:dos 용 FP_SEG ,FP_OFF 를 어떻게 window용으로 바꿀수 있을까요? 이윤성 1006 2005/07/13
41021                     Re:Re:Re:Re:Re:dos 용 FP_SEG ,FP_OFF 를 어떻게 window용으로 바꿀수 있을까요? evergreen 925 2005/07/13
41027                         Re:Re:Re:Re:Re:Re:dos 용 FP_SEG ,FP_OFF 를 어떻게 window용으로 바꿀수 있을까요? 이윤성 978 2005/07/13
41011             Re:Re:Re:dos 용 FP_SEG ,FP_OFF 를 어떻게 window용으로 바꿀수 있을까요? 방태윤 956 2005/07/13
41013                 Re:Re:Re:Re:dos 용 FP_SEG ,FP_OFF 를 어떻게 window용으로 바꿀수 있을까요? 황경록 940 2005/07/13
41014                     Re:Re:Re:Re:Re:dos 용 FP_SEG ,FP_OFF 를 어떻게 window용으로 바꿀수 있을까요? 이윤성 879 2005/07/13
41017                         Re:Re:Re:Re:Re:Re:dos 용 FP_SEG ,FP_OFF 를 어떻게 window용으로 바꿀수 있을까요? 황경록 921 2005/07/13
41018                             Re:Re:Re:Re:Re:Re:Re:dos 용 FP_SEG ,FP_OFF 를 어떻게 window용으로 바꿀수 있을까요? 이윤성 933 2005/07/13
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.