E voltamos a falar do 1541 (como sempre fazemos por aqui), mas agora cumprindo a promessa de continuar o assunto do post anterior e dar um pouco de luz sobre este folclórico periférico desenvolvido pela Commodore.
E o BASIC de disco?
Quem vem do MSX, TRS-80, Apple II etc… conhece bem esta expressão, ela diz respeito justamente aos comandos que são acrescentados/modificados ao BASIC padrão da máquina quando ela está com uma interface de drive conectada e/ou disco de sistema carregado. Neste caso surgem comandos novos, outros passam a ter a sintaxe expandida e até mesmo os valores default são trocados (como no caso do MSX em que os comandos LOAD, SAVE, BLOAD, BSAVE e OPEN passam a fazer referência por padrão ao drive de disquetes e não mais ao gravador cassete — aliás, gravador cassete para que minha gente?).
Mas no C64 não é bem assim, lembram que não existe uma interface de disquetes stricto senso? Lembram que o drive é um dispositivo serial fora do alcance do microprocessador e ligado a um barramento de uso geral (ou seja, não só drives de disquetes se conectarão ali), ou seja, não há nem interface de disquetes e nem ROM que expande o BASIC!
E como é que faz?
No C64 o gravador cassete, o 1530, é considerado como dispositivo padrão, sendo assim quando você digita “LOAD” no BASIC o C64 te responde:
PRESS PLAY ON TAPE
E como é que faz no drive de disquetes? Lembram que é uma conexão serial e que vários dispositivos podem ser espetados um atrás do outro. Se pode haver mais de um então significa que eles tem alguma forma de se identificarem (um ID) para que saibam quando o computador estará falando especificamente com eles.
Assim, basta adicionar um ID do dispositivo que, no caso da primeira unidade de disquetes, é o 8 (os drives vão de 8 até 15, ou seja são até oito drives conectados no sistema)…
LOAD "<arquivo>",8
…mas aí vem aquela pergunta: Mas se o BASIC não foi expandido para suportar o drive, como é que eu vejo que arquivos tem no disco? Não se assustem mas é assim:
LOAD "$",8 LIST
O resultado será um programa em BASIC contendo a listagem do diretório na forma de comentários, um arquivo por linha. Eu preciso dizer que o programa que estava antes na memória será apagado? Obviamente que nem tudo está perdido, no C128 a Commodore se preocupou mais com as pessoas e já deixou o BASIC 7 devidamente expandido com comandos como DIRECTORYCATALOG (Por que não DIRCAT? Por que?), DLOAD, DSAVE etc (e mapeados nas teclas de função).
NOTA : Aos usuários do C64 restavam alternativas como o DOS Wedge. Que vinha embutido nos cartuchos do Fast Load — lembram dele? — e, vejam só, no próprio disco que acompanhava o 1541 🙂
Felizmente, a sanidade mental dos usuários foi preservada quando os desenvolvedores de jogos tornaram padrão deixar o executável principal como o primeiro arquivo do disco — exatamente já deu para entender que não existe um AUTOEXEC no 1541, só no 1581 com o C128 que há algo assim! Assim bastava simplesmente digitar e aguardar o carregamento.
LOAD "*",8 RUN
Justamente! Em uma penca de sistemas operacionais o asterisco significa “qualquer coisa”, aqui ele carrega o primeiro arquivo que encontrar no disco.
E para o resto?
Justamente! Como é que se copia, renomeia ou apaga um arquivo? É que aqui que as coisas começam a ficar medonhas. Sendo o IEC um barramento ele tem um canal de “controle”, ou seja, uma forma de você conversar direto com o dispositivo e passar algumas ordens para o sistema operacional deles. Sim, duas omissões da minha parte, a primeira foi de NÃO dizer que existe um sistema operacional para os computadores Commodore de 8-bit, o Commodore DOS, e a outra de não contar que o sistema operacional não é executado no computador mas sim nas unidades.
Os comandos são enviados pelo canal de controle, o 15, utilizando o único jeito que os dialetos de BASIC tem para tratar arquivos, os comandos OPEN e CLOSE. A sintaxe é mais ou menos assim:
OPEN <identificador do arquivo>,<dispositivo>,<canal> PRINT #<identificador>,"<comando>" CLOSE <identificador>
Ou, de uma forma mais simplificada (e um pouco confusa):
OPEN <identificador do arquivo>,<dispositivo>,<canal>,"<comando>" CLOSE <identificador>
Por exemplo, para apagar o arquivo “JOAOLOVES1541” no primeiro drive, o 8, eu faço:
OPEN 1,8,15,"S0:JOAOLOVES1541":CLOSE 1
E para não ficar repetitivo vou fazer referência aos tópicos da wiki do C64 que tratam do 1541 e da SD2IEC (sim, ela também tem canal de controle que te permite montar imagens de disco e até entrar e sair em subdiretórios) que explicam todos os comandos disponíveis. E se você quiser saber mais, o pessoal do pagetable tem disponibilizado muita documentação sobre computadores clássicos e entre elas uma versão digital do Inside Commodore DOS de 1985.
Tem alguma outra coisa que posso usar?
Felizmente o sofrimento a necessidade é a mãe da invenção. Existem gerenciadores de arquivos e aquele que eu recomendo é o pacote DraCopy/DraBrowser:
Motivo? Simplesmente por ele ter versões disponíveis para qualquer máquina Commodore 8-bit (C64, C128, PET, VIC-20 etc), entrar em diretórios e, claro, montar automaticamente, imagens de disco e permitir executar programas lá de dentro. Precisa mais?
Bônus!
No final do post anterior eu prometi falar sobre algumas coisas interessantes que podiam ser feitas com o 1541 aproveitando-se do fato dele ser também um computador, vamos lá pegar carona mais uma vez com o pessoal do pagetable.com onde eles apresentaram um carregador rápido autoexecutável de 256 bytes para o C64 (sim, tem código fonte em assembler de 6502 lá) e as histórias sobre o desenvolvimento do FCopy (o programa que copiava disquetes no 1541 em incríveis 4 minutos e 30 seguntos — antes levava 25 minutos, ficou com pena né?) e do programa que copiava discos em 15 segundos(!).
Mas é claro que há outros exemplos, como os carregadores rápidos implementados pelos desenvolvedores dos jogos para acelerar a carga ou mesmo rotinas de cópia contra cópia implementadas para executar diretamente no 6502 do 1541! Agora dá para entender que o 6502 implementado em FPGA dentro das 1541 Ultimate não é um mero preciosismo.
no C128 pra ver o diretorio se usa CATALOG
Valeu! Acho que é por que eu sempre apertava uma das teclas de função, só me recordava que era um nome comprido.
Francamente, a forma utilizada para listar arquivos num diretório é ridícula.
Por isto acho que a comunidade do C64 merece todo respeito.
Pior que existem vários programinhas para “listar o diretório de forma não destrutiva”, inclusive dentro do próprio DOS Wedge tem o seu.