git.y1.nz

gbdk-2020

GameBoy Development Kit
download: https://git.y1.nz/archives/gbdk.tar.gz
README | Files | Log | Refs | LICENSE

gbdk-lib/libc/targets/z80/gb_decompress.s

      1 ; GB-Deompress routine
      2 ; Compatible with GBTD
      3 
      4         .include        "global.s"
      5 
      6         .title  "GB Decompress"
      7         .module GBDecompress
      8 
      9         .area _CODE
     10 
     11 ; hl = source; de = dest
     12 _gb_decompress::
     13         pop     hl
     14         pop     de
     15         ex      (sp), hl
     16         ex      de, hl
     17         push    bc
     18         push    de
     19 1$:
     20         ld      a, (hl) ; load command
     21         inc     hl
     22         or      a
     23         jr      z, 7$   ; exit, if last byte
     24         bit     7, a
     25         jp      nz, 5$  ; string functions
     26         bit     6, a
     27         jr      nz, 3$
     28         ; RLE byte
     29         and     #63     ; calc counter
     30         inc     a
     31         ld      b, a
     32         ld      a, (hl)
     33         inc     hl
     34 2$:
     35         ld      (de), a
     36         inc     de
     37         dec     b
     38         jp      nz, 2$
     39         jp      1$      ; next command
     40 3$:                     ; RLE word
     41         and     #63
     42         inc     a
     43         ld      c, (hl) ; load word into bc
     44         inc     hl
     45         ld      b, (hl)
     46         inc     hl
     47         ex      de, hl
     48 4$:
     49         ld      (hl), c
     50         inc     hl
     51         ld      (hl), b
     52         inc     hl
     53         dec     a
     54         jp      nz, 4$
     55         ex      de, hl
     56         jp      1$      ; next command
     57 5$:
     58         bit     6, a
     59         jr      nz, 6$
     60         ; string repeat
     61         and     #63
     62         inc     a
     63         push    hl
     64         ld      c, (hl)
     65         inc     hl
     66         ld      b, (hl)
     67         ld      h, d
     68         ld      l, e
     69         add     hl, bc
     70         ld      c, a
     71         ld      b, #0
     72         ldir
     73         pop     hl
     74         inc     hl
     75         inc     hl
     76         jp      1$      ; next command
     77 6$:                     ; string copy
     78         and     #63
     79         inc     a
     80         ld      c, a
     81         ld      b, #0
     82         ldir
     83         jp      1$      ; next command
     84 7$:
     85         pop     hl
     86         ex      de, hl
     87         or      a       ; clear carry flag
     88         sbc     hl, de
     89         pop     bc
     90         ret

This webpage is intended to be an accessible preview of this repository. To get a fuller picture, clone it and use the git CLI.