А.... Че-то я попутал (не заметил что речь об аттрибутах) Для аттрибутов все линейно.
А формула в данном случае будет: 6144+INT (x/8)+32*INT (y/8)
Тоесть сначала идут аттрибуты для 1,2,3,4,5,6,7,8 строк (фактических, 192 которых). Дальше для 9,10,11,12,13,14,15,16 и т.д..
То есть байт аттрибутов задает цвет знакоместа (кватратика 8x8 пикселей)
Могу тоже кинуться исходником
Правда это из эмуля, писал давно и вкурить что тут понаписал уже не могу.Код:void DrawScreen(){ for(unsigned y=0;y<192;y++){ unsigned addrp=((y&0xC0)<<(0+5))|((y&0x7)<<(3+5))|((y&0x38)<<(-3+5)); unsigned addra=((y&0xF8)<<2)|0x1800; for(unsigned x=0;x<32;x++){ BYTE pattern=*(RAM(ScreenBank?7:5)+(addrp|x)); BYTE attribute=*(RAM(ScreenBank?7:5)+(addra|x)); BYTE ink=(attribute&0x7)|((attribute&0x40)>>3); BYTE paper=(attribute&0x78)>>3; for(unsigned bit=0;bit<8;bit++) GDIBuf[bit+(x<<3)+(y<<8)]=pattern&(1<<(7-bit))?ink:paper; } } }
Последний раз редактировалось molodcov_alex; 16.08.2008 в 14:02.
ZX Spectrum forever!
вот, выкладываю. Написано на Visual Basic 6.0, ибо в другом - дуб. Но работает.
А посему еще хотел, бы с вашего позволения, задать пару вопросов.
Как "озвучить" загрузку, тоесть чтобы появление картинки сопровождалось звуками загрузки? то-есть как "проиграть" байт? 1- это один звук, а 0-другой, но откуда тогда такое разнообразие скрипов? Или это просто так воспринимает ухо?
Есть еще вопрос, но пока не буду спрашивать, чтоб кучу вопросов сразу не задавать.
ну, 1 это одно положение мембраны динамика, 0 - другое. если с какой-то частотой давать 1-0-1-0..., получим колебания мембраны и соответствующую высоту звука. если с той же частотой давать, скажем, 1-1-0-0-1-1-0-0.. мембрана будет колебаться с вдвое меньшей частотой, и звук получится ниже. и тд для любых битовых данных картинки
Последний раз редактировалось boo_boo; 16.08.2008 в 16:31.
спасибо, вот уж незнал, действительно.
а сколько длиться одно положение мембраны? вернее сколько оно длилось на касетах?
что бы реалистично выходило
на самом деле в случае с лентой не совсем так -- там нули и единицы кодируются прямоугольными колебаниями (сигнал-нуль) разной длительности (частотная модуляция)... иначе понадобилась бы идеальная синхронизация между магнитофоном и спеком при идеальном состоянии ленты.
глянь тут параграф "How does the Spectrum store data to a tape?": http://fly.cc.fer.hr/~arsen/tapefix/tapefix.html
Последний раз редактировалось boo_boo; 16.08.2008 в 17:42.
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
http://ru.wikipedia.org/wiki/%D0%A7%...86%D0%B8%D1%8F
так что-ли?
Добавлено через 3 минуты
а сколько тогда бит/сек считывалось с кассеты?
Добавлено через 15 минут
а, щас посмотрю, а то ссылка сначала не отобразилась
Добавлено через 6 часов 2 минуты
boo_boo, спасибо за очень класную ссылку. Я та понял, та все просто - 0-1022 Hz, а 1 это 2044 Hz. Зная скорость передачи бит/сек легко вычислить длительность каждого звука. Плюс есть еще синхоимпульс и ведущий тон (leader ton)
С эти вопросом все ясно, позвольте задать следующий. Про бордюр. Почему при загрузке появляются полосы, почему именно такого цвета, и вообще что они означают и для чего? Ведь в видеопамяти нет никакого бордюра?
ЗЫ прошу прощения за наивный вопрос
Добавлено через 6 часов 4 минуты
ЗЗЫ и почему полосы "скачут", а не просто "уезжают" вверх экрана?
Последний раз редактировалось Виктор; 16.08.2008 в 23:32. Причина: Добавлено сообщение
все верно - у бордюра нет видеопамяти - за цвет бордюра отвечают три младшие бита порта FE. при изменении цвета бордюра гораздо чаще чем один раз в 1/50 секунды мы как раз и увидим разноцветные полосы. смещение полос напрямую связано с моментом изменения цвета по отношению к моменту начала прорисовки экрана
данные, считанные с ленты, гонятся на бордюр -- это не обязательно, так делает процедура загрузки из ПЗУ (шоб юзер перед монитором не скучал и знал, что процесс идет ), многие самописные процедуры вместо этого счетчик рисуют и тп. насчет цвета можно предположить, что один цвет соответствует сигналу на магнитофонном входе, второй нулю (до демодуляции), хотя не знаю, что конкретно чудит ПЗУ-шная процедура.
насчет полос все как сказал mishutka, положение зависит от того, при каком положении CRT-луча было изменение цвета.
подробная инфа обо всем этом есть в виде статей в нете/журналах, можно поискать
Последний раз редактировалось boo_boo; 17.08.2008 в 14:51.
спасибо. И еще хотел узнать - почему при нажатии на кнопку резет по экрану бегут полосы? что в этот момент происходит в видеопамятью?
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)