Очень низкоуровневый эмулятор 6502 / NES   
	
        
        
            | Автор | 
            Сообщение | 
         
        
	
			  16 окт 2013, 08:54 | 
			
				
					 
					
					 
				
			 | 
	 
	
			| 
				
				
				
				 
				
				 
				 
			 | 
			
				
					
						org писал(а): мне казалось что восстановлением интерлейса занимается телеприемник  Можно попробовать самому "склеить", но это лишняя трата ресурсов. У нас же монитор, а не телевизор. Логика PPU просто вырабатывает максимально совместимый сигнал. Телевизор, тоже не на весь экран картинку растягивает и видно, что она меньше. В детстве даже пытался посчитать, сколько символов по горизонтали (был у меня ZX Spectrum, сравнивал). Однозначно нужны все 50 полукадров, а при 25 анимация не плавная. (Заметил, что на разных по мощности компьютерах разное число глюков в кадрах, наверное, на менее мощном не все кадры отображаются.) Еще одна деталь, которая поставила меня в тупик. Эмуляцию некоторых инструкция CPU делал ассемблерным кодом и потом считывал состояние флагов реального процессора и сохранял в эмулятор. На разных процессорах игры вели себя по разному: в T2 не запускалась заставка с буквами, а вылезала титульная картинка, но на другом было все нормально. Потом я вычитал, что есть какая-то проблема с флагом переполнения и его не используют программы. Пришлось все команды опять пересчитывать честно. За отладочные регистры APU  спасибо, не посмотрел логику откуда идут линии выбора этих регистров.  
					
  
			 | 
		 
		
		 
	
	
		  | 
	 
	
	
			  16 окт 2013, 10:35 | 
			
				
					 
					
					 
				  
			 | 
	 
	
			| 
				
				
				
				 
				 Зарегистрирован:  14 ноя 2007, 11:19 Сообщения: 370
				 
				 
			 | 
			
				
					
						 Сори что вливаюсь не особо читая, но не понял с Carry проблемы? где? на каком проце? 
					
  
			 | 
		 
		
		 
	
	
		  | 
	 
	
	
			  16 окт 2013, 10:44 | 
			
				
					 
					
					 
				      
			 | 
	 
	
			| 
				
				
				
				 
				 Зарегистрирован:  24 июл 2007, 10:41 Сообщения: 575
				 
				 
			 | 
			
				
					
						Цитата: Можно попробовать самому "склеить", но это лишняя трата ресурсов. Если хотите честной эмуляции, то имитировать телевизор всё таки придется) По крайней мере я планирую делать именно так, потому что на выходе своего PPU буду получать сигнал. Цитата: Телевизор, тоже не на весь экран картинку растягивает и видно, что она меньше.  Телевизор вообще делает с сигналом что захочет ) Главное чтобы частота сигнала соответствовала стандарту, а телевизор будет пытаться уместить отрезок сигнала на одну строку. Ну а дальше оффтоп)  
					
  
			 | 
		 
		
		 
	
	
		  | 
	 
	
	
			  16 окт 2013, 21:59 | 
			
				
					 
					
					 
				
			 | 
	 
	
			| 
				
				
				
				 
				
				 
				 
			 | 
			
				
					
						 Восхищаюсь вашим упорством. Очень интересно следить за вашей работой. Спасибо. 
					
  
			 | 
		 
		
		 
	
	
		  | 
	 
	
	
			  18 окт 2013, 09:21 | 
			
				
					 
					
					 
				
			 | 
	 
	
			| 
				
				
				
				 
				
				 
				 
			 | 
			
				
					
						Wind писал(а): Сори что вливаюсь не особо читая, но не понял с Carry проблемы? где? на каком проце? Проблема с флагом переполнения а не переноса. Точную информацию найти не смог, по памяти скажу, что флаг процессор не использует, нужно переключать режим. Дальше писать не буду пока не найду источник этой информации. А все-таки интереснее выглядит картинка не 256 х 240, а 312 х 480 (интерлейс). Но нужно дублировать каждый пиксель в линии, иначе узкая получается. А со схемой выбора на строку отображаемых спрайтов еще не разбирались? А то на счетчиках и регистрах сдвига проще сделать вывод спрайтов, да и симуляция точнее выйдет.  
					
  
			 | 
		 
		
		 
	
	
		  | 
	 
	
	
			  18 окт 2013, 10:01 | 
			
				
					 
					
					 
				      
			 | 
	 
	
			| 
				
				
				
				 
				 Зарегистрирован:  24 июл 2007, 10:41 Сообщения: 575
				 
				 
			 | 
			
				
					
						Цитата: Проблема с флагом переполнения а не переноса. Переполнение это если при арифметических действиях произошел перенос из 6го в 7й разряд. Цитата: А все-таки интереснее выглядит картинка не 256 х 240, а 312 х 480 Почему 312 ?  У PPU 341 точка, но из них "видимых" (пикселей) только 256, остальное это служебные "пиксели", для формирования порции сигнала вертикальной синхронизации и color burst. Вот развертка NTSC сигнала :  Со спрайтами ещё не разбирались, там хитрая схема sprite evaluation.  
					
  
			 | 
		 
		
		 
	
	
		  | 
	 
	
	
			  18 окт 2013, 10:29 | 
			
				
					 
					
					 
				  
			 | 
	 
	
			| 
				
				
				
				 
				 Зарегистрирован:  14 ноя 2007, 11:19 Сообщения: 370
				 
				 
			 | 
			
				
					
						 Так на каком проце-то такие сложности возникают? 
					
  
			 | 
		 
		
		 
	
	
		  | 
	 
	
	
			  19 окт 2013, 18:17 | 
			
				
					 
					
					 
				
			 | 
	 
	
			| 
				
				
				
				 
				
				 
				 
			 | 
			
				
					
						 Виноват! Не 312, а 512.  256 пикселей, и каждый 2 раза. И это только, чтоб сохранить пропорцию изображения. Можно взять и 341, но не дублировать все видимые пиксели, а просто дополнить сканлайн до этого значения. Тогда полный кадр будет выглядеть  как 341 х 480. Это явно уже, чем 512 х 480 (нарисовал 512 точек, а эмуляция проходит для 341-й) 
					
  
			 | 
		 
		
		 
	
	
		  | 
	 
	
	
			  19 окт 2013, 18:49 | 
			
				
					 
					
					 
				  
			 | 
	 
	
			| 
				
				
				
				 
				 Зарегистрирован:  19 окт 2013, 18:46 Сообщения: 18 Откуда: Россия, г. Златоуст
				 
				 
			 | 
			
				
					
						Wind писал(а): Так на каком проце-то такие сложности возникают? Сложности возникли у меня, когда я пытался использовать флаги реального процессора, на котором выполнялся код эмулятора. Проблемы возникли с эмуляцией флага V процессора NES. Проблема в том, что виртуальный должен складывать и вычитать 8 разрядные числа, при чем без десятичной коррекции, а реальный работает с числами в 32 разряда + знаковые числа + десятичная коррекция. Так, вот и не знаешь, что он выдаст в ответе после сложения или вычитания. Короче не стал мучиться, и пересчитывал этот флаг отдельно. Хотя, я ему "говорил", чтоб складывал только Low части (младшие 8 бит) регистров.    Если, это что-то даст, то все PC были на интеловских процессорах.  
					
  
			 | 
		 
		
		 
	
	
		  | 
	 
	
	
			  19 окт 2013, 18:54 | 
			
				
					 
					
					 
				
			 | 
	 
	
			| 
				
				
				
				 
				
				 
				 
			 | 
			
				
					
						 что мешает сложить два signed char ? 
					
  
			 | 
		 
		
		 
	
	
		  | 
	 
	
	
			  19 окт 2013, 19:54 | 
			
				
					 
					
					 
				  
			 | 
	 
	
			| 
				
				
				
				 
				 Зарегистрирован:  14 ноя 2007, 11:19 Сообщения: 370
				 
				 
			 | 
			
				
					
						 Иван, ну вобще-то никаких проблем с флагами нет на x86 процах, просто нужно не забывать что где-то 80% комманд меняют и взводят флаги и в отличии к примеру от ARM запретить взведение флагов никак нельзя. 
					
  
			 | 
		 
		
		 
	
	
		  | 
	 
	
	
			  12 ноя 2013, 18:13 | 
			
				
					 
					
					 
				      
			 | 
	 
	
			| 
				
				
				
				 
				 Зарегистрирован:  24 июл 2007, 10:41 Сообщения: 575
				 
				 
			 | 
			
				
					
						Накатал большой трактат по симуляции логических схем : http://wiki.breaknes.com/sim 
					
  
			 | 
		 
		
		 
	
	
		  | 
	 
	
	
			  15 ноя 2013, 01:36 | 
			
				
					 
					
					 
				    
			 | 
	 
	
			| 
				
				
				
				 
				 Зарегистрирован:  06 апр 2008, 13:46 Сообщения: 119
				 
				 
			 | 
			
				
					
						Увлекательный проект. Пару дней изучал и читал взахлёб информацию по теме. Спасибо за труды    
					
  
			 | 
		 
		
		 
	
	
		  | 
	 
	
	
			  04 апр 2014, 05:55 | 
			
				
					 
					
					 
				    
			 | 
	 
	
			| 
				
				
				
				 
				 Зарегистрирован:  28 дек 2012, 05:58 Сообщения: 19 Откуда: Курган
				 
				 
			 | 
			
				
					
						Сайт ещё вернётся или усё? ( --- Заработало, спасибо.   
					
  
			 | 
		 
		
		 
	
	
		  | 
	 
	
	
			  10 апр 2014, 08:21 | 
			
				
					 
					
					 
				  
			 | 
	 
	
			| 
				
				
				
				 
				 Зарегистрирован:  10 апр 2014, 07:58 Сообщения: 4 Откуда: оттуда
				 
				 
			 | 
			
				
					
						 Бета в природе существует? 
					
						 _________________ Lord of Folly
					
  
			 | 
		 
		
		 
	
	
		  | 
	 
	
	
			  10 апр 2014, 14:12 | 
			
				
					 
					
					 
				      
			 | 
	 
	
			| 
				
				
				
				 
				 Зарегистрирован:  24 июл 2007, 10:41 Сообщения: 575
				 
				 
			 | 
			
				
					
						всё что сделано лежит на SVN :  http://code.google.com/p/breaks 
					
  
			 | 
		 
		
		 
	
	
		  | 
	 
	
	
			  13 апр 2014, 08:40 | 
			
				
					 
					
					 
				  
			 | 
	 
	
			| 
				
				
				
				 
				 Зарегистрирован:  10 апр 2014, 07:58 Сообщения: 4 Откуда: оттуда
				 
				 
			 | 
			
				
					
						
					
						 _________________ Lord of Folly
					
  
			 | 
		 
		
		 
	
	
		  | 
	 
	
	
			  07 июн 2014, 22:03 | 
			
				
					 
					
					 
				
			 | 
	 
	
			| 
				
				
				
				 
				
				 
				 
			 | 
			
				
					
						 Org, ответь на ответ. Как устроен DMA? Дело в том, что есть DMA который загружает спрайты. А есть DPCM, который может использовать DMA. Вопрос в следующем: корка DMA общая или это 2 разных устройства? Ну и останавливается ли корка 6502 на время работы DMA. И касаемо спрайтового DMA: внешний сигнал R/W же общий, стало быть 2 цикла на 1 передаваемый байт, так? Где он храниться при этом внутри чипа?
  PS Понимаю, что пора бы уже транзисторную схему разбирать, но я этим займусь несколько позже. 
					
  
			 | 
		 
		
		 
	
	
		  | 
	 
	
	
			  08 июн 2014, 02:28 | 
			
				
					 
					
					 
				      
			 | 
	 
	
			| 
				
				
				
				 
				 Зарегистрирован:  24 июл 2007, 10:41 Сообщения: 575
				 
				 
			 | 
			
				
					
						Точно сказать пока не могу, я схему нарисовал, но толком не разбирал. Сейчас с frame counter парюсь) http://wiki.breaknes.com/apu:lfohttps://code.google.com/p/breaks/source ... U/LFO.circ 
					
  
			 | 
		 
		
		 
	
	
		  | 
	 
	
	
			  21 июн 2014, 08:45 | 
			
				
					 
					
					 
				  
			 | 
	 
	
			| 
				
				
				
				 
				 Зарегистрирован:  19 окт 2013, 18:46 Сообщения: 18 Откуда: Россия, г. Златоуст
				 
				 
			 | 
			
				
					
						 Что происходит с 6502, когда встречается "неверный" код операции? Как его обрабатывает логика, и сколько циклов тратит процессор на обработку? Разные коды будут вызывать разное поведение? 
					
  
			 | 
		 
		
		 
	
	
		  | 
	 
	
	
		 | 
	 
	
	 
	
	
 
	 
	
	
		Кто сейчас на конференции | 
	 
	
		Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2  | 
	 
	 
 
	 | 
	Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения
  | 
 
 
 
	 |