From e2c0a88a412f1f927765825974344b8d5486edd3 Mon Sep 17 00:00:00 2001 From: Emile Date: Sun, 23 Feb 2020 16:40:44 +0100 Subject: move stuff into functions --- src/main.go | 97 ++++++++++--------------------------------------------------- 1 file changed, 15 insertions(+), 82 deletions(-) diff --git a/src/main.go b/src/main.go index b11ea45..d5e0107 100644 --- a/src/main.go +++ b/src/main.go @@ -1,94 +1,27 @@ package main -import ( - "fmt" - "log" - "strings" - "time" -) - -var ( - verbose *bool -) - func main() { - log.Println("---") - log.Println("[i] Parse the config") + // initialize the game by parsing the config, defining the bots, building the + // bots and generating random offsets where the bots should be placed in + // memory config := parseConfig() + defineBots(&config) + buildBots(&config) + genRandomOffsets(&config) - // build the bots - log.Println("---") - log.Println("[i] Build the bots") - - for i := 0; i < 2; i++ { - bot := buildBot(config, "bots/warrior.asm") - config.Bots = append(config.Bots, bot) - } - // bot2 := buildBot(config, "bots/warrior.asm") - // config.Bots = append(config.Bots, bot2) - // bot3 := buildBot(config, "bots/warrior.asm") - // config.Bots = append(config.Bots, bot3) - - // initialize the arena - log.Println("---") - log.Println("[i] Initialize the Arena") - r2p := initArena(config) - - randomOffsets := getRandomOffsets(config) - - // place each bot in the arena - log.Println("---") - log.Println("[i] Place the bots") - for bot := 0; bot < len(config.Bots); bot++ { - // Place the bot in the arena - log.Printf("[i] Placing bot %d", bot) - address := randomOffsets[bot] - placeBot(r2p, config.Bots[bot], address) - - // store the initial address of the bot int the struct field - config.Bots[bot].Addr = address - - // define the instruction point and the stack pointer - log.Printf("[i] setting up the PC and SP for bot %d", bot) - _ = r2cmd(r2p, fmt.Sprintf("aer PC=%d", address)) - _ = r2cmd(r2p, fmt.Sprintf("aer SP=SP+%d", address)) - - // dump the registers of the user for being able to switch inbetween them - initialRegisers := strings.Replace(r2cmd(r2p, "aerR"), "\n", ";", -1) - config.Bots[bot].Regs = initialRegisers - - // print the instruction point and the stack pointer - botStackPointer := r2cmd(r2p, "aerR~esp[2]") - log.Printf("[i] bot %d esp = %s", bot, botStackPointer) - botInstructionPointer := r2cmd(r2p, "aerR~eip[2]") - log.Printf("[i] bot %d eip = %s", bot, botInstructionPointer) - } - - // handle errors in esil - _ = r2cmd(r2p, "e cmd.esil.todo=f theend=1") - _ = r2cmd(r2p, "e cmd.esil.trap=f theend=1") - _ = r2cmd(r2p, "e cmd.esil.intr=f theend=1") - _ = r2cmd(r2p, "e cmd.esil.ioer=f theend=1") - _ = r2cmd(r2p, "f theend=0") - - fmt.Println(r2cmd(r2p, fmt.Sprintf("b %d", config.Memsize))) - - // start the competition - i := 0 - for true { + // initialize the arena (allocate memory + initialize the ESIL VM & stack) + r2p := initArena(&config) - // Step, then print the users registers - registers := stepIn(r2p) - config.Bots[i].Regs = registers - fmt.Println(user(r2p, i, registers, config)) + // place the bots in the arena + placeBots(r2p, &config) - // switch players - i = switchPlayer(r2p, i, config) + // if an error occurs (interrupt, ioerror, trap, ...), the ESIL VM should set + // a flag that can be used to determine if a player has died + defineErrors(r2p) - // sleepti - time.Sleep(100 * time.Millisecond) - } + // run the actual game + runGame(r2p, &config) r2p.Close() } -- cgit 1.4.1