;---------------------------------------------------------------------- ; 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 0xc000-0xffff CALL Wait_For_No_Key LD HL, 0xc000 ; Nuestro puntero ; Ahora paginamos el banco 0 sobre 0xc000 y guardamos un valor ; en el primer byte de sus 16K (en la direccion 0xc000): LD B, 0 CALL SetRAMBank ; Banco 0 LD A, 0xAA LD (HL), A ; (0xc000) = 0xAA ; Ahora paginamos el banco 1 sobre 0xc000 y guardamos un valor ; en el primer byte de sus 16K (en la direccion 0xc000): LD B, 1 CALL SetRAMBank ; Banco 1 LD A, 0x01 LD (HL), A ; (0xC000) = 0x01 ; 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 0xc000 y lo representamos en pantalla. Recordemos que ; acabamos de escribir 0x01 (00000001) antes de cambiar de banco, ; y que en su momento pusimos 0xAA (unos y ceros alternados): LD B, 0 CALL SetRAMBank ; Banco 0 LD A, (HL) ; Leemos (0xc000) 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 0xc000 y lo representamos en pantalla. Recordemos que ; acabamos de leer 0xA antes de cambiar de banco, y que en su ; momento pusimos 0x01: LD B, 1 CALL SetRAMBank ; Banco 0 LD A, (HL) ; Leemos (0xc000) 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 0xc000 ; Entrada: B = banco (0-7) a paginar entre 0xc000-0xffff ;----------------------------------------------------------------------- SetRAMBank: LD A,(0x5b5c) ; Valor anterior del puerto AND 0xf8 ; Sólo cambiamos los bits necesarios OR B ; Elegir banco "B" LD BC,0x7ffd DI LD (0x5b5c),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