
ROM Timex
Muita gente sabe de
comandos do TC/TS2068 que trabalham e que não estão documentados no manual. Por exemplo,
OPEN# 2,"p" irá redirecionar todo o output de um PRINT para a impressora, em
vez do ecrã. Também existem comandos que estão lá só metade. Ligue o seu 2068 e tecle
o programa seguinte:
10 LOAD *"m",3,"test"
20 CAT
"d",3,4
30 FORMAT
"m",1,2,3,"junk"
40 OPEN
#3,"j",1,2,"moretrash"
50 MOVE
"a","garbage",2,5
60 ERASE
"b",1,"nonsense"
Pode ficar
surpreendido ao verificar que todos estes comandos podem teclados no seu computador e que
os aceita, mas nenhum irá funcionar (Irá aparecer uma mensagem de erro). Cada um
aceitará uma longa lista de strings e valores numéricos como quizer, mas desde que dê
só um, seguido de uma letra sinples entre aspas. (Excepto para o comando OPEN#, que
normalmente não precisa de nenhuma lista extra a seguir à letra.)
O que é isto? O Timex é suposto verificar a Sintax quando se tecla as linhas, porquê
isto? Bem, existe uma classe de comandos que só funciona quando hardware extra está
ligado ao computador. Existem 2 maneiras de implementar e os engenheiros da Timex parece
que deixxaram as duas abertas. O 1º metodo é copiado do Basic do Spectrum, e trabalha
assim. O Basic consegue fazer 2 coisas quando "vê" uma linha de um programa. Se
está a teclar uma linha, ele corre o verificador de sintax. Se está a correr (RUN) um
programa, ele olha para o endereço da rotina que executa o comando e corre-a (Se teclar
uma linha sem numero, ele faz as duas coisas.)
Isto também é verdade para os comandos extra acima descritos. Pensamos que existe uma
diferença porque a rotina que corre o programa está desenhada para produzir uma mensagem
de erro. Mais, se teclar a sintax correcta, a maquina irá aceitar a linha e quando for
corrida (RUN) irá produzir a mensagem de erro.
Para quê isto? O programa que imprime as mensagens de erro (no 2068 e no Spectrum/2048)
está na localização 0008. Aqueles que estão familiarizados com a Sinclair ZX Interface
1 para o Spectrum, sabe que isso pagina a "ROM sombra" quando a instrução em
0008 é executada. A "ROM sombra" então verifica a causa do erro, faz um scan
à linha de Basic, determina se é suposto executar um comando extendido e age de acordo
com o resultado. Isto pode ser uma maneira estranha de adicionar comandos, contem uma
certa beleza. Isto faz com que seja possivel desenhar um computador e incluir todo o
codigo na ROM necessario para futuras adições, sem saber o que essas adições irão
fazer ou que software é necessario para o por a funcionar. É uma boa maneira de
"comprar tempo"
Se este metodo tem sido usado, podemos adivinhar o que o BEU poderia fazer um o seu
hardware extra, paginando o "Superbanco" mencionado no passado. Seria análogo
à "ROM sombra". Como a Home ROM não contem código que a ligue a um sistema de
paginação por interrupções, talvez o "Superbanco" estive-se ligado quando o
código em 0038 (sistema de interrupção do teclado)fosse executado.
Há uma segunda opção. Nas rotinas para executar comandos extendidos, há a tendencia
para encontrar uma instrução JUMP no codigo para imprimir a mensagem de erro. Mas a
seguir a esse JUMP é usualmente encontrado codigo extra que parece que "olha"
para um endereço na tabela SYSCON e uma instrução CALL chama a rotina no banco de
expansão. Assim se o JUMP é passado a NOP, parece que o sistema deveria encontrar
código no banco de expansão para verificar o comando. Depois, esses blocos de código
extra não são usados em mais lado nehum na ROM! Foram intencionalmente para ligar os
comandos extendidos aos bancos de expansão. Porque foram interrompidos dessa intensão?
Nada é simples. Mais uma vez, há 2 opções razoaveis. Em qualquer caso essencialmente,
o pequeno bloco de codigo que está bloqueado contem um ou mais bugs fatais que os
engenheiros deveriam ter limpo, porque uma ROM sem bugs seria necessaria para o sistema de
paginação, mas também podia ser para ganhar tempo simplesmente escondendo o codigo que
as ROMs originais não precisariam.
A outra opção centra-se à volta da diferença de desenvolvimento da Timex e da
Sinclair. A ZX Interface 1 foi lançada ao mesmo tempo que o TS2068, e a sua relativa
simplicidade sugere que o desenho do TS2068 começou bem antes da ZX Interface 1. E assim,
os desenhos originais to TS2068 poderiam não ser considerados, e se a Timex tinha
intenção de copiar o metodo da ZX Interface 1 para os seus proprios microdrives, eles
tenham que ter feito certas mudanças.
Enquanto bloqueando um pouco do seu código, tenha sido uma maneira errada de fazer isto,
teria trabalhado e o resto das modificações da Timex ao Spectrum não são assim tão
poucas. Um exemplo, pode-se encontrar varias rotinas na ROM que foram provavelmente usadas
para tirar os bugs ao código pelos programadores, mas não são usados pela ROM. Este
método é universal, mas a pratica comum é remover esse lixo antes de fazer o código
final que vai para a ROM.
É esta parte errada que faz a segunda opção a mais certa. Esses blocos de código
parecem ter algumas instruções em falta, nunca funcionaria como está. Se for ver o
código a seguir à instrução JP no endereço 25E1 na Home ROM, verá que a Timex não
comentou 28 linhas de código, que podiam ser escritas em 43 bytes. Estes bytes teriam
restaurado as funções perdidas, mas a Home ROM só tem 36 bytes livre, por isso os bytes
extra não caberiam. Em vez de procurar o lixo para apagar, simplesmente estragaram
código que poderia estar funcional. Claramente não era muito importante para eles. Assim
eles iam provavelmente copiar o metodo e todo o software possivel da ZX Interface 1.
Enquanto podemos propeçar neste e em muitos outros bits de código, não temos uma
resposta conclusiva. No fim não importa. Se desejasse-mos restaurar o sistema de
paginação, podemos usar uma opção qualquer. Mas ajuda a compreender que as duas
opções existem. Vale a pena notificar que restaurando o codigo bloqueado teria feito o
desenho de hardware mais simples para nós.
Extraido da Time Design Magazine - Jan/Fev 1987
Mais coisas sobre os comandos do 2068:
Extensões dos comandos do 2068:
CAT x$,[c...]
DELETE [m],[n]
ERASE x$,[c...]
FORMAT x$,[c...]
LOAD *x$,[c...]
MERGE *x$,[c...]
MOVE x$,[c...]
ON ERR {GOTO x|CONTINUE|RESET}
OPEN #m,x$,[c...]
SAVE *x$,[c...]
SOUND m,n[;p,q...]
RESET [{*|#n}]
VERIFY *x$,[c...]
O basic do TS2068 não aceita sintax incompletos para:
ERASE x$
FORMAT x$
CAT
MOVE x$,y$.
O 2068 também introduz 2 novas funções numéricas:
STICK (m,n)
FREE
Aqui estão os comandos e funções do 2068:
O 2068 aceita estes comandos e produz o erro J:
J Invalid I/O device, 0:1
Note que alguns comandos são parecidos com o TOS!
Por exemplo o comando SAVE:
No Timex 2068: SAVE *x$,[c...]
No TOS: SAVE *x$
Pode ter sido uma tentativa de por o TOS internamente no Timex 2068! Talvez a Timex
Computer Corp. não tenha tenha tido tempo para acabar o TOS para por no Timex 2068. No
meu manual do TC2068 no apendiçe da revisão do basic TS2068, a Timex de Portugal não
corriguiu os erros e o manual foi impresso com a sintax incorrecta de CAT, MOVE, ERASE e
FORMAT.
Sistema de
paginação da memória
O sistema de paginação de memória do 2068 suporta 3
blocos internos de 64K chamados de HOME, EXROM e DOCK. O banco HOMEontem 16K de ROM
(chamada de Home ROM) no endereço 0 ao 16383, e o resto é cheio com RAM. O banco EXROM
contem inicialmente só 8K de ROM (chamada EXROM ROM). esta ROM não está totalmente
decodificada, por isso a imagem repete-se a si mesma 8 vezes(endereços 0-8191,
8192-16383, 16384-24575 e assim por adiante). O banco DOCK está vazio inicialmente e
está ligado por resistencias (leituras do banco dão #FF). O seu propósito é expansões
de RAM ou ROM usando cartridges que podem ser ligadas na porta de cartridges no 2068.
Mesmo que i banco EXROM não tenha sido desenhado para expansões, existem cartridges que
são mapeadas para este banco.
Extensões ROM mapeadas no banco DOCK são implementadas na maioria como LROS (Language
ROM Oriented Software (Software Orientado por código-máquina)) e AROS (Application ROM
Oriented Software (Software Orientado em Basic)). Os programas LROS são mapeados no
endereço 0 no banco DOCK e têm que ser escritos em código-máquina. Os programas AROS
são mapeados no endereço 32768 no banco DOCK e podem conter código-máquina ou Basic (o
interpretador Basic permite correr programas Basic no banco DOCK). Os programas LROS têm
sempre autorun e irão começar depois da inicialização do computador ter terminado (um
exemplo disso é o Zebra OS_64). Os programas AROS podem ser ou não autorun. Ambos os
programas têm um cabeçalho pequeno no inicio que contém as informações necessárias
(Endereço de inicio, etc) para a execução.