Existem certos programas que não são compatíveis com o modo 128 BASIC do ZX Spectrum 128, ou TK90X e a TKMEM-128 com a ROM 128 ativada. Um exemplo é o Lerm Code Compressor 1 que utilizo muito nas minhas adaptações para a interface de drive Beta.
Menu do ZX Spectrum 128 |
Para sair do modo 128 BASIC, pode-se empregar a opção '48 BASIC' do menu ou usar comando
SPECTRUM
. O ponto negativo desta abordagem é que o chaveamento da RAM é desabilitado, impedindo o acesso aos 128KB de bancos de RAM.
Digitando o comando
USR0
no editor BASIC, é possível ir para o 48 BASIC sem perder o chaveamento, porém todo o conteúdo da RAM é apagado. Eu desejava uma abordagem em que o conteúdo da RAM fosse preservado, por isso criei o programa assembly GoToBasic48:
ORG 23872
;
INCLUDE "Header_Basic.asm"
;
DI ; Disable interrupts before touching system
;variables.
LD BC,32765 ; Select ROM 1 and RAM 0.
LD A,16
OUT (C),A
RES 4,(IY+1) ; Change FLAGS to 48K mode.
LD HL,(RAMTOP) ; Stack will be cleared.
LD (HL),62 ; Put end marker of GOSUB stack.
DEC HL ; Leave space of one byte.
LD SP,HL ; Define new value of stack pointer.
LD HL,MAIN_4 ; Put error treatment routine address onto stack
PUSH HL
LD (ERR_SP),SP ;and redefine value of ERR_SP.
EI ; Enable interrupts before returning to BASIC.
JP STMT_RET ; Jump to interpret the next BASIC statement.
END
Basicamente o programa seleciona RAM 0 e ROM do 48 BASIC, define a variável de sistema FLAGS para modo 48K, reconstrói as pilhas de máquina e de GOSUB e passa o controle para a ROM, para que esta passe a interpretar o próximo comando BASIC.
Para montar o programa acima (assembling), é necessário o arquivo Header_BASIC.asm, mas não é necessário fazer esta operação, pois o binário já está pronto e pode ser baixado neste link. O código fonte está disponível neste link.
O programa em código de máquina pode ser armazenado em qualquer parte da RAM sem a necessidade de fazer uma nova montagem. Um local interessante é dentro da uma linha BASIC.
Para montar o programa acima (assembling), é necessário o arquivo Header_BASIC.asm, mas não é necessário fazer esta operação, pois o binário já está pronto e pode ser baixado neste link. O código fonte está disponível neste link.
O programa em código de máquina pode ser armazenado em qualquer parte da RAM sem a necessidade de fazer uma nova montagem. Um local interessante é dentro da uma linha BASIC.
Nenhum comentário:
Postar um comentário
Seu comentário é bem vindo, mas peço que use este espaço adequadamente.