38 lines
1.6 KiB
C
38 lines
1.6 KiB
C
#pragma once
|
|
|
|
#define TYPE_0_COUNT(c) (((c) & 0x3fff) << 16)
|
|
#define TYPE_0_ONE_REG (1 << 15)
|
|
#define TYPE_0_BASE_INDEX(i) (((i) & 0x1fff) << 0)
|
|
|
|
#define TYPE_3_COUNT(c) (((c) & 0x3fff) << 16)
|
|
#define TYPE_3_OPCODE(o) (((o) & 0xff) << 8)
|
|
|
|
#define T0(address, count) \
|
|
do { \
|
|
ib[ix++].u32 = TYPE_0_COUNT(count) | TYPE_0_BASE_INDEX(address >> 2); \
|
|
} while (0);
|
|
|
|
#define T0_ONE_REG(address, count) \
|
|
do { \
|
|
ib[ix++].u32 = TYPE_0_COUNT(count) | TYPE_0_ONE_REG | TYPE_0_BASE_INDEX(address >> 2); \
|
|
} while (0);
|
|
|
|
#define T0V(address, value) \
|
|
do { \
|
|
ib[ix++].u32 = TYPE_0_COUNT(0) | TYPE_0_BASE_INDEX(address >> 2); \
|
|
ib[ix++].u32 = value; \
|
|
} while (0);
|
|
|
|
#define T0Vf(address, value) \
|
|
do { \
|
|
ib[ix++].u32 = TYPE_0_COUNT(0) | TYPE_0_BASE_INDEX(address >> 2); \
|
|
ib[ix++].f32 = value; \
|
|
} while (0);
|
|
|
|
#define T3(opcode, count) \
|
|
do { \
|
|
ib[ix++].u32 = (0b11 << 30) | TYPE_3_COUNT(count) | TYPE_3_OPCODE(opcode); \
|
|
} while (0);
|
|
|
|
#define _3D_DRAW_IMMD_2 0x35
|