jeol-t330a/modules/ph00524/emu/main.go

84 lines
1.6 KiB
Go
Raw Normal View History

2024-08-16 10:31:59 +00:00
package main
import (
"fmt"
"os"
"time"
"golang.org/x/term"
)
func main() {
ctrl := newEvacuationController("../eeprom/Vac-ours FK-U12.bin")
// Switch stdin into 'raw' mode.
oldState, err := term.MakeRaw(int(os.Stdin.Fd()))
if err != nil {
fmt.Println(err)
return
}
defer term.Restore(int(os.Stdin.Fd()), oldState)
// Keyboard input channel, byte at a time.
kbdC := make(chan byte)
go func() {
for {
b := make([]byte, 1)
_, err = os.Stdin.Read(b)
if err == nil {
kbdC <- b[0]
}
}
}()
t := time.Now()
// Countdown timers for simulating a button press.
pumpdownButton := time.Duration(0)
ventButton := time.Duration(0)
lastPrint := time.Now()
fmt.Print("\033[H\033[2J")
for {
dt := time.Since(t)
t = time.Now()
if !ctrl.step(dt) {
break
}
select {
case b := <-kbdC:
switch b {
case 'p':
pumpdownButton = time.Millisecond * 1000
case 'v':
ventButton = time.Millisecond * 1000
case 'q':
return
}
default:
}
ctrl.pressPumpdown(pumpdownButton > 0)
if pumpdownButton > 0 {
pumpdownButton -= dt
}
ctrl.pressVent(ventButton > 0)
if ventButton > 0 {
ventButton -= dt
}
if time.Since(lastPrint) > time.Millisecond*10 {
lastPrint = time.Now()
fmt.Print("\033[1;1H")
fmt.Printf("Controls: [v] vent, [p] pumpdown, [q] quit\r\n")
fmt.Printf("PC %04x\r\n", ctrl.lastIOPC)
fmt.Printf("%s\r\n", ctrl.getIndcators().String())
fmt.Printf("%s %s\r\n", ctrl.m1.status("M1"), ctrl.m2.status("M2"))
fmt.Printf("%s %s\r\n", ctrl.m1.barrier.status(), ctrl.m2.barrier.status())
fmt.Print("\r\n")
}
}
}