mirror of
https://github.com/mauiaaron/apple2.git
synced 2024-06-26 00:29:27 +00:00
Refactor : coalesced text/mixed drawing codepath
This commit is contained in:
parent
8626215205
commit
a8e6f4fc92
|
@ -16,6 +16,7 @@
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
|
|
||||||
#define SCANSTEP (SCANWIDTH-12)
|
#define SCANSTEP (SCANWIDTH-12)
|
||||||
|
#define SCANDSTEP (SCANWIDTH-6)
|
||||||
|
|
||||||
#define DYNAMIC_SZ 11 // 7 pixels (as bytes) + 2pre + 2post
|
#define DYNAMIC_SZ 11 // 7 pixels (as bytes) + 2pre + 2post
|
||||||
|
|
||||||
|
@ -605,13 +606,11 @@ static inline void _plot_character(const unsigned int font_off, uint8_t *fb_ptr)
|
||||||
_plot_char40(/*dst*/&fb_ptr, /*src*/&font_ptr);
|
_plot_char40(/*dst*/&fb_ptr, /*src*/&font_ptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void _plot_character0(uint16_t ea, uint8_t b)
|
static void _plot_character0(uint16_t ea, uint8_t b) {
|
||||||
{
|
|
||||||
_plot_character(b<<7/* *128 */, video__fb1+video__screen_addresses[ea-0x0400]);
|
_plot_character(b<<7/* *128 */, video__fb1+video__screen_addresses[ea-0x0400]);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void _plot_character1(uint16_t ea, uint8_t b)
|
static void _plot_character1(uint16_t ea, uint8_t b) {
|
||||||
{
|
|
||||||
_plot_character(b<<7/* *128 */, video__fb2+video__screen_addresses[ea-0x0800]);
|
_plot_character(b<<7/* *128 */, video__fb2+video__screen_addresses[ea-0x0800]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -629,23 +628,21 @@ static inline void _plot_80character(const unsigned int font_off, uint8_t *fb_pt
|
||||||
}
|
}
|
||||||
|
|
||||||
// FIXME TODO NOTE : dup'ing work here?
|
// FIXME TODO NOTE : dup'ing work here?
|
||||||
static inline void _plot_80character0(uint16_t ea, uint8_t b)
|
static void _plot_80character0(uint16_t ea, uint8_t b) {
|
||||||
{
|
|
||||||
b = apple_ii_64k[1][ea];
|
b = apple_ii_64k[1][ea];
|
||||||
_plot_80character(b<<6/* *64 */, video__fb1+video__screen_addresses[ea-0x0400]);
|
_plot_80character(b<<6/* *64 */, video__fb1+video__screen_addresses[ea-0x0400]);
|
||||||
b = apple_ii_64k[0][ea];
|
b = apple_ii_64k[0][ea];
|
||||||
_plot_80character(b<<6/* *64 */, video__fb1+video__screen_addresses[ea-0x0400]+7);
|
_plot_80character(b<<6/* *64 */, video__fb1+video__screen_addresses[ea-0x0400]+7);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void _plot_80character1(uint16_t ea, uint8_t b)
|
static void _plot_80character1(uint16_t ea, uint8_t b) {
|
||||||
{
|
|
||||||
b = apple_ii_64k[1][ea];
|
b = apple_ii_64k[1][ea];
|
||||||
_plot_80character(b<<6/* *64 */, video__fb2+video__screen_addresses[ea-0x0800]);
|
_plot_80character(b<<6/* *64 */, video__fb2+video__screen_addresses[ea-0x0800]);
|
||||||
b = apple_ii_64k[0][ea];
|
b = apple_ii_64k[0][ea];
|
||||||
_plot_80character(b<<6/* *64 */, video__fb2+video__screen_addresses[ea-0x0800]+7);
|
_plot_80character(b<<6/* *64 */, video__fb2+video__screen_addresses[ea-0x0800]+7);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void _plot_block(const uint32_t val, uint8_t *fb_ptr) {
|
static inline void _plot_block(const uint8_t val, uint8_t *fb_ptr) {
|
||||||
video_setDirty();
|
video_setDirty();
|
||||||
uint8_t color = (val & 0x0F) << 4;
|
uint8_t color = (val & 0x0F) << 4;
|
||||||
uint32_t val32 = (color << 24) | (color << 16) | (color << 8) | color;
|
uint32_t val32 = (color << 24) | (color << 16) | (color << 8) | color;
|
||||||
|
@ -682,67 +679,49 @@ static inline void _plot_block1(uint16_t ea, uint8_t b)
|
||||||
_plot_block(b, video__fb2+video__screen_addresses[ea-0x0800]);
|
_plot_block(b, video__fb2+video__screen_addresses[ea-0x0800]);
|
||||||
}
|
}
|
||||||
|
|
||||||
#define DRAW_TEXT(PAGE, SW) \
|
static inline void _draw_text(uint16_t ea, uint8_t b, int page, uint32_t sw, uint32_t flags) {
|
||||||
do { \
|
if (softswitches & flags) {
|
||||||
if (softswitches & SS_TEXT) { \
|
if (softswitches & SS_80COL) {
|
||||||
if (softswitches & SS_80COL) { \
|
void (*plot80Fn)(uint16_t, uint8_t) = !page ? _plot_80character0 : _plot_80character1;
|
||||||
_plot_80character##PAGE(ea, b); \
|
plot80Fn(ea,b);
|
||||||
} else if (softswitches & SW) { \
|
} else if (softswitches & sw) {
|
||||||
/* ??? */ \
|
/* ??? */
|
||||||
} else { \
|
} else {
|
||||||
_plot_character##PAGE(ea, b); \
|
void (*plotCharFn)(uint16_t, uint8_t) = !page ? _plot_character0 : _plot_character1;
|
||||||
} \
|
plotCharFn(ea, b);
|
||||||
} else { \
|
}
|
||||||
if (softswitches & (SS_HIRES|SW)) { \
|
} else {
|
||||||
/* ??? */ \
|
if (softswitches & (SS_HIRES|sw)) {
|
||||||
} else { \
|
/* ??? */
|
||||||
_plot_block##PAGE(ea, b); \
|
} else {
|
||||||
} \
|
void (*plotBlockFn)(uint16_t, uint8_t) = !page ? _plot_block0 : _plot_block1;
|
||||||
} \
|
plotBlockFn(ea, b);
|
||||||
} while(0)
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
#define DRAW_MIXED(PAGE, SW) \
|
|
||||||
do { \
|
|
||||||
if (softswitches & (SS_TEXT|SS_MIXED)) { \
|
|
||||||
if (softswitches & SS_80COL) { \
|
|
||||||
_plot_80character##PAGE(ea, b); \
|
|
||||||
} else if (softswitches & SW) { \
|
|
||||||
/* ??? */ \
|
|
||||||
} else { \
|
|
||||||
_plot_character##PAGE(ea, b); \
|
|
||||||
} \
|
|
||||||
} else { \
|
|
||||||
if (softswitches & (SS_HIRES|SW)) { \
|
|
||||||
/* ??? */ \
|
|
||||||
} else { \
|
|
||||||
_plot_block##PAGE(ea, b); \
|
|
||||||
} \
|
|
||||||
} \
|
|
||||||
} while(0)
|
|
||||||
|
|
||||||
GLUE_C_WRITE(video__write_2e_text0)
|
GLUE_C_WRITE(video__write_2e_text0)
|
||||||
{
|
{
|
||||||
base_textwrt[ea] = b;
|
base_textwrt[ea] = b;
|
||||||
DRAW_TEXT(0, SS_TEXTWRT);
|
_draw_text(ea, b, 0, SS_TEXTWRT, SS_TEXT);
|
||||||
}
|
}
|
||||||
|
|
||||||
GLUE_C_WRITE(video__write_2e_text0_mixed)
|
GLUE_C_WRITE(video__write_2e_text0_mixed)
|
||||||
{
|
{
|
||||||
base_textwrt[ea] = b;
|
base_textwrt[ea] = b;
|
||||||
DRAW_MIXED(0, SS_TEXTWRT);
|
_draw_text(ea, b, 0, SS_TEXTWRT, (SS_TEXT|SS_MIXED));
|
||||||
}
|
}
|
||||||
|
|
||||||
GLUE_C_WRITE(video__write_2e_text1)
|
GLUE_C_WRITE(video__write_2e_text1)
|
||||||
{
|
{
|
||||||
base_ramwrt[ea] = b;
|
base_ramwrt[ea] = b;
|
||||||
DRAW_TEXT(1, SS_RAMWRT);
|
_draw_text(ea, b, 1, SS_RAMWRT, SS_TEXT);
|
||||||
}
|
}
|
||||||
|
|
||||||
GLUE_C_WRITE(video__write_2e_text1_mixed)
|
GLUE_C_WRITE(video__write_2e_text1_mixed)
|
||||||
{
|
{
|
||||||
base_ramwrt[ea] = b;
|
base_ramwrt[ea] = b;
|
||||||
DRAW_MIXED(1, SS_RAMWRT);
|
_draw_text(ea, b, 1, SS_RAMWRT, (SS_TEXT|SS_MIXED));
|
||||||
}
|
}
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
|
@ -1148,15 +1127,15 @@ void video_redraw(void) {
|
||||||
|
|
||||||
// text/lores pages
|
// text/lores pages
|
||||||
if (y < 20) {
|
if (y < 20) {
|
||||||
DRAW_TEXT(0, SS_TEXTWRT);
|
_draw_text(ea, b, 0, SS_TEXTWRT, SS_TEXT);
|
||||||
ea += 0x400;
|
ea += 0x400;
|
||||||
b = apple_ii_64k[0][ea];
|
b = apple_ii_64k[0][ea];
|
||||||
DRAW_TEXT(1, SS_RAMWRT);
|
_draw_text(ea, b, 1, SS_RAMWRT, SS_TEXT);
|
||||||
} else {
|
} else {
|
||||||
DRAW_MIXED(0, SS_TEXTWRT);
|
_draw_text(ea, b, 0, SS_TEXTWRT, (SS_TEXT|SS_MIXED));
|
||||||
ea += 0x400;
|
ea += 0x400;
|
||||||
b = apple_ii_64k[0][ea];
|
b = apple_ii_64k[0][ea];
|
||||||
DRAW_MIXED(1, SS_RAMWRT);
|
_draw_text(ea, b, 1, SS_RAMWRT, (SS_TEXT|SS_MIXED));
|
||||||
}
|
}
|
||||||
|
|
||||||
// hires/dhires pages
|
// hires/dhires pages
|
||||||
|
|
Loading…
Reference in New Issue
Block a user