Mercurial > repos > simple16
view src/vdp.c @ 10:9f575f77a157
Fix parsing of hex literals in assembler
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Sun, 27 Mar 2016 17:32:09 -0700 |
parents | 5176efdda5ae |
children | 04d8efe7a1f0 |
line wrap: on
line source
#include <stdint.h> #include <string.h> #include "vdp.h" void vdp_init(vdp *context, uint32_t clock_div) { memset(context, 0, sizeof(vdp)); context->clock_inc = clock_div; } void vdp_run(vdp *context, uint32_t target) { while (context->cycles < target) { context->hcounter++; if (context->hcounter == 416) { context->hcounter = 0; context->vcounter++; if (context->vcounter == 262) { context->vcounter = 0; } } //TODO: do rendering stuff here if (context->status & VDP_STATUS_FIFO) { switch (context->fifo_dest) { case FIFO_DEST_VRAM: if (!(context->status & VDP_STATUS_VRAM)) { context->vram[context->dest_offset++] = context->fifo; context->dest_offset &= sizeof(context->vram)/2-1; context->status &= ~VDP_STATUS_FIFO; } break; case FIFO_DEST_SRAM: if (!(context->status & VDP_STATUS_SRAM)) { context->sram[context->dest_offset++] = context->fifo; context->dest_offset &= sizeof(context->sram)/2-1; context->status &= ~VDP_STATUS_FIFO; } break; case FIFO_DEST_CRAM: context->cram[context->dest_offset++] = context->fifo; context->dest_offset &= sizeof(context->cram)/2-1; context->status &= ~VDP_STATUS_FIFO; break; } } context->cycles += context->clock_inc; } } void vdp_write_address(vdp *context, uint16_t value) { context->status &= ~VDP_STATUS_FIFO; if (value & 0x8000) { context->fifo_dest = FIFO_DEST_VRAM; context->dest_offset = (value & (sizeof(context->vram) -1))/2; } else if (value & 0xFF00 == 0xFE00) { context->fifo_dest = FIFO_DEST_SRAM; context->dest_offset = (value & (sizeof(context->sram) -1))/2; } else if (value & 0xFF00 == 0xFF00) { context->fifo_dest = FIFO_DEST_CRAM; context->dest_offset = (value & (sizeof(context->cram) -1))/2; } } void vdp_write_data(vdp *context, uint16_t value) { context->fifo = value; context->status |= VDP_STATUS_FIFO; }