Код:
.ORG 00100h
L_0100: LXI D, L_DATA
PUSH D ; сохраняем в стеке ссылку
L_MAIN: POP D ; считываем ссылку
LDAX D ; загружаем A по ссылке
ORA A
RZ ; выход, если там ноль ---->>>>
INX D ; DE=DE+1
PUSH D ; сохраняем в стеке новую ссылку
OUT 010h ; отправляем в порт
LXI H, 02000h ; заполнение памяти -- сколько
CPI 080h
LXI B, 08000h ; с какого адреса 1
JC L_LOOP ; если A < 080h
LXI B, 0E000h ; с какого адреса 2
L_LOOP: MVI A, 055h ; чем заполнять
STAX B ; пишем
INX B
DCX H
MOV A, L
ORA H
JNZ L_LOOP ; пока HL не обнулится
XRA A ; обнуляем аккумулятор
OUT 010h ; отправляем в порт -- отключаем КД
DCX B ; на шаг назад
LDAX B ; считываем последний байт
CPI 055h ; сравниваем с тем, что писали
LXI D, L_ERRT ; ссылка на сообщение об ошибке
JZ L_DONE ; если равны -- значит КД работает не правильно
LXI D, L_TEXT
L_DONE: MVI C, 009h
CALL 5 ; вывод сообщения
MVI C,1
LXI D, 2000h
CALL 5 ; ожидание нажатия клавиши
JMP L_MAIN ; цикл
;
L_SAVE: .dw 0000h
L_TEXT: .db 0Dh, 0Ah, "-- DONE --$"
L_ERRT: .db 0Dh, 0Ah, "-- ERROR --$"
L_DATA: .db 43h ; 01000011b -- вкл. 1 банк как ОЗУ 8000h-9FFFh
.db 42h ; 01000010b -- вкл. 2 банк как ОЗУ 8000h-9FFFh
.db 41h ; 01000001b -- вкл. 3 банк как ОЗУ 8000h-9FFFh
.db 40h ; 01000000b -- вкл. 4 банк как ОЗУ 8000h-9FFFh
.db 83h ; 10000011b -- вкл. 1 банк как ОЗУ E000h-FFFFh
.db 82h ; 10000010b -- вкл. 2 банк как ОЗУ E000h-FFFFh
.db 81h ; 10000001b -- вкл. 3 банк как ОЗУ E000h-FFFFh
.db 80h ; 10000000b -- вкл. 4 банк как ОЗУ E000h-FFFFh
.db 00h ; конец
.END