Arquitectura de computadores 2008/2009 Aeroespacial / IST ARQUITECTURA DE COMPUTADORES 4º Trabalho de Laboratório Programação Assembly Objectivo: Pretende-se que os alunos aumentem a sua compreensão e domínio da linguagem assembly que está directamente ligada a linguagem máquina que é a linguagem natural dos processadores. O desenvolvimento de um pequeno programa permite que os alunos ganhem algumas competências na utilização desta linguagem, quer para utilização futura em aplicações específicas, quer para servir como informação de carácter geral que permita melhorar a sua forma de utilização de um computador tanto a nível de utilização de linguagens de mais alto nível como na sua utilização como parte de um sistema mais complexo. 1. INTRODUÇÃO O trabalho consiste no desenvolvimento de uma pequena aplicação no processador P3. A aplicação deve ser desenvolvida em assembly e executada no simulador disponibilizado no site. A aplicação consiste num pequeno jogo de artilharia de faz uso intensivo dos periféricos do P3. 2. O JOGO DE ARTILHARIA Este jogo é um jogo clássico de artilharia balística, provavelmente uma das primeiras aplicações dos computadores. O jogo é jogado por dois jogadores que controlam dois canhões de artilharia, que disparam balas de canhão de forma a tentar atingir o outro jogador. Cada jogador controla o ângulo e a velocidade do disparo. As posições dos canhões são sorteadas aleatoriamente em cada novo round, sendo um round constituído por dois disparos, um para cada jogador. O canhão do jogador um deve ficar à esquerda com centro numa coluna entre 10 e 30 e o canhão do jogador dois deve ficar à direita com centro numa coluna entre 50 e 70. Cada jogo consiste em 4 rounds, devendo a pontuação de cada jogador estar representada na primeira linha da janela de texto em cada instante, na forma: Jogador 1: X Pontos Jogador 2: X Pontos A posição dos dois canhões é actualizada em cada round. Em cada jogada o ângulo e a velocidade de disparo devem ser controladas utilizando os interruptores da placa. O primeiro interruptor aumenta o ângulo de disparo (sentido contrário aos ponteiros do relógio) e o segundo interruptor diminui. O valor do ângulo deve aumentar ou diminuir em intervalos de 0,2 segundos e em passos de 10º. Este ângulo deve ser representado em graus no ecrã LCD na forma: Angulo: XX O terceiro e o quarto interruptor aumentam e diminuem a velocidade de disparo, devendo a velocidade corrente ser representada nos leds. Todos os leds preenchidos corresponde a uma velocidade de 16 caracteres por segundo, enquanto um led corresponde a um carácter por segundo. O valor da velocidade deve aumentar ou diminuir também em intervalos de 0,2 segundos. Para disparar o utilizador deve pressionar o botão I0. Cada canhão deve ser representado pela seguinte sequência de caracteres: ccc ccccc ccccccc e cada disparo deve ser originado do centro e topo do canhão. Arquitectura de computadores 2008/2009 Aeroespacial / IST Detecta-se se um canhão foi atingido de uma forma simplificada, nomeadamente verificasse a posição da bala quando esta atinge a linha de cima do canhão de testa-se se esta se encontra a menos de 4 caracteres do centro. A simulação da trajectória da bala deve terminar quando esta atingir o canhão ou atingir o fim da janela de texto. Deve-se assumir que esta mantém o tamanho de 24 linhas 80 colunas. A posição e velocidade da bala devem ser representadas por variáveis de 16 bits representadas em vírgula fixa, em que os oito bits mais significativos indicam a parte inteira do número e os bits menos significativos a parte fraccionária. x = b16 b15 b14 b13 b12 b11 b10 b9 b8 . b7 b6 b5 b4 b3 b2 b1 b0 A posição da bala deve ser dada pelas componentes x_bala e y_bala e a velocidade por vx_bala e vy_bala. A posição da bala deve ser actualizada em intervalos de 200 controlados pelo timer, segundo as equações: x_bala = x_bala + vx_bala / 4 y_bala = y_bala + vy_bala / 4 vx_bala = vx_bala y_bala = vy_bala + 1/4 (0040h). Notar que o valor inicial da velocidade é negativo. Divide-se por quatro em vez de multiplicar por 0.2 (200ms) para permitir fazer a operação usando um SHRA, já que a exactidão da simulação não é muito importante para esta aplicação. Estas equações derivam directamente das equações de movimento do projéctil: ∆ ∆ ∆ tal como definido pelo timer. O valor da aceleração considerado, , é de 1⁄4 O intervalo de tempo ∆ é de 200 5/4 caracteres por segundo2. O alcance de um projéctil com a mesma posição inicial e final é dado por: 5 sin 2 Para uma velocidade de inicial de 7 caracteres por segundo e um ângulo de 45º resulta um alcance 39 caracteres, metade de um ecrã, o que será próximo do desejado em muitos casos. São livres para fazer os ajustes que desejarem à velocidade inicial e à aceleração gravítica. O ângulo do canhão só pode assumir 17 valores discretos de 10 a 170 graus com saltos de 10º resultando que o seno e o co-seno dos ângulos correspondentes podem ser guardados numa tabela de valores em vírgula fixa, nomeadamente na tabela, SinCos disponibilizada com o esqueleto do projecto. Os valores iniciais de vx_bala e vy_bala podem ser calculados multiplicando o valor lido nesta tabela pelo valor escolhido para a velocidade. Para poder ter uma aplicação a funcionar antes de implementar a escolha do ângulo, pode assumir que este é de 45º ou 50º dado que tal permite manter quase todas as funcionalidades do jogo. No fim do jogo deve ser apresentada no ecrã uma mensagem indicando o vencedor. Dá-se início a um novo jogo pressionando o botão I0. 3. PREPARAÇÃO E PLANEAMENTO DO PROJECTO Comece por estudar a arquitectura (a nível do programador) e o conjunto de instruções do P3. Instale o assemblador e o simulador do P3, e familiarize-se com o respectivo funcionamento e potencialidades (carregamento de programas, simulação, visualização do conteúdo dos registos, debug, periféricos disponíveis, funcionamento das interrupções, etc.). Utilize os conhecimentos adquiridos na cadeira de programação quando programar o seu código, nomeadamente no que diz respeito à estruturação e organização de programas em subrotinas, e ainda no que diz respeito a comentários e documentação dessas subrotinas. O seu trabalho também pode ser facilitado se usar um editor de texto que faça highlight do código. Existem vários editores de texto open source, aqui fica a nossa sugestão, que não sendo perfeita, já poupa trabalho: ConTEXT, disponível em http://www.context.cx/. Utilize o esqueleto do projecto colocado na página da cadeira, e aproveite as rotinas lá apresentadas. Arquitectura de computadores 2008/2009 Aeroespacial / IST 4. FASEAMENTO DO PROJECTO O projecto deverá ser desenvolvido essencialmente em casa. A primeira aula de laboratório destina-se à apresentação e discussão de dúvidas e que possam surgir. A segunda aula de laboratório destinasse apenas a apresentação e discussão do trabalho. 5. AVALIAÇÃO DO PROJECTO O projecto será avaliado de acordo com os seguintes tópicos: Cotação Funcionamento Apresentação do canhão: 1 val Posicionamento aleatório do canhão: 1 val Controlo do ângulo de disparo do canhão: 1 val Apresentação no LCD do ângulo de disparo: 1 val Controlo da velocidade de disparo do canhão: 1 val Apresentação nos leds da velocidade de disparo: 1 val Controlo do disparo com I0: 1 val Representação do movimento da bala: 1 val Temporização do movimento da bala: 1 val Detecção de colisão: 1 val Apresentação da pontuação no ecrã: 1 val Detecção de fim de fogo e indicação do vencedor: 1 val Reinício de jogo pressionando I0: 1 val Comentários: 2 val Estrutura do código: 2 val Escolha de nomes: 1 val Eficiência do código: 2 val Código 6. ENTREGA DO TRABALHO O projecto deve ser entregue na segunda semana do laboratório, devendo ser passado para uma pen disponibilizada pelo docente. Apenas deverá ser fornecido um ficheiro com o código em assembly pronto a compilar. O nome do ficheiro deve ter a forma: AC2008_n1_n2.as, em que n1 e n2 são os números dos elementos do grupo. O Ficheiro deve ter no seu início comentários com o nome e o número de todos os elementos do grupo. 7. BIBLIOGRAFIA [1] M. Morris Mano, Charles R. Kime, “Logic and Computer Design Fundamentals”, Prentice-Hall International, Inc. [2] G. Arroz, J.C. Monteiro, A. Oliveira, “Manual do Simulador do P3”, IST, 2005