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
00058
00059
00060
00061
00062
00063 #define IS_FACE_CODE(code) \
00064 (((code)&~0x20)=='N'|| \
00065 ((code)&~0x20)=='S'|| \
00066 ((code)&~0x20)=='E'|| \
00067 ((code)&~0x20)=='W')
00071
00072
00076
00087 #define SET_BIT(value,bitNum) ((value) |= (1<<(bitNum)))
00088
00099 #define CLEAR_BIT(value,bitNum) ((value) &= ~(1<<(bitNum)))
00100
00112 #define GET_BIT(value,bitNum) (((value)>>(bitNum))&1)
00113
00126 #define TEST_BIT(value,bitNum) ((value)&(1<<(bitNum)))
00127
00143 #define BIT_PAIR_AT_POSITION(bits,newValue,position) \
00144 ((bits) = ((bits)&(~(3<<(position))))|((newValue)<<(position)))
00145
00147
00148
00153 #define REGISTER_OFFSET(baseAddress,byteOffset) \
00154 (*((uv32 *) (((u32)(baseAddress))+(byteOffset))))
00155
00176 #define MAP4BY2(a, b, c, d) ((((((((u8) d)<<2)|(c))<<2)|(b))<<2)|(a))
00177
00192 #define GET_MAP4BY2(map, idx) (((map)>>((idx)<<1))&0x3)
00193
00210 #define MAP4BY4(a, b, c, d) ((((((((u16) d)<<4)|(c))<<4)|(b))<<4)|(a))
00211
00226 #define GET_MAP4BY4(map, idx) (((map)>>((idx)<<2))&0xf)
00227
00244 #define MAP4BY8(a, b, c, d) ((((((((u32) d)<<8)|(c))<<8)|(b))<<8)|(a))
00245
00259 #define GET_MAP4BY8(map, idx) (((map)>>((idx)<<3))&0xff)
00260
00289 #define MAP3BY3(a, b, c) ((((((u16) c)<<3)|(b))<<3)|(a))
00290
00304 #define GET_MAP3BY3(map, idx) (((map)>>((idx)*3))&0x7)
00305
00322 #define BLINK_MAP(red,green,blue) MAP3BY3(blue,green,red)
00323
00324
00338 #define GET_BLINK_MAP_COLOR(code,color) GET_MAP3BY3(code,2-(color))
00339
00411 #define IS_EARLIER(a,b) ((((u32)(a))-((u32)(b))) > 0x80000000UL)
00412
00413 #define IS_LATER_OR_EQUAL(a,b) ((((u32)(a))-((u32)(b))) < 0x80000000UL)
00416 #define IS_LATER(a,b) ((((u32)(b))-((u32)(a))) > 0x80000000UL)
00419 #define IS_EARLIER_OR_EQUAL(a,b) ((((u32)(b))-((u32)(a))) < 0x80000000UL)
00423 #define IS_EARLIER16(a,b) ((u16)(((u16)(a))-((u16)(b))) > 0x8000UL)
00426 #define IS_LATER_OR_EQUAL16(a,b) ((u16)(((u16)(a))-((u16)(b))) < 0x8000UL)
00429 #define IS_LATER16(a,b) ((u16)(((u16)(b))-((u16)(a))) > 0x8000UL)
00432 #define IS_EARLIER_OR_EQUAL16(a,b) ((u16)(((u16)(b))-((u16)(a))) < 0x8000UL)
00435 #define IS_EARLIER8(a,b) ((u8)(((u8)(a))-((u8)(b))) > 0x80UL)
00438 #define IS_LATER_OR_EQUAL8(a,b) ((u8)(((u8)(a))-((u8)(b))) < 0x80UL)
00441 #define IS_LATER8(a,b) ((u8)(((u8)(b))-((u8)(a))) > 0x80UL)
00444 #define IS_EARLIER_OR_EQUAL8(a,b) ((u8)(((u8)(b))-((u8)(a))) < 0x80UL)
00448
00449
00452
00471 #define STRUCT_MEMBER_OFFSET(structure,member) ((uptr) &(((structure *) 0)->member))
00472
00473 #define XSTR(arg) STR(arg)
00476 #define STR(arg) #arg
00480 #define MIN(a,b) (((a)<(b))?(a):(b))
00486 #define MAX(a,b) (((a)>(b))?(a):(b))
00493 #define FILEPOS __FILE__ ":" XSTR(__LINE__)
00494
00497
00498
00500 #define B36_CONST_0 0u
00501 #define B36_CONST_1 1u
00502 #define B36_CONST_2 2u
00503 #define B36_CONST_3 3u
00504 #define B36_CONST_4 4u
00505 #define B36_CONST_5 5u
00506 #define B36_CONST_6 6u
00507 #define B36_CONST_7 7u
00508 #define B36_CONST_8 8u
00509 #define B36_CONST_9 9u
00510 #define B36_CONST_A 10u
00511 #define B36_CONST_a 10u
00512 #define B36_CONST_B 11u
00513 #define B36_CONST_b 11u
00514 #define B36_CONST_C 12u
00515 #define B36_CONST_c 12u
00516 #define B36_CONST_D 13u
00517 #define B36_CONST_d 13u
00518 #define B36_CONST_E 14u
00519 #define B36_CONST_e 14u
00520 #define B36_CONST_F 15u
00521 #define B36_CONST_f 15u
00522 #define B36_CONST_G 16u
00523 #define B36_CONST_g 16u
00524 #define B36_CONST_H 17u
00525 #define B36_CONST_h 17u
00526 #define B36_CONST_I 18u
00527 #define B36_CONST_i 18u
00528 #define B36_CONST_J 19u
00529 #define B36_CONST_j 19u
00530 #define B36_CONST_K 20u
00531 #define B36_CONST_k 20u
00532 #define B36_CONST_L 21u
00533 #define B36_CONST_l 21u
00534 #define B36_CONST_M 22u
00535 #define B36_CONST_m 22u
00536 #define B36_CONST_N 23u
00537 #define B36_CONST_n 23u
00538 #define B36_CONST_O 24u
00539 #define B36_CONST_o 24u
00540 #define B36_CONST_P 25u
00541 #define B36_CONST_p 25u
00542 #define B36_CONST_Q 26u
00543 #define B36_CONST_q 26u
00544 #define B36_CONST_R 27u
00545 #define B36_CONST_r 27u
00546 #define B36_CONST_S 28u
00547 #define B36_CONST_s 28u
00548 #define B36_CONST_T 29u
00549 #define B36_CONST_t 29u
00550 #define B36_CONST_U 30u
00551 #define B36_CONST_u 30u
00552 #define B36_CONST_V 31u
00553 #define B36_CONST_v 31u
00554 #define B36_CONST_W 32u
00555 #define B36_CONST_w 32u
00556 #define B36_CONST_X 33u
00557 #define B36_CONST_x 33u
00558 #define B36_CONST_Y 34u
00559 #define B36_CONST_y 34u
00560 #define B36_CONST_Z 35u
00561 #define B36_CONST_z 35u
00562
00564 #define B36_1(a) B36_CONST_##a
00565 #define B36_2(a,b) (B36_1(a)*36u+B36_1(b))
00566 #define B36_3(a,b,c) (B36_2(a,b)*36u+B36_1(c))
00567 #define B36_4(a,b,c,d) (B36_3(a,b,c)*36u+B36_1(d))
00568 #define B36_5(a,b,c,d,e) (B36_4(a,b,c,d)*36u+B36_1(e))
00569 #define B36_6(a,b,c,d,e,f) (B36_5(a,b,c,d,e)*36u+B36_1(f))
00570 #define B36_7(a,b,c,d,e,f,g) (B36_6(a,b,c,d,e,f)*36u+B36_1(g))
00572
00573
00574 #ifndef HOST_MODE
00575
00576 #define IN_BODYRAM __attribute__((section (".bodyram")))
00577 #define IN_TALKRAM __attribute__((section (".talkram")))
00578 #define IN_FASTRAM __attribute__((section (".fastram")))
00579
00580 #define IN_BODYRAM_BSS __attribute__((section (".bss.bodyram")))
00581 #define IN_TALKRAM_BSS __attribute__((section (".bss.talkram")))
00582 #define IN_FASTRAM_BSS __attribute__((section (".bss.fastram")))
00583
00584 #else
00585
00586 #define IN_BODYRAM
00587 #define IN_TALKRAM
00588 #define IN_FASTRAM
00589
00590 #define IN_BODYRAM_BSS
00591 #define IN_TALKRAM_BSS
00592 #define IN_FASTRAM_BSS
00593
00594 #endif
00595
00596 #endif