MILC logo

IndexVorigeVolgendeLeeg

MoonBlaster song decruncher
Onbekend, 00-00-00


    
;--- MoonBlaster song decruncher ---
;
; Opslag songdata: Alleen nullen gecrunched.
;	   Alle waarden boven 242 = 1 of meer nullen, dus max. 13



sngdecrc:	ld	a,sngpag	; SNGPAG = mapperbank met ONGECRUNCHTE
	out	(0feh),a	; songdata

	ld	hl,08000h	; verplaatsen van de instellingen
	ld	de,08000h+200
	ld	bc,376	; aantal bytes v. div. settings
sngdecrl1:	call	copybyte
	inc	hl
	inc	de
	dec	bc
	ld	a,b
	or	c
	jr	nz,sngdecrl1

	ld	a,em1pag	; EM1PAG = mapperbank met GECRUNCHTE
	out	(0feh),a	; songdata
	ld	a,(08000h)	; last position
	inc	a
	ld	b,a
	push	bc	; verplaats pat/pos data
	ld	de,08000h
sngdecrl2:	call	copybyte
	inc	hl
	inc	de
	djnz	sngdecrl2
	pop	bc

	push	hl
	ld	e,1
	ld	hl,08000h
sngdecrl3:	ld	a,(hl)
	cp	e
	jr	c,sngdecrl4
	ld	e,a
sngdecrl4:	inc	hl
	djnz	sngdecrl3

	ld	d,0
	pop	hl
	add	hl,de
	add	hl,de	; sla pattern adressen over

	ld	a,em1pag
	out	(0feh),a

	ld	de,08240h	; echte decrunchen van songdata
	ld	bc,03dc0h	; !maximale! aantal bytes
sngdecrl6:	ld	a,(hl)
	or	a
	jr	z,sngdecrend	; eindmarker gevonden? eerder weg!
	cp	243
	jr	nc,sngdecrl7	; gecrunchte data? dan decrunchen!
	call	wrtbyte
sngdecrl9:	inc	hl
	dec	bc
	ld	a,b
	or	c
	jr	nz,sngdecrl6
sngdecrend:	ld	a,sngpag	; einde decrunchen
	out	(0feh),a
	ret

sngdecrl7:	push	bc	; decrunchen serie nullen
	sub	242
	ld	b,a
sngdecrl8:	xor	a
	call	wrtbyte
	djnz	sngdecrl8
	pop	bc
	jr	sngdecrl9



;--- copieer databyte vanuit ene mapperbank naar andere ---

copybyte:	ld	a,em1pag
	out	(0feh),a
	ld	a,(hl)
	ex	af,af'
	ld	a,sngpag
	out	(0feh),a
	ex	af,af'
	ld	(de),a
	ret

;--- schrijf gedecrunchte databyte ---

wrtbyte:	ex	af,af'
	ld	a,sngpag
	out	(0feh),a
	ex	af,af'
	ld	(de),a
	ld	a,em1pag
	out	(0feh),a
	inc	de
                ret

    

Index

Vorige

Volgende