Continuando a postagem, mostrarei aqui como solucionar a incompatibilidade da interface CAS com a ROM do TK90X.
A tela acima mostra que é possível fazer com que o DOS funcione, inclusive aparece a linha de comandos que não era acessível porque o computador travava. Na verdade o Otto Frederico Pereira Carvalho tinha demonstrado que era possível compatibilizar a ROM da Microdigital com o DOS na interface CBI-95, porém ele fez uso de uma EPROM de 16KB no lugar de 8KB. Não cheguei a verificar como Otto contornou o problema, mas acredito que o que eu fiz não é muito diferente.
Tive que intercalar no meio da sub-rotina INITVARS as instruções introduzidas pela Microdigital entre 15611-15614. Isto obrigou-me a adicionar uma instrução JR em 15609, para que INITVARS pudesse prosseguir saltando os códigos intercalados. Com isto, eu teria que empurrar para frente o restante do código da referida sub-rotina e todas as outras que viessem adiante. Não haveria espaço para comportar esses 6 bytes extras na EPROM, portanto removi essa quantidade de memória movendo as sub-rotinas PRT_ENTER e BAS_RST16 para região que não era usada, a partir de 15345 (felizmente mesmo com apenas 8 KB, há espaços não usados na ROM CAS). No fim, a maior parte das rotinas ficaram em seu lugar, evitando uma eventual incompatibilidade com programas.
Esqueci de mencionar na postagem sobre o disassembly da CAS, que a listagem que eu produzi pode ser montada por um programa assembler. No caso, só testei com o pasmo, com sucesso. O que fiz então foi modificar a listagem (o código fonte modificado encontra-se aqui) para incorporar as alterações citadas, tomando cuidado para duplicar as modificações nas duas páginas de 8 KB. Depois fiz a montagem do binário com o pasmo (disponível aqui), coloquei no subdiretório do SpecEmu e fiz um link simbólico como CBI-24.BIN. Iniciando a emulação, o resultado foi um sucesso, aparecendo a tela inicial do DOS do começo desta postagem.
Diversos comandos do DOS mostraram-se funcionais, como o CAT na tela acima. Consegui carregar vários programas sem problema algum. Embora não tenha feito testes exaustivos no emulador, acredito que todos os comandos funcionarão a contento.
O binário de 16K é adequado para o emulador, mas na verdade a EPROM da CAS tem 8 KB. Fiz dois arquivos binários que são as duas metades com o comando dd:
$ dd if=CAS-1986-16K-PatchFMM001.bin of=1.bin bs=1024 count=8
$ dd if=CAS-1986-16K-PatchFMM001.bin of=2.bin bs=1024 skip=8
Como checagem adicional, comparei as duas metades, que deveriam ser idênticas:
$ cmp -l 1.bin 2.bin
Felizmente deram iguais na comparação, então peguei uma delas, renomeei para um nome mais significativo e deixei à disposição aqui. Entretanto este arquivo ainda não é adequado para gravar numa EPROM, pois alguns sinais estão trocados na placa de circuito impresso da interface CAS. Deixo ao cargo do leitor para promover as devidas trocas de bits, pois eu não teria como testar por não possuir o hardware real. Quem sabe se o Eduardo Luccas não faça isso para nós.
Atualização: o Danjovic elaborou um script em Python para inverter os bits 0 e 7, produzindo um arquivo adequado para queimar EPROM. Experimentei no binário que eu montei e estou disponibilizando aqui o resultado. Como não tenho o hardware para testar, não dou certeza de seu funcionamento.
Ja que o assunto é sobre a Beta 48,voce deve então conhecer a Vision Desktop 1.7,que é uma ROM especifica para esta interface.
ResponderExcluirDe uma olhada no video abaixo:
https://www.youtube.com/watch?v=O_D-z3UDnRE#t=70
A ROM esta no link abaixo:
http://zxspectrum.it.omegahg.com/_TR.htm
Eu ja testei no Spectemu,trocando pelo arquivo da CBI24.rom e funcionou.
Não conheço essa ROM, eu acho que não chegou a ser popular aqui o país. Obrigado pela sugestão, darei uma olhada nos links.
ExcluirSalve Professor Flávio
ResponderExcluirSegue abaixo script python para gerar o arquivo pronto pra gravar na eprom
fi = open("romCas.bin", "rb")
fo = open("romEncoded.bin","wb")
byte = fi.read(1)
while (byte!=""):
byte_in = ord(byte)
byte_out = (byte_in & 0x7e) + (byte_in >>7 & 0x01 ) + (byte_in <<7 & 0x80)
fo.write(chr(byte_out))
byte = fi.read(1)
fo.close()
fi.close()
Danjovic,seria possivel fazer uma adaptação desse Vision Desktop 1.7 para uso nas interfaces Beta 128????
ExcluirOpa, valeu, Danjovic! Uma hora experimentarei o script no binário. Pena que não tenho o hardware para testar.
ExcluirBeepoyo: a pergunta mais apropriada não é se tal adaptação é possível, mas é se tem alguém que se disporia a fazer isso. Sem o código fonte é um trabalho muito grande e eu não tenho interesse por não possuir uma Beta 128.
Excluir