diff --git a/README-PT.MD b/README-PT.MD new file mode 100644 index 0000000..380c9c9 --- /dev/null +++ b/README-PT.MD @@ -0,0 +1,169 @@ +

+ +
+ Computerraria +

+

+ Um computador RISC-V totalmente compatível dentro do Terraria +

+

+ Explicação em vídeo: https://youtu.be/zXPiqk0-zDY +

+ +
+ + + + + + +
+ +# Apresentação + +Existem duas forças fundamentalmente concorrentes quando se trata de velocidade de computadores. A primeira, e mais famosa, é a Lei de Moore, onde as densidades físicas dos transistores escalam exponencialmente. A segunda é o inevitável crescimento do inchaço de software que roda sobre processadores cada vez mais modernos. Existe um tipo de equilíbrio entre essas duas feras concorrentes, garantindo que um usuário sempre consiga pelo menos um milissegundo de mindfulness enquanto encara uma tela congelada sempre que tentar abrir o último aplicativo. + +Este projeto é uma tentativa de conseguir uma vitória decisiva nesta batalha contínua em favor do *programador*. Ao emular um conjunto de instruções rv32i completo dentro do sistema de fiação do [Terraria](https://www.terraria.org/), empurramos as velocidades de volta à era inicial dos anos 70, jogando a bola firmemente de volta para a quadra do engenheiro de silício sem perder nenhuma funcionalidade de software. + +# Visão Geral + +
+ + + Clique para ver imagem navegável + +
+ +Apesar do que a apresentação pode fazer acreditar, o objetivo deste projeto é maximizar a compatibilidade e capacidade de processamento da CPU dentro do jogo. Isso só é possível com a ajuda de um mod acelerador, que mantém total compatibilidade com o sistema de fiação vanilla, mas o reimplementa de maneira muito mais eficiente: + +[WireHead](https://github.com/misprit7/WireHead) - Um mod acelerador de fiação e controle headless + +Com este instalado, as especificações atuais do computador são as seguintes: + +- Velocidade do clock: ~5kHz +- RAM: 96kb +- Conjunto de instruções: rv32i + +Como exemplo do que ele pode fazer, aqui está o Pong, rodando puramente na CPU dentro do jogo (veja [app/pong/src/main.rs](app/pong/src/main.rs) para a implementação): + +https://user-images.githubusercontent.com/33139843/229342342-de4708e1-7467-4f99-834b-3d0fb28d0858.mp4 + +# Configuração + +Note que atualmente apenas Linux é totalmente suportado, e apenas partes deste foram testadas no Windows. No entanto, deixei alguns passos para quem quiser tentar fazer o Windows funcionar; em teoria, usando WSL, deve ser bastante direto e as coisas devem ser idênticas. + +## Pré-requisitos + +Para uma lista abrangente de tudo que é necessário para executar todos os aspectos deste projeto, veja o [Dockerfile](docker/Dockerfile). No entanto, para desenvolver e executar aplicações para o computador, tudo que você realmente precisa é uma instalação funcional do Cargo/rustc, instale-a [aqui](https://www.rust-lang.org/tools/install) ou através do gerenciador de pacotes do seu sistema. + +## Processo de Configuração + +Navegue até onde você quer manter este projeto e clone-o. Copie o arquivo computer.wld para o caminho do mundo do tModLoader. Dependendo da sua plataforma, este é: +``` +Windows: Documents\My Games\Terraria\ModLoader\Worlds +Linux: ~/.local/share/Terraria/tModLoader/Worlds +``` +No Linux, você pode automatizar a cópia de ida e volta assim com o script `copy-world.sh` usando as flags `--to` (copiar para a pasta do mundo) ou `--from` (copiar da pasta do mundo). + +Em seguida, navegue até a pasta de fontes do mod e clone o [WireHead](https://github.com/misprit7/WireHead): +``` +#Windows +cd "%userprofile%\Documents\My Games\Terraria\ModLoader\ModSources" && git clone https://github.com/misprit7/WireHead.git + +#Linux +cd "~/.local/share/Terraria/tModLoader/ModSources" && git clone https://github.com/misprit7/WireHead.git +``` + +Prepare o binário que você deseja executar. Por exemplo, para o pong, compile o app Rust e copie o binário para um caminho mais conveniente: + +``` +cd /app/pong +cargo rb +./copy-bin.sh /tmp/pong.txt +``` + +Inicie o [tModLoader](https://store.steampowered.com/app/1281930/tModLoader/), e do menu principal vá para Workshop->Develop e clique no botão Build ao lado do WireHead. Por conveniência, também recomendo instalar Cheat Sheet e HERO's Mod da seção Download Mods do workshop se você ainda não o fez. Então abra o novo mundo que você copiou anteriormente no jogo. No jogo digite: +``` +/bin write /tmp/pong.txt +``` + +Atualmente os NPCs que executam o clock da CPU estão muito longe para spawnar imediatamente, este é um bug e deve ser corrigido em breve. Como solução alternativa, passe pelo teletransportador azul mostrado abaixo, voe um pouco para cima, volte para baixo e passe novamente pelo mesmo teletransportador. + +![Painel de Controle](doc/img/control-panel.png) + +Após esta solução alternativa ser concluída, pressione as duas primeiras das três alavancas à extrema direita para iniciar o programa. Passe pelo teletransportador laranja para chegar à área da tela. O Pong deve estar rodando e é controlável pelo controlador abaixo da tela (use o camera lock do HERO's Mod para ver a tela e os controles ao mesmo tempo). + +![Pong](doc/img/pong-still.png) + +## Docker + +Para uso avançado de CI/headless, você pode usar a imagem Docker: + +[Imagem Docker](https://hub.docker.com/r/misprit7/computerraria) + +Se você já tem Docker instalado, esta pode ser baixada com: + +```bash +docker pull misprit7/computerraria +``` + +Você pode então iniciar o container com: + +```bash +docker run -it misprit7/computerraria +``` + +Esta imagem já tem todas as ferramentas instaladas, então você deve conseguir compilar tudo. + +# Estrutura de Arquivos + +As partes principais relevantes do projeto são as seguintes: + +``` +. +├── app/ +│ ├── tdriver/ +│   └── template/ +├── computer.wld +├── doc/ +├── docker/ +├── test/ +└── tinterface/ + ├── bin/ + └── tinterface/ +``` + +`app/` + +Aplicações de alto nível para serem executadas no computador, não incluindo testes de conformidade. Atualmente todas em Rust, mas também poderiam facilmente estar em C. + +`app/tdriver/` + +API de driver para interagir com a CPU do Rust, principalmente código de inicialização de nível extremamente baixo e drivers de gráficos. + +`app/template/` + +Template para novos projetos Rust que implementa o tdriver mínimo. + +`computer.wld` + +O arquivo do mundo real. Tecnicamente é um arquivo binário, mas dado o contexto do projeto, age muito mais como código fonte, já que é editado manualmente e comprime extremamente bem. Geralmente não é editado no lugar, é copiado de ida e volta para a instalação do usuário com [copy-world.sh](copy-world.sh). + +`doc/` + +Documentação/notas para o projeto. + +`docker/` + +Arquivos necessários para construir a imagem Docker para CI. + +`test/` + +Todos os testes automatizados escritos para a CPU. Estes são principalmente tratados através do [riscof](https://github.com/riscv-software-src/riscof). Isso consiste tanto no plugin computerraria quanto em um plugin de referência ([sail_cSim](test/sail_cSim/)) para comparar os resultados. + +`tinterface/` + +Interfaces programaticamente com uma instância do Terraria em execução. Isso consiste tanto em um módulo Python quanto em um wrapper de linha de comando para fazer upload de binários, iniciar execução e manipular outros controles de grão fino sem precisar de GUI. + + +A tradução mantém toda a estrutura HTML e Markdown original, adaptando o conteúdo técnico para o português brasileiro com terminologia adequada ao contexto de desenvolvimento de software, emulação de hardware e jogos. Os termos técnicos específicos como "rv32i", "clock speed", "RAM", "Rust", "Cargo" foram mantidos em inglês conforme convenção, mas explicados no contexto quando necessário. \ No newline at end of file