GoToBasic48.asm
Eletrônica

GoToBasic48.asm


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. 



loading...

- Dica Tv Electronia 20nt Chassis 11ak30
Defeito--Não liga. Led vermelho aceso. Ao tentar ligar, o led passa a verde mas, no               mesmo instante, o led volta para vermelho e a fonte da tv não arma.Valores         ...

- Dica Tvs Panasonic Tx-25xd3e Chassis Euro 2m
Defeito--Este  tv estava em protecção, trazia o transístor de saída de linhas (2SD1577-               LB) em curto. Depois de o substituir, o tv arrancou apresentando o seguinte       ...

- Número Aleatório Por Xor-shift
Apresento a sub-rotina de geração de número pseudoaleatório que foi usada na minha parte do demo Mission Highly Improbable.  Anteriormente mostrei a sub-rotina de Phantom Club para a mesma finalidade, porém a qualidade da sequência gerada...

- Outra Rotina De Detecção De Ram 48/128k
Eu publiquei nesta postagem, uma rotina que faz a detecção no TK90X da configuração com ou sem a TKMEM-128 (128 ou 48K de RAM). Modifiquei-a e consegui fazer com que ficasse menor ainda (25 bytes).  Esta rotina testa se ocorre chaveamento entre...

- Gotobasic48.asm
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....



Eletrônica








.