Updating Master
Also, new gogs host, so testing that
This commit is contained in:
parent
6b7d6385b5
commit
4902cd6946
8
cursor.go
Normal file
8
cursor.go
Normal file
@ -0,0 +1,8 @@
|
||||
package main
|
||||
|
||||
type Cursor struct {
|
||||
node_x int
|
||||
node_y int
|
||||
x int
|
||||
y int
|
||||
}
|
80
main.go
Normal file
80
main.go
Normal file
@ -0,0 +1,80 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"github.com/nsf/termbox-go"
|
||||
"os"
|
||||
//"syscall"
|
||||
"time"
|
||||
)
|
||||
|
||||
const PROGRAM_NAME = "tis100e"
|
||||
|
||||
func readUserInput(e chan termbox.Event) {
|
||||
for {
|
||||
e <- termbox.PollEvent()
|
||||
}
|
||||
}
|
||||
|
||||
func sendNoneEvent(e chan termbox.Event) {
|
||||
for {
|
||||
time.Sleep(60 * time.Millisecond)
|
||||
e <- termbox.Event{Type: termbox.EventNone}
|
||||
}
|
||||
}
|
||||
|
||||
func mainLoop(style Style) {
|
||||
screens := defaultScreens()
|
||||
display_screen := screens[MAIN_SCREEN_INDEX]
|
||||
layoutAndDrawScreen(display_screen, style)
|
||||
eventchan := make(chan termbox.Event)
|
||||
go readUserInput(eventchan)
|
||||
go sendNoneEvent(eventchan)
|
||||
|
||||
for {
|
||||
event := <-eventchan // := termbox.PollEvent()
|
||||
if event.Type == termbox.EventKey {
|
||||
if event.Key == termbox.KeyCtrlZ || event.Key == termbox.KeyCtrlC {
|
||||
/*
|
||||
process, _ := os.FindProcess(os.Getpid())
|
||||
termbox.Close()
|
||||
process.Signal(syscall.SIGSTOP)
|
||||
termbox.Init()
|
||||
*/
|
||||
break
|
||||
}
|
||||
new_screen_index := display_screen.handleKeyEvent(event)
|
||||
if new_screen_index < len(screens) {
|
||||
display_screen = screens[new_screen_index]
|
||||
layoutAndDrawScreen(display_screen, style)
|
||||
} else if new_screen_index == EXIT_SCREEN_INDEX {
|
||||
break
|
||||
}
|
||||
}
|
||||
if event.Type == termbox.EventResize || event.Type == termbox.EventNone {
|
||||
layoutAndDrawScreen(display_screen, style)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func main() {
|
||||
var err error
|
||||
|
||||
err = termbox.Init()
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
defer termbox.Close()
|
||||
|
||||
style := defaultStyle()
|
||||
termbox.SetOutputMode(termbox.Output256)
|
||||
mainLoop(style)
|
||||
}
|
||||
|
||||
func WriteToLog(d string) {
|
||||
f, err := os.OpenFile("tis100e_log", os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0664)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
f.WriteString(d)
|
||||
f.Close()
|
||||
}
|
43
screen.go
Normal file
43
screen.go
Normal file
@ -0,0 +1,43 @@
|
||||
package main
|
||||
|
||||
import "github.com/nsf/termbox-go"
|
||||
|
||||
type Screen interface {
|
||||
handleKeyEvent(event termbox.Event) int
|
||||
performLayout()
|
||||
drawScreen(style Style)
|
||||
}
|
||||
|
||||
type ViewPort struct {
|
||||
bytes_per_row int
|
||||
number_of_rows int
|
||||
first_row int
|
||||
}
|
||||
|
||||
const (
|
||||
MAIN_SCREEN_INDEX = iota
|
||||
ABOUT_SCREEN_INDEX
|
||||
EXIT_SCREEN_INDEX
|
||||
)
|
||||
|
||||
func defaultScreens() []Screen {
|
||||
//var view_port ViewPort
|
||||
main_screen := MainScreen{}
|
||||
about_screen := AboutScreen(0)
|
||||
screens := [...]Screen{
|
||||
&main_screen,
|
||||
&about_screen,
|
||||
}
|
||||
return screens[:]
|
||||
}
|
||||
|
||||
func drawBackground(bg termbox.Attribute) {
|
||||
termbox.Clear(0, bg)
|
||||
}
|
||||
|
||||
func layoutAndDrawScreen(screen Screen, style Style) {
|
||||
screen.performLayout()
|
||||
drawBackground(style.default_bg)
|
||||
screen.drawScreen(style)
|
||||
termbox.Flush()
|
||||
}
|
81
screen_about.go
Normal file
81
screen_about.go
Normal file
@ -0,0 +1,81 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"github.com/nsf/termbox-go"
|
||||
"gogs.bullercodeworks.com/brian/termbox-util"
|
||||
)
|
||||
|
||||
type Command struct {
|
||||
key string
|
||||
description string
|
||||
}
|
||||
|
||||
type AboutScreen int
|
||||
|
||||
func drawCommandsAtPoint(commands []Command, x int, y int, style Style) {
|
||||
x_pos, y_pos := x, y
|
||||
for index, cmd := range commands {
|
||||
termbox_util.DrawStringAtPoint(fmt.Sprintf("%6s", cmd.key), x_pos, y_pos, style.default_fg, style.default_bg)
|
||||
termbox_util.DrawStringAtPoint(cmd.description, x_pos+8, y_pos, style.default_fg, style.default_bg)
|
||||
y_pos++
|
||||
if index > 2 && index%2 == 1 {
|
||||
y_pos++
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (screen *AboutScreen) handleKeyEvent(event termbox.Event) int {
|
||||
return MAIN_SCREEN_INDEX
|
||||
}
|
||||
|
||||
func (screen *AboutScreen) performLayout() {}
|
||||
|
||||
func (screen *AboutScreen) drawScreen(style Style) {
|
||||
default_fg := style.default_fg
|
||||
default_bg := style.default_bg
|
||||
width, height := termbox.Size()
|
||||
template := [...]string{
|
||||
" ______________________ ____ ",
|
||||
" /_ __/ _/ ___< / __ \\/ __ \\___ ",
|
||||
" / / / / \\__ \\/ / / / / / / / _ \\",
|
||||
" / / _/ / ___/ / / /_/ / /_/ / __/",
|
||||
"/_/ /___//____/_/\\____/\\____/\\___/ ",
|
||||
" ",
|
||||
}
|
||||
first_line := template[0]
|
||||
start_x := (width - len(first_line)) / 2
|
||||
start_y := ((height - 2*len(template)) / 2) - 2
|
||||
x_pos, y_pos := start_x, start_y
|
||||
if height < 15 {
|
||||
start_y = 0
|
||||
y_pos = 0
|
||||
}
|
||||
for _, line := range template {
|
||||
x_pos = start_x
|
||||
for _, runeValue := range line {
|
||||
bg := default_bg
|
||||
displayRune := ' '
|
||||
if runeValue != ' ' {
|
||||
displayRune = runeValue
|
||||
termbox.SetCell(x_pos, y_pos, displayRune, default_fg, bg)
|
||||
}
|
||||
x_pos++
|
||||
}
|
||||
y_pos++
|
||||
}
|
||||
commands1 := [...]Command{
|
||||
{"Ctrl+←", "Move to Node Left"},
|
||||
{"Ctrl+↓", "Move to Node Down"},
|
||||
{"Ctrl+↑", "Move to Node Up"},
|
||||
{"Ctrl+→", "Move to Node Right"},
|
||||
}
|
||||
|
||||
x_pos = start_x
|
||||
y_pos++
|
||||
|
||||
drawCommandsAtPoint(commands1[:], x_pos, y_pos+1, style)
|
||||
|
||||
exit_txt := "Press any key to return to emulator"
|
||||
termbox_util.DrawStringAtPoint(exit_txt, (width-len(exit_txt))/2, height-1, style.title_fg, style.title_bg)
|
||||
}
|
46
screen_main.go
Normal file
46
screen_main.go
Normal file
@ -0,0 +1,46 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"github.com/br0xen/termbox-util"
|
||||
"github.com/nsf/termbox-go"
|
||||
//"strings"
|
||||
"fmt"
|
||||
)
|
||||
|
||||
const (
|
||||
MODE_INIT = iota
|
||||
MODE_DEV
|
||||
MODE_RUN
|
||||
MODE_DEBUG
|
||||
)
|
||||
|
||||
type MainScreen struct {
|
||||
the_cpu *TIS_CPU
|
||||
GameMode int
|
||||
}
|
||||
|
||||
func (screen *MainScreen) handleKeyEvent(event termbox.Event) int {
|
||||
if event.Type == termbox.EventKey {
|
||||
if event.Key == termbox.KeyEsc {
|
||||
return EXIT_SCREEN_INDEX
|
||||
}
|
||||
}
|
||||
return MAIN_SCREEN_INDEX
|
||||
}
|
||||
|
||||
func (screen *MainScreen) performLayout() {}
|
||||
|
||||
func (screen *MainScreen) drawScreen(style Style) {
|
||||
if screen.GameMode == MODE_INIT {
|
||||
screen.the_cpu = GetDefaultCPU()
|
||||
screen.GameMode = MODE_DEV
|
||||
}
|
||||
for i := range screen.the_cpu.nodes {
|
||||
WriteToLog(fmt.Sprintf("Node Row: %d\n", i))
|
||||
for j, _ := range screen.the_cpu.nodes[i] {
|
||||
WriteToLog(fmt.Sprintf("Node Col: %d\n", j))
|
||||
x_pos, y_pos := (18 * j), (18 * i)
|
||||
termbox_util.DrawBorder(x_pos, y_pos, x_pos+16, y_pos+16, style.default_fg, style.default_bg)
|
||||
}
|
||||
}
|
||||
}
|
23
style.go
Normal file
23
style.go
Normal file
@ -0,0 +1,23 @@
|
||||
package main
|
||||
|
||||
import "github.com/nsf/termbox-go"
|
||||
|
||||
type Style struct {
|
||||
default_bg termbox.Attribute
|
||||
default_fg termbox.Attribute
|
||||
title_bg termbox.Attribute
|
||||
title_fg termbox.Attribute
|
||||
cursor_bg termbox.Attribute
|
||||
cursor_fg termbox.Attribute
|
||||
}
|
||||
|
||||
func defaultStyle() Style {
|
||||
var style Style
|
||||
style.default_bg = termbox.ColorBlack
|
||||
style.default_fg = termbox.ColorWhite
|
||||
style.title_bg = style.default_bg
|
||||
style.title_fg = style.default_fg | termbox.AttrBold
|
||||
style.cursor_bg = termbox.ColorWhite
|
||||
style.cursor_fg = termbox.ColorBlack
|
||||
return style
|
||||
}
|
92
tis_structs.go
Normal file
92
tis_structs.go
Normal file
@ -0,0 +1,92 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
)
|
||||
|
||||
type TIS_CPU struct {
|
||||
nodes [][]TIS_Node
|
||||
nodes_per_row int
|
||||
}
|
||||
|
||||
type NodeType int
|
||||
|
||||
const (
|
||||
NODE_TYPE_CODE = iota
|
||||
NODE_TYPE_STACK
|
||||
)
|
||||
|
||||
func GetDefaultCPU() *TIS_CPU {
|
||||
t := &TIS_CPU{nodes_per_row: 4}
|
||||
t.addRow()
|
||||
t.addRow()
|
||||
return t
|
||||
}
|
||||
|
||||
func (t *TIS_CPU) addRow() bool {
|
||||
t.nodes = append(t.nodes, make([]TIS_Node, t.nodes_per_row))
|
||||
for i := 0; i < t.nodes_per_row; i++ {
|
||||
t.addNode(len(t.nodes) - 1)
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
func (t *TIS_CPU) addNode(row int) bool {
|
||||
if row >= len(t.nodes) {
|
||||
return false
|
||||
}
|
||||
t.nodes[row] = append(t.nodes[row], NewTISCodeNode())
|
||||
return true
|
||||
}
|
||||
|
||||
func (t *TIS_CPU) ChangeNodeType(x, y int, new_type NodeType) {
|
||||
|
||||
}
|
||||
|
||||
func (t *TIS_CPU) GetNode(x, y int) *TIS_Node {
|
||||
if x < t.nodes_per_row && y < len(t.nodes) {
|
||||
return &t.nodes[y][x]
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
type TIS_Node interface {
|
||||
}
|
||||
|
||||
type TIS_CodeNode struct {
|
||||
Reg_ACC int
|
||||
Reg_BAK int
|
||||
|
||||
// Code: 18w by 15h
|
||||
code [15]string
|
||||
|
||||
UpBuffer *TIS_Buffer
|
||||
RightBuffer *TIS_Buffer
|
||||
DownBuffer *TIS_Buffer
|
||||
LeftBuffer *TIS_Buffer
|
||||
}
|
||||
|
||||
func NewTISCodeNode() *TIS_CodeNode {
|
||||
return &TIS_CodeNode{}
|
||||
}
|
||||
|
||||
type TIS_StackNode struct {
|
||||
stack []int
|
||||
max_size int
|
||||
}
|
||||
|
||||
func NewTISStackNode() *TIS_StackNode {
|
||||
return &TIS_StackNode{max_size: 15}
|
||||
}
|
||||
|
||||
func (n *TIS_StackNode) addToStack(p int) bool {
|
||||
if len(n.stack) < 15 {
|
||||
n.stack = append(n.stack, p)
|
||||
return true
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
/* Buffers are the go-betweens for nodes */
|
||||
type TIS_Buffer interface {
|
||||
}
|
Loading…
Reference in New Issue
Block a user