А на реале все закончилось пока печально. Стер одну страницу, а вот при записи выскочила ошибка. Видимо что то я не так сделал. Теперь 64кб в ПЗУ стерто
Надо теперь катать прожку хотя бы поглядеть что записалось или не записалось.
Вот вдогонку листинг процедуры записи - может кто незамыленным взглядом найдет ошибку, если она есть
- Code: Select all
;-------------------------------------------------------------------
; описание: Запись страницы ПЗУ
; параметры: A - номер страницы
; возвращаемое значение:
;---------------------------------------------------------------------
MoonService_flash_writing:
ld hl,0 ;адрес внутри страницы
ld b,0 ;четыре страницы по 16 кб
MoonService_flash_writing_00:
push bc
ld a,3
sub b
call MoonService_set_page ;установим номер страницы
ld bc,16384
ld ix,0C000h
MoonService_flash_writing_01:
push bc
push hl
ld b,0
ld hl,0555h
ld c,0AAh
call MoonService_flash_bwrite
ld hl,02AAh
ld c,55h
call MoonService_flash_bwrite
ld hl,0555h
ld c,0A0h
call MoonService_flash_bwrite
pop hl
ld a,(MoonService_flash_cpage) ;текущая страница ПЗУ
ld b,a
ld c,(ix + 0)
call MoonService_flash_bwrite
MoonService_flash_writing_02:
call MoonService_flash_bread
ld e,c
call MoonService_flash_bread
ld a,c
xor e
bit 6,a
jr z,MoonService_flash_writing_03 ; no toggle - end! (carry is clear)
bit 5,a
jr nz,MoonService_flash_writing_02 ; if toggle and error bit toggles -
; repeat reading
bit 5,e ; toggle, error bit is set - error!
jr z,MoonService_flash_writing_02 ; otherwise - just toggle, wait more
jp MoonService_flash_verifying_02
MoonService_flash_writing_03:
pop bc
inc ix
inc hl
dec bc
ld a,b
or c
jr nz,MoonService_flash_writing_01
pop bc
inc b
ld a,b
cp 4
jr nz,MoonService_flash_writing_00 ;еще есть данные
xor a ;нет ошибок
ret