#include #include #include #include #include "common.h" volatile bool vint; volatile uint_fast8_t vint_counter; void vint_handler(void) { vint = true; vint_counter++; } const unsigned char reverse_lookup[16] = { 0x0, 0x8, 0x4, 0xc, 0x2, 0xa, 0x6, 0xe, 0x1, 0x9, 0x5, 0xd, 0x3, 0xb, 0x7, 0xf, }; byte reverse_bits(byte n) { return (reverse_lookup[n&0b1111] << 4) | reverse_lookup[n>>4]; } void flip_sprite_patterns(word dest, const byte* patterns, word len) { word i; for (i=0; i>= 4; } } // add two 16-bit BCD values word bcd_add(word a, word b) { a; b; // to avoid warning __asm ld hl,#4 add hl,sp ld iy,#2 add iy,sp ld a,0 (iy) add a, (hl) daa ld c,a ld a,1 (iy) inc hl adc a, (hl) daa ld b,a ld l, c ld h, b __endasm; } void vdp_setup() { cv_set_screen_active(false); cv_set_screen_mode(CV_SCREENMODE_STANDARD); cv_set_image_table(IMAGE); cv_set_character_pattern_t(PATTERN); cv_set_color_table(COLOR); cv_set_sprite_pattern_table(SPRITE_PATTERNS); cv_set_sprite_attribute_table(SPRITES); cv_set_sprite_big(true); } void set_shifted_pattern(const byte* src, word dest, byte shift) { byte y; for (y=0; y<8; y++) { byte a = src[y+8]; byte b = src[y]; cvu_voutb(a>>shift, dest); cvu_voutb(b>>shift | a<<(8-shift), dest+8); cvu_voutb(b<<(8-shift), dest+16); dest++; } }