segunda-feira, 4 de julho de 2022

ZX BASIC

O ZX BASIC (https://zxbasic.readthedocs.io/en/docs/) é uma versão estendida da linguagem BASIC do ZX Spectrum para a qual foi desenvolvido um compilador cruzado multiplataforma. O código gerado também é voltado para o ZX Spectrum, mas ao remendarmos o resultado compilado final com um script, e tomando o cuidado de evitar funcionalidades que dependem da ROM do ZX Spectrum (strings, arrays…) ou voltadas para o hardware do ZX Spectrum (PRINT etc.), podemos criar material para outras máquinas com CPU Z80, incluindo o MC1000.

MC1000 (emulado no MAME) rodando programa em ZX BASIC compilado.

Código assembly específico para o MC1000 pode ser facilmente embutido nas funções ou procedimentos por meio do bloco ASMEND ASM. Por exemplo, o procedimento abaixo disponibiliza ao BASIC a rotina DELAYB da ROM do MC1000:

SUB FASTCALL mc1000delayb(tvl1 AS UINTEGER)
  ASM
    ; Com FASTCALL o valor do parâmetro único do tipo UINTEGER
    ; (16 bits sem sinal) é recebido no par de registradores HL
    ; e não pela pilha do Z80.
    ld b,h ; Carrega em BC o valor em HL.
    ld c,l
    call $C30E ; Chama a rotina DELAYB.
  END ASM
END SUB

.

Pré-requisitos

Preparação

  1. Fazer com que zxb.py seja reconhecido como comando (no GNU/Linux: export PATH=$PATH:/opt/borielszxbasiccompiler (o diretório é um exemplo de onde poderíamos tê-lo instalado) numa linha em ~/.bashrc (a última linha, por exemplo)
  2. Instalar mc1000bin2wav.py e createmc1000header.py em /usr/bin/ (ou outro diretório, mas utilizando um procedimento parecido com o item 1). Estes scripts devem estar com permissão de execução (chmod +x).
  3. O bash script utilizado para compilação foi criado e usado em GNU/Linux, ainda não testado em outros Unix (como MacOS-X). No caso do MS Windows, não deve ser difícil converter o .sh para .bat

Utilização

O bash script seria algo parecido com este teste.sh:

rm teste.bin teste.asm mc1000header.bin mc1000tail.bin
zxb.py teste.bas --asm --org=0x0200
zxb.py teste.bas --org=0x0200
createmc1000header.py teste.bin
cat mc1000header.bin > teste.final.bin
cat teste.bin >> teste.final.bin
cat mc1000tail.bin >> teste.final.bin
mv teste.final.bin teste.bin
rm mc1000header.bin mc1000tail.bin
mc1000bin2wav.py teste.bin
zip teste.bin.wav.zip teste.bin.wav
rm teste.bin.wav
mess mc1000 -video soft -w -bp ~/.mess/roms -resolution0 640x480 -skip_gameinfo -ramsize 48k -cass teste.bin.wav.zip
# tload, [enter], [insert], [tab], , , [tab]

Para maior comodidade, utilizando um IDE como Geany, podemos ter um makefile com uma linha como a:;./teste.sh no mesmo diretório do código a ser compilado, e do script de compilação.

Em http://www.boriel.com/wiki/en/index.php/ZX_BASIC:Released_Programs_-_MC1000 está disponível um exemplo, a pasta /library/ contém alguns comandos (functions e subs) específicos para o MC1000.

Nenhum comentário:

Postar um comentário

"MC-1000", "MC 1000" ou "MC1000"?

No gabinete do computador, nos acessórios e nos materiais impressos (caixa, capas dos manuais, rótulos e capas das fitas, propagandas etc.) ...