yeah it kinda works
This commit is contained in:
parent
2b24ebc602
commit
7374d8cad0
388
main.c
388
main.c
@ -9,27 +9,16 @@
|
||||
|
||||
#include <graphics/gfx.h>
|
||||
|
||||
#include "blitter.h"
|
||||
#include "copper.h"
|
||||
#include "system/blitter.h"
|
||||
#include "system/copper.h"
|
||||
#include "system/system.h"
|
||||
|
||||
#include "screen.h"
|
||||
#include "types.h"
|
||||
#include "system.h"
|
||||
|
||||
extern struct Custom far custom;
|
||||
extern unsigned char far coolbun[];
|
||||
|
||||
void writeSomethingToScreen(struct ScreenSetup *screenSetup) {
|
||||
*(screenSetup->memoryStart) = 255;
|
||||
*(screenSetup->memoryStart + 8) = 0xAA;
|
||||
*(screenSetup->memoryStart + 16) = 0xF0;
|
||||
*(screenSetup->memoryStart + SCREEN_WIDTH * SCREEN_HEIGHT / 8 + 4) = 255;
|
||||
}
|
||||
|
||||
// [ ] increase the size of the bun area
|
||||
// [ ] ensure the area has the correct data
|
||||
// [ ] fix existing edge writes to work
|
||||
// [ ] change non-edge write to use only bun area
|
||||
|
||||
#define COOL_BUN_WIDTH (32)
|
||||
#define COOL_BUN_WIDTH_BYTES (COOL_BUN_WIDTH / 8)
|
||||
#define COOL_BUN_HEIGHT (32)
|
||||
@ -50,24 +39,6 @@ unsigned char *coolbunArea;
|
||||
unsigned char *scratchArea;
|
||||
struct ScreenSetup screenSetup;
|
||||
|
||||
void clearScratchArea() {
|
||||
custom.bltcon0 = 0xf0 + (1 << 8);
|
||||
custom.bltcon1 = 0;
|
||||
|
||||
custom.bltadat = 0x0000;
|
||||
custom.bltafwm = 0xffff;
|
||||
custom.bltalwm = 0xffff;
|
||||
|
||||
custom.bltdpt = scratchArea;
|
||||
|
||||
custom.bltamod = 0;
|
||||
custom.bltdmod = 0;
|
||||
|
||||
custom.bltsize = (4) + (32 << 6);
|
||||
|
||||
WaitBlit();
|
||||
}
|
||||
|
||||
void bun_offRightSide(int plusXValue, int y) {
|
||||
uint8_t i, plane = 0;
|
||||
uint8_t shift = plusXValue & 15;
|
||||
@ -75,51 +46,24 @@ void bun_offRightSide(int plusXValue, int y) {
|
||||
uint16_t bltalwm;
|
||||
|
||||
for (plane = 0; plane < 2; ++plane) {
|
||||
clearScratchArea();
|
||||
// step 2: copy bun to scratch area that aligns right edge to word edge
|
||||
// right shift so it's ascending.
|
||||
custom.bltcon0 = 0xc0 + (1 << 8) + (1 << 10) + (shift << 12);
|
||||
custom.bltcon1 = (shift << 12);
|
||||
|
||||
custom.bltadat = 0xffff;
|
||||
custom.bltafwm = 0xffff;
|
||||
custom.bltbpt = coolbunArea + plane * COOL_BUN_PLANE_SIZE;
|
||||
custom.bltdpt = screenSetup.memoryStart + plane * screenSetup.nextBitplaneAdvance + (y * screenSetup.width + screenSetup.width - COOL_BUN_WIDTH) / 8 + wordShift * 2;
|
||||
|
||||
bltalwm = 0xffff;
|
||||
for (i = 0; i < shift; ++i) {
|
||||
bltalwm -= (1 << i);
|
||||
custom.bltafwm = 0xffff;
|
||||
bltalwm = 0x0000;
|
||||
for (i = 0; i < 15 - shift; ++i) {
|
||||
bltalwm += (1 << (15 - i));
|
||||
}
|
||||
custom.bltalwm = bltalwm;
|
||||
|
||||
custom.bltbpt = coolbunArea + (plane * COOL_BUN_WIDTH_BYTES * COOL_BUN_HEIGHT);
|
||||
custom.bltdpt = scratchArea + 2 + (wordShift * 2);
|
||||
|
||||
custom.bltamod = 0;
|
||||
custom.bltbmod = wordShift * 2;
|
||||
custom.bltdmod = SCRATCH_AREA_WIDTH_BYTES - 4 + (wordShift * 2);
|
||||
custom.bltdmod = (screenSetup.width - COOL_BUN_WIDTH) / 8 + wordShift * 2;
|
||||
|
||||
// TODO: [ ] handle a scroll larger than 16px
|
||||
custom.bltsize = (2 - wordShift) + (32 << 6);
|
||||
|
||||
WaitBlit();
|
||||
|
||||
// step 3: copy the cropped bun image to the main screen, already left
|
||||
// aligned and with no fear of wraparound
|
||||
// since buns are the back layer, we shouldn't need to preserve the
|
||||
// background, so no c channel needed.
|
||||
//
|
||||
// y repeats go here. all buns are x aligned for simplicity.
|
||||
custom.bltcon0 = 0xf0 + (1 << 8) + (1 << 11);
|
||||
custom.bltcon1 = 0;
|
||||
|
||||
custom.bltapt = scratchArea + 2 + (wordShift * 2);
|
||||
custom.bltafwm = 0xffff;
|
||||
custom.bltalwm = 0xffff;
|
||||
custom.bltdpt = screenSetup.memoryStart + 30 + (wordShift * 2) + (screenSetup.nextBitplaneAdvance * plane) + (screenSetup.width / 8 * y);
|
||||
|
||||
custom.bltamod = 4 + (wordShift * 2);
|
||||
custom.bltdmod = (screenSetup.width / 8) - 4 + (wordShift * 2);
|
||||
|
||||
custom.bltsize = (2 - wordShift) + (32 << 6);
|
||||
custom.bltsize = 2 - wordShift + (COOL_BUN_HEIGHT << 6);
|
||||
|
||||
WaitBlit();
|
||||
}
|
||||
@ -131,65 +75,34 @@ void bun_offLeftSide(int minusXValue, int y) {
|
||||
uint8_t wordShift = (minusXValue >> 4);
|
||||
uint8_t i;
|
||||
uint16_t bltalwm;
|
||||
/**
|
||||
* This is a three step process, repeated for each bitplane:
|
||||
*
|
||||
* * clean out the scratch plane
|
||||
* * copy the bun graphic shifted left so that the third blit...
|
||||
* * can pick up just that area and stamp it down.
|
||||
*/
|
||||
|
||||
// y can't be 0 otherwise we will corrupt memory for now
|
||||
if (y == 0) return;
|
||||
|
||||
for (plane = 0; plane < 2; ++plane) {
|
||||
// step 1: clear the scratch area
|
||||
// no modifications here!
|
||||
clearScratchArea();
|
||||
|
||||
// step 2: copy the bun image to the scratch area in a way that aligns
|
||||
// the cutoff point to a word edge. this requires a left shift, so
|
||||
// it's descending.
|
||||
// shift left, so desccending
|
||||
custom.bltcon0 = 0xc0 + (1 << 8) + (1 << 10) + (shift << 12);
|
||||
custom.bltcon1 = (1 << 1) + (shift << 12);
|
||||
|
||||
// a has a mask we're shifting
|
||||
custom.bltadat = 0xffff;
|
||||
custom.bltafwm = 0xffff;
|
||||
// b has bun data
|
||||
custom.bltbpt = coolbunArea + 2 + ((COOL_BUN_HEIGHT - 1) * 4) + plane * COOL_BUN_PLANE_SIZE;
|
||||
|
||||
bltalwm = 0xffff;
|
||||
for (i = 0; i < shift; ++i) {
|
||||
bltalwm -= (1 << (15 - i));
|
||||
// d is the part on screen
|
||||
custom.bltdpt = screenSetup.memoryStart + screenSetup.nextBitplaneAdvance * plane + (screenSetup.width * (y + COOL_BUN_HEIGHT - 1) / 8) + 2 - wordShift * 2;
|
||||
|
||||
custom.bltafwm = 0xffff;
|
||||
bltalwm = 0x0000;
|
||||
for (i = 0; i < 15 - shift; ++i) {
|
||||
bltalwm += (1 << i);
|
||||
}
|
||||
custom.bltalwm = bltalwm;
|
||||
|
||||
// TODO: [ ] handle a scroll larger than 16px
|
||||
custom.bltbpt = coolbunArea + 2 + ((COOL_BUN_HEIGHT - 1) * COOL_BUN_WIDTH_BYTES) + (plane * COOL_BUN_WIDTH_BYTES * COOL_BUN_HEIGHT);
|
||||
custom.bltdpt = scratchArea + 4 - (wordShift * 2) + ((COOL_BUN_HEIGHT - 1) * SCRATCH_AREA_WIDTH_BYTES);
|
||||
|
||||
custom.bltamod = 0;
|
||||
custom.bltbmod = wordShift * 2;
|
||||
custom.bltdmod = SCRATCH_AREA_WIDTH_BYTES - 4 + (wordShift * 2);
|
||||
custom.bltdmod = screenSetup.width / 8 - 4 + wordShift * 2;
|
||||
|
||||
// TODO: [ ] handle a scroll larger than 16px
|
||||
custom.bltsize = (2 - wordShift) + (32 << 6);
|
||||
|
||||
WaitBlit();
|
||||
|
||||
// step 3: copy the cropped bun image to the main screen, already left
|
||||
// aligned and with no fear of wraparound
|
||||
// since buns are the back layer, we shouldn't need to preserve the
|
||||
// background, so no c channel needed.
|
||||
//
|
||||
// y repeats go here. all buns are x aligned for simplicity.
|
||||
custom.bltcon0 = 0xf0 + (1 << 8) + (1 << 11);
|
||||
custom.bltcon1 = 0;
|
||||
|
||||
custom.bltapt = scratchArea + 2;
|
||||
custom.bltafwm = 0xffff;
|
||||
custom.bltalwm = 0xffff;
|
||||
custom.bltdpt = screenSetup.memoryStart + (screenSetup.nextBitplaneAdvance * plane) + (screenSetup.width / 8 * y);
|
||||
|
||||
custom.bltamod = 4 + (wordShift * 2);
|
||||
custom.bltdmod = (screenSetup.width / 8) - 4 + (wordShift * 2);
|
||||
|
||||
custom.bltsize = (2 - wordShift) + (32 << 6);
|
||||
custom.bltsize = 2 - wordShift + (COOL_BUN_HEIGHT << 6);
|
||||
|
||||
WaitBlit();
|
||||
}
|
||||
@ -205,29 +118,40 @@ void bun_anywhere(int x, int y) {
|
||||
|
||||
// buns will never interfere with a background so they don't need a mask
|
||||
// they do need the scratch area though
|
||||
custom.bltcon0 = 0xf0 + (1 << 8) + (1 << 11) + (shift << 12);
|
||||
custom.bltcon1 = 0;
|
||||
custom.bltcon0 = 0xc0 + (1 << 8) + (1 << 10) + (shift << 12);
|
||||
custom.bltcon1 = (shift << 12);
|
||||
|
||||
custom.bltadat = 0xffff;
|
||||
custom.bltbpt = coolbunArea + plane * COOL_BUN_PLANE_SIZE;
|
||||
custom.bltdpt = screenSetup.memoryStart + WORD_ALIGNED_BYTE_POSITION(screenSetup.width, x, y) + screenSetup.nextBitplaneAdvance * plane;
|
||||
|
||||
custom.bltapt = coolbunArea + (COOL_BUN_HEIGHT * COOL_BUN_WIDTH_BYTES * plane);
|
||||
custom.bltdpt = scratchArea + 2;
|
||||
// custom.bltdpt = screenSetup.memoryStart;
|
||||
custom.bltafwm = 0xffff;
|
||||
custom.bltalwm = 0xffff;
|
||||
custom.bltamod = 0;
|
||||
custom.bltdmod = 4 - (needsExtraWord * 2);
|
||||
custom.bltsize = (2 + needsExtraWord) + (32 << 6);
|
||||
if (needsExtraWord) {
|
||||
custom.bltalwm = 0x0000;
|
||||
} else {
|
||||
custom.bltalwm = 0xffff;
|
||||
}
|
||||
custom.bltbmod = -(needsExtraWord * 2);
|
||||
custom.bltdmod = (screenSetup.width / 8) - COOL_BUN_WIDTH_BYTES - (needsExtraWord * 2);
|
||||
custom.bltsize = (2 + needsExtraWord) + (COOL_BUN_HEIGHT << 6);
|
||||
|
||||
WaitBlit();
|
||||
}
|
||||
}
|
||||
|
||||
custom.bltcon0 = 0xf0 + (1 << 8) + (1 << 11);
|
||||
custom.bltcon1 = 0;
|
||||
custom.bltapt = scratchArea + 2;
|
||||
custom.bltdpt = screenSetup.memoryStart + WORD_ALIGNED_BYTE_POSITION(screenSetup.width, x, y) + (screenSetup.nextBitplaneAdvance * plane);
|
||||
custom.bltamod = 2;
|
||||
custom.bltdmod = 40 - 6;
|
||||
custom.bltsize = (3) + (32 << 6);
|
||||
void renderBun(int x, int y) {
|
||||
if (x < -31) return;
|
||||
if (x > screenSetup.width + 31) return;
|
||||
if (y < 1) return;
|
||||
if (y > screenSetup.height - COOL_BUN_HEIGHT - 1) return;
|
||||
|
||||
WaitBlit();
|
||||
if (x < 0) {
|
||||
bun_offLeftSide(-x, y);
|
||||
} else if (x > screenSetup.width - COOL_BUN_WIDTH) {
|
||||
bun_offRightSide(x - (screenSetup.width - COOL_BUN_WIDTH), y);
|
||||
} else {
|
||||
bun_anywhere(x, y);
|
||||
}
|
||||
}
|
||||
|
||||
@ -279,199 +203,21 @@ int main(void) {
|
||||
currentCopperlist = addColorsToCopperlist(currentCopperlist, colors, 16);
|
||||
endCopperlist(currentCopperlist);
|
||||
|
||||
custom.bltcon0 = 0xc0 + (1 << 10) + (1 << 8);
|
||||
custom.bltcon1 = (8 << 12);
|
||||
custom.bltadat = 0xffff;
|
||||
custom.bltafwm = 0x00ff;
|
||||
custom.bltalwm = 0x0000;
|
||||
custom.bltbpt = coolbunArea;
|
||||
custom.bltdpt = screenSetup.memoryStart + (40 * 10 + 36);
|
||||
|
||||
custom.bltbmod = -2;
|
||||
custom.bltdmod = 40 - 6;
|
||||
|
||||
custom.bltsize = (3) + (32 << 6);
|
||||
|
||||
WaitBlit();
|
||||
|
||||
custom.bltcon0 = 0xc0 + (1 << 10) + (1 << 8);
|
||||
custom.bltcon1 = (15 << 12);
|
||||
custom.bltadat = 0xffff;
|
||||
custom.bltafwm = 0x0001;
|
||||
custom.bltalwm = 0x0000;
|
||||
custom.bltbpt = coolbunArea;
|
||||
custom.bltdpt = screenSetup.memoryStart + (40 * 45 + 36);
|
||||
|
||||
custom.bltbmod = -2;
|
||||
custom.bltdmod = 40 - 6;
|
||||
|
||||
custom.bltsize = (3) + (32 << 6);
|
||||
|
||||
WaitBlit();
|
||||
|
||||
custom.bltcon0 = 0xc0 + (1 << 10) + (1 << 8);
|
||||
custom.bltcon1 = (8 << 12);
|
||||
custom.bltadat = 0xffff;
|
||||
custom.bltafwm = 0x00ff;
|
||||
custom.bltalwm = 0x0000;
|
||||
custom.bltbpt = coolbunArea;
|
||||
custom.bltdpt = screenSetup.memoryStart + (40 * 80 + 38);
|
||||
|
||||
custom.bltbmod = 0;
|
||||
custom.bltdmod = 40 - 4;
|
||||
|
||||
custom.bltsize = (2) + (32 << 6);
|
||||
|
||||
WaitBlit();
|
||||
/*
|
||||
|
||||
for (bunPosition = -31; bunPosition < screenSetup.width + 31; ++bunPosition) {
|
||||
for (i = -31; i < screenSetup.width - 1; ++i) {
|
||||
y = WaitBOF(250);
|
||||
for (plane = 0; plane < 2; ++plane) {
|
||||
custom.bltcon0 = 0xf0 + (1 << 11);
|
||||
custom.bltcon0 = 0xc0 + (1 << 8);
|
||||
custom.bltcon1 = 0;
|
||||
custom.bltadat = 0x0000;
|
||||
custom.bltdpt = screenSetup.memoryStart;
|
||||
custom.bltafwm = 0xffff;
|
||||
custom.bltalwm = 0xffff;
|
||||
custom.bltsize = (20) + (256 << 6);
|
||||
custom.bltdpt = screenSetup.memoryStart + (45 * screenSetup.width) / 8 + plane * screenSetup.nextBitplaneAdvance;
|
||||
custom.bltdmod = 0;
|
||||
custom.bltsize = 20 + (COOL_BUN_MEMORY_SIZE << 6);
|
||||
WaitBlit();
|
||||
}
|
||||
|
||||
if (bunPosition < 0) {
|
||||
//bun_offLeftSide(abs(bunPosition), 100);
|
||||
} else if (bunPosition >= screenSetup.width) {
|
||||
//bun_offRightSide(bunPosition - screenSetup.width - 1, 100);
|
||||
} else {
|
||||
bun_anywhere(bunPosition, 100);
|
||||
}
|
||||
|
||||
WaitTOF();
|
||||
WaitTOF();
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
for (i = 0; i < 32; ++i) {
|
||||
for (plane = 0; plane < 2; ++plane) {
|
||||
custom.bltcon0 = 0xf0 + (1 << 8);
|
||||
custom.bltcon1 = 0;
|
||||
custom.bltadat = 0x0000;
|
||||
custom.bltdpt = screenSetup.memoryStart;
|
||||
custom.bltafwm = 0x0000;
|
||||
custom.bltalwm = 0x0000;
|
||||
custom.bltsize = (20) + (256 << 6);
|
||||
WaitBlit();
|
||||
}
|
||||
|
||||
bun_offLeftSide(i, 100);
|
||||
bun_offRightSide(i, 100);
|
||||
|
||||
WaitTOF();
|
||||
WaitTOF();
|
||||
}
|
||||
|
||||
/*
|
||||
// left shift this over 8 so it's "against the edge"
|
||||
custom.bltcon0 = 0xc0 + (1 << 8) + (1 << 10) + (1 << 11) + (0 << 12);
|
||||
custom.bltcon1 = (1 << 1) + (0 << 12);
|
||||
custom.bltafwm = 0xffff;
|
||||
custom.bltalwm = 0xffff;
|
||||
custom.bltapt = coolbunScratchArea + 4 + (32 * 8);
|
||||
custom.bltbpt = coolbunScratchArea + 4 + (31 * 8);
|
||||
custom.bltdpt = screenSetup.memoryStart + 2 + (32 * 40);
|
||||
custom.bltamod = -4;
|
||||
custom.bltbmod = 4;
|
||||
custom.bltdmod = 40 - 4;
|
||||
custom.bltsize = (2) + (32 << 6);
|
||||
|
||||
WaitBlit();
|
||||
|
||||
/*
|
||||
// left shift this over 8 so it's "against the edge"
|
||||
custom.bltcon0 = 0xc0 + (1 << 8) + (1 << 10) + (1 << 11) + (abs(x) << 12);
|
||||
custom.bltcon1 = (1 << 1) + (abs(x) << 12);
|
||||
custom.bltafwm = 0xffff;
|
||||
custom.bltalwm = 0xffff;
|
||||
custom.bltapt = coolbunScratchArea + 2 + (32 * 8) + 4;
|
||||
custom.bltbpt = coolbunScratchArea + 2 + 4 + (31 * 8);
|
||||
custom.bltdpt = screenSetup.memoryStart + 4 + (31 * 40);
|
||||
custom.bltamod = -6;
|
||||
custom.bltbmod = 2;
|
||||
custom.bltdmod = 40 - 6;
|
||||
custom.bltsize = (1) + (32 << 6);
|
||||
|
||||
WaitBlit();
|
||||
*/
|
||||
|
||||
WaitTOF();
|
||||
|
||||
/*
|
||||
for (x = -15; x < 0; ++x) {
|
||||
custom.bltcon0 = 0xf0 + (1 << 8);
|
||||
custom.bltcon1 = 0;
|
||||
custom.bltadat = 0xffff;
|
||||
|
||||
result = 0xffff;
|
||||
|
||||
for (i = 0; i < abs(x); ++i) {
|
||||
result -= (1 << (15 - i));
|
||||
}
|
||||
|
||||
custom.bltafwm = result;
|
||||
|
||||
custom.bltalwm = 0xffff;
|
||||
custom.bltdpt = coolbunScratchArea + 2 + (32 * 8);
|
||||
custom.bltsize = (2) + (1 << 6);
|
||||
|
||||
WaitBlit();
|
||||
|
||||
// left shift this over 8 so it's "against the edge"
|
||||
custom.bltcon0 = 0xc0 + (1 << 8) + (1 << 10) + (1 << 11) + (abs(x) << 12);
|
||||
custom.bltcon1 = (1 << 1) + (abs(x) << 12);
|
||||
custom.bltafwm = 0xffff;
|
||||
custom.bltalwm = 0xffff;
|
||||
custom.bltapt = coolbunScratchArea + 2 + (32 * 8) + 4;
|
||||
custom.bltbpt = coolbunScratchArea + 2 + 4 + (31 * 8);
|
||||
custom.bltdpt = screenSetup.memoryStart + 4 + (31 * 40);
|
||||
custom.bltamod = -6;
|
||||
custom.bltbmod = 2;
|
||||
custom.bltdmod = 40 - 6;
|
||||
custom.bltsize = (3) + (32 << 6);
|
||||
|
||||
WaitBlit();
|
||||
|
||||
WaitTOF();
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
for (x = 15; x < 17; ++x) {
|
||||
for (plane = 0; plane < COOL_BUN_PLANES; ++plane) {
|
||||
blitShiftRight = x & 15;
|
||||
memoryXOffset = (x >> 3) & 0xfffe;
|
||||
|
||||
blitWidth = (blitShiftRight > 0) ? 6 : 4;
|
||||
|
||||
custom.bltcon0 = 0xf0 + (1 << 8) + (1 << 11) + (blitShiftRight << 12);
|
||||
custom.bltcon1 = 0;
|
||||
custom.bltapt = coolbunScratchArea + 2 + (COOL_BUN_PLANE_SIZE * plane);
|
||||
|
||||
custom.bltdpt = screenSetup.memoryStart + memoryXOffset + screenSetup.nextBitplaneAdvance * plane;
|
||||
custom.bltafwm = 0xffff;
|
||||
custom.bltalwm = 0xffff;
|
||||
custom.bltamod = 8 - blitWidth;
|
||||
custom.bltdmod = 40 - blitWidth;
|
||||
custom.bltsize = (blitWidth / 2) + (32 << 6);
|
||||
|
||||
WaitBlit();
|
||||
}
|
||||
|
||||
WaitTOF();
|
||||
}
|
||||
*/
|
||||
|
||||
for (i = 0; i < 100; ++i) {
|
||||
WaitTOF();
|
||||
renderBun(i, 45);
|
||||
}
|
||||
|
||||
giveBackSystem();
|
||||
@ -480,16 +226,6 @@ int main(void) {
|
||||
|
||||
freeCopperlist(copperlist);
|
||||
|
||||
for (y = 0; y < 32; ++y) {
|
||||
for (x = 0; x < SCRATCH_AREA_WIDTH_BYTES; ++x) {
|
||||
printf("%d ", scratchArea[y * SCRATCH_AREA_WIDTH_BYTES + x]);
|
||||
}
|
||||
|
||||
printf("\n");
|
||||
}
|
||||
|
||||
printf("%d\n", 16 & 15);
|
||||
|
||||
FreeMem(coolbunArea, COOL_BUN_MEMORY_SIZE);
|
||||
FreeMem(scratchArea, SCRATCH_AREA_MEMORY_SIZE);
|
||||
|
||||
|
1
screen.c
1
screen.c
@ -30,4 +30,5 @@ void prepareScreen(
|
||||
screenSetup->height = height;
|
||||
screenSetup->bitplanes = bitplanes;
|
||||
screenSetup->nextBitplaneAdvance = width * height / 8;
|
||||
screenSetup->currentBuffer = 0;
|
||||
}
|
||||
|
5
screen.h
5
screen.h
@ -9,13 +9,14 @@ struct ScreenSetup {
|
||||
short int bitplanes;
|
||||
unsigned char *memoryStart;
|
||||
short int nextBitplaneAdvance;
|
||||
};
|
||||
|
||||
short int currentBuffer;
|
||||
};
|
||||
|
||||
#define SCREEN_WIDTH (320)
|
||||
#define SCREEN_HEIGHT (256)
|
||||
|
||||
#define TOTAL_SCREEN_SETUP_SIZE(s) ((s->width / 8) * s->height * s->bitplanes)
|
||||
#define TOTAL_SCREEN_SETUP_SIZE(s) ((s->width / 8) * s->height * s->bitplanes * 2)
|
||||
|
||||
void allocateScreenMemory(struct ScreenSetup *screenSetup);
|
||||
void freeScreenMemory(struct ScreenSetup *screenSetup);
|
||||
|
@ -17,5 +17,6 @@ extern void giveBackSystem(void);
|
||||
extern void setUpDisplay(struct ScreenSetup *);
|
||||
|
||||
extern void myWaitBlit(void);
|
||||
extern uint16_t WaitBOF(uint16_t line);
|
||||
|
||||
#endif
|
||||
|
@ -6,6 +6,7 @@
|
||||
XDEF _addColorsToCopperlist
|
||||
XDEF _endCopperlist
|
||||
XDEF _myWaitBlit
|
||||
XDEF _WaitBOF
|
||||
|
||||
XREF _custom
|
||||
|
||||
@ -243,6 +244,23 @@ _myWaitBlit:
|
||||
.done:
|
||||
RTS
|
||||
|
||||
_WaitBOF:
|
||||
MOVE.W 6(A7),D1
|
||||
ROL.W #8,D1
|
||||
|
||||
MOVE.L $dff004,D0
|
||||
AND.L #$1ff00,D0
|
||||
CMP.L D1,D0
|
||||
BNE.B _WaitBOF
|
||||
|
||||
.loop2:
|
||||
MOVE.L $dff004,D0
|
||||
AND.L #$1ff00,D0
|
||||
CMP.L D1,D0
|
||||
BEQ.B .loop2
|
||||
|
||||
RTS
|
||||
|
||||
CNOP 0,4
|
||||
OldView dc.l 0
|
||||
OldCopper dc.l 0
|
||||
|
Loading…
Reference in New Issue
Block a user