timex-computer.jpg (19841 bytes)

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.