1 pontos por GN⁺ 2023-08-28 | 1 comentários | Compartilhar no WhatsApp
  • Projeto que porta o emulador RISC-V32 minimalista semu para o C-64 a fim de executar Linux no Commodore C-64
  • Como apenas 64 KiB de memória não são suficientes para conter toda a configuração, é necessária uma RAM Expansion Unit (REU), e a velocidade de execução é extremamente baixa, a ponto de ser descrita como “extremely slowly”
  • O executável semu gerado é um emulador RISCV32 de uso geral e assume que a REU está mapeada no intervalo de endereços de 0x00000000 a 0x01000000
  • A execução do Linux usa emulação de memória virtual e MMU, e a UART emulada trata a conversão de maiúsculas e minúsculas entre PETSCII e ASCII
  • O build é feito com make e requer mos-c64-clang
  • Para executar no VICE, é preciso usar um arquivo .d64 contendo o executável semu compilado e o reufile.linux, ativar o RAM Expansion Module e selecionar o tamanho de 16 MiB
  • No lado do C-64, a execução é feita digitando LOAD "SEMU",8,1 e depois run; segundo o README, a inicialização exige um longo tempo de espera
  • O binário semu para PC pode carregar reufile.linux com a opção -k e pode ser usado para obter uma sequência de boot determinística até o primeiro pressionamento de tecla
  • O recurso de persistência salva o estado do emulador para carregar mais rapidamente um Linux já inicializado, carregando os registradores da CPU RISC-V e os estados da UART e do controlador de interrupções a partir do endereço REU 0xfff000
  • As releases são consideradas “highly experimental” e é explicitado que não são adequadas para uso em produção

1 comentários

 
GN⁺ 2023-08-28
Comentários do Hacker News
  • Onno Kortman compilou cruzado o semu, um emulador RISC-V minimalista, com llvm-mos, um port do LLVM para o MOS 6502, e fez o Linux rodar no Commodore 64
    Kortman escreveu: “Levei horas para gerar a captura de tela mesmo usando o ‘warp mode’ do VICE. No estado atual, acho que um C64 real também conseguiria dar boot no Linux em cerca de uma semana”

    • O 6502 é notoriamente ruim como alvo de compilação para C, especialmente se for C que não leva em conta as limitações do 6502
      Se um emulador RISC-V fosse escrito em 6502 nativo, talvez fosse possível dar boot no Linux em hardware real em menos de um dia, não em uma semana. Imaginem quantas vidas isso salvaria
      https://www.folklore.org/StoryView.py?story=Saving_Lives.txt
    • Esse método de bootstrap lembra outro projeto de Linux em cima de um microcontrolador de 8 bits
      https://dmitry.gr/?r=05.Projects&proj=07.%20Linux%20on%208bi... usava um emulador ARMv5 em um AVR de 8 bits, mas este aqui ganha em charme geek excêntrico
    • Quero ver isso rodando em hardware real, e espero que alguém consiga
  • É bacana, mas meu primeiro pensamento foi: “não tem como caber em 64 KB de RAM!”, e de fato não cabe
    É necessária uma REU de 16 MB. Na época, as REUs para C64 eram de 256 KB e 512 KB, e como os esquemas eram públicos, os clones também costumam ser dessas capacidades
    No fim dos anos 90 também havia uma “expansão” para C64 com a SuperCPU (65816), uma nova CPU compatível com o código da CPU original, e acho que esse dispositivo talvez chegasse a 16 MB
    Depois surgiram reimplementações baseadas em FPGA, e também apareceram REUs de 16 MB. O esquema original da SuperCPU se perdeu, e embora digam que hoje dá para comprar placas de expansão baseadas em FPGA por algumas centenas de euros, não conheço ninguém que tenha comprado uma
    Então, embora seja uma realização técnica elegante, dizer que “roda no C64” me soa meio como dizer “rodei Doom 3 em um 386, só que esse 386 é uma placa PCI de um PC moderno”
    Se eu não consigo executar no meu C64 com hardware que existia na época, ou que era realisticamente fabricável na época, fica meio difícil chamar de “roda no C64”
    Voltando à REU, também fico curioso por que ainda não há um esquema aberto. Há muitos chips SRAM baratos no eBay, então parece que seria fácil fazer uma, mas na prática não é simples, porque seria preciso emular dois componentes, a SuperCPU e o controlador DMA, em um FPGA razoavelmente grande
    Talvez, quando aparecerem FPGAs mais baratos ou microcontroladores com recursos parecidos com FPGA, alguém faça uma SuperCPU open source. Até agora, todos os usuários de que ouvi falar parecem usar emulação. Emulação é muito útil para desenvolvimento, mas a graça do meu hobby retrô é maior quando roda no hardware original

    • Se o critério é “se não era hardware disponível na época ou realisticamente fabricável na época, é difícil dizer que roda no C64”, então uma REU de 16 MB poderia ter sido feita nos anos 80
      O preço teria sido astronômico, mas não havia motivo técnico que a tornasse impossível. Acho que você está confundindo a SuperCPU com uma REU comum
      A REU é só um bloco de RAM com um ASIC que se comunica com o C64 para armazenar ou recuperar bancos de RAM; não tem CPU. Como o 6502 não consegue endereçar diretamente mais de 64 KB, ele manda substituir a RAM do sistema
      A SuperCPU (65816) de fato consegue endereçar diretamente 16 MB, mas é outra coisa. O projeto do post original roda em um C64 básico e na CPU básica do C64; só precisa de uma quantidade enorme de RAM que, na época, teria custado o preço de uma casa
    • Fico imaginando se, em vez de FPGA, não daria para fazer um ARM SoC genérico integrado a uma placa, como uma RPi Pico/Nano, fazer a mesma coisa em software
      Ou talvez até isso esbarre no limite do purismo da emulação
    • “Meu 386 na verdade é uma placa PCI de um PC moderno” — agora fiquei querendo uma dessas
      Hoje em dia, daria para colocar um 386, 486, Pentium e outros SoCs em uma única placa PCIe, talvez até com resfriamento passivo
    • Se é preciso adicionar 16 MB de memória, chamar isso de “no Commodore 64” fica bem no limite
  • Não é sobre Linux, mas tenho usado acessórios recentes para C64
    Experimentei o Kung Fu Flash, um cartucho barato definido por software feito com um STM32, e ele faz quase tudo. Comprei para tentar reproduzir a experiência de desenvolvimento que via no “8-bit show and tell”; ele consegue emular o “Super Snapshot”, mas não uma REU. É ótimo para testar rapidamente muitos softwares e jogos de C64
    https://8bithardware.wixsite.com/website/post/kung-fu-flash
    https://github.com/KimJorgensen/KungFuFlash
    Também tenho um SD2IEC, e aprendi que deveria ter comprado a variante com um soquete DIN adicional. Ele é ok, mas eu já não gostava do DOS original do C64, e esse dispositivo reforça essa sensação. Para montar uma imagem de disco D64, é preciso digitar OPEN1,8,15,"CD:MYIMAGE.D64":CLOSE1, o que é bem chato
    O JiffyDOS, uma ROM substituta para C64, melhora isso, é mais rápido e inclui um DOS wedge permanente. Já encomendei um e estou curioso para testá-lo com um drive 1541 real
    O que me levou a começar a mexer com essas coisas recentemente foi o cartucho “Penultimate +2” para VIC-20
    https://www.youtube.com/watch?v=eNGyneXHKJQ
    Na prática, comprei um VIC-20 só para experimentar esse cartucho

  • É uma demonstração de equivalência de Turing. Se o tempo não for um problema, qualquer computador Turing-completo pode fazer o que outro computador Turing-completo faz

    • Tempo e memória também são necessários
    • Como rodar Linux em cálculo lambda?
  • Isso me deixa curioso. Qual seria o hardware mais antigo capaz de inicializar um Linux moderno e ainda ser usado no dia a dia?

    • A principal limitação para uso diário provavelmente seriam as operações criptográficas necessárias para acessar a maioria dos sites modernos
      Dá para criar o sistema mais leve e rápido possível para rodar bem em máquinas lentas, mas a internet de hoje é implacável
    • Se “uso diário” significa rodar um navegador web moderno e apps modernos de produtividade na web, eu diria que o mínimo fica por volta de um Core 2 Duo com 4 GB de memória
      Não seria muito rápido, mas com um pouco de paciência provavelmente o hardware não seria um bloqueio. Com uma GPU com decodificação de vídeo por hardware, talvez dê até para assistir YouTube em qualidade melhor que batata
    • Para fins de discussão, digamos que seja um computador capaz de instalar o Debian 12, rodar um gerenciador de janelas e um navegador, e que não seja dolorosamente lento
      Eu gostaria de mirar em algo da era Pentium 4 / Athlon XP. Pela documentação, o Pentium original não é compatível, então, se você realmente aceitar sofrer, talvez dê para voltar até um Pentium II
    • Provavelmente seria alguma coisa com Core 2 Duo. Claro que uma CPU de 230 MHz também pode “rodar” Linux com desktop
    • Não é nem de longe um Linux moderno, mas quando recebi o Slackware 2.0 no verão de 1995, eu usava um Pentium 75 MHz, 8 MB de RAM, uma placa Trident capaz de 1024x768 (no X, só 800x600), CD-ROM IDE e HDD
  • Isso é diferente do LUnix?
    https://en.wikipedia.org/wiki/LUnix

    • LUnix é um sistema operacional nativo do C64, então você pode escrever apps e executá-los diretamente no hardware do C64
      Isto roda um emulador RISC-V no C64 e, em cima desse emulador, emula o boot do Linux
  • Estritamente falando, o Linux não está rodando diretamente no C64
    O C64 emula um ambiente RISC-V, e o Linux roda sobre ele. Claro que ainda é impressionante, mas a distinção de significado é importante

  • Fico imaginando se daria para fazer isso funcionar usando dezenas de disquetes como RAM, em vez de uma REU
    E se pedissem ao usuário para trocar de disco sempre que necessário? Se alguém tiver alguns meses ou anos de tempo livre, eu gostaria de ver isso em hardware real em timelapse

  • Se você adiciona mais RAM a um Commodore 64, ele ainda é um Commodore 64?

    • Se usar uma REU, eu diria que sim. Porque é uma expansão de memória adequada à época do C64
    • Ampliando a explicação do johnwbyrd aqui perto, a Commodore vendia uma RAM Expansion Unit chamada “1764”, que aumentava o C64 para 256 KB de RAM, e também era possível usar a “1750”, uma REU do C128, para aumentar o C64 para 512 KB de RAM
      Também é possível expandir até uma REU de 2 MB para o C64. Veja https://www.neperos.com/article/rlut8ce90fbb7701
      2 MB em um C64 é algo que dá para ter de forma bem “legítima”
    • Não, isso é um Commodore 16384
      A memória máxima endereçável com uma REU do C64 é 16 MB
  • Recentemente consegui um TRS-80 Model 4 totalmente funcional, e frequentemente fico imaginando colocar nele algo vagamente parecido com Unix
    A imaginação continua

    • Deve ser possível levá-lo até 128 KB. Chegando lá, há uma chance considerável de rodar Fuzix
      Começando desse ponto, você provavelmente vai encontrar uma toca de coelho razoavelmente profunda