Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Stack Bug in ZXB 1.2.5-r1489 ?
#13
Unchunk: This is the uncompression routine by S.Romero (I think, but not sure) posted in the Speccy.org wiki:

Code:
SUB unchunk (source as uinteger,display as uinteger,size as uinteger)
POKE uinteger @datosch,source: POKE uinteger @datosch+2,display: POKE uinteger @datosch+4,size
gosub chunk
END SUB
datosch:
ASM
sourcech:      defw 0
displaych:     defw 0
sizech:        defw 0
END ASM
chunk:
ASM
; Prueba de descompresion RLE
  ; Desempaquetamos un SCR comprimido con RLE sobre la pantalla
  ;ORG 32768

  ; Cargamos los datos y preparamos nuestra rutina
  LD HL, (sourcech)
  LD DE, (displaych)
  LD BC, (sizech)
  ;CALL RLE_decompress




;;
;; RLE_decompress
;; Descomprime un bloque de datos RLE de memoria a memoria.
;;
;; Entrada a la rutina:
;;
;; HL = dirección origen de los datos RLE.
;; DE = destino donde descomprimir los datos.
;; BC = tamaño de los datos comprimidos.
;;
RLE_decompress:

RLE_dec_loop:
   ld a,(hl)                          ; leemos un byte

   cp 192
   jp nc, RLE_dec_compressed          ; si byte > 192 = está comprimido
   ld (de), a                         ; si no está comprimido, escribirlo
   inc de
   inc hl
   dec bc

RLE_dec_loop2:
   ld a,b
   or c
   jr nz, RLE_dec_loop
   ret                                 ; miramos si hemos acabado

RLE_dec_compressed:                    ; bucle para descompresión
   push bc  
   and 63                              ; cogemos el numero de repeticiones
   ld b, a                             ; lo salvamos en B
   inc hl                              ; y leemos otro byte (dato a repetir)
   ld a, (hl)

RLE_dec_loop3:
   ld (de),a                           ; bucle de escritura del dato B veces
   inc de
   djnz RLE_dec_loop3
   inc hl
   pop bc                              ; recuperamos BC
   dec bc                              ; Este DEC BC puede hacer BC=0 si los datos
                                       ; RLE no correctos. Cuidado (mem-smashing).
   dec bc
   jr RLE_dec_loop2
   ret
END ASM
Reply


Messages In This Thread

Forum Jump:


Users browsing this thread: 1 Guest(s)