rev |
line source |
nuclear@1
|
1 #include "hwregs.h"
|
nuclear@1
|
2 #include "intr.h"
|
nuclear@1
|
3 #include "copper.h"
|
nuclear@1
|
4
|
nuclear@1
|
5 #define BPLSZ (320 / 8 * 256)
|
nuclear@1
|
6 static unsigned char fb0[BPLSZ];
|
nuclear@1
|
7
|
nuclear@2
|
8 extern uint16_t dbgval;
|
nuclear@2
|
9
|
nuclear@2
|
10 #define wait_vpos(x) \
|
nuclear@2
|
11 asm volatile ( \
|
nuclear@2
|
12 "0: move.l 0xdff004, %%d0\n\t" \
|
nuclear@2
|
13 "and.l #0x1ff00, %%d0\n\t" \
|
nuclear@2
|
14 "cmp.l %0, %%d0\n\t" \
|
nuclear@2
|
15 "bne 0b\n\t" \
|
nuclear@2
|
16 :: "i"((x) << 8) : "%d0")
|
nuclear@2
|
17
|
nuclear@2
|
18 #define wait_vblank() wait_vpos(300)
|
nuclear@2
|
19 #define wait_scanline(x) wait_vpos((x) + 0x2c)
|
nuclear@2
|
20
|
nuclear@2
|
21 #define clear_bpl(p) \
|
nuclear@2
|
22 asm volatile ( \
|
nuclear@2
|
23 "move.l %0, %%a0\n\t" \
|
nuclear@2
|
24 "move.l %1, %%d0\n\t" \
|
nuclear@2
|
25 "0: clr.l (%%a0)+\n\t" \
|
nuclear@2
|
26 "dbra %%d0, 0b\n\t" \
|
nuclear@2
|
27 :: "a"(p), "i"(BPLSZ / 4 - 1) \
|
nuclear@2
|
28 : "a0", "d0")
|
nuclear@2
|
29
|
nuclear@2
|
30 static uint32_t coplist[] = {
|
nuclear@2
|
31 COPPER_MOVE(REGN_BPL1PTH, 0),
|
nuclear@2
|
32 COPPER_MOVE(REGN_BPL1PTL, 0),
|
nuclear@2
|
33 COPPER_VWAIT(50),
|
nuclear@2
|
34 COPPER_MOVE(REGN_COLOR0, 0x00a),
|
nuclear@2
|
35 COPPER_VWAIT(60),
|
nuclear@2
|
36 COPPER_MOVE(REGN_COLOR0, 0x008),
|
nuclear@2
|
37 COPPER_END
|
nuclear@2
|
38 };
|
nuclear@2
|
39
|
nuclear@1
|
40 int main(void)
|
nuclear@1
|
41 {
|
nuclear@1
|
42 REG_INTENA = SETBITS(INTEN_VERTB | INTEN_MASTER);
|
nuclear@1
|
43
|
nuclear@1
|
44 REG_DMACON = CLRBITS(DMA_ALL);
|
nuclear@2
|
45 REG_BPLCON0 = BPLCON0_COUNT(1) | BPLCON0_COLOR;
|
nuclear@1
|
46 REG_BPLCON1 = 0;
|
nuclear@1
|
47 REG_DIWSTART = 0x2981;
|
nuclear@1
|
48 REG_DIWSTOP = 0x29c1;
|
nuclear@1
|
49 REG_DDFSTART = 0x38;
|
nuclear@1
|
50 REG_DDFSTOP = 0xd0;
|
nuclear@1
|
51
|
nuclear@2
|
52 REG_COLOR0 = 0x008;
|
nuclear@2
|
53 REG_COLOR1 = 0xaaa;
|
nuclear@1
|
54
|
nuclear@1
|
55 wait_vblank();
|
nuclear@2
|
56 coplist[0] = COPPER_MOVE(REGN_BPL1PTH, (uint32_t)fb0 >> 16);
|
nuclear@2
|
57 coplist[1] = COPPER_MOVE(REGN_BPL1PTL, (uint32_t)fb0);
|
nuclear@2
|
58 REG32_COP1LC = (uint32_t)coplist;
|
nuclear@2
|
59 REG_COPJMP1 = 0;
|
nuclear@1
|
60
|
nuclear@2
|
61 fb0[128 * 320 / 8 + 160 / 8] = 8;
|
nuclear@1
|
62
|
nuclear@2
|
63 REG_DMACON = SETBITS(DMA_BPL | DMA_COPPER | DMA_MASTER);
|
nuclear@1
|
64
|
nuclear@2
|
65 for(;;) {
|
nuclear@2
|
66 wait_vblank();
|
nuclear@2
|
67 }
|
nuclear@1
|
68
|
nuclear@1
|
69 return 0;
|
nuclear@1
|
70 }
|