00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00027 #ifndef SFBMACROS_H_
00028 #define SFBMACROS_H_
00029
00030 #include "SFBTypes.h"
00031
00032
00037 #define CLOCKWISE_FACE(dir) GET_MAP4BY2(MAP4BY2(EAST,WEST,SOUTH,NORTH),dir)
00040 #define COUNTERCLOCKWISE_FACE(dir) GET_MAP4BY2(MAP4BY2(WEST,EAST,NORTH,SOUTH),dir)
00043 #define ANTICLOCKWISE_FACE(dir) COUNTERCLOCKWISE_FACE(dir)
00044 #define OPPOSITE_FACE(dir) GET_MAP4BY2(MAP4BY2(SOUTH,NORTH,WEST,EAST),dir)
00048 extern const char * const faceNames[];
00049 #define FACE_NAME(face) (faceNames[face])
00050 #define FACE_CODE(face) GET_MAP4BY8(MAP4BY8('N','S','E','W'),face)
00052 #define FACE_NUMBER_FROM_CODE(code) (((((code)&~0x20)^(((code)&~0x20)>>1))-1)&0x3)
00057 #define IS_FACE_CODE(code) ((((code)>>6)==1) && ((0x00884020>>((code)&0x1f))&1))
00064
00065
00069
00080 #define SET_BIT(value,bitNum) ((value) |= (1<<(bitNum)))
00081
00092 #define CLEAR_BIT(value,bitNum) ((value) &= ~(1<<(bitNum)))
00093
00105 #define GET_BIT(value,bitNum) (((value)>>(bitNum))&1)
00106
00119 #define TEST_BIT(value,bitNum) ((value)&(1<<(bitNum)))
00120
00136 #define BIT_PAIR_AT_POSITION(bits,newValue,position) \
00137 ((bits) = ((bits)&(~(3<<(position))))|((newValue)<<(position)))
00138
00140
00141
00146 #define REGISTER_OFFSET(baseAddress,byteOffset) \
00147 (*((uv32 *) (((u32)(baseAddress))+(byteOffset))))
00148
00169 #define MAP4BY2(a, b, c, d) ((((((((u8) d)<<2)|(c))<<2)|(b))<<2)|(a))
00170
00185 #define GET_MAP4BY2(map, idx) (((map)>>((idx)<<1))&0x3)
00186
00203 #define MAP4BY4(a, b, c, d) ((((((((u16) d)<<4)|(c))<<4)|(b))<<4)|(a))
00204
00219 #define GET_MAP4BY4(map, idx) (((map)>>((idx)<<2))&0xf)
00220
00237 #define MAP4BY8(a, b, c, d) ((((((((u32) d)<<8)|(c))<<8)|(b))<<8)|(a))
00238
00252 #define GET_MAP4BY8(map, idx) (((map)>>((idx)<<3))&0xff)
00253
00282 #define MAP3BY3(a, b, c) ((((((u16) c)<<3)|(b))<<3)|(a))
00283
00297 #define GET_MAP3BY3(map, idx) (((map)>>((idx)*3))&0x7)
00298
00315 #define BLINK_MAP(red,green,blue) MAP3BY3(blue,green,red)
00316
00317
00331 #define GET_BLINK_MAP_COLOR(code,color) GET_MAP3BY3(code,2-(color))
00332
00404 #define IS_EARLIER(a,b) ((((u32)(a))-((u32)(b))) > 0x80000000UL)
00405
00406 #define IS_LATER_OR_EQUAL(a,b) ((((u32)(a))-((u32)(b))) < 0x80000000UL)
00409 #define IS_LATER(a,b) ((((u32)(b))-((u32)(a))) > 0x80000000UL)
00412 #define IS_EARLIER_OR_EQUAL(a,b) ((((u32)(b))-((u32)(a))) < 0x80000000UL)
00416 #define IS_EARLIER16(a,b) ((u16)(((u16)(a))-((u16)(b))) > 0x8000UL)
00419 #define IS_LATER_OR_EQUAL16(a,b) ((u16)(((u16)(a))-((u16)(b))) < 0x8000UL)
00422 #define IS_LATER16(a,b) ((u16)(((u16)(b))-((u16)(a))) > 0x8000UL)
00425 #define IS_EARLIER_OR_EQUAL16(a,b) ((u16)(((u16)(b))-((u16)(a))) < 0x8000UL)
00428 #define IS_EARLIER8(a,b) ((u8)(((u8)(a))-((u8)(b))) > 0x80UL)
00431 #define IS_LATER_OR_EQUAL8(a,b) ((u8)(((u8)(a))-((u8)(b))) < 0x80UL)
00434 #define IS_LATER8(a,b) ((u8)(((u8)(b))-((u8)(a))) > 0x80UL)
00437 #define IS_EARLIER_OR_EQUAL8(a,b) ((u8)(((u8)(b))-((u8)(a))) < 0x80UL)
00441
00442
00445
00464 #define STRUCT_MEMBER_OFFSET(structure,member) ((uptr) &(((structure *) 0)->member))
00465
00466 #define XSTR(arg) STR(arg)
00469 #define STR(arg) #arg
00473 #define MIN(a,b) (((a)<(b))?(a):(b))
00479 #define MAX(a,b) (((a)>(b))?(a):(b))
00486 #define FILEPOS __FILE__ ":" XSTR(__LINE__)
00487
00490
00491
00493 #define B36_CONST_0 0u
00494 #define B36_CONST_1 1u
00495 #define B36_CONST_2 2u
00496 #define B36_CONST_3 3u
00497 #define B36_CONST_4 4u
00498 #define B36_CONST_5 5u
00499 #define B36_CONST_6 6u
00500 #define B36_CONST_7 7u
00501 #define B36_CONST_8 8u
00502 #define B36_CONST_9 9u
00503 #define B36_CONST_A 10u
00504 #define B36_CONST_a 10u
00505 #define B36_CONST_B 11u
00506 #define B36_CONST_b 11u
00507 #define B36_CONST_C 12u
00508 #define B36_CONST_c 12u
00509 #define B36_CONST_D 13u
00510 #define B36_CONST_d 13u
00511 #define B36_CONST_E 14u
00512 #define B36_CONST_e 14u
00513 #define B36_CONST_F 15u
00514 #define B36_CONST_f 15u
00515 #define B36_CONST_G 16u
00516 #define B36_CONST_g 16u
00517 #define B36_CONST_H 17u
00518 #define B36_CONST_h 17u
00519 #define B36_CONST_I 18u
00520 #define B36_CONST_i 18u
00521 #define B36_CONST_J 19u
00522 #define B36_CONST_j 19u
00523 #define B36_CONST_K 20u
00524 #define B36_CONST_k 20u
00525 #define B36_CONST_L 21u
00526 #define B36_CONST_l 21u
00527 #define B36_CONST_M 22u
00528 #define B36_CONST_m 22u
00529 #define B36_CONST_N 23u
00530 #define B36_CONST_n 23u
00531 #define B36_CONST_O 24u
00532 #define B36_CONST_o 24u
00533 #define B36_CONST_P 25u
00534 #define B36_CONST_p 25u
00535 #define B36_CONST_Q 26u
00536 #define B36_CONST_q 26u
00537 #define B36_CONST_R 27u
00538 #define B36_CONST_r 27u
00539 #define B36_CONST_S 28u
00540 #define B36_CONST_s 28u
00541 #define B36_CONST_T 29u
00542 #define B36_CONST_t 29u
00543 #define B36_CONST_U 30u
00544 #define B36_CONST_u 30u
00545 #define B36_CONST_V 31u
00546 #define B36_CONST_v 31u
00547 #define B36_CONST_W 32u
00548 #define B36_CONST_w 32u
00549 #define B36_CONST_X 33u
00550 #define B36_CONST_x 33u
00551 #define B36_CONST_Y 34u
00552 #define B36_CONST_y 34u
00553 #define B36_CONST_Z 35u
00554 #define B36_CONST_z 35u
00555
00557 #define B36_1(a) B36_CONST_##a
00558 #define B36_2(a,b) (B36_1(a)*36u+B36_1(b))
00559 #define B36_3(a,b,c) (B36_2(a,b)*36u+B36_1(c))
00560 #define B36_4(a,b,c,d) (B36_3(a,b,c)*36u+B36_1(d))
00561 #define B36_5(a,b,c,d,e) (B36_4(a,b,c,d)*36u+B36_1(e))
00562 #define B36_6(a,b,c,d,e,f) (B36_5(a,b,c,d,e)*36u+B36_1(f))
00563 #define B36_7(a,b,c,d,e,f,g) (B36_6(a,b,c,d,e,f)*36u+B36_1(g))
00564
00565
00566
00567 #ifndef HOST_MODE
00568
00569 #define IN_BODYRAM __attribute__((section (".bodyram")))
00570 #define IN_TALKRAM __attribute__((section (".talkram")))
00571 #define IN_FASTRAM __attribute__((section (".fastram")))
00572
00573 #define IN_BODYRAM_BSS __attribute__((section (".bss.bodyram")))
00574 #define IN_TALKRAM_BSS __attribute__((section (".bss.talkram")))
00575 #define IN_FASTRAM_BSS __attribute__((section (".bss.fastram")))
00576
00577 #else
00578
00579 #define IN_BODYRAM
00580 #define IN_TALKRAM
00581 #define IN_FASTRAM
00582
00583 #define IN_BODYRAM_BSS
00584 #define IN_TALKRAM_BSS
00585 #define IN_FASTRAM_BSS
00586
00587 #endif
00588
00589 #endif