- 1
- 2
add bp, 4 ; 83C504
lea bp, [bp + 4] ; 8D6E04
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
0
add bp, 4 ; 83C504
lea bp, [bp + 4] ; 8D6E04
А они ещё говорят, что первого байта для всех КОПов не хватает, и ввели дополнительный.
ЗЫ. lea трогает флаг cf?
Нашел сравнение, lea может работать как add (за исключением флагов), а push/pop кроме указателя стека какают в память/регистры.
Зачем он там?
Называется он dbghlp.dll и имеет хуеву кучу фронтэндов, самый пополярный из которых -- windbg.
А еще есть дебагер, встроенный в студию.
И правильно, простому юзеру он нахуй не сдался, а досовский debug уж тем более, я вообще не понимаю, нахуя он столько лет поставлялся вместе с виндой. Да и вряд ли кто-то сейчас отлаживает программы глядя в ассемблерный листинг.
Я 32хбитный винд лет пять не видел -- проверить негде
В XP он точно был, как был и edit.com кажется, потому что это часть окружения ms-dos которая винда должна была эмулироватть
Он ехешник.
У нас использовали:
текстовый редактор -- какой хошь (я юзал нотепад++);
ассемблер -- tasm;
линкер -- tlink;
дебагер -- turbo debuger.
Для винды я учил асм сам.
ХЗ зачем его перелинковали, может чтобы впиндюрить туда PE.
>>нотепад++
когда я учил ассемблер не было никакого нотпад++ и editplus тоже не было: у меня были две IDE: TurboCшная и edit.com;)
И в семёрке тоже был, а вот выше -- незнаю, не проверял. А в 64-битных 16-битные проги вроде работают.
Я не уверен что сегмент кода такого типа будет работать в long mode, но тут это не очень важно потому что debug.com не использовал защищенный режим.
Грубо говоря это не 286 а 8088 приложение)
Не 8086?
8086 имел 16 ножек на шине данных, а 8088 имел их 8.
Таким образом в память за один раз читался один байт.
В следующей модели уже использовался 80286 в котором дороже стало 16, и читаться стало два байта.
С этим связан традиционный для интелов "плевок в вечность"
На 8088 не обязательно было выравнивать обращение к памяти: читался-то все равно один байт,
а вот в 286 стало нужно потому что читался всегда четный, например:
0 и 1
2 и 3
итд. Так что если считать WORD (два байта) по адресу 1, то получится ДВА чтения, половина из которых будет выкинута.
В других процессорах за такое чтение выдавали exception, но в 286 просто было временное пенальти, потому что был уже код под 8088 который срать хотел на выравнивания.
Ну а теперь префетчер читает данные из кеша, кеш читает линейками из памяти, и все это уже не так важно
Intel 8088 @ 4.77 MHz
Это вика даже знает.
На нем же был и jr и XT, а вот AT уже был на 286.
Первые клоны вполне могли быть на 8086, Да
До сих пор долбоёбы есть у которых 16ти битные программы для реального режима, написанные 25 лет назад.
Их обычно в DosBox гоняют
DosBox это не V86 приложение а честный эмулятор PC. Иначе бы старые игрушки плохо работали.
В бладе было сохранение, так что это не самая сложная игра.
Самые сложные это аркады на приставках образца 90х Mario2 (японский), Contra итд
Blood хороший очень, для своего времени просто огонь.
Можно конечно писать под GDI и не использовать ускорение но тогда получится кривое тормозное говно наверное
Если оно тогда не тормозило, то сейчас -- тем более не будет. Пусть рисует в буфер. Подходящий момент для перекачки буфера в видеопамять всяко можно отыскать.
Кстати, игре под дос (в некоторых режимах) могли использоваться planes, когда одна точка писалась в три разных места (r, g и b). Это будет не очень удобно портировать
Шейдеры всё стерпят.
Да и даже полностью софтовая эмуляция VGA должна летать на современных процах.
Я думаю, что тупо по табличке конвертят каждый фрейм. Разрешение маленькое, процы сейчас быстрые. Да и вся поллитра в кеш войдёт.
Ну да, если не туплю. Сложить поллитру в одномерную текстурку и в шейдере брать из неё нужный пиксель.
Блин, вот мне самому было бы интересно под webgl такое пильнуть...
Да, вполне. 1 канал, 8 бит. Только надо прямоугольник с текстурой очень-очень аккуратно мапать на экран. Чуть-чуть с оффсетом или масштабом накосячишь и кровь-кишки-распидорасило. Ибо интерполяцию координат перед пиксельным шейдером никто не отменял.
З.Ы. Хотя оффсет и масштаб -- общая проблема для любого 2D графония через OpenGL.
Дык ты её 60 раз в секунду перерисовывай, как это обычно и происходит.
1) забиваешь память красным
2) ждешь когда луч попадет в середину экрана
3) забиваешь память синим (ну или меняешь политрку)
получается что пол экрана красные, а пол синие.
Ты его не понял. Он, походу, предлагал ещё более тонко менять палитру -- на каждый пиксель (ну или группу пикселей, если поштучно не успеваешь).
ок, я за
типа 640x480x60?
Если ты про 13h, он же "плоский" он же "без ебли с планерами" то 320x200.
Но это в чистом VGA
В VESA (VBE) дофига 256цветных режимов, вплоть до 1280×1024
Он ведь манерный такой весь, слащавый.
Анролл на строку развёртки. И самомодификация кода во время hblank.
Но вот можно ли синхронизнуться на hblank на VGA/CGA? Просто без привязки к hblank очень сложно будет идти синхронно с развёрткой.
Дык надо моргать быстрее, миллионы раз в секунду и синхронно с развёрткой.
типа цвет 123 теперь не красный а бурый?
так делали когда писать в память было дорого
А так - неудачный бросок динамита, огреб от босса, монахи, да и просто неудачно влез в бой. Дюк тут гораздо предсказуемее.
НА ВСЕ ВРЕМЕНА!!!
Атмосферная такая ишрушка. Красивая.
Да. Battletoads самый сложный.
>Mario2 (японский)
Если это то о чём я думаю, то это пиздец.
Да ладно, их можно пройти. Для меня там самый пиздец -- ёбаная крыса-террорист, которую надо обогнать.
>ёбаная крыса-террорист, которую надо обогнать
Это где? Когда на мотоциклах
Или это:
https://youtu.be/kW7KBl7zSE0?t=2712
Я там постоянно факапил когда подымаешься по такой змее вверх. И крыса тоже, но до неё очень сложно дойти было.
Не, я в просто battletoads задротил, без double dragon.
comment updated
http://govnokod.ru/24375#comment417458
Там потом надо крысу отпиздить. Потом устроить ББПЕ паре шлюх с плётками, хуйнуть чела с пулеметом, расхуярить космокорабль на маленькой пиздюрке.
И это будет только середина игры.
И там баг ещё такой, очень доставучий. Когда ползёшь к рубильнику, а вокруг тебя крутится электричество. Вот иногда игра глючила, чуть-чуть смещала персонажа и потом никак нельзя было слезть с той трубы.
https://www.youtube.com/watch?v=in6RZzdGki8
Но это специально созданный каким-то психом левел, который можно пройти только чисто на багах марио.
А из тех картриджей что у меня были однозначно Battletoads. Причём &DD мне таки удалось пройти.
А тот где только жабы — он запредельно блядь сложный.
Mario вышла на NES (и как там она в японии называлась -- фамиком вроде). Потом японцы сделали продолжение, но в Европу и США продавать не стали потому что слишком сложно видимо:)
В США на NES совсем другой Mario 2, который в Японии называлася doku doku panic, только в него перенесли персонажей из Mаrio: можно играть за принцессу или гриба.
Боже, зачем я всё это знаю
Посмотри видео по моей ссылке.
Он не может быть сложнее. В принципе.
https://www.retrogamer.net/retro_games80/the-making-of-the-great-giana-sisters/
https://www.retrogamer.net/retro_games80/the-making-of-the-great-giana-sisters/
или нет
ну вот оно
https://www.youtube.com/watch?v=QbsVREc9TRQ
В моей школе были такие в компуктерном класси, только стоял на них какой-то "Лёхкай линукс", который выглядел как испоганенная 98 винда. Мы на них ебались с ПопенОфис.
Сидят токие долбоёбы на парах, пишут проги под дос. :)
Но в продакшене зачем?
Трамплинчики для перехода в защищённый режим и обратно. Х.з. зачем ещё сейчас риалмодный асм...
З.Ы. Ты что-то там спрашивал дней 5 назад, напомни в каком треде.
cms -- Compatibility Support Module?
Угу.
> почему COM порты ищут перебором
Рискну предположить, что для раннего логирования, когда эти ваши ACPI ещё некому исполнять. Да и адреса этих портов менять уже никто никогда не будет.
Всмысле чтобы запускать сосноль на компорту и отладчик ядра?
Ну да. Или хотя бы просто логи загрузки туда сливать.
https://lj.rossia.org/users/herm1t/66091.html
http://man7.org/linux/man-pages/man2/modify_ldt.2.html
> The normal use for modify_ldt() is to run legacy 16-bit or segmented 32-bit code. Not all kernels allow 16-bit segments to be installed, however.
Этот modify_ldt кажется используется в DOSEMU и еще в Wine если им запустить 16-битные приложения винды
спасибо тебе господи что я не вирусописатель, это же ад и палестина
>>modify_ldt
Интересно, можно использовать эту фичу для безопастности: нарезать себе два сегмента: Один с правом записи, другой -- с правом исполнения, и получить нахаляву NX в 32битной моде?
Просто если modify_ldt нужен только штоб 16ти битный код гонять то как-то жирно
работает он, соответственно, только в 32битной винде (в режиме V86), в long mode уже ничего этого нет
Так что я сочувствую тебе, счастливый обладатель компютера с памятью менее 4 гигов
Ковыряюсь в дерьме мамонта
но это уже давно не так.
Кто-то где-то говорил, что inc/dec работает медленней add/sub. С чем это связано?
Вообще говоря начиная с пня весь асемблер переводится префетчером в лоу-левел код под конкретную архитектуру: он может не делатьразницы между inc и add 1
Больше:)
>>Строго говоря не с пня, а с P6 (Pentium Pro и Pentium II).
Да, вероятно ты прав.
Там еще был pentium overdrive кажется, но я не знаю умел-ли он.
---
зы: заглянул в книжку mindshare:
micro-op: fixed-length RISC instruction executed by P6 cpu core
всё так
Но еще был Pentium II Overdrive который втыкался в Socket 8 (от Petntium Pro), когда нормальные PII уже вставляли в Slot 1.
Да понятно, я просто обратил внимание что было два овердайва и первый был не risc, а второй risc.
>>Что из этой информации напрямую относится к RISC, а что нет?
В смысле можно-ли реализовать CMOV или MMX в cisc?)
Тащемто кеш и сейчас прозрачен, если не считать инструкций для явного его сброса
... и мельдоний
На самом деле я до сих пор в ахуе от того как люди додумались до такого.
зы: Мышхъ целую главу написал про оптимизацию под кеш (правда уже сильно устаревшую), но мне кажется что большинству питушков (кроме гейдевов и мачимачихов) хватит просто последовательного чтения/записи: весь аппарат оптмизирован на референс локалити и последовательное обращение
PREFETCHxxx смотрит на тебя с недоумением.
Могу соврать (надо зырить мануал) но мне казалось что никакой гарантии попадания данных в кеш там не было: ты мог "попросить процессор подвинуть данные ближе", то-есть это такой хинт, нет?
Да вроде только интел задуряется с новым несовместимым сокетом под каждое семейство процов. У AMD с сокетами постабильней.
Теперь вот на тебя смотрит LGA 775, переживший хуеву кучу микроархитектур
Все ржут над JavaScript, однако когда гугл выпустил Dart его все заклевали.
В мире один миллиард программ, написанных, отлаженных и скомпилированных под x86 со всеми его костылями.
Прекрасный PowerPC, чудесный Itanium, умный Sparc64 именно по этой причине пошли, в свое время, лесом.
Компании вложили миллионы баксов в софт, потому первый вопрос который они задавали производителю проца: "а там будет работать мой софт двадцатилетней давности?"
Думаешь MS и Intel от хорошей жизни умели V86?
J2ME это ж не ось? Это жава вм хуита, её можно и на Андрюйде поставить.
Жаль, кстати: C#.NET вполне годные язык и платформа
Да выпускать то можно, но зачем? Тут та же ситуация, что и с десктопным линуксом -- если винда на мобилах не покрывает даже 0.3% рынка, то кто будет тратить ресурсы и под неё что-то писать?
Все Intellij-based продукты (включая Idea, Android Studio и PyCharm) имеют официальные Linux версии (даже snapы есть иногда!)
Android Studio -- официальная (по сути единственная) IDE для самой популярной мобильной платформы в мире (и устройств под ней скоро станет больше, чем компов под windows). И она официально поддерживает Linux.
А 64-битный intel это не amd64?
> ноут с сенсорным экраном
Скорее планшетка с клавой.
Есть некоторые инструкций, которые в AMD64 есть, а в 64-битных интелах нет. Да даже в 32-битную эру были такие инструкции, 3DNow!
И вот еще
А еще были когда-то процессоры Cyrix, у которых тоже какие-то свои особые инструкции были
Некоторые ОС (gentoo, arch, netbsd, freebsd) encourage тебя компиляться под конкретный проц.
Некоторые (ubuntu, debian, centos/redhat, openbsd) -- нет
Много где можно встретить foo-x86 и foo-amd64, например
Были. Cyrix 3dnow кстати тоже поддерживали.
Которые по сути 64-битный sse.
Квейк юзал?
Сомневаюсь насчёт кваки. Кармак всю жизнь оптимизировал под интел.
Хотя вот на вики пишут шо таки да
https://en.wikipedia.org/wiki/Quake_II
Unlike Quake, where hardware accelerated graphics controllers were supported only with later patches, Quake II came with OpenGL support out of the box. Later downloads from id Software added support for AMD's 3DNow! instruction set for improved performance on their K6-2 processors
потому в 2001 году считалось что "amd лучше для игр"
Я вот знаю что SSE последние юзают все: от подбирателей паролей до хрома, а мне интересно кто юзал mmx.
У меня есть такое ощущение что в 90х годах софт компилировался под 386 потому что это было 60% парка компов, и завязываться на mmx было стремно.
А когда уже стали более-ли-менее нормальные машины появляться то уже начались SSE
Правда, это в России. Может быть в мире не так.
Тю ёба, да все юзали. Кому нужны были целые.
Но в играх нужнее флоаты.
А патч 3dnow сама АМД написала:
Half-Life: Uses MMX to great extent, particularly for the software DSP sound engine and probably also skeletal animation system
Unreal: Uses MMX for its Galaxy sound engine, in fact the readme suggests to lower the sampling rate to 11 kHz for better performance on non-MMX CPUs. MMX was also used greatly for the software renderer. There is probably some 3DNow! usage and SSE is detected, although I don't think it's used
Quake II: 3DNow! patch written by AMD to promote K6-2, provides a notable speed boost (and supposedly there are even graphical differences with this?!). There are specific options available for 3DNow! software, OpenGL and Voodoo2 MiniGL ("3DfxGL") IIRC, and also a later version that is more optimized towards K7. No MMX usage though:
Quake II does NOT use Intel's latest MultiMedia eXtensions. Unreal will though as well as other upcoming games. Even then, it's wise to buy a MMX chip if you're already thinking of upgrading your machine.
Carmack reported that a MMX version of Quake he had in alpha stages would run, at best, the same speed in 16-bit colour as an 8-bit colour version does on a non-MMX Pentium chip of the same clock speed. Carmack says this increase in colour depth only isn't worth the development time and money and has decided not to support MMX with the Quake engine in its current form.
Он мог обрабатывать в джва раза больше флоатов, за те же деньги. Но 32х битных.
То есть за одну инструкцию они хуярили в 64битах по 2 флоата сразу.
Для игр точность была сильно критична, потому шло на ура.
Интел на тот момент вообще так не умел.
Просто у АМД это было хроническое. По интам PentiumRating вроде заебись, а плав. питух работал медленно.
хтоническое.
float/double kutulu.
Фублядь, фунахуй. Кому нужна очередная недоджава с плюшками?
На фоне дарта js is pretty ok.
Только он нахуй никому не нужОн, этот ваш дарт.
Развешто только для себя.
Изза токих как ты он и нинужон, жысоманы.
https://flutter.io
У человека, который хочет написать мобильное приложение и при этом не писать логику 2 раза (один раз на котлине, другой раз на свифте) есть два стула: на одном JS от фейсбука и апача точены, на другом C# от ксамарина и MS. Теперь есть третий стул от гугла с дартом.
Был когда-то еще робовм чтобы все писать на джаве, но кажется он уже того
Ты, наверное, пропустил хайп TypeScript, который в точности соответствует твоему описанию.
Никак нет.
>который в точности соответствует твоему описанию
В ts хотя бы отличия косметические: там необязательные типы после переменных, ключевое слово constructor.
Правда это следствие самой ценной его фичи: обратной совместимости с ECMA5. Эдакий жс с автовыводом.
Но как увидел все эти class, private, у меня реакция: «Шо, опять? Вот же ж жаба головного мозга.»
И еще вот что удивительно, чего же M$ которая этот тайпскрипт выдумала, офис пишет на J$e?
1) не final по умолчанию
2) декларацию где тип идет перед имеием
3) ключ слово new которое не нужно никогда
И все же оно лучше чем JS образца до 2015
А мне это нравится. Особенно сишные объявления типа:
> ключ слово new которое не нужно никогда
Ну да, но нет ничего сложного в том, чтобы написать слово из 3 буков.
Зелёным, надеюсь? Одна из самых больших ошибок сишки, кмк.
Сишники хотели чтобы декларация была похожа на дефиницию, в итоге сделали такой плевок-в-вечность из которого мы до сих пор выплыть не можем.
Хотя лет десять назад пришло осознание, и новые япы уже этим не страдают
> лет десять назад пришло осознание, и новые япы уже этим не страдают
Вирту яблоко на бошку первому упало. Ещё до сишки.
Кстати, некоторые старики считали что тенденция 80-90 ухода от паскалеобразных к сиобразным это плохо
https://minnie.tuhs.org//cgi-bin/utree.pl?file=V2/c/cvopt.c
Смотрите, смотрите, auto в 1972м году
Бля, что ты мне показал? Спагетти-код на Си в стиле старого Бейсика на сайте на Перл.
зацени, кстати, няшщку:
extern putchar,getc,peekc,printf,flag,flush;
знаешь почему?
Потому что в ту пору не указывали параметров в декларации и не распостраняли хедеровые файлы с ними
Програмист под unix должен был набивать декларации сам, почерпнув их из бумажной документации
auto означает"автоматическая" переменная это такая, которая умирает при выходе из блока. Storage duration у нее такой.
Сейчас многие называют ее "переменная на стеке", но на самом деле стек это как-бы деталь реализации.
int действительно был типом по умолчанию, и потому не писался явно
main(){
return 42;
}
А еще не было void* и потому в старом коде (в dns клиенте штоль) можно встретить char* который не строка а указатель на неизвестное.
В общем хорошо что весь этот K&R почил в бозе к моменту выхода C89
зы: а еще там надо было немного по-другому указывать параметры функции
в каждом языке они с разных сторон пишутся, воно куда их занесло в алголе
[code]print( ((INT x)INT:(x * x))(6) ); # 36 #
фу, какой толстый троллинг
>>Ну да, но нет ничего сложного в том,
фу, какой толстый троллинг
AFAIK функция может вернуть только указатель на функцию:)
В сях же нету лямд ;)
он ведь работает на этапе копеляции, то-есть он знает размер в буквах:)
Я раньше думал что боялись порвать стек, но при этом размер структур-то никого не волнует, особенно если завернуть массив в структуру.
зы: про ассемблер, кстати, согласен: программирование на нем очень хорошо ставит на место в голове понимание того, где и как хранятся объекты. Ты буквально все руками трогаешь и потому все понимаешь)
Я уже 15 часов жду этого.
По правде-то говоря я учился программировать на компьютерах где уже были скобочки и диезики