O processador 6502 existe há mais de 40 anos e ainda é usado em vários sistemas embarcados. A WDC continua produzindo chips periféricos das séries 65C02 e 65Cxx. O autor descobriu que agora eles estão disponíveis nos pacotes PLCC e QFP, mas essas opções de chip raramente são usadas. Microcircuitos em pacotes DIP não estão mais disponíveis, uma vez que a demanda dos fabricantes caseiros é muito pequena. O autor decidiu criar o menor quadro único no 6502, o que ele pode. É possível que o menor processador de placa única fabricado em casa conhecido neste processador (não feito por conta própria e menos, por exemplo, Tamagotchi). O resultado é um dispositivo no qual você pode desenvolver opcionalmente uma caixa de pulso com uma alça. A tela foi tirada do Nokia 5110, o shell foi escrito com uma interface bonita e, talvez, tenha sido o único relógio inteligente do 6502.
O relógio contém: um processador 65C02 com uma frequência de clock de 8 MHz, um chip 65C22, um LCD de controle e botões de busca na placa e um teclado externo, um display Nokia 5110 (84x48 pixels), 32 kB de RAM estática, 16 kB de ROM no espaço de endereço. A tensão de alimentação é de 3,3 V.
E o mais importante: como uma estação de acoplamento, você pode conectar a matriz do teclado do Commodore 64 ao conector na placa, obtendo algo semelhante ao Seiko UC-2000 (
revisão em Habré ):
Circuito e topologia da placa de circuito impresso compilada no KiCad. As dimensões da placa de dupla face são 3 x 1,5 polegadas. Todos os componentes são SMD, exceto o painel PLCC, além de conectores para o teclado e o LCD.
A topologia na ilustração não está em escala. A aparência do quadro antes da montagem:
Depois:
Arquivo (circuito, placas, firmware, etc.)
No relógio, você pode executar vários aplicativos internos. Um deles, o G'Mon (Monitor Genérico), é a principal ferramenta de desenvolvimento e depuração. Ele permite visualizar e editar o conteúdo da memória em células e fragmentos separados, alternar para programas, preencher as seções de RAM com o byte especificado e mover fragmentos pelo espaço de endereço. A versão do monitor usada no relógio é simplificada para que, além disso, o EhBasic se encaixe na ROM. Ele mal entrou nele, restam apenas ~ 100 bytes livres. O intérprete é refeito de maneira a poder combinar com o núcleo. Por sua vez, contém todas as rotinas de inicialização, trabalha com interfaces externas e o relacionamento de todos os softwares disponíveis. E outra aplicação - o menu principal.
Uma quantidade significativa do kernel é ocupada por código que interage com o LCD do Nokia 5110 através do protocolo SPI implementado por software até 6522. Os subprogramas WriteBYTE e Command enviam dados e comandos gráficos para o LCD, respectivamente. Como não há modo de texto de hardware, os procedimentos para enviar caracteres para a tela são gravados. O gerador de caracteres é armazenado na ROM e é representado por duas tabelas de pesquisa: uma para o byte alto e a outra para o byte baixo. Juntos, eles indicam a posição absoluta do byte de caractere inicial na ROM. A rotina de gravação deve ser executada após o código ASCII ser gravado na bateria do processador e também é usado como coordenada X para tabelas de pesquisa. A rotina primeiro grava o código ASCII no buffer de tela na memória. Em seguida, ela procura os dados do bloco correspondente e define um ponteiro para ele. Exibindo 8 bytes consecutivos do ponteiro, ele chama a sub-rotina CCheck. Isso programaticamente verifica a posição do cursor e, se a tela estiver cheia, chama a sub-rotina Scroll, que desloca a imagem em uma linha de texto. Como o autor não implementou a leitura no controlador LCD, o texto é indexado de acordo com a posição do cursor e gravado no buffer na memória. A sub-rotina Scroll exibe as três linhas inferiores do buffer até as três principais linhas no LCD e preenche a linha inferior com espaços. A rotina restante para trabalhar com LCDs é CReturn. Ele pesquisa na tabela de pesquisa a posição inicial da próxima linha e, se a linha atual não estiver na parte inferior, aumenta a posição do cursor em um. Se a linha inferior - chamar o procedimento de rolagem e só então termina.
O teclado é pesquisado através do 6522 pela sub-rotina GetKey. Ele lê a matriz do teclado linha por linha e grava bytes na memória. Se algum bit for zero, ele determina o código ASCII da tecla pressionada na tabela de pesquisa. Basicamente, o código não contém ciclos para funcionar o mais rápido possível. Sub-rotinas para converter determinados bits em índices não usam tabelas de pesquisa, mas, como resultado, o código acabou sendo bastante grande e ineficiente.
Vídeo:
O autor não trabalha mais neste firmware, ele mudou para outros projetos. Ele espera que o código seja útil para quem deseja controlar o LCD do Nokia 5110 de uma placa única para o 6502. As rotinas correspondentes podem ser facilmente transferidas para outro software. Os mais importantes são Write, Write_NS, Command, WriteBYTE, LCDInit, LCDClear, CCheck, CCheck_NS, CReturn, Scroll e SETCursor. Outras rotinas úteis são LCDHome e WriteBMP. É necessário colocar as variáveis LCDCursor, GTmp, GTmp5 e GTmp6 na memória, bem como a tabela Screen com 84 bytes de comprimento. Além deles, são necessárias tabelas de consulta CRTbl, CTableX e CTableY, bem como bitmaps Char e Char2 com todos os blocos.
Se você deseja criar outros conjuntos de blocos, use os modelos da pasta Assets. No GIMP, exporte o bitmap para um arquivo .data no formato RGB (não RGBX). Não preste atenção ao arquivo .pal e coloque o arquivo .data na pasta BitConvert do arquivo morto. Execute Convert.sh filename.data para obter o arquivo FONT.bin, que será o conjunto de blocos.