{"id":16501,"date":"2026-11-07T17:15:00","date_gmt":"2026-11-07T20:15:00","guid":{"rendered":"https:\/\/oldplayers.com.br\/wp\/?p=16501"},"modified":"2026-11-05T22:10:52","modified_gmt":"2026-11-06T01:10:52","slug":"oldplayers-ai-1875","status":"publish","type":"post","link":"https:\/\/oldplayers.com.br\/wp\/2026\/11\/07\/oldplayers-ai-1875\/","title":{"rendered":"Acelerador Base64 para Amiga: montagem revela mem\u00f3ria defeituosa e bug de reset corrigido"},"content":{"rendered":"<div class=\"fcbkbttn_buttons_block\" id=\"fcbkbttn_left\"><div class=\"fcbkbttn_like \"><fb:like href=\"https:\/\/oldplayers.com.br\/wp\/2026\/11\/07\/oldplayers-ai-1875\/\" action=\"like\" colorscheme=\"light\" layout=\"standard\"  width=\"225px\" size=\"small\"><\/fb:like><\/div><\/div><p>O projeto Base64, de J\u00f6rgen Bilander, substitui o processador Motorola 68000 por um n\u00facleo implementado em FPGA e inclui 24 MB de Fast RAM, armazenamento por microSD e suporte a MapROM. Em testes pr\u00e1ticos documentados por CRG, a montagem do hardware revelou dois problemas distintos: m\u00f3dulos de SDRAM defeituosos em algumas placas iCESugar-Pro e um bug de gateware relacionado ao comportamento de reset que afetava a enumera\u00e7\u00e3o de Autoconfig em resets de software.<\/p>\n\n\n<!--more-->\n\n\n\n<h2>O hardware por tr\u00e1s do Base64<\/h2>\n<p>O Base64 usa uma placa carrier de quatro camadas que se conecta ao soquete de 64 pinos do 68000 do Amiga. No lugar do chip original vai um m\u00f3dulo Muse Lab iCESugar-Pro v1.3 em um soquete SO\u2011DIMM de 200 pinos. Esse m\u00f3dulo traz um FPGA Lattice ECP5, 32 MB de SDRAM, 32 MB de SPI flash e interface microSD. A placa carrier faz a adapta\u00e7\u00e3o el\u00e9trica entre o FPGA e a placa-m\u00e3e do Amiga, com conversores de n\u00edvel (SN74CBTD3861) e circuitos para clock e alimenta\u00e7\u00e3o.<\/p>\n<p><strong>Observa\u00e7\u00e3o de seguran\u00e7a:<\/strong> o iCESugar-Pro n\u00e3o isola a alimenta\u00e7\u00e3o USB 5V da trilha de 5V do Amiga, por isso a documenta\u00e7\u00e3o do projeto orienta a programar o m\u00f3dulo fora do computador para evitar liga\u00e7\u00e3o involunt\u00e1ria de duas fontes.<\/p>\n\n<h2>Como o Base64 executa um 68000 a ~42,5 MHz<\/h2>\n<p>O reposit\u00f3rio do projeto inclui duas implementa\u00e7\u00f5es de processador; a vers\u00e3o testada por CRG usa o n\u00facleo fx68k, que tem como objetivo reproduzir n\u00e3o s\u00f3 o conjunto de instru\u00e7\u00f5es do 68000 mas tamb\u00e9m o comportamento de tempo por ciclo (&#8220;cycle-accurate&#8221;). A placa Rev C gera um clock sincronizado com o sinal de 7 MHz do Amiga e, por meio de um multiplicador ICS570B, obt\u00e9m um clock efetivo de cerca de 85 MHz no FPGA; o n\u00facleo fx68k opera a aproximadamente seis vezes a frequ\u00eancia original do 68000, resultando em ~42,5 MHz em m\u00e1quinas PAL.<\/p>\n<p>Importante: opera\u00e7\u00f5es internas ao FPGA podem rodar nesse clock mais alto, mas acessos aos recursos da placa-m\u00e3e do Amiga (como Chip RAM ou perif\u00e9ricos que usam o barramento original) ficam limitados \u00e0 sincroniza\u00e7\u00e3o do barramento de 7 MHz. Em outras palavras, o ganho depende de quanto trabalho do software acontece dentro do dom\u00ednio acelerado versus no barramento original.<\/p>\n\n<h2>Mem\u00f3ria, Autoconfig e MapROM<\/h2>\n<p>O Base64 exp\u00f5e 24 MB de Fast RAM vindos da SDRAM do m\u00f3dulo. Essa mem\u00f3ria \u00e9 dividida em duas \u00e1reas: 8 MB mapeados no espa\u00e7o Zorro II tradicional ($200000\u2013$9FFFFF) e 16 MB adicionais acess\u00edveis a partir do espa\u00e7o de endere\u00e7amento de 32 bits do processador implementado no FPGA, iniciando em $08000000. Uma ROM de diagn\u00f3stico registra essa mem\u00f3ria extra no AddMemList do Amiga.<\/p>\n<p>O gateware apresenta tr\u00eas fun\u00e7\u00f5es Autoconfig: produto 13 para Fast RAM, 14 para a ROM diagn\u00f3stica e 11 para o controlador SD. O acesso ao SD usa o driver sfsd.device (vers\u00e3o 2.4 na vers\u00e3o liberada) em vez de simular um controlador IDE convencional. O Base64 tamb\u00e9m oferece MapROM para rodar uma c\u00f3pia de Kickstart a partir do acelerador.<\/p>\n\n<h2>Dois problemas durante a montagem<\/h2>\n<p>No primeiro teste, CRG obteve uma tela diagn\u00f3stica informando mem\u00f3ria defeituosa. Ambos os carriers montados exibiam o mesmo sintoma, e um bitstream de teste para o iCESugar-Pro confirmou erros na SDRAM de alguns m\u00f3dulos. Muse Lab reconheceu que certas unidades foram entregues com chips de mem\u00f3ria defeituosos; CRG prosseguiu com um m\u00f3dulo substituto emprestado para continuar os testes.<\/p>\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<span class=\"embed-youtube\" style=\"text-align:center; display: block;\"><iframe loading=\"lazy\" class=\"youtube-player\" title=\"YouTube video player\" width=\"640\" height=\"360\" src=\"https:\/\/www.youtube.com\/embed\/qXxuBZ_OjqQ?version=3&#038;rel=1&#038;showsearch=0&#038;showinfo=1&#038;iv_load_policy=1&#038;fs=1&#038;hl=pt-BR&#038;autohide=2&#038;wmode=transparent\" allowfullscreen=\"true\" style=\"border:0;\" sandbox=\"allow-scripts allow-same-origin allow-popups allow-presentation allow-popups-to-escape-sandbox\"><\/iframe><\/span>\n<\/div><\/figure>\n\n\n<p>Com mem\u00f3ria funcional, o acelerador chegou a inicializar um Amiga 500 Plus e apresentou valores reportados pelo SysInfo \u2014 cerca de 43,1 MHz de clock, Dhrystone 3.551 e estimativa de 3,7 MIPS \u2014 observa\u00e7\u00f5es que o pr\u00f3prio CRG tratou como leituras do SysInfo, n\u00e3o como medi\u00e7\u00f5es independentes.<\/p>\n\n<h2>Bug de reset e a corre\u00e7\u00e3o fx68k v1.2.2<\/h2>\n<p>O problema mais relevante apareceu ao conectar expans\u00f5es (Diego e Ripple IDE) num A500 Plus: resets de software feitos por LoadModule repetidamente retornavam ao pedido de disco de Kickstart. Um reset de teclado (Ctrl\u2011Amiga\u2011Amiga) funcionava normalmente. A diferen\u00e7a t\u00e9cnica \u00e9 que a instru\u00e7\u00e3o RESET no 68000 apenas aciona o sinal externo \/RESET sem for\u00e7ar \/HALT; a placa precisava limpar o estado de Autoconfig quando \/RESET fosse acionado.<\/p>\n<p>A vers\u00e3o anterior do gateware resetava suas fun\u00e7\u00f5es internas de Autoconfig somente quando \/RESET e \/HALT vinham juntos. Em resets de software, as fun\u00e7\u00f5es internas do Base64 mantinham a configura\u00e7\u00e3o anterior, provocando conflitos de aloca\u00e7\u00e3o de endere\u00e7os com outras placas. O fx68k v1.2.2 passa a reinicializar as fun\u00e7\u00f5es de Autoconfig sempre que \/RESET \u00e9 acionado, al\u00e9m de tornar configur\u00e1vel a dura\u00e7\u00e3o do pulso de reset (padr\u00e3o: 132 ciclos do clock de ~7 MHz, \u224818,6 \u03bcs) e registrar o sinal de distribui\u00e7\u00e3o de reset para melhorar o fechamento de tempo do FPGA. O build documentado alcan\u00e7ou um Fmax de 89,103 MHz contra uma restri\u00e7\u00e3o de 85,900 MHz sem erros de setup\/hold reportados.<\/p>\n\n<h2>Testes em diferentes Amigas e limita\u00e7\u00f5es conhecidas<\/h2>\n<p>CRG testou o Base64 em quatro configura\u00e7\u00f5es: A500 Plus, A500 Rev 3, EATX2000 e uma B2000 modificada. Os resultados variaram: no A500 Rev 3 houve crashes sob Kickstart 1.3 que desapareceram com a troca para Kickstart 3.1; no EATX2000 o cart\u00e3o s\u00f3 inicializou ap\u00f3s remo\u00e7\u00e3o de algumas placas; na B2000 modificada um circuito de supervis\u00e3o de tens\u00e3o alterado impediu o release correto de \/HALT, sendo necess\u00e1rio reverter a modifica\u00e7\u00e3o.<\/p>\n<p>Entre as limita\u00e7\u00f5es documentadas est\u00e1 a aus\u00eancia de DMA direto ao Fast RAM: como a mem\u00f3ria \u00e9 gerida internamente pelo FPGA, dispositivos que usam DMA no barramento Zorro II n\u00e3o conseguem acessar diretamente essa regi\u00e3o, o que pode travar transfer\u00eancias. O projeto recomenda um valor de Mask para o mountlist (0x001FFFFE) como mitiga\u00e7\u00e3o para certas configura\u00e7\u00f5es de disco, mas suporte completo a DMA exigiria mudan\u00e7as na interface de barramento e no controlador de mem\u00f3ria do FPGA.<\/p>\n<p>Outros pontos em aberto mencionados no material incluem modo passivo n\u00e3o testado, confirma\u00e7\u00e3o incompleta para R\u00e4mixx500 e falhas intermitentes quando Autoconfig \u00e9 desativado deliberadamente. Segundo a conversa registrada por CRG, n\u00e3o h\u00e1 planos imediatos para implementar FPU ou n\u00facleos 68020\/68030, e o FPGA tem pouco espa\u00e7o de frequ\u00eancia adicional.<\/p>\n\n<p>O Base64 ilustra que substituir o 68000 envolve muito mais do que um n\u00facleo em FPGA: sincroniza\u00e7\u00e3o de clocks, tradu\u00e7\u00e3o de n\u00edveis, decodifica\u00e7\u00e3o de mem\u00f3ria, Autoconfig, acesso a armazenamento e comportamento de reset s\u00e3o todos essenciais para integra\u00e7\u00e3o correta com hardware de quase quatro d\u00e9cadas atr\u00e1s. Quem quiser acompanhar os detalhes de montagem, testes e arquivos de gateware pode consultar os reposit\u00f3rios e a documenta\u00e7\u00e3o p\u00fablicos do projeto, bem como o v\u00eddeo com a investiga\u00e7\u00e3o completa realizado por CRG.<\/p>\n<p><strong>Fonte:<\/strong> <a href=\"https:\/\/theoasisbbs.com\/base64-fpga-accelerator-tests-reveal-an-amiga-reset-problem\/\" target=\"_blank\" rel=\"noopener noreferrer\">The Oasis BBS<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>O acelerador FPGA Base64 traz um 68000 compat\u00edvel rodando a ~42,5 MHz, 24 MB de Fast RAM e SD, mas testes pr\u00e1ticos encontraram SDRAM defeituosa e um bug de reset corrigido no fx68k v1.2.2.<\/p>\n","protected":false},"author":6618,"featured_media":16445,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"h5ap_radio_sources":[],"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_hide_featured_image":false,"_jetpack_featured_image_duplicate_dismissed":0,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"jetpack_post_was_ever_published":false},"categories":[223,161],"tags":[],"class_list":["post-16501","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-amiga","category-fpga"],"jetpack_publicize_connections":[],"jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p5yZwS-4i9","jetpack-related-posts":[],"jetpack_featured_media_url":"https:\/\/i0.wp.com\/oldplayers.com.br\/wp\/wp-content\/uploads\/2026\/11\/oldplayers-40.jpg?fit=1280%2C720&ssl=1","_links":{"self":[{"href":"https:\/\/oldplayers.com.br\/wp\/wp-json\/wp\/v2\/posts\/16501","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/oldplayers.com.br\/wp\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/oldplayers.com.br\/wp\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/oldplayers.com.br\/wp\/wp-json\/wp\/v2\/users\/6618"}],"replies":[{"embeddable":true,"href":"https:\/\/oldplayers.com.br\/wp\/wp-json\/wp\/v2\/comments?post=16501"}],"version-history":[{"count":1,"href":"https:\/\/oldplayers.com.br\/wp\/wp-json\/wp\/v2\/posts\/16501\/revisions"}],"predecessor-version":[{"id":16866,"href":"https:\/\/oldplayers.com.br\/wp\/wp-json\/wp\/v2\/posts\/16501\/revisions\/16866"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/oldplayers.com.br\/wp\/wp-json\/wp\/v2\/media\/16445"}],"wp:attachment":[{"href":"https:\/\/oldplayers.com.br\/wp\/wp-json\/wp\/v2\/media?parent=16501"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/oldplayers.com.br\/wp\/wp-json\/wp\/v2\/categories?post=16501"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/oldplayers.com.br\/wp\/wp-json\/wp\/v2\/tags?post=16501"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}