Из картинки это не очевидно. Не скажу именно за Диззи, но часто и прямоугольники разного размера сразу печатают.
Ну зачем такое, не понимаю. Почему ты упорно хочешь блиттер кастрировать? Зачем жёстко сетка и мелкотайлы зафиксированного размера? Зачем делать неуниверсально и явно то, что само получается неявно по общей схеме?
Блиттеру простому для переброски произвольного прямоугольного блока нужны только следующие параметры:
- способ наложения (или код прозрачного в простом случае)
- длина общая перебрасываемого блока
- длина "строки" блока
- приращение в конце строки для источника
- приращение в конце строки для приёмника
- адрес источника
- адрес назначения
Все параметры прошлой операции запоминаются, все записи параметров идут в буфер, а переброска может запускаться автоматически при получении полного адреса приёмника (или проще - только старшего байта). Так что если захотелось всё-таки порисовать мелкотайлами одинакового размера, после первого (с полным описанием всех параметров) можно только адреса-параметры изменять. В том числе, возможно, и процедурой, номера преобразующей в адреса. Но, по-моему, экран в формате списка пар "параметр, значение" в общем случае места занимать будет меньше и отрисовываться быстрее. И само собою, лучше смотреться.
Чередуя, ты "командой" выбираешь адрес порта фактически. То же самое, как записью в разные адреса, только медленней и не запоминаешь в обычной памяти. Лдиры, кстати, не нужны при правильной организации отрисовки, часто шевелить необходимо только несколько байт.
И повторю, для простой и быстрой переделки существующих игрушек нужно, чтоб стандартный спектрумовский экран незаметно и "прозрачно" для оригинального кода отображался в новый цветной экран (что позволит переделывать игры постепенно до любой степени). А не разные видеорежимы несовместимые с обязательной полной перекраской-перерисовкой.





Ответить с цитированием