Просмотр сообщений

В этом разделе можно просмотреть все сообщения, сделанные этим пользователем.


Сообщения - Томахомэ

Страницы: Назад 1 2 [3] 4 5 6 7 ... 33 Далее
61
Не сильно в код углубился, но ты походу пытаешь читать конец файла, а там уже ничего нет.

Спасибо! Именно так оно и оказалось.

62
Собираюсь я тута написать небольшую совсем-совсем простенькую утилитку для конвертации BMPшек глубиной цвета в 4 бита в набор 4-битных linear тайлов размером 16 на 16 - формат, использовавшийся в некоторых игровых автоматах (например, Strikes of 1945 и парочке корейских железячек с сильными подозрениями на его клонизм). Однако почему-то даже проверка по сигнатуре не работает как надо - вместо стоящих первыми 2-мя байтами букв B и M утилитка в любой скормленной BMPшечке видит нули. Как так получается?

#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>


FILE         *fpin, *fpout;
long            len;
long            i,n;

int main(int argc, char *argv[])
{

if (argc != 2 ) {
printf("Bitmap converter to 4bpp 16x16 tile data.\n");
fprintf(stdout,"Usage: %s [srcfile].bmp\n",argv[0]);
exit(1);
}


if ( (fpin=fopen(argv[1],"rb") ) == NULL ) {

printf("Can't open input file\n");
exit(1);
}


/*
 * Now we try to determine the size of the file
 * to be converted
 */
if (fseek(fpin,0,SEEK_END)) {
printf("Couldn't determine size of file\n");
fclose(fpin);
exit(1);
}

len=ftell(fpin);

unsigned short   bytStr[len];

fread(bytStr, 1, len, fpin);
   
  printf("The first byte is %x.\n",bytStr[0]);
fclose(fpin);
exit(1);
}

63
Ещё одна проблема - почему-то ASMX неверно определяет размер каждого загружаемого бинарника. Например, прикреплённую 512-байтовую палитру он определил как файл весом всего в 174 Б. Может, в самом коде команды incbin какой-то косячок кроется?

       case o_Incbin:
            DefSym(labl,locPtr,FALSE,FALSE);

            GetFName(word);

            val = 0;

            // open binary file
            incbin = fopen(word, "r");

            if (incbin)
            {
                // while not EOF
                do {
                    //   n = count of read up to MAX_BYTSTR bytes into bytStr
                    n = fread(bytStr, 1, MAX_BYTSTR, incbin);
                    if (n>0)
                    {
                        // write data out to the object file
                        for (i=0; i<n; i++)
                            CodeOut(bytStr[i]);
                        val = val + n;
                    }
                } while (n>0);
                if (n<0)
                    sprintf(s,"Error reading INCBIN file '%s'",word);

                if (pass == 2)
                {
                    // "XXXX  (XXXX)"
                    p = ListLoc(locPtr-val);
                    *p++ = ' ';
                    *p++ = '(';
                    p = ListAddr(p,val);
                    *p++ = ')';
                }

            }
            else
            {
                sprintf(s,"Unable to open INCBIN file '%s'",word);
                Error(s);
            }

            // close binary file
            if (incbin) fclose(incbin);
            incbin = NULL;

            break;

Ну таки в чём тут на самом деле дело?

64
Ещё одна проблема - почему-то ASMX неверно определяет размер каждого загружаемого бинарника. Например, прикреплённую 512-байтовую палитру он определил как файл весом всего в 174 Б. Может, в самом коде команды incbin какой-то косячок кроется?

       case o_Incbin:
            DefSym(labl,locPtr,FALSE,FALSE);

            GetFName(word);

            val = 0;

            // open binary file
            incbin = fopen(word, "r");

            if (incbin)
            {
                // while not EOF
                do {
                    //   n = count of read up to MAX_BYTSTR bytes into bytStr
                    n = fread(bytStr, 1, MAX_BYTSTR, incbin);
                    if (n>0)
                    {
                        // write data out to the object file
                        for (i=0; i<n; i++)
                            CodeOut(bytStr[i]);
                        val = val + n;
                    }
                } while (n>0);
                if (n<0)
                    sprintf(s,"Error reading INCBIN file '%s'",word);

                if (pass == 2)
                {
                    // "XXXX  (XXXX)"
                    p = ListLoc(locPtr-val);
                    *p++ = ' ';
                    *p++ = '(';
                    p = ListAddr(p,val);
                    *p++ = ')';
                }

            }
            else
            {
                sprintf(s,"Unable to open INCBIN file '%s'",word);
                Error(s);
            }

            // close binary file
            if (incbin) fclose(incbin);
            incbin = NULL;

            break;

65
Решил я тут начать пилить небольшую демку для Playmark'овского железа Excelsior, и тут вырисовалась небольшая проблема - вроде прерывание №2 для данной железки я уже разрешил, однако самого перескока к соответствующему адресу, когда приходит время прерывания, не происходит - только значение 3-го нибла регистра SR меняется с 1 на 2, и MAME'овский дебаггер тоже никакого прерывания не регистрирует.
Внизу прикреплены иллюстрирующий странность в работе M68000 тестовый набросок кода и полученный в результате его сборки ром (запускать через командную строку - mame excelsr -d). Что же я всё-таки упустил?

А знаете, в чём самая-самая смехотура оказалась? В том, что я поставил в SSP самый последний байт оперативы - т. е., по сути, нечётный адрес. Как сменил на чётный, так прерывания сразу и заработали - а для верности проверил ещё на нескольких M68k-based - машинах. И не нужно оказалось ни к кому обращаться за помощью.
Хотя мне, надо сказать, повезло, что программирую я только как хобби, а не работаю по найму в какой-нибудь IT-фирме, занимающейся низкоуровневым программированием - а то за такой ламерский косяк летел бы сейчас с пронзительным свистом под действием начальственного пинка под жопу, как высокомерный долбодятел, нагло насвистевший работодателю о своей профпригодности.

66
Организовал небольшой праздничек всех, кто хочет программировать и ромхачить для 32X, а может, даже для Saturn и Dreamcast. Впервые за долгое время мне наконец-то удалось довести хоть что-то до конца - конкретно модуль архитектурной поддержки SH2 (см. первое прикрепление) для ASMX (того, между прочим, самого, который в BasiEgaXorz'е за конечную компиляцию рома отвечает).

Сам исходный код ASMX качать лучше всего здесь. Чтобы заинтегрировать свежескаченный source-файл asmsh.c в ASMX, просто пропишите строчку ASSEMBLER(SH); в файл asmx.c - туда, где у него список архитектур. Кому лень собирать самому или не знает как - во втором прикреплении готовый exe.

67
Пошуровав немного по официальной документации по PS2 (см. прикрепления), решил проверить на работоспособность код отрисовки простейшего прямоугольника.
org $bfc00000
lui t0, $1000
ori t0, t0, $3000
addi t1, t1, $6
sb t1, 0(t0)
addi t1, zero, $ffff
lui t1, $ff
addi t3, t3, $100
lui t4, $100
sb t1, 1(t0)
sb t2, 5(t0) ; 1st vertex
or t5, t4, t3
sb t1, 1(t0)
sb t5, 5(t0) ; 2nd vertex
sb t1, 1(t0)
sb t4, 5(t0) ; 3rd vertex
sb t1, 1(t0)
sb t3, 5(t0) ; 4th vertex
j $

Поскольку формировать исполняемые файлы я ещё не научился, скормить код решил попробовать через подставной псевдобиос. При таком раскладе экран почему-то (проверял на PCSX2) как был, так и остаётся чёрным. Никаких предварительных действий для активации экрана делать не надо?

68
Спрашиваю потому, что почесал на днях немного репу - а не релизнуть ли мне на несколько различных ретро-платформ электронное издание "Гостей от Люцифера"? 4 цвета в моём случае - как раз способ подуменьшить себе работу за счёт отсутствия необходимости жонглировать разными палитрами и заморачиваться с оптимизацией тайлмэпа.

69
А теперь по-русски :lol:

Картмаг - это от cartridge и magazine. Есть же ведь такие устоявшиеся в мире 8/16-битных домашних компьютеров термины, как disk- или tapemag.

Так вот, хватит ли NES места в роме и в видеопамяти на хотя бы сильно даунскейленные и редуцированные до 4-х цветов скроллящиеся цифровые страницы чёрно-белой манги?

70
Стало вдруг интересно - а сможет ли NES чисто архитектурно потянуть картмаг с полноценной чёрно-белой электронной мангой внутри?

71
Интересно, а способны ли старые световые пистолеты, затачивавшиеся под ЭЛТ, заработать на самодельных механических телевизорах?

72
Разное / Тамагочи
« : 29 Январь 2025, 18:29:28 »
Мне купили в 90х, как раз, когда был бум тамагочи (тамагочей :) ). Помню даже, как мы ходили тогда с мамой на рынок, где покупали. Я очень хотел себе, мне было интересно. У меня питомцем была обезьянка. Не могу сказать, что в итоге оказалось сильно интересно. Говорили, что может ночью будить, если хочет есть, и я надеялся, что так будет, но этого не случилось. Следил, кормил, но не помню, чтобы получал большое удовольствие. На седьмой день, когда заканчивался цикл заботы о питомце, я, взглянув на экран, подумал, что с игрой что-то случилось, ибо персонаж ну очень сильно изменился внешне. Оказалось, что так и должно быть на последний день. Больше циклов я не проводил. А потом мой одноклассник где-то на улице нашел тамагочи, там нужно было выращивать диплодока (или схожее существо). Не помню, почему, но он отдал игрушку мне. Динозавр был интереснее обезьяны, но я к тому времени уже охладел к тамагочи. В итоге больше и не играл. Куда делись оба аппарата, не помню.

А потом столь же быстро интерес к тамагочи резко схлынул, во всяком случае у нас в стране. И о них больше даже и не говорили. С появлением у всех ПК и потом Интернета что-то я не слышал особо о возрождении такой штуки. Наверняка есть и эмуляторы старых тамагочи (а есть?), и новые похожие вещи, но, кажется, они не особо популярны.

"Официальные" тамагочи от Bandai, как раз и давшие название такого типа игрушкам, уже несколько лет как в базе MAME.

73
Пошуровав немного по официальной документации по PS2 (см. прикрепления), решил проверить на работоспособность код отрисовки простейшего прямоугольника.
org $bfc00000
lui t0, $1000
ori t0, t0, $3000
addi t1, t1, $6
sb t1, 0(t0)
addi t1, zero, $ffff
lui t1, $ff
addi t3, t3, $100
lui t4, $100
sb t1, 1(t0)
sb t2, 5(t0) ; 1st vertex
or t5, t4, t3
sb t1, 1(t0)
sb t5, 5(t0) ; 2nd vertex
sb t1, 1(t0)
sb t4, 5(t0) ; 3rd vertex
sb t1, 1(t0)
sb t3, 5(t0) ; 4th vertex
j $

Поскольку формировать исполняемые файлы я ещё не научился, скормить код решил попробовать через подставной псевдобиос. При таком раскладе экран почему-то (проверял на PCSX2) как был, так и остаётся чёрным. Никаких предварительных действий для активации экрана делать не надо?

74
Кстати, раз уж с GBA дела начали потихоньку идти на лад - никто не знает, например, есть ли что-то наподобие конечного фреймбуфера у PS2, и есть ли к нему доступ непосредственно у CPU? Решил я туточки попробовать "расшевелить" проект Sails of Charon.

75
На PSP из тактик есть Wild Arms XF, Jeanne D'Arc и дилогия R-Type Command.

76
Random encounter'а точно нет, например, в трилогии Xenosaga для PS2.

77
С тем самым фильтром. Когда дойдут руки до добавления полноценных игровых механик, пропорция между оригинальным значением каждого пикселя и фильтром будет зависеть от того, насколько свободно игровое поле.

78
Нет, ну правда же ведь анимэшная тян с картинки - настоящая лапочка?  @}->--
Теперь нужен для этой картинки полупрозрачный серо-коричневый фильтр, который бы стирался по мере очистки игрового поля от костяшек - пора бы уже наконец посвятить вас в суть моей идеи: это будет клон Double Point/1+2/Pharaoh's Match/Twins/Tamtex'овской дилогии Match It с игровых автоматов. Собственно, когда я как раз-таки узнал про таинственный гонконгский клон железа Excelsior со световой указкой в качестве устройства управления, идея и зародилась - соединять 2 одинаковые костяшки предполагалось вручную с помощью той самой указки. Но, в принципе, старый добрый джойпэд GBA как устройство управления тоже сойдёт.

Так вот, никто не знает, как бы мне этот самый фильтр написать на всё том же ассемблере ARM?

Добавлено позже:
Та же самая картинка, но в оригинальном размере, неуменьшенная.

79
Я перегнул, ты уж не обижайся, читать было всё-равно интересно, но воды лишней многовато.
Вот вариант от Яндекса:

В целом - всё так, только не "переоборудован под", а оказался по чистой случайности похож на него, не саму оригинальную, от Playmark, плату Excelsior, внутри нашли, а её клон (пусть посетители сайта не ловят диссонанс из-за несовпадения по датам), не "долго использовалась в Гонконге", а поздно докатилась до него (всё-таки нейрушке Яндекса придётся ещё какое-то время подообучаться, чтобы улавливать все смысловые нюансы до конца). Но это так - догрёбки до запятой. А пока - вот вам демонстрация программного скроллинга битмапов на GBA. А вокруг тестового демо будут помаленьку прирастать одна за другой геймплейные механики.

80
Такой графомании я ещё не встречал, было физически больно читать :lol:

Предыстория требовала, для понятности общего контекста, большого количества деталей.

81
Теперь конец предисловию, переходим к сути - поначалу я хотел написать демку для "чистого" Excelsior, и лишь потом начать добавлять в MAME архитектурные нюансы именно железки от Haak Lin Faa, переписывая постепенно код уже под них. Про ассемблер ARM я начал впрашивать, уже когда совсем-совсем отчаялся решить проблему с прерываниями для M68k и решил, что "да ну его таки на хрен, задолбало", и вспомнил, что есть на свете ещё одна платформа, тоже с поддержкой битмапов, но уже не палитрованных 8-битных, как у Excelsior'а (у которого, самое смешное, что каждый пиксель всё равно занимает 2 байта - чудовищно неэкономное решение), а задействующих сразу все те 32 с лишним тысячи цветов, которыми она оперирует - речь, конечно же, о GBA.

И вот, после всех мучений, вы сами можете видеть в прикреплениях, какая демочка в итоге получилась. И это ведь далеко не всё - впереди ещё сначала добавка программного скроллинга, а затем и постепенное прикручивание полноценных игровых механик.

Ну а что же до Excelsior'а, то оттуда можно взять чисто "на добрую память" и переписать под ARM алгоритм сжатия картинок.

82
Ну, вот, пришла пора рассказать, зачем таки, собсна, спрашивал за железо Excelsior. История будет долгая и о-о-о-оо-ооочень пахомистая, так что приготовьтесь.

Незадолго до этого один мой знакомый привёз из Гонконга одну презанятную вещь. Дело в том, что Гонконг уже давно имеет славу настоящего сталкерского (не в смысле преследования и слежки за людьми, а в смысле бродьбы по разного рода заброшкам) рая из-за парадоксального, учитывая тамошний жёсткий перманентный дефицит свободную жилплощадь и совершенно логично вытекающих из него неадекватных цен на жильё, обилия, по факту, бесхозной, находящейся в подвисшем юридическом состоянии недвижимости, до сих пор принадлежащей разным мелким фирмам-призракам, хрен знает, чем занимавшимся, и куда и когда девшимся. Так вот, на одном из средних этажей совершенно неприметного высотного здания в самой глубине города, заходит он как-то в одну такую квартирку, переоборудованную под офис (внутри, по словам моего знакомого, похожий на школьный клуб "Подвиг", приписанный к иркутской 39-й школе - не спрашивайте, я не в курсе даже, когда и каким ветром его в этот клуб, что бы тот собой ни представлял, заносило) некоей Haak Lin Faa (黑蓮花, "Чёрный Лотос") Industries. Впрочем, Industries для них слишком громкое слово: настоящие собственные промышленные мощности им вряд ли даже в самом сладком сне снились - обычная, как это у нас называют, полуподвальная IT-фирма, чей потолок - ручная кустарная сборка платок из самых стандартных компонентов, которые можно купить в любом ближайшем магазине радиоэлектроники.

Чтобы войти внутрь офиса, обращаться пришлось к услугам фирмы по аварийному взлому замков. Все окна квартиры были давно зажалюзены, так что воздух внутри был настолько спёрт, будто бы её лет сто не проветривали. Особо ценного ничего в запертом на протяжении десятков лет офисе найти не удалось - кругом были лишь длинный книжный шкаф во всю ширину одной из стен следующей за прихожей комнаты, до отказа забитый какими-то пожелтевшими пыльными, возможно, даже плесневелыми папочками на китайском, да всё какие-то картонные коробки с очевиднейшим электронным мусором. И лишь в одной из таких картонок лежала полусгнившая датированная 2003 годом unpopulated ROM-микросхемами плата, служившая, по всей видимости, для сугубо отладочных целей.

Её-то мой знакомый, будучи, кроме любителя сталкинга, ещё и электронным гиком, с собой и привёз. Уже подысследовав её дома, он с удивлением обнаружил, что железячка-то - ни что иное, как цельнотянутый (с поправкой, конечно, на "местную", характерную именно для гонконгских реалий 2003 г., элементную базу) Excelsior - видимо, итальянская технология долго ходила по рукам, прежде чем по итогам своего 8 (если считать от от указанной в официальных флайерах даты 1995)-летних скитаний осесть в Гонконге. Что, впрочем, неудивительно - среди стран-"подбиральщиков объедков" за флагманами мирового игростроя на момент 2003 г. имелась своя иерархия: на первом месте была Южная Корея, чьи фирмы, которые у нас обычно, долго не раздумывая, именуют пиратскими, на самом деле трудились на этаком юридическом пограничье (например, Yun Sung) - в продукции таких практически обязательно были откуда-то по мелочи свистнуты или часть кода, или ресурсы, или геймплейная механика, или железо, и всё равно игра в общем и целом смотрелась их собственным продуктом, а не пиратской копией или хаком чьей-то чужой. Далее шли как раз Гонконг с Тайванем, подъедавшие в т. ч. и за Кореей. "Редуцентом 3-го порядка", как это называется в школьном курсе биологии, был материковый Китай. Ну, и совсем уж днище днищенское - это Юго-Восточная Азия и прочий третий мир. И чем ниже ты был в этой пищевой цепочке, тем более как до жирафа до тебя доходили чьи-то поюзанные технологии. Особую, кстати, пикантность картинке придаёт тот факт, что Playmark большую часть своей истории была именно классической бутлеггерской фирмой, которая перешла на клепание своего продукта достаточно поздно - то есть в масштабах уже не одной лишь Азии, а мира в целом Гонконг спускается со 2-го порядка на 3-й.

Впрочем, небольшое отличие от железа Excelsior у таинственной платки всё же было - порт для джойстика у неё был намертво подсоединён к световой указке (увы, обскака японцев с их Wii китайцами не случилось - по сути, это был всё тот же старый добрый пистолет). Неясно, кстати, было, а действительно ли эта Haak Lin Faa на аркадный рынок нацеливалась - их железка могла с примерно равной вероятностью служить сердцем и банкоматов (хотя нет, вряд ли - они в свой модели управления довольно консервативны и предпочитают привычный нампад), и мультимедийных цифровых информационных стендов, и интерактивных школьных досок (хотя тоже сомнительно - вряд ли цифровизация образования в Гонконге в 2003 году была так же высока, как сейчас), и больничных тестеров зрения либо координации, и Plug&Play-телеигр - да мало ли чего ещё. Однако, сколько ни гадай о возможном предназначении устройства, ясности это не внесёт ни грамма.

83
Разработчики эмулятора на днях сделали нам большой новогодний подарок в виде ряда переработок внутри динамического рекомпилятора. Вчера, например, обнаружил, что в Naomi'вскую версию Death Crimson OX, если есть процик начиная хотя бы с Ryzen 5 2600, уже можно играть "без боли" (правда, некоторым терпением запастись всё же придётся) - при том, что картинка уже не сильно-то, за исключением буквально пары мест, где присутствуют серьёзные графические баги, отличается от аутентичной, а сам геймплей, несмотря на вынужденную замедленность, всё ещё смотрится довольно бодрым и динамичным (низкая же скорость игры тут, надо заметить, подчас буквально спасает, и игра становится на практике проходимой почти без дамага).

84
Чтобы получить +3  попадания, в начале игры сходите на кухню и съешьте дерьмо с тарелки.  :nyam:

Тонкая отсылка к "Зелёному Слонику"?

85
На новой железке сработало, вот только внутриигровые анимации сильно ускорены, из-за чего в катсценах реплики быстро начинают накладываться одна на другую, а самой игре наносится серьёзный удар по плэйабельности. Да ещё и движения у мыши какие-то дёрганные...

86
А современный адаптер Coleco Master для SMS? У него встроенный BIOS от CV?

Пока не смотрел.

87
У CV и SG-1000 одни и те же процессор, видео и звук

Тут дело ещё и в том, что у ColecoVision был собственный биос, на который игры многое переваливали в своей работе, а у семейства SG - нет. Поэтому роскошь поиграть в Coleco'вские игры на Sx-x была доступна только на комбайнах вроде Dina 2-in-1.

88
Таааак, с загрузкой больших чисел в регистры вроде разобрался (хоть эта процедура и получилась очень уж многоступенчатой),  и даже с прерываниями. Остаётся только вопрос - почему выбранный кусок изображения всё ещё не выводится на экран?

89
тебе в какой регистр грузить то надо?

Загрузить число $4000000 (адрес регистра DISPCNT у GBA) в R0 - чтобы подготовиться к переводу в режим битмэпа. А ведь кроме DISPCNT,  видеорегистов есть ещё штук 40 (то есть с адресами $40000xx), и фиг ещё знает, какие понадобятся в дальнейшем - в случае с ними одной прокруткой точно не обойдётся.

90
Кстати, об ассемблере ARM - а у него есть вообще способ загрузить командой mov полноразмерное 32-битное число, где все 16-ричные цифры были бы разные?

Просто, как оказалось, соответствующий модуль у ASMX откровенно сырой и недопиленный - на данном этапе загрузить таким способом в регистр можно только однобайтные числа. Допилить за Томлином самому мешает тот факт, что структура такого типа опкодов у ARM специфическая (см. главу Data Processing), и далеко не всякое 32-битное число можно "ужать" до 8-битного методом банальной прокрутки.

long ARMImmed(unsigned long val)
{
    // note: can't abort assembling instruction because it may cause phase errors

    if ((val & 0xFFFFFF00) == 0)
        return (val & 0xFF);
    else
    {
        // FIXME: need to handle shifts
        // bit 25 (I) = 1
        // bits 8-11 = rotate (immed8 is rotated right by 2 * this value)
        // bits 0-7 = immed8
        // the smallest value of rotate should be chosen
    }

    Error("Invalid immediate constant");
    return 0;
}

Страницы: Назад 1 2 [3] 4 5 6 7 ... 33 Далее