Shiny graphics (but not keyboard) sort of working

This commit is contained in:
Zellyn Hunter 2016-07-13 15:27:15 -06:00
parent f44db04f85
commit 04dc9614ec
1 changed files with 24 additions and 15 deletions

View File

@ -5,6 +5,7 @@ import (
"flag" "flag"
"fmt" "fmt"
"image" "image"
"image/color"
"log" "log"
"os" "os"
"runtime" "runtime"
@ -16,7 +17,6 @@ import (
"github.com/zellyn/go6502/cpu" "github.com/zellyn/go6502/cpu"
"github.com/zellyn/goapple2" "github.com/zellyn/goapple2"
"github.com/zellyn/goapple2/cards" "github.com/zellyn/goapple2/cards"
"github.com/zellyn/goapple2/disk"
"github.com/zellyn/goapple2/util" "github.com/zellyn/goapple2/util"
"github.com/zellyn/goapple2/videoscan" "github.com/zellyn/goapple2/videoscan"
) )
@ -47,6 +47,7 @@ func RunEmulator(s screen.Screen) {
if err != nil { if err != nil {
log.Fatal(err) log.Fatal(err)
} }
defer b.Release()
rom := util.ReadRomOrDie("../data/roms/apple2+.rom") rom := util.ReadRomOrDie("../data/roms/apple2+.rom")
// charRom = util.ReadFullCharacterRomOrDie("../data/roms/apple2char.rom") // charRom = util.ReadFullCharacterRomOrDie("../data/roms/apple2char.rom")
@ -56,7 +57,7 @@ func RunEmulator(s screen.Screen) {
a2.Done = a2.Done || ProcessEvents(a2) a2.Done = a2.Done || ProcessEvents(a2)
runtime.Gosched() runtime.Gosched()
} }
plotter := ShinyPlotter{b, oncePerFrame} plotter := ShinyPlotter{w, b, oncePerFrame}
a2 = goapple2.NewApple2(plotter, rom, charRom) a2 = goapple2.NewApple2(plotter, rom, charRom)
intBasicRom := util.ReadRomOrDie("../data/roms/apple2.rom") intBasicRom := util.ReadRomOrDie("../data/roms/apple2.rom")
@ -78,11 +79,13 @@ func RunEmulator(s screen.Screen) {
} }
// disk1, err := disk.DiskFromFile("../data/disks/spedtest.dsk", 0) // disk1, err := disk.DiskFromFile("../data/disks/spedtest.dsk", 0)
// disk1, err := disk.DiskFromFile("../data/disks/dung_beetles.dsk", 0) // disk1, err := disk.DiskFromFile("../data/disks/dung_beetles.dsk", 0)
disk1, err := disk.DiskFromFile("../data/disks/chivalry.dsk", 0) /*
if err != nil { disk1, err := disk.DiskFromFile("../data/disks/chivalry.dsk", 0)
log.Fatal(err) if err != nil {
} log.Fatal(err)
diskCard.LoadDisk(disk1, 0) }
diskCard.LoadDisk(disk1, 0)
*/
steps := *steplimit steps := *steplimit
@ -142,7 +145,10 @@ func RunEmulator(s screen.Screen) {
a2.Quit() a2.Quit()
} }
func plot(x, y uint, color uint32, b screen.Buffer) { func plot(x, y int, c color.RGBA, b screen.Buffer) {
rgba := b.RGBA()
rgba.SetRGBA(x+BORDER_W, y+BORDER_H, c)
/* /*
x = x + BORDER_W x = x + BORDER_W
y = y + BORDER_H y = y + BORDER_H
@ -326,20 +332,21 @@ func ProcessEvents(a2 *goapple2.Apple2) (done bool) {
} }
type ShinyPlotter struct { type ShinyPlotter struct {
window screen.Window
buffer screen.Buffer buffer screen.Buffer
oncePerFrame func() oncePerFrame func()
} }
func (s ShinyPlotter) Plot(pd videoscan.PlotData) { func (s ShinyPlotter) Plot(pd videoscan.PlotData) {
y := uint(pd.Row) y := int(pd.Row)
x := uint(pd.Column) * 14 x := int(pd.Column) * 14
data := pd.Data data := pd.Data
for i := uint(0); i < 14; i++ { for i := 0; i < 14; i++ {
color1 := uint32(0) color1 := color.RGBA{0, 0, 0, 0xff}
color2 := uint32(0) color2 := color.RGBA{0, 0, 0, 0xff}
if data&1 > 0 { if data&1 > 0 {
color1 = 0x00ff00 color1 = color.RGBA{0x00, 0xff, 0x00, 0xff}
color2 = 0x008800 color2 = color.RGBA{0x00, 0x88, 0x00, 0xff}
} }
plot(x+i, y*2+0, color1, s.buffer) plot(x+i, y*2+0, color1, s.buffer)
plot(x+i, y*2+1, color2, s.buffer) plot(x+i, y*2+1, color2, s.buffer)
@ -348,6 +355,8 @@ func (s ShinyPlotter) Plot(pd videoscan.PlotData) {
} }
func (s ShinyPlotter) OncePerFrame() { func (s ShinyPlotter) OncePerFrame() {
s.window.Upload(image.Point{0, 0}, s.buffer, s.buffer.Bounds())
s.window.Publish()
s.oncePerFrame() s.oncePerFrame()
} }