amiga_boottest

annotate src/main.c @ 2:58ebd84822e7

it works
author John Tsiombikas <nuclear@member.fsf.org>
date Thu, 22 Feb 2018 12:44:20 +0200
parents 48093e4bd99a
children 555b986cc420
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 }