Emulation of the 1970's Chip-8 machine. The emulator has 7 games that are unmodified from the original Chip-8 format.

Dependencies:   mbed

LCD_ST7735/Bitmap1bpp.cpp

Committer:
taylorza
Date:
2015-02-08
Revision:
0:bc3f11b1b41f

File content as of revision 0:bc3f11b1b41f:

#include "mbed.h"
#include "Bitmap1bpp.h"

Bitmap1bpp::Bitmap1bpp(uint16_t width, uint16_t height):
    _width(width), 
    _height(height),
    _stride((width >> 3) + ((width & 0x07) ? 1 : 0)),
    _pBitmapData(new uint8_t[_stride * height])
{
    
}

Bitmap1bpp::~Bitmap1bpp()
{
    if (_pBitmapData != NULL)
    {
        delete []_pBitmapData;
        _pBitmapData = NULL;
    }
}

void Bitmap1bpp::clear()
{
    memset(_pBitmapData, 0, _stride * _height);
}

void Bitmap1bpp::setPixel(int16_t x, int16_t y, uint16_t color)
{
    if (x < 0 || x >= _width || y < 0 || y >= _height) return;
    
    uint8_t mask = 1 << (7 - (x % 8));
    uint8_t *p = _pBitmapData + ((y * _stride) + (x / 8));
    
    if (color) *p |= mask; else *p &= ~mask;
}

uint16_t Bitmap1bpp::getPixel(int16_t x, int16_t y)
{
    if (x < 0 || x >= _width || y < 0 || y >= _height) return 0;
    
    uint8_t mask = 1 << (7 - (x % 8));
    uint8_t *p = _pBitmapData + ((y * _stride) + (x / 8));
    
    return (*p & mask) == mask ? 1 : 0;    
}

void Bitmap1bpp::fastHLine(int16_t x1, int16_t x2, int16_t y, uint16_t color)
{
    for (int x = x1; x <= x2; ++x)
    {
        setPixel(x, y, color);
    }    
}

void Bitmap1bpp::fastVLine(int16_t y1, int16_t y2, int16_t x, uint16_t color)
{
    for (int y = y1; y <= y2; ++y)
    {
        setPixel(x, y, color);
    }
}