
Сообщение от
vinxru
Теперь будет так:
Единственный недостаток этого загрузчика (как, впрочем, и предыдущей его версии) - слишком длинный 
При 11-битной адресации размер одного ряда будет 2Кб, а загрузчик потребует 107 байт по диагонали, т.е. эта диагональ растянется на 214Кб.
Нужно как можно меньше записать по диагонали, например так:
Код:
org 1h
LXI H, 21h ; 21 21 00
NOP ; 00
SPHL ; F9
SPHL ; F9
DCX H ; 2B
L0008: DCX H ; 2B
POP PSW ; F1
POP PSW ; F1
MOV M,A ; 77
MOV M,A ; 77
RST 1 ; CF
RST 1 ; CF
DS 14h ; 20 любых байт
L0023: DATA-DATA-DATA
Данный загрузчик преобразует DATA в нормальный код с адреса 000Dh и запустит его. Правда, размер его может быть всего 19 байт, и располагать его в DATA нужно задом наперёд. Но эти 19 байт могут грузить уже нормально, а не по диагонали.
Вот пример:
Код:
org 0Dh
LXI H, 0EE01h ; 21 01 EE
POP B ; C1 берём из DATA адрес, куда загружать, например 8080h
POP D ; D1 инициализируем регистр E из DATA, должно быть 0000h
L0012: MOV M,E ; 73 row = E/2
MVI M,1 ; 36 01 col = 0
LDA 0EE00h ; 3A 00 EE читаем байт
STAX B ; 02 сохраняем
INX B ; 03
INR E ; 1C E=E+2
INR E ; 1C
RZ ; C8 если ноль (загрузили 128 байт), то переходим по адресу из DATA, должно совпадать с началом вторичного загрузчика, например 8080h
JMP L0012 ; C3 12 00 на начало цикла
L0020:
Итого, по диагонали будет записано всего 39 байт, т.е. в пределах 80Кб
Недостатки:
- нужно запускать по адресу 0001
- грузит только 128 байт, т.е. нужно догружать остаток