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 } |