Глюки порождают "современное искусство". Буду бороться с ним :)
Вложение 67115
Вид для печати
Глюки порождают "современное искусство". Буду бороться с ним :)
Вложение 67115
Дизассемблирую программки для УКНЦ наткнулся на такую конструкцию:
seg001:006676 mov #2600, R0
seg001:006702 mov #2500, word_17414
seg001:006710 call sub_17420
seg001:006714 br loc_6676
.................................................. ..........
.................................................. ..........
seg001:017420 mov SP, word_17412
seg001:017424 call sub_56274
.................................................. ..........
.................................................. ..........
seg001:056274 sub_56274: ; CODE XREF: sub_12226↑P
seg001:056274
seg001:056274 mov (SP)+, #0
seg001:056300 mov R1, -(SP)
seg001:056302 mov R2, -(SP)
seg001:056304 mov R3, -(SP)
seg001:056306 mov R4, -(SP)
seg001:056310 mov R5, -(SP)
seg001:056312 call @sub_56274+2
seg001:056316 mov (SP)+, R5
seg001:056320 mov (SP)+, R4
seg001:056322 mov (SP)+, R3
seg001:056324 mov (SP)+, R2
seg001:056326 mov (SP)+, R1
seg001:056330 return
seg001:056330 ; End of function sub_56274
Для чего может использоваться такая процедура?
Самое интересное, по-моему, пропущено (второй ряд многоточий).
Я так понимаю, call sub_56274 делает следующее: сохраняет в стек регистры с R1 по R5, возвращается чтобы выполнить команды, идущие после call sub_56274 (где многоточия). Потом, встретив команду return, процедура восстановит из стека регистры с R1 по R5 и продолжит выполнение. А что там дальше со стеком и возвратом в основную программу - непонятно. Скрыто за многоточиями.
То есть смысл всего этого - одной командой сохранить и восстановить регистры до и после вызова подпрограммы.
- - - Добавлено - - -
Вложение 67131
Выкладываю bin и исходники алгоритма вывода спрайтов без мерцания посредством дельта-буфера.
Получилось изящно, занимает мало памяти, но... жутко тормознуто. Для игр где много больших спрайтов не годится.
Вложение 67130
Зачем она сама себя вызывает.. call @sub_56274+2..
многоточия это три разных процедуры.. начинается все с call sub_17420.. идет дальше на sub_56274..
а внутри нее call @sub_56274+2.. вот в чем вопрос..
...
то что они пытаются сделать PUSHA я догадываюсь этот вызов часто встречается..
и вообще такое ощущение что на ЯВУ написано, передача параметров через стек делается.. везде.
/* Выкладываю bin и исходники алгоритма */
Чуть бы побыстрее и было бы новое слово в игрописательстве.. :)
На УКНЦ этот алгоритм наверное тоже не подойдет потому что все нужно будет делать 2 раза :(
Она не себя вызывает, она берёт число #0 (только оно уже не 0, а заменено на адрес) и переходит по этому адресу.
Похоже, да.Цитата:
и вообще такое ощущение что на ЯВУ написано, передача параметров через стек делается.. везде.
Если выполнять в статической памяти контроллера SMK, то будет намного быстрее.Цитата:
Чуть бы побыстрее и было бы новое слово в игрописательстве.. :)
А зачем два раза?Цитата:
На УКНЦ этот алгоритм наверное тоже не подойдет потому что все нужно будет делать 2 раза :(
/* А зачем два раза? */
Ну плана ВОЗУ два же используем.. это в БК все за раз делается..
Да и с регистровым доступом все равно долго будет.
/* и переходит по этому адресу. */
А ну да.. что-то я торможу.. это действительно PUSHA..
в #0 .. лежит адрес возврата и когда делает call то возвращается в вызывающую процедуру но с сохраненными регистрами, а потом возвращается чтобы их восстановить.. точно ЯВУ.. потому что понатыкано где надо и где нет..
хотел подсмотреть как они в "NEWTET.SAV" периферийным процом общаются, но код тяжело читается..
Попробую ещё одну идею вывода спрайтов.
Поскольку больше двух спрайтов вряд ли буду пересекаться в одном месте, а если и будут, то три наложенных спрайта – это уже непонятная каша, то можно попарно сравнивать спрайты и искать области пересечения. Если такие области есть, то дополнять изображение в соответствующей области каждого спрайта, взяв пиксели (целыми словами) из другого спрайта.
Если в какой-то области будет пересечение трёх и более спрайтов, то алгоритм обработает только первое найденное пересечение.
Спрайты сначала целиком копируются во временный буфер (с применением сдвига на сколько-то точек), потом запускается поиск пересечений по координатам и размерам, в конце происходит обмен пикселями (словами) в найденных областях.
Муторная выйдет подпрограмма вычисления области пересечения. Некрасивая.
update: можно придать чуть-чуть красоты, сравнивая попарно левые и правые границы двух спрайтов и устанавливая (или сбрасывая) один бит для каждого сравнения. Получим число (16 вариантов), которое можно использовать как индекс в таблице ссылок на разные процедуры (для разных типов пересечений).
Извращение какое то. (насколько я помню, но правильный вариант легко восстановим) Это делает так:
Код:JSR R5, $SAVAL
...
RETURN
...
$SAVAL: MOV R0, -(SP)
MOV R1, -(SP)
MOV R2, -(SP)
MOV R3, -(SP)
MOV R4, -(SP)
MOV R5, -(SP)
CALL @(SP)+
MOV (SP)+, R4
MOV (SP)+, R3
MOV (SP)+, R2
MOV (SP)+, R1
MOV (SP)+, R0
MOV (SP)+, R5
RETURN
Я сейчас пишу другую маленькую игру, отлаживаю на ней всякие сопутствующие моменты. Из полученного опыта вот что думаю на счёт Last Mission:
При переходе в новую комнату нужно не только рисовать лабиринт, но также генерировать все варианты используемых в этой комнате спрайтов врагов. Я имею в виду варианты спрайтов со сдвигом на 1,2 и 3 точки. Если есть такие варианты, то процедура вывода получится самой быстрой.
Хранить в памяти все возможные спрайты по 4 раза - расточительно, места не хватит. Но если только те, которые используются в данной комнате - может, и хватит.
Manwe, /* маленькую игру, отлаживаю на ней всякие сопутствующие моменты*/
чертей гонять по сгенеренному случайному лабиринту со сгенеренными ямами и камнями на голову
размер лабиринта - гдето на полгода
:) не, там не лабиринт вообще
мне уже стало интересно когда вы поймёте/признаете что этот ваш БК полный отстой по сравнению со спеком (скорость проца/экранная память)
Last Misson вполне реально портировать на БК... и не нужно обсерарть другие процы. дело прошлое.. а это ВЫЗОВ... и "понимание" это не главное..
Кто-то же написал DOOM на осцилографе, вы же не будете утверждать, что там проц - *****.. :)
Я про то же... Амига стоит рядышком с БК, но это не значит, что она (БК) не интересна..
Это последний из могикан... который перенес БОЛЬШОЙ компьютер тебе на стол..:) А Спека- это оскал буржуазии... :)
- - - Добавлено - - -
БК - это мечта которая воплотилась в реальность, когда меня принимали в пионеры.. нас привели в ВЦ.. и все, я понял, что жизнь моя будет связана с компьютерами (люди в белых халатах, читающие перфоленты)... а спека- это что-то собранное на коленке в кооперативе.
сдаётся мне, что на спек с амиги проще портировать)))
Как бэ... зачем? Все что было на амиге пытались перетянуть на однобитный спек.. и наоборот.. хорошие идеи всегда кто-то у кого-то... пока мы в "Ну-погоди" яйца ловили.. за бугром целая эпоха промелькнула...., а потом пришли писюки и все опошлили..
смешноватая статья даже для 1991 (особенно про "избалованность хорошим профессиональным" софтом доставило))
Не забывайте что хорошие игрушки на БК писали дети - самоучки, а не буржуйские компании..
Сколько в 91м году написали хороших игрушек школьники на ZX? То-то и оно.. спека с его обилием игрушек.. разжижал мозг школьников :)
А графика на спеке - "вырви глаз" :)
дети-самоучки на (не только лишь) спектруме:
https://www.youtube.com/watch?v=jt7Md1huWqY
а типичная игровая "буржуйская компания" того времени - молодой программист, работающий в собственной спальне
и в комплекте зачастую такая же сурьёзная компания-издатель, состоящая из президента и секретарши
- - - Добавлено - - -
в 1984 - в основном да (так я и говорю, что на бк и в 1991 было не лучше)
"На вкус и цвет" - фломастеры разные.. в любом случае БК был и есть интересный комп, не только из-за игрушек.. чувствуется порода.. отголоски БОЛЬШИХ машин.
И нужно не забывать, что повальное увлечение спеками у нас началось несколько позже, когда мальчишки у которых были БК подросли.. пошли в армию, институт, а потом была уже другая жизнь :(
Почему-то все забывают, что в конце 80-ых Спектрум был редкостью (а советские аналоги Z80 начали производить только в конце 1991-го года). У меня так вообще ни одного знакомого спектрумиста не было в то время. Вот с «Микрошей» знакомый был. В школах и домах пионеров стояли БК, Агаты, Ямахи, ДВК, чуть позже УКНЦ. В компьютерных цетрах стояли ЕС-1840 и Искры. В Детском Мире стояли Атари. А спектрумов нигде не стояло. Поэтому БКшные игры 1989-1990 годов на этом фоне выглядели неплохо. Не так круто как на Ямахе, но зато доступно. Лучшее из того, что можно было иметь дома обычному человеку.
В 1989 купили "Ленинград", но необычным человеком от этого я вряд ли стал, как и большинство других обладателей клонов спека того времени. Кстати, через год или два соседу нечаянно купили в магазине БК. Его интересовали в первую очередь игрушки и когда оказалось, что спековские игрушки на БК запустить не получится, БК вернули в магазин и купили спек (уже не помню какой).
БК интересный компьютер, но даже если выбирать "лучший" (по каким критериям?) только из советских разработок, он вряд ли будет первым. Возможно по массовости среди бытовых советских того времени он впереди.
У меня одноклассник торговал моими поделками для БКек в Тушино, и на накопленные бабули купил в 1993 г. Спектрум-48 кбайт ( самодел ).
Да, игр там было много, и они были существенно играбельней БКшных, в первую очередь за счет большего быстродействия Z80 - почти что в 3 раза по отношению к БК0010-3 мгц.
Да, речь об этом. Уже 1 января 1986-го года БК был на прилавках, а в организации поступил ещё в 1985-ом. Первый клон Спектрума тоже относится к 1986-ому году, но пока устранили все глюки платы и довели до нормального производства, был уже 1988-ой год. А массовое шествие началось и того позже. БК к этому времени уже прочно заняла место в школах и многие были в курсе что это такое. Как раз к этому времени и относится статья. В своём моменте она достаточно верно передавала ситуацию. Но вскоре, и очень быстро, всё изменилось в пользу Спектрума. И вообще в пользу западной техники.
У меня коллега торговал софтом для БК и спектрума на кассетах в период 1990-1995 г..
С его слов - всё испортили Денди.
Сколько был тираж кассет - да сотни в год - несколько городов окучивал - Орехово-Зуево, Эл-сталь, Ногинск, может еще какие - я в его дела не лез.
Ребенку покупали 3-5 картриджей, потом ребенок еще на пару-тройку др. выменивал, и всё - спрос на гейминг заканчивался.
А так да - в П-Посаде до 1990 г. о Z80 вообще никто не слыхивал.
В 1990 г. стали в НПК "Электрон" ( бывший сектор 21-го отдела ОКБ Э. под руководством Акафьва ) делать Спектрум-48 кбайт ( подпольно ), а с ~~1991 г. - и полметровые Спектрумы в корпусе БК, на КР565РУ7Г ( крошили МС1201.04 в основном на РУшки ).
Статья написана в 1990-ом году, и о Спектруме в ней ни слова. Клоны Спектрума в то время были мало распространены (или как минимум автор о них не знал). Аргументы "в пользу БК" построены на сравнении БК с клонами IBM PC. Вообще интересна постановка вопроса "DEC vs IBM". Не мог автор знать, что через полгода после выхода номера с его статьёй развалится СССР и архитектуру DEC у нас некому будет поддерживать.
А Денди да. Убийца домашних компьютеров :)
84-85 год разработки
БК никогда не был массовым. Сколько всего было выпущено БКшек?
Сколько самодельных БК ты видел? чтобы печатные платы травить, там, детали искать.
Да речь была не об этом.. холивар не имеет смысла. Получилось два поколения, первое (любители БК), к моменту появления спеки у второго (горячо любимого ностаольгического компьютера) была либо в армии либо в институте.. и проблемы БК их уже мало волновали.. Я вот например в 91 уже учился в институте и вовсю уже осваивал IBM понимая, что за ним будущее..
И выросшие в это время как грибы после дождя кооперативы клепающие спеки меня просто забавляли (сравнивая спек и IBM я понимал, что спек убог). А кто-то в это время получил свой первый спек и травму на всю оставшуюся жизнь :)
Всеми заводами в период СССР 1983-1991 г. - порядка 500 т., из них продано населению в розницу - не менее 100 т.
Потом, в 1992-1993 г. еще порядка 100 т. сделали. Последнюю коммерческую БК11М на Э. сделали в декабре 1993, для ЧПУ - в апреле 1994 ( есть у меня такая - на ней всё делаю ).
Ну тогда БК это 1979-1983 разработки. Важно же не когда разрабатывалось, а когда в магазинах появилось для широких народных масс.
Ну почему? Для своего времени - скажем, на 1988-ый год, БК-0010 был массовым, во многих школах стоял. Сомневаюсь, что в 1988-ом году в СССР было больше Спектрумов, чем БК.
Так это уже история 1990-го года и позже. Тогда Спектрум по массовости превзошёл БК. С этим никто не спорит.
Я немного парирую S_V_B, но, с другой стороны, и соглашусь: когда я увидел первый Спектрум, уже имел к тому времени представление об Amiga, Sun и Silicon Graphics. IBM PC меня вдохновла не больше, чем ДВК, а вот Амига - да. Какой уж там Спектрум... Действительно, люди, выросшие на ДВК и БК сразу перепрыгнули на 16- и 32-разрядные машины, минуя Спектрум. Другое поколение.
Вложение 68599
Но в то же время, "борьба" между Спектрумом и БК продолжалась в андеграундной культуре года до 1996-го. Тогда ещё БК-шники глумились над ZX ("ни музыки, ни графики!"), одновременно тыря графику и портируя игры со Спектрума на БК
:)
Личный опыт: в маленьком сибирском городке на рубеже 90-х среднестатистический школьник как минимум имел представление об уровне игрового софта для: Atari-800, C64, ZX, БК, особо продвинутые имели дома ПМК или щупали песюки в кружках или у родителей на работе (которые особо не котировались, ибо были CGA либо монохром, только принц рулил); кто ходил на УПК, тот видел УКНЦ. БК в рейтинге школоты был на самом дне, ниже только калькулятор и яйцеловка (и то насчёт последнего не уверен)))
Нам очень повезло в детстве, за такой короткий период промелькнула целая эпоха. Сейчас детям и стремиться не к чему.. все есть и ничего кардинально нового не происходит.
У нас БКшками в основном парни серьезные занимались, склонные к программированию и несомненно гордившиеся тем чем занимаются.., а школота-гопота денди уважала.. картридж ткнул и понеслось. У богатеньких.. сеги были.., а когда спектрумов стало как мусора.. и игрухи копировать можно было.. наверно дети и к нему потянулись.
у нас денди только с 1993-1994 расплодился, по зомбоящику про него узнали раньше, чем в магазинах
- - - Добавлено - - -
а самый первый широкоизвестный комп с игрушками был атарик, до него только пмк