;---------------------------------------------------------------------- ; Bancos.asm ; Demostracion del uso de bancos / paginación en modo 128K ;---------------------------------------------------------------------- ORG 35000 call CLS ld hl, 0 add hl, sp ; Guardamos el valor actual de SP ex de, hl ; lo almacenamos en DE ld sp, 26000 ; Pila fuera de $c000-$ffff call Wait_For_No_Key ld hl, $c000 ; Nuestro puntero ; Ahora paginamos el banco 0 sobre $c000 y guardamos un valor ; en el primer byte de sus 16K (en la direccion $c000): ld b, 0 call SetRAMBank ; Banco 0 ld a, $AA ld (hl), a ; ($c000) = $AA ; Ahora paginamos el banco 1 sobre $c000 y guardamos un valor ; en el primer byte de sus 16K (en la direccion $c000): ld b, 1 call SetRAMBank ; Banco 1 ld a, $01 ld (hl), a ; ($C000) = $01 ; Esperamos una pulsación de teclas antes de empezar: call Wait_For_Key ; Ahora vamos a cambiar de nuevo al banco 0, leemos el valor que ; hay en $c000 y lo representamos en pantalla. Recordemos que ; acabamos de escribir $01 (00000001) antes de cambiar de banco, ; y que en su momento pusimos $AA (unos y ceros alternados): ld b, 0 call SetRAMBank ; Banco 0 ld a, (hl) ; Leemos ($c000) call ClearScreen ; Lo pintamos en pantalla ; Esperamos una pulsación de teclas: call Wait_For_Key ; Ahora vamos a cambiar de nuevo al banco 1, leemos el valor que ; hay en $c000 y lo representamos en pantalla. Recordemos que ; acabamos de leer $A antes de cambiar de banco, y que en su ; momento pusimos $01: ld b, 1 call SetRAMBank ; Banco 0 ld a, (hl) ; Leemos ($c000) call ClearScreen ; Lo pintamos en pantalla ; Esperamos una pulsación de teclas: call Wait_For_Key ex de, hl ; Recuperamos SP para poder volver ld sp, hl ; a BASIC sin errores ret ;----------------------------------------------------------------------- ; SetRAMBank: Establece un banco de memoria sobre $c000 ; Entrada: B = banco (0-7) a paginar entre $c000-$ffff ;----------------------------------------------------------------------- SetRAMBank: ld a, ($5b5c) ; Valor anterior del puerto and %11111000 ; Sólo cambiamos los bits necesarios or b ; Elegir banco "B" ld bc, $7ffd di ld ($5b5c), a out (c),a ei ret ;----------------------------------------------------------------------- ; ClearScreen: Limpia toda la pantalla con un patrón gráfico dado. ; Entrada: A = valor a "imprimir" en pantalla. ;----------------------------------------------------------------------- ClearScreen: push hl push de ld hl, 16384 ld (hl), a ld de, 16385 ld bc, 6143 ldir pop de pop hl ret ;--- Libreria utils.asm --- INCLUDE "utils.asm" END 35000