Uma revista digital na era do MS-DOS

For an English version of this post, use the “Language” selection in the right sidebar. The entire site will be translated to the chosen language.

Hoje, se você quiser criar uma revista digital com imagens, animações, músicas de fundo e hyperlinks, basta abrir um editor HTML e começar a trabalhar.

Mas e se você precisasse fazer tudo isso em 1997, usando MS-DOS, com alguns megabytes de RAM, sem navegador, sem CSS, sem JavaScript e tendo que controlar praticamente tudo por conta própria?

Pois foi exatamente essa a encrenca em que me meti quando resolvi criar uma edição especial da WarmNews dedicada ao Zakk Wylde! 🙂

Conforme prometido no post anterior, vou contar um pouco dos bastidores técnicos dessa aventura.

Um pouco de contexto

Em 1997, quando criei a “revista”, ainda era muito comum encontrar computadores com processadores 486 e Pentium, especialmente entre os usuários domésticos brasileiros. Máquinas com 4 ou 8 MB de RAM continuavam em uso, embora os computadores mais modernos já tivessem processadores bem mais rápidos e dezenas de megabytes de memória. E, convenhamos, no Brasil nem sempre o que existia de mais moderno lá fora era o que cabia no nosso bolso!

As GPUs como conhecemos hoje ainda não existiam, mas já tínhamos placas de vídeo com diferentes capacidades gráficas, algumas (raras nas terras tupiniquins) com aceleração 2D e até 3D. Quem não lembra das famosas Trident, geralmente trazidas do Paraguai pelo seu muambeiro preferido?!

Ao iniciar a máquina, o DOS carregava o config.sys e o autoexec.bat, e era nesses dois arquivos que você tinha que fazer toda a configuração necessária para conseguir realmente aproveitar a memória disponível, configurar a porta/irq da placa de som (geralmente uma Sound Blaster), página de código, mapa de teclado, etc.

A maioria dos computadores ainda usava o MS-DOS… na verdade, o próprio Windows 95 usava o MS-DOS por baixo dos panos. DOS não tem interface gráfica. Você tinha uma “tela texto” com 25 linhas e 80 colunas para usar (com monitores VGA, dava pra ativar/usar até 50 linhas). Obviamente fazer uma revista usando apenas tela texto deixaria tudo muito chato e limitado.

Na época, eu basicamente programava em Delphi e Clipper (para aplicações comerciais), Assembly (para baixo nível e performance) e Pascal (para todo o resto).

A WarmNews foi feita em Borland Pascal, com um pouco de in-line Assembly, e explorava os recursos gráficos das placas Super VGA através da interface VESA BIOS Extensions (VBE), permitindo criar uma interface totalmente gráfica com uma performance bastante razoável para a época.

Eu não encontrei o código fonte, provavelmente está perdido em algum backup em zip drive ou CD-R, então além da memória, a maior fonte de informação para esse artigo será o próprio readme que acompanhava a revista.

O padrão VESA VGA (mais conhecido como padrão Super VGA ou VBE – VESA BIOS Extensions) foi um conjunto de normas criado no final dos anos 1980 pela VESA (Video Electronics Standards Association) para unificar o funcionamento das placas de vídeo que ultrapassavam as especificações originais da IBM.

Espaço valia ouro!

Hoje pode parecer ridículo, mas na época em que a troca de arquivos se dava através de conexões com modem discado, economizar bytes não era luxo, era necessidade!

Gravei algumas cópias da WarmNews em disquetes de 1.44 MB para serem distribuídas para amigos próximos. Tive o capricho de criar e imprimir etiquetas coloridas para colar neles, usando uma impressora matricial Canon colorida!

Etiqueta impressa em impressora matricial colorida
Conteúdo do disquete com a WarmNews

O arquivo WNEWSZAK.EXE era um self-extract gerado pelo RAR (o pai do WinRar que vocês conhecem hoje). Após descompactá-lo, os seguintes arquivos eram gerados:

DATA.001        Magazine Data File
DATA.002        Magazine Data File
DATA.003        Magazine Data File
DATA.004        Magazine Data File
DATA.005        Magazine Data File
DATA.006        Magazine Data File
DATA.007        Magazine Data File
DATA.008        Magazine Data File
DATA.009        Magazine Data File
DATA.010        Magazine Data File
DATA.011        Magazine Data File
DATA.012        Magazine Data File
DATA.013        Magazine Data File
DATA.014        Magazine Data File
DATA.015        Magazine Data File
DATA.016        Magazine Data File
DATA.017        Magazine Data File
DATA.018        Magazine Data File
README.BAT      BAT file used to read the readme file
WNEWS.CHK       Internal use
WNEWS.CMP       Magazine Data File
WNEWS.CRC       CRC file
GREAT2!.EXE     WarmBoot BBS ad
SCROLL.EXE      Program used to read text files
WNEWS.EXE       Magazine Program
FILES.LST       This file...
MOUSE.PCX       Mouse Pointer
LOGO.TXT        Logo
README.TXT      Readme File
PERRY.XM        Perry Mason Song

Requisitos mínimos

Já no início do readme tínhamos as informações do hardware mínimo necessário para poder executar a revista:

Note o detalhe da caixa de texto “sombreada”. Isso era comum na época, quando você queria destacar alguma informação simulando um “card”. As bordas eram feitas usando caracteres especiais das páginas de código do DOS (aquilo que muita gente chamava de ASCII estendido). Dependendo dos caracteres utilizados e da página de código configurada, o resultado podia aparecer diferente do esperado. Aliás, era comum evitar acentos nos arquivos README.TXT justamente para não correr esse risco!

Som decente (sai pra lá, mid!!!)

Para os sortudos que tivessem uma placa de som, o WarmNews permitia tocar músicas em background enquanto você lia a revista. Para esse feito, usei rotinas criadas por Charles Attard, que tocava diversos formatos de arquivo (669/MOD/MTM/NST/S3M/WAV/XI/XM).

Por que não MP3? Bem… embora o formato já existisse, ainda estava longe de ser popular, especialmente entre os usuários brasileiros. Além disso, reproduzir MP3 consumia um bocado de processamento, algo que não podíamos desperdiçar em computadores mais modestos. O formato começaria a ganhar muito mais popularidade com programas como o Winamp, lançado em abril de 1997.

Na época, muitos jogos utilizavam músicas reproduzidas através dos sintetizadores FM das placas de som, como os famosos chips Yamaha OPL2 e OPL3 presentes nas Sound Blaster. Também existiam músicas no padrão MIDI, cujos arquivos continham basicamente instruções musicais (notas, instrumentos, duração etc.), deixando a geração do som por conta do sintetizador disponível.

O problema é que, dependendo da placa, o resultado podia deixar bastante a desejar. Naquelas Sound Blaster mais simples, algumas músicas pareciam sair de um tecladinho de brinquedo de criança! Os donos de Commodore Amiga se deliciavam tirando sarro dos PCs com som mixuruca!

Felizmente, algumas pessoas criativas encontraram uma forma de driblar as limitações técnicas do hardware disponível na época, e criaram arquivos que traziam embutido samples de instrumentos musicais reais, além da estrutura da música em si (notas, tempo, duração etc).

Provavelmente o padrão mais difundido na época era o MOD. Os players de música (no nosso caso, as rotinas criadas pelo Charles) usavam uma série de algoritmos que atuavam sobre esses samples para “criar” a variação de diferentes notas musicais e depois “mixar” os instrumentos, gerando o áudio final que o usuário ouvia sair pela caixa de som.

Vejamos o que o readme diz sobre isso:

Memória livre, quanto mais, melhor!

Se tem uma coisa que não mudou muito até os dias de hoje é o fato de que memória nunca é demais, e que continua cara!

Mas na era do DOS, não bastava espetar mais pentes de memória no computador. O MS-DOS tradicionalmente trabalhava com apenas 640 KB de memória convencional, e usar a memória adicional exigia alguns malabarismos. Dependendo do programa, era necessário configurar gerenciadores como HIMEM.SYS, EMM386 ou QEMM, que permitiam aproveitar a memória estendida (XMS), a memória expandida (EMS) e até liberar alguns preciosos kilobytes de memória convencional.

Isso era feito através de drivers como EMM386/QEMM386/HIMEM.SYS.

O readme traz uma seção apenas sobre isso:

Com certeza muitos aqui se emocionaram quando viram “OS/2” acima, não? 😀

Obviamente, se você queria aproveitar todo o potencial da WarmNews e ouvir música de fundo enquanto lia a revista, precisava garantir memória suficiente para que o player conseguisse carregar e tocar os arquivos de música. A própria WarmNews trazia uma versão da música Perry Mason, do Ozzy Osbourne, em formato .XM, para ser usada como exemplo.

O player MMP usava as mesmas rotinas que o WarmNews (feitas pelo Charles), então no readme eu copiei algumas informações do MMP com dicas e instruções para rodar a revista com música de fundo:

Para os mais saudosistas (ou masoquistas!), reproduzo abaixo as explicações que acompanhavam o player MMP sobre as diferentes formas de gerenciar memória no DOS.

Sobre a memória, o MMP utiliza 3 modos para evitar a mensagem de “memória insuficiente” (not enough memory) (muito irritante quando você possui 4, 8, 16 ou mais Megabytes de memória no sistema e precisa de apenas algumas centenas de kilobytes). Ele utiliza os tipos de memória DOS, EMS e XMS.

Os modos possíveis são:

Modo: Por que o MMP usa este modo:

  • DOS
    O módulo carregado é pequeno o suficiente para caber na memória convencional. Porém, se um instrumento tiver tamanho superior a 64 KB (caso o módulo carregado seja um 669, MTM ou XM), o MMP utilizará o modo linear DOS/XMS de 32 bits para evitar truncamento. Este é o modo mais rápido.
  • DOS/EMS
    Os instrumentos não cabem na memória DOS, mas os padrões (patterns) cabem (pressupõe-se que sempre seja esse o caso). Os instrumentos são carregados na EMS, mas são truncados em 64 KB (você receberá um aviso), uma vez que arquivos MTM, 669 e XM podem ter instrumentos com 1 MB ou mais no caso dos XMs.
    Para evitar isso, você deve permitir que o MMP entre no modo linear XMS de 32 bits desativando qualquer gerenciador de memória expandida, como EMM386, QEMM386… e ativando o HIMEM.SYS.
    Note que o modo DOS/EMS é lento; portanto, se você tiver menos do que um processador 486DX de 120 MHz, realmente deve fazer isso!
  • DOS/XMS linear de 32 bits
    Assim como no modo DOS/EMS, o tamanho total dos instrumentos é grande demais para caber na memória DOS. Este é o melhor modo (rápido, toda a memória livre fica disponível e os samples não são truncados em 64 KB). Veja acima como ativá-lo.
    Neste modo, o processador realiza endereçamento linear em modo real (unreal mode)! A Tabela de Descritores Globais (GDT) é modificada, e é por isso que ele é totalmente incompatível com outros aplicativos rodando em modo protegido ou modo V86.

O MMP tenta primeiro entrar no modo linear XMS de 32 bits para que possa liberar memória convencional para o shell do DOS. Se este modo não estiver ativado (verifique na janela de configuração do MMP), significa que o processador está em modo protegido (EMM386, QEMM386 ou o prompt do DOS no Windows estão ativos) ou não há memória XMS livre suficiente.

Que complicação, não?! Mas essa era a vida de quem se aventurava na computação na década de 90!

Criando uma interface gráfica do zero (e até um mini-HTML!)

Além do índice, cada seção da revista tinha uma arte de fundo. As artes foram criadas pelo Binho Miranda, usando fotos do Zakk que peguei na internet. São imagens de 640×480 pixels, com 256 cores, gravadas no formato PCX e exibidas usando recursos Super VGA (VESA VBE). Lembre-se: espaço era ouro, então tínhamos que usar só o mínimo necessário que garantisse qualidade suficiente.

O texto das matérias de cada seção era literalmente “desenhado” em cima da imagem de fundo. Como eu queria fazer algo diferente, resolvi não usar a fonte padrão das telas de texto do MS-DOS. Não me lembro mais o nome da fonte, nem o formato do arquivo, mas trouxe um “detalhe” a mais para a revista, mesmo parecendo “tosco” para os dias atuais.

Outro ponto que tive que codificar foi uma espécie de “html primitivo”. Criei tags para mudar a cor do texto, e criei também hyperlinks básicos para que o usuário clicasse e gerasse alguma ação (geralmente abria uma foto relacionada ao texto destacado).

Sendo uma revista “gráfica”, o uso do mouse era imprescindível, tanto para navegar pela revista (botão esquerdo/botão direito) como para clicar nas opções do índice e nos hyperlinks.

Como o MS-DOS não tinha suporte nativo a mouse, era necessário utilizar um driver específico, geralmente acessado através da interrupção 33h. Além disso, implementei a lógica de navegação, a detecção dos cliques nos hyperlinks e o desenho do próprio cursor, que era uma imagem PCX com uma máscara para simular transparência. A cada clique era necessário verificar se o cursor estava em cima de um “hyperlink”, para realizar a ação necessária.

Havia também alguns efeitos que implementei. A mudança de telas usava um scroll suave, manipulando diretamente a VGA para garantir a suavidade do movimento necessária. Os textos eram desenhados também com um efeito.

Fonte especial, mudança de cores, hyperlinks… era uma implementação rústica e básica de um mini-html

Preparando a revista para distribuição

Aqui estou dependendo unicamente da minha memória…

Pelo que me recordo, a estrutura da revista, as matérias, hyperlinks, fonte utilizada, etc eram definidos em um arquivo texto, usando tags e parâmetros especiais. Depois, um executável lia e “compilava” tudo isso em um arquivo binário (WNEWS.CMP), gerando também os checksums, etc.

O executável da revista (wnews.exe) checava os requisitos mínimos de hardware, lia o wnews.cmp e demais arquivos, verificava a integridade deles, procurava músicas (caso o usuário tivesse passado o diretório em linha de comando), inicializava as rotinas do player de música (se fosse o caso) e, aí sim, exibia a revista para o usuário.

Hoje, quase 30 anos depois, é curioso pensar no trabalho necessário para implementar coisas que atualmente são resolvidas com algumas linhas de HTML, CSS e JavaScript.

Ao mesmo tempo, foi justamente esse tipo de desafio que tornou aquela época tão divertida para quem gostava de programação. Havia limitações por todos os lados, e encontrar maneiras de contorná-las era parte da diversão.

Pena que não encontrei mais o código-fonte da WarmNews. Seria interessante revisitar algumas dessas soluções hoje — embora eu suspeite que encontraria também algumas boas gambiarras! 🙂

Enfim, espero que tenham gostado dessa pequena viagem no tempo. Alguns provavelmente sentiram aquela nostalgia gostosa, enquanto outros devem estar se perguntando como conseguíamos programar sem Stack Overflow, GitHub ou ChatGPT.

Pois é… e ainda nos divertíamos! 😉

Share and Enjoy !

When I Made a Digital Magazine About Zakk Wylde (and Ended Up Getting a Gift from Him!)

Leia em português

The Year Was 1997…

Back when the internet was still in its infancy in Brazil and lots of people were connecting to BBSes (Bulletin Board Systems, a kind of online community accessed through dial-up modems, long before social media existed), I decided to create a special edition of my digital magazine dedicated to one of my favorite guitarists: Zakk Wylde.

Little did I know that this Brazilian programmer’s little hobby would lead to an exclusive interview with Ozzy Osbourne’s guitarist and, a few months later, an envelope from the United States containing a surprise I still treasure to this day.

But let’s start at the beginning…

The WarmNews

I created the WarmNews digital magazine back in the ’90s, when I was the SysOp of WarmBoot BBS (SysOp = System Operator, the person who ran a BBS).

The first editions were available on WarmBoot BBS itself and distributed through RBT (Rede Brasileira de Teleinformática, a Brazilian BBS network) to other BBSes in the network, and maybe even to the rest of the world. The content was a mix of technical articles, humor, and interviews.

Why Zakk Wylde?

Being the frustrated wannabe guitarist that I (still) am, Zakk Wylde was already one of my favorite guitarists. With the amazing work he was doing alongside Ozzy and as a solo artist, I thought dedicating a special edition of WarmNews to him would be a great idea.

Back then, news didn’t travel nearly as fast as it does today, but Zakk already had a basic website. I decided to take a chance and email Randy Canis, who ran the site, and he was more than happy to help me out with some information.

And that settled it! The next WarmNews would be all about Zakk!

A Digital Magazine in the MS-DOS Days

We’re talking about a time when PCs with sound cards were becoming increasingly common in Brazil. Even though Windows 95 had already been released, plenty of people were still using MS-DOS, so the magazine was developed for DOS. The Zakk Wylde special edition introduced a fully graphical interface (still running on top of DOS, though), with mouse navigation and support for Sound Blaster-compatible sound cards (if you had a sound card, you could read the magazine while listening to MOD, XM, and other music formats playing in the background).

I’m a programmer, not a designer, so obviously, if I wanted the magazine to look halfway decent, I’d need someone who actually knew what they were doing. I got in touch with Binho Miranda (whom I’d met through the BBS), sent him some pictures of Zakk I’d found on the internet, and he used them to create the artwork for the magazine’s index and “pages.”

For those interested in the technical side, I wrote another post about that.

An Exclusive Interview with Zakk Wylde!

Since the magazine would be distributed on the internet, including through Zakk’s official website, all the content was written in English.

Zakk’s official website featured a link to download WarmNews

I wrote the articles myself, based on the information (sometimes pretty scarce) I could find online and in magazines at the time. But something was missing. Something better, something more exclusive…

I asked Randy if I could send over a few questions for Zakk to answer, hoping to get an exclusive interview for WarmNews.

Since Zakk was busy touring, Randy interviewed him over the phone and sent me the answers. Sure, it took almost two months of waiting, but hey, it all worked out in the end! 🙂

Zakk has always been known for his great sense of humor in interviews 🙂

An Unexpected Gift

A few months after the magazine was released, when I thought the story was already over, an envelope from Randy showed up in my mailbox.

Inside was a promotional photo of Zakk, autographed and personally inscribed to me. As if that weren’t enough, there was also an original film photograph (yes, an actual photo developed from film!) showing Zakk backstage at a show, having a good laugh with none other than Billy Sheehan and Eddie Van Halen!

I still have both photos to this day.

Looking back, almost 30 years later, it’s funny to think that a digital magazine made by a Brazilian programmer, using MS-DOS and a healthy dose of enthusiasm, could have led to all of this.

Back then, all I wanted was to combine two things I really loved: programming and playing guitar. Instead, I ended up with one heck of a story to tell! 😉

And Maybe the Story Isn’t Over Yet…

Next week, I’m going to a Black Label Society concert (Zakk’s current band). Who knows? Maybe I’ll finally get to shake his hand and, while I’m at it, get him to autograph the original 1.44 MB WarmNews floppy disk I’ve been keeping for almost 30 years! 🙂

That would be a pretty cool way to bring things full circle. Or maybe start a whole new chapter!

The original WarmNews floppy disk, recorded almost 30 years ago. And guess what? It still works!

Share and Enjoy !

Quando fiz uma revista digital sobre Zakk Wylde (e acabei recebendo um presente dele!)

Read it in English

O ano era 1997…

Quando a internet ainda engatinhava no Brasil e muita gente acessava BBS (Bulletin Board System, espécie de comunidade online acessada por modem discado, muito antes das redes sociais existirem), resolvi criar uma edição especial da minha revista digital, falando sobre um dos meus guitarristas preferidos: Zakk Wylde.

O que eu não imaginava é que aquele passatempo de um programador brasileiro acabaria rendendo uma entrevista exclusiva com o guitarrista de Ozzy Osbourne e, meses depois, um envelope vindo dos Estados Unidos com uma surpresa que guardo até hoje.

Mas vamos começar pelo começo…

A WarmNews

Criei a revista digital WarmNews na década de 90, quando era SysOp da WarmBoot BBS (SysOp = System Operator, a pessoa que administrava um BBS).

As primeiras edições eram disponibilizadas no próprio WarmBoot BBS e distribuídas pela RBT (Rede Brasileira de Teleinformática) para outros BBS da rede e talvez para o resto do mundo. O conteúdo era uma mistura de artigos técnicos, humor e entrevistas.

Por que Zakk Wylde?

Como pseudo-guitarrista-frustrado que (ainda) sou, Zakk Wylde já era um dos meus guitarristas preferidos. Com o trabalho excelente que fazia ao lado do Ozzy e como artista solo, achei que seria uma boa ideia dedicar uma edição especial da WarmNews a ele.

Naquela época, quando as notícias não se espalhavam na velocidade de hoje, Zakk já tinha um website básico. Resolvi arriscar entrar em contato por e-mail com Randy Canis, responsável pelo site, que prontamente se dispôs a ajudar com algumas informações.

Pronto! A próxima WarmNews seria dedicada ao Zakk!

Uma revista digital, ainda nos tempos do MS-DOS

Estamos falando de uma época em que os computadores “PC” com placas de som estavam se tornando mais comuns no Brasil. Apesar do Windows 95 já ter sido lançado, muita gente ainda usava o MS-DOS, por isso a revista foi escrita para DOS. A edição especial Zakk Wylde estreou uma interface totalmente gráfica (mas ainda em cima de DOS), com navegação via mouse e suporte a placas de som compatíveis com a Sound Blaster (quem tinha placas de som podia ler a revista ouvindo de fundo músicas no formato MOD, XM, etc).

Sou programador, não designer, então é claro que pra ter o mínimo de qualidade visual seria necessário o trabalho de alguém que entendesse do assunto. Falei com o Binho Miranda (que conheci através do BBS), mandei pra ele algumas fotos do Zakk que peguei na internet, e em cima delas ele criou as artes que foram usadas no índice e nas “páginas” da revista.

Para quem se interessa pela parte técnica, escrevi outro post falando só sobre isso.

Uma entrevista exclusiva com Zakk Wylde!

Como a revista seria distribuída na internet, inclusive no site oficial do Zakk, o conteúdo foi escrito em inglês.

O site oficial do Zakk tinha um link para download da WarmNews

O texto das matérias foi escrito por mim, baseado no material (as vezes escasso) disponível na internet e em revistas da época, mas faltava algo melhor, mais exclusivo…

Perguntei ao Randy se eu poderia enviar algumas perguntas para o Zakk responder, para uma entrevista exclusiva para a WarmNews.

Como Zakk estava ocupado em turnê, Randy fez a entrevista com ele por telefone, e me mandou as respostas. Tudo bem que nesse meio tempo houve quase dois meses de espera, mas no fim deu tudo certo 🙂

Zakk sempre foi conhecido pelo seu bom humor nas entrevistas 🙂

Um presente inesperado

Alguns meses depois do lançamento, quando eu já achava que a história tinha terminado, recebi um envelope pelo correio, enviado pelo Randy.

Dentro havia uma foto de divulgação do Zakk autografada e com dedicatória. Como se isso já não fosse suficiente, veio também uma fotografia original, daquelas reveladas de filme, mostrando Zakk nos bastidores de um show, dando boas risadas ao lado de ninguém menos que Billy Sheehan e Eddie Van Halen!

As duas fotos estão comigo até hoje.

Olhando para trás, quase 30 anos depois, é engraçado pensar que uma revista digital feita por um programador brasileiro, usando MS-DOS e uma boa dose de entusiasmo, tenha proporcionado tudo isso.

Naquela época, eu só queria juntar duas coisas de que gostava muito: programação e guitarra. Acabei ganhando uma história para contar 😉

E a história talvez ainda não tenha terminado…

Na próxima semana vou a um show da Black Label Society, atual banda do Zakk. Quem sabe não consigo finalmente apertar a mão dele e, de quebra, um autógrafo no disquete de 1.44 MB da WarmNews que guardo há quase 30 anos? 🙂

Seria um belo jeito de fechar esse ciclo. Ou talvez começar outro!

Disquete original, gravado há 30 anos atrás contendo a WarmNews. Detalhe: ainda funciona!

Share and Enjoy !

Great2! – código fonte e técnicas utilizadas

Em 1994 eu era o SysOp da WarmBoot BBS e cursava o último ano de Ciência da Computação. Durante muito tempo, os BBS reinaram absolutos conectando pessoas em todo o mundo, antes de serem eliminados da face da terra com a chegada da Internet para o público geral.

Além da troca de mensagens, os BBS serviam também como repositórios de arquivos, em geral sharewares, freewares, imagens, etc. Usuários discavam para o BBS para baixar/subir arquivos, trocar mensagens, etc. Havia uma tradição em que cada BBS adicionava um pequeno arquivo texto aos arquivos compactados (.arj, .zip, .lzh, etc) do acervo, indicando que ele foi baixado daquele determinado BBS, além de informações básicas como: o nome e telefone do BBS, parâmetros para conexão via modem, etc. Enfim, uma propaganda que ajudava a divulgar a existência do BBS para outras pessoas e, com sorte, captar novos usuários pagantes. Esses arquivos precisavam ser minúsculos, afinal, estamos falando de conexões discadas que variavam entre 2.400bps e 56Kbps, dependendo do seu modem e da qualidade da linha telefônica. Pra se ter ideia, um arquivo de 100KB demoraria entre 5 e 8 minutos para ser baixado em uma conexão de 2.400bps, dependendo das condições da linha!

O WarmBoot BBS era referência na distribuição de Demos de multimidia. Eramos distribuidores oficiais da Future Crew e da Twilight Zone. Sempre achei fantástico o que os demogroups faziam usando assembly, em uma época em que o clock da maioria dos PCs não passava de 40Mhz.

Decidi então fazer algo diferente da maioria dos BBS: ao invés de incluir um arquivo texto chato de “propaganda”, criei algo mais divertido e animado – uma “intro” em modo texto, o great2!. Como pode ser visto no vídeo abaixo (gravado em uma janela emulada do DOS), ao ser executado, o great2! fazia a “propaganda do BBS” quicar na tela, enquanto rolava uma música de fundo juntamente com um VU bargraph animado (no vídeo, a rolagem pode não parecer tão suave, afinal, foi gravado em um emulador de DOS que simulava inclusive a taxa de refresh de um monitor CRT).

Lembre-se, o Windows 95 nem mesmo tinha sido lançado e o Windows 3.1 era meramente uma interface gráfica tosca que rodava em cima do MS-DOS. A maioria dos programas ainda eram executados em modo texto (80 colunas x 25 linhas), nada de mouse, janelas etc! Aqueles mais abonados tinham placas de som em seus computadores (SoundBlaster era o suprassumo da época), monitores CRT (Syncmaster 3 era o que tinha de melhor) e placas “Trident” Super VGA com no máximo 1MB de RAM.

A parte mais interessante do great2! era com certeza o efeito da tela quicando. O modo texto, por padrão, tem um número limitado de colunas e linhas para se trabalhar (80 x 25). Normalmente, rolar um texto significava deslocar as linhas para cima ou para baixo, o que obviamente não causava uma rolagem “suave”, já que cada linha tinha 16 pixels de altura, ou seja, cada deslocamento significava mover o texto na tela no mínimo 16 pixels para cima ou para baixo. O “tchã” do great2! era usar recursos de programação gráfica VGA juntamente com o sincronismo do tempo de retrace vertical dos monitores para “pintar a tela” começando no momento certo e no “pixel” certo, causando um efeito de rolagem suave. O sincronismo do retrace era essencial – sem ele é como se partes da imagem parecessem “quebradas”.

Vou deixar a I.A. explicar o conceito, pois creio que ela fará isso de forma mais didática:

O “motor de rolagem” do programa não redesenha a tela: ele desenha o conteúdo uma vez na memória de vídeo VGA em modo texto e depois altera os registradores da [placa gráfica] VGA para mudar a linha inicial de exibição. Como a VGA permite deslocar a imagem por scanlines dentro das células de texto (25 linhas x 16 pixels = 400 scanlines no total), o movimento fica suave, mesmo sem usarmos um modo gráfico.

A sincronização é feita esperando o vertical retrace do monitor CRT, isto é, o breve intervalo entre um quadro e outro em que o feixe de raios catódicos volta ao topo da tela. Ao atualizar os registradores nesse momento, o código evita flicker e tearing, algo equivalente a usar VSync em gráficos modernos.

Em resumo: o efeito funciona como uma “câmera” que se move sobre uma tela já pronta, usando recursos do hardware VGA e sincronizando as mudanças com o refresh do monitor.

Também pedi pra ela fazer uma simulação animada, pra ficar ainda mais fácil de entender o que acontece:

Simulador de Hardware: Scroll Suave VGA (Modo Texto)

Lado Esquerdo: O monitor CRT real. Repare que o texto não se move na memória, a VGA apenas muda onde a tela começa.
Lado Direito: A VRAM (Memória) está fixa. O retângulo vermelho representa os Registradores da VGA mudando a cada ciclo de Retrace.

É claro que o impacto do great2! não ficava apenas no movimento suave, mas também no tamanho minúsculo do executável (5.7Kb) e na música de fundo. Para tocar a música, usei o HSC Player, disponibilizado publicamente por Hannes Seifert, da NEO Productions (uma desenvolvedora de jogos da Austrália). A música também não é de minha autoria! Peguei pronta na internet e confesso que não me lembro quem era o autor. O “anúncio”, ou seja, o texto colorido foi feito usando o The Draw, um editor de telas ANSI amplamente utilizado pelos SysOps para construir as telas de boas vindas e menus dos BBS. Telas ANSI eram a única forma de adicionar texto colorido na interface de um BBS. Lembre-se, tudo era texto/bytes sendo transmitido pela linha telefônica da forma mais crua possível. Usando ANSI conseguiamos adicionar cores aos caracteres. Em conexões lentas, dava pra ver as telas sendo desenhadas caractere por caractere – haja paciência!

Abaixo está o código fonte do great2!, incluindo meus comentários escritos em um inglês vergonhoso e cheio de erros (tinha 19 anos e havia aprendido inglês por conta própria, lendo revistas e livros americanos sobre programação). Muitas vezes recebi mensagens de pessoas que desacreditavam que um executável tão pequeno podia fazer “tanta coisa”.

O código mostra várias técnicas típicas da programação Assembly/DOS que hoje parecem bem “artesanais”, mas eram normais na época: acesso direto à memória de vídeo (B800h) em vez de APIs gráficas, escrita direta em portas de hardware da VGA (03DAh, 03D4h, 03C8h, 03C9h), sincronização manual com o retrace vertical do monitor, rotação de palheta de cores, uso de interrupções BIOS/DOS (int 10h, int 16h, int 21h), controle explícito de registradores, segmentos e pilha, além de CLI/STI para bloquear interrupções durante trechos críticos.

Também chama atenção o uso de rotinas externas para música AdLib, com callback de IRQ para desenhar VUs na tela enquanto a música toca, e a tela inicial armazenada de forma comprimida e descompactada diretamente na memória de vídeo. Para um programador moderno, é curioso porque quase tudo que hoje seria delegado ao sistema operacional, driver gráfico, engine ou biblioteca era feito “na unha”, conversando diretamente com o hardware e sincronizando o tempo visual quase quadro a quadro.

A AdLib era uma placa de som para PCs, famosa no fim dos anos 1980/início dos 1990, que gerava música por síntese FM usando o chip Yamaha OPL2. As Sound Blasters e demais placas de som que vieram depois mantiveram a compatibilidade básica com a AdLib.

As barras do VU, que simulavam um spectrum analyzer, representavam na verdade o nível de sinal de cada instrumento que estava tocando naquele momento, e dava um toque especial e um certo dinamismo na apresentação.

O great2! era compilado com o tasm – o Turbo Assembler, assembler da Borland usado principalmente em DOS para escrever e compilar programas em linguagem Assembly para processadores x86, como o 8086/286/386.

Continue lendo

Share and Enjoy !

BBS – Um passado não tão distante, mas já quase esquecido

Quando se fala em tecnologia, o tempo parece passar mais rápido do que o normal. A evolução é tão rápida que lembrar de algo que aconteceu há 20-30 anos atrás pode ser comparado a lembrar do tempo dos dinossauros.

Obs: O artigo é cheio de links, vale a pena visita-los para se aprofundar em cada assunto.

Na década de 90, computadores tinham menos poder de processamento do que um smartphone atual, e nem estou falando dos tops de linha! Provavelmente, muitos dos nerds e youtubers de hoje não reconheceriam grande parte das siglas, abreviações e termos utilizados no mundo da computação no início da década de 90: XT, AT, 286, 386 SX, 386 DX, 486, Himem.sys, EMM386, CGA, EGA, VGA, CP/M, etc. A internet no Brasil ainda era uma recém nascida, acessível inicialmente apenas em algumas universidades públicas. Web? Não! Estamos falando de telnet, ftp, Usenet, etc.

Foi um pouco antes dessa época que os BBSes (Bulletin Board System, ou Sistema de Quadro de Avisos – numa daquelas traduções horríveis ao pé da letra) reinavam como as únicas opções de “comunidade virtual” [tá, não vou considerar o VideoTexto, 😀 ], sem saber que logo seriam dizimadas pela chegada da Internet e suas crias tão mais eficientes (e-mail, ICQ, Orkut, Netscape, etc). Os BBSes permitiam que qualquer pessoa que possuísse um computador + modem + linha telefônica pudesse baixar e enviar mensagens e arquivos, além de teclar com outros usuários em real-time através dos chats (restritos ao próprio BBS, ou seja, não era possível conversar em real-time com usuários de outros BBS). Tudo isso em “impressionantes” velocidades que variavam entre 2.400bps e 28.800bps (bps = bits por segundo!) .

Por trás de um BBS sempre havia um software gerenciador de BBS e uma pessoa, o SysOp (System Operator – Operador do Sistema). No Brasil, o software mais usado era o “RA” (Remote Access). Fui SysOp da WarmBoot BBS e, particularmente, preferi usar o Maximus e posteriormente o KBBS, sendo esse último indicado para rodar em OS/2. Geralmente, não era o gerenciador de BBS que “atendia” as ligações. Essa função era de outro software, como o FrontDoor. Era ele que atendia as ligações, verificava se era uma chamada de um usuário ou de outro BBS (para troca de pacotes), e repassava para o software apropriado continuar o “atendimento”. Alguns softwares gerenciadores já traziam um “FrontDoor” embutido.

Dentre os modems mais utilizados no Brasil estavam os da USR (US Robotics) e Hayes, sem contar os inúmeros xing-lings trazidos do Paraguai (Genius, BitCom, etc). O momento de conexão via modem era angustiante! Devido a péssima qualidade das linhas telefônicas, muitas vezes a “gritaria” do modem se perpetuava pela eternidade, na tentativa de negociar uma melhor taxa de conexão.

A troca de mensagens não era instantânea, mas era mais rápida do que usar os Correios 😀 Você conectava, via/lia as mensagens novas, respondia as que desejasse e aguardava um ou dois dias para obter sua resposta. Isso porque a maioria dos BBS trocava mensagens entre si apenas uma vez ao dia, ou melhor, de madrugada, para economizar na conta telefônica (o desconto nos pulsos de interurbanos chegava a 75%).

O processo para troca das mensagens era bem organizado. Cada BBS tinha seu node de distribuição (um outro BBS), onde se conectava para trocar as mensagens. Havia redes de mensagens responsáveis por organizar tudo isso, sendo a internacional Fidonet a maior e mais famosa! Posteriormente, surgiu no Brasil a RBT (Rede Brasileira de Teleinformática), que obteve um certo sucesso mas nunca destronou a “Fido”. Para fazer parte dessa estrutura, o BBS precisava se filiar à uma rede existente, obter seu número de cadastro e começar a participar do processo organizacional de troca de mensagens. Um número de cadastro na Fidonet seguia o padrão zone:net/node, por exemplo, 1:105/6 significa host 6 dentro da rede local de Portland Oregon (rede 105) que está na América do Norte (zona 1). Basicamente, os BBSes conectavam o node de distribuição, enviavam e recebiam as novas mensagens. Esses nodes por sua vez conectavam a outros nodes, e assim por diante, distribuindo as mensagens para todo o planeta.

Como o número de linhas telefônicas disponíveis nos BBSes costumava ser limitado (as linhas eram tão escassas e caras, que chegavam a ser alugadas em imobiliárias), era de praxe utilizar softwares para baixar e responder as mensagens enquanto se estivesse desconectado. O usuário ligava para o BBS, baixava o pacote contendo as novas mensagens ao mesmo tempo que subia as mensagens que já havia respondido quando estava desconectado, tudo através do uso de softwares “mensageiros”, como por exemplo o BlueWave.

A interface dos BBSes era de texto puro, nada de gráficos bonitinhos, janelas, etc. No máximo uma corzinha pra deixar os caracteres menos chatos. Não demorou para que programas específicos surgissem a fim de facilitar a criação das chamadas “telas ANSI”, onde se conseguia utilizar caracteres especiais e coloridos, como bordas, etc. para criar algo mais bonito do que uma simples tela preta cheias de letras e números brancos. Vale lembrar que uma configuração errada no software de comunicação já era suficiente para transformar uma linda tela ansi num indecifrável conjunto de caracteres estranhos e sem o menor sentido. Um dos editores ANSI mais usados na época era o TheDraw.

Além da troca de mensagens, os BBSes eram a fonte mais rápida para se ter acesso a arquivos e novidades. O acervo de arquivos de um BBS geralmente ficava armazenado em CDs e HDs. Um BBS “top” tinha múltiplos drives de CDROM, provendo simultaneamente diversos CDs contendo bibliotecas de arquivos. Já os BBSes mais modestos (a maioria) tinham apenas um CDROM, e criavam um cronograma onde de tempos em tempos os CDs eram trocados por outros, variando portanto o acervo de arquivos ofertado. Havia CDs com coletâneas de arquivos específicas para BBS, sendo um dos mais famosos o Night Owl.

Entre os arquivos mais populares entre os usuários estavam os GIFs que, em sua maioria, eram de mulheres nuas (que novidade!). Cindy Crawford, Claudia Schiffer, Paulina Poriskova, entre outras eram as musas da época. Obviamente nem tudo se limitava a gifs. Os freewares e sharewares eram a melhor forma de se distribuir e/ou vender softwares, em uma época onde um programa de computador não passava de alguns KBytes de tamanho. O conceito do shareware é: compartilhe o programa, teste-o e registre/pague para continuar usando. Compactadores de arquivos eram amplamente utilizados para diminuir o tamanho e tempo dos downloads. O mais usado na época era o ARJ, que oferecia taxas de compressão melhores que o ZIP, além de muitas outras funcionalidades. Era comum cada BBS adicionar um arquivo próprio (geralmente txt ou um pequeno exe/com) de propaganda, como se fosse uma assinatura dizendo: esse arquivo veio do BBS tal. Na WarmBoot BBS, adicionávamos o great2!.exe.

Além dos GIFs, freeware e sharewares, outra categoria de software começou a se disseminar nos BBS de todo o mundo: as Demos!

Demos nada mais eram do que apresentações gráficas, geralmente escritas em Assembly, onde durante a apresentação, efeitos visuais e animações 3D eram exibidos acompanhados por uma trilha sonora envolvente, sendo tudo calculado e desenhado em real-time, numa época onde os processadores rodavam em média a 40Mhz (com o turbo ligado :-D).

As Demos merecem uma atenção especial, e serão o tema de um próximo post.

Mas e quanto aos usuários? Geralmente, se associar à um BBS envolvia o pagamento de uma mensalidade. O valor dependia do “nível” que você desejasse ter dentro do BBS. Os níveis determinavam que áreas de arquivos ou mensagens poderiam ser acessadas, quanto tempo de conexão por dia você poderia utilizar e quantos KBs poderia transferir. A maioria dos BBSes oferecia alguns minutos gratuitos para que novos usuários pudessem “passear” pelos menus e pelo acervo, antes de decidir por assiná-lo. O processo de assinatura em si começou um tanto quanto manual: baixava-se e preenchia-se a mão uma ficha de cadastro que era enviada pelo correio juntamente com o cheque para assinatura. Posteriormente, foi simplificado, dispensando o envio pelo correio e aceitando transferências bancárias. Os BBSes mais poderosos/bem sucedidos aceitavam pagamento com cartão de crédito.

A conexão do usuário com o BBS era feita através de programas específicos, como o Telix. A troca de arquivos se dava através de protocolos de transferência de arquivos, sendo o ZModem (unidirecional) o mais comum. O BiModem, não tão difundido, permitia comunicação bidirecional, ou seja, podia-se enviar e receber arquivos ao mesmo tempo. O protocolo escolhido precisava ser suportado tanto pelo gerenciador de BBS como pelo programa cliente utilizado pelo usuário. Alguns BBS associavam a elevação do nível do usuário à quantidade de arquivos enviados por ele, como forma de incentivar o envio de novos arquivos e, portanto, aumentar o acervo do BBS.

Se chegou até aqui, ou é porque viveu essa época e deve estar agora muito nostálgico e cheio de saudades, ou porque é um jovem micreiro curioso que não se contenta em viver apenas o atual, mas sim saber como chegamos onde estamos. Em ambos os casos, parabéns! 😉

Com a chegada da Internet, os BBSes perderam o sentido de existir, afinal, ela oferece tudo que os BBSes ofereciam, só que de uma forma muito mais ágil, eficiente e com alcance praticamente ilimitado. Com isso, os BBSes começaram a desaparecer, sem deixar, no entanto, de marcar a história da tecnologia e a vida dos seus usuários.

Share and Enjoy !

Manual da WarmBoot BBS

Continuando a sessão nostalgia, abaixo segue o link do manual da WarmBoot BBS. Para os que viveram a época das BBSs, muitos dos termos utilizados trarão boas recordações. Para os mais novos, pode parecer um pouco estranho, afinal, hoje em dia, quem é que precisa configurar os parâmetros de paridade, etc. do modem (discado)? 😀

Zmodem, Fidonet, RBT, telas ANSI, etc… isso te lembra alguma coisa? 🙂

Enjoy!

Manual da WarmBoot BBS

Share and Enjoy !






1 2