crt0_rle.s (2215B)
1;-------------------------------------------------------------------------- 2; __initrleblock.s 3; 4; Copyright (C) 2001, Michael Hope 5; Copyright (C) 2020, Sergey Belyashov 6; 7; This library is free software; you can redistribute it and/or modify it 8; under the terms of the GNU General Public License as published by the 9; Free Software Foundation; either version 2, or (at your option) any 10; later version. 11; 12; This library is distributed in the hope that it will be useful, 13; but WITHOUT ANY WARRANTY; without even the implied warranty of 14; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15; GNU General Public License for more details. 16; 17; You should have received a copy of the GNU General Public License 18; along with this library; see the file COPYING. If not, write to the 19; Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston, 20; MA 02110-1301, USA. 21; 22; As a special exception, if you link this library with other files, 23; some of which are compiled with SDCC, to produce an executable, 24; this library does not by itself cause the resulting executable to 25; be covered by the GNU General Public License. This exception does 26; not however invalidate any other reasons why the executable file 27; might be covered by the GNU General Public License. 28;-------------------------------------------------------------------------- 29 30 .module rledecompress 31 32 .area _HOME 33 34 ;; Special RLE decoder used for initing global data 35 ;; input: DE - destination address 36__initrleblock:: 37 ;; Pop the return address 38 pop hl 391$: 40 ;; Fetch the run 41 ld c, (hl) 42 inc hl 43 ;; Negative means a run 44 bit 7, c 45 jr Z, 2$ 46 ;; Expanding a run 47 ld a, (hl+) 483$: 49 ld (de), a 50 inc de 51 inc c 52 jr NZ, 3$ 53 jr 1$ 542$: 55 ;; Zero means end of a block 56 inc c 57 dec c 58 jr Z, 4$ 59 ;; Expanding a block 605$: 61 ld a, (hl+) 62 ld (de), a 63 inc de 64 dec c 65 jr NZ, 5$ 66 jr 1$ 674$: 68 ;; Return back 69 jp (hl)