From 3a9d49cd4efdb6aec41aa96c635ee43d47fc9d2f Mon Sep 17 00:00:00 2001 From: Jonas Franz <info@jonasfranz.software> Date: Mon, 18 May 2020 20:55:47 +0200 Subject: [PATCH 1/3] Add IO --- hal/module.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/hal/module.go b/hal/module.go index 09ded49..a218b1e 100644 --- a/hal/module.go +++ b/hal/module.go @@ -10,6 +10,7 @@ type Module struct { Accumulator float64 ProgramStorage Program Register []float64 + IO []float64 isStopped bool } @@ -40,12 +41,13 @@ func (h *Module) Run() error { return nil } -func NewHALModule(program Program, registerSize uint64) (*Module, error) { +func NewHALModule(program Program, registerSize uint64, ioSize uint64) (*Module, error) { if registerSize <= 10 { return nil, fmt.Errorf("register size must be greater then 10 [ registerSize = %d ]", registerSize) } return &Module{ ProgramStorage: program, Register: make([]float64, registerSize), + IO: make([]float64, ioSize), }, nil } From c94a6e02d80fdb259b4f391fef7f7d20012f2579 Mon Sep 17 00:00:00 2001 From: Jonas Franz <info@jonasfranz.software> Date: Mon, 18 May 2020 20:56:54 +0200 Subject: [PATCH 2/3] Run module --- cmd/root.go | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/cmd/root.go b/cmd/root.go index b732288..ec01c6d 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -50,6 +50,9 @@ func runRootCommand(cmd *cobra.Command, args []string) error { if err != nil { return err } - hal.NewHALModule(program, 256) - return nil + module, err := hal.NewHALModule(program, 256, 2) + if err != nil { + return err + } + return module.Run() } From 743ec2c0b572579fb0359e220971fbee3a5dde06 Mon Sep 17 00:00:00 2001 From: Jonas Franz <info@jonasfranz.software> Date: Mon, 18 May 2020 20:58:58 +0200 Subject: [PATCH 3/3] Implement out instruction --- hal/instructions.go | 4 ++-- hal/module.go | 16 ++++++++-------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/hal/instructions.go b/hal/instructions.go index ceed661..3e43777 100644 --- a/hal/instructions.go +++ b/hal/instructions.go @@ -58,8 +58,8 @@ var InstructionStop = &Instruction{ var InstructionOut = &Instruction{ Name: "OUT", - Execute: func(module *Module) { - // TODO implement + ExecuteWithOperand: func(module *Module, operand float64) { + module.IO[int64(operand)] = module.accumulator }, } diff --git a/hal/module.go b/hal/module.go index a218b1e..04b1db8 100644 --- a/hal/module.go +++ b/hal/module.go @@ -7,23 +7,23 @@ const maxInstructions = 1000 type Program map[int64]*ProgrammedInstruction type Module struct { - Accumulator float64 - ProgramStorage Program - Register []float64 + accumulator float64 + programStorage Program + register []float64 IO []float64 isStopped bool } func (h *Module) ProgramCounter() int64 { - return int64(h.Register[0]) + return int64(h.register[0]) } func (h *Module) increaseProgramCounter() { - h.Register[0]++ + h.register[0]++ } func (h *Module) Step() { - instruction := h.ProgramStorage[h.ProgramCounter()] + instruction := h.programStorage[h.ProgramCounter()] h.increaseProgramCounter() if instruction == nil { return @@ -46,8 +46,8 @@ func NewHALModule(program Program, registerSize uint64, ioSize uint64) (*Module, return nil, fmt.Errorf("register size must be greater then 10 [ registerSize = %d ]", registerSize) } return &Module{ - ProgramStorage: program, - Register: make([]float64, registerSize), + programStorage: program, + register: make([]float64, registerSize), IO: make([]float64, ioSize), }, nil }