7 #include "hwregs.h" /* XXX */
12 void draw_tile(int tid, int x, int y, int light);
14 static uint16_t *sprdata[NUM_HWSPRITES];
15 static uint16_t nullspr[] = {
21 #define SPR_POS(x, y) \
22 (((uint16_t)((x) + 0x40) & 0xff) | ((uint16_t)((y) + 0x2c) << 8))
27 int i, sprpos[] = {136, 76};
28 uint32_t nullspr_addr = (intptr_t)nullspr;
40 REG_COLOR_PTR[i + 16] = sprpal[i];
51 int reg = REGN_SPR0PTH + i * 4;
52 if(i < NUM_HWSPRITES) {
53 uint16_t sx, sy, vstop;
54 /* initialize active sprites, and set the sprite pointers */
55 uint32_t addr = (intptr_t)sprdata[i];
56 add_copper(COPPER_MOVE(reg, addr >> 16));
57 add_copper(COPPER_MOVE(reg + 2, addr));
59 sx = 0x80 + sprpos[0] + (i >> 1) * 16;
60 sy = 0x2c + sprpos[1];
61 vstop = sy + SPRITE_HEIGHT;
63 sprdata[i][0] = (sx >> 1) | (sy << 8);
64 sprdata[i][1] = (vstop << 8) | ((vstop >> 7) & 2) |
65 (sx & 1) | ((i & 1) ? 0x80 : 0);
67 /* point the sprite pointers to the null sprite for the rest */
68 add_copper(COPPER_MOVE(reg, nullspr_addr >> 16));
69 add_copper(COPPER_MOVE(reg + 2, nullspr_addr));
73 *copperlist_end = COPPER_END;
83 int i, j, xoffs, yoffs, ntiles;
85 /* reset sprite data */
88 for(i=0; i<YTILES; i++) {
89 xoffs = i & 1 ? TILE_W / 2 : 0;
90 ntiles = i & 1 ? XTILES - 1 : XTILES;
91 for(j=0; j<ntiles; j++) {
92 draw_tile(0, xoffs, yoffs, 0);
100 void draw_tile(int tid, int x, int y, int light)
102 unsigned char *dest = bplptr[0] + (y * SCANSZ * NBPL) + x / 8;
103 unsigned char *src = test_tile;
107 REG32_BLTCON = BLTCON_USEA | BLTCON_USEB | BLTCON_USEC | BLTCON_USED |
109 REG32_BLTAFLWM = 0xffffffff;
112 REG_BLTCMOD = SCANSZ - TILE_W / 8;
113 REG_BLTDMOD = SCANSZ - TILE_W / 8;
114 REG32_BLTAPT = (intptr_t)test_tile_mask;
115 REG32_BLTBPT = (intptr_t)src;
116 REG32_BLTCPT = (intptr_t)dest;
117 REG32_BLTDPT = (intptr_t)dest;
118 REG_BLTSIZE = BLTSIZE(TILE_W, TILE_H * NBPL);