Это другое, подблоки можно грузить в произвольном порядке и грузить данные поверх экрана можно, если при этом не забывать включать в эти данные то, что загрузчик распознает, как "блок загружен". Но вот целые блоки переставить местами, или например загрузить блок по адресу 0, а другой по адресу $8000 -- никак, ни за что. Опять же, в этом не много практического смысла было бы в любом случае, но чему служит такое напряженное отношение к последовательности блоков я тоже понять не могу.
Тут можно поспекулировать, что если мы сопротивляемся дефектам на пленке, например, повторять блоки друг за другом, то есть вероятно в одной области повреждения, может быть менее надежно, чем повторять запись целиком, когда повторные копии физически отстоят друг от друга на большом расстоянии. Хотя психологически это не воспринимается так эффектно, конечно. Это же тогда просто вторая копия.
У меня есть версия, что может быть фрагменты кода как-то повторно использовались в возможных экспериментах с ЛВС и они может быть боялись, что допустим будут принимать пакеты не тому адресату, но почему бы тогда не включить в формат пакета собственно адресата. В общем это левая идея.
Есть еще загадочный фрагмент кода по крайней мере в одной из версий загрузчиков (который называется newrom v(2.0)), который делает так:
Код:
; пересылка 32 байт (с очисткой источника?)
; h = &src[0]
; b = &dst[0]
; в процессе производятся странные ритуалы - может быть это связано с кодом в ПЗУ? не понятно
PUSH D ; push: d = число блоков e = cs0
PUSH B ; push: b = org_hi
INX H ; HL=нач.данных (ABUFF + 2, 32 байта, остаеется еще checksum_data)
LXI D,207EH ; из буфф. в озу d = 32 байта, e = $7e = битмап столбика в карте загрузки
LOA14: MOV A,M ; a = *src - взять из буфф.
STAX B ; *dst = a - поместить в озу
LDAX B ; a = *dst - взять из озу -- ну зачем это все ?..
XRA M ; a ^= *src - чего это все ради? может быть потому что ПЗУ?
MOV M,A ; *src = a -- что? -- уст.ошибку в буфф.
LOA15: INX H ; src++
INR C ; dst++ (только младший байт, мы внутри блока B)
DCR D ; счет байт
JNZ LOA14 ; D<>0
POP B ; восст.(BC)
MOV L,C ; (BC)=(HL)
MOV H,B ; --//--
тут вперемешку фарш из комментариев из архива с моими. Понятно, что так ничего не понятно: это процедура окончательного копирования прочитанного подблока с уже верифицированной контрольной суммой из буфера $DED0 (многозначительно, исп. el dedo = палец) в память. Казалось бы, можно ли тут изобрести что-то новое? Но вот чему могли бы служить инструкции ldax b \ xra m \ mov m, a, кроме как быть частью какого-то мрачного ритуала ? Комментарий "уст.ошибку в буфф." наводит мысли на то, что предыдущий исследователь тоже уже слишком долго вглядывался в бездну.