Skip to content

Latest commit

 

History

History
67 lines (50 loc) · 2.13 KB

CONTRIBUINDO.md

File metadata and controls

67 lines (50 loc) · 2.13 KB

Read this document in English

Achei um bug!

Por favor, crie uma issue descrevendo-o caso uma ainda não exista.

Requisição de features

Por favor, crie uma issue descrevendo a feature desejada caso alguma ainda não exista. Uma nova feature pode ser qualquer coisa desde uma nova syscall, um novo comando para o debugger, ou um novo backend. Por favor note que o propósito desse projeto é ser simples, então coisas como um backend de x86_64 nunca vão ocorrer.

Eu gostaria de contribuir com código

Bem, muito obrigado! A base de código é bem simples e navegável. Divirta-se, e se tiver alguma dúvida, crie uma issue.

Para contribuir com código, abra uma pull request!

Adicionando backends

Crie um novo pacote Go no diretório do projeto. Por exemplo, vamos adicionar um backend para a arquitetura fictícia R2D2:

$ cd egg
$ mkdir r2d2
$ cd r2d2
$ touch r2d2.go
$ touch r2d2_test.go

Implementaremos tudo no arquivo r2d2.go:

// Package egg/r2d2 implements a R2D2 machine for the EGG emulator.
package r2d2

import (
	"github.com/gboncoffee/egg/assembler"
	"github.com/gboncoffee/egg/machine"
)

// The R2D2 struct implements the machine interface needed by the EGG emulator.
type R2D2 struct {
	registers [32]uint32
	pc        uint32
	mem       [math.MaxUint32 + 1]uint8
}

As funções necessárias estão na interface Machine importada pelo pacote egg/machine. Elas devem ser implementadas como métodos em ponteiros e não na struct em si.

A maioria das funções é bem simples. A documentação pode ser encontrada no site pkg.go.dev.

O pacote egg/assembler também é importado porque possui definições necessárias para o suporte ao debugger. A interface requer a implementação da função Assemble(string) ([]uint8, []assembler.DebuggerToken, error). Se o segundo valor de retorno for nil, o suporte ao debugger é desativado. Além disso, esse pacote facilita a criação de assemblers simples.