Как стать автором
Обновить
-2
Карма
0
Рейтинг

Пользователь

  • Подписчики 2
  • Подписки

Полигоны Another World: IBM PC

Для VGA есть ещё Х-режим 320х240 с квадратными пикселями и четыре страницы. Можно ускорить вывод спрайтов, только программировать это довольно тяжело. И во обще под VS-DOS довольно трудно делать игры, надо самому написать драйвер видеокарты, аудиокарты, клавиатуры и мышки. Я вот тут не так давно делал порт на Battle City, столкнулся с артефактами графики, написал драйвер VGA, и тут мне надоело, так и бросил недоделанный проект.

Дизассемблируем циклы, написанные на Си

А я вот не люблю графы. ИДА их постоянно включает, приходится сразу переходить на текстовый режим.

В Страсбурге сгорел дата-центр OVH SBG2

Форум восстановили! Но много фоток пропало.

http://radiopicture.listbb.ru/viewtopic.php?f=3&t=65

Установка Linux на калькулятор. Часть II

Осталось сделать эмулятор МК-61 для этой ЭКВМ, ну и за одно эмуляторы других ПМК, например Hewlett-Packard HP 35S или ещё каких. А то нафига!

Как я портировал DOS игру

Прикольно. Я тоже люблю поковырять старые игрушки. Например, KURTAN смог исправить, в т.ч. чтобы не бегал как угорелый. Заменил код функции delay на код из TurboC 3.0, и немного оптимизировал.

https://www.old-games.ru/forum/threads/kurtan.61725/#post-1553544

Использую UASM, там можно компилировать бин код, ака шеллкод, который я вставил взамен старого. Заработало.

Ещё ковыряю XRayExtensions расширение движка XRay который в сталкере используется.

Воспоминания членов экипажа МКС о теракте 11 сентября

Терроризм в космосе? Эээ кто там с дрелью баловался?

МК-61: история, эмуляция, устройство

Частично разобрали. В моём эмуляторе уже микрокод не используется, но сам код мало понятен, из за кучи мусора и не переименованных регистров переменных. Так что работы ещё много. Да, сделал декомпилятор, но оптимизатор ещё к нему не прикрутил. А ещё на разобрать алгоритм вывода на индикатор, по моему он не точен. Не в тех функциях инициализирует обновление экрана. Да, так же мой эмулятор самый быстрый и его ещё можно ускорить. На счёт статьи на хабре возможно будет потом.

OpenRPNCalc: делаем бескомпромиссный калькулятор

С начало прочитал несколько статей на хабре, потом стал изучат JS вариант для браузера, пытался сделать порт эмулятора на ассемблере, не получилось, ошибку так и не нашёл. Потом порт на С++, заработало почти сразу. Оптимизация, подсмотрел ключевые особенности тут. https://pmk.arbinada.com/ru/node/1305 Выяснил что при работе макроцикла процессоры работают над разными блоками кольца. Тут я понял что смогу написать декомпилятор. Получилось, но код получился громоздкий, всё равно не очень понятно что он делает, но он работает. Так что работа идёт.

МК-61: история, эмуляция, устройство

Смог декомпилировать микрокод. Но код всё равно не слишком понятный, да он работает, я смог его нормально запустить в эмуляторе и он работает без ошибок.

Вот пример что смогла декомпилировать моя программка.

byte	sum, x;
	command = R[36] + 16 * R[39];	//8 bits текущая команда
	switch (command) {
	case 0x00: //IK1302  0
		sum = 15;
		S = sum;
		sum = S;
		R[0] = sum;
		sum = R[3];
		S1 = sum;
		sum = S + 1;
		R[2] = sum & 0xF;
		sum = S;
		R[3] = sum;
		sum = R[6];
		S1 = sum;
		sum = S + 1;
		R[5] = sum & 0xF;
		sum = S;
		R[6] = sum;
		sum = R[9];
		S1 = sum;
		sum = S + 1;
		R[8] = sum & 0xF;
		sum = S;
		R[9] = sum;
		sum = R[12];
		S1 = sum;
		sum = S + 1;
		R[11] = sum & 0xF;
		sum = S;
		R[12] = sum;
		sum = R[15];
		S1 = sum;
		sum = S + 1;
		R[14] = sum & 0xF;
		sum = S;
		R[15] = sum;
		sum = R[18];
		S1 = sum;
		sum = S + 1;
		R[17] = sum & 0xF;
		sum = S;
		R[18] = sum;
		sum = R[21];
		S1 = sum;
		sum = S + 1;
		R[20] = sum & 0xF;
		sum = S;
		R[21] = sum;
		R[23] = 0;
		sum = S;
		R[24] = sum;
		sum = 15 + 1;
		Carry = sum >> 4;
		S = sum & 0xF;
		sum = 15;
		S = sum;
		sum = S;
		R[27] = sum;
		sum = R[30];
		S1 = sum;
		sum = S + 1;
		R[29] = sum & 0xF;
		sum = S;
		R[30] = sum;
		R[32] = 0;
		sum = S;
		R[33] = sum;
		sum = 15 + 1;
		Carry = sum >> 4;
		S = sum & 0xF;
		R[37] = 0;
		R[40] = 2;
		sum = R[36] + 1;
		S = sum & 0xF;
		push12(sum & 0xF);
		if (Carry){
			sum = R[37] + 1;
			R[36] = sum & 0xF;
			S = sum & 0xF;
		} else {
			sum = S;
			R[36] = sum;
			S = sum;
		}
		sum = S + 1;
		R[36] = sum & 0xF;
		sum = R[39];
		S = sum;
		push13(sum);
		if (Carry){
			sum = R[40] + 1;
			R[39] = sum & 0xF;
			S = sum & 0xF;
		} else {
			sum = S;
			R[39] = sum;
			S = sum;
		}
		sum = R[41];
		S = sum;
		break;
	case 0x01: //IK1302  1

А вот после ручной оптимизацией.

byte	sum, x;
	register nibble	tS, tS1;
	register bit	tCarry, tT;
	tS = S; tS1 = S1;
	tCarry = Carry; tT = T;
	command = R[36] + 16 * R[39];	//8 bits текущая команда
	switch (command) {
	case 0x00: //IK1302  0
		//# Формирование маркера кольца и кода состояния.
		tS1 = R[30];
		for (int i=0; i<=33; i+=3){
			R[i]=0xF;
			R[i+2] = 0;
		}
		ST[38] = ST[37];
		ST[37] = ST[36];
		ST[36] = 0x0 + 1;
		ST[41] = ST[40];
		ST[40] = ST[39];
		ST[39] = 0x0;
		R[36] = 2;
		R[39] = 3;				//goto 0x32
		tCarry = 1;
		tS = R[41];
		break;
	case 0x01: //IK1302  1
		//# Ожидание маркера в кольце

Всё работает, и быстрей, но объём кода сильно возрос, без оптимизации кило на 175, после 80 КБ. Ах да, ещё много чего не оптимизировано так что объём кода можно ещё больше уменьшить. Всё таки ручная оптимизацию 800 кб кода или 49000 строк несколько утомительна.

Ладно! О чём я это я. Хочется сделать аппаратный эмулятор под максимально простые процессоры типа 8080 и микроконтролеры например 8051. А так же лучше понять внутренний алгоритм, сейчас он всё равно не очень понятный.

За что я люблю ассемблер?

Между 8086 и 386 разница большая, на 386 кодить гораздо легче, а вот с х86-64 и х86-32 уже нет такой разницы. Так что я бы не сказал что 386 или х86-32 хуже PDP11, 68000 хотя некоторые ограничении в х86-32 мне тоже не нравятся.

За что я люблю ассемблер?

Прикольно! Но такое можно и на С/С++ сделать, и работать будет не хуже, разве размер может немного больше. Только по возможности использовать низкоуровневый стиль с минимум библиотек.

За что я люблю ассемблер?

Я там какие то слова вставлял, но всё равно код не работал, разбираться не стал. В gcc даже интринсики как то не так работают, сложней чем студии.

За что я люблю ассемблер?

Тоже люблю асм, по началу MASM, потом перешёл на UASM, а вот FASM не заладилось, оставил его на потом, но когда освоил UASM, понял что фасм мне просто не нужен.

Хотя на С++ можно кодить в стиле ассемблер. Код получается на уровне с ассемблером. Называю такой стиль C/C++, с библиотеками по минимуму и меньше новых наворотов новых С++. Получаешь и компактность(ну немного больше асм) и скорость ассемблера. При этом меньше ошибок, код более читабельный. Хотя у меня код на асм тоже не плохо выглядит, кроме структурности я ещё С строками комментирую.

За что я люблю ассемблер?

С какого я должен armv7, aarch64, mipsel, mipsbe, power7 и riscv это во обще что. Есть куча программ где можно просто забить на какие другие архитектуры. Windows понимает практически только x86, вроде как то бесятка АРМ может. Я только с виндой работаю и других систем не вижу, суперкомп с не х86 мне точно никогда не видать.

За что я люблю ассемблер?

Ну да, пытался интринсиками сделать код для определения быстродействия в тактах, с высокой точностью. На асме всё просто, интристиками ещё проще, но дебильный компилятор удалил часть инструкций, потому что они ничего не делают, хотя они делают, очищают конвейер. Попытался использовать ассемблерные вставки, опять косяк, компилятор не знал что CPUID меняет 4 регистра, ebx в том числе, хотя использовал этот регистр в качестве счётчика.

Компилятор GCC 8.2 вроде хороший.

Внедрение в архитектуру советских программируемых калькуляторов «Электроника МК-52»

МК-85 делался по современным технология, полноценный процессор, память ПЗУ, ОЗУ и так далее. А у этих калькуляторов, очень странная архитектура в современном понимании.

Я тоже очень давно, в начале 90-х пользовался МК-61, потом ещё пользовался в 2000 небольшое время и сразу отметил тормознутость, хотя поначалу я этого не замечал, заметил когда стал пользоваться EL-506P. Было бы не плохо увеличить быстродействие раз 5, но такая архитектура не позволяла этого сделать.

Потом я экспериментировал с эмулятором, декомпилировал микрокод, и увидел кучу мусорных команд, которые требовали удаления и оптимизации. Так что RISC процессор, 4 бит данные, 10 бит команды, мог эту ситуацию исправить, при том же тех.процессе сделать калькулятор более быстрым, и легче программируемым.

Внедрение в архитектуру советских программируемых калькуляторов «Электроника МК-52»

Занятная архитектура у этих машинок. А могли наши инженеры создать калькуляторный RISC процессор? Или такая архитектура была максимально просто чтобы уместится в мизерный транзисторный запас, уже в 1985 году инженеры поняли устарелость технологии и создали МК-85.

Её высочество Пуля

Ещё интересно. Гладкоствольные системы с ОПБС, высокоскоростная пуля имеет высокий БК, летит далеко и может пробить довольно толстую броню. Есть реальные системы, но я забыл как она называется.

Ретро-программирование: пишем простую игру на том самом GW-BASIC 1983 года

А я когда то кодил на бейсик "микрон" партнер 01.01. Давно это было, потом на qbasic перешёл, далее немного visualbasic. Но затем решил турбопаскале кодить, и далее делфи. А от бейсиков отказался, как полюбил, так и совсем разлюбил. Да, сейчас бейсики для меня плохие ЯП.

Лихие девяDOSтые. Во что мы играли в начале 90-х (часть 1)

Почему в игре такое управления? Кто знает? Лично я знаю.

Информация

В рейтинге
3,177-й
Зарегистрирован
Активность