Gopher2600/hardware/cpu/registers/rbits/registers.go
steve ac05b88ac9 o cpu
- registers must now be labelled, although the label can be the empty string
  - this means that we specify the name for the register once, at
    creation time, and not everywhere we print out information

o debugger
  - breakpoints now takes advantage of register labels
2020-01-05 18:58:26 +00:00

55 lines
1.1 KiB
Go

package rbits
import "fmt"
// implementing bit as a simple boolean
type bit bool
// Register is an array of of type bit, used for register representation
type Register struct {
value []bit
label string
}
// Size returns the number of bits in register
func (r Register) Size() int {
return len(r.value)
}
// Label returns the label assigned to the register
func (r Register) Label() string {
return r.label
}
// IsNegative checks the sign bit of the register
func (r Register) IsNegative() bool {
return bool(r.value[0])
}
// IsZero checks if register is zero
func (r Register) IsZero() bool {
for b := range r.value {
if r.value[b] == true {
return false
}
}
return true
}
// IsOverflow checks the 'overflow' bit of the register
func (r Register) IsOverflow() bool {
return bool(r.value[1])
}
func (r Register) String() string {
return fmt.Sprintf("%s: %d [%s] %s", r.label, r.ToUint(), r.ToHex(), r.ToBits())
}
// ToString returns the string representation of an aribtrary value
func (r Register) ToString(v interface{}) string {
vr, err := Generate(v, r.Size(), r.Label())
if err != nil {
return err.Error()
}
return fmt.Sprintf("%v", vr)
}