есть процессор Atmel AT89S8252 с 51-й архитектурой со внутренним EEPROM на 2Кб, вопрос - как правильно с этим EEPROM-ом общаться?
По документации надо выставлять флаги EEMEN и EEMWE в регистре WMCON (0x96) для чтения/записи соответственно. Тогда операции movx a,@dptr и movx @dptr,a работают не с внешней памятью, а со встроенным eeprom. Но тут я натолкнулся на такую неприятность - стоит во время записи сделать что-нибудь лишенее (по идее, никак не могущее влиять на запись) и результаты записи  в eeprom-е получаются просто непредсказуемые. Вот пример кода:
		orl	WMCON,#EEMEN
		orl	WMCON,#EEMWE
		mov	dptr,#0
		movx	a,@dptr
		cjne	a,#0aah,initEpromI
		; дальше пропустим
;------------------------------------------
initEpromI{
		mov	a,#0aah
		call	wrEpromI
		mov r3,#)mDStep-xEStep:
		mov	r0,#xEStep
wrkf{
		clr	a
		mov	@r0,a
		call	wrEpromI
		inc	r0
		djnz	r3,wrkf
		; здесь опять пропустим
		xrl	WMCON,#EEMWE
		xrl	WMCON,#EEMEN
		jmp   start
wrEpromI{
		push b
		mov	b,a
nextWr{		movx	@dptr,a
loop{		mov	a,WMCON
		anl	a,#WDTRST
		jz	loop
		movx	a,@dptr
		cjne	a,b,wrErr
		inc	dptr
		pop b
		ret
wrErr{		mov	a,b
		jmp	nextWr
start{
задачей этого отрывка является инициализация епром-а нового процессора. в результате в епром с адреса 0x0000 прошиваются следующие значения: 0xaa и 8 раз 0x00
приведенный выше кусок работает нормально, но (!) раньше вслед за меткой initEpromI: стояла команда orl WMCON,#EEMWE (т.е. просто излишняя команда, которая ни на что влиять не должна), а врезультате в епром-е оказывалось 0xaa 0xff и только после этого нули.
В чем тут загвоздка?