В такие "гибриды" обычно как раз и пихали загрузчики, для более крупных блоков. На спектруме бейсиковская программа хранилась не в виде текста. Два байта (слово) на номер строки (из-за чего можно было делать строки с одинаковыми номерами), два байта на длину строки, и далее сама строка. Операторы хранились не в текстовом виде, а как однобайтовые коды. После оператора REM мог быть совершенно любой текст, в т.ч. содержащий управляющие коды (цвет/положение на экране), соответственно вместо них можно было запихать и машинный код. Выглядело это примерно так:
0 REM ...здесь код...
1 RANDOMIZE USR PEEK 23635+256*PEEK 23636+N
где 23635 - адрес системной переменной, где хранится адрес начала бейсиковской программы, и N - смещение содержимого REM от первого байта номера строки. Часто после REM шли управляющие коды и текст, маскирующие программу при просмотре листинга.
Сам код - определял собственный адрес либо через ту же переменную, либо другими способами.
no subject
Date: 2006-12-04 02:14 pm (UTC)На спектруме бейсиковская программа хранилась не в виде текста. Два байта (слово) на номер строки (из-за чего можно было делать строки с одинаковыми номерами), два байта на длину строки, и далее сама строка. Операторы хранились не в текстовом виде, а как однобайтовые коды. После оператора REM мог быть совершенно любой текст, в т.ч. содержащий управляющие коды (цвет/положение на экране), соответственно вместо них можно было запихать и машинный код.
Выглядело это примерно так:
где 23635 - адрес системной переменной, где хранится адрес начала бейсиковской программы, и N - смещение содержимого REM от первого байта номера строки.
Часто после REM шли управляющие коды и текст, маскирующие программу при просмотре листинга.
Сам код - определял собственный адрес либо через ту же переменную, либо другими способами.