Skip to content

Commit

Permalink
fix vdu variable numbering
Browse files Browse the repository at this point in the history
when the `Context::readVariable` call is made, the variable number will already be within the appropriate feature flag range - this fixes that
  • Loading branch information
stevesims committed Feb 6, 2025
1 parent 254ceff commit fb795a0
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 10 deletions.
7 changes: 5 additions & 2 deletions video/agon.h
Original file line number Diff line number Diff line change
Expand Up @@ -413,8 +413,11 @@
#define FEATUREFLAG_VDU_VARIABLES_START 0x1000 // VDU variables start at 0x1000
#define FEATUREFLAG_VDU_VARIABLES_END 0x1FFF // VDU variables end
#define FEATUREFLAG_VDU_VARIABLES_MASK 0x0FFF // VDU variables mask
#define FEATUREFLAG_VDU_VAR_PALETTE 0x1200 // Palette variables start (block of 64)
#define FEATUREFLAG_VDU_VAR_PALETTE_END 0x123F // Palette variables end

#define VDU_VAR_PALETTE 0x200 // Palette variables start (block of 64)
#define VDU_VAR_PALETTE_END 0x23F // Palette variables end
#define VDU_VAR_CHARMAPPING 0x300 // Character to bitmap mapping start (block of 256)
#define VDU_VAR_CHARMAPPING_END 0x3FF // Character to bitmap mapping end

#define LOGICAL_SCRW 1280 // As per the BBC Micro standard
#define LOGICAL_SCRH 1024
Expand Down
16 changes: 8 additions & 8 deletions video/context.h
Original file line number Diff line number Diff line change
Expand Up @@ -372,14 +372,14 @@ class Context {
}

bool Context::readVariable(uint16_t var, uint16_t * value) {
if (var >= FEATUREFLAG_VDU_VAR_PALETTE && var <= FEATUREFLAG_VDU_VAR_PALETTE_END) {
if (var >= VDU_VAR_PALETTE && var <= VDU_VAR_PALETTE_END) {
if (value) {
*value = palette[(var - FEATUREFLAG_VDU_VAR_PALETTE) & (getVGAColourDepth() - 1)];
*value = palette[(var - VDU_VAR_PALETTE) & (getVGAColourDepth() - 1)];
}
return true;
}
if (var >= FEATUREFLAG_VDU_VAR_CHARMAPPING && var <= FEATUREFLAG_VDU_VAR_CHARMAPPING_END) {
auto c = var - FEATUREFLAG_VDU_VAR_CHARMAPPING;
if (var >= VDU_VAR_CHARMAPPING && var <= VDU_VAR_CHARMAPPING_END) {
auto c = var - VDU_VAR_CHARMAPPING;
if (charToBitmap[c] != 65535) {
if (value) {
*value = charToBitmap[c];
Expand Down Expand Up @@ -766,15 +766,15 @@ bool Context::readVariable(uint16_t var, uint16_t * value) {
}

void Context::setVariable(uint16_t var, uint16_t value) {
if (var >= FEATUREFLAG_VDU_VAR_PALETTE && var <= FEATUREFLAG_VDU_VAR_PALETTE_END) {
if (var >= VDU_VAR_PALETTE && var <= VDU_VAR_PALETTE_END) {
if (value >= 64) {
return;
}
setLogicalPalette(var - FEATUREFLAG_VDU_VAR_PALETTE, value, 0, 0, 0);
setLogicalPalette(var - VDU_VAR_PALETTE, value, 0, 0, 0);
return;
}
if (var >= FEATUREFLAG_VDU_VAR_CHARMAPPING && var <= FEATUREFLAG_VDU_VAR_CHARMAPPING_END) {
mapCharToBitmap(var - FEATUREFLAG_VDU_VAR_CHARMAPPING, value);
if (var >= VDU_VAR_CHARMAPPING && var <= VDU_VAR_CHARMAPPING_END) {
mapCharToBitmap(var - VDU_VAR_CHARMAPPING, value);
return;
}
switch (var) {
Expand Down

0 comments on commit fb795a0

Please sign in to comment.