Fix mix mode 40 columns text

This commit is contained in:
Ivan Izaguirre 2020-10-04 19:21:49 +02:00
parent fddc9e2f6d
commit 442daca829
3 changed files with 24 additions and 17 deletions

View File

@ -194,17 +194,13 @@ func (a *Apple2) Snapshot() *image.RGBA {
}
func mixSnapshots(top, bottom *image.RGBA) *image.RGBA {
topWidth := top.Bounds().Dx()
bottomWidth := bottom.Bounds().Dx()
factor := (topWidth - 4) / (bottomWidth - 4)
// Copy bottom's bottom on top's bottom, applying the factor
// Copy bottom's bottom on top's bottom
for y := hiResHeightMixed; y < hiResHeight; y++ {
for x := 0; x < topWidth; x++ {
for x := 0; x < bottomWidth; x++ {
c := bottom.At(x, y)
for f := 0; f < factor; f++ {
top.Set(x*factor+f, y, c)
}
top.Set(x, y, c)
}
}

View File

@ -1,6 +1,7 @@
package izapple2
import (
"fmt"
"image"
"image/color"
)
@ -65,6 +66,10 @@ func filterNTSCColor(in *image.RGBA, mask *image.Alpha) *image.RGBA {
size := image.Rect(0, 0, width+4, height)
out := image.NewRGBA(size)
if width < 2*hiResWidth {
panic(fmt.Sprintf("The image has width %v. We can't apply the NTSC filter.", width))
}
for y := 0; y < height; y++ {
// We store the last four bits. We start with 0000
v := 0

View File

@ -9,10 +9,10 @@ import (
)
const (
charWidth = 7
charHeight = 8
textColumns = 40
textLines = 24
charWidth = 7
charHeight = 8
text40Columns = 40
textLines = 24
textPage1Address = uint16(0x0400)
textPage2Address = uint16(0x0800)
@ -70,11 +70,11 @@ func getTextFromMemory(mem *memoryRange, isSecondPage bool) []uint8 {
addressEnd := addressStart + textPageSize
data := mem.subRange(addressStart, addressEnd)
text := make([]uint8, textLines*textColumns)
text := make([]uint8, textLines*text40Columns)
for l := 0; l < textLines; l++ {
for c := 0; c < textColumns; c++ {
for c := 0; c < text40Columns; c++ {
char := data[getTextCharOffset(c, l)]
text[textColumns*l+c] = char
text[text40Columns*l+c] = char
}
}
return text
@ -96,11 +96,12 @@ func renderTextMode(a *Apple2, text []uint8, colorMap []uint8, light color.Color
columns := len(text) / textLines
if text == nil {
columns = textColumns
columns = text40Columns
}
width := columns * charWidth
height := textLines * charHeight
size := image.Rect(0, 0, width, height)
size := image.Rect(0, 0, 2*hiResWidth, hiResHeight)
img := image.NewRGBA(size)
for x := 0; x < width; x++ {
@ -147,7 +148,12 @@ func renderTextMode(a *Apple2, text []uint8, colorMap []uint8, light color.Color
colour = color.Black
}
img.Set(x, y, colour)
if columns == text40Columns {
img.Set(x*2, y, colour)
img.Set(x*2+1, y, colour)
} else {
img.Set(x, y, colour)
}
}
}