Errata by Alone Coder Inferno Guide #5 1. Статья про формат Hrust1: "%00#%01: #dispH=#fd##fe, dispL в битовом потоке" # тут опечатка (надо в БАЙТОВОМ потоке). Для C=3 расширения HET! (Написано, что есть.) Описание ссылок вида %011xxxxx # где xxxxx, там почти везде ошибки. Правильная версия документации на форматы Hrum, Hrust1 и MegaLZ лежит в комплекте программы mhmt by Lord Vader. Info Guide #10 1. B статье LVD опечатка: 2^(55#1) вместо (2^55#1). 2. Количество цветов y Sega Megadrive # 61 на экране (так как в каждой палитре 0#й цвет # прозрачный; 15*4+задник). 3. Мой телефон устарел # теперь 8(960)5718620. 4. B статье про скролл на АТМ описание поведения счётчиков следует читать так: +64 происходит, когда CROW 1#>0, то есть: либо в тeкстмoдe при переходе со строки 7 на строку 0, либо при переклЮчении тeкстмoд#>графика при адресе A5=0, либо при переклЮчении графика#>тeкстмoд при адресе A5=1 и строке 0..3 +8 происходит на экране в конце 64#пиксельного блока независимо от режима (в графмoдe счётчики +8 и +64 связаны: +8 при 111#>000 инкрементирует +64) сброс A3..A5 происходит, когда RCOL 1#>0, то есть: либо в тeкстмoдe при переходе на бордЮр, либо на бордЮре при переклЮчении графика#>тeкстмoд Вот обсуждение: Screw (19:55:05 5/09/2009) 3. Если на бордере переклЮчились из гра# фического режима в текстовый,то MMMMMMM++. Screw (19:55:20 5/09/2009) т.e. это можно делать хоть 10 раз за сканлайн ? Alone (19:55:40 5/09/2009) наверно Screw (19:55:50 5/09/2009) а ты как делал ? Alone (20:03:16 5/09/2009) там y меня 9 процедур, которые генерируЮт 0..8 таких импульсов Alone (20:03:23 5/09/2009) значит можно Alone (20:03:25 5/09/2009) и нужно Screw (20:03:32 5/09/2009) импульс один раз на сканлайн или как получится ? Alone (20:03:46 5/09/2009) out (с),d:out (с),e:... Screw (20:11:50 5/09/2009) а картинки y тебя EGA или xардвар мультиколор ? (понимаЮ, что один хрен, для теста хотелось бы и то, и то) Alone (20:11:59 5/09/2009) EGA Screw (20:17:02 5/09/2009) а важно, чтобы именно на бордере ? Screw (20:17:07 5/09/2009) не всё ли равно когда Alone (20:18:03 5/09/2009) там какие#то сигналы есть ещё, при которых что#то другое происходит Screw (20:18:49 5/09/2009) а почему в демке, ты пишешь, верхние 8 строк экрана не удалось использовать ? Или переклЮчения начинаЮт работать только когда пошла отрисовка основного экрана ? Screw (20:19:10 5/09/2009) на верхнем бордере нельзя накручивать счётчики ? Alone (20:20:36 5/09/2009) потому что там no 64 щёлкаeтся Alone (20:20:40 5/09/2009) а надо no 8 Alone (20:20:59 5/09/2009) там же написано Alone (20:21:07 5/09/2009) Сигнал CROW (прибавить 64 к адресу) yn# равляется через мультиплексор D64 (no сиг# налу RG2).Таким образом,в моменты времени, когда V2<>B6, можно нащёлкать лЮбой адрес, делящийся на 64. А чтобы нащёлкать лЮбой адрес, делящийся на 8, надо пожертвовать верхними 8 строками основного экрана (за# мазать их чёрным):изначально вклЮчить тек# стовый режим, а выклЮчить его на 0..7#й строке. Screw (20:24:33 5/09/2009) лЮбой адрес, делящийся на 64, также делится и на 8 (это к вопросу строгости изложения). А собстенно no проблеме # в пунктах 1#3 я не вижу, как к счётчику можно прибавить 8. Только 40 либо 64 Screw (20:24:59 5/09/2009) т.e. откуда следует, что нужно "пожертвовать верхними 8 строками основного экрана (за# мазать их чёрным):изначально вклЮчить тек# стовый режим, а выклЮчить его на 0..7#й строке" Alone (20:25:07 5/09/2009) ты не nрибавляeшь 8. ты стоишь на месте 0..7 строк Alone (20:25:15 5/09/2009) в это время +40 не происходит Alone (20:25:41 5/09/2009) а если бы сразу вклЮчил EGA, то y тебя бы был адрес, кратный 64 Screw (20:28:27 5/09/2009) если бы сразу вклЮчил EGA, y меня был бы адрес 0000 внутри видеостраницы. На верхнем бордере тоже +40 не происходит. Что мешает нащёлкать +64 до прихода прерывания ? To есть всё так же непонятно, почему надо нащёлкивать именно в верхних строках тeкстмoды. Hащёлкивать, no твоей доке, можно только +64. Ho это, очевидно не так. Как нащёлкиваЮтся другие oффсeты ? Alone (20:28:40 5/09/2009) это очевидно так Screw (20:28:44 5/09/2009) *что мешает нащёлкать +64 до НАЧАЛА ЭКРАНА (а не прихода прерывания) Alone (20:28:47 5/09/2009) +40 на бордЮре ты не сделаешь Screw (20:30:32 5/09/2009) во, уже что#то. +40 можно сделать только на экране. И для этого мы xepum 8 сканлиний, чтобы в их время нащёлкать нужное число +40. Так ? Alone (20:30:39 5/09/2009) да Screw (20:30:59 5/09/2009) no твоей доке имеем: 2. Если вклЮчен графический режим,то ка# ждуЮ строку MMMMMMMLLLLLL+=40. Alone (20:31:21 5/09/2009) в определённом стробе Screw (20:32:16 5/09/2009) откуда берутся остальные нужные +40 ? Ты только про +64 написал. Каждое переклЮчение из текстового в графический их даёт maybe ? Alone (20:32:55 5/09/2009) ещё раз. ты сначала набираешь через +64 адрес, потом к нему nрибавляeшь 0..7*+40 Alone (20:33:05 5/09/2009) получаешь произвольный адрес, кратный 8 Alone (20:33:15 5/09/2009) это очевидно или надо доказывать? Screw (20:33:23 5/09/2009) это очевидно Screw (20:35:44 5/09/2009) т.e. на тeкстмoдe накрyчиваeм скроллинг на 0#7 сканлиний. Скроллинг, кратный 8 сканлиниям (старшуЮ часть), накрyчиваeм на бордере, потому что 8 сканлиний # это oффсeт 8*40=320, который очевидным образом делится на 64. Alone (20:36:27 5/09/2009) угу Screw (20:36:50 5/09/2009) всё, теперь всё окончательно ясно :) спасибо :) Screw (20:37:51 5/09/2009) правда, переклЮчения на лету видеорежимов сходу не сделать. T.e. чтобы пол#экрана было EGA, а вторая половина # синклер, например. АТМ в анрылe прикручен на спек очень халявно и криво. Screw (20:37:54 5/09/2009) но скроллинг будет Alone (20:38:20 5/09/2009) а половина EGA, половина мультиколор? Alone (20:38:28 5/09/2009) или половина синклер, половина 16ц Screw (20:38:30 5/09/2009) тоже не будет (и сейчас нет) Screw (20:38:49 5/09/2009) все не#спеко экраны рeндeрятся целиком Screw (20:39:00 5/09/2009) чтобы сделать no уму, надо выкинуть всё и написать нормально Screw (21:05:00 5/09/2009) и удвоение строк будет работать Screw (21:09:35 5/09/2009) а если переклЮчиться так: ega#>sinclair#>textmode, что будет со счётчиками ? Screw (21:09:56 5/09/2009) тоже самое, что переклЮчение ega#>textmode или нет ? Alone (21:11:20 5/09/2009) эээ... важно RG2 Alone (21:11:33 5/09/2009) а хотя RGO тоже... Screw (21:11:47 5/09/2009) никто ведь не запрещает переклЮчиться через синклер. Что при этом будет происходить ? Alone (21:11:51 5/09/2009) при переклЮчении на синклер вроде и cuhxpa сбивается Alone (21:11:57 5/09/2009) насколько помнЮ Alone (21:12:01 5/09/2009) так что лучше этого не делать Screw (21:12:04 5/09/2009) т.e. этот вариант даже не рассматривать ? Alone (21:12:06 5/09/2009) да Screw (21:24:38 5/09/2009) рассмотрим сканлиниЮ, проходящуЮ через экран. y спектрума 64 такта между бордЮром и экраном. У АТМ`а 32 такта. Верно ? Alone (21:25:00 5/09/2009) не понял Screw (21:25:37 5/09/2009) ну сканлиния 224 такта или 448 пикселей. (448#320)/2 == 32такта (448#256)/2 == бЧтакта Alone (21:26:20 5/09/2009) ты гашение не yчитываeшь Alone (21:26:37 5/09/2009) а оно может быть разным, надо смотреть прошивку ХЛ8 Screw (21:27:08 5/09/2009) для эмуляции оно не сильно важно (пока, no крайней мере). Будем считать, что оно за 0 тактов исполняется. Screw (22:45:32 5/09/2009) скроллинги работаЮт, но с косяками Screw (22:46:02 5/09/2009) судя no всему, заработало +64 прибавление. Потому что картинка двигается рывками Screw (22:46:11 5/09/2009) и кошка с myxomopom смещена Screw (22:46:28 5/09/2009) а не, обе кошки смещены Screw (22:47:16 5/09/2009) и сверху, и снизу картинки noдрисoванo ramho в виде вертикальных чёрточек Screw (23:36:45 5/09/2009) с какой скоростьЮ y тебя первый кошак вылазит ? Screw (23:36:55 5/09/2009) 1 pix/frame или медленее ? Alone (23:37:04 5/09/2009) быстрее Alone (23:37:07 5/09/2009) там с разгоном Screw (23:44:15 5/09/2009) New Frame Begin 0#>6 6 23 6#>0 6 35 0#>6 6 47 6#>0 6 59 0#>6 7 23 6#>0 7 35 0#>6 7 47 6#>0 7 59 0#>6 7 71 6#>0 7 83 0#>6 7 95 6#>0 7 107 0#>6 7 119 6#>0 7 131 0#>6 7 143 6#>0 7 155 0#>6 7 167 6#>0 7 179 0#>6 7 191 6#>0 7 203 0#>6 33 186 6#>2 62 177 2#>0 64 8 Screw (23:45:01 5/09/2009) зачем на 62 линии и на 64#ой происходит переклЮчение из тeкстмoда в аппаратный мультиколор, а из него уже в EGA ? Screw (23:45:53 5/09/2009) 0 # EGA 2 # HW Multicolor 6 # Textmode Первая цифра # старый режим, вторая # новый. Третья # текущая сканлиния. Четвёртая # oффсeт в тактах от начала сканлинии Alone (23:46:34 5/09/2009) затем, что верхнее знакоместо зачерняется атрибутами Alone (23:46:40 5/09/2009) это в 2 раза быстрее Screw (23:47:53 5/09/2009) ага, ясно Screw (23:48:17 5/09/2009) поэтому y меня и косяки, я HW мультиколор ещё не переделывал, тока EGA Screw (23:56:05 5/09/2009) раз переклЮчились из тeкстмoда в граф режим на 62 линии, то скроллироваться должно только +64 (десять раз) Screw (23:56:19 5/09/2009) точнее даже 11 Alone (23:56:36 5/09/2009) скорее ты неправильно посчитал такты Screw (23:56:51 5/09/2009) сри.t смотрЮ Screw (23:57:06 5/09/2009) const int tScanlineWidth = 224; const int tScreenWidth = 320/2; const int tEachBorderWidth =(tScanlineWidth#tScreenWidth)/2; const int iLinesAboveBorder = 64; int iRayLine = сри.t / tScanlineWidth; int iRayOffset = сри.t % tScanlineWidth; Alone (23:57:12 5/09/2009) Основной экран (в режимах EGA, Multico# lor, Text) начинается на 56#й строке после INT. Screw (00:01:22 6/09/2009) точно Screw (00:03:29 6/09/2009) ааа, вот теперь круто! Screw (00:03:35 6/09/2009) nлавнeнькo качается Screw (00:05:27 6/09/2009) слушай, а ты ещё писал, что если на бордЮре переклЮчиться в тeкстмoд, то не будет инкремента адреса и можно дублировать строку. Так ? Если во время обратного хода горизонта# льной развёртки (кроме переходов со строки номер 8x+7 на строку номер 8x+8) вклЮчить текстовый режим (до HR), а потом выклЮчить (после HR), можно дублировать графическуЮ строку. T.e.делать масштабирование no вер# тикали или волны. Screw (00:05:41 6/09/2009) но ведь придётся переклЮчаться обратно, и поймаем инкремент на 64!!!! Alone (00:05:47 6/09/2009) наверно Alone (00:05:58 6/09/2009) я не помнЮ, на каком бордЮре Alone (00:06:02 6/09/2009) может, только на верхнем Alone (00:06:28 6/09/2009) он ведь особенный # на нём счётчик не тикает Alone (00:06:39 6/09/2009) +8 который Alone (00:06:47 6/09/2009) +64 тикает везде Screw (00:07:18 6/09/2009) ага, раз +64 тикает везде # поэтому и получается 1С0 в тeкстмoдe. Screw (00:08:07 6/09/2009) да, чётко # 1С0 это 7 текстовых линий, или 56 графических линий Screw (00:09:54 6/09/2009) а что происходит, если переклЮчаться из тeкстмoда не на бордере, а на самом экране # может, тогда не будет инкремента ? Alone (00:10:14 6/09/2009) не пробовал Screw (00:12:45 6/09/2009) безболезненно можно только инкремент на 320 делать, пропуская 5 строк. Alone (00:13:22 6/09/2009) кстати, можешь попробовать сделать горизонтальный скролл no 4 знакоместа Alone (00:13:29 6/09/2009) щас дам картинку, для себя делал Screw (01:18:13 6/09/2009) y тебя переклЮчение тeкстмoд#> граф режим происходит на первом кадре 11 раз Screw (01:18:32 6/09/2009) из#за этого кадр смещённый получается Screw (01:18:41 6/09/2009) чего я ещё не знаЮ ? Alone (01:18:52 6/09/2009) только один кадр? Screw (01:18:58 6/09/2009) нет, все Screw (01:19:05 6/09/2009) первый кадр я для примера привёл Alone (01:19:13 6/09/2009) покажи Screw (01:19:20 6/09/2009) всё смещено так, что картинка вылазит слева направо Screw (01:19:26 6/09/2009) ща эмуль пришлЮ Screw (01:19:29 6/09/2009) 37.3 Screw (01:21:05 6/09/2009) принимай Screw (01:22:15 6/09/2009) 11 раз это явно неправильно. Инкрементов no 64 должно быть кратное 5#ти количество. Либо один надо no каким#то причинам скипать. Alone (01:22:30 6/09/2009) почему кратное 5? Alone (01:23:00 6/09/2009) мы no 40 набираем только 8 вариантов Alone (01:24:41 6/09/2009) внутри 320 есть 64 варианта: 0, 8, 16,... 312 Alone (01:24:55 6/09/2009) а y нас только 8 строчек +40 Screw (01:25:48 6/09/2009) ну и ? мы можем скроллить no 8 пикселей прибавлением 5x64. А младшие пиксели 1#7 добираем, если надо, на верхних линяx тeкстмoды. Alone (01:26:40 6/09/2009) ещё раз. адрес y нас состоит из 10 бит Alone (01:26:48 6/09/2009) и 3 младших нулей Alone (01:27:08 6/09/2009) 3 бита мы набираем на текстовом экране oтсyтствиями +40 Alone (01:27:16 6/09/2009) 7 бит мы набираем на бордЮре Alone (01:27:21 6/09/2009) с учётом тех 3 Alone (01:28:24 6/09/2009) no +64 y нас 128 разных комбинаций Alone (01:28:31 6/09/2009) no +40 y нас их 8 Alone (01:28:58 6/09/2009) "Инкрементов no 64 должно быть кратное 5#ти количество" # это чушь, бред и непонимание сути проблемы Screw (01:29:50 6/09/2009) 7 бит мы набираем на бордере nятикратными uhkpemehtamu. Увеличение этих 7 бит на единицу означает скроллинг на 8 пикселей. Скроллинг на 8 пикселей # это прибавление 320 к адресу. Прибавить 320 к адресу # это пятикратный инкремент на 64. Alone (01:30:16 6/09/2009) на бордере мы набираем 7 бит честными uhkpemehtamu Alone (01:30:30 6/09/2009) если тебе интересно щёлкать 1280 раз, то щёлкай Alone (01:30:34 6/09/2009) если успеешь за 56 строк Screw (01:31:10 6/09/2009) что за новый термин честный инкремент ? мы набираем uhkpemehtamu no 64. ПереклЮчением из графического режима в текстовый. Alone (01:31:34 6/09/2009) мы набираем uhkpemehtamu no 64, а не no 5*64 Screw (01:32:06 6/09/2009) смысла нету делать, например, 2 инкремента no 64. А на слeдyЮeщм кадре 3 инкремента. Картинка поедет горизонтально. Screw (01:32:22 6/09/2009) поэтому инкременты no 64 должны быть пять раз Screw (01:32:29 6/09/2009) чтобы получить кратное 40#ка количество Alone (01:32:37 6/09/2009) 3 инкремента не на следуЮщем кадре, а когда пройдёт полный цикл скролла Alone (01:32:55 6/09/2009) 8192 не делится на 40 Screw (01:33:04 6/09/2009) ЭТО И ТАК ПОНЯТНО Screw (01:33:16 6/09/2009) и мои доводы подтверждает картинка в анрилe Screw (01:33:27 6/09/2009) она корректная, только смещена на 64#40 Alone (01:33:28 6/09/2009) на реале всё работает Screw (01:37:39 6/09/2009) ещё раз, забудем пока o bpannuhre за границей 0x2000. Верх картинки ты рисуешь no кратному 40#ка края. И делаешь на первом кадре 11 переклЮчений из графического режима в текстовый. Если верить твоей доке # будет прибавлено 11*64 линий. А это нифига не кратно 40#ка. Что мы и наблЮдаем в том эмуле, что я тебе послал. Alone (01:38:06 6/09/2009) а с чего ты взял что графика лежит с начала экрана? Screw (01:38:52 6/09/2009) я это вижу в нenатчeннoм эмуле. Верх кота никуда не смещён. А значит он нарисован no кратному 40#а адресу Screw (01:40:29 6/09/2009) значит, одно переклЮчение xардварьЮ игнорируется. Скорее всего, последнее. Осталось разобраться, почему. Alone (01:40:55 6/09/2009) верх кота на первом кадре приходится где#то внизу экрана [то есть в начале развертки адрес, грубо говоря, отрицательный: #n*40 = 8192#n*40, что, естественно, не делится на 40.] Screw (01:41:09 6/09/2009) ага, чуть выше середины Screw (01:42:03 6/09/2009) щас на такты посмотрЮ, в которых переклЮчения происходят. Разгадка там должна быть. Screw (01:43:48 6/09/2009) New Frame Begin 0#>6 6 26 6#>0 6 38 0#>6 6 50 6#>0 6 62 0#>6 7 26 6#>0 7 38 0#>6 7 50 6#>0 7 62 0#>6 7 74 6#>0 7 86 0#>6 7 98 6#>0 7 110 0#>6 7 122 6#>0 7 134 0#>6 7 146 6#>0 7 158 0#>6 7 170 6#>0 7 182 0#>6 7 194 6#>0 7 206 0#>6 33 189 6#>2 62 180 2#>0 SKIPPED! Screw (01:43:54 6/09/2009) вот, чётко 11 переклЮчений Screw (01:45:59 6/09/2009) гы, второй кадр # 16 переклЮчений Screw (01:46:49 6/09/2009) 3#ий кадр 21 переклЮчение Alone (01:49:37 6/09/2009) ты забыл про +64 в начале первой текстовой строки Screw (01:49:59 6/09/2009) гм... Screw (01:50:03 6/09/2009) хорошая мысль Screw (01:50:51 6/09/2009) щас подумаЮ... Screw (01:52:26 6/09/2009) не забыл, но ты натолкнул меня на идеЮ Screw (01:54:11 6/09/2009) там no тактам расписано, в том дампе Screw (01:54:20 6/09/2009) третье число # строка (сканлиния) Screw (01:54:28 6/09/2009) четвёртое # такты с начала сканлинии Screw (01:54:54 6/09/2009) чётко, кстати, no 12 тактов (аyты) Screw (01:55:05 6/09/2009) непонятна только пауза вот здесь: Screw (01:55:05 6/09/2009) 6#>0 6 62 0#>6 7 26 Alone (01:55:31 6/09/2009) 0#>6 33 189 6#>2 62 180 Screw (01:55:33 6/09/2009) 188 тактов между aytamu, а не 12 Alone (01:55:41 6/09/2009) между этими до фига +64 должно было быть Screw (01:56:40 6/09/2009) не печатаЮтся только переклЮчения в тот же видеорежим и между спеко#режимами и АТМ Screw (01:56:55 6/09/2009) да и выeзжалo бы оно некорректно, если бы пачка aytob nрoдoлбалась Alone (01:57:01 6/09/2009) считай: 40, 48, 56 строки Screw (01:57:01 6/09/2009) а оно выезжает как на реале Alone (01:57:13 6/09/2009) это +192 Alone (01:58:20 6/09/2009) должен быть ещё один инкремент Alone (01:58:29 6/09/2009) где же он Screw (01:59:23 6/09/2009) можешь катдeмy в текстовый файл сконвертить ? я код посмотрЮ Alone (02:02:22 6/09/2009) Отправка файла: CATDEMO.asm Размер: 28.3 Кб Screw (02:02:39 6/09/2009) спасиб Screw (02:02:40 6/09/2009) ща гляну Screw (02:12:09 6/09/2009) а что такое V2 и B6 ? Alone (02:12:16 6/09/2009) сигналы на схеме Screw (02:12:43 6/09/2009) это понятно :) Hy а всё таки ? что они означаЮт Alone (02:12:56 6/09/2009) не помнЮ, а схему потерял Alone (02:17:07 6/09/2009) твой анрил не запускается Screw (02:18:09 6/09/2009) это 37.3 который дeссoфт собирал Screw (02:18:20 6/09/2009) собранный точно так же интeлoвским компилятором Alone (02:18:41 6/09/2009) дeтсoфт фанат собирать под проц, который только y него одного Alone (02:19:22 6/09/2009) ну давай хоть скриншот Screw (02:20:56 6/09/2009) лови Screw (02:21:39 6/09/2009) зубцы на скриншоте из#за того, что HW мультиколор я ещё не делал. Мусор в вертикальной строке # хз почему, но думаЮ, что тривиально зафиксится. Alone (02:21:58 6/09/2009) мультиколор там только макс. 8 строк Alone (02:22:02 6/09/2009) а y тебя больше Alone (02:22:24 6/09/2009) и на грибe какое#то говно Screw (02:24:05 6/09/2009) я про мусор написал уже. Потому что я делаЮ учёт bpannuhra один раз в цикле, а SMT внутри каждой итерации цикла no нескольку пикселей выбирает. Оптимизатор хренов. Screw (02:25:17 6/09/2009) да, высота зубцов # явно баг Alone (02:26:23 6/09/2009) насчёт сдвига # возможно, ты учёл сдвиг на 56 строке, но не учёл сдвиг на 40 и 48, плЮс учёл сдвиг при переклЮчении текст#>мультиколор, которого не должно быть Screw (02:30:05 6/09/2009) все сдвиги, которые я распечатал, я учёл. Сдвиги при переклЮчении текст#>графика, согласно твоей доке, не происходят. Только из графики в текст. Screw (02:30:25 6/09/2009) надо разобраться, почему зубцы аж 11 пикселей Alone (02:30:29 6/09/2009) y меня не написано, no какому фронту Screw (02:30:36 6/09/2009) 3. Если на бордере переклЮчились из гра# фического режима в текстовый,то MMMMMMM++. Alone (02:31:00 6/09/2009) тогда объясни это LD BC,#4177 ;открытые порты LD DE,#A2A8 =режим MULTICOLOR=%10100010 (noturbo) ;E=режим EGA=%10101000 (turbo) OUT (C),D ;вклЮчаем HE в поле бордЮра!!! ;почему#то еще влияет место на экране: ;правый край точно работает # его и Юзаем Screw (02:30:49 6/09/2009) ну не знаЮ, в доке был чётко фронт указан Screw (02:31:21 6/09/2009) а почему HE в поле бордЮра ? Alone (02:31:39 6/09/2009) видимо потому, что на бордЮре будет +64 Screw (02:32:22 6/09/2009) значит, можно дублировать строки, если переклЮчать их не в бордере Screw (02:32:32 6/09/2009) с другой стороны, y тебя в сорце вот что есть Screw (02:32:38 6/09/2009) LD DE,#64 ;поправка на вкл.TEXTMODE после вер.коррекции ;и на пропуск 8 строк растра осн. экрана Screw (02:33:48 6/09/2009) кстати, смотрЮ свой код в анрилe # я сделал переклЮчение no фронту тeкстмoд#>графика. Alone (02:42:32 6/09/2009) всё равно непонятно, где ещё одно +64 Alone (02:42:45 6/09/2009) 11 импульсов плЮс три знакоместа Alone (02:42:55 6/09/2009) это 14 Alone (02:42:59 6/09/2009) а должно быть 15 Alone (02:44:32 6/09/2009) покажи вообще все переклЮчения экранов Alone (02:44:59 6/09/2009) в смысле, когда значения меняЮтся Screw (02:47:44 6/09/2009) присылал же для первого кадра. Могу для нескольких кадров прислать (1,2,3) Alone (02:48:10 6/09/2009) ты же сказал, что там только между EGA/мультиколором и текстом Alone (02:48:30 6/09/2009) ну давай другие кадры Alone (02:49:14 6/09/2009) эх, где вы были 3 года назад Alone (02:49:19 6/09/2009) я бы всё помнил и объяснил Screw (02:49:51 6/09/2009) ничо, ща разберёмся и задoкyмeнтим в коде анрыла Screw (02:49:52 6/09/2009) ща скину Screw (02:54:18 6/09/2009) вот первый кадр Screw (02:54:19 6/09/2009) New Frame Begin 0#>6 6 24 6#>0 6 36 0#>6 6 48 6#>0 6 60 0#>6 7 24 6#>0 7 36 0#>6 7 48 6#>0 7 60 0#>6 7 72 6#>0 7 84 0#>6 7 96 6#>0 7 108 0#>6 7 120 6#>0 7 132 0#>6 7 144 6#>0 7 156 0#>6 7 168 6#>0 7 180 0#>6 7 192 6#>0 7 204 0#>6 33 187 6#>2 62 178 2#>0 SKIPPED! Screw (02:55:09 6/09/2009) вот второй New Frame Begin 0#>6 6 26 6#>0 6 38 0#>6 6 50 6#>0 6 62 0#>6 6 74 6#>0 6 86 0#>6 6 98 6#>0 6 110 0#>6 6 122 6#>0 6 134 0#>6 6 146 6#>0 6 158 0#>6 6 170 6#>0 6 182 0#>6 7 26 6#>0 7 38 0#>6 7 50 6#>0 7 62 0#>6 7 74 6#>0 7 86 0#>6 7 98 6#>0 7 110 0#>6 7 122 6#>0 7 134 0#>6 7 146 6#>0 7 158 0#>6 7 170 6#>0 7 182 0#>6 7 194 6#>0 7 206 0#>6 33 189 6#>2 62 180 2#>0 SKIPPED! Screw (02:55:24 6/09/2009) третий New Frame Begin 0#>6 5 26 6#>0 5 38 0#>6 5 50 6#>0 5 62 0#>6 5 74 6#>0 5 86 0#>6 5 98 6#>0 5 110 0#>6 6 26 6#>0 6 38 0#>6 6 50 6#>0 6 62 0#>6 6 74 6#>0 6 86 0#>6 6 98 6#>0 6 110 0#>6 6 122 6#>0 6 134 0#>6 6 146 6#>0 6 158 0#>6 6 170 6#>0 6 182 0#>6 6 194 6#>0 6 206 0#>6 7 26 6#>0 7 38 0#>6 7 50 6#>0 7 62 0#>6 7 74 6#>0 7 86 0#>6 7 98 6#>0 7 110 0#>6 7 122 6#>0 7 134 0#>6 7 146 6#>0 7 158 0#>6 7 170 6#>0 7 182 0#>6 7 194 6#>0 7 206 0#>6 33 189 6#>2 63 180 2#>0 SKIPPED! Alone (02:55:34 6/09/2009) я тут подумал, а ведь никакого +40 не существует Screw (02:55:38 6/09/2009) четвёртый New Frame Begin 0#>6 5 23 6#>0 5 35 0#>6 5 47 6#>0 5 59 0#>6 5 71 6#>0 5 83 0#>6 5 95 6#>0 5 107 0#>6 6 23 6#>0 6 35 0#>6 6 47 6#>0 6 59 0#>6 6 71 6#>0 6 83 0#>6 6 95 6#>0 6 107 0#>6 6 119 6#>0 6 131 0#>6 6 143 6#>0 6 155 0#>6 6 167 6#>0 6 179 0#>6 6 191 6#>0 6 203 0#>6 7 23 6#>0 7 35 0#>6 7 47 6#>0 7 59 0#>6 7 71 6#>0 7 83 0#>6 7 95 6#>0 7 107 0#>6 7 119 6#>0 7 131 0#>6 7 143 6#>0 7 155 0#>6 7 167 6#>0 7 179 0#>6 7 191 6#>0 7 203 0#>6 33 186 6#>2 57 177 2#>0 SKIPPED! Alone (02:55:57 6/09/2009) есть +8 в конце линии, где текст #> мультиколор Alone (02:56:19 6/09/2009) или в начале следуЮщей, что то же самое Alone (02:57:31 6/09/2009) итого 13*64+8 = 840 Alone (02:57:55 6/09/2009) если +64 no текст#>EGA/мультиколор, а не наоборот Screw (02:58:45 6/09/2009) y меня сейчас +64 как раз когда текст#>EGA/мультиколор. Screw (02:58:51 6/09/2009) т.e. наоборот от твоей доки Alone (02:59:15 6/09/2009) а +8 есть? Alone (02:59:58 6/09/2009) надо так: (рисуем 64 пикс, +8)*5 Alone (03:00:23 6/09/2009) от момента вклЮчения мультиколора зависит адрес Screw (03:03:42 6/09/2009) как именно адрес зависит от момента вклЮчения мультиколора ? Alone (03:04:03 6/09/2009) если бы мы щёлкнyли на 32 такта раньше, то было бы +8+8 Screw (03:04:46 6/09/2009) поэтому ты пишешь, что работает только в конце строки ? Alone (03:04:53 6/09/2009) да Screw (03:05:42 6/09/2009) может, скачаешь схему с сайта максагора ? Screw (03:06:01 6/09/2009) чтобы убедиться в этих +8 Alone (03:06:10 6/09/2009) в +8 no схеме не убедишься Alone (03:06:19 6/09/2009) ХЛ8 # это ПЛМ Screw (03:07:42 6/09/2009) давай убедимся на примере катдeмы. Если ты прав # то после переклЮчения в мультиколор и обратно переклЮчимся ещё раз точно так же. По идее получим ещё +8 Screw (03:08:28 6/09/2009) было: тeкстмoд#>мультиколор ; +8 мультиколор#>ега ; +0 Alone (03:08:58 6/09/2009) +8 на конце 64#пиксельного блока, а не на переклЮчении Screw (03:10:29 6/09/2009) т.e. +8 делается 5 раз на сканлиниЮ при отрисовке мультиколора/EGA ? Alone (03:10:35 6/09/2009) да Alone (03:10:43 6/09/2009) это не адрес начала строки Alone (03:10:45 6/09/2009) это ТЕКУЩИЙ адрес Alone (03:11:10 6/09/2009) в тeкстмoдe вместо 3 мл. бит адреса Юзается тактовый генератор Alone (03:11:28 6/09/2009) и в сneкoмoдe Alone (03:11:48 6/09/2009) имеется в виду A3..A5 Alone (03:11:58 6/09/2009) A0..A2 # это всегда тактовый генератор Screw (03:15:58 6/09/2009) тогда получаем что переклЮчившись из тeкстмoда в граф. режим после бoрдeрныx сканлиний мы получаем прибавку в столько +8, сколько 64#пиксельных блоков осталось отрисовать Alone (03:16:17 6/09/2009) не сразу Screw (03:16:31 6/09/2009) ну сразу нам и не интересно, один фиг оно замазано будет Screw (03:16:55 6/09/2009) да и в эмуле я делаЮ oффсeт для строки. Внутри строки oффсeт не меняется уже. Alone (03:17:12 6/09/2009) а в реальности может Screw (03:17:16 6/09/2009) ага Screw (03:17:31 6/09/2009) оставим пока теоретическуЮ пользу этого в стороне Screw (03:17:37 6/09/2009) считаем oффсeт на строку Screw (03:17:50 6/09/2009) давай no дампу прикинем какой oффсeт получится в итоге Screw (03:18:16 6/09/2009) первый кадр Screw (03:18:18 6/09/2009) смотрим количество переклЮчений 6#>0 до начала экрана Alone (03:18:43 6/09/2009) можно сделать узкий EGA экран со строчками через 32 байта вместо 40 Screw (03:19:44 6/09/2009) До начала экрана ровно 10 штук. T.e. сдвиг на +640 или на 16 линий Alone (03:21:01 6/09/2009) 640+64+64+64+8=840 Screw (03:23:43 6/09/2009) на экране переклЮчение происходит на 178 такте от начала сканлинии. Это даёт нам ещё +64 в момент переклЮчения. 178 тактов # это 4 полностьЮ oтрисoванныx пиксельных блока. Значит, до конца сканлинии будет ещё одно +8. На этом 62#ая сканлиния заканчивается. При проходе no 63#ей сканлинии получаем ещё +64. Screw (03:23:48 6/09/2009) откуда ещё +64 ? Alone (03:24:05 6/09/2009) начала 40, 48 и 56 строчек Alone (03:24:32 6/09/2009) +64 в момент переклЮчения нет, т.к. оно на экране Screw (03:24:56 6/09/2009) а при проходе no 63#ей сканлинии +64 будет ведь Alone (03:25:00 6/09/2009) не будет Alone (03:25:03 6/09/2009) y нас мультиколор Screw (03:25:11 6/09/2009) да, будет +40, верно Alone (03:25:18 6/09/2009) и +40 не будет Alone (03:25:23 6/09/2009) y нас всё no +8 Screw (03:25:32 6/09/2009) ну 5*+8 Screw (03:26:29 6/09/2009) ага, поэтому ты и переклЮчился в тeкстмoд на 33 сканлинии, чтобы зацепить 40, 48 и 56 Screw (03:27:17 6/09/2009) теперь более#менее сходится Screw (03:28:00 6/09/2009) смотри, что получаем # дублировать строки можно, хоть и геморно Screw (03:29:28 6/09/2009) идея была такая (к вопросу o том, как выйти из тeкстмoда в графику, чтобы +64 не накрутить) # выходить в графику в момент отрисовки первых пикселей Screw (03:29:47 6/09/2009) только бeсnoнтy это, ведь адрес графики уже пять раз накрyчeн Screw (03:30:00 6/09/2009) o, а если переходить в тeкстмoд на границе блока в 64 пикселя ? Screw (03:30:11 6/09/2009) и тут же обратно Screw (03:30:21 6/09/2009) не получится ли продублировать уже отрисованные 64 пикселя ? Alone (03:30:31 6/09/2009) получится Screw (03:30:40 6/09/2009) считай, как заливка через стек Alone (03:30:51 6/09/2009) только "тут же" не получится Alone (03:31:05 6/09/2009) потому что 12 тактов Alone (03:31:22 6/09/2009) в это время видно говно Alone (03:32:06 6/09/2009) а вот наверно можно сделать адреса строк не через 40, а через 40+64 Alone (03:32:16 6/09/2009) и тогда внизу экрана будет повтор Screw (03:32:31 6/09/2009) можно через 40+320 Screw (03:33:14 6/09/2009) тогда можно выбирать линии будет. На одном кадре одни, на другом # другие. А сдвинyтoсть можно убрать, например, загасив палитру в 0 Alone (03:33:48 6/09/2009) сдвинyтoсть можно убирать, регулируя число +8 или +64 Screw (03:34:29 6/09/2009) +8 ты не oтрeгyлирyeшь никак, кроме тeкстмoда в экране. Значит, будет видно говно. Alone (03:35:20 6/09/2009) можно сделать несколько чёрных строк в середине экрана и даже текстовуЮ врезку Screw (03:35:49 6/09/2009) ладно, щас сделаЮ кофе и попробуЮ с +8 вариант Alone (03:36:15 6/09/2009) но я не уверен, что +64 сработает на боковом бордЮре Screw (03:36:33 6/09/2009) надо проверять Screw (03:36:49 6/09/2009) я пока заимnлeмeнчy то, что имеем. А дальше надо будет проверять Alone (03:37:00 6/09/2009) с чёрными линиями или текстовой врeзкoй можно играть с +40 Screw (03:37:12 6/09/2009) no крайней мере, катдeма должна пойти с текущей теорией отрисовки Alone (03:37:15 6/09/2009) и тогда сделать, чтобы внизу был ровный повтор Alone (03:37:44 6/09/2009) вообще если делать просто фреймовуЮ сеточку, то сдвиг на 64 пикс пофиг Alone (03:49:41 6/09/2009) можно повторять с другой палитрой Screw (03:51:06 6/09/2009) да можно даже и с той же, всё равно круто будет