initial commit

This commit is contained in:
slederer 2024-09-19 14:12:22 +02:00
commit 60db522e87
107 changed files with 36924 additions and 0 deletions

59
tridoraemu/uart.go Normal file
View file

@ -0,0 +1,59 @@
// Copyright 2021-2024 Sebastian Lederer. See the file LICENSE.md for details
package main
import (
// "fmt"
"os"
"errors"
)
type UART struct {
available bool
buf [] byte
consoleChan chan byte
cpu *CPU
}
func (u *UART) read(byteaddr word) (word, error) {
var result word = 0
if len(u.buf) > 0 {
result = word(u.buf[0])
result |= 512
} else {
select {
case inbyte, ok := <-u.consoleChan:
if ! ok {
return 0, errors.New("console channel error")
} else {
u.buf = make([]byte, 1)
u.buf[0] = inbyte
// fmt.Println("Read input:", inbyte)
idle(false)
}
default:
idle(true)
}
}
return result, nil
}
func (u *UART) write(value word, byteaddr word) (error) {
var err error = nil
idle(false)
if value & 512 != 0 {
u.buf = u.buf[1:]
// fmt.Println("rx_clear: len ", len(u.buf))
}
if value & 1024 != 0 {
buf := make([] byte, 1)
buf[0] = byte(value & 255)
_ , err = os.Stdout.Write(buf)
}
return err
}