Mudanças entre as edições de "AnotherWorld JAMMA"

De Garoa Hacker Clube
Ir para navegação Ir para pesquisar
Linha 16: Linha 16:
   
 
As duas instruções especiais (que são relativas a renderização de video) podem ser decodificadas com algumas poucas portas NAND com dados vindo dos bits 6 e 7 do registrador de instrução.
 
As duas instruções especiais (que são relativas a renderização de video) podem ser decodificadas com algumas poucas portas NAND com dados vindo dos bits 6 e 7 do registrador de instrução.
  +
  +
==== Instruction Set - Another World VM ====
  +
  +
Segue abaixo uma listagem de todas as instruções e seus respectivos opcodes
  +
  +
{| class="wikitable"
  +
|+ Another World instruction set
  +
|-
  +
| 0x00
  +
| movConst
  +
|
  +
|-
  +
| 0x01
  +
| mov
  +
|
  +
|-
  +
| 0x02
  +
| add
  +
|
  +
|-
  +
| 0x03
  +
| addConst
  +
|
  +
|-
  +
| 0x04
  +
| call
  +
|
  +
|-
  +
| 0x05
  +
| ret
  +
|
  +
|-
  +
| 0x06
  +
| Break / "pauseThread"
  +
| Temporarily stops the executing channel and goes to the next.
  +
|-
  +
| 0x07
  +
| jmp
  +
|
  +
|-
  +
| 0x08
  +
| Setvec "channel number", address
  +
| Initialises a channel (thread) with a code address to execute
  +
|-
  +
| 0x09
  +
| djnz
  +
| '''D'''ecrement variable value and '''J'''ump if '''N'''ot '''Z'''ero
  +
|-
  +
| 0x0A
  +
| Conditional Jump instructions
  +
|
  +
|-
  +
| 0x0B
  +
| setPalette
  +
|
  +
|-
  +
| 0x0C
  +
| freezeChannels" / "unfreezeChannels" / "deleteChannels
  +
| Deletes, freezes or unfreezes a series of channels.
  +
|-
  +
| 0x0D
  +
| selectVideoPage
  +
|-
  +
| 0x0E
  +
| fillVideoPage
  +
|-
  +
| 0x0F
  +
| copyVideoPage
  +
|-
  +
| 0x10
  +
| blitFramebuffer
  +
|-
  +
| 0x11
  +
| killChannel / "killThread"
  +
|-
  +
| 0x12
  +
| Text "text number", x, y, color
  +
| Displays in the work screen the specified text for the coordinates x,y.
  +
|-
  +
| 0x13
  +
| sub
  +
| Subtract
  +
|-
  +
| 0x14
  +
| and
  +
| Boolean AND
  +
|-
  +
| 0x15
  +
| or
  +
| Boolean OR
  +
|-
  +
| 0x16
  +
| shl
  +
| Shift Left
  +
|-
  +
| 0x17
  +
| shr
  +
| Shift Right
  +
|-
  +
| 0x18
  +
| play / "playSound"
  +
| parameters: resourceId, freq, vol, channel
  +
|-
  +
| 0x19
  +
| load / "updateMemList"
  +
| bank-switching de recursos (paletas, bytecode, polígonos, etc)
  +
|-
  +
| 0x1A
  +
| song / "playMusic"
  +
| parameters: resourceID, delay, pos
  +
|-
  +
| 0x40/0x80
  +
| video
  +
| renderização de polígonos
  +
|-
  +
|}
   
 
=== Unidade de Controle - Microcódigo ===
 
=== Unidade de Controle - Microcódigo ===

Edição das 13h29min de 3 de agosto de 2016

Relógio Central

Função: Gerar o sinal de clock para a CPU e para os circuitos de geração de vídeo
implementação: (pendente)

CPU

Unidade de Controle - Decodificador de Instrução

Função: Detectar qual instrução o processador precisa executar com base no valor do código de instrução atual
implementação: (pendente)

Sugestão:

Como o instruction set da VM é muito simples e tem opcodes com valores incrementais de 0x00 a 0x1A (mais um par de instruções especiais em 0x80 e 0x40) é possível implementar trivialmente um decoder por meio do uso de um decodificador de 5 bits para 32 linhas. Isso pode ser implementado usando 2 decoders de 4 bits para 16 linhas como o 74154.

As duas instruções especiais (que são relativas a renderização de video) podem ser decodificadas com algumas poucas portas NAND com dados vindo dos bits 6 e 7 do registrador de instrução.

Instruction Set - Another World VM

Segue abaixo uma listagem de todas as instruções e seus respectivos opcodes

Another World instruction set
0x00 movConst
0x01 mov
0x02 add
0x03 addConst
0x04 call
0x05 ret
0x06 Break / "pauseThread" Temporarily stops the executing channel and goes to the next.
0x07 jmp
0x08 Setvec "channel number", address Initialises a channel (thread) with a code address to execute
0x09 djnz Decrement variable value and Jump if Not Zero
0x0A Conditional Jump instructions
0x0B setPalette
0x0C freezeChannels" / "unfreezeChannels" / "deleteChannels Deletes, freezes or unfreezes a series of channels.
0x0D selectVideoPage
0x0E fillVideoPage
0x0F copyVideoPage
0x10 blitFramebuffer
0x11 killChannel / "killThread"
0x12 Text "text number", x, y, color Displays in the work screen the specified text for the coordinates x,y.
0x13 sub Subtract
0x14 and Boolean AND
0x15 or Boolean OR
0x16 shl Shift Left
0x17 shr Shift Right
0x18 play / "playSound" parameters: resourceId, freq, vol, channel
0x19 load / "updateMemList" bank-switching de recursos (paletas, bytecode, polígonos, etc)
0x1A song / "playMusic" parameters: resourceID, delay, pos
0x40/0x80 video renderização de polígonos

Unidade de Controle - Microcódigo

Função: Implementa o comportamento de cada instrução por meio da geração de sinais de controle que manipulam o fluxo de dados
implementação: (pendente)

Fluxo de Dados

Função: Elementos passivos que implementam os registradores internos da CPU, Pilha e memória
implementação: (pendente)

STACK

A VM possui uma pilha de 256 elementos de 16 bits cada. Pensei em implementar isso com register files, mas não achei um grande o suficiente pra isso. O Mais próximo que achei foi esse que tem 64 elementos de 40 bits cada. Mesmo assim teria que ter 4 desses, sobrariam bits não usados e não sei o quão fácil é achar desse chip. Talvez seja o caso de usar uma RAM estática, mesmo que as menores disponíveis já sejam muito maiores que o realmente necessário aqui.

Sistema de áudio

Função: Tocar 4 canais simultaneos de áudio com base em samples armazenados em ROMs
implementação: Estamos estudando a possibilidade de usar um chip MSM6295

Sistema de vídeo

Função: Gerar sinal de vídeo para os pinos do conector JAMMA com base em rotinas de rasterização dos elementos poligonais armazenados em ROMs
implementação: (pendente)

rasterização

TO-DO:

Passo 1: Esturar o algoritmo de rasterização com base no código fonte da reimplementação livre da VM.

Passo 2: Implementar uma máquina de estados equivalente

Passo 3: Estágio de saída (paleta de cores) Implementar bank-switching para alternação de paletas de cores. E projetar conversor digital-analógico para os 3 canais de cores. Precisaremos de ROMs pequenas para armazenar as paletas de cores. Placas de arcade usam ROMs OTP (one-time-programmable) como a HM-7611 usada no jogo 1984 (ver a página "COLOR MIXER" do esquemático nesse PDF)

Passo 4: Realizar em portas lógicas e montar em protoboard ou PCB e testar