;
;	>>> SillyMenu by JAC! <<<
;
;	@com.wudsn.ide.asm.mainsourcefile=SillyMenu.asm

/*
  CMC Relocator

  $0014..$0053	- LSB adresu patternu
  $0054..$0093	- MSB adresu patternu

  Example:
		cmc_relocator 'file.cmc' , new_address
*/

.macro	cmc_relocator

	.get :1					// wczytujemy plik do bufora MADS'a
	
	ift (.get[0] + .get[1]<<8) <> $FFFF
	 ert 'Bad file format'
	eif

new_add equ :2					// nowy adres dla modulu CMC

old_add	equ .get[2] + .get[3]<<8		// stary adres modulu CMC

	.def ?length = .get[4] + .get[5]<<8 - old_add + 1	// dlugosc pliku MPT bez naglowka DOS'u

	.put[2] = .lo(new_add)				// poprawiamy naglowek DOS'a
	.put[3] = .hi(new_add)				// tak aby zawieral informacje o nowym

	.put[4] = .lo(new_add + ?length - 1)		// adresie modulu CMC
	.put[5] = .hi(new_add + ?length - 1)

ofs	equ 6

// patterns

	.rept 64

	?tmp = .get[ofs+$14+#] + .get[ofs+$54+#]<<8

	ift ?tmp <> $FFFF
	?hlp = ?tmp - old_add + new_add

	.put[ofs+$14+#] = .lo(?hlp)
	.put[ofs+$54+#] = .hi(?hlp)
	eif

	.endr	

// out new file

	.sav [6] ?length			// zapisujemy zawartosc bufora MADS'a do pliku

.endm
