diff --git a/screen.go b/screen.go index 3820e68..a5effdb 100644 --- a/screen.go +++ b/screen.go @@ -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) } } diff --git a/screenNtscFilter.go b/screenNtscFilter.go index f38b041..5144d1a 100644 --- a/screenNtscFilter.go +++ b/screenNtscFilter.go @@ -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 diff --git a/screenText.go b/screenText.go index 3006e24..833e2cd 100644 --- a/screenText.go +++ b/screenText.go @@ -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) + } } }