53 lines
1.1 KiB
C
53 lines
1.1 KiB
C
#ifndef __SCREEN_H__
|
|
#define __SCREEN_H__
|
|
|
|
#include "types.h"
|
|
|
|
#define SCREEN_WIDTH (320)
|
|
#define SCREEN_HEIGHT (256)
|
|
|
|
struct ScreenDefinition {
|
|
// human entered
|
|
uint16_t width;
|
|
uint16_t height;
|
|
short int bitplanes;
|
|
|
|
// calculated
|
|
unsigned char *memoryStart;
|
|
uint16_t byteWidth;
|
|
uint16_t nextBitplaneAdvance;
|
|
uint16_t nextBufferAdvance;
|
|
unsigned char *bufferPlanes[2][8];
|
|
};
|
|
|
|
struct ActiveScreenBufferDetails {
|
|
uint16_t currentBuffer;
|
|
unsigned char *planes[8];
|
|
};
|
|
|
|
void allocateDoubleBufferedScreenMemory(
|
|
struct ScreenDefinition *screenSetup,
|
|
struct ActiveScreenBufferDetails *currentScreen,
|
|
uint16_t width,
|
|
uint16_t height,
|
|
uint8_t bitplanes
|
|
);
|
|
void teardownScreen(struct ScreenDefinition *screenSetup);
|
|
|
|
void setActiveScreenBuffer(
|
|
struct ScreenDefinition *screenSetup,
|
|
struct ActiveScreenBufferDetails *currentScreen,
|
|
short int buffer
|
|
);
|
|
|
|
void swapCurrentScreenBuffer(
|
|
struct ScreenDefinition *screenSetup,
|
|
struct ActiveScreenBufferDetails *currentScreen
|
|
);
|
|
|
|
void setupInitialCurrentScreen(
|
|
struct ScreenDefinition *screenSetup,
|
|
struct ActiveScreenBufferDetails *currentScreen
|
|
);
|
|
#endif
|