sábado, 19 de outubro de 2013

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