Imanolea

main.asm

Dec 25th, 2016
1,577
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ; Copia datos a la memoria RAM de la SNES
  2. ; @entrada  DE: Datos del paquete
  3. ; @entrada  HL: Gráficos a copiar por VRAM-transfer
  4. ; @entrada  [AUXVAR]: Flag que indica si se están copiando datos de tiles 2bpp
  5. copysnes:
  6.     di
  7.     push    de
  8.     call    display_off             ; Deshabilitamos interrupciones y apagamos el LCD, ya que vamos a modificar la VRAM
  9.     ld      a,  %11100100
  10.     ld      [rBGP], a               ; Paleta asignada a los gráficos a copiar
  11.     ld      de, _VRAM + 2048
  12.     ld      a,  [_AUXVAR]
  13.     and     a
  14.     jr      z,  .copysnes_0
  15.     call    parsesgbbordertiles     ; Convierte los gráficos de 2bpp a 4bpp
  16.     jr      .copysnes_1
  17. .copysnes_0:
  18.     ld      bc, 4096
  19.     call    copymem                 ; Copiamos en la VRAM los 4KB que van a transferirse a la VRAM de la SNES
  20. .copysnes_1:
  21.     ; Copiamos en el fondo visible de _SCRN0 los 4KB de datos que se transmitirán a la SNES por VRAM transfer
  22.     ld      hl, _SCRN0
  23.     ld      de, 12                  ; Ancho adicional del fondo
  24.     ld      a,  $80                 ; Dirección en VRAM del primer tile a transferir
  25.     ld      c,  13                  ; Filas de datos a copiar
  26. .copysnes_2:
  27.     ld      b,  20                  ; Ancho del fondo visible
  28. .copysnes_3:
  29.     ld      [hli],  a               ; Asignación del tile nulo
  30.     inc     a
  31.     dec     b
  32.     jr      nz, .copysnes_3
  33.     add     hl, de                  ; Siguiente fila de tiles del fondo visible
  34.     dec     c
  35.     jr      nz, .copysnes_2
  36.     ld      a,  LCDCF_DEFAULT
  37.     ld      [rLCDC],    a           ; Encendemos el LCD para que la transferencia pueda producirse
  38.     pop     hl                      ; Recuperamos la definición del paquete
  39.     call    sgbpackettransfer       ; Enviamos el paquete que producirá la transferencia
  40.     xor     a
  41.     ld      [rBGP], a               ; Restauramos la paleta de colores del fondo a un valor nulo
  42.     ret
  43.  
  44. ; Convierte los gráficos 2bpp apuntados por HL a 4bpp y los almacena en la dirección apuntada por DE
  45. parsesgbbordertiles:
  46.     ld      b,  128
  47. .parsesgbbordertiles_0:
  48.     ; Copiamos los bit planes 1 y 2 de los datos de los tiles
  49.     ld      c,  16
  50. .parsesgbbordertiles_1:
  51.     ld      a,  [hli]
  52.     ld      [de],   a
  53.     inc     de
  54.     dec     c
  55.     jr      nz, .parsesgbbordertiles_1
  56.     ; Los bit planes 3 y 4 se setean a cero
  57.     ld      c,  16
  58.     xor     a
  59. .parsesgbbordertiles_2:
  60.     ld      [de],   a
  61.     inc     de
  62.     dec     c
  63.     jr      nz, .parsesgbbordertiles_2
  64.     dec     b
  65.     jr      nz, .parsesgbbordertiles_0
  66.     ret
Add Comment
Please, Sign In to add comment