ma -> memaddr

ma_latch -> memaddr_latch
maback -> memaddr_backup
ca -> cursoraddr
sc -> scanline
oldsc -> scanline_old
This commit is contained in:
starfrost013
2025-06-10 22:53:45 +01:00
parent 386c346ee1
commit dd7f3d0aae
63 changed files with 1428 additions and 1428 deletions

View File

@@ -151,12 +151,12 @@ typedef struct sigma_t {
uint8_t sigmamode; /* Mode control register [0x2D8] */
uint16_t ma, maback;
uint16_t memaddr, memaddr_backup;
int crtcreg; /* CRTC: Real selected register */
int linepos, displine;
int sc, vc;
int scanline, vc;
int cgadispon;
int cursorvisible, cursoron, cgablink;
int vsynctime, vadj;
@@ -414,23 +414,23 @@ sigma_text80(sigma_t *sigma)
{
uint8_t chr;
uint8_t attr;
uint16_t ca = (sigma->crtc[15] | (sigma->crtc[14] << 8));
uint16_t ma = ((sigma->ma & 0x3FFF) << 1);
uint16_t cursoraddr = (sigma->crtc[15] | (sigma->crtc[14] << 8));
uint16_t memaddr = ((sigma->memaddr & 0x3FFF) << 1);
int drawcursor;
uint32_t cols[4];
const uint8_t *vram = sigma->vram + (ma << 1);
const uint8_t *vram = sigma->vram + (memaddr << 1);
ca = ca << 1;
cursoraddr = cursoraddr << 1;
if (sigma->sigma_ctl & CTL_CURSOR)
++ca;
ca &= 0x3fff;
++cursoraddr;
cursoraddr &= 0x3fff;
/* The Sigma 400 seems to use screen widths stated in words
(40 for 80-column, 20 for 40-column) */
for (uint32_t x = 0; x < (sigma->crtc[1] << 1); x++) {
chr = vram[x << 1];
attr = vram[(x << 1) + 1];
drawcursor = ((ma == ca) && sigma->cursorvisible && sigma->cursoron);
drawcursor = ((memaddr == cursoraddr) && sigma->cursorvisible && sigma->cursoron);
if (!(sigma->sigmamode & MODE_NOBLINK)) {
cols[1] = (attr & 15) | 16;
@@ -445,22 +445,22 @@ sigma_text80(sigma_t *sigma)
if (drawcursor) {
for (uint8_t c = 0; c < 8; c++) {
if (sigma->sigmamode & MODE_FONT16)
buffer32->line[sigma->displine][(x << 3) + c + 8] = cols[(fontdatm[chr][sigma->sc & 15] & (1 << (c ^ 7))) ? 1 : 0] ^ 0xf;
buffer32->line[sigma->displine][(x << 3) + c + 8] = cols[(fontdatm[chr][sigma->scanline & 15] & (1 << (c ^ 7))) ? 1 : 0] ^ 0xf;
else
buffer32->line[sigma->displine][(x << 3) + c + 8] = cols[(fontdat[chr][sigma->sc & 7] & (1 << (c ^ 7))) ? 1 : 0] ^ 0xf;
buffer32->line[sigma->displine][(x << 3) + c + 8] = cols[(fontdat[chr][sigma->scanline & 7] & (1 << (c ^ 7))) ? 1 : 0] ^ 0xf;
}
} else {
for (uint8_t c = 0; c < 8; c++) {
if (sigma->sigmamode & MODE_FONT16)
buffer32->line[sigma->displine][(x << 3) + c + 8] = cols[(fontdatm[chr][sigma->sc & 15] & (1 << (c ^ 7))) ? 1 : 0];
buffer32->line[sigma->displine][(x << 3) + c + 8] = cols[(fontdatm[chr][sigma->scanline & 15] & (1 << (c ^ 7))) ? 1 : 0];
else
buffer32->line[sigma->displine][(x << 3) + c + 8] = cols[(fontdat[chr][sigma->sc & 7] & (1 << (c ^ 7))) ? 1 : 0];
buffer32->line[sigma->displine][(x << 3) + c + 8] = cols[(fontdat[chr][sigma->scanline & 7] & (1 << (c ^ 7))) ? 1 : 0];
}
}
++ma;
++memaddr;
}
sigma->ma += sigma->crtc[1];
sigma->memaddr += sigma->crtc[1];
}
/* Render a line in 40-column text mode */
@@ -469,23 +469,23 @@ sigma_text40(sigma_t *sigma)
{
uint8_t chr;
uint8_t attr;
uint16_t ca = (sigma->crtc[15] | (sigma->crtc[14] << 8));
uint16_t ma = ((sigma->ma & 0x3FFF) << 1);
uint16_t cursoraddr = (sigma->crtc[15] | (sigma->crtc[14] << 8));
uint16_t memaddr = ((sigma->memaddr & 0x3FFF) << 1);
int drawcursor;
uint32_t cols[4];
const uint8_t *vram = sigma->vram + ((ma << 1) & 0x3FFF);
const uint8_t *vram = sigma->vram + ((memaddr << 1) & 0x3FFF);
ca = ca << 1;
cursoraddr = cursoraddr << 1;
if (sigma->sigma_ctl & CTL_CURSOR)
++ca;
ca &= 0x3fff;
++cursoraddr;
cursoraddr &= 0x3fff;
/* The Sigma 400 seems to use screen widths stated in words
(40 for 80-column, 20 for 40-column) */
for (uint32_t x = 0; x < (sigma->crtc[1] << 1); x++) {
chr = vram[x << 1];
attr = vram[(x << 1) + 1];
drawcursor = ((ma == ca) && sigma->cursorvisible && sigma->cursoron);
drawcursor = ((memaddr == cursoraddr) && sigma->cursorvisible && sigma->cursoron);
if (!(sigma->sigmamode & MODE_NOBLINK)) {
cols[1] = (attr & 15) | 16;
@@ -499,24 +499,24 @@ sigma_text40(sigma_t *sigma)
if (drawcursor) {
for (uint8_t c = 0; c < 8; c++) {
buffer32->line[sigma->displine][(x << 4) + 2 * c + 8] = buffer32->line[sigma->displine][(x << 4) + 2 * c + 9] = cols[(fontdatm[chr][sigma->sc & 15] & (1 << (c ^ 7))) ? 1 : 0] ^ 0xf;
buffer32->line[sigma->displine][(x << 4) + 2 * c + 8] = buffer32->line[sigma->displine][(x << 4) + 2 * c + 9] = cols[(fontdatm[chr][sigma->scanline & 15] & (1 << (c ^ 7))) ? 1 : 0] ^ 0xf;
}
} else {
for (uint8_t c = 0; c < 8; c++) {
buffer32->line[sigma->displine][(x << 4) + 2 * c + 8] = buffer32->line[sigma->displine][(x << 4) + 2 * c + 9] = cols[(fontdatm[chr][sigma->sc & 15] & (1 << (c ^ 7))) ? 1 : 0];
buffer32->line[sigma->displine][(x << 4) + 2 * c + 8] = buffer32->line[sigma->displine][(x << 4) + 2 * c + 9] = cols[(fontdatm[chr][sigma->scanline & 15] & (1 << (c ^ 7))) ? 1 : 0];
}
}
ma++;
memaddr++;
}
sigma->ma += sigma->crtc[1];
sigma->memaddr += sigma->crtc[1];
}
/* Draw a line in the 640x400 graphics mode */
static void
sigma_gfx400(sigma_t *sigma)
{
const uint8_t *vram = &sigma->vram[((sigma->ma << 1) & 0x1FFF) + (sigma->sc & 3) * 0x2000];
const uint8_t *vram = &sigma->vram[((sigma->memaddr << 1) & 0x1FFF) + (sigma->scanline & 3) * 0x2000];
uint8_t plane[4];
uint8_t col;
@@ -532,7 +532,7 @@ sigma_gfx400(sigma_t *sigma)
buffer32->line[sigma->displine][(x << 3) + c + 8] = col;
}
if (x & 1)
++sigma->ma;
++sigma->memaddr;
}
}
@@ -544,7 +544,7 @@ sigma_gfx400(sigma_t *sigma)
static void
sigma_gfx200(sigma_t *sigma)
{
const uint8_t *vram = &sigma->vram[((sigma->ma << 1) & 0x1FFF) + (sigma->sc & 2) * 0x1000];
const uint8_t *vram = &sigma->vram[((sigma->memaddr << 1) & 0x1FFF) + (sigma->scanline & 2) * 0x1000];
uint8_t plane[4];
uint8_t col;
@@ -561,7 +561,7 @@ sigma_gfx200(sigma_t *sigma)
}
if (x & 1)
++sigma->ma;
++sigma->memaddr;
}
}
@@ -569,7 +569,7 @@ sigma_gfx200(sigma_t *sigma)
static void
sigma_gfx4col(sigma_t *sigma)
{
const uint8_t *vram = &sigma->vram[((sigma->ma << 1) & 0x1FFF) + (sigma->sc & 2) * 0x1000];
const uint8_t *vram = &sigma->vram[((sigma->memaddr << 1) & 0x1FFF) + (sigma->scanline & 2) * 0x1000];
uint8_t plane[4];
uint8_t mask;
uint8_t col;
@@ -592,7 +592,7 @@ sigma_gfx4col(sigma_t *sigma)
}
if (x & 1)
++sigma->ma;
++sigma->memaddr;
}
}
@@ -604,15 +604,15 @@ sigma_poll(void *priv)
int c;
int oldvc;
uint32_t cols[4];
int oldsc;
int scanline_old;
if (!sigma->linepos) {
timer_advance_u64(&sigma->timer, sigma->dispofftime);
sigma->sigmastat |= STATUS_RETR_H;
sigma->linepos = 1;
oldsc = sigma->sc;
scanline_old = sigma->scanline;
if ((sigma->crtc[8] & 3) == 3)
sigma->sc = ((sigma->sc << 1) + sigma->oddeven) & 7;
sigma->scanline = ((sigma->scanline << 1) + sigma->oddeven) & 7;
if (sigma->cgadispon) {
if (sigma->displine < sigma->firstline) {
sigma->firstline = sigma->displine;
@@ -660,8 +660,8 @@ sigma_poll(void *priv)
video_process_8(x, sigma->displine);
sigma->sc = oldsc;
if (sigma->vc == sigma->crtc[7] && !sigma->sc)
sigma->scanline = scanline_old;
if (sigma->vc == sigma->crtc[7] && !sigma->scanline)
sigma->sigmastat |= STATUS_RETR_V;
sigma->displine++;
if (sigma->displine >= 560)
@@ -674,24 +674,24 @@ sigma_poll(void *priv)
if (!sigma->vsynctime)
sigma->sigmastat &= ~STATUS_RETR_V;
}
if (sigma->sc == (sigma->crtc[11] & 31) || ((sigma->crtc[8] & 3) == 3 && sigma->sc == ((sigma->crtc[11] & 31) >> 1))) {
if (sigma->scanline == (sigma->crtc[11] & 31) || ((sigma->crtc[8] & 3) == 3 && sigma->scanline == ((sigma->crtc[11] & 31) >> 1))) {
sigma->cursorvisible = 0;
}
if ((sigma->crtc[8] & 3) == 3 && sigma->sc == (sigma->crtc[9] >> 1))
sigma->maback = sigma->ma;
if ((sigma->crtc[8] & 3) == 3 && sigma->scanline == (sigma->crtc[9] >> 1))
sigma->memaddr_backup = sigma->memaddr;
if (sigma->vadj) {
sigma->sc++;
sigma->sc &= 31;
sigma->ma = sigma->maback;
sigma->scanline++;
sigma->scanline &= 31;
sigma->memaddr = sigma->memaddr_backup;
sigma->vadj--;
if (!sigma->vadj) {
sigma->cgadispon = 1;
sigma->ma = sigma->maback = (sigma->crtc[13] | (sigma->crtc[12] << 8)) & 0x3fff;
sigma->sc = 0;
sigma->memaddr = sigma->memaddr_backup = (sigma->crtc[13] | (sigma->crtc[12] << 8)) & 0x3fff;
sigma->scanline = 0;
}
} else if (sigma->sc == sigma->crtc[9]) {
sigma->maback = sigma->ma;
sigma->sc = 0;
} else if (sigma->scanline == sigma->crtc[9]) {
sigma->memaddr_backup = sigma->memaddr;
sigma->scanline = 0;
oldvc = sigma->vc;
sigma->vc++;
sigma->vc &= 127;
@@ -705,7 +705,7 @@ sigma_poll(void *priv)
if (!sigma->vadj)
sigma->cgadispon = 1;
if (!sigma->vadj)
sigma->ma = sigma->maback = (sigma->crtc[13] | (sigma->crtc[12] << 8)) & 0x3fff;
sigma->memaddr = sigma->memaddr_backup = (sigma->crtc[13] | (sigma->crtc[12] << 8)) & 0x3fff;
if ((sigma->crtc[10] & 0x60) == 0x20)
sigma->cursoron = 0;
else
@@ -768,13 +768,13 @@ sigma_poll(void *priv)
sigma->oddeven ^= 1;
}
} else {
sigma->sc++;
sigma->sc &= 31;
sigma->ma = sigma->maback;
sigma->scanline++;
sigma->scanline &= 31;
sigma->memaddr = sigma->memaddr_backup;
}
if (sigma->cgadispon)
sigma->sigmastat &= ~STATUS_RETR_H;
if (sigma->sc == (sigma->crtc[10] & 31) || ((sigma->crtc[8] & 3) == 3 && sigma->sc == ((sigma->crtc[10] & 31) >> 1)))
if (sigma->scanline == (sigma->crtc[10] & 31) || ((sigma->crtc[8] & 3) == 3 && sigma->scanline == ((sigma->crtc[10] & 31) >> 1)))
sigma->cursorvisible = 1;
}
}