Support double width low resolution

This commit is contained in:
Ivan Izaguirre 2019-11-09 00:44:13 +01:00 committed by Iván Izaguirre
parent 8ea3abe2ff
commit a8f22224a8
3 changed files with 17 additions and 14 deletions

View File

@ -25,6 +25,7 @@ Portable emulator of an Apple II+. Written in Go.
- Text 40 columns - Text 40 columns
- text 80 columns (Apple //e only) - text 80 columns (Apple //e only)
- Low-Resolution graphics - Low-Resolution graphics
- Double-Width Low-Resolution graphics (Apple //e only)
- High-Resolution graphics - High-Resolution graphics
- Mixed mode - Mixed mode
- Displays: - Displays:

View File

@ -47,12 +47,7 @@ func Snapshot(a *Apple2) *image.RGBA {
if isHiResMode { if isHiResMode {
snap = snapshotHiResModeMonoShift(a, pageIndex, isMixMode, lightColor) snap = snapshotHiResModeMonoShift(a, pageIndex, isMixMode, lightColor)
} else { } else {
if isDoubleResMode { snap = snapshotLoResModeMono(a, isDoubleResMode, isSecondPage, isMixMode, lightColor)
//snap = snapshotLoResDoubleModeMono(a, false /*isSecondPage*/, isMixMode, lightColor)
snap = snapshotLoResModeMono(a, isSecondPage, isMixMode, lightColor)
} else {
snap = snapshotLoResModeMono(a, isSecondPage, isMixMode, lightColor)
}
} }
if isMixMode { if isMixMode {

View File

@ -6,8 +6,9 @@ import (
) )
const ( const (
loResPixelWidth = charWidth * 2 loResPixelWidth = charWidth * 2
loResPixelHeight = charHeight / 2 doubleLoResPixelWidth = charWidth
loResPixelHeight = charHeight / 2
) )
func getColorPatterns(light color.Color) [16][16]color.Color { func getColorPatterns(light color.Color) [16][16]color.Color {
@ -37,14 +38,18 @@ func getColorPatterns(light color.Color) [16][16]color.Color {
} }
func snapshotLoResModeMono(a *Apple2, isSecondPage bool, isMixMode bool, light color.Color) *image.RGBA { func snapshotLoResModeMono(a *Apple2, isDoubleResMode bool, isSecondPage bool, isMixMode bool, light color.Color) *image.RGBA {
text, columns, lines := getActiveText(a, false, isSecondPage, false) text, columns, lines := getActiveText(a, isDoubleResMode, isSecondPage, false)
if isMixMode { if isMixMode {
lines -= textLinesMix lines -= textLinesMix
} }
grLines := lines * 2 grLines := lines * 2
pixelWidth := loResPixelWidth
if isDoubleResMode {
pixelWidth = doubleLoResPixelWidth
}
size := image.Rect(0, 0, columns*loResPixelWidth, grLines*loResPixelHeight) size := image.Rect(0, 0, columns*pixelWidth, grLines*loResPixelHeight)
img := image.NewRGBA(size) img := image.NewRGBA(size)
patterns := getColorPatterns(light) patterns := getColorPatterns(light)
@ -55,10 +60,12 @@ func snapshotLoResModeMono(a *Apple2, isSecondPage bool, isMixMode bool, light c
if l%2 == 0 { if l%2 == 0 {
grPixel = char & 0xf grPixel = char & 0xf
} }
offset := (c % 2) * 2 // 2 pixel offset for odd lores pixels, 0 for even pixels // We place pixelWidth mono pixels per graphic pixel.
// The groups of 4 mono pixels need to be alligned with an offset to get plain surfaces
offset := (c * pixelWidth) % 4
// Insert the 14 half pixels required // Insert the pixelWidth pixels required
for i := 0; i < loResPixelWidth; i++ { for i := 0; i < pixelWidth; i++ {
v := patterns[grPixel][i+offset] v := patterns[grPixel][i+offset]
// Repeat the same color for 4 lines // Repeat the same color for 4 lines
for r := 0; r < loResPixelHeight; r++ { for r := 0; r < loResPixelHeight; r++ {