Важная информация

User Tag List

Страница 1 из 3 123 ПоследняяПоследняя
Показано с 1 по 10 из 22

Тема: Быстрая и медленная память 128к

  1. #1
    Veteran Аватар для Hacker VBI
    Регистрация
    05.03.2013
    Адрес
    г. Канев, Украина
    Сообщений
    1,596
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    3
    Поблагодарили
    2 сообщений
    Mentioned
    7 Post(s)
    Tagged
    0 Thread(s)

    Lightbulb Быстрая и медленная память 128к

    Можно что-нибудь внятное по этому поводу?
    Не совсем понимаю, что где как будет исполняться и в чём причина.

  2. #1
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  3. #2
    Guru Аватар для SAM style
    Регистрация
    28.02.2005
    Адрес
    Великий Новгород
    Сообщений
    2,055
    Спасибо Благодарностей отдано 
    10
    Спасибо Благодарностей получено 
    218
    Поблагодарили
    92 сообщений
    Mentioned
    9 Post(s)
    Tagged
    0 Thread(s)
    Все любят гипножабу

  4. #3
    Veteran Аватар для ZXMAK
    Регистрация
    30.01.2006
    Адрес
    Харьков
    Сообщений
    1,404
    Спасибо Благодарностей отдано 
    2
    Спасибо Благодарностей получено 
    19
    Поблагодарили
    13 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Причина - тактирование процессора приостанавливается, если доступ к памяти происходит в определенные моменты времени в область памяти которая шарится между процессором и ula. Самое короткое и не запутанное поведение можешь посмотреть в реализации ULA классов оригинальных спектрумов в zxmak2
    ZXMAK2 - Виртуальная Машина ZX Spectrum https://github.com/zxmak/ZXMAK2 (старая ссылка http://zxmak2.codeplex.com)
    ZXMAK.NET - спектрум на C# http://sourceforge.net/projects/zxmak-dotnet

  5. #4
    Veteran Аватар для Hacker VBI
    Регистрация
    05.03.2013
    Адрес
    г. Канев, Украина
    Сообщений
    1,596
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    3
    Поблагодарили
    2 сообщений
    Mentioned
    7 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    http://zxmak2.codeplex.com/SourceCon...w/22900#391359
    Я вижу, что это связано с обращениями к памяти до #8000, и всё.
    В общем, расположение кода лучше с #8000.

  6. #5
    Member
    Регистрация
    08.01.2012
    Адрес
    г.Винница, Украина
    Сообщений
    65
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

  7. #6
    Veteran Аватар для Hacker VBI
    Регистрация
    05.03.2013
    Адрес
    г. Канев, Украина
    Сообщений
    1,596
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    3
    Поблагодарили
    2 сообщений
    Mentioned
    7 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Спасибо

  8. #7
    Veteran Аватар для ZXMAK
    Регистрация
    30.01.2006
    Адрес
    Харьков
    Сообщений
    1,404
    Спасибо Благодарностей отдано 
    2
    Спасибо Благодарностей получено 
    19
    Поблагодарили
    13 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Hacker VBI Посмотреть сообщение
    http://zxmak2.codeplex.com/SourceCon...w/22900#391359
    Я вижу, что это связано с обращениями к памяти до #8000, и всё.
    В общем, расположение кода лучше с #8000.
    нет, не только, вот ULA от Spectrum128:
    Код:
            protected override void WriteMem4000(ushort addr, byte value)
            {
                contendMemory();
                base.WriteMem4000(addr, value);
            }
    
            protected override void WriteMemC000(ushort addr, byte value)
            {
                if ((m_pageC000 & 1) != 0)
                    contendMemory();
                base.WriteMemC000(addr, value);
            }
    
            protected void ReadMem4000(ushort addr, ref byte value)
            {
                contendMemory();
            }
    
            protected void ReadMemC000(ushort addr, ref byte value)
            {
                if ((m_pageC000 & 1) != 0)
                    contendMemory();
            }
    
            #region The same as 48
    
            private void WritePortAll(ushort addr, byte value, ref bool iorqge)
            {
                contendPortEarly(addr);
                contendPortLate(addr);
                if ((addr & 0x0001) == 0)
                {
                    int frameTact = (int)((CPU.Tact - 2) % FrameTactCount);
                    UpdateState(frameTact);
                    PortFE = value;
                }
            }
    
            private void ReadPortAll(ushort addr, ref byte value, ref bool iorqge)
            {
                contendPortEarly(addr);
                contendPortLate(addr);
                int frameTact = (int)((CPU.Tact - 1) % FrameTactCount);
                base.ReadPortFF(frameTact, ref value);
            }
    тут есть и обращение к портам и к области #4000 и к #C000 (причем в зависимости от замапленой страницы)
    ZXMAK2 - Виртуальная Машина ZX Spectrum https://github.com/zxmak/ZXMAK2 (старая ссылка http://zxmak2.codeplex.com)
    ZXMAK.NET - спектрум на C# http://sourceforge.net/projects/zxmak-dotnet

  9. #8
    Veteran Аватар для Hacker VBI
    Регистрация
    05.03.2013
    Адрес
    г. Канев, Украина
    Сообщений
    1,596
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    3
    Поблагодарили
    2 сообщений
    Mentioned
    7 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Alexander Makeev, вообще некоторая неразбериха, смотрю.
    Первый случай - одновременное обращение к 4000-8000 (видео)
    второй - обращение к 1,3,5,7 страницам

  10. #9
    Master
    Регистрация
    16.09.2005
    Адрес
    Дзержинск (DustCity)
    Сообщений
    919
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    1
    Поблагодарили
    1 сообщение
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Есть два важных момента:
    1. Медленная и быстрая память
    2. Отображение экрана/отображение бордюра

    Тормоза на оригинальных машинах происходят когда отображается экран и идет обращение к медленной памяти. вот тока не помню обращение к 7ffd тоже считается обращению к медленной памяти или нет (вроде да).

    Обращение к медленной памяти - выполнение кода в медленной памяти, команды чтения/записи в область медленной памяти (также и все остальные где используется обращение к памяти - RR(HL), PUSH(если стек в медленной памяти) и т.п.)

    у zx128, zx+2 медленными являются страницы: 1,3,5,7 (быстрые 0,2,4,6)
    у zx+2A, zx+3 медленными являются страницы: 4,6,5,7 (быстрые 0,1,2,3)

    во всех zx с одним окном проецирования страниц память выглядит так:
    #0000-#3FFF страница 0 (перекрытое ПЗУ)
    #4000-#7FFF страница 5
    #8000-#BFFF страница 2
    #C000-#FFFF страница 0

    соответственно:
    #4000-#7FFF - всегда медленная память
    #8000-#BFFF - всегда быстрая память
    #C000-#FFFF - в зависимости от того какая страница туда впечатана

    Про задержки - они разные в зависимости от текущего такта на который попало обращение к медленной памяти и модели:
    http://www.worldofspectrum.org/faq/r...kreference.htm
    Pentagon1024sl2.2/TSFM/Z-Controller/GS128Kb/HDD/CDROM/Palcoder

  11. #10
    Veteran Аватар для ZXMAK
    Регистрация
    30.01.2006
    Адрес
    Харьков
    Сообщений
    1,404
    Спасибо Благодарностей отдано 
    2
    Спасибо Благодарностей получено 
    19
    Поблагодарили
    13 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Смысл задержек - простой, если в момент обращения к медленной памяти юла читает память, то проц тормозится до момента когда юла закончит свои дела, по сути, пока луч летит по экранной области, т.е юла занимает память и проц вынужден ждать. Прикол еще в том что под обращением проца к памяти понимается не только реальное обращение, но и обращение к портам, а также некоторые промежуточные состояния проца, когда он активирует memrq, но rd и wr не активирует, т.е к памяти реально не обращается
    ZXMAK2 - Виртуальная Машина ZX Spectrum https://github.com/zxmak/ZXMAK2 (старая ссылка http://zxmak2.codeplex.com)
    ZXMAK.NET - спектрум на C# http://sourceforge.net/projects/zxmak-dotnet

Страница 1 из 3 123 ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Мега быстрая загрузка с кассеты???
    от ALEXEY.GORDEEV в разделе Софт
    Ответов: 48
    Последнее: 12.05.2021, 01:48
  2. Медленная память
    от Slider в разделе Для начинающих
    Ответов: 5
    Последнее: 28.02.2012, 12:46
  3. Быстрая тригонометрия...
    от ALKO в разделе Программирование
    Ответов: 8
    Последнее: 25.01.2011, 00:29
  4. Ответов: 4
    Последнее: 16.06.2010, 20:37
  5. Contended memory /Медленная память/ на Original Speccy
    от MadCat! в разделе Программирование
    Ответов: 15
    Последнее: 05.03.2005, 11:18

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •