Ano 1 · Ano 2 · Ano 3 · Ano 4 · Ano 5 · Ano 6 · Ano 7 · Ano 8 · Ano 9
Tópicos › Sexto ano › Emulação do Technics KN5000
Felipe "Juca" Sanches dedicou boa parte do ano a emular no MAME o teclado musical Technics KN5000. Primeiro começou um disassembler da CPU TLCS-900 e estudou o firmware. Depois começou a preparar o pull request do driver, corrigiu o tratamento de interrupções e reuniu versões do firmware. No teclado físico, trocou a placa do painel e procurou formas de fazer o dump das ROMs sem sobrescrevê-las.
Sexto ano: novembro de 2022 a outubro de 2023
Felipe começou, com base no ExecTrace, um disassembler da CPU Toshiba TLCS-900/H e documentou as jump tables do firmware. RicBit sugeriu melhorias no código e Leonardo Roman compartilhou o manual da CPU. Felipe também encontrou símbolos de depuração no binário e comprou um Neo Geo Pocket Color, que usa a mesma CPU.
Felipe "Juca" Sanches começou um disassembler da CPU Toshiba TLCS-900/H, usada no teclado Technics KN5000 e no Neo Geo Pocket, com base no ExecTrace, depois de uma tentativa anterior com o GNU binutils. Ele propôs rotinas para detectar cartuchos de Neo Geo Pocket e vetores de boot. Na primeira etapa, desmontou 184 instruções em sequência a partir do ponto de entrada do firmware. O próximo passo é marcar as instruções de desvio. Quando L. perguntou sobre suporte a MIDI no MAME para o teclado emulado, ele respondeu que já existe.
Felipe "Juca" Sanches explicou como documenta as jump tables do firmware do KN5000 (por exemplo, a de 4 ponteiros em 0xFCB6F9, declarada com read_jump_table) para que o disassembler encontre mais rotinas. Ele também encontrou tabelas de 192 ponteiros e procura falhas de verificação de índice que permitam executar código para depurar seu descompressor. Ao publicar o código, RicBit identificou um trecho acidentalmente quadrático e sugeriu usar set() e match case, e Leonardo Roman compartilhou o manual do TLCS-900 de 1994 para resolver instruções desconhecidas. Felipe ainda citou a mesa Sony PVE-500, que usa CPUs TLCS-Z80 e tem driver no MAME.
Felipe "Juca" Sanches comprou no eBay um Neo Geo Pocket Color, que usa a mesma CPU do KN5000, e discutiu o que fazer com ele, como portar a VM do Another World, que esbarra na resolução da tela. Erin Pinheiro contou como trouxe um teclado musical do Reino Unido como bagagem despachada.
Felipe descobriu que o binário do firmware do teclado Technics KN5000 contém símbolos de depuração e escreveu uma função para ler as strings e os ponteiros, embora os nomes ainda não se encaixassem. Ele separou o código de estudo do KN5000 do disassembler genérico da CPU TLCS900H e citou como próximo passo detectar e interpretar o cabeçalho de cartuchos de Neo Geo Pocket Color.
Felipe começou a reorganizar o branch local para enviar ao MAME um pull request com o esboço do driver, cujo primeiro commit adiciona suporte à variante TMP94C241 do TLCS900. Depois corrigiu a execução das rotinas de interrupção, e com isso o firmware passou de um laço de espera, mas a tela continuou preta. Ele também fez uma transmissão ao vivo sobre o trabalho.
Felipe começou a reorganizar seu branch local do MAME com o esboço de driver do Technics KN5000 para enviar um pull request, que ainda não dá sinal de vida. O primeiro commit adiciona suporte à variante TMP94C241 do TLCS900. Ele também abriu um documento público para registrar o código de boot e a inicialização do hardware.
Felipe corrigiu a execução das rotinas de interrupção no emulador do TLCS900 usado pelo KN5000 no MAME. Com isso o firmware passou de um laço de espera que, segundo ele, aguarda uma variável atualizada por uma interrupção de timer, mas a tela VGA continua preta. Como próximo passo, ele propôs registrar a comunicação serial com o painel de botões e implementar emulação de alto nível (HLE) dos microcontroladores do painel, cujo código não foi extraído. Também notou que a Technics fabricou pianos digitais com a mesma arquitetura.
Felipe fez uma transmissão ao vivo no YouTube sobre a emulação do KN5000 no MAME. Depois mostrou a PCB do painel de controle danificada e o microcontrolador do painel. Disse que já comprou uma placa nova e que pretende usar a danificada com um Arduino para decodificar o protocolo. Pelo que entendeu, o chip contém uma mask ROM, e o dump exigiria decapping.
Felipe registrou o código de boot e a inicialização do hardware num documento público, que chegou a 22 páginas e depois a 45. Ele pediu leitura e comentários e cogitou publicar um livro sobre o processo, se o emulador funcionar.
Felipe mostrou um HD de 1 GB com mais de 20 anos e sem dados, comprado por ser um item especial. Contou que o documento sobre a emulação do KN5000 já tinha 22 páginas e que escrever o documento ajuda o próprio desenvolvimento do emulador, e pediu leitura e comentários.
Felipe indicou mensagens antigas do grupo e o documento do KN5000, que passou de 35 para 45 páginas numa noite. Ele planejou traduzir para o inglês a técnica de dump pela rotina de backup das configurações do usuário e cogitou publicar um livro sobre o processo, se o emulador funcionar.
Felipe recebeu do dono finlandês de um site antigo as versões 7 e 8 dos discos de atualização do firmware e publicou um pacote com os discos no Internet Archive; depois recebeu também a versão 6 e o software HD-TechManager5000. Ele identificou as versões instaladas no seu teclado, ainda sem dump. Como possível vetor de injeção de código para extrair a ROM principal sem alterá-la, avaliou a atualização da flash da placa de disco rígido.
Felipe pediu ao dono finlandês de um site de cerca de 20 anos os discos de atualização do firmware do KN5000 com links quebrados e recebeu as versões 7 e 8; a versão 6 ainda faltava. Ele listou as datas das versões 7 a 10 e explicou que versões antigas permitem comparar binários e procurar bugs exploráveis, e que ainda busca uma forma de fazer o dump a partir de um firmware não modificado. L. e Felipe notaram que o Wayback Machine guardou páginas 404 no lugar de alguns desses arquivos. Felipe publicou um pacote com os discos no Internet Archive.
Ao extrair o disquete de instalação do disco rígido opcional do KN5000, Felipe viu que a atualização da flash da controladora não é comprimida. Isso a torna candidata a vetor de injeção de código para fazer o dump da ROM principal sem alterá-la. Ele confirmou que um chip dessoldado por Ronaldo foi lido corretamente, verificando os bytes checados pelo autoteste. O dono finlandês do site lhe enviou a versão 6 do firmware e o software HD-TechManager5000, de 1998.
Felipe substituiu a placa danificada do painel por uma nova e verificou as versões de firmware: o teclado veio de fábrica com a versão 4 ("Main Program 1284"), ainda sem dump. A placa de disco rígido instalada tem firmware 2.06i, também sem dump, o que impede regravar qualquer uma das ROMs antes de extraí-las. Ele considerou projetar uma placa de extensão só com uma ROM ou comprar uma segunda placa-mãe, e sugeriu criar um substituto do binxelview para GNU/Linux.
Felipe trocou a placa danificada do painel e pretende usar a antiga com um Arduino para decodificar o protocolo. Nos experimentos com disquetes, encontrou nomes de pinos errados no esquemático do manual de serviço e um tutorial de modificação do Gotek com um erro de alimentação. Leonardo Roman sugeriu o FlashFloppy, e Felipe passou a estudar o código desse firmware.
Felipe fez uma transmissão ao vivo no YouTube sobre a emulação do KN5000 no MAME. Depois mostrou a PCB do painel de controle danificada e o microcontrolador do painel. Disse que já comprou uma placa nova e que pretende usar a danificada com um Arduino para decodificar o protocolo. Pelo que entendeu, o chip contém uma mask ROM, e o dump exigiria decapping.
Felipe substituiu a placa danificada do painel por uma nova e verificou as versões de firmware: o teclado veio de fábrica com a versão 4 ("Main Program 1284"), ainda sem dump. A placa de disco rígido instalada tem firmware 2.06i, também sem dump, o que impede regravar qualquer uma das ROMs antes de extraí-las. Ele considerou projetar uma placa de extensão só com uma ROM ou comprar uma segunda placa-mãe, e sugeriu criar um substituto do binxelview para GNU/Linux.
Com o painel consertado, Felipe começou os experimentos com disquetes, mas o drive do KN5000 riscou um disquete novo. Ao estudar o circuito no manual de serviço, encontrou nomes de pinos errados no controlador de disco. Erin atribuiu os erros a artefatos de escaneamento, como os de copiadoras Xerox que trocam caracteres.
O novo drive de disquete funcionou no KN5000, mas o drive USB do laptop danificou o disco. Felipe encontrou um tutorial de modificação do Gotek para o KN5000 com um erro de alimentação, e Leonardo sugeriu o firmware FlashFloppy. Felipe passou a ler o código-fonte do FlashFloppy para entender drives de disquete a fundo, e foram citados o Glasgow e o Greaseweazle.