Gopher2600/hardware/cpu/registers/r16bit/generate.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

30 lines
866 B
Go

package r16bit
import (
"fmt"
"reflect"
)
// Generate is used to create a register of bit length bitlen, using a value
// (v) to initialise it. v can be another r16bit.Register or an integer type
// (int, uint8 or uint16)
func Generate(v interface{}, bitlen int, label string) (Register, error) {
if bitlen != 16 {
return Register{}, fmt.Errorf("bitlen of %d not allowed; only 16 bits allowed with this implementation", bitlen)
}
switch v := v.(type) {
case Register:
return v, nil
case uint16:
return Register{value: v, label: label}, nil
case uint8:
return Register{value: uint16(v), label: label}, nil
case uint:
return Register{value: uint16(v), label: label}, nil
case int:
return Register{value: uint16(v), label: label}, nil
}
return Register{}, fmt.Errorf(fmt.Sprintf("value is of an unsupported type [%s]", reflect.TypeOf(v)))
}