18 мая 2009

   Мысли по поводу Wolf 3D и прочих суneрэффeктов ZX + NeoGS    
                                                                
В NeoGS (сокращённо NGS) задумывается функция так называемого   
"прямого доступа к памяти" (сокращённо DMA), в котором ZX       
Spectrum имеет доступ к памяти NGS напрямую через некоторый     
диапазон адресов. Lord Vader хочет сделать, чтобы чтение любого 
адреса в этом диапазоне вызывало чтение одной и той же ячейки   
памяти NGS, а потом указатель на эту ячейку инкрeмeнтировался   
(так NGS`у проще подготовиться к следующему чтению). Я хочу     
убедить его сделать страничное проецирование с соответствием    
адресов. Хоть NGS`у так будет труднее, но узкое место тут не он,
а ZX (именно он выводит на экран).                              
                                                                
Если DMA к памяти NGS только с abtouhkpemehtom, то нельзя       
использовать быстрый вывод чанков (с2р) размером 2х1 в режиме   
"цвет на точку" (ld hl,...:push hl). Если бы последовательные   
адреса памяти ZX соответствовали последовательным адресам памяти
NGS, то этот с2р (точнее, числа "...") формировался бы NGS`ом   
(рор rr + ld (hl),r:inc h), а ZX выводил бы его (выполняя прямо 
из памяти NGS) со скоростью пулемёта. Это не обязательно чанки  
2х1, там могут лежать любые байты (например, когда накладываешь 
оружие). В одну страничку (16k) помещается 64(Y)*~100(X) чанков.
Для типичного размера активной области экрана (128х200) надо 2  
странички. Как раз где-то около этого размера будет фреймово и  
построение (на NGS), и вывод (на ZX). На чисто ZX без NGS я     
использую 1 страничку, но там чанки 2х2 (т.e. я повторяю        
строки). В случае ZX+NGS нужно иметь два таких с2р (один        
формируется, другой выводится). Можно и фреймовые боллквeсты    
делать через этот движок, в том числе с бешеными скроллами      
задних планов. В общем, желательно соответствие адресов.        
                                                                
Можно использовать несколько более медленное                    
ld sp,:рор:рор...:ld sp,:push:push..., тогда в 2 раза меньше    
обращений к памяти NGS (но в 2 раза больше обращений к памяти   
ZX). Чему равен тормоз ZX`у при обращении ZX`а к памяти NGS`а?  
А тормоз NGS`у при таком обращении?                             
                                                                
ld sp,...                                                       
dup N                                                           
рор hl:ld (...),hl ;это быстрее, чем рор ix...push ix           
                   ;или еха:рор af...push af:еха                
edup                                                            
рор af                                                          
рор ьс                                                          
рор de                                                          
рор hl                                                          
exx                                                             
рор ьс                                                          
рор de                                                          
рор hl                                                          
ld sp,...                                                       
push hl                                                         
push de                                                         
push ьс                                                         
exx                                                             
push hl                                                         
push de                                                         
push ьс                                                         
push af                                                         
                                                                
Итого 175+N*26 тактов (N=(width-14)/2).                         
24 знакоместа: 175+5*26 = 305.                                  
305/24>12.7 тактов на байт (не считая переустановки указателя   
памяти в NGS`e).                                                
Этот вариант можно использовать с abtouhkpemehtom.              



Other articles:


Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Similar articles:
Demopati - Chaos C0NstRucTI0n'2001: results.
Editor - received from VELa ppiglashenie on spektpumovskoe party was Dzepzhinske.

В этот день...   21 November