Still working on it
This commit is contained in:
parent
7c21111b12
commit
99e36b8912
@ -51,18 +51,14 @@ func main() {
|
|||||||
go readUserInput(eventChan)
|
go readUserInput(eventChan)
|
||||||
go sendNoneEvent(eventChan)
|
go sendNoneEvent(eventChan)
|
||||||
curr = 0
|
curr = 0
|
||||||
// Find a set of instructions that look like:
|
var ins []string
|
||||||
// inc a
|
|
||||||
// dec c
|
|
||||||
// jnz c -2
|
|
||||||
// and convert them to:
|
|
||||||
// mlt a c a
|
|
||||||
// cpy 0 c
|
|
||||||
for curr < len(instructions) || done {
|
for curr < len(instructions) || done {
|
||||||
if debug {
|
if debug {
|
||||||
|
lastInst := ins
|
||||||
// print state and wait for user to step
|
// print state and wait for user to step
|
||||||
PrintState()
|
PrintState()
|
||||||
PrintInstructionState()
|
fmt.Println("Last Instruction:", lastInst)
|
||||||
|
//PrintInstructionState()
|
||||||
fmt.Println("(q): quit (space): pause/unpause")
|
fmt.Println("(q): quit (space): pause/unpause")
|
||||||
ev := <-eventChan
|
ev := <-eventChan
|
||||||
if ev.Type == termbox.EventKey {
|
if ev.Type == termbox.EventKey {
|
||||||
@ -74,8 +70,9 @@ func main() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ins := strings.Fields(instructions[curr])
|
ins = strings.Fields(instructions[curr])
|
||||||
curr++
|
curr++
|
||||||
|
// Optimize multiplication
|
||||||
/*
|
/*
|
||||||
// TODO:
|
// TODO:
|
||||||
> cpy b c
|
> cpy b c
|
||||||
@ -84,9 +81,43 @@ func main() {
|
|||||||
jnz c -2
|
jnz c -2
|
||||||
dec d
|
dec d
|
||||||
jnz d -5
|
jnz d -5
|
||||||
== mult b d a
|
== mlt b d a
|
||||||
and curr += 6
|
and curr += 5
|
||||||
*/
|
*/
|
||||||
|
if ins[0] == "cpy" {
|
||||||
|
|
||||||
|
if strings.HasPrefix(instructions[curr+1], "inc") && strings.HasPrefix(instructions[curr+2], "dec") && strings.HasPrefix(instructions[curr+3], "jnz") && strings.HasPrefix(instructions[curr+4], "dec") && strings.HasPrefix(instructions[curr+5], "jnz") {
|
||||||
|
|
||||||
|
allGood := true
|
||||||
|
// The right instruction set, make sure the arguments match up
|
||||||
|
ins1 := strings.Fields(instructions[curr+1])
|
||||||
|
ins2 := strings.Fields(instructions[curr+2])
|
||||||
|
ins3 := strings.Fields(instructions[curr+3])
|
||||||
|
ins4 := strings.Fields(instructions[curr+4])
|
||||||
|
ins5 := strings.Fields(instructions[curr+5])
|
||||||
|
// Make sure all "c"s are correct
|
||||||
|
if ins[2] != ins2[1] && ins[2] != ins3[1] {
|
||||||
|
allGood = false
|
||||||
|
}
|
||||||
|
if allGood {
|
||||||
|
// Make sure all "b"s are correct
|
||||||
|
if ins[1] == ins1[1] || ins[1] == ins2[1] || ins[1] == ins4[1] {
|
||||||
|
allGood = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if allGood {
|
||||||
|
// Make sure all "d"s are correct
|
||||||
|
if (ins[1] == ins4[1] || ins[2] == ins4[1]) || ins4[1] != ins5[1] {
|
||||||
|
allGood = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if allGood {
|
||||||
|
// Go ahead and change the instruction
|
||||||
|
ins = []string{"mult", ins[1], ins4[1], ins1[1]}
|
||||||
|
curr += 5
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
switch ins[0] {
|
switch ins[0] {
|
||||||
case "jnz":
|
case "jnz":
|
||||||
// If we have a jnz c -2 it could be moving all of c into another register
|
// If we have a jnz c -2 it could be moving all of c into another register
|
||||||
|
Loading…
Reference in New Issue
Block a user