Arqueologia Digital

Ano 1 · Ano 2 · Ano 3 · Ano 4 · Ano 5 · Ano 6 · Ano 7 · Ano 8 · Ano 9

Tópicos › Quarto ano › Engenharia reversa do teclado Technics KN5000

Engenharia reversa do teclado Technics KN5000

O assunto que mais ocupou o grupo foi o projeto de Felipe "Juca" Sanches de emular no MAME o teclado Technics SX-KN5000. O trabalho começou com a dessoldagem das mask ROMs e um driver preliminar do KN1500. Depois Felipe decifrou a compressão do arquivo de atualização, mapeou o hardware a partir do firmware e do service manual e extraiu a ROM de dados rítmicos pela função de backup em disquete. Para estudar o código, corrigiu o disassembler TLCS900 do MAME e iniciou o port do GNU binutils para a CPU.

Quarto ano: novembro de 2020 a outubro de 2021

Dessoldagem e leitura das ROMs

Felipe treinou dessoldagem e encomendou soquetes SOIC44 para ler no TL866CS as mask ROMs dessoldadas pelo técnico Ronaldo Verardo. Depois analisou a ROM de boot da sub-CPU, que fica em barramento separado e para cujo encapsulamento ele não encontrou adaptador. Fez ainda o dump da ROM de dados rítmicos pelo backup em disquete e comprou uma placa-mãe de reposição.

Teclados Technics (KN5000, KN7000 e outros): todos os anos ›

5 mar 2021 Technics SX-KN5000: preparação para ler as mask ROMs ★★★

Felipe "Juca" Sanches comprou um soprador de ar quente e passou a treinar a dessoldagem de CIs em placas de sucata; L. e FTMaciel comentaram ferramentas de dessoldagem. Ele encomendou soquetes SOIC44 com adaptadores para DIP, para ler no TL866CS as mask ROMs dessoldadas da placa principal do teclado Technics SX-KN5000 (duas CPUs Toshiba TLCS-900/H, dois DSPs, LCD colorido e drive de disquete), cujo service manual foi compartilhado. Felipe explicou que núcleos de CPU menos usados no MAME, como o TLCS-900, tendem a estar incompletos para novos firmwares. Ele também buscou o service manual do KN1500 no elektrotanya, que estava com defeito e voltou a funcionar dias depois.

Participantes: Felipe "Juca" Sanches, L., FTMaciel, Flávio Amieiro

Ir para o início da conversa · mensagens-chave: #12542 · #12591

11 mar 2021 ROMs do KN5000 dessoldadas e a cola sob os CIs ★★

Felipe "Juca" Sanches mostrou o vídeo da dessoldagem das ROMs do KN5000 feita por Ronaldo Verardo, o técnico de quem comprou o teclado. O grupo discutiu se o material sob os CIs era cola ou fluxo; Ronaldo explicou que é cola, necessária porque a solda é feita por onda, e mostrou a ponteira que fez com fio rígido. Também se comentou o gerador de som "Dynamic PCM" do teclado.

Participantes: Felipe "Juca" Sanches, Flávio Amieiro, Erin Pinheiro 🐿, FTMaciel, Aylons Hazzud, Ronaldo Verardo

Ir para o início da conversa · mensagens-chave: #12653 · #12662

1 ago 2021 ROM de boot da sub-CPU do KN5000 e módulo de disco rígido ★★

Pelo diagrama de blocos do manual de serviço, Felipe "Juca" Sanches concluiu que a mask ROM de 1 Mbit da sub-CPU, que controla DSPs e o gerador de tons, fica em um barramento separado, inacessível pela CPU principal. Como alternativa, considerou ler o chip diretamente ou modificar a parte do programa da sub-CPU guardada em flash. Citou também o raro módulo opcional de disco rígido HDAE5000.

Participantes: Felipe "Juca" Sanches, Augusto Almeida

Ir para o início da conversa · mensagens-chave: #13871 · #13878

12 ago 2021 Dump de memória do KN5000 via backup em disquete ★★★

Felipe "Juca" Sanches alterou no firmware o ponteiro dos "factory settings" para outra região. Depois de restaurar as configurações de fábrica e gravar um backup, o disquete passou a conter a memória apontada. Assim descobriu que a flash fica espelhada em 0xC00000 e fez o dump da ROM de dados rítmicos (1 MB). Depois disso o teclado ficou sem som mesmo com a imagem original reinstalada; Felipe apontou como possível causa ter alterado o mapeamento do chip select /CS2.

Participantes: Felipe "Juca" Sanches, Flávio Amieiro, Elson (McGuyver) ☠️, FTMaciel

Ir para o início da conversa · mensagens-chave: #14099 · #14112 · #14153

16 ago 2021 Mask ROM da sub-CPU do KN5000 ★

Felipe "Juca" Sanches compartilhou uma planilha e analisou a mask ROM de boot da sub-CPU, compatível pino a pino com uma M27C1001 e alimentada a 5 V. O encapsulamento parece ser TSSOP32, e ele não encontrou adaptador para o leitor.

Participantes: Felipe "Juca" Sanches, Erin Pinheiro 🐿

Ir para o início da conversa · mensagens-chave: #14218 · #14228

19 ago 2021 Nova placa-mãe do KN5000 e ideia de sniffer do painel ★

Felipe "Juca" Sanches comprou outra placa-mãe de KN5000 como reposição. Para fazer emulação de alto nível dos microcontroladores do painel de botões, propôs capturar o protocolo serial com uma rotina residente instalada no vetor de interrupções. Ismael Luceno sugeriu o Bus Pirate, e Felipe abriu uma enquete sobre as mensagens do projeto.

Participantes: Felipe "Juca" Sanches, Ismael Luceno, Flávio Amieiro

Ir para o início da conversa · mensagens-chave: #14259

Driver do KN1500 no MAME

Como preparação para o KN5000, Felipe esboçou um driver do Technics KN1500 no MAME, explicou a mudança de licença do MAME e escaneou o LCD do aparelho, com todos os segmentos acesos por um Arduino, para criar um layout SVG.

Teclados Technics (KN5000, KN7000 e outros): todos os anos ›

15 mar 2021 Driver do Technics KN1500 no MAME e licença do MAME ★★★

Felipe "Juca" Sanches esboçou um driver de emulação do teclado Technics KN1500 no MAME, ainda sem funcionar, como preparação para o KN5000. Flávio Amieiro sugeriu um vídeo explicando um driver do MAME. Felipe indicou sua palestra do FISL15 e explicou a mudança de licença do MAME: antes a licença proibia uso comercial; hoje o núcleo é BSD-3-clause e código GPL é aceito apenas em drivers.

Participantes: Felipe "Juca" Sanches, Flávio Amieiro

Ir para o início da conversa · mensagens-chave: #12733 · #12752

20 mar 2021 Escaneamento do LCD do KN1500 para layout SVG do MAME ★★

Felipe "Juca" Sanches observou que a variante da CPU do KN5000 (barramento de 32 bits) provavelmente ainda não existe no MAME. Ele programou um Arduino para acender todos os segmentos do LCD do Technics SX-KN1500, escaneou o display e está vetorizando a imagem para criar um layout SVG para o MAME.

Participantes: Felipe "Juca" Sanches

Ir para o início da conversa · mensagens-chave: #12811 · #12812

Compressão do arquivo de atualização

Com sugestões de RicBit, Felipe decodificou o formato comprimido do arquivo de atualização: um byte-mapa indica dados crus ou referências a um buffer circular de 4 KB. Ele publicou o descompressor em Python, localizou gráficos da interface no firmware e criou o repositório kn5000_homebrew. Um membro da comunidade MAMEDev observou que o algoritmo é quase idêntico ao LZSS, o que Felipe associou à assinatura "SLIDE4K" do cabeçalho.

Teclados Technics (KN5000, KN7000 e outros): todos os anos ›

22 jul 2021 Análise da compressão do arquivo de update do Technics KN5000 ★★★

Felipe "Juca" Sanches pediu ajuda a RicBit para identificar a compressão do arquivo de instalação de sistema do teclado Technics SX-KN5000 (Kn5kv10.img), no qual apareciam fragmentos de strings. RicBit sugeriu LZ77/LZ78 e explicou as diferenças, e Felipe começou a decodificar exemplos como "FOOT CONTROLLER". O objetivo era descomprimir o arquivo para estudar o código e obter mais informações sobre o hardware.

Participantes: Felipe "Juca" Sanches, RicBit, L.

Ir para o início da conversa · mensagens-chave: #13617 · #13623

23 jul 2021 Algoritmo de compressão do firmware do KN5000 decifrado ★★★

Felipe "Juca" Sanches alterou uma string no arquivo de update e o instalou no teclado, mostrando que o processo não valida checksum. Depois descreveu o formato: um byte-mapa indica se os próximos dados são crus ou referências de 2 bytes a trechos de um buffer circular de 4 KB. Em 27/07 publicou o script em Python que descomprime o arquivo HKMSPRG.SLD; a CPU do aparelho é a Toshiba TLCS900H.

Participantes: Felipe "Juca" Sanches, RicBit, kretcheu, Ronaldo Verardo, Hugo (Agaelebê)

Ir para o início da conversa · mensagens-chave: #13661 · #13680 · #13683

27 jul 2021 Gráficos do firmware do KN5000, repositório kn5000_homebrew e LZSS ★★★

Com o firmware descomprimido, Felipe "Juca" Sanches localizou com o binxelview gráficos da interface (FADE IN/OUT, logotipo Technics, diagramas MIDI) e criou o repositório kn5000_homebrew. Um membro da comunidade MAMEDev observou que o algoritmo é quase idêntico ao LZSS, e Felipe associou a isso a assinatura "SLIDE4K" do cabeçalho. A recompressão com o pacote lzss do PyPI deixou os instrumentos com mensagem de erro e o teclado sem som; Felipe notou que o pacote inicializa o buffer com espaços (0x20) e não com zeros, mas a imagem modificada ainda saía corrompida.

Participantes: Felipe "Juca" Sanches, Erin Pinheiro 🐿, L., RicBit, kretcheu, Aylons Hazzud, Ronaldo Verardo

Ir para o início da conversa · mensagens-chave: #13729 · #13754 · #13774

Mapa de hardware, boot e emulação no MAME

No debugger do MAME, Felipe identificou um controlador compatível com VGA. Também localizou a imagem da flash no espaço de endereçamento e analisou o boot, o vetor de interrupções e a comunicação por micro-DMA entre as duas CPUs. Publicou o branch do MAME com os drivers do KN1500 e do KN5000 e corrigiu o disassembler TLCS900 para os registradores de DMA da TLCS-900/H2.

Teclados Technics (KN5000, KN7000 e outros): todos os anos ›

31 jul 2021 Controlador compatível com VGA no KN5000 ★★★

No debugger do MAME, Felipe "Juca" Sanches reconheceu no firmware do KN5000 acessos às portas 3C4/3C5 e 3C8/3C9 típicos de VGA e encontrou a inicialização da paleta de 8 cores básicas. O esquemático confirmou o sinal VGA.IOCS, com as portas mapeadas a partir de 0x170000. Ele também documentou os chip selects de disquete, HDD opcional e porta paralela.

Participantes: Felipe "Juca" Sanches, L., Augusto Almeida

Ir para o início da conversa · mensagens-chave: #13802 · #13844 · #13854

1 ago 2021 Modo texto VGA no KN5000 e localização da imagem da flash ★★★

Felipe "Juca" Sanches alterou a paleta de cores do teclado e escreveu em assembly TLCS900H uma inicialização de modo texto VGA baseada no DOSBox, que resultou em tela preta; passou então a consultar o livro de Ferraro. Buscando instruções ret separadas pela distância entre duas rotinas conhecidas, concluiu que o conteúdo da flash corresponde aos primeiros 2 MB do arquivo descomprimido, mapeados no topo do espaço de endereçamento da CPU, e encontrou o ponto de entrada da CPU principal.

Participantes: Felipe "Juca" Sanches, L., RicBit

Ir para o início da conversa · mensagens-chave: #13945 · #13992 · #13994

8 ago 2021 CPU TMP94C241 no MAME e análise do boot do KN5000 ★★★

Felipe "Juca" Sanches estava transcrevendo as tabelas de SFRs das quatro variantes de TLCS900 suportadas pelo MAME e analisou o código de boot do KN5000 (watchdog, portas de I/O, timers, chip selects), chegando ao mapa de memória. Levantou a hipótese de que o boot ocorre pela "table data ROM", da qual tinha apenas metade do dump, e implementou de forma preliminar timers, interrupções, seriais e ADC no emulador.

Participantes: Felipe "Juca" Sanches

Ir para o início da conversa · mensagens-chave: #14019 · #14025

11 ago 2021 Vetor de interrupções do KN5000 e branch do MAME ★★★

A emulação travava num loop que espera variáveis alteradas por rotinas de interrupção. Felipe "Juca" Sanches explicou o vetor a partir de 0xFFFF00 (entry point 0xEF03C6) e listou, cruzando com o datasheet, os endereços de cada rotina de tratamento a implementar. Ele também publicou seu branch do MAME com a emulação em andamento dos teclados KN1500 e KN5000. RicBit comentou que esse tipo de loop é comum em jogos de Master System.

Participantes: Felipe "Juca" Sanches, RicBit

Ir para o início da conversa · mensagens-chave: #14058 · #14075 · #14082

22 ago 2021 KN5000 recuperado e protocolo entre as duas CPUs ★★★

Felipe "Juca" Sanches recuperou o teclado: o problema era um disquete de instalação corrompido, e uma cópia gerada com dd a partir da imagem oficial resolveu. Em seguida analisou a rotina da INT0 (0xEF3525), que lê o registrador de comunicação com a sub-CPU em 0x140000 e dispara micro-DMA no canal 0. Na rotina de fim desse DMA, os 3 bits altos do byte recebido indexam uma jump table em 0xE00012.

Participantes: Felipe "Juca" Sanches, kretcheu

Ir para o início da conversa · mensagens-chave: #14304 · #14322

22 ago 2021 Correção do disassembler TLCS900 do MAME (LDC e registradores de DMA) ★★★

Felipe "Juca" Sanches encontrou um bug no disassembler do MAME na instrução LDC para registradores de controle de micro-DMA. Pelo manual do compilador Toshiba, viu que a TLCS900/H2 usa endereços de registradores diferentes; compilou código C com o compilador proprietário para obtê-los e corrigiu o disassembler. Com isso identificou a rotina que configura os canais DMA 0 e 2 entre as CPUs e planeja substituir aos poucos o código original por implementações próprias em C.

Participantes: Felipe "Juca" Sanches, Augusto Almeida, kretcheu, Julio

Ir para o início da conversa · mensagens-chave: #14365 · #14374 · #14382

Port do GNU binutils para o TLCS900

Depois de considerar as opções levantadas pelo grupo (o compilador oficial da Toshiba, encontrado por Leonardo Roman, o libcpu e o sdcc), Felipe começou o port do GNU binutils para o TLCS900, a começar pelo disassembler, que compara com o do MAME. Ele pausou a engenharia reversa do teclado para fazer esse toolchain e, depois de uma pane de HD, concluiu que precisa documentar melhor o trabalho em público.

Teclados Technics (KN5000, KN7000 e outros): todos os anos ›

13 ago 2021 Toolchain para TLCS900: compilador Toshiba e port do binutils ★★★

Em busca de um compilador ou assembler para TLCS900, Leonardo Roman encontrou no Internet Archive o compilador oficial da Toshiba, e RicBit sugeriu o libcpu, que Felipe "Juca" Sanches avaliou como aparentemente abandonado e que não compilou para ele. Ismael Luceno sugeriu o sdcc, que segundo Leonardo Roman suporta apenas o TLCS90. Felipe retomou a ideia de 14 anos antes (tlcs900archc) e iniciou o port do GNU binutils, começando pelo disassembler, como passo para o assembler e um futuro port do GCC.

Participantes: Felipe "Juca" Sanches, RicBit, Leonardo Roman, Ismael Luceno, Deleted Account

Ir para o início da conversa · mensagens-chave: #14182 · #14190 · #14250

30 ago 2021 Primeiros resultados do objdump para TLCS900 ★★

Felipe "Juca" Sanches mostrou o disassembly do objdump de seu port do binutils lado a lado com o do MAME. Por ora o disassembler mostra os SFRs apenas por endereço numérico, e o próximo foco é o assembler.

Participantes: Felipe "Juca" Sanches

Ir para o início da conversa

2 set 2021 Progresso do disassembler da CPU do Technics KN5000 ★

Respondendo a kretcheu, que pediu notícias, Felipe "Juca" Sanches relatou commits que implementam o disassembly de mais instruções da CPU do teclado, embora ainda faltasse muito para terminar o assembler e o código tivesse muita repetição. Quando L. sugeriu um link do Hackaday que talvez ajudasse com o teclado, Felipe disse que tinha pausado a engenharia reversa do teclado para fazer o toolchain da CPU dele, que pretende usar para escrever código e inspecionar o funcionamento do teclado sem digitar opcodes num editor hexadecimal.

Participantes: kretcheu, Felipe "Juca" Sanches, L.

Ir para o início da conversa · mensagens-chave: #14403 · #14405 · #14424

19 set 2021 Método do disassembler TLCS900 e mapa de memória do KN5000 ★★

Felipe "Juca" Sanches explicou que implementa o disassembler do TLCS900 no binutils usando a tabela de opcodes do datasheet e compara a saída com o disassembler do MAME, testando com a ROM de boot do KN5000. Disse que deduziu o mapa de memória juntando o esquemático do service manual com a rotina de boot que configura os chip selects; por enquanto o driver usa um mapa estático. O teclado custava 5 mil reais em 1996.

Participantes: Felipe "Juca" Sanches, Deleted Account, Shideravan

Ir para o início da conversa · mensagens-chave: #15046 · #15052 · #15056

25 set 2021 Pane de HD e documentação do uso do binutils ★

Felipe "Juca" Sanches contou que uma pane no HD do notebook fez o histórico do shell voltar três semanas; o código estava em git público. Uma imagem postada antes no grupo lembrou a ele o comando de disassembly com binutils, e ele concluiu que precisa documentar melhor seu trabalho num lugar acessível ao público.

Participantes: Felipe "Juca" Sanches

Ir para o início da conversa · mensagens-chave: #15628 · #15631

O projeto explicado e os planos para o futuro

Felipe explicou a Shideravan o hardware do teclado e o estado do driver, disse que provavelmente usaria o KN5000 como controlador MIDI durante o desenvolvimento e considerou o SerenityOS como base de um sistema livre para o teclado, concluindo que talvez seja melhor fazer um do zero.

Teclados Technics (KN5000, KN7000 e outros): todos os anos ›

18 set 2021 Projeto de emulação do Technics KN5000 explicado a Shideravan ★★★

Felipe "Juca" Sanches explicou o projeto: o driver incompleto do KN5000 no MAME fica no branch technics_keyboards e ainda mostra tela preta, enquanto ele porta as ferramentas GNU (binutils, talvez o gcc) para o TOSHIBA TLCS900. O teclado tem duas CPUs TOSHIBA (uma para a interface e os periféricos, outra para o som), dois DSPs, um gerador de som custom, um controlador de disquete e um controlador VGA; o service manual traz o circuito completo. Também comentou drivers de teclados Ensoniq no MAME e a tentativa de emular o GranTrak10. Shideravan lembrou que a CPU é usada no Neo Geo Pocket, e Felipe disse esperar que o toolchain ajude o homebrew desse console.

Participantes: Felipe "Juca" Sanches, Shideravan

Ir para o início da conversa · mensagens-chave: #14928 · #14938 · #14969

19 set 2021 FPGASID e controladores MIDI para drivers de teclados no MAME ★

Ismael Luceno compartilhou o FPGASID, reimplementação do SID em FPGA, uma das poucas com os filtros em analógico. Shideravan perguntou por um teclado só de entrada para o PC, e os participantes indicaram controladores MIDI USB. Felipe "Juca" Sanches sugeriu usá-los com os drivers de teclados do MAME, disse que provavelmente usaria o próprio KN5000 como controlador MIDI durante o desenvolvimento do driver e contou que comprou o teclado no Mercado Livre, junto com um segundo quebrado para dumpar as ROMs.

Participantes: Ismael Luceno, Shideravan, Erin Pinheiro 🐿, Felipe "Juca" Sanches, Deleted Account

Ir para o início da conversa · mensagens-chave: #15096 · #15103

29 set 2021 SerenityOS como base de um sistema livre para o KN5000 ★★

Felipe "Juca" Sanches encaminhou uma mensagem de L. com o PR que adiciona suporte a skins do WinAmp ao SerenityOS, começou a compilar o sistema e perguntou se ele poderia servir de base para um sistema livre no KN5000. L. respondeu que o SerenityOS roda em x86/x64, com port para ARM começando, e perguntou se a CPU do teclado tem MMU. Felipe concluiu que talvez seja melhor fazer do zero, mas que é cedo para pensar nisso.

Participantes: Felipe "Juca" Sanches, L., Augusto Almeida, FTMaciel, Shideravan

Ir para o início da conversa · mensagens-chave: #15680 · #15727