В том цикле, который палитру создаёт, вам точно надо mov ax, 1010hделать каждый раз внутри цикла? Может вынести в начало?
Да, можно и в начало. Правда есть еще один трюк, помогающий скостить 2 байта, если таки оставить "mov ax, 1010h" в цикле: убрать "int 10h" в инициализации видеорежима, а в цикле инита палитры "int 10h" поставить перед "mov ax, 1010h". Таким образом на первом цикле установки палитры как раз включится видеорежим (посколько AX все еще будет равен 0013h), а уж последующие циклы начнут устанавливать палитру. Поэтому я по привычке оставляю mov ax, 1010h внутри цикла. В статье решил не запутывать читателя лишний раз.
С блюром у вас занятно: для самого верхнего ряда вы обращаетесь и к предыдущим 320 байтам, которые вообще не в буфере.
На самом деле в "реальном режиме" нельзя обратиться к памяти вне сегмента. А буфер у нас - это весь сегмент (64кб). "add al, [si-320]" эквивалентен операции "add al, [si+65216]", ну а если si+65216 превышает 65535, то происходит сброс c переносом.
хотя достаточно обработать fa00h байт.
Если проходить блуром только 64000 точек, то будут некрасивые артефакты вверху экрана. Догадайтесь почему :)
В цикле блюра можно было бы обойтись одним регистром, тем же SI. Я думаю, что inc si выставит флаг нуля, и вместо loop сделать переход через jnz.
Да, можно. Правда в данном случае это на размер не повлияет (так как мы все равно убрали "xor cx, cx"). Но это правильный ход. Причем на старых процессорах (386-й, 486-й) "LOOP" еще и значительно медленнее, чем "dec + jnz", так что если важна скорость, то про LOOP вообще стоит забыть :)
На самом деле с представленным в статье кодом можно еще много чего сделать, чтобы уменьшить размер, я намеренно не стал дожимать все что мог, ожидая что читатели сами найдут такие места.
Ну, так-то делать итоговый файл поменьше - не всегда самоцель, при использования ассемблера. Целью может быть оптимизация скорости. Правда при этом совершенно не обязательно всю программу писать на ассемблере.
Ну почему, были кодерские, сценерские эхи, где люди делились знаниями, сорцами, релизили свои поделки на BBS, делали чарты, конкурсы... Ну да, не без флеймов (мне попадались на тех CD-дисках и логи эх и irc-чатов, электронные журналы вроде Harm, Hacker. Но с временным лагом в 1-2 года). В то время как я сидел и кодил в стол, собирая инфу, доки, сорцы по крупицам. Лучше все же иметь фидонет/интернет, чем не иметь :)
ну как бы да, но нет... В DosBox 0.74-3 много ошибок в эмуляции железа (он эмулирует не только DOS, но и процессор, видео-карту, звуковую и т.д.), много таких "лояльных" моментов, которые на реальной машине вызовут зависание или тормоза. Многое уже исправлено в форках типа DosBox-x и Dosbox Staging.
Также в DosBox 0.74-3 нет поддежки процессоров выше Pentium. То есть уже MMX там нет (не говоря уже про SSE). Нет поддержки кое-каких звуковых чипов-синтезаторов. Кривая эмуляция Gravis Ultrasound. Вобщем много чего, что давно требует обновления.
Так что страшно, страшно... Мы не знаем что это. Если бы знали...
А у меня доступа к FIDO не было, и жил я в некоторой кавказской республике, где все было очень грустно с компьютеризацией. Так что приходилось ездить за 400 км на ближайший приличный радиорынок, там за деньги записывали на дискеты всякий стаф, а позже продавали и CD с хламом выкачанным с BBS-ок и фидошных эхо. Купиш такой BBS#04 CD, и вот тебе и фидо на пару месяцев, там и сорцы всякие на Pascal'e, и коллекция MOD, S3M (и красивеньких плееров к ним), если повезёт - пару-тройку демок (вроде Panic, Second Reality, Crystal Dream...). Так и жили...
http://www.sizecoding.org/wiki/Linux
На PC в DOS "Hello word" в 23 байта помещается.
Но, к слову и под Виндовс можно намного меньше, чем у автора, если юзать асм, а не Си.
и это ужасно (хотя на самом деле пустая программа в TP 7 дает 1.5 кб ЕХЕ).
Да, можно и в начало. Правда есть еще один трюк, помогающий скостить 2 байта, если таки оставить "mov ax, 1010h" в цикле: убрать "int 10h" в инициализации видеорежима, а в цикле инита палитры "int 10h" поставить перед "mov ax, 1010h". Таким образом на первом цикле установки палитры как раз включится видеорежим (посколько AX все еще будет равен 0013h), а уж последующие циклы начнут устанавливать палитру. Поэтому я по привычке оставляю mov ax, 1010h внутри цикла. В статье решил не запутывать читателя лишний раз.
На самом деле в "реальном режиме" нельзя обратиться к памяти вне сегмента. А буфер у нас - это весь сегмент (64кб). "add al, [si-320]" эквивалентен операции "add al, [si+65216]", ну а если si+65216 превышает 65535, то происходит сброс c переносом.
Если проходить блуром только 64000 точек, то будут некрасивые артефакты вверху экрана. Догадайтесь почему :)
Да, можно. Правда в данном случае это на размер не повлияет (так как мы все равно убрали "xor cx, cx"). Но это правильный ход. Причем на старых процессорах (386-й, 486-й) "LOOP" еще и значительно медленнее, чем "dec + jnz", так что если важна скорость, то про LOOP вообще стоит забыть :)
На самом деле с представленным в статье кодом можно еще много чего сделать, чтобы уменьшить размер, я намеренно не стал дожимать все что мог, ожидая что читатели сами найдут такие места.
Спасибо за вдумчивое изучение кода :)
Ну, так-то делать итоговый файл поменьше - не всегда самоцель, при использования ассемблера. Целью может быть оптимизация скорости. Правда при этом совершенно не обязательно всю программу писать на ассемблере.
есть такое, только это выход по нажатию любой клавиши
ну, в антисайзкодинг тоже надо уметь :)
Это вы наверное под Windows 64-bit делали "Hello, world!" со статической линковкой чего-то там
Мы все дальше от бога!
Вот такое бы вкорячить сразу https://picog.us/ :)
хотя, на самом деле каждый может сам себе эмуляцию любого звукового чипа закодить, я думаю, при нынешних-то мощностях ARM-процессоров.
Вот кстати, буквально на днях прошел Dihalt 2025 Winter в Нижнем, и там была такая вот демка: https://www.youtube.com/watch?v=jIQhSY1BZxQ
Ну почему, были кодерские, сценерские эхи, где люди делились знаниями, сорцами, релизили свои поделки на BBS, делали чарты, конкурсы... Ну да, не без флеймов (мне попадались на тех CD-дисках и логи эх и irc-чатов, электронные журналы вроде Harm, Hacker. Но с временным лагом в 1-2 года). В то время как я сидел и кодил в стол, собирая инфу, доки, сорцы по крупицам. Лучше все же иметь фидонет/интернет, чем не иметь :)
ну как бы да, но нет... В DosBox 0.74-3 много ошибок в эмуляции железа (он эмулирует не только DOS, но и процессор, видео-карту, звуковую и т.д.), много таких "лояльных" моментов, которые на реальной машине вызовут зависание или тормоза. Многое уже исправлено в форках типа DosBox-x и Dosbox Staging.
Также в DosBox 0.74-3 нет поддежки процессоров выше Pentium. То есть уже MMX там нет (не говоря уже про SSE). Нет поддержки кое-каких звуковых чипов-синтезаторов. Кривая эмуляция Gravis Ultrasound. Вобщем много чего, что давно требует обновления.
Так что страшно, страшно... Мы не знаем что это. Если бы знали...
или работает, но не программистом. Разные опции бывают.
именно, в статье об этом говорится.
А у меня доступа к FIDO не было, и жил я в некоторой кавказской республике, где все было очень грустно с компьютеризацией. Так что приходилось ездить за 400 км на ближайший приличный радиорынок, там за деньги записывали на дискеты всякий стаф, а позже продавали и CD с хламом выкачанным с BBS-ок и фидошных эхо. Купиш такой BBS#04 CD, и вот тебе и фидо на пару месяцев, там и сорцы всякие на Pascal'e, и коллекция MOD, S3M (и красивеньких плееров к ним), если повезёт - пару-тройку демок (вроде Panic, Second Reality, Crystal Dream...). Так и жили...
на 8086 можно или 1 или cl. Но cl как вы понимаете здесь контрпродуктивно.
Напишите об этом статью.
А вот не надо. На сколько я знаю, в ядре Linux есть немало ассемблера, и он там не зря.