amiga_boottest

annotate src/main.c @ 1:48093e4bd99a

stuff
author John Tsiombikas <nuclear@member.fsf.org>
date Wed, 21 Feb 2018 18:00:45 +0200
parents
children 58ebd84822e7
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 void wait_vpos(int x);
nuclear@1 6 void wait_vblank(void);
nuclear@1 7
nuclear@1 8 #define BPLSZ (320 / 8 * 256)
nuclear@1 9 static unsigned char fb0[BPLSZ];
nuclear@1 10
nuclear@1 11 int main(void)
nuclear@1 12 {
nuclear@1 13 uint32_t fb0_addr = (uint32_t)fb0;
nuclear@1 14
nuclear@1 15 REG_INTENA = SETBITS(INTEN_VERTB | INTEN_MASTER);
nuclear@1 16
nuclear@1 17 REG_DMACON = CLRBITS(DMA_ALL);
nuclear@1 18 REG_BPLCON0 = BPLCON0_COUNT(0) | BPLCON0_COLOR;
nuclear@1 19 REG_BPLCON1 = 0;
nuclear@1 20 REG_DIWSTART = 0x2981;
nuclear@1 21 REG_DIWSTOP = 0x29c1;
nuclear@1 22 REG_DDFSTART = 0x38;
nuclear@1 23 REG_DDFSTOP = 0xd0;
nuclear@1 24
nuclear@1 25 REG_COLOR0 = 0x00f;
nuclear@1 26 REG_COLOR1 = 0xff0;
nuclear@1 27
nuclear@1 28 init_copper(0, 0);
nuclear@1 29
nuclear@1 30 wait_vblank();
nuclear@1 31 add_copper(COPPER_MOVE(REGN_BPL1PTH, fb0_addr >> 16));
nuclear@1 32 add_copper(COPPER_MOVE(REGN_BPL1PTL, fb0_addr));
nuclear@1 33
nuclear@1 34 add_copper(COPPER_VWAIT(64));
nuclear@1 35 add_copper(COPPER_MOVE(REGN_COLOR0, 0xf00));
nuclear@1 36 add_copper(COPPER_VWAIT(70));
nuclear@1 37 add_copper(COPPER_MOVE(REGN_COLOR0, 0x00f));
nuclear@1 38
nuclear@1 39 add_copper(COPPER_END);
nuclear@1 40
nuclear@1 41 fb0[128 * 320 / 8] = 8;
nuclear@1 42
nuclear@1 43 REG_DMACON = SETBITS(DMA_COPPER | DMA_MASTER);
nuclear@1 44 enable_intr();
nuclear@1 45
nuclear@1 46 for(;;);
nuclear@1 47 return 0;
nuclear@1 48 }
nuclear@1 49
nuclear@1 50 void wait_vpos(int x)
nuclear@1 51 {
nuclear@1 52 x <<= 8;
nuclear@1 53 while((REG32_VPOSR & 0x1ff00) < x);
nuclear@1 54 }
nuclear@1 55
nuclear@1 56 void wait_vblank(void)
nuclear@1 57 {
nuclear@1 58 wait_vpos(300);
nuclear@1 59 }