sexta-feira, 24 de janeiro de 2020

ROM de ZX Spectrum 48K vs ROM de TC 2048

Este artigo destina-se a explicar as diferenças entre a ROM do ZX Spectrum 48K e de um Timex 2048.

No Timex 2048, uma pequena modificação foi feita à ROM, para reinicializar o chipset de controle para o modo default, caso o port de manipulação de paging/modos de video tenha sido manipulado.

Existe uma CALL na rotina 11B7: THE 'NEW' COMMAND ROUTINE que lida com a inicialização/comando NEW. 

A CALL que existe para imprimir a mensagem "@ 1982 Sinclair Research Ltd" foi substituída por uma CALL para uma zona não usada na ROM do 48K, onde foi colocado um OUT para inicializar o "Timex  Control  register" na port 255, a 0, sendo que em seguida, chama a rotina PO_MSG

A rotina é colocada depois de um XOR A, pelo que na chamada da Timex, o registo A não é inicializado.

1295:  XOR  A
1296:  LD     DE,$1538

ORIGINAL 48K

1299: CD 0A 0C  CALL $0c0a     ; CALL PO_MSG

TC2048

1299: CD CD 38  CALL $38ce
Zona da rotina nova no TC 2048, bytes a 0xFF no ZX Spectrum 48K.

Inicializa o control register do Timex ao estado de arranque da máquina.

TC2048

386e: D3 FF        OUT ($FF),a
3870: CD 0A 0C CALL $0c0a   ; CALL PO_MSG
3873: c9               RET

Notas:

Porquê um CALL e não um JP ? Usar-se-ia menos um byte na parte não usada na ROM e menos dois bytes de stack.

A diferença entre a ROM stock do ZX Spectrum 48K e do TC 2048 são exactamente 8 bytes.

Ver:

10 comentários:

  1. Reparei que a rom do meu TC2048 está numa eprom D27128A.
    Isso significa que posso apagar a original e programar outra que que deseje, mas irá o Timex depois funcionar correctamente?

    Será que o TC2048 necessita mesmo da rom original para arrancar ou poderão usar-se outras?

    Obrigado.

    ResponderEliminar
    Respostas
    1. Em 90% dos casos, sim. Mas o Rui poderá depois detalhar melhor.

      Eliminar
  2. Encarnado29/8/24 15:36

    Pode usar uma qualquer que funcione num 48k base.tenha em atenção que poderá ser necessário teclar um OUT 255,0, isto porque o hardware em si não garante que o 2048 inicie no display file primário (a não ser que consiga fazer um pequeno patch à nova ROM para lhe fazer o OUT sempre que reinicia a máquina.

    ResponderEliminar
  3. Ok, obrigado!

    ResponderEliminar
  4. Resolvi fazer a experiência e, uma vez que foi por aqui que tão gentilmente recebi aconselhamento, queria deixar algum feedback:
    Guardei a rom original do 2048, arranjei uma 2ª eprom e consegui gravar a rom "ZX48 v2EN" do Rodolfo Guerra.
    Funciona e não foi preciso fazer mais nada.
    Até agora tem trabalhado bem, mas sobretudo o que mais me impressionou é que os jogos que tenho experimentado parece que ficaram mais "responsivos", arrisco até a dizer que em algumas partes até mais rápidos/fluidos, com um menor atraso na reacção ao input. Será que tem a ver com a rotina de leitura do teclado ser mais rápida nesta rom?
    Já tinha notado essa diferença quando fiz a experiência num emulador mas parece resultar igualmente bem no hardware real.
    Na minha humilde opinião esta rom pode conter uma mais valia para os nossos 2048 quando a máquina é usada para jogar.
    Experimentem e vejam se notam alguma coisa.

    ResponderEliminar
    Respostas
    1. A parte de funcionar bem não me surpreende, porque existem alguns 2048 que andam por aí com a ROM original do 48k.

      O Encarnado tem a sua razão, a Timex forçava a porta 255 a zero para contornar alguns problemas de hardware, mas nem sempre é necessário.

      Quanto à ROM do Guerra, ela não é 100% fiel ao Spectrum em várias rotinas. Foram feitas algumas escolhas deliberadas, também para influenciar a velocidade da edição de BASIC, que acabam por influenciar jogos de BASIC ou jogos mais antigos de assembly que usem a rotina de ROM do teclado.

      ROM do Spectrum

      5C09 REPDEL 23 Time that a key must be held down before it repeats
      5C0A REPPER 05 Delay between successive repeats of a key held down

      ROM do Guerra

      5C09 REPDEL 14 Time that a key must be held down before it repeats
      5C0A REPPER 03 Delay between successive repeats of a key held down

      Eliminar
    2. Só agora reparei. Tens a v3 do Guerra aqui https://sites.google.com/view/rodolfoguerra

      Eliminar
    3. Pareceu-me que essa era mais indicada para os TK90X.
      Incompatibilidades à parte - que devem existir - para já estou bastante satisfeito, é como se o 2048 tivesse ganhou um novo "fôlego".
      Chega a ser um pouco desconcertante porque o efeito até parece ser mais evidente no 2048 do que no próprio 48k, mas claro que posso estar enganado.

      Eliminar
    4. Uma das incompatilibilidades do 2048 é que o clock é ligeiramente mais rápido que o do ZX Spectrum 48K. Muito pouco, mas suficiente para um humano se aperceber, mesmo em jogos.

      Eliminar