inx h ;
ana M ; addr+1
inx h ;
ana M ; addr+2
inx h ;
ana M ; addr+3
cpi 0FFh ; проверка
JNZ BADmemory ; если где-то не единица…
inx h ;
mov a,h ;
cpi HIGH(RAMend)+1 ;
JNZ MEMread2 ; поиск 2049-го прохода
lxi h,RAMbase ; начало ОЗУ
MEMload3: mov M,L ; загрузка нарастающего числа
inx h ;
mov M,L ; addr+1
inx h ;
mov M,L ; addr+2
inx h ;
mov M,L ; addr+3
inx h ;
mov a,h ;
cpi HIGH(RAMend)+1 ;
JNZ MEMload3 ; поиск 2049-го прохода
lxi h,RAMbase ; начало ОЗУ
MEMread3: mov a,M ; чтение
cmp L ; проверка
JNZ BADmemory ; если где-то не совпадает…
inx h ;
mov a,h ;
cpi HIGH(RAMend)+1 ;
JNZ MEMread3 ; поиск 2049-го прохода
lxi h,RAMbase ; начало ОЗУ
mvi b,00h ;
MEMload1: mov M,b ; загрузка НУЛЯМИ
inx h ;
mov M,b ; addr+1
inx h ;
mov M,b ; addr+2
inx h ;
mov M,b ; addr+3
inx h ;
mov a,h ;
cpi HIGH(RAMend)+1 ;
JNZ MEMload1 ; поиск 2049-го прохода
; проверка ЧТЕНИЯ НУЛЕЙ
lxi h,RAMbase ; начало ОЗУ
MEMread1: mov a,M ; чтение
inx h ;
ora M ; addr+1
inx h ;
ora M ; addr+2
inx h ;
ora M ; addr+3
JNZ BADmemory ; если где-то не нуль…
inx h ;
mov a,h ;
cpi HIGH(RAMend)+1 ;
JNZ MEMread1 ; поиск 2049-го прохода
JMP MEMgood ; на инициализацию памяти
;---------------------------------;▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
; BADMEMORY
; "тревога" на 1.5 с если был сбой памяти
;----------------------------------
BADmemory: mvi a,80h ;
out Port2C ; тревога (PC7=1)
lxi d,0FFFFh ; 65535=1570 mS задержка
Sound1: dcx d ; 5T
mov a,d ; 5T
ora e ; 4T
JNZ Sound1 ; 10T - 24мкс в цикле
xra a
out Port2C ; откл. тревоги (PC7=0)
lxi d,0FFFFh ; 1.5 S задержка
Sound2: dcx d ; 5T
mov a,d ; 5T
ora e ; 4T
JNZ Sound2 ; 10T - 24мкс в цикле
JMP ReST7 ; рестарт системы по причине
; плохой памяти
;----------------------------------
;▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
; Если успешно пройден тест памяти…
;----------------------------------
MEMgood: xra a ;
out Ind1 ; то мигнем индикаторами
out Ind10 ;
out Ind100 ;
mvi a,7*2+1 ; PC7=1
out Port2RCW ; и динамиком
lxi d,830 ; на 0.2 секунды
Flash: dcx d ; 5T
mov a,d ; 5T
ora e ; 4T
JNZ Flash ; 10T - 24мкс в цикле
mvi a,0FFh ;
out Ind1 ; и потушим индикаторы
out Ind10 ;
out Ind100 ;
mvi a,7*2+0 ; PC7=0
out Port2RCW ; и выключим динамик.
call MEMinit ; Инициализация переменных
call PanelScan ; два раза, чтобы побороть
call PanelScan ; защиту от дребезга
MainLoop: ; ─┐
call MAIN ; │ ГЛAВНЫЙ
call Delay50ms ; задержка 50 мс │ ЦИкЛ
JMP MainLoop ; ─┘
;----------------------------------
;▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
; MEMINIT
; Инициализация системных переменных
;----------------------------------
MEMinit PROC ;
lxi h,_STATbase ;
shld StatBase ; указатель на начало статистики
xra a ;
sta StatSize ; пока нету статистики
lxi h,SmaxStart ;
shld Tol_PSmax ; установка
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.