From 1335aac22a7017e667af658553750b73f81992d7 Mon Sep 17 00:00:00 2001 From: "Gabriel G. de Brito" Date: Tue, 7 May 2024 12:07:46 -0300 Subject: [PATCH] Added internationalization to architectures --- internationalization.go | 30 +++++++++++++ mips/mips.go | 98 ++++++++++++++++++++--------------------- riscv/riscv.go | 46 +++++++++---------- sagui/sagui.go | 28 ++++++------ 4 files changed, 116 insertions(+), 86 deletions(-) diff --git a/internationalization.go b/internationalization.go index 941adaa..20f54a0 100644 --- a/internationalization.go +++ b/internationalization.go @@ -195,4 +195,34 @@ No comando print, #tamanho significa "tantas instruções após addr". "Debugging": "Debuggando", "No such command: %v\n": "Comando inexistente: %v\n", "bye!": "até mais!", + + // + // riscv.go and others. + // + "unknown opcode: %b": "opcode desconhecido: %b", + "could not load 4 bytes from address at PC: %x": "não foi possível carregar 4 bytes do endereço do PC: %x", + "value %v bigger than maximum 32 bit address %v": "valor %v maior que o máximo endereço de 32 bits %v", + "end address %v bigger than maximum 32 bit address %v": "endereço final %v maior que o máximo endereço de 32 bits %v", + "no such register: %d. RISC-V has only 32 registers": "registrador %d inexistente. RISC-V possui somente 32 registradores", + "wrong number of arguments for instruction '%s', expected 3 arguments": "número de argumentos para instrução '%s' errado: 3 argumentos esperados", + "wrong number of arguments for instruction '%s', expected 2 arguments": "número de argumentos para instrução '%s' errado: 2 argumentos esperados", + "wrong number of arguments for instruction '%s', expected no argument": "número de argumentos para instrução '%s' errado: nenhum argumento esperado", + "unknown instruction: %v": "instrução desconhecida: %v", + "no such register: %v": "registrador inexistente: %v", + "empty argument": "argumento vazio", + + // + // mips.go specific. + // + "no such register: %d. MIPS-I has only 32 general purpouse registers and two special registers for multiplication and division (HI and LO, 32 and 33)": "registrador inexistente: %d. MIPS-I possui somente 32 registradores de propósito geral e dois registradores especiais para multiplicação e divisão (HI e LO, 32 e 33)", + // This one is used by sagui also. + "wrong number of arguments for instruction '%s', expected 1 argument": "número de argumentos para instrução '%s' errado: 1 argumento esperado", + + // + // sagui.go specific. + // + "value %v is bigger than maximum 8 bit address %v": "valor %v maior que o máximo endereço de 8 bits %v", + "end address %v bigger than maximum 8 bit address %v": "endereço final %v maior que o máximo endereço de 8 bits %v", + "failed to fetch instruction from memory: %v": "falha lendo a instrução da memória: %v", + "immediate bigger than immediate size: %v": "imediato maior que o tamanho do imediato: %v", } diff --git a/mips/mips.go b/mips/mips.go index 8085396..25d86c7 100644 --- a/mips/mips.go +++ b/mips/mips.go @@ -624,7 +624,7 @@ func (m *Mips) execute(i uint32) (*machine.Call, error) { rs, rt, off := parseI(i) m.executeSw(rs, rt, off) default: - return nil, fmt.Errorf("unknown opcode: %b", opcode) + return nil, fmt.Errorf(machine.InterCtx.Get("unknown opcode: %b"), opcode) } m.pc += 4 @@ -634,7 +634,7 @@ func (m *Mips) execute(i uint32) (*machine.Call, error) { func (m *Mips) GetRegister(reg uint64) (uint64, error) { if reg >= 34 { - return 0, fmt.Errorf("no such register: %d. MIPS-I has only 32 general purpouse registers and two special registers for multiplication and division (HI and LO, 32 and 33)", reg) + return 0, fmt.Errorf(machine.InterCtx.Get("no such register: %d. MIPS-I has only 32 general purpouse registers and two special registers for multiplication and division (HI and LO, 32 and 33)"), reg) } return uint64(m.registers[reg]), nil @@ -642,7 +642,7 @@ func (m *Mips) GetRegister(reg uint64) (uint64, error) { func (m *Mips) SetRegister(reg uint64, content uint64) error { if reg >= 34 { - return fmt.Errorf("no such register: %d. MIPS-I has only 32 general purpouse registers and two special registers for multiplication and division (HI and LO, 32 and 33)", reg) + return fmt.Errorf(machine.InterCtx.Get("no such register: %d. MIPS-I has only 32 general purpouse registers and two special registers for multiplication and division (HI and LO, 32 and 33)"), reg) } if reg != 0 { @@ -654,7 +654,7 @@ func (m *Mips) SetRegister(reg uint64, content uint64) error { func (m *Mips) GetMemory(addr uint64) (uint8, error) { if addr > math.MaxUint32 { - return 0, fmt.Errorf("value %v bigger than maximum 32 bit address %v", addr, math.MaxUint32) + return 0, fmt.Errorf(machine.InterCtx.Get("value %v bigger than maximum 32 bit address %v"), addr, math.MaxUint32) } return m.mem[addr], nil @@ -662,7 +662,7 @@ func (m *Mips) GetMemory(addr uint64) (uint8, error) { func (m *Mips) SetMemory(addr uint64, content uint8) error { if addr > math.MaxUint32 { - return fmt.Errorf("value %v bigger than maximum 32 bit address %v", addr, math.MaxUint32) + return fmt.Errorf(machine.InterCtx.Get("value %v bigger than maximum 32 bit address %v"), addr, math.MaxUint32) } m.mem[addr] = content @@ -673,7 +673,7 @@ func (m *Mips) SetMemory(addr uint64, content uint8) error { func (m *Mips) GetMemoryChunk(addr uint64, size uint64) ([]uint8, error) { end := addr + (size - 1) if end > math.MaxUint32 { - return nil, fmt.Errorf("end address %v bigger than maximum 32 bit address %v", end, math.MaxUint32) + return nil, fmt.Errorf(machine.InterCtx.Get("end address %v bigger than maximum 32 bit address %v"), end, math.MaxUint32) } return m.mem[addr:(end + 1)], nil @@ -682,7 +682,7 @@ func (m *Mips) GetMemoryChunk(addr uint64, size uint64) ([]uint8, error) { func (m *Mips) SetMemoryChunk(addr uint64, content []uint8) error { end := addr + (uint64(len(content)) - 1) if end > math.MaxUint32 { - return fmt.Errorf("end address %v bigger than maximum 32 bit address %v", end, math.MaxUint32) + return fmt.Errorf(machine.InterCtx.Get("end address %v bigger than maximum 32 bit address %v"), end, math.MaxUint32) } for _, b := range content { @@ -701,7 +701,7 @@ func (m *Mips) LoadProgram(program []uint8) error { func (m *Mips) NextInstruction() (*machine.Call, error) { iarr, err := m.GetMemoryChunk(uint64(m.pc), 4) if err != nil { - return nil, fmt.Errorf("could not load 4 bytes from address at PC: %x", m.pc) + return nil, fmt.Errorf(machine.InterCtx.Get("could not load 4 bytes from address at PC: %x"), m.pc) } i := uint32(iarr[0]) | (uint32(iarr[1]) << 8) | (uint32(iarr[2]) << 16) | (uint32(iarr[3]) << 24) @@ -734,55 +734,55 @@ func assembleSpecial(t assembler.ResolvedToken) (uint32, error) { rs = t.Args[1] rd = t.Args[0] } else { - return 0, fmt.Errorf("wrong number of arguments for instruction %s", t.Value) + return 0, fmt.Errorf(machine.InterCtx.Get("wrong number of arguments for instruction '%s', expected no argument"), t.Value) } case "jr": funct = 8 if len(t.Args) != 1 { - return 0, fmt.Errorf("wrong number of arguments for instruction %s. Expected 1 argument", t.Value) + return 0, fmt.Errorf(machine.InterCtx.Get("wrong number of arguments for instruction '%s', expected 1 argument"), t.Value) } rs = t.Args[0] case "mult": if len(t.Args) != 2 { - return 0, fmt.Errorf("wrong number of arguments for instruction %s. Expected 2 arguments", t.Value) + return 0, fmt.Errorf(machine.InterCtx.Get("wrong number of arguments for instruction '%s', expected 2 arguments"), t.Value) } rs = t.Args[0] rt = t.Args[1] funct = 0x18 case "div": if len(t.Args) != 2 { - return 0, fmt.Errorf("wrong number of arguments for instruction %s. Expected 2 arguments", t.Value) + return 0, fmt.Errorf(machine.InterCtx.Get("wrong number of arguments for instruction '%s', expected 2 arguments"), t.Value) } rs = t.Args[0] rt = t.Args[1] funct = 0x1a case "mfhi": if len(t.Args) != 1 { - return 0, fmt.Errorf("wrong number of arguments for instruction %s. Expected 2 argument", t.Value) + return 0, fmt.Errorf(machine.InterCtx.Get("wrong number of arguments for instruction '%s', expected 2 arguments"), t.Value) } rd = t.Args[0] funct = 0x10 case "mflo": if len(t.Args) != 1 { - return 0, fmt.Errorf("wrong number of arguments for instruction %s. Expected 2 argument", t.Value) + return 0, fmt.Errorf(machine.InterCtx.Get("wrong number of arguments for instruction '%s', expected 2 arguments"), t.Value) } rd = t.Args[0] funct = 0x12 case "mthi": if len(t.Args) != 1 { - return 0, fmt.Errorf("wrong number of arguments for instruction %s. Expected 2 argument", t.Value) + return 0, fmt.Errorf(machine.InterCtx.Get("wrong number of arguments for instruction '%s', expected 2 arguments"), t.Value) } rs = t.Args[0] funct = 0x11 case "mtlo": if len(t.Args) != 1 { - return 0, fmt.Errorf("wrong number of arguments for instruction %s. Expected 2 argument", t.Value) + return 0, fmt.Errorf(machine.InterCtx.Get("wrong number of arguments for instruction '%s', expected 2 arguments"), t.Value) } rs = t.Args[0] funct = 0x13 default: if len(t.Args) != 3 { - return 0, fmt.Errorf("wrong number of arguments for instruction %s. Expected 3 arguments", t.Value) + return 0, fmt.Errorf(machine.InterCtx.Get("wrong number of arguments for instruction '%s', expected 3 arguments"), t.Value) } rd = t.Args[0] rs = t.Args[1] @@ -845,7 +845,7 @@ func assembleSpecial(t assembler.ResolvedToken) (uint32, error) { func assembleSpecial2(t assembler.ResolvedToken) (uint32, error) { if len(t.Args) != 2 { - return 0, fmt.Errorf("wrong number of arguments for instruction %s. Expected 2 arguments", t.Value) + return 0, fmt.Errorf(machine.InterCtx.Get("wrong number of arguments for instruction '%s', expected 2 arguments"), t.Value) } rd := t.Args[0] rs := t.Args[1] @@ -867,7 +867,7 @@ func assembleSpecial2(t assembler.ResolvedToken) (uint32, error) { func assembleSpecial3(t assembler.ResolvedToken) (uint32, error) { if len(t.Args) != 2 { - return 0, fmt.Errorf("wrong number of arguments for instruction %s. Expected 2 arguments", t.Value) + return 0, fmt.Errorf(machine.InterCtx.Get("wrong number of arguments for instruction '%s', expected 2 arguments"), t.Value) } rd := t.Args[0] rt := t.Args[1] @@ -890,7 +890,7 @@ func assembleSpecial3(t assembler.ResolvedToken) (uint32, error) { func assembleRegimm(t assembler.ResolvedToken, addr int) (uint32, error) { if len(t.Args) != 2 { - return 0, fmt.Errorf("wrong number of arguments for instruction %s. Expected 2 arguments", t.Value) + return 0, fmt.Errorf(machine.InterCtx.Get("wrong number of arguments for instruction '%s', expected 2 arguments"), t.Value) } rs := t.Args[0] @@ -912,7 +912,7 @@ func assembleRegimm(t assembler.ResolvedToken, addr int) (uint32, error) { func assembleAddi(t assembler.ResolvedToken) (uint32, error) { if len(t.Args) != 3 { - return 0, fmt.Errorf("wrong number of arguments for instruction %s. Expected 2 arguments", t.Value) + return 0, fmt.Errorf(machine.InterCtx.Get("wrong number of arguments for instruction '%s', expected 2 arguments"), t.Value) } rt := t.Args[0] << 16 @@ -923,7 +923,7 @@ func assembleAddi(t assembler.ResolvedToken) (uint32, error) { func assembleAddiu(t assembler.ResolvedToken) (uint32, error) { if len(t.Args) != 3 { - return 0, fmt.Errorf("wrong number of arguments for instruction %s. Expected 2 arguments", t.Value) + return 0, fmt.Errorf(machine.InterCtx.Get("wrong number of arguments for instruction '%s', expected 2 arguments"), t.Value) } rt := t.Args[0] << 16 @@ -934,7 +934,7 @@ func assembleAddiu(t assembler.ResolvedToken) (uint32, error) { func assembleAndi(t assembler.ResolvedToken) (uint32, error) { if len(t.Args) != 3 { - return 0, fmt.Errorf("wrong number of arguments for instruction %s. Expected 2 arguments", t.Value) + return 0, fmt.Errorf(machine.InterCtx.Get("wrong number of arguments for instruction '%s', expected 2 arguments"), t.Value) } rt := t.Args[0] << 16 @@ -945,7 +945,7 @@ func assembleAndi(t assembler.ResolvedToken) (uint32, error) { func assembleOri(t assembler.ResolvedToken) (uint32, error) { if len(t.Args) != 3 { - return 0, fmt.Errorf("wrong number of arguments for instruction %s. Expected 2 arguments", t.Value) + return 0, fmt.Errorf(machine.InterCtx.Get("wrong number of arguments for instruction '%s', expected 2 arguments"), t.Value) } rt := t.Args[0] << 16 @@ -956,7 +956,7 @@ func assembleOri(t assembler.ResolvedToken) (uint32, error) { func assembleXori(t assembler.ResolvedToken) (uint32, error) { if len(t.Args) != 3 { - return 0, fmt.Errorf("wrong number of arguments for instruction %s. Expected 2 arguments", t.Value) + return 0, fmt.Errorf(machine.InterCtx.Get("wrong number of arguments for instruction '%s', expected 2 arguments"), t.Value) } rt := t.Args[0] << 16 @@ -967,7 +967,7 @@ func assembleXori(t assembler.ResolvedToken) (uint32, error) { func assembleSlti(t assembler.ResolvedToken) (uint32, error) { if len(t.Args) != 3 { - return 0, fmt.Errorf("wrong number of arguments for instruction %s. Expected 2 arguments", t.Value) + return 0, fmt.Errorf(machine.InterCtx.Get("wrong number of arguments for instruction '%s', expected 2 arguments"), t.Value) } rt := t.Args[0] << 16 @@ -978,7 +978,7 @@ func assembleSlti(t assembler.ResolvedToken) (uint32, error) { func assembleSltiu(t assembler.ResolvedToken) (uint32, error) { if len(t.Args) != 3 { - return 0, fmt.Errorf("wrong number of arguments for instruction %s. Expected 2 arguments", t.Value) + return 0, fmt.Errorf(machine.InterCtx.Get("wrong number of arguments for instruction '%s', expected 2 arguments"), t.Value) } rt := t.Args[0] << 16 @@ -989,7 +989,7 @@ func assembleSltiu(t assembler.ResolvedToken) (uint32, error) { func assembleLui(t assembler.ResolvedToken) (uint32, error) { if len(t.Args) != 2 { - return 0, fmt.Errorf("wrong number of arguments for instruction %s. Expected 2 arguments", t.Value) + return 0, fmt.Errorf(machine.InterCtx.Get("wrong number of arguments for instruction '%s', expected 2 arguments"), t.Value) } rt := t.Args[0] << 16 @@ -999,7 +999,7 @@ func assembleLui(t assembler.ResolvedToken) (uint32, error) { func assembleBeq(t assembler.ResolvedToken, addr int) (uint32, error) { if len(t.Args) != 3 { - return 0, fmt.Errorf("wrong number of arguments for instruction %s. Expected 2 arguments", t.Value) + return 0, fmt.Errorf(machine.InterCtx.Get("wrong number of arguments for instruction '%s', expected 2 arguments"), t.Value) } rs := t.Args[0] rt := t.Args[1] @@ -1016,7 +1016,7 @@ func assembleBeq(t assembler.ResolvedToken, addr int) (uint32, error) { func assembleBgtz(t assembler.ResolvedToken, addr int) (uint32, error) { if len(t.Args) != 3 { - return 0, fmt.Errorf("wrong number of arguments for instruction %s. Expected 2 arguments", t.Value) + return 0, fmt.Errorf(machine.InterCtx.Get("wrong number of arguments for instruction '%s', expected 2 arguments"), t.Value) } rs := t.Args[0] rt := t.Args[1] @@ -1033,7 +1033,7 @@ func assembleBgtz(t assembler.ResolvedToken, addr int) (uint32, error) { func assembleBlez(t assembler.ResolvedToken, addr int) (uint32, error) { if len(t.Args) != 3 { - return 0, fmt.Errorf("wrong number of arguments for instruction %s. Expected 2 arguments", t.Value) + return 0, fmt.Errorf(machine.InterCtx.Get("wrong number of arguments for instruction '%s', expected 2 arguments"), t.Value) } rs := t.Args[0] rt := t.Args[1] @@ -1050,7 +1050,7 @@ func assembleBlez(t assembler.ResolvedToken, addr int) (uint32, error) { func assembleBne(t assembler.ResolvedToken, addr int) (uint32, error) { if len(t.Args) != 3 { - return 0, fmt.Errorf("wrong number of arguments for instruction %s. Expected 2 arguments", t.Value) + return 0, fmt.Errorf(machine.InterCtx.Get("wrong number of arguments for instruction '%s', expected 2 arguments"), t.Value) } rs := t.Args[0] rt := t.Args[1] @@ -1067,7 +1067,7 @@ func assembleBne(t assembler.ResolvedToken, addr int) (uint32, error) { func assembleJ(t assembler.ResolvedToken) (uint32, error) { if len(t.Args) != 1 { - return 0, fmt.Errorf("wrong number of arguments for instruction %s. Expected 1 argument", t.Value) + return 0, fmt.Errorf(machine.InterCtx.Get("wrong number of arguments for instruction '%s', expected 1 argument)"), t.Value) } return uint32(2<<26) | uint32(t.Args[0]&0xfffffff), nil @@ -1075,7 +1075,7 @@ func assembleJ(t assembler.ResolvedToken) (uint32, error) { func assembleLb(t assembler.ResolvedToken) (uint32, error) { if len(t.Args) != 3 { - return 0, fmt.Errorf("wrong number of arguments for instruction %s. Expected 1 argument", t.Value) + return 0, fmt.Errorf(machine.InterCtx.Get("wrong number of arguments for instruction '%s', expected 1 argument)"), t.Value) } code := uint32(t.Args[2] & 0xffff) @@ -1087,7 +1087,7 @@ func assembleLb(t assembler.ResolvedToken) (uint32, error) { func assembleLbu(t assembler.ResolvedToken) (uint32, error) { if len(t.Args) != 3 { - return 0, fmt.Errorf("wrong number of arguments for instruction %s. Expected 1 argument", t.Value) + return 0, fmt.Errorf(machine.InterCtx.Get("wrong number of arguments for instruction '%s', expected 1 argument)"), t.Value) } code := uint32(t.Args[2] & 0xffff) @@ -1099,7 +1099,7 @@ func assembleLbu(t assembler.ResolvedToken) (uint32, error) { func assembleLh(t assembler.ResolvedToken) (uint32, error) { if len(t.Args) != 3 { - return 0, fmt.Errorf("wrong number of arguments for instruction %s. Expected 1 argument", t.Value) + return 0, fmt.Errorf(machine.InterCtx.Get("wrong number of arguments for instruction '%s', expected 1 argument)"), t.Value) } code := uint32(t.Args[2] & 0xffff) @@ -1111,7 +1111,7 @@ func assembleLh(t assembler.ResolvedToken) (uint32, error) { func assembleLhu(t assembler.ResolvedToken) (uint32, error) { if len(t.Args) != 3 { - return 0, fmt.Errorf("wrong number of arguments for instruction %s. Expected 1 argument", t.Value) + return 0, fmt.Errorf(machine.InterCtx.Get("wrong number of arguments for instruction '%s', expected 1 argument)"), t.Value) } code := uint32(t.Args[2] & 0xffff) @@ -1123,7 +1123,7 @@ func assembleLhu(t assembler.ResolvedToken) (uint32, error) { func assembleLw(t assembler.ResolvedToken) (uint32, error) { if len(t.Args) != 3 { - return 0, fmt.Errorf("wrong number of arguments for instruction %s. Expected 1 argument", t.Value) + return 0, fmt.Errorf(machine.InterCtx.Get("wrong number of arguments for instruction '%s', expected 1 argument)"), t.Value) } code := uint32(t.Args[2] & 0xffff) @@ -1135,7 +1135,7 @@ func assembleLw(t assembler.ResolvedToken) (uint32, error) { func assembleLwl(t assembler.ResolvedToken) (uint32, error) { if len(t.Args) != 3 { - return 0, fmt.Errorf("wrong number of arguments for instruction %s. Expected 1 argument", t.Value) + return 0, fmt.Errorf(machine.InterCtx.Get("wrong number of arguments for instruction '%s', expected 1 argument)"), t.Value) } code := uint32(t.Args[2] & 0xffff) @@ -1147,7 +1147,7 @@ func assembleLwl(t assembler.ResolvedToken) (uint32, error) { func assembleLwr(t assembler.ResolvedToken) (uint32, error) { if len(t.Args) != 3 { - return 0, fmt.Errorf("wrong number of arguments for instruction %s. Expected 1 argument", t.Value) + return 0, fmt.Errorf(machine.InterCtx.Get("wrong number of arguments for instruction '%s', expected 1 argument)"), t.Value) } code := uint32(t.Args[2] & 0xffff) @@ -1159,7 +1159,7 @@ func assembleLwr(t assembler.ResolvedToken) (uint32, error) { func assembleSb(t assembler.ResolvedToken) (uint32, error) { if len(t.Args) != 3 { - return 0, fmt.Errorf("wrong number of arguments for instruction %s. Expected 1 argument", t.Value) + return 0, fmt.Errorf(machine.InterCtx.Get("wrong number of arguments for instruction '%s', expected 1 argument)"), t.Value) } code := uint32(t.Args[2] & 0xffff) @@ -1171,7 +1171,7 @@ func assembleSb(t assembler.ResolvedToken) (uint32, error) { func assembleSh(t assembler.ResolvedToken) (uint32, error) { if len(t.Args) != 3 { - return 0, fmt.Errorf("wrong number of arguments for instruction %s. Expected 1 argument", t.Value) + return 0, fmt.Errorf(machine.InterCtx.Get("wrong number of arguments for instruction '%s', expected 1 argument)"), t.Value) } code := uint32(t.Args[2] & 0xffff) @@ -1183,7 +1183,7 @@ func assembleSh(t assembler.ResolvedToken) (uint32, error) { func assembleSw(t assembler.ResolvedToken) (uint32, error) { if len(t.Args) != 3 { - return 0, fmt.Errorf("wrong number of arguments for instruction %s. Expected 1 argument", t.Value) + return 0, fmt.Errorf(machine.InterCtx.Get("wrong number of arguments for instruction '%s', expected 1 argument)"), t.Value) } code := uint32(t.Args[2] & 0xffff) @@ -1257,7 +1257,7 @@ func assembleInstruction(code []uint8, addr int, t assembler.ResolvedToken) erro case "sw": bin, err = assembleSw(t) default: - return fmt.Errorf("unknown instruction: %v", t.Value) + return fmt.Errorf(machine.InterCtx.Get("unknown instruction: %v"), t.Value) } if err != nil { @@ -1327,7 +1327,7 @@ func parseRegisterArg(arg string) (uint64, error) { n, err := strconv.Atoi(arg[1:]) if err != nil { - return 0, fmt.Errorf("no such register: %v", arg) + return 0, fmt.Errorf(machine.InterCtx.Get("no such register: %v"), arg) } switch arg[0] { @@ -1344,12 +1344,12 @@ func parseRegisterArg(arg string) (uint64, error) { return uint64(n), nil } - return 0, fmt.Errorf("no such register: %v", arg) + return 0, fmt.Errorf(machine.InterCtx.Get("no such register: %v"), arg) } func translateArgs(arg string) (uint64, error) { if len(arg) < 1 { - return 0, errors.New("empty argument") + return 0, errors.New(machine.InterCtx.Get("empty argument")) } if (0x30 <= arg[0] && arg[0] <= 0x39) || arg[0] == '-' { @@ -1362,11 +1362,11 @@ func translateArgs(arg string) (uint64, error) { func (m *Mips) GetRegisterNumber(r string) (uint64, error) { if len(r) < 2 { - return 0, fmt.Errorf("no such register: %v", r) + return 0, fmt.Errorf(machine.InterCtx.Get("no such register: %v"), r) } reg, err := parseRegisterArg(r) if err != nil || reg >= 32 { - return 0, fmt.Errorf("no such register: %v", r) + return 0, fmt.Errorf(machine.InterCtx.Get("no such register: %v"), r) } return reg, nil diff --git a/riscv/riscv.go b/riscv/riscv.go index 6aaec5f..76351eb 100644 --- a/riscv/riscv.go +++ b/riscv/riscv.go @@ -436,7 +436,7 @@ func (m *RiscV) execute(i uint32) (*machine.Call, error) { return &call, nil default: - return nil, fmt.Errorf("unknown opcode: %b", opcode) + return nil, fmt.Errorf(machine.InterCtx.Get("unknown opcode: %b"), opcode) } return nil, nil @@ -450,7 +450,7 @@ func (m *RiscV) LoadProgram(program []uint8) error { func (m *RiscV) NextInstruction() (*machine.Call, error) { iarr, err := m.GetMemoryChunk(uint64(m.pc), 4) if err != nil { - return nil, fmt.Errorf("could not load 4 bytes from address at PC: %x", m.pc) + return nil, fmt.Errorf(machine.InterCtx.Get("could not load 4 bytes from address at PC: %x"), m.pc) } i := uint32(iarr[0]) | (uint32(iarr[1]) << 8) | (uint32(iarr[2]) << 16) | (uint32(iarr[3]) << 24) @@ -460,7 +460,7 @@ func (m *RiscV) NextInstruction() (*machine.Call, error) { func (m *RiscV) GetMemory(addr uint64) (uint8, error) { if addr > math.MaxUint32 { - return 0, fmt.Errorf("value %v bigger than maximum 32 bit address %v", addr, math.MaxUint32) + return 0, fmt.Errorf(machine.InterCtx.Get("value %v bigger than maximum 32 bit address %v"), addr, math.MaxUint32) } return m.mem[addr], nil @@ -468,7 +468,7 @@ func (m *RiscV) GetMemory(addr uint64) (uint8, error) { func (m *RiscV) SetMemory(addr uint64, content uint8) error { if addr > math.MaxUint32 { - return fmt.Errorf("value %v bigger than maximum 32 bit address %v", addr, math.MaxUint32) + return fmt.Errorf(machine.InterCtx.Get("value %v bigger than maximum 32 bit address %v"), addr, math.MaxUint32) } m.mem[addr] = content @@ -479,7 +479,7 @@ func (m *RiscV) SetMemory(addr uint64, content uint8) error { func (m *RiscV) GetMemoryChunk(addr uint64, size uint64) ([]uint8, error) { end := addr + (size - 1) if end > math.MaxUint32 { - return nil, fmt.Errorf("end address %v bigger than maximum 32 bit address %v", end, math.MaxUint32) + return nil, fmt.Errorf(machine.InterCtx.Get("end address %v bigger than maximum 32 bit address %v"), end, math.MaxUint32) } return m.mem[addr:(end + 1)], nil @@ -488,7 +488,7 @@ func (m *RiscV) GetMemoryChunk(addr uint64, size uint64) ([]uint8, error) { func (m *RiscV) SetMemoryChunk(addr uint64, content []uint8) error { end := addr + (uint64(len(content)) - 1) if end > math.MaxUint32 { - return fmt.Errorf("end address %v bigger than maximum 32 bit address %v", end, math.MaxUint32) + return fmt.Errorf(machine.InterCtx.Get("end address %v bigger than maximum 32 bit address %v"), end, math.MaxUint32) } for _, b := range content { @@ -501,7 +501,7 @@ func (m *RiscV) SetMemoryChunk(addr uint64, content []uint8) error { func (m *RiscV) GetRegister(reg uint64) (uint64, error) { if reg >= 32 { - return 0, fmt.Errorf("no such register: %d. RISC-V has only 32 registers", reg) + return 0, fmt.Errorf(machine.InterCtx.Get("no such register: %d. RISC-V has only 32 registers"), reg) } return uint64(m.registers[reg]), nil @@ -509,7 +509,7 @@ func (m *RiscV) GetRegister(reg uint64) (uint64, error) { func (m *RiscV) SetRegister(reg uint64, content uint64) error { if reg >= 32 { - return fmt.Errorf("no such register: %d. RISC-V has only 32 registers", reg) + return fmt.Errorf(machine.InterCtx.Get("no such register: %d. RISC-V has only 32 registers"), reg) } if reg != 0 { @@ -521,7 +521,7 @@ func (m *RiscV) SetRegister(reg uint64, content uint64) error { func assembleArithmetic(t assembler.ResolvedToken) (uint32, error) { if len(t.Args) != 3 { - return 0, fmt.Errorf("wrong number of arguments for instruction '%s', expected 3 arguments", t.Value) + return 0, fmt.Errorf(machine.InterCtx.Get("wrong number of arguments for instruction '%s', expected 3 arguments"), t.Value) } code := uint32(0b0110011) @@ -584,7 +584,7 @@ func assembleArithmetic(t assembler.ResolvedToken) (uint32, error) { func assembleArithmeticImm(t assembler.ResolvedToken) (uint32, error) { if len(t.Args) != 3 { - return 0, fmt.Errorf("wrong number of arguments for instruction '%s', expected 3 arguments", t.Value) + return 0, fmt.Errorf(machine.InterCtx.Get("wrong number of arguments for instruction '%s', expected 3 arguments"), t.Value) } code := uint32(0b0010011) @@ -620,7 +620,7 @@ func assembleArithmeticImm(t assembler.ResolvedToken) (uint32, error) { func assembleLoad(t assembler.ResolvedToken) (uint32, error) { if len(t.Args) != 3 { - return 0, fmt.Errorf("wrong number of arguments for instruction '%s', expected 3 arguments", t.Value) + return 0, fmt.Errorf(machine.InterCtx.Get("wrong number of arguments for instruction '%s', expected 3 arguments"), t.Value) } code := uint32(0b0000011) @@ -647,7 +647,7 @@ func assembleLoad(t assembler.ResolvedToken) (uint32, error) { func assembleStore(t assembler.ResolvedToken) (uint32, error) { if len(t.Args) != 3 { - return 0, fmt.Errorf("wrong number of arguments for instruction '%s', expected 3 arguments", t.Value) + return 0, fmt.Errorf(machine.InterCtx.Get("wrong number of arguments for instruction '%s', expected 3 arguments"), t.Value) } code := uint32(0b0100011) @@ -671,7 +671,7 @@ func assembleStore(t assembler.ResolvedToken) (uint32, error) { func assembleBranch(t assembler.ResolvedToken, addr int) (uint32, error) { if len(t.Args) != 3 { - return 0, fmt.Errorf("wrong number of arguments for instruction '%s', expected 3 arguments", t.Value) + return 0, fmt.Errorf(machine.InterCtx.Get("wrong number of arguments for instruction '%s', expected 3 arguments"), t.Value) } t.Args[2] = uint64(int64(signExtend64(uint32(t.Args[2]))) - int64(addr)) @@ -705,7 +705,7 @@ func assembleBranch(t assembler.ResolvedToken, addr int) (uint32, error) { func assembleJal(t assembler.ResolvedToken, addr int) (uint32, error) { if len(t.Args) != 2 { - return 0, fmt.Errorf("wrong number of arguments for instruction '%s', expected 2 arguments", t.Value) + return 0, fmt.Errorf(machine.InterCtx.Get("wrong number of arguments for instruction '%s', expected 2 arguments"), t.Value) } t.Args[1] = uint64(signExtend64(uint32(t.Args[1])) - uint64(addr)) @@ -722,7 +722,7 @@ func assembleJal(t assembler.ResolvedToken, addr int) (uint32, error) { func assembleJalr(t assembler.ResolvedToken) (uint32, error) { if len(t.Args) != 3 { - return 0, fmt.Errorf("wrong number of arguments for instruction '%s', expected 3 arguments", t.Value) + return 0, fmt.Errorf(machine.InterCtx.Get("wrong number of arguments for instruction '%s', expected 3 arguments"), t.Value) } code := uint32(0b1100111) @@ -735,7 +735,7 @@ func assembleJalr(t assembler.ResolvedToken) (uint32, error) { func assembleU(t assembler.ResolvedToken) (uint32, error) { if len(t.Args) != 2 { - return 0, fmt.Errorf("wrong number of arguments for instruction '%s', expected 2 arguments", t.Value) + return 0, fmt.Errorf(machine.InterCtx.Get("wrong number of arguments for instruction '%s', expected 2 arguments"), t.Value) } var code uint32 @@ -752,7 +752,7 @@ func assembleU(t assembler.ResolvedToken) (uint32, error) { func assembleCall(t assembler.ResolvedToken) (uint32, error) { if len(t.Args) != 0 { - return 0, fmt.Errorf("wrong number of arguments for instruction '%s', expected no argument", t.Value) + return 0, fmt.Errorf(machine.InterCtx.Get("wrong number of arguments for instruction '%s', expected no argument"), t.Value) } code := uint32(0b1110011) @@ -787,7 +787,7 @@ func assembleInstruction(code []uint8, addr int, t assembler.ResolvedToken) erro case "ecall", "ebreak": bin, err = assembleCall(t) default: - return fmt.Errorf("unknown instruction: %v", t.Value) + return fmt.Errorf(machine.InterCtx.Get("unknown instruction: %v"), t.Value) } if err != nil { @@ -849,7 +849,7 @@ func parseRegisterArg(arg string) (uint64, error) { n, err := strconv.Atoi(arg[1:]) if err != nil { - return 0, fmt.Errorf("no such register: %v", arg) + return 0, fmt.Errorf(machine.InterCtx.Get("no such register: %v"), arg) } switch arg[0] { @@ -872,12 +872,12 @@ func parseRegisterArg(arg string) (uint64, error) { return uint64(n), nil } - return 0, fmt.Errorf("no such register: %v", arg) + return 0, fmt.Errorf(machine.InterCtx.Get("no such register: %v"), arg) } func translateArgs(arg string) (uint64, error) { if len(arg) < 1 { - return 0, errors.New("empty argument") + return 0, errors.New(machine.InterCtx.Get("empty argument")) } if (0x30 <= arg[0] && arg[0] <= 0x39) || arg[0] == '-' { @@ -890,11 +890,11 @@ func translateArgs(arg string) (uint64, error) { func (m *RiscV) GetRegisterNumber(r string) (uint64, error) { if len(r) < 2 { - return 0, fmt.Errorf("no such register: %v", r) + return 0, fmt.Errorf(machine.InterCtx.Get("no such register: %v"), r) } reg, err := parseRegisterArg(r) if err != nil || reg >= 32 { - return 0, fmt.Errorf("no such register: %v", r) + return 0, fmt.Errorf(machine.InterCtx.Get("no such register: %v"), r) } return reg, nil diff --git a/sagui/sagui.go b/sagui/sagui.go index b149152..733fe97 100644 --- a/sagui/sagui.go +++ b/sagui/sagui.go @@ -31,7 +31,7 @@ func signExtend(n uint8) uint8 { func (m *Sagui) SetRegister(reg uint64, value uint64) error { if reg > 3 { - return fmt.Errorf("no such register: %v", reg) + return fmt.Errorf(machine.InterCtx.Get("no such register: %v"), reg) } m.registers[reg] = uint8(value) return nil @@ -39,7 +39,7 @@ func (m *Sagui) SetRegister(reg uint64, value uint64) error { func (m *Sagui) GetRegister(reg uint64) (uint64, error) { if reg > 3 { - return 0, fmt.Errorf("no such register: %v", reg) + return 0, fmt.Errorf(machine.InterCtx.Get("no such register: %v"), reg) } return uint64(m.registers[reg]), nil @@ -47,14 +47,14 @@ func (m *Sagui) GetRegister(reg uint64) (uint64, error) { func (m *Sagui) GetMemory(addr uint64) (uint8, error) { if addr > math.MaxUint8 { - return 0, fmt.Errorf("value %v is bigger than maximum 8 bit address %v", addr, math.MaxUint8) + return 0, fmt.Errorf(machine.InterCtx.Get("value %v is bigger than maximum 8 bit address %v"), addr, math.MaxUint8) } return m.mem[addr], nil } func (m *Sagui) SetMemory(addr uint64, value uint8) error { if addr > math.MaxUint8 { - return fmt.Errorf("value %v is bigger than maximum 8 bit address %v", addr, math.MaxUint8) + return fmt.Errorf(machine.InterCtx.Get("value %v is bigger than maximum 8 bit address %v"), addr, math.MaxUint8) } m.mem[addr] = value return nil @@ -63,7 +63,7 @@ func (m *Sagui) SetMemory(addr uint64, value uint8) error { func (m *Sagui) GetMemoryChunk(addr uint64, size uint64) ([]uint8, error) { end := addr + (size - 1) if end > math.MaxUint8 { - return nil, fmt.Errorf("end address %v bigger than maximum 8 bit address %v", end, math.MaxUint8) + return nil, fmt.Errorf(machine.InterCtx.Get("end address %v bigger than maximum 8 bit address %v"), end, math.MaxUint8) } return m.mem[addr:(end + 1)], nil } @@ -71,7 +71,7 @@ func (m *Sagui) GetMemoryChunk(addr uint64, size uint64) ([]uint8, error) { func (m *Sagui) SetMemoryChunk(addr uint64, content []uint8) error { end := addr + (uint64(len(content)) - 1) if end > math.MaxUint8 { - return fmt.Errorf("end address %v bigger than maximum 8 bit address %v", end, math.MaxUint8) + return fmt.Errorf(machine.InterCtx.Get("end address %v bigger than maximum 8 bit address %v"), end, math.MaxUint8) } for _, b := range content { @@ -93,7 +93,7 @@ func (m *Sagui) GetCurrentInstructionAddress() uint64 { func (m *Sagui) NextInstruction() (*machine.Call, error) { instr, err := m.GetMemory(m.GetCurrentInstructionAddress()) if err != nil { - return nil, fmt.Errorf("failed to fetch instruction from memory: %v", err) + return nil, fmt.Errorf(machine.InterCtx.Get("failed to fetch instruction from memory: %v"), err) } if instr == 0x60 { @@ -187,7 +187,7 @@ func getRegisterNumber(r string) (uint64, error) { case "r3", "3": return 3, nil default: - return 0, fmt.Errorf("no such register: %v", r) + return 0, fmt.Errorf(machine.InterCtx.Get("no such register: %v"), r) } } @@ -197,13 +197,13 @@ func (m *Sagui) GetRegisterNumber(r string) (uint64, error) { func translateArgs(arg string) (uint64, error) { if len(arg) < 1 { - return 0, errors.New("empty argument") + return 0, errors.New(machine.InterCtx.Get("empty argument")) } reg, err := getRegisterNumber(arg) if err != nil { n, err := strconv.ParseInt(arg, 0, 64) if n > 0xf { - return 0, fmt.Errorf("immediate bigger than immediate size: %v", arg) + return 0, fmt.Errorf(machine.InterCtx.Get("immediate bigger than immediate size: %v"), arg) } return uint64(n), err } @@ -212,7 +212,7 @@ func translateArgs(arg string) (uint64, error) { func assembleR(t assembler.ResolvedToken) (uint8, error) { if len(t.Args) != 2 { - return 0, fmt.Errorf("wrong number of arguments for instruction %v (needs 2)", t.Value) + return 0, fmt.Errorf(machine.InterCtx.Get("wrong number of arguments for instruction '%s', expected 2 arguments"), t.Value) } ra := uint8(t.Args[0]) & 0x3 @@ -250,7 +250,7 @@ func assembleR(t assembler.ResolvedToken) (uint8, error) { func assembleI(t assembler.ResolvedToken) (uint8, error) { if len(t.Args) != 1 { - return 0, fmt.Errorf("wrong number of arguments for instruction %v (needs 1)", t.Value) + return 0, fmt.Errorf(machine.InterCtx.Get("wrong number of arguments for instruction '%s', expected 1 argument"), t.Value) } imm := uint8(t.Args[0]) & 0xf @@ -273,7 +273,7 @@ func assembleI(t assembler.ResolvedToken) (uint8, error) { func assembleJr(t assembler.ResolvedToken) (uint8, error) { if len(t.Args) != 1 { - return 0, fmt.Errorf("wrong number of arguments for instruction jr (needs 1)") + return 0, fmt.Errorf(machine.InterCtx.Get("wrong number of arguments for instruction '%s', expected 1 argument"), "jr") } return 0x20 | uint8(t.Args[0] & 0x3), nil @@ -293,7 +293,7 @@ func assembleInstruction(code []uint8, addr int, t assembler.ResolvedToken) erro case "ebreak": bin = 0x60 default: - return fmt.Errorf("unknown instruction: %v", t.Value) + return fmt.Errorf(machine.InterCtx.Get("unknown instruction: %v"), t.Value) } if err != nil {