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