Shiny graphics (but not keyboard) sort of working
This commit is contained in:
parent
f44db04f85
commit
04dc9614ec
|
@ -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()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue