언뜻 보기에는 PC용이 아니라 다른 전용하드웨어용 소스의 일부같다고 생각이듭니다.
poke류로 define된 함수는 지정한 어드레스에 데이타를 저장하는 것이고,
peek류는 지정 어드레스에서 데이타를 읽어오는 것이지요.
끝단의 b, w, l은 각각 byte, word, long의 머리글자겠지요.
함수자료를 찾는다?고 하셨는데 매크로로 커스텀 정의한 함수이므로 자료가 있을리 없겠지요.
단지 define문의 정의가 전부인 겁니다. 사용자 정의 매크로함수 니까 있는 그대로 이해하심 되지요.
이런 형태인 경우 주로 전용의 컴파일러를 사용하는 경우가 많습니다.
터보C가 아닐 수도 있지요.
고정된 하드웨어 주소에 데이타를 직접 저장하거나, 읽어올수 있도록 define한 경우입니다.
터보씨에서 기본적으로 제공하는 poke나 peek함수처럼 생각하시고 이해하시면 될 듯 합니다.
이해를 위해 예문으로 소스 두줄만 해석만 해볼까요?
1: pokeb( GLCD_REG+7, 0x00 ); /* bank #0 */
2: for( i = 0; i < 0x1000; i++ ) pokeb( GLCDOVLY+i, 2 );
3: for( i = 0; i < 0x1000; i++ ) pokeb( GLCDTEXT0+i, 0 );
1 - GLCD_REG에서 7바이트 뒤의 메모리에 0x00(16진수 0)을 저장
2 - i가 0에서 16진수 0x1000까지 1씩 증가하면서 GLCDOVLY에서부터 i바이트만큼씩 진행하면서 2를 저장
3 - i가 0에서 16진수 0x1000까지 1씩 증가하면서 GLCDTEXT0에서부터 i바이트만큼씩 진행하면서 0를 저장(clear)
1번 라인을 보시면 주석으로 bank #0이 있는것으로 보아 GLCD_REG+7의 주소위치는 사용하는 뱅크를 결정하는 주소인듯 합니다. 아래에 보면 4로 변화시키고 bank #1이라고 주석을 달아놓은걸 보면 말입니다.
부족한 생각이나마 적어봅니다.
수고하세요 ~.~
주니 님이 쓰신 글 :
: 제가 소스 분석을 하다가 이해가 가질않는 부분이 있어서...사실 처음 보는게 더맞을듯.....ㅠㅠ
:
: #define pokeb( address, data ) *(char * )(address) = (( unsigned char )data)
: #define pokew( address, data ) *(short * )(address) = (( unsigned short)data)
: #define pokel( address, data ) *(int * )(address) = (( unsigned int )data)
:
: #define peekb( address ) *( char * )(address)
: #define peekw( address ) *( short * )(address)
: #define peekl( address ) *( int * )(address)
:
: void InitText0()
: {
: int i;
: pokeb( GLCD_REG+7, 0x00 ); /* bank #0 */
: for( i = 0; i < 0x1000; i++ ) pokeb( GLCDOVLY+i, 2 );
: for( i = 0; i < 0x1000; i++ ) pokeb( GLCDTEXT0+i, 0 );
: pokeb( GLCD_REG+7, 0x04 ); /* bank #1 */
: for( i = 0; i < 0x1000; i++ ) pokeb( GLCDOVLY+i, 2 );
: for( i = 0; i < 0x1000; i++ ) pokeb( GLCDTEXT0+i, 0 );
: }
:
: InitText0();//함수 호츨부분...
:
: 함수 호출을 하면 InText0에가서 pokeb를 실행하고 하는데 여기서 쓰이는 pokeb는 디파인 처리되어있고..
:
: pokeb, pokew, pokel, peekb, peekw, peekl란 함수 자료도 찾기 힘들고 해서 여러분들의 도움을 받고자 합니다.
:
: 아시는 분께서는 초보에게 설명좀 부탁드립니다.
|