barsik, изначально так и было задумано (идентификатор в старших битах), но при программировании алгоритма выяснилось, что проще и быстрее "разматывать" именно такой "бутерброд", который сделан в финальной версии.
Помимо старшего бита D7, также нужно анализировать и предыдущий - D6, после чего оба этих бита нужно отбрасывать (обнулять) дабы получить значение счётчика. В варианте кодирования идентификатора в младших битах мы убиваем трёх зайцев: анализ каждого бита одной командой ЦПУ (ротация битов через флаг <C>) + параллельно их обнуление и после анализа биты счётчика автоматом оказываются на нужных позициях.
Пример участка кода распаковки:
Код:XRA A ; <C>=0 MOV B,A ; [B]=0 LOOP: CALL GetBYTE ;<C>=0 RAR JC UnpackSame ; серия разных ;<C>=0 RAR JNC UnpackDiff1 ; серия разных 64..16384 MOV B,A CALL GetBYTE UnpackDiff1: MOV C,A UnpackDiff2: CALL GetBYTE MOV M,A ; адрес следующего байта на экране CALL NextScreenADDR RZ; конец алгоритма UnpackDiff3: DCX B MOV A,B ORA C JNZ UnpackDiff2 JMP LOOP UnpackSame: ; серия одинаковых CMC; <C>=0 RAR JNC UnpackSame1 ; серия одинаковых 64..16384 MOV B,A CALL GetBYTE UnpackSame1: MOV C,A CALL GetBYTE STA UnpackSame2+1 UnpackSame2: MVI M,0 ; адрес следующего байта на экране CALL NextScreenADDR RZ; конец алгоритма UnpackSame3: DCX B MOV A,B ORA C JNZ UnpackSame2 JMP LOOP





Ответить с цитированием
Размещение рекламы на форуме способствует его дальнейшему развитию 

и интегрального генератора на 7.3728 нет. 