No próximo ano, vou dar uma aula de microprocessadores de 2 semestres para alunos do terceiro ano de graduação em EE. inscrever-se para a aula, os alunos precisam ter concluído as aulas de programação e sistemas digitais.

A fim de motivar os alunos com uma aplicação no mundo real dos conceitos ensinados em aula, estou considerando a possibilidade de realizar tarefas os alunos com a criação de um emulador para um sistema antigo do zero, como um projeto de grupo a ser concluído até o final da aula (que tem, como apontamos, 2 semestres de duração).

Estou tentando para escolher um bom sistema de destino para este projeto, com o objetivo principal de que seja bastante simples de emular. Quanto menos periféricos a serem emulados, melhor. Quanto menos peculiaridades e bugs precisarem ser replicados, melhor também. Estou procurando expor os alunos aos conceitos importantes de linguagem assembly, codificação de instruções, modos de endereçamento, registros de CPU, registros de hardware mapeados em memória, etc., e não necessariamente os truques necessários para renderizar sprites rápido o suficiente para fazer um videogame interessante com a tecnologia de semicondutores que estava disponível na década de 1980 a um custo aceitável. Entendo que isso era necessário na época; estou apenas tentando encontrar um sistema que não abuse muito desses truques. Idealmente, o sistema em questão não deveria requerem emulação de ciclo preciso ou truques como perseguir a linha de varredura.

Um segundo requisito diz respeito ao desempenho. Os alunos certamente não estão familiarizados com as técnicas de otimização de software, então tentar emular até mesmo o primeiro Playstation ou Nintendo 64 provavelmente terá problemas de desempenho (talvez até mesmo o SNES e o Genesis). Neste ponto, os alunos só precisam se preocupar com implementar o emulador corretamente, não de forma eficiente. A emulação de CPU certamente será implementada por um intérprete, não por um tradutor / recompilador.

Finalmente, não acho que os alunos achariam o emulador interessante se, digamos, apenas exibia valores de registro após a execução de um programa de brinquedo (embora isso tornasse o projeto muito mais simples). Eu gostaria de escolher um sistema para o qual os jogos foram feitos, mesmo que o referido sistema não fosse um console de videogame dedicado. Acho que poder rodar jogos no emulador seria muito motivador para os alunos.

Por exemplo, agora estou olhando para o NES , mas ainda parece um pouco complicado, especialmente o PPU. Existem opções mais simples?

Comentários

  • Pergunta interessante. É pode ser importante adicionar um apelo por respostas para ficar longe das brigas usuais sobre o melhor sistema / cpu / vdu / etc. e focar na parte didática.
  • Há uma contradição aparente na pergunta. de um ponto, o autor quer se concentrar na emulação da CPU, do outro, ele quer ter também imagens e saída de som por todo o sistema emulado. Embora a solicitação deste último seja compreensível, leva ao trabalho igualmente difícil em emulando periféricos, mostrando imagens e reproduzindo tarefas de som.
  • Recurso possivelmente útil, supondo que acabe sendo uma máquina Z80 em vez de 6502: z80.info/decoding.htm na decodificação algorítmica das instruções do Z80 (sujeito a um monte de casos especiais, mas aí está). Exigir que um emulador realmente decodifique algoritmicamente em vez de por pesquisa restringiria a capacidade dos alunos de copiar e colar, além de ser relevante para um curso de microprocessadores?
  • Isso pode não ser o que você está procurando, mas talvez em vez de escrever um emulador (que ‘ m presumindo que será executado em seus PCs), eles podem demonstrar o mesmo conhecimento conceitual trabalhando com hardware real. Faça com que eles obtenham uma placa de desenvolvimento baseada em ARM Cortex M4, aprenda a trabalhar com o metal puro.
  • talvez TI-83 …?

Resposta

Estou colocando o CHIP-8 à frente.

Este sistema é essencialmente uma máquina virtual desenvolvida por algum motivo. Existem jogos escritos para o CHIP-8. Ele tem alguns opcodes, uma pilha, alguns timers e uma tela de bitmap de baixa resolução, mas é simples o suficiente para que os primeiros emuladores cabem em alguns kilobytes nos primeiros computadores de 8 bits.

Existem mais do que algumas implementações de referência que você pode usar.

Existem jogos e assim por diante que são públicos já domínio, como aqui para que você não precise fornecer seus próprios jogos.

Comentários

  • Ayy para Chip 8. É ‘ é fácil encontrar implementações em muitos idiomas e a arquitetura é simples.
  • CHIP-8 é um ótimo ideia para uma introdução ao emu ção devido à sua simplicidade.Tendo escrito um emulador NES antes, posso dizer que escrever a CPU foi extremamente demorado e tedioso – e o 6502 é simples no que diz respeito a CPUs. Em contraste, o CHIP-8 tem apenas 35 instruções muito simples. Além disso, muitos sistemas dependem de comportamentos de temporização precisos entre a CPU e o resto do hardware, enquanto o CHIP-8 não tem tal requisito.
  • Os comentários não são para discussão extensa; esta conversa foi movida para o chat .
  • Eu ‘ sou um programador experiente, mas Nunca escrevi um emulador. Depois dessa resposta, pensei: ” Ei, este chip8 parece fácil, ‘ vou gastar talvez algumas horas nele “. Três semanas depois, eu ‘ ainda estou aqui tentando descobrir por que os programas ficam sem espaço na memória. Muita diversão, também muito ” que diabos “.
  • Eu me pergunto se teria havido algum impedimento para remover o vblank wait da rotina plot-sprite e adicionar uma instrução vblank-wait explícita? O CDP1802 não é ‘ um demônio da velocidade, mas quase certamente poderia desenhar mais de um sprite por quadro na ausência da espera vblank.

Resposta

Oh. Boa pergunta. Tentarei dar algumas dicas, mas consideraria que o problema seria amplamente respondido aqui, em vez de uma conversa mais significativa. No entanto:


[…] incumbir os alunos de criar um emulador para um sistema mais antigo

Muito legal.

do zero,

Se fosse realmente do zero e no software, não seria considero uma tarefa adequada para calouros em um tempo tão limitado. A menos que haja uma maneira de eliminar os requisitos de tempo real (que são ainda mais relevantes para os jogos), prefiro ter cuidado.

Na verdade, já que se trata de EE, por que não fazer hardware real? Ainda é fácil obter (algumas) CPUs clássicas e dispositivos relacionados. Combinado com um LCD moderno, o esforço do hardware é bastante realizável em poucas semanas em grande detalhe.

como um projeto de grupo a ser concluído até o final de a classe (que tem, como apontado, 2 semestres de duração).

Qual pode ser a condição mais rígida.

Estou tentando escolher um bom sistema de destino para este projeto, com o objetivo principal de ser bastante simples de emular. Quanto menos periféricos a serem emulados, melhor. menos peculiaridades e bugs que precisam ser replicados, também melhor.

Parece uma boa tentativa. E o mais importante, remove alguns sistemas aparentemente simples (como singleboarders) da lista, já que contam com o manuseio complexo de dispositivos de E / S (como acesso em tempo real às portas para acionar segmentos de LED de maneira aparentemente contínua).

Procuro expor aos alunos os conceitos importantes de montagem linguagem, codificação de instrução, modos de endereçamento, registros de CPU, registros de hardware mapeados em memória, etc.,

Algo que pode ser feito com um hardware real como bem como uma emulação, não é?

Idealmente, o sistema em questão não deveria exigir emulação de ciclo preciso ou truques como perseguir a linha de varredura.

Junto com o requisito implícito para uma saída de vídeo, isso exige uma lógica de bitmap não acelerada simples.

Um segundo requisito diz respeito ao desempenho. Os alunos certamente não estão familiarizados com as técnicas de otimização de software, então tentar emular até mesmo o primeiro Playstation ou o Nintendo 64 provavelmente terá problemas de desempenho (talvez até mesmo o SNES e Genesis).

Eu não temeria muito aqui, já que o hardware do PC real é bastante rápido. Os problemas reais aqui não são a velocidade da emulação, mas os aspectos em tempo real – sincronizar várias partes da emulação – que requerem um design de software muito cuidadoso e ajustado. Não é de se esperar aqui. Bastante a parte “competir com o feixe” que você mencionou.

Neste ponto, os alunos só precisam se preocupar em implementar o emulador corretamente, não de forma eficiente. A emulação de CPU certamente será implementada por um interpretador, não um tradutor / recompilador.

Ainda assim, mesmo para os mais primitivos, a sincronização em tempo real é necessária para Jogar um jogo. Pelo menos uma sincronização de retrocesso de tela é uma obrigação – não pelo menos para alternar a velocidade da própria simulação.

A necessidade inerente dos jogos de usar efeitos de tempo – e manipulação de tela sincronizada em um nível mais refinado do que os quadros – é algo que tornará a execução de qualquer jogo do mundo real no emulador proposto um desafio.

Gostaria de escolher um sistema para o qual os jogos foram feitos, mesmo que o referido sistema não fosse um console de videogame dedicado. Acho que poder rodar jogos no emulador seria muito motivador para os alunos.

Concordo de todo o coração aqui. Muito do sucesso dos sistemas de aprendizagem e experiência de Andre LaMothe “baseia-se na capacidade primordial de fazer jogos.

Por exemplo, agora estou olhando para o NES, mas ainda parece um pouco complicado, especialmente o PPU. Existem opções mais simples?

Fica difícil porque os requisitos básicos se contradizem. Apenas consoles / computadores bem-sucedidos têm uma grande seleção de jogos, mas eles também têm uma estrutura de hardware mais complexa que permite ótimos jogos.

Vamos verificar alguns sistemas bem conhecidos. Gostaria de separá-los em sistemas “simples” e “complexos” ao longo da complexidade de sua lógica de vídeo (* 1)

Sistemas simples

Na primeira iteração, são todos sistemas sem um VDC / CRTC dedicado.

  • Atari VCS – eventualmente o sistema definitivo a ser usado para aprender assembler, trabalhar em um nível básico extremo, sem intermediários e sem muitos cuidados. Ao mesmo tempo, “é o mesmo nome do termo” racing the beam “.

    Dito isso, ainda pode ser um sistema a ser procurado, já que as partes dependentes do tempo estão bem definidas e (em comparação com qualquer outro vídeo) extremamente simples e fácil de emular – exceto que não é coisa de calouro. Além disso, é extremamente bem documentado em fontes gerais disponíveis.

  • Commodore PET – um sistema bastante simples, especialmente desde toda a parte do vídeo pode ser emulada de forma bastante abstrata, mas os VIAs precisam ser, pelo menos em parte, emulados. O mais importante é que contém apenas duas fontes de temporização (além do relógio).

    Uma grande vantagem para o PET (e acompanhamentos) é a boa documentação (também devido à sua simplicidade). Além disso, embora tenha um CRTC, quase nenhum jogo (ou outro software) fez uso de reprogramação, tornando uma maneira simples e uma emulação incompleta (abstrata) possível.

    Na parte de trás, há apenas um pequeno número de jogos e a maioria deles são escritos em BASIC, o que pode exigir alguma pesquisa para encontrar a quantidade de abstração vs. detalhes na emulação.

  • Apple II – Novamente, um sistema incrível e bem documentado com muitos softwares. Muito disso baseado em montagem. Embora o Hardware seja totalmente documentado e construído apenas a partir de TTL, seu funcionamento não é realmente simples e, uma vez que alguns jogos dependem muito de peculiaridades e contagens de loops para o tempo exato, a emulação pode ficar muito mais complicada do que se supõe à primeira vista.

    Uma vantagem para você pode ser que o Apple II era bastante popular no Brasil (bem naquela época).

  • TRS-80 – Aqui também a lógica do vídeo é construído a partir do TTL, mas muito mais simples do que no Apple. Outro I / O semelhante é bastante simples. Do lado negativo está novamente um pequeno número de jogos.

Até agora, os verdadeiros antigos, mas também alguns sistemas posteriores podem ser classificados como simples:

  • Sinclair Spectrum – Embora a lógica ofereça alguns truques, sinos & assobia, é um design de bitmap lado a lado direto. Até agora, as chances são boas para uma emulação, exceto, como de costume, os jogos dependiam muito do timing, algo complicando a emulação novamente.

    Assim como com o Apple II, havia vários clones no Brasil .

  • Um caso semelhante pode ser feito para a família ORIC

  • Atari ST – Pode ser uma surpresa do ponto de hoje de vista, mas o Atari ST não apresentava nenhum hardware de vídeo sofisticado. Apenas 3 resoluções gráficas e uma CLUT de 9 bits para até 16 cores simultâneas. Alguns pontos de sincronização e um único cronômetro. Além de uma CPU mais moderna e um chip de som dedicado. Parece uma combinação perfeita, se, bem, se não fosse para os programadores de jogos novamente. Aqui também, o software implicava em uma infinidade de truques para criar jogos incríveis (* 2).

Uma primeira conclusão para sistemas “simples” é que, embora o hardware possa ser menos complexo, o software fez um grande esforço para superar isso. Em conseqüência, pode Pode-se dizer que sistemas menos complexos não necessariamente tornam uma emulação menos complexa, já que não há mais hardware diferente a ser emulado, mas o hardware simples precisa ser seguido de perto para fazer o código do jogo rodar.

Sistemas complexos

Em geral, são todos os sistemas com um VDC sofisticado

  • 9918 ff .- Não se trata tanto de um único sistema, mas eventualmente do VDC mais usado (a TI o chamou de VDP). Embora concebido para o TI 99/4, a TI o vendeu para qualquer pessoa interessada. Resultou na maioria de todos os sistemas (* 3) usando um 9918 ou um de seus designs subsequentes (9928/38/58 / …).

    Consoles de jogos como Coleco Vision , Sega SG-1000 até o Sistema Master a bem como computadores do TI 99/4 ou Memotech MTX até o todo o mundo das máquinas MSX usava essa família.

    Parece ótimo, não é? Bem, com certeza há muitos jogos a serem usados. Além disso, tal VDP ajuda a simplificar a emulação, pois oferece uma separação clara entre CPU e tela e limita quais “truques” um jogo pode usar para o que o VDP oferece, que por sua vez é claramente definido. E, novamente, é o software existente que torna a emulação difícil, já que, novamente, é claro, os programadores usaram truques de temporização para manipular a tela no momento certo. Alguém mencionou “Racing the Beam”?

  • Commodore VC20, C64, C16, etc. – O mesmo é verdadeiro para todos os computadores domésticos Commodore. Embora difiram em complexidade por terem sprites ou não, oferecendo temporizadores ou não e som ou não, o básico O problema é o mesmo da família 9918: Software que usa certas situações de tempo para criar efeitos de jogo.

  • 6847 Sistemas – Tandy CoCo, Matra Alice e similares apresentam o mesmo problema.

Eu poderia continuar com sistemas de jogo como NES ou MegaDrive, mas vou encerrar essa lista aqui, pois o princípio deve estar claro agora: Embora alguns sistemas possam parecer mais complexo de ser emulado, o problema real não é a complexidade do hardware de vídeo, mas sempre que um programador “melhora” o que pode ser feito por uma programação inteligente (* 4). Portanto, o problema real do seu projeto não é (tanto) o hardware (* 5), mas o software, especialmente os truques e ferramentas usados em jogos reais .

Isso é especialmente ruim, já que você deseja usar (como eu li) os jogos existentes como motivação. Não haverá muitos em execução uma emulação em tempo real menos difícil.

A redução dessa dependência reduzirá o número de jogos executados corretamente. Reduzi-lo a um nível que permite que ele seja tratado em um curso de tempo limitado tornará quase impossível encontrar jogos adequados.

Conclusão: Encontrando o A compensação certa é uma maneira, mas que exigirá uma pesquisa considerável, embora ainda limite a usabilidade.


Agora, talvez seja possível atacar isso de um ângulo ligeiramente diferente. Vamos tentar alguns:

  • Uso de hardware antigo existente:

    Embora esteja provado (* 6) para funcionar, oferece a mais alta compatibilidade e facilidade de uso devido a ambientes de desenvolvimento abertos, pode perder o apelo de “construção” para alunos de EE.

  • Use os sistemas de jogos educacionais existentes:

    Sistemas como o Andre LaMothe “s XGS são ótimas ferramentas para mergulhar na construção e programação detalhada de hardware. Claro, alguma solda necessária (já existe uma versão pronta disponível), eles são sistemas definidos por software quase completos, totalmente documentados e oferecem uma enorme biblioteca de jogos. Sem mencionar seus livros sobre programação de jogos.

    Um grande bônus é que os alunos podem levar o sistema para casa e jogar mesmo após o término do curso.

  • Construa seu próprio sistema simples:

    Use uma CPU clássica (6502 por exemplo), um pouco de RAM, FLASH e um VIA mais um FPGA para implementar um CRTC básico e pronto. Os alunos irão soldá-lo, aprenderão sobre os componentes e sua interação, incluindo o uso de FPGA (que pode ser uma obrigação hoje em dia) e então executarão seu software em hardware real. Mesmo com números pequenos, deve ser possível produzir tal placa em torno de 50 euros ou menos. Como a ideia do XGS, “funcionará após o término do curso – incluindo o sentimento de propriedade como sendo seu sistema.

    É claro que os alunos terão que escrever seus próprios jogos, mas jogos simples podem ser feitos em um tempo bastante curto – sem mencionar que os cursos de acompanhamento também podem usar jogos que a classe anterior escreveu.

  • Faça uma emulação do sistema “seu próprio”

    Muito parecido com antes, exceto que tudo é virtual. Tem a vantagem de ser um poço definiu e fecha o sistema, especialmente aquele onde não há limitações devido a uma emulação menos “perfeita” – a emulação é perfeita por definição e todas as suas peculiaridades são as mesmas do sistema. A desvantagem é novamente a parte do software.

  • Use hardware “soft”:

    Existe um projeto de Neil Franklin criando uma série de componentes de sistema generalizados muito parecidos com os dos computadores clássicos, mas usando micro controladores em vez de chips dedicados. Ele combina emulação com hardware real. Embora os componentes ainda sejam desenvolvidos como emulação, eles devem ser executados em um microcontrolador e usados como chips “reais”. Um sistema pode ser configurado usando um módulo SoftCPU emulando, por exemplo, um 6502 com alguma RAM e ROM, combinado com um SoftVGA fornecendo um terminal como interface de vídeo e um teclado e mouse emulando SoftPS2. Todos são conectados através de um barramento paralelo ou serial (SPI) permitindo a adição de outros componentes que podem ser apresentados à emulação também.

    Além de ser tudo sobre emulação, ele apresenta uma quantidade limitada de hardware que pode ser feito em uma placa de ensaio (ainda assim, nunca é muito cedo para começar a soldar), também mostra uma tarefa bastante típica da engenharia de hoje – substituir a lógica tradicional por microcontroladores – em uso prático.

    O o resultado é um sistema que oferece o toque e a sensação de um computador real (antigo) enquanto é construído com hardware moderno executando emulações paralelas.

  • Uso de um emulador configurável:

    Não, não se trata de MAME ou algo semelhante, mas de uma estrutura de emulador escrita em JavaScript, que lida com as partes genéricas (incluindo o tempo), onde seus alunos irão adicionar suas emulações (o que era um objetivo, não era?) para formar um sistema completo. Uma vez que JS é entregue na fonte, até mesmo o próprio Framework pode ser modificado.

    Dependendo da qualidade de cada emulação, isso pode ser usado para qualquer coisa, desde um sistema de demonstração simples até uma recriação figurada completa de uma década de 1980 computador.

Então, talvez algumas das variações acima possam ser um bom começo?


* 1 – Vou me concentrar apenas no vídeo (e CPU) para mantê-lo simples. Além disso, o vídeo sozinho já funciona bem para eliminar sistemas completos. O som adicionará outra dimensão e pode complicá-lo muito além do escopo disso.

* 2 – Basta dar uma olhada no Xenon. Um rolante vertical inovador com múltiplas camadas móveis e muitos objetos animados, todos rodando de forma super suave no software. Na verdade, ele estava tão bem ajustado que portá-lo para um Amiga (geralmente) mais capaz (em termos de gráficos) demorou um pouco e resultou em um jogo um tanto inferior.

* 3 – Sistemas projetados desnecessários unidades vendidas. Então, novamente, alguns consoles de jogos tiveram mais do que apenas sucesso, então podem até obter a maioria em números.

* 4 – Postagens de blog do principal desenvolvedor do Glide64 plug-in de renderizador para emuladores N64 escreveu uma série de várias partes ( Intro , P .1 , P.2 , P.3 ) de postagens de blog sobre os obstáculos que ele teve que superar para fazer a emulação de vídeo funcionar – todos eles não sobre a complexidade de emular o hardware, mas todas as maneiras pelas quais a CPU modificou e ajustou a saída ao lado de a lógica do vídeo. Isso é ainda mais notável considerando que o N64 já é um sistema bastante absrato e fechado.

* 5 – Na verdade, eu consideraria um hardware de vídeo mais complexo como uma ótima lição para alunos de EE, pois mostra o que pode ser feito com algumas portas em vez de pilhas de software – ainda mais porque eles estão prestes a fazer hardware mais tarde, não é?

* 6 – Stefan Höltgen da FU Berlin, por exemplo, usa o antigo sistemas de jogos em suas aulas para apresentar aos alunos (não EE) o hardware real e a programação real e suas implicações para as tarefas diárias (e jogos).

Comentários

  • @Tommy Bem, eu adoraria evitar isso, pois não há uma resposta fácil. O mais importante aqui pode ser que, embora o Z80 seja um pouco ” peculiar “, o 68k é tudo menos simples. Com todas as palavras de extensão (até CPU32), uma única instrução pode ter até 11 palavras (22 bytes) e decodificá-las é uma grande confusão. Então, novamente, tudo depende do forma como o emulador é composto. O Z80 é um 8080 avançado bastante direto, fácil de emular, com alguns modificadores, que podem ser facilmente manuseados. Para os 68k, mesmo apenas o original, será muito mais trabalhoso.
  • ” tarefa adequada para calouros em um tempo tão limitado. ” Ele disse que esses são alunos do terceiro ano, não calouros, e eles ‘ já concluíram vários pré-requisitos.
  • @ wizzwizz4 Bem, não importa qual seja a nossa opinião pessoal, JS é o herdeiro legal do BASIC. Sério e em todos os sentidos! Apenas pense nisso.Ele não só roda próximo a cada computador real, como ‘ é até instalado por padrão e não há quase nenhuma maneira de se livrar dele sem perder muitas funcionalidades. Ainda mais, pense em quantos softwares ruins e incrivelmente lentos são escritos em JS – a prova perfeita, não ‘ é?
  • @Raffzahn It ‘ s completamente diferentes Para começar, o BASIC tinha vários implementos incompatíveis … Ohhh! Ele é o sucessor do BASIC!
  • Eles ‘ ainda não são calouros, que são alunos do primeiro ano. E acho que você deveria dar ao OP o benefício da dúvida de que ele não ‘ atribuiria o projeto se os alunos não ‘ tivessem o plano de fundo necessário.

Resposta

Existem algumas boas ideias até agora.

Mas algo a considerar.

Se você fizer algo como uma máquina CP / M, eles “são realmente bastante básicos e simples, especialmente porque tudo é isolado não apenas pelo BIOS, mas também pela natureza IN / OUT da família 8080 / Z80.

Não me parece desagradável ter uma máquina CP / M sendo a meta do primeiro semestre. (Não sei o seu plano de estudos)

Mas, por exemplo, uma máquina CP / M básica não precisa de precisão de ciclo, ela não precisa de interrupções, a coisa mais complicada que ela tem a fazer é consultar o teclado para ver se uma tecla foi pressionada. (Em contraste com o monitoramento de keydown e keyup ou qualquer outra coisa.)

Então, no segundo semestre, você pode adicionar os requisitos, como a interface com um chip gráfico. A instância acima do SG-1000 poderia facilmente ser uma máquina CP / M no primeiro semestre, e então prontamente transformada em SG-1000 no segundo (já que você fez a parte Z80 no primeiro semestre) .

Finalmente, acho que cabe à sua classe ter um programa de aceitação que os alunos possam executar para verificar a CPU. Poucas coisas são mais empolgantes do que depurar uma CPU ruim, especialmente com linguagem de máquina que você pode não estar familiarizado .

A comunidade 6502 tem programas de teste que podem verificar se uma CPU executa todas as instruções corretamente, não tenho certeza do que está disponível para as outras CPUs.

E se é um consolo para o escopo, escrevi um simulador e um montador associado intermitente durante um feriado de Natal de 2 semanas, se isso ajudar você sobre o tamanho dos projetos reais. CPUs básicas são muito simples.

Comentários

  • No Z80, o FUSE fornece testes, embora nem todos sejam genéricos ou necessariamente corretos quanto ao ciclo exato tempo; eles ‘ também estão em um formato de texto ad hoc, mas eu ‘ os transcrevi para JSON: github.com/TomHarte/CLK/tree/master/OSBindings/Mac/… – use tests.in.json para definir estados iniciais e descobrir como por quanto tempo você deve executar, então tests.expected.json para verificar os resultados. Existem ‘ s também zexall e zexdoc, originalmente arquivos CP / M, mas amplamente adaptados e muito lentos. Passar o primeiro requer um monte de coisas não documentadas para ser correto, passar o último não ‘ t.
  • … e a única coisa que eu ‘ já descobrimos que o 6809, supondo que alguém estivesse pensando em sugerir um Vectrex ou Coco / Dragon, está contido em um conjunto de teste de máquina de arcade Williams mais amplo em seanriddle.com/wetsold.html . Para o 6502, estou totalmente a bordo dos testes de Klaus Dormann, Wolfgang Lorenz e AllSuiteA, todos os quais parecem ser muito mais proeminentes do que os testes Z80 ou 6809.
  • @Tommy Até Eu ‘ estou ciente de que cada um dos testes da Fuse ‘ s tem ciclo preciso. Por favor, registre bugs se eles ‘ não forem 🙂
  • @PhilipKendall veja meu e-mail de 29/5/2017 para fuse-emulator-devel re: DJNZ e se o deslocamento é lido em uma iteração final. A conclusão de Alan Cox sobre se o comportamento testado do FUSE ‘ está correto foi que ‘ s ” aberto à interpretação ” com base nas fontes disponíveis. Portanto, achei que ” não necessariamente correto ” era justo. Eu provavelmente deveria ter sido claro: encontrei apenas um punhado de desvios na interpretação das evidências de sua equipe ‘ e na minha própria. Pedimos desculpas pela má forma nisso.
  • @Tommy – ” Conclusão de Alan Cox sobre se o FUSE ‘ foi testado o comportamento é correto era que ‘ s ” aberto à interpretação ” com base no disponível fontes ” …embora eu tenha muito respeito por muito do que Alan faz, é ‘ muito fácil verificar se o comportamento testado é o mesmo de uma CPU Z80 real (especialmente para versões CMOS que pode ser executado em protoboard com baixa velocidade de clock para configurar testes detalhados de maneira muito simples), então este é definitivamente um caso em que se ele pensa que há ‘ há algo errado, ele deveria estar capaz de demonstrá-lo facilmente.

Resposta

Posso sugerir o SG-1000 ?

O sistema é pouco mais que um agrupamento de três chips prontos – o Z80, o TMS9928A para gráficos e o SN76489 para som, com os controladores como grupos burros de interruptores NÃO (normalmente abertos).

No software ou hardware, você pode simular ou emular qualquer parte disso isoladamente ou todos juntos para produzir o sistema completo.

O sistema usa ROMs não trocados por banco simples para seus jogos, e eles normalmente y não confie em nenhum truque, como interrupções no meio da tela ou contagem de ciclos para produzir seus efeitos. Apenas um único mapa de blocos e vários sprites no topo. Eu sugiro que isso é muito mais simples do que um sistema contendo muitos componentes internos interativos e cartuchos inteligentes como o NES.

Você deve fornecer seus próprios jogos para emular, em vez de distribuir não licenciados material protegido por direitos autorais, é claro.

Comentários

  • … e, para o registro, o ColecoVision é exatamente a mesma coleção de componentes, com conexões diferentes lógica e joypads um pouco mais complicados. Portanto, um emulador SG-1000 geralmente é fácil de estender para oferecer suporte a ambos.
  • Também digno de nota que o 9918 é um chip complexo, com sprites, modi complexos e dados, como ele fez ‘ t deseja usar. Não é ‘ É?

Resposta

Um simples, computador simples como o ZX Spectrum parece razoável – mas já existem muitos emuladores bons por aí para tornar esta opção útil. Eu também acho que o 6502 é mais fácil de emular.

Então, uma opção possível poderia ser o Oric-1 ou Atmos da Tangerine systems , que usava um 6502, memória não armazenada, nenhum chip personalizado exceto vídeo simples e um buffer de quadro relativamente simples. Também não é tão conhecido quanto o Spectrum, ainda, há softwares (jogos) disponíveis para trazer alguns testes de compatibilidade simples (eu acho que algum “senso de realização” é extremamente importante para os alunos). Já existem vários emuladores disponíveis para o Atmos (três, pelo que sei), mas seu número é limitado, o que torna mais fácil descobrir se alguém trapaceou e simplesmente copiou o código.

Nenhum dos Os jogos Oric eram tão sofisticados que eu sabia que você precisaria de uma emulação de ciclo exato de 100% para executá-los,

Comentários

  • I ‘ d argumenta que a arquitetura Oric desencoraja a corrida raster por não ter um canal lateral de registros de controle de vídeo e não ser configurada de forma que a corrida possa aumentar a resolução de cor (em contraste com um espectro). Porém, se ele tivesse apenas dois buffers HIRES, eu ‘ d declararia isso com mais segurança. Você concorda com isso?
  • @Tommy I ‘ Não estou muito familiarizado com os circuitos de vídeo Oric. O que eu diria em qualquer caso é que o Oric tinha uma vida tão curta e uma base de usuários tão limitada que técnicas sofisticadas para ajustar o vídeo como conhecemos no ZX Spectrum não foram ‘ t desenvolvido (pelo menos não durante a vida ativa do computador, há ‘ uma série de demonstrações interessantes aqui demozoo.org/platforms/ 49 )
  • Ah, então ‘ irei fornecer um raciocínio melhor: o chip de vídeo Oric tem estado modal, incluindo modo de texto ou gráfico, mas não registros expostos. Tudo é definido por bytes de controle dentro do stream de vídeo – incluindo atributos de primeiro e segundo plano. As pessoas tendem a reclamar disso porque significa que se você quiser gráficos sem intervalos, ‘ está limitado a quatro cores por linha, duas delas sendo complementos bit a bit das outras duas. Alguns dos jogos modernos ainda parecem muito bons – por exemplo, Stormlord youtube.com/watch?v=QSDy-BC580M
  • @Tommy Os atributos seriais tornam a programação um pouco mais complicada, eu ‘ d acho que, mas a quantidade de conflito de atributos é ainda melhor do que no ZX Spectrum, eu acho.
  • O Xenon 1 precisa de um ciclo exato, ou então trava quando a nave explode (isenção de responsabilidade: escrevi um emulador oric para o amiga chamado amorico e me deparei com esse problema, mas apenas neste jogo)

Resposta

Com base em seus critérios e na necessidade de manter o projeto interessante para seus alunos, eu recomendo considerando seriamente o Vectrex Arcade System, que foi vendido por Milton Bradley no início dos anos 1980.

insira a descrição da imagem aqui

Como o Vectrex é único no uso de uma exibição vetorial, em vez de uma exibição raster, ela não exigem que qualquer hardware de vídeo complicado seja emulado. O display é gerenciado pela CPU, e o display em si é simples de emular em um sistema moderno e com bom desempenho.

Além de emular o display vetorial, a CPU ( Motorola 6809), e o chip de E / S (MOS 6522), não representam muito É um desafio, pois são peças simples de 8 bits que estão muito bem documentadas.

O modelo de memória também é muito simples, sem nenhum esquema bancário que eu conheça. Há um chip de som PSG comum no Vectrex, mas emulá-lo pode ser considerado como “Crédito Extra”.

Ao contrário de outros consoles de jogos simples do início dos anos 1980, os jogos Vectrex têm se mantido muito bem, dado sua capacidade de renderizar gráficos monocromáticos suaves, incluindo arame 3D. Isso é ainda mais evidenciado pela popularidade do desenvolvimento moderno “caseiro”, no qual os desenvolvedores continuam a criar novos jogos Vectrex.

Uma vantagem final para o Vectrex é que a ROM do sistema original pode ser distribuída gratuitamente.

Comentários

  • Exceto, o vectrex também fots bem o ‘ Correndo o feixe ‘ categoria, não ‘ é?
  • @Raffzahn, pelo que entendi, a CPU Vectrex controla o feixe de elétrons – exatamente o oposto de uma ” corrida do feixe ” situação em que o software precisa fazer mudanças de estado precisamente sincronizadas para mantenha-se atualizado com uma exibição de varredura de varredura cronometrada externamente.
  • @Mark It ‘ é o mesmo com o VCS. Aqui também o feixe é controlado pela CPU. Sem a CPU acessando WSYNC todas as linhas e antes que a linha seja concluída, a tela irá falhar. E, tanto quanto eu entendo o OP, ele ‘ é exatamente sobre não recriar um sistema com requisitos de tempo estritos – que são essenciais para o Vectrex.
  • @Raffzahn: A CPU no VCS controla a vertical, mas não controla a horizontal. Não ‘ não é incomum que um jogo produza dezenas ou até centenas de linhas de varredura sem um WSYNC intermediário. Na ausência de um WSYNC, o feixe estará na mesma posição horizontal a cada 76º ciclo. Armazenar WSYNC é geralmente a maneira mais fácil de esperar que o feixe alcance o lado direito da região exibida, mas ‘ dificilmente é a única maneira. Um programador tão inclinado poderia explorar os detalhes intrincados do movimento e dos comportamentos do sprite para escrever um jogo que nunca usou WSYNC.
  • Hum, pessoal, estamos falando de um emulador aqui. Não haverá problema com o desbotamento do fósforo enquanto a CPU emulada leva muito tempo para desenhar o próximo quadro. Não há ” feixe ” e certamente não há razão para o emulador precisar ” race ” já que a tela do emulador permanecerá estática o tempo que for necessário entre os quadros.

Resposta

Criar um emulador do zero é uma tarefa relativamente grande, especialmente para alunos inexperientes, e pode ser problemática. Portanto, você realmente precisa ter cuidado sobre qual plataforma emular e quais informações compartilhar / usar. Para mim, a melhor escolha é uma plataforma ZX 48K , pois eu estava crescendo nela e estou familiarizado com seu funcionamento interno, então a resposta será influenciado por isso … Mas devemos ter em mente que hoje em dia os alunos geralmente não veem / usam / sabem disso tanto quanto nós … O que você precisa alcançar é:

  1. emulação correta do iset da CPU

    mesmo se houver toneladas de documentos de conjuntos de instruções por aí Você tem que ter cuidado, pois no Z80, por exemplo, 99,99% deles contêm erros. Portanto, você deve escolher algum iset de referência testado para eles agora que está correto (ou pelo menos basicamente funcional).

    Por exemplo, aqui está o meu iset Z80 passando ZEXAL com 100% de sucesso:

    A plataforma Z80 tem uma grande vantagem: há muitos testadores para ela, como ZEXALL Exerciser que pode ajudar muito a depurar o emulador.

    Acho que também havia versões para i8080, mas não conheço nenhum testador para família de CPU diferente.

  2. Tempo

    bem para emulação básica o método tics de relógio (ou throttling) é o suficiente que é bem conhecido e usado … Não vejo nenhum problema aqui. Hoje em dia, os computadores têm uma resolução relativamente boa para sincronismo (no PC: RDTSC, no Windows PerformanceCounter, …).

    O emulador básico pode ignorar a CONTENÇÃO da plataforma emulada, mas cuidado com alguns sistemas operacionais / jogos / aplicativos podem tornar-se inutilizável se não for emulado corretamente. Isso não vale apenas para demonstrações. O tempo normal em computadores antigos era derivado de alguma interrupção (geralmente atualização de vídeo) e um número limitado de ciclos onde era possível executar antes. Mas com a contenção, o número de instruções executadas ao mesmo tempo pode ser muito diferente e alguns programas podem estourar e danificar-se ou congelar. A CONTENÇÃO é a coisa mais difícil de implementar com tiques de relógio, então você deve evitá-la a todo custo … Por outro lado, com tempos de nível de MC é realmente fácil e apenas algumas linhas de código.

  3. Som

    este é um problema dependente da plataforma e você deve escolher a API usada para entrada / saída de som corretamente. Por exemplo, no Windows, a única opção utilizável é WAvEIN / WAVEOUT devido à baixa latência e fácil uso. DirectX está inutilizável (pelo menos estava tentando usá-lo para essa tarefa) devido a latências ALTAS e não funcionam como retornos de chamada.

    Eu usaria abordagem de buffer em vez de condução de alto-falante direto para que sua emulação possa explodir o tempo de execução em vez de execução correta de nível de MC (o que eu faço de qualquer maneira, mas duvido que os alunos consigam fazer isso no tempo disponível).

  4. Vídeo

    Este também depende da plataforma. .. e você deve usar a API com a qual seus alunos estão familiarizados. Mesmo o rastreamento de feixe é relativamente fácil de implementar com bitmap simples … Em computadores como ZX, a ordem Scanline tem um significado especial e pode ser muito perturbadora para programadores iniciantes, então é melhor usar tabelas de tradução LUT convertendo entre endereço e coordenada y para frente e para trás.

    A maioria das plataformas mais antigas usava taxa de atualização de 50 Hz / 60 Hz e resolução relativamente pequena, então hoje em dia os computadores, mesmo com emulação não otimizada, ainda devem ser rápidos o suficiente para isso. Caso contrário, pular quadros também é uma opção …

  5. outro HW e periféricos

    O mínimo absoluto é memória RAM / ROM e teclado. A memória é geralmente muito fácil apenas array estático e ou alguma coisa de troca de página … O teclado pode ser emulado configurando I / O de acordo com as teclas pressionadas. A E / S também pode ser mapeada em memória para algum array, assim como a memória. Trapping a rotina ISR também é uma opção, mas torna o teclado inutilizável para manipuladores de teclas personalizados.

    Eu não me incomodaria com periféricos FDC, AY, etc., pois o emulador deve ser mantido o mais simples possível. Mas se você tiver sorte, pode haver alguns alunos que estarão muito à frente dos outros com este projeto. Para aqueles, você pode sugerir a implementação de recursos interessantes como FDC, DMA e até mesmo som de placa de som real (para fitas reais ou qualquer reprodutor de áudio) que permite muitos recursos interessantes, por exemplo, consulte:

  6. Arquivos

    Eu escolheria os formatos de arquivo Z80 / SNA em Iniciar. Usar TAP / TZX é bom, mas desde o início o emulador teria muitos bugs, portanto, as rotinas de carregamento podem não funcionar corretamente, tornando o uso e a depuração muito difícil.

  7. ROM

    esta é a parte mais problemática, já que muitas ROMs de plataforma ainda não são gratuitas e extraindo / baixando / usando-as para emulação você pode arriscar questões legais.

    A partir de alguns comentários aqui, parece que as ROMs ZX são de domínio público agora … e também há ROMs com comentários pri está por aí tornando muito mais fácil depurar as primeiras etapas do emulador (quando nada ainda funciona).

    Mas você deve sempre considerar Emulação e outras coisas legais , especialmente se os emuladores forem colocados em algum lugar da internet

Aqui estão alguns links de controle de qualidade meus:

Resposta

Você está procurando um sistema que não foi muito emulado? Eu sugiro ficar dentro de computadores de 8 bits (ou os primeiros simples de 16/32 bits), ZX Spectrum 48k é um sistema relativamente simples – muito bem documentado, sem sprites, sem chip de áudio, não Bancos de RAM, E / S simples, si gráficos simples (embora com um layout estranho), nenhuma emulação perfeita de ciclo necessária, CPU bem conhecida, fácil manuseio de cassetes (poderia ser ainda mais fácil por armadilhas de ROM). Há toneladas de jogos, muitos deles com licença permissiva.

A desvantagem: há uma enorme quantidade de emuladores disponíveis, muitos deles da categoria retro e muitos com código-fonte disponível, portanto, o perigo de trapacear e copiar outro código é alto.

E, claro, trabalhar em um emulador de um sistema anteriormente não emulado forneceria um benefício adicional do sentimento de realização.

Comentários

  • Eu tive o mesmo instinto, mas estenderia sugerindo que SNA e Z80 e formatos de instantâneos bem definidos o suficiente que você precisa ‘ Nem se preocupe com a emulação de fita. E, vamos ‘ s ser honesto, TZX é um pouco um miasma neste ponto.
  • Eu acredito que o Spectrum ROM está agora em domínio público, o que pode ajudar (ou tornar as coisas muito fáceis)
  • O ZX Spectrum é um ótimo exemplo de hardware simples, mas também de programação de contagem cíclica bastante complexa (Racing the Beam) para obter efeitos de jogo utilizáveis.
  • @Tommy Oh, eu nunca sugeriria o ZX80 / 81 pelo mesmo motivo. E embora não seja um verdadeiro aficionado por Spectrum, eu vi alguns bons códigos dependentes de tempo para ele. A maioria das manipulações de tela do prominet após essa parte ter sido exibida, mas antes de ser executada uma vez. É ‘ um problema muito simples encontrado em muitos sistemas. Não é um grande problema, mas depende do tempo. Por exemplo, esquemas de emulação simples que apenas aceleram a velocidade em um nível de frame produzirão uma porcaria em hosts de emulação mais rápidos … e assim por diante.
  • @Stormcloud O Spectrum ROM não é de domínio público, embora a permissão tenha sido concedido para distribuí-lo para uso com emuladores. Os ROMs ZX80 e ZX81 foram lançados sob a GPL.

Resposta

Posso sugerir que você dê uma olhada em alguns dos primeiros jogos de arcade? Especificamente estas duas plataformas 8080 / Z80:

  • Midway 8080 – desenvolvido em 1975 e poderes Invasores do espaço . Usa um buffer de quadro preto e branco de 256x224x1 bit na RAM.

  • VIC Dual – Sega / Gremlin “s plataforma projetada em 1977 – o jogo mais conhecido é Carnival . O vídeo é uma matriz de 32×28 de 8×8 caracteres (todos em RAM) e pode suportar um simples paleta de cores, mapeada para um PROM.

São muito simples de emular assim que a emulação do Z80 funciona. Não há truques engraçados do scanline ou estados de espera estranhos da CPU. os controles estão disponíveis por meio de portas de E / S de bitmap.

Você pode brincar com essas plataformas interativamente em http://8bitworkshop.com/ (Divulgação completa: eu administro este site e sou o autor dos livros com links no site que descrevem essas plataformas)

A Apple] [também é uma boa escolha para uma plataforma baseada em 6502, embora o subsistema de vídeo seja mais complicado do que nas duas plataformas de arcade.

Comentários

  • Para quê ‘ s vale a pena, acho que Space Invaders é uma sugestão inspirada. Se não houver memória, ‘ s apenas 8080 com uma tela de bitmap de 1bpp, alguma porta IO para os controles, nenhuma tentativa de rasterizar, áudio que é apenas da forma ” acionar ruído X agora “, requisitos de precisão muito relaxados e produz um jogo que eles ainda tentam vender ocasionalmente agora. É ‘ apenas a questão da legalidade que pode causar uma pausa, embora eu ‘ sempre seja confuso nas exceções acadêmicas.
  • Isso ‘ está quase certo, há ‘ s também um chip externo que ajuda com o 8080 ‘ s falta de um shifter barril. Não deve haver ‘ qualquer problema de legalidade emulando o hardware (‘ s nenhum BIOS protegido por direitos autorais ou outro código) e ‘ é muito fácil escrever seu próprio jogo, por exemplo: 8bitworkshop.com/v3.2.0/?platform=mw8080bw& file = game2.c

Resposta

PET ou TRS80 pode funcionar Nós vamos. Hardware simples com texto na tela para que possam ser emulados com saída de texto simples, inicialmente adicionando código para seus conjuntos de caracteres estranhos mais tarde e provavelmente não conterá muito na forma de código de contagem de ciclo exato.

Idéia bônus depois, se você vá para um PET adicionando suporte C64 forneceria gráficos.

O 6502 é provavelmente mais simples de emular.

O pensamento final pode ser o Ohio Scientific Superboard II ou em sua versão do Reino Unido, o UK101, pois não acho que tenha hardware de vídeo reprogramável.

Comentários

  • Sim, todos os três (PET, TRS, Superboard (esqueci totalmente sobre o último)) são ótimas máquinas simples e ótimas para emulações. Mas também falta uma boa seleção de jogos prontos para usar. Sem mencionar a cor e coisas semelhantes que as pessoas podem esperar hoje.

Resposta

O PDP-8 digital é muito arquitetura simples para a qual pode ser fácil escrever um emulador. Algumas razões para isso incluem:

  • Apenas 8 instruções básicas
  • Nenhuma interface de vídeo etc. para emular, apenas I / O de terminal
  • Não há necessidade de precisão do ciclo, a série real de máquinas em si não garantiam o mesmo comportamento nas diferentes implementações
  • Pode começar com uma configuração simples (por exemplo, uma máquina de 4Kword executando FOCAL-69) e, gradualmente, tornar o emulador mais complexo (por exemplo, uma máquina de 32Kword com aritmética estendida, executando OS / 8 a partir de um disco RK05)
  • Muitos manuais disponíveis online
  • Os diagnósticos MAINDEC e suas instruções estão disponíveis online, que podem ser usado para testar se a emulação está funcionando corretamente

Isso pode não cobrir todos os seus requisitos, por exemplo, E / S mapeada em memória, mas certamente inclui coisas como decodificação de instruções e modos de endereçamento. da documentação vai direto para o nível de hardware básico que pode ser apropriado para um curso de EE.

Comentários

  • Um ponto interessante é que a maioria dos sistemas mencionados acima tem CPUs Z80 ou 6502, ambas com uma certa deficiência em termos de modos de endereçamento suportados. Se a cobertura dos modos de endereçamento for importante, o PDP-8 tem uma seleção muito melhor deles para demonstrar.
  • Para o ” jogo ” aspecto da questão, acredito que o Adventure ainda é mantido / ressuscitado para arquiteturas PDP (mas verifique se – posso estar errado).
  • @TobySpeight Você ‘ está certo, é mantido ou ressuscitado, mas para o PDP-10 , que é totalmente incompatível com o PDP-8.

Resposta

A opção ZX Spectrum já foi informada: sua força é o hardware de IO totalmente simplista e o fato de que muitos jogos existentes NÃO exigem ciclo preciso -emulação correta de todas as peculiaridades com a única exceção de som (nada perto de corrigir o som sem emulação de ciclo exato da CPU e redução da resolução correta do fluxo de som intermediário de 1 bit produzido pela CPU).

Qualquer outra opção de hardware de jogos como NES, G enesis e todas as máquinas baseadas em sprites semelhantes não são uma opção, obviamente, pois muito tempo é necessário para aprender o hardware complexo, desenvolver maneiras de emulá-lo, contornar deficiências na emulação etc. Por exemplo, até mesmo Super Mario “simples” o jogo no NES não funcionará a menos que o bit de colisão de sprite em PPU seja emulado corretamente.

As opções restantes IMHO são as seguintes:

  1. IBM PC baseado em modo de texto inicial
  2. qualquer uma das máquinas CP / M existentes
  3. (não incluindo quaisquer máquinas “grandes” antes da era “micro”)

O ponto chave aqui está a exibição em modo de texto, que não é tão difícil de emular e muito mais simples de mostrar na máquina host (mesmo sem a necessidade de exibir gráficos pixelados, trabalhe com sistema de janelas / SDL / etc.!).

No entanto, alguma investigação ainda é necessária para coletar programas adequados para trabalhar, incluindo jogos. Existem alguns jogos em modo texto no CP / M, e igualmente devem ser alguns para IBM PC.

Comentários

  • Com uma vantagem potencial de um Máquina CP / M sendo que há ‘ s destinada a ser pelo menos uma para a qual uma mera emulação de 8080 funcionará?
  • Legal, mas, novamente, há não raly muitos jogos para a IBM em modo texto, não é?
  • @Raffzahn – só precisa haver um .
  • @Jules Hehehe … sim, certo. Mas então eu ‘ d diria que um mínimo de 8080 resolverá

Resposta

Um sistema com a menor quantidade de chips personalizados provavelmente seria um alvo mais limpo para emular.

Um Apple II é um dos sistemas mais simples (sem LSI, exceto para a CPU 6502) para o qual uma grande quantidade de jogos (facilmente disponíveis) foram escritos.

Também há muitos livros e artigos (antigos) publicados sobre a arquitetura do sistema do Apple II e da CPU 6502. Assim, o sistema foi razoavelmente bem documentado por fontes múltiplas (citáveis).

Os emuladores para um Apple II podem ser da ordem de 10 mil linhas de código C, possivelmente um pouco menos, o que pode caber em seu período do curso.

Comentários

  • A CPU pode ser simples, mas emular periféricos (tela, etc.) provavelmente ainda seria uma tarefa considerável

Resposta

Supondo que seja qualquer contribuição, estas são minhas notas diretas sobre as máquinas para as quais escrevi emuladores, em ordem cronológica de lançamento aproximada, esperançosamente para oferecer alguma cor nos formatos de arquivo, etc:

Atari 2600

A característica distintiva do Atari 2600 é a sinergia entre processador e saída gráfica; jogos são implementadas uma função em tempo real que fornece componentes gráficos para a saída de vídeo enquanto o raster é executado. Portanto, acho que esta é uma escolha ruim para o propósito declarado – o trabalho realmente difícil de escrever um emulador 2600 é o tempo e a interação fora do microprocessador.

Apple II

Hardware relativamente simples, mas com muitas nuances, com vários modos gráficos, e você precisa se preparar para ensinar vídeo NTSC para ser capaz de decodificar sua saída de cores. Emular o Disco II também é quase obrigatório, mas isso “é uma missão em si, já que os formatos de arquivo mais comuns exigem que você forneça um codificador GCR da Apple.

ZX80 / 81

Também provavelmente muito complicado para o propósito declarado, o conceito central é redirecionar o ciclo de atualização da CPU e um subconjunto de buscas de instruções para fazer a varredura do vídeo. Se você optou por não reimplementar esse mecanismo como o original, você acabaria com apenas o modo de texto padrão da ROM.

Commodore Vic-20

Esta é uma máquina de bitmap simples com um processador simples no 6502 e uma quantidade decente de jogos, alguns dos quais fornecidos em cartucho, dispensando você da necessidade de emular uma fita ou unidade de disco. O único problema são seus 6522s; são combinação de temporizador / chips shifter / entrada / saída com um monte de peculiaridades. Mas uma grande vantagem do Vic-20 é que ele inicializa até o prompt do BASIC sem funcionar com o 6522s, e o BASIC em si funcionará apenas com os temporizadores do 6522 implementados , mesmo que inexatamente.

Seu pouco tempo como líder de mercado antes da chegada do C64 também limita o número de títulos que fazem uso avançado do hardware – há exemplos contemporâneos de corrida raster, como os títulos Imagic , mas eles estão em minoria.

Os formatos de arquivo em que os dados são preservados são uma bagunça , mas limitar-se ao suporte de cartucho e ter o cuidado de usar apenas os títulos fornecidos no cartucho deve evitar esse problema.

ZX Spectrum

Coberto em outro lugar; Acho uma boa escolha. Especialmente se você se limitar aos formatos de arquivo de instantâneo.

Oric 1 / Atmos

Coberto em outro lugar; uma escolha decente, mas há outro daqueles incômodos 6522s lá. A maioria dos jogos está disponível em fita, você precisará oferecer suporte a tudo isso.

Acorn Electron

Bitmap, um 6502 mais uma lógica externa relativamente simples, mas seis modos gráficos diferentes e tempo seriam um aborrecimento – o custo de cada ciclo é uma função da área sendo acessada (ROM versus RAM), o modo gráfico (40 colunas versus 80 colunas modos) e, possivelmente, o estado de saída gráfica atual (os modos de 80 colunas bloqueiam os acessos à RAM durante a região do pixel; os modos de 40 colunas não). Mas você pode modelá-lo como uma máquina de 1 MHz para a maioria dos jogos, e principalmente uma versão de saída gráfica centrada em linha.

Há um pequeno número de jogos disponíveis em ROM, mas felizmente o hardware de fita permitirá principalmente uma emulação de qualidade muito baixa: é do tipo que cria um interromper após o recebimento de bytes, com apenas dois títulos que posso pensar em fazer uma introspecção mais profunda do que isso.

Amstrad CPC

Provavelmente um para evitar para o propósito declarado – ele tem um 6845 CRTC, o que torna a saída de gráficos muito configurável e, portanto, muitos títulos que correm o raster. O uso do disco também foi bastante difundido, mas seu controlador de disco 8272 é um nível adicional de dores de cabeça em comparação com o WD1770 que você verá em outros lugares.

MSX e / ou ColecoVision / SG1000

Diferentes chips de som, mesmo CPU e vídeo.Na verdade, acho que você pode ir muito longe ignorando a interação de tempo porque o chip de vídeo mantém sua própria RAM à distância de um braço. Mas são tiles e sprites, e quatro modos gráficos diferentes, para provavelmente um empreendimento muito substancial para um curso de microprocessamento.

Master System

Tecnicamente um SG1000 aprimorado, sendo tudo o que a máquina faz mais um modo gráfico extra, mas o modo gráfico extra é muito melhor que os outros que apenas um título usa qualquer coisa outro. Então, na verdade, isso simplifica um pouco as coisas se você estiver feliz dentro do reino de ignorar principalmente o tempo.

Mas você ainda está falando sobre fatorar as prioridades do sprite, verificar colisões por pixel etc. Provavelmente demais .

Nota de rodapé: trapaça com acesso à fita

Para muitos dos computadores domésticos mencionados acima, você pode realmente pular a emulação de fita para qualquer coisa que esteja codificada no formato ROM padrão apenas inserindo uma armadilha apropriada para a ROM do sistema e spool do arquivo de origem. Muitos, mas não todos, os títulos dependem inteiramente da ROM embutida para IO de fita, de forma que muitos títulos possam ser carregados sem nenhuma tentativa real de hardware.

Em todos os casos, é um truque de trabalho inútil, mas funcionará se esse lado da emulação não for importante para você – você prefere apenas removê-lo da equação e ignorar o que não funciona.

Especificamente:

Vic-20:

  • se o contador do programa chegar a 0xf7b2, copie o próximo cabeçalho da fita para o local indicado por b3: b2, zerar 0x90 e 0x93, e continuar a partir de 0xf7b5 (já que você está evitando um JSR);
  • trap 0xf90b, verifique se há X = 0xe, então obtenha o próximo corpo de dados de fita e grave na memória emulada de c2: c1, mas não além de af: ae, independentemente do tamanho do corpo, defina o bit 6 em 0x90, limpe os sinalizadores de transporte e interrupção e continue a partir de 0xfccf.

Oric:

Para ROM 1.0, interceptar o PC no endereço 0xe630. Para 1.1, observe o endereço 0xe6c9.

Ao pegá-lo, carregue A com o próximo byte da fita e defina o sinalizador zero de acordo com seu valor.

Então, RTS.

Também há um sinalizador em 0x67 na ROM original, ou 0x24d que distingue entre as codificações de fita rápidas e lentas da máquina, mas o formato de arquivo de fita usual tem apenas os bytes decodificados, para uma rápida e emulação suja, não se preocupe com isso.

Electron:

Instalar NOPs em 0xf4e5, 0xf6de, 0xf6fa e 0xfa51 para desativar os ramos da fita. O sistema operacional tentará agora carregar os dados da fita como se estivessem em uma ROM serial.

Procure o PC em 0xf0a8 e verifique se o X registrador é igual a 14 e o valor no endereço 0x247 é zero. Então você saberá que a ROM está tentando buscar o próximo byte da fita.

Coloque o próximo byte em Y, defina A como 0 e RTS.

O formato de arquivo de fita principal permite que você efetue o spool de bytes diretamente do arquivo (após alguns trechos de navegação triviais gation, e via ZLib ou outro descompressor GZ, embora você possa apenas usar gunzip com antecedência).

ZX Spectrum:

(Este é transcrito de notas muito antigas; pode valer a pena confirmar contra uma desmontagem da ROM)

Prenda o PC atingindo 0x056c na ROM de 48kb. Pegue o próximo bloco da fita (se você usar um arquivo TAP, você o receberá diretamente; eu diria que você não deveria se preocupar em tentar oferecer suporte a TZX neste tipo de projeto).

Se seu comprimento é menor que o valor em DE, redefina o transporte e retorna.

Compare o primeiro byte do bloco com o valor de B. Se eles não corresponderem, redefina o transporte e retorne.

Caso contrário, faça o spool dos primeiros bytes DE que você conseguiu para o endereço apontado por IX, defina o bit inferior de C e defina o carry.

Em seguida, execute um RET diretamente ou simplesmente ignore o PC adiante para 0x05e2, que é o RET que normalmente encerra o carregamento da fita.

As máquinas de 128kb seguem para a ROM de 48kb para o carregamento da fita, então o mesmo hack se aplica, sujeito à verificação do que está sendo exibido. h3> Comentários

  • Boa redação. Concordo com tudo o que foi dito – talvez com dois pequenos complementos para o Apple II. Embora seja verdade que o hardware de vídeo precisa de bastante reflexão, sua sutileza pode ser completamente ignorada na emulação, como apenas o a equivalência de certos padrões de bits deve ser traduzida em cores – se for o caso, como A2, onde muitas vezes é executado com tela monocromática, com a qual pode ser emulado como bitmap simples sem qualquer detalhe adicional. Em segundo lugar, contanto que as Gemes a serem jogadas sejam baseadas em ProDOS, nenhuma emulação detalhada do Disco II é necessária, pois funciona com um hardware diferente.
  • @Raffzahn qual seria a forma mais simples de uma tabela de pesquisa para saída de cor ser?Raciocinando de volta a partir do NTSC e tratando tudo como decomposto em alta resolução dupla, posso imaginar uma tabela indexada por um contador de três bits que representa a fase mais um registro de deslocamento de cinco bits de saída de vídeo para obter meio ciclo de cores com um ponto central. Portanto, uma tabela de 256 entradas. Mas esse ‘ é um raciocínio ingênuo; as pessoas se saíram melhor?
  • @Tommy: Uma abordagem simples é simplesmente usar uma sequência de quatro cores repetida (eu acho (vermelho, amarelo escuro, verde, azul) para pixels de alta resolução dupla e desfoque a tela um pouco. Isso acabará deixando faixas de cores nas coisas, mas monitores reais tendem a fazer isso de qualquer maneira. Como o vídeo da Apple] [está fora das especificações, ‘ não uma ” maneira ” certa de exibi-la, e os monitores reais tendem a exibir as coisas de maneira um pouco diferente.

Resposta

Acho que usar jogos gráficos como um alvo possivelmente está exagerando nos alunos. Executar um jogo geralmente requer uma boa emulação, não apenas do a maioria das funções do processador, mas também muito hardware, não menos importante os circuitos de vídeo (que muitas vezes são bastante complexos e em muitos casos introduzem muitos problemas complicados de temporização). Se algo não funcionar bem, os resultados são provavelmente será muito ruim nomear. Eu sugiro começar com um alvo mais fácil.

Meu objetivo é um sistema que tenha uma interface de modo de texto, em vez de gráfica, porque essas interfaces são geralmente muito mais simples e podem não ter requisitos de tempo específicos que precisam ser atendidos (ou seja, muitas vezes funcionam inteiramente em paralelo ao acesso do processador à memória sem afetar o processador de forma alguma). Eu também recomendaria um sistema que tenha um programa de monitor de nível de máquina integrado, porque isso ajudará a depurar programas rodando na máquina sem a necessidade de implementar um depurador no nível de emulação.

Uma sugestão baseada em meu projeto de pesquisa pessoal atual é o computador Nascom 2. Esta é uma máquina baseada em Z80 relativamente simples com hardware em modo texto que não interage com a CPU (se houver contenção, é resolvido em favor da CPU, o que significa que teoricamente um punhado de pixels em cada quadro pode não ser mostrado se a tela estiver sendo acessada ao mesmo tempo que a atualização é ocorrendo, mas th não é provável que seja particularmente perceptível ou mesmo frequente, por isso dá um resultado utilizável com hardware muito simples). A sincronização precisa, portanto, provavelmente não será especialmente difícil ou importante para esta máquina. O hardware da máquina é simples e bem documentado. Os periféricos integrados são um UART (que pode ser usado para um terminal / impressora remoto ou para carregar e salvar um cassete … o que significa que não há necessidade de emular o manuseio do cassete no nível de áudio, economizando muito tempo de implementação) e um módulo IO paralelo. As ferramentas disponíveis também incentivam a experimentação em linguagem assembly, que imagino ser uma meta desejável para o seu curso.

Uma coisa interessante sobre esta máquina é que há uma lacuna nas opções de emulação disponíveis: o página da web mais conhecida sobre a máquina solicitou um emulador baseado em javascript que eles podem incorporar na página, mas ainda ninguém forneceu um.

Resposta

Eu fiz duas e algumas emulações do zero para o Mac usando Swift. Estas são minhas observações pessoais baseadas na minha experiência.

Nenhuma das minhas emulações é completamente precisa, o que leva a alguns problemas.

Commodore PET

Esta foi a primeira emulação que escrevi. Você precisa de, no mínimo, uma emulação 6502, uma emulação PIA, uma emulação VIA e uma emulação de vídeo.

O 6502 é realmente simples e um processador excelente para começar. Também está muito bem documentado. O site Visual6502 foi inestimável para descobrir o comportamento exato das instruções em que a documentação era ambígua. Como um aparte, escrevi uma emulação de um processador ligeiramente posterior (esqueci qual) que preencheu alguns dos as lacunas no conjunto de instruções. Isso tornou a escrita do código de teste 6502 muito mais fácil (mesmo apenas PHX e PHY torna algumas coisas mais simples. por outro lado, qualquer software que usasse as “instruções não documentadas” do 6502 original quebrará em minha emulação.

O PIA e o VIA são chips IO relativamente simples de emular. O driver de vídeo pode ser tão simples quanto lendo a RAM da tela, traduzindo para ASCII ou uma aproximação aproximada e desenhando o texto resultante em uma janela. Por fim, criei um conjunto de bitmaps que eram cópias precisas do conjunto de caracteres PET.

Meu principal recurso para o PET era “Programando o PET / CBM” do Raeto West. Tenho uma cópia original, mas há PDF ver sessões on-line. Além disso, é importante a disponibilidade de ROMs BASIC e KERNAL.Você não quer reescrever o sistema operacional.

Emular a unidade de fita era um PITA. Minha versão do software era menos confiável do que a real, o que os proprietários de PET sabem que está realmente dizendo algo. O problema, pensei, é que ele depende de pulsos de temporização precisos de ciclo e, embora meu emulador conte os pulsos de clock, ele não invocou necessariamente a interrupção do temporizador no momento certo.

Tive mais sucesso ao escrever uma emulação das unidades de disco duplo. Isso exigia uma emulação IEEE 488 robusta também, mas a emulação do drive de disco era bem fácil. Não é uma emulação de hardware, apenas pega os comandos enviados pelo PET e os executa usando arquivos simples no disco rígido do Mac.

No final, escrevi um código que interromperia o emulador, injete diretamente um arquivo de programa na memória e inicie o emulador novamente. Isso acabou sendo muito mais conveniente do que emular discos ou fitas, que parei de trabalhar neles.

Meu emulador funciona bem o suficiente com a maioria dos códigos PET. Infelizmente, há um problema com PET Space Invaders – provavelmente causado pelo código do teclado – então ele não reconhece os pressionamentos de tecla corretamente. Além disso, não tentei resolver a geração de som.

Sinclair ZX Spectrum

De certa forma, isso é ainda mais fácil do que PET. Você precisa escrever um emulador Z80 que é mais complexo do que o 6502, mas há um conjunto de testes CPM que você pode usar para verificar muitas de suas funcionalidades, você só precisa emular a sub-rotina de saída de caracteres do CPM para torná-lo viável.

Os únicos outros chips que você precisa emular são o ULA e você não precisa fazer muito disso se estiver preparado para abrir mão de uma unidade de fita. Além disso, o gerador de vídeo, que é um pouco estranho na maneira como aborda a RAM da tela.

A coisa realmente legal sobre o Spectrum é que a tela está sempre em modo bitmap e o sistema operacional cria caracteres diretamente escrever os padrões de pixel de gravação. Você não precisa se preocupar com um conjunto de caracteres porque ele está lá magicamente quando você inicializa o emulador com as ROMs do Spectrum carregadas.

Eu coloquei o Spectrum no ponto em que pude carregar e executar o Manic Miner e era jogável, embora sem som. Demorou cerca de três meses trabalhando talvez oito horas por semana do início ao fim.

Commodore 64

Este é um trabalho em andamento. Obviamente, eu já tinha um 6502, que modifiquei para me dar a porta IO do 6510. Até agora, ele faz o banco alternando corretamente, parte da funcionalidade CIA é implementada e funcionalidade VIC II suficiente é emulada para me dar um equivalente PET, ou seja, o modo de texto normal está funcionando. Além disso, a borda e a memória de cores de caracteres estão funcionando.

Eu ainda tenho os modos gráficos mais complicados para emular e sprites e devo ser capaz de fazer algo com o som porque é um chip separado, não confio no tempo preciso da CPU.

TL; DR

A emulação mais fácil, além da CPU era o espectro. Provavelmente começaria com isso, embora um antigo computador baseado em CP / M 8080 possa ser ainda mais fácil se você conseguir obter o CP / M.

Observações adicionais

Você provavelmente precisará de um bom cross assembler para sua plataforma de destino. Torna-se muito tedioso montar código manualmente para testes de unidade.

Além disso, um desmontador será útil. Eu não tive que desmontar as ROMs do Commodore BASIC porque as desmontagens estão disponíveis gratuitamente na Internet. Mas quando eu estava tentando fazer o Space Invaders funcionarem, a princípio não funcionou e o desmontador foi inestimável para solucionar problemas.

Por esta razão, o conjunto cc65 apresenta um forte argumento para começar com uma máquina baseada em 6502. Tem um bom montador e um excelente desmontador incluído. A situação do Z80 não era tão boa, mas no final encontrei um montador razoável chamado z80asm. Eu acho que tive que compilá-lo a partir do código-fonte.

Além disso, você precisará de uma boa documentação sólida. Novamente, a documentação do 6502 está online é virtualmente incomparável. Documentos são menos acessíveis para o Spectrum, mas é tão simples, você pode se safar com uma emulação ULA de qualidade inferior.

Resposta

Junto com todas as outras boas sugestões, como uma alternativa para Z-80 e CP / M, você pode considerar um sistema Motorola 6809 genérico para executar FLEX ou possivelmente OS-9 , ambos inspirados no Unix. Como um sistema baseado em CLI, não há necessidade de acertar o tempo.

Além disso, se você estiver construindo o simulador, é como construir o hardware; portar o sistema operacional foi um tarefa real – que eu fiz na década de 1980 – em oposição a uma tarefa de clonar algo-para-educação.”Ele inicializa o sistema operacional e executa os programas?” é um alvo muito realista.

Como ele está executando um sistema operacional portátil executado em hardware de muitos fabricantes diferentes, isso significa que os alunos não têm apenas uma maneira de fazer isso. O aluno A pode construir uma exibição de mapa de bits; o Aluno B pode fazer um UART e ter uma interface serial. Alguns podem tentar fazer todos os ciclos corretos; alguns podem tentar apenas fazer todas as operações corretas. Portanto, em vez de simplesmente tentar copiar algo sem necessariamente compreender o original restrições de design, os alunos estão envolvidos em uma questão de engenharia adequada: qual é uma boa maneira de fazer isso?

CPU

  • O 6809 era único na época em que era possível escrever código totalmente independente de posição, que seria executado de forma idêntica onde quer que estivesse na memória.
  • O conjunto de instruções era quase inteiramente ortogonal
  • Como uma CPU de 8 bits com barramento de endereços de 16 bits, é muito simples
  • O mecanismo de exceção e eficaz -manipulação de endereço é muito parecida com os processadores modernos
  • Como um projeto da Motorola, ele tinha IO mapeado em memória em vez de instruções IO especiais
  • Mais fácil de fazer do que Z-80 (muito menos instruções ) ou 6502 (menos casos especiais)
  • Material via https://en.wikipedia.org/wiki/Motorola_6809

FLEX foi projetado como um sistema inspirado em Unix para CPUs de 8 bits

  • Ele foi projetado especificamente para portabilidade e para colocá-lo para inicializar exigiu muito poucas chamadas de sistema para ser implementado – acho que apenas leitura / gravação de caracteres, leitura / gravação de bloco de disquete e algum tipo de inicialização (setor de leitura e salto para ele).
  • Agnóstico de hardware para essas funções básicas, o que torna a simulação muito mais fácil
  • É estimulante escrever apenas algumas funções e inicializar um sistema operacional inteiro
  • Sem gráficos com que se preocupar (o que é positivo ou negativo dependendo da sua opinião)
  • Muito material disponível, f ind via https://en.wikipedia.org/wiki/FLEX_(operating_system)

OS-9 semelhante em intenção

  • Mais semelhante ao Unix do que FLEX, um pouco mais difícil de portar, pelo que me lembro
  • Posteriormente transferido para 68000
  • Muito material disponível, encontre em https://en.wikipedia.org/wiki/OS-9

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *