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 os bancos de RAM 0 e 1 e mantém os conteúdos de ambos intactos.
; Test availability of 128K of RAM without modifying its
;contents.
; Registers destroyed: A, F, B, C, D, E, H and L.
; Output: Flag Z is 1 if 128K was available.
;
; This routine must be executed with maskable interrupt disabled.
;
LD BC,32765 ; Port for RAM bank switching (#7FFD).
LD E,17 ; Constant for RAM 0 switching.
LD HL,49168 ; HL is pointer to a sample byte of RAM page
;3. L is also used to select RAM bank 0.
OUT (C),L ; Switch to RAM 0.
LD A,(HL) ; Fetch sample byte from RAM.
CPL ; Invert all bits of sample byte.
OUT (C),E ; Switch to RAM 1.
LD D,(HL) ; Save byte into register D before modifying
;RAM 1.
LD (HL),A ; Put inverted sample byte into RAM 1.
OUT (C),L ; Switch to RAM 0.
CPL ; Invert bits of sample byte again and
;compare.
CP (HL) ; Flag Z=1 for 128K; Z=0 for 48K.
OUT (C),E ; Switch to RAM 1.
LD (HL),D ; Restore RAM 1 contents.
OUT (C),L ; Switch to RAM 0.
Se houver 128K de RAM, a flag Z retornará com valor 1.
Nenhum comentário:
Postar um comentário
Seu comentário é bem vindo, mas peço que use este espaço adequadamente.