Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Именно поэтому подавляющее большинство игр для PAL региона, примерно на 17% медленнее чем было задумано изначально:
Однако, если бы железо позволяло, то программистам не нужно было привязываться к тактам.
Никогда никто по тактам программы не выравнивал, всегда используют что-то типа halt и ждут прерывания.И как вы это предлагаете сделать на 6507, где для удешевления #IRQ и #NMI из корпуса не выведены?
Но в консолях 80-х такого уже не было.Было-было, ещё как было. Не во всей программе, как под 2600, но в отдельных процедурах. На Хабре даже есть перевод серии статей, где объяснялось как именно эти игры издевались над железом.
но в отдельных процедурах.
а синхронизации в большинстве игр нету, всё выверено по тактам…
Все процедуры, которые что-то делают на нескольких процессорах — просчитаны по тактам,
Он же суперскалярный.Суперскаляр — да, но спекуляций там нет.
есть возможность создания барьера, пусть даже на уровне процессора.Инструкции там есть, но ими не пользуются. Так как если вы не просчитаете всё в тактах, то синхронизация приведёт к тормозам, а если просчитаете — то нафиг она нужна?
Суперскаляр — да, но спекуляций там нет.
А если запущен одинаковый кодКак вы собрались запускать там одинаковый код если это процессоры разную архитектуру имеют?
fwait в 8086).Только вот игры этим почти не пользовались — просто рассчитывалось всё так, чтобы VPU выдавали результат ровно тогда, когда он нужен в CPU.
Вот что более реально, так это создать барьер и на этом закончить извращения.И, тем не менее, во многих играх барьера нет…
Нет, это можно выяснить для конкретной ревизии чипа, но, боюсь, очень трудоёмко.Не так сложно, как кажется. Для процессоров класса Pentium или R5900 всё вполне считается: там может исполняться либо одна комнда за такт, либо две, причём ограничения это всё фиксированны.
ужасно усложняет жизнь, озвереть можно как
Все более сложные игры, пошедшие с 1985 года, результат выжимания всех соков и использования множество трюков, и всё это завязано на точное знание устройства CPU/PPU и их точной потактовой синхронизации.
;------------------------------------------------------------------------------
irq_line_sy_init:
lda #<_split_list
sta <IRQ_SPLIT_LIST+0
lda #>_split_list
sta <IRQ_SPLIT_LIST+1
rts
irq_line_sy_m:
;6 for jsr
lda #39 ;2
jsr timing_delay ;25+39
ldx #0 ;2
lda (IRQ_SPLIT_LIST),y ;5+
iny ;2
stx PPU_ADDR ;4
sta PPU_SCROLL ;4
stx PPU_SCROLL ;4
and #$f8 ;2
asl a ;2
asl a ;2
sta PPU_ADDR ;4 this write should be done on the hblank
rts ;6=109 including jsr
irq_line_sy:
sta MMC3_IRQ_DISABLE
pha
txa
pha
tya
pha
lda #69 ;2
jsr timing_delay ;25+69
ldy #0
_irq_loff_0:
;NTSC 113.6 CPU clocks per line
;to make up the .6 to an integer, lines needs to have slightly shifted timings in groups of ten
;five lines is 568 cycles exactly, but there is still a slight shift
jsr irq_line_sy_m ;109 0
nop ;2
lda <0 ;3
jsr irq_line_sy_m ;109 114
nop ;2
nop ;2
jsr irq_line_sy_m ;109 227
nop ;2
lda <0 ;3
jsr irq_line_sy_m ;109 341
nop ;2
nop ;3
jsr irq_line_sy_m ;109 454
nop ;2
lda <0 ;3
jsr irq_line_sy_m ;109 0
nop ;2
lda <0 ;3
jsr irq_line_sy_m ;109 114
nop ;2
nop ;2
jsr irq_line_sy_m ;109 227
nop ;2
lda <0 ;3
jsr irq_line_sy_m ;109 341
nop ;2
nop ;3
jsr irq_line_sy_m ;109 454
cpy #220 ;2 height of the raster
bcc _irq_loff_0 ;2/3
lda #0
sta PPU_MASK
pla
tay
pla
tax
pla
rti
Точная потактовая могла быть. Но вот вышеозвученный сплит-скролл делался довольно просто и без потактовой синхронизации — в NES есть регистр-счетчик, декрементирующийся каждую строку растра, и генерирующий прерывание при обнулении.
Развёртка там черезстрочная, но, обычно, консоли/микрокомпьютеры не страдали выдачей разных полукадров и дублировали один и тот же полукадр два раза.Попробуйте включить в любом эмуляторе frameskip=1 и «насладиться» игрой на 30 к/с.
каждый полукадр идёт как самостоятельный кадр половинного разрешения.
Т.е. приставки показывают 50/60 разных картинок в секунду.

А год-то разработки какой? ;)Какая разница какой там год разработки? Многие вещи, которые есть уже в самой первой версии Amiga в приставки и PC пришли ближе к XXI веку. Она очень сильно опережала своё время. Так что Amiga — это не очень показатель. Хотя подобрать для неё «правильный» Dell 2001FP было той ещё задачей…
за исключением режима переменной плотности пикселей в части экранаЭто как раз одна из редких вещей, выдающих её возраст. Такие вещи как раз в 80е были распространены. Apple IIGS тоже так умеет (отсюда, кстати, шестицветное Apple лого: вот как раз его в меню Apple IIGS изобразить было можно… а если бы цвета не были именно горизонтальными полосками — то ничего бы не получилось).
Кстати, а почему в играх ntsc где сигнал на тв должен идти в формате (приблизительно, тк формат аналоговый) 480i, размер кадра по высоте больше, чем в pal с размером кадра 576i ?Не понял вопроса. Если вы на телевизоре, где физически 576 строк отрисуете их только 480 — то как раз и получите чёрные поля сверху и снизу…
В формате PAL видео могло работать только с частотою 25 и 50 кадров в секунду
В моем мегадрайве был переключатель частоты рядом со слотом расширения. И он работал даже без перезагрузки. Правда большую часть времени я играл на 50гц — думал, что это нормальная частота, а 60 ускоренная.
Ретрогейминг: PAL vs NTSC. Или почему PAL не нужен