Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- FUNCION_MEMORY_GET_RAM_PAGES012_NO_MAPPER:
- ld hl, $0000 ; Direccion inicial de la pagina
- ld [(NGN_RAM_BUFFER + MEMORY_PAGE_ADDR)], hl
- ld b, 3 ; Paginas del 0 al 3
- @@CHECK_PAGES_LOOP:
- push bc ; Preserva los contadores del bucle
- di ; Deshabilita las interrupciones
- ; Paso 1, lee 1 byte
- ld a, [(NGN_RAM_BUFFER + MEMORY_SLOT_ID)] ; ID de slot
- ld hl, [(NGN_RAM_BUFFER + MEMORY_PAGE_ADDR)] ; Direccion de la pagina
- call $000C ; Lee un byte del slot con la ID en A de la direccion HL (RDSLT)
- ld b, a ; Respaldo del byte leido
- cpl ; Invierte los bits
- ; Paso 2, escribelo invertido
- ld e, a ; Byte a escribir
- ld c, a
- ld a, [(NGN_RAM_BUFFER + MEMORY_SLOT_ID)] ; ID de slot
- ld hl, [(NGN_RAM_BUFFER + MEMORY_PAGE_ADDR)] ; Direccion de la pagina
- push bc
- call $0014 ; Escribe un byte (E) en el slot con la ID en A en la direccion HL (WRSLT)
- ; Paso 3, vuelvelo a leer y compara si es el mismo que has escrito
- ld a, [(NGN_RAM_BUFFER + MEMORY_SLOT_ID)] ; ID de slot
- ld hl, [(NGN_RAM_BUFFER + MEMORY_PAGE_ADDR)] ; Direccion de la pagina
- call $000C ; Lee un byte del slot con la ID en A de la direccion HL (RDSLT)
- pop bc
- cp c ; Son iguales ?
- jr nz, @@NOT_RAM ; No lo son, es ROM
- ; Paso 4, restaua el byte original en su sitio
- ld e, b ; Byte a escribir (restaura el original)
- ld a, [(NGN_RAM_BUFFER + MEMORY_SLOT_ID)] ; ID de slot
- ld hl, [(NGN_RAM_BUFFER + MEMORY_PAGE_ADDR)] ; Direccion de la pagina
- call $0014 ; Escribe un byte (E) en el slot con la ID en A en la direccion HL (WRSLT)
- ; Paso 5, Suma 16kb de esta pagina
- call FUNCTION_MEMORY_COUNTER_ADD_16KB
- @@NOT_RAM:
- ei ; Habilita las interrupciones
- pop bc ; Restaura el contador del bucle
- ld hl, [(NGN_RAM_BUFFER + MEMORY_PAGE_ADDR)]
- ld de, $4000 ; Siguiente pagina
- add hl, de
- ld [(NGN_RAM_BUFFER + MEMORY_PAGE_ADDR)], hl
- djnz @@CHECK_PAGES_LOOP
- ; Fin de la funcion
- ret
Advertisement
Add Comment
Please, Sign In to add comment