Data | Aviso |
---|---|
04/10 | Quadro de Notas. |
27/09 | Instruções sobre o simulador. |
06/09 | Relatório das entregas dos grupos com as CPUs. |
23/08 | Relatório das entregas dos grupos. |
23/08 | Relação consolidada dos Grupos. |
02/08 | Formação de grupos e link do repositório git, responda no Google Classroom (enviei convites para todos os matriculados até hoje). |
10/07 | Não haverá aula na semana da SECOMP (05-10/08). |
10/07 | Não perca das datas importantes do Calendário de graduação. |
Introdução ao desenvolvimento de emuladores/simuladores de hardware. Especificamente neste semestre, a turma desenvolverá um emulador baseado no NES.
O objetivo da disciplina é desenvolver um projeto grande o suficiente que os alunos precisem trabalhar em grupo, dividir tarefas, organizar entregas e planejar o desenvolvimento. É importante entender o contexto e como os componentes são interligados para desenvolver um sistema grande, em especial quando se trata de diversos componentes de hardware que precisam ser simulados.
Documentação disponível online conforme links abaixo:
A disciplina contará com entregas/apresentações dos trabalhos de grupos. O tamanho dos grupos será de até 4 alunos, definidos na primeira aula do semestre. Os grupos devem fazer uma apresentação quinzenal do andamento do projeto, onde a última avaliação do mês resultará em nota para compor a avaliação do grupo. A contribuição de cada aluno será avaliada pela produção de código no repositório do grupo. Não há exame na disciplina. A média dos alunos será a média das notas de cada avaliação. As datas de todas as avaliações estão no calendário ao final desta página.
Esta é uma disciplina de 12 créditos com 4 créditos presenciais às sextas das 19:00-23:00. A presença é obrigatória nas aulas, onde serão realizadas as apresentações/entregas das atividades. As demais 8 horas devem ser realizadas em comum acordo com os membros dos grupos.
Para implementar um jogo e entender a infraestrutura, leia os tutoriais de programação assembly e criação de jogos NES.
O jogo deve ser apresentado no dia 30/08, durante a aula. Prefira o emulador Mednafen. Seu jogo deve possuir sprites, cores, beep (som) e 1 controle. Você deve fazer sua entrega através do repositório git do seu grupo e colocar um script run.sh ou run.bat com o comando que executa o emulador e seu jogo.
O seu processador deve ser emulado em uma linguagem de programação de sua preferência. Um emulador é um software capaz de ler o programa binário de algum processador e executar o comportamento do processador destino. Desta forma, você precisa emular o 6502, sendo capaz de completar o comportamento de cada uma de suas instruções, seu formato de arquivo (do NES) e também o modelo de memória (quais endereços ficam quais periféricos). Em linhas gerais, o código do emulador é similar ao código abaixo:
void emula() { memoria = LeArquivoCartucho(); pc = PosicaoInicialMemoria; while (1) { instrucao = LeMemoria(pc); decodificada = DecodificaInstrucao(instrucao); switch(decodificada){ case ...: break; default: printf("instrução inválida"); } ImprimeLinhaDebug(); } }
Seu código deve imprimir uma linha de depuração conforme o exemplo de código do repositório, para cada instrução executada. Estas linhas de depuração serão utilizadas para validar seu emulador. Você também deve gerar alguns arquivos de memória no formato do cartucho para testar seu emulador.
Implemente a PPU e execute seu jogo do Mês 1. A meta é avançar no desenvolvimento do seu emulador e garantir que todas as funcionalidades relacionadas à tela já estejam prontas. Você pode implementar outras funcionalidades para garantir o funcionamento do jogo.
Entrega final. Seu emulador deve ser capaz de rodar o seu jogo completamente e também um outro jogo existente (não vale jogo de colegas). Jogos recomendados para demonstrar: DonkeyKong e Super Mario
Aula | Data | Atividade |
---|---|---|
1 | 02/ago | Primeiro dia de aula. Apresentação da disciplina e formação dos grupos. (Slides) |
- | 09/ago | SECOMP - não haverá atividades |
2 | 16/ago | Entrega 1 - Acompanhamento |
3 | 23/ago | |
4 | 30/ago | Entrega 2 - Avaliação |
5 | 06/set | |
6 | 13/set | Entrega 3 - Acompanhamento |
7 | 20/set | |
8 | 27/set | Entrega 4 - Avaliação |
9 | 04/out | |
10 | 11/out | Entrega 5 - Acompanhamento |
11 | 18/out | |
12 | 25/out | |
13 | 01/nov | Entrega 6 - Avaliação |
14 | 08/nov | Entrega 7 - Acompanhamento |
15/nov | Não haverá atividades | |
15 | 22/nov | Entrega 8 - Avaliação |
27/nov | (quarta-feira) Apresentação pública dos projetos do semestre | |
29/nov | Não haverá atividades |