- Graças ao CD de imagem de jogos do Sega Channel de setembro de 1996, revelado em 2024, passou a ser possível extrair de fato jogos e dados de menu de uma imagem de transmissão de cerca de 60 MB
- O Sega Channel era um serviço por assinatura mensal que retransmitia repetidamente jogos de Genesis pela rede de TV a cabo, e o usuário jogava baixando o título desejado quando o adaptador o encontrava no loop contínuo de dados
- A cadeia de criação da imagem passava por MENUMAKR, PKSPREAD e NSF, e a grande pista para a análise foi que o NSF.EXE, responsável pela codificação final, ainda continha símbolos de depuração
- A restauração seguiu o fluxo de criar primeiro um programa em C que gerasse a mesma saída do NSF, depois separar os arquivos com um decodificador em ordem inversa e por fim descompactar os arquivos .SA para obter ROMs padrão de Genesis
- Entre os conteúdos extraídos estavam os jogos exclusivos do Sega Channel Chessmaster e Klondike, novas builds, ROMs com marca d'água, além de ROMs de menu e de descrições dos jogos, todos em estado executável em emuladores
Contexto do serviço Sega Channel e dos arquivos de imagem
- O Sega Channel foi um serviço de jogos sob demanda operado de junho de 1994 a junho de 1998
- O lançamento nacional ocorreu em dezembro de 1994
- Dependendo da operadora de TV a cabo, normalmente pagava-se entre US$ 10 e US$ 15 por mês para acessar uma biblioteca mensal de cerca de 50 jogos de Sega Genesis
- O pico de assinantes do serviço ficou em torno de 250 mil pessoas
- O assinante recebia um cartucho adaptador conectado ao Genesis, e esse adaptador era ligado ao cabo de TV
- Ao iniciar, ele procurava o sinal do Sega Channel e baixava o menu de jogos
- O download do menu normalmente levava cerca de 20 segundos
- Ao selecionar um jogo, ele era baixado para a RAM do adaptador em cerca de 1 minuto
- O jogo baixado funcionava como um cartucho de varejo comum
- Ao desligar o aparelho ou pressionar o botão de menu do adaptador, o jogo baixado era apagado
- Os dados de gravação eram mantidos desde que o usuário não baixasse outro jogo
- O Sega Channel também incluía uma seção Test Drives além dos jogos de varejo
- Nela era possível jogar versões com tempo limitado ou conteúdo restrito de jogos antes do lançamento
- Também existiam jogos oferecidos apenas no Sega Channel
Como a imagem de transmissão era criada e entregue
- A equipe do Sega Channel selecionava a line-up mensal de jogos e conteúdos como dicas, manuais, notícias e fanarts digitais
- Depois disso, o conteúdo era enviado para a Foley Hi-Tech
- A Foley Hi-Tech produzia os gráficos e animações do menu de jogos e inseria o conteúdo mensal
- O resultado era um arquivo de imagem de jogos com cerca de 60 MB
- A imagem de jogos era gravada em CD e enviada para a instalação de uplink via satélite em Denver, Colorado
- O CD era instalado no computador servidor de jogos do uplink
- O servidor retransmitia continuamente os dados dos jogos em loop via satélite
- Os headends de TV a cabo por todo os Estados Unidos recebiam o sinal do satélite e o repassavam aos assinantes
- Em um ambiente em que a operadora de TV a cabo não podia receber dados dos assinantes, a transmissão em loop contínuo definiu a forma de interação do serviço
- Quando o usuário escolhia um jogo, o adaptador localizava os dados correspondentes no fluxo de dados do Sega Channel
- A imagem de jogos de cerca de 60 MB era transmitida a aproximadamente 12 Mbps usando 2 portadoras de 6 Mbps
- Se não houvesse problemas de sinal, o usuário conseguia jogar o título escolhido dentro de um ciclo do loop de dados
- O menu tinha cópias duplicadas no fluxo de dados para permitir download mais rápido
Descoberta do CD de imagem de jogos de setembro de 1996
- Em novembro de 2024, o usuário RisingFromRuins, do fórum Sonic Retro, encontrou o CD de imagem de jogos do Sega Channel de setembro de 1996 ao revisar um lote de equipamentos de PC comprado há muito tempo
- Ele publicou fotos do CD e enviou uma cópia do arquivo de imagem de jogos do disco
- O objetivo da análise era extrair os dados do arquivo de imagem para verificar se havia jogos exclusivos ou protótipos de jogos
- No início, o arquivo de imagem foi examinado com um editor hexadecimal
- Jogos de Genesis têm cabeçalhos ASCII padrão, e esperava-se que dicas de jogos e manuais baixáveis também pudessem ser lidos
- Na prática, não apareciam strings legíveis no arquivo
- Isso reforçou a possibilidade de o arquivo de imagem estar embaralhado ou criptografado
A cadeia de criação da imagem encontrada no CD de ferramentas de desenvolvimento
- Uma pista importante veio de um CD de backup de materiais de desenvolvimento do Sega Channel da Foley Hi-Tech, divulgado em 2017 pelo usuário tdijital
- Nesse CD já haviam sido identificados a versão de concurso de Primal Rage, um jogo de quiz do Sega Channel japonês e ROMs de demonstração de menu de dezembro de 1994 a janeiro de 1996
- As próprias ferramentas de desenvolvimento, porém, ainda não haviam sido analisadas a fundo
- Em vez de fazer engenharia reversa do código de download do lado do Genesis, foi escolhida a abordagem de fazer engenharia reversa das ferramentas que criavam a imagem de jogos
- O fluxo de criação da imagem tinha três etapas
- MENUMAKR: adicionava jogos, descrições, textos de notícias, arte, música etc. e gerava o binário de menu e o script
MENUSPIN.BAT - PKSPREAD: programa feito pela Scientific Atlanta que validava o conteúdo de
MENUSPIN.BATe geravaPMAP.DAT - NSF: usava
PMAP.DATpara codificar os arquivos de entrada e gerar o arquivo final de imagem de jogos
- MENUMAKR: adicionava jogos, descrições, textos de notícias, arte, música etc. e gerava o binário de menu e o script
- A Scientific Atlanta era uma empresa de equipamentos para TV a cabo que colaborou com a Sega na produção do equipamento de transmissão do Sega Channel e do cartucho adaptador
- O principal alvo da análise foi o NSF.EXE, que gerava o arquivo de imagem final
Engenharia reversa do NSF.EXE
- O NSF.EXE havia sido compilado em modo de depuração, com otimizações desativadas, e os símbolos também estavam incluídos no executável
- Era um programa compilado com Borland C++ 4.1
- Como o IDA Pro não reconheceu automaticamente os símbolos de depuração, eles foram consultados no Turbo Debugger e transferidos manualmente
- Em vez de escrever imediatamente um decodificador, primeiro foi criado um programa equivalente ao NSF.EXE
- Se fosse possível gerar uma saída idêntica byte a byte à imagem produzida pelo NSF.EXE do DOS, isso indicaria que o algoritmo havia sido entendido corretamente
- Foi criada uma imagem de jogo de teste e a implementação foi ajustada até que a saída coincidisse
- Depois de um dia de trabalho e vários fins de noite depurando, foi escrito um programa em C que produz a mesma saída do NSF.EXE
- A implementação foi feita mantendo IDA e Visual Studio abertos ao mesmo tempo e tentando ficar o mais próximo possível do assembly
- O objetivo não era reproduzir um binário compilado idêntico ao original
- Como a implementação usa declarações em C99 e tipos de
stdint.h, é possível que ela não compile diretamente no Borland C++ 4
O esquema de codificação de transmissão do NSF
- A função
GetDatado NSF obtém dePMAP.DATo arquivo de entrada por pacote, a posição dentro do arquivo e metadados do Sega Channel- Entre os metadados estão o ID do arquivo e o tempo jogável de demos com limite de tempo
- Depois disso, ela lê blocos de 246 bytes do arquivo de dados
- A função
LoadFrameadiciona um cabeçalho à frente do pacote de dados e inverte todos os bytes de dados- A inversão de bytes pode ser um processamento relacionado à transmissão ou uma forma de ocultar o conteúdo do pacote
- No meio dos dados do jogo são inseridos códigos de correção de erro BCH e bits de paridade
- Como resultado, 246 bytes de dados se expandem para 288 bytes
- O cabeçalho contém vários campos
GameTimeSynceGameTimeBittransmitem em nível de bit os valores de limitação de tempo do jogoServiceIDnormalmente é 1 e pode ter relação com Express GamesFileIDidentifica de forma única cada arquivo dentro da imagem de jogo, e o menu é sempre o arquivo 0Addressindica em que posição da RAM o adaptador deve baixar o arquivo- Também estão presentes
HeaderCRCeHeader Copy
- A função
InterLeavedivide o pacote em blocos de 450 bits e embaralha os bits de cada bloco- Isso parece servir para distribuir de forma mais uniforme erros em rajada, ajudando a correção de erro a funcionar melhor
- Esse processo se repete em unidades de 10 pacotes
- Os 10 pacotes são agrupados em um frame de 2880 bytes
- O frame é gravado em disco intercalando os dados, como os 2 primeiros bytes do pacote 0, depois os 2 primeiros bytes do pacote 1, e assim por diante
- O mesmo procedimento continua até a geração do arquivo de imagem completo
Decodificação e descompressão
- Depois de entender o funcionamento do NSF, foi escrito um programa decodificador que reverte o processo
- O decodificador extrai os arquivos de dados individuais da imagem
- A primeira saída do decodificador não era um conjunto válido de dados de ROM de Genesis
- Isso acontecia porque os dados dos jogos estavam comprimidos antes da transmissão
- A ferramenta de compressão de ROM era o
GAMEEDIT.EXEpresente no CD da Foley Hi-Tech- Não foi necessário fazer engenharia reversa dessa ferramenta também
- O usuário do GitHub Octocontrabass já havia feito engenharia reversa do formato de compressão .SA
- Os arquivos
.SAforam descompactados para arquivos ROM padrão usando a ferramentaunsade Octocontrabass
Jogos e conteúdos encontrados na imagem de setembro de 1996
- O resultado mais chamativo foram dois jogos exclusivos do Sega Channel transmitidos em setembro de 1996
- Chessmaster: um jogo de xadrez presente em várias plataformas nos anos 1990, mas não no Genesis
- Klondike: um jogo de paciência encomendado pela Sega para o Sega Channel e programado por David Crane, conhecido por Pitfall
- Os jogos dentro da imagem foram classificados em várias categorias
- Conteúdo exclusivo: Chessmaster, Klondike, Olympic Summer Games - Test Drive, Sega Channel Game Guide
- Novas builds: Bugs Bunny in Double Trouble, OutRunners, Super Volleyball, World Series Baseball '96
- Itens que diferem de dumps existentes apenas no padding: Flashback, Phantasy Star II, The Punisher
- Dumps existentes com marca d'água adicionada: Alex Kidd in the Enchanted Castle, Ecco - The Tides of Time, Sonic & Knuckles etc.
- Muitos jogos idênticos a dumps já existentes: Castlevania - Bloodlines, Streets of Rage 2, ToeJam & Earl, X-Men, Ys III etc.
- Black Squirrel, do Sonic Retro, encontrou uma forma de executar o menu de setembro de 1996 em um emulador
- O método consiste em copiar os bytes
0-0x1003FFda ROM do cartucho de demonstração do Sega Channel e anexar em seguida os dados de menu da imagem de jogo - A função de download não funciona, mas o menu pode ser explorado
- O método consiste em copiar os bytes
- O último conteúdo era uma ROM de descrições dos jogos
- Ela parecia uma ROM comum de Genesis, mas ao ser executada em um emulador mostrava apenas uma tela preta
- O motivo era que ela havia sido vinculada com base em 0x100000, e não em 0 como um cartucho comum
- Parece ter sido feita para rodar diretamente na memória do adaptador do Sega Channel
- Ao adicionar zeros depois do cabeçalho para alinhar o código aos vetores do cabeçalho, ela passou a funcionar no emulador
- Após a execução, surgia um menu de desenvolvedor mostrando os nomes internos de cada jogo
- Com esse processo, tornou-se possível executar em emuladores todo o conteúdo do arquivo de imagem de jogos
Ainda não há comentários.