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 ASM
… END 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
- Siga as instruções de instalação do SDK do ZX BASIC.
- mc1000bin2wav.py (https://pastebin.com/raw/GHXwde8E)
- createmc1000header.py (https://pastebin.com/raw/qfRjRvDy)
Preparação
- 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) - 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).
- 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