izapple2/apple2/characterGenerator.go

74 lines
1.4 KiB
Go
Raw Normal View History

2019-04-21 16:18:43 +00:00
package apple2
import (
"bufio"
"fmt"
"os"
)
/*
See:
hhttps://mirrors.apple2.org.za/Apple%20II%20Documentation%20Project/Companies/Apple/Documentation/Apple%20Technical%20Information%20Library/a2til041.txt
*/
// CharacterGenerator represents the ROM wth the characters bitmaps
type CharacterGenerator struct {
data []uint8
}
const (
rev7CharGenSize = 2048
)
// NewCharacterGenerator instantiates a new Character Generator with the rom on the file given
func NewCharacterGenerator(filename string) *CharacterGenerator {
var cg CharacterGenerator
cg.load(filename)
return &cg
}
func (cg *CharacterGenerator) load(filename string) {
f, err := os.Open(filename)
if err != nil {
panic(err)
}
defer f.Close()
stats, statsErr := f.Stat()
if statsErr != nil {
panic(err)
}
size := stats.Size()
if size != rev7CharGenSize {
panic("Character ROM size not supported")
}
cg.data = make([]uint8, size)
buf := bufio.NewReader(f)
buf.Read(cg.data)
}
func (cg *CharacterGenerator) dumpChar(char uint8) {
base := int(char) * 8
fmt.Printf("Char: %v\n---------\n", char)
for i := 0; i < 8; i++ {
fmt.Print("|")
b := cg.data[base+i]
for j := 6; j >= 0; j-- {
if (b>>uint(j))&1 == 1 {
fmt.Print("#")
} else {
fmt.Print(" ")
}
}
fmt.Println("|")
}
fmt.Println("---------")
}
func (cg *CharacterGenerator) Dump() {
for i := 0; i < 256; i++ {
cg.dumpChar(uint8(i))
}
}