Pull to refresh
215
Руслан@checkpoint

Old-time Unix hacker

2,1
Rating
193
Subscribers
Send message

Действительно "SALLY 6502C" и "MOS 6502C" это разные микросхемы, хотя я всегда считал из взаимозаменяемыми.

Также пишут что в Apple II ставили MOS 6502, в то время как MOS 6502C это "углубленная и расширенная" версия 6502, в том числе с повышенной производительностью. Вобщем, хрен его знает.

То, что вы описываете, в контексте Apple II - это как пользоваться часами, которые часто перескакивают на полчаса вперёд, и не заметить этого. Весь Apple II целиком синхронизирован потоком инструкций 6502.

Эта фича с параллельной загрузкой инструкций не изменяет время исполнения кода динамически - одна и та же последовательность инструкций всегда даст одно и то же время исполнения. Поэтому достаточно один раз подогнать тайминги в критических участках и всё. Не вижу причин по которым у Вас все должно рассыпаться. :)

SALLY это брендированный для Atari вариант MOS 6502C. Отличие 6502С от 6502 только в том, что в нём добавили ногу HALT для остановки процессора со стороны периферии (ANTIC как раз дергает эту ногу).

что процессор Atari использовал конвейеризацию команд. Но не 6502.

Это фича самого 6502, а не SALLY - что есть только маркировка на корпусе.

Apple II с процессором 6502 построен по другим архитектурным принципам, чем Atari, и там всё обрушилось бы при малейшей асинхронности работы процессора. Там банально биты на диске кодируются продолжительностью машинных команд, не говоря о звуках и прочем.

С чего бы ? Фиксированная (не изменяемая) последовательность инструкций всегда исполняется за одинаковое время. Вы не путайте с out-of-order на современных процессорах, где время исполнения предсказать невозможно. :)

Остановить видеоконтроллер нельзя, так как именно видеоконтроллер обновляет динамическую память. Точнее, если остановить видеоконтроллер, то просто пропадёт содержимое памяти.

Можно. Да, содержимое памяти пропадает, но далеко не сразу, у Вас есть целых 4 мс. Этой фичей пользуются.

Последовательность инструкций, например, TAY TAX занимает 4 такта, то есть 4 микросекунды, что очень легко проверить

Проверить это очень даже не легко! Для этого требуется голая ЭВМ со статической памятью, осциллограф, программатор и куча свободного времени.

Но! Лет 15 назад я гонял на своём Atari 130XE различные тесты и эксперименты (были планы сделать игру). Я экспериментировал с GTIA и ANTIC, с его блокировкой, захватом луча, с недокументированными инструкциями и прочими "демомейкерскими" фишками. В том числе я гонял тесты производительности на длинных циклах из регистровых команд с блокированным ANTIC. На 1.7МГц он выдавал мне более 1000 тыс оп/сек. К сожаланию, видео для Вас я тогда не записал. ;)

А люди, которых вы цитируете, не понимают, о чём пишут.

Очень может быть, но создатели эмуляторов почему-то напрягались и принялись реализовывать всю эту кухню. ;)

Описание работы 6502 по тактам можно прочесть, например, в издававшейся на русском языке книге У. Морера "Язык ассемблера для персонального компьютера Эпл".

Вы уверены в том, что автор этого труда должен был знать о таких подробностях ? Про недокументированные инструкции 6502 он тоже описал в этой книге ?

Описание системы команд 6502 с разбивкой по тактам можно прочесть в руководстве от производителя, PDF есть в свободном доступе. Но там Вы не найдете ни слово про внутренее устройство процессора.

Многие детали работы 6502 начали вскрываться только в 2000-е годы когда народ научился декапить микросхемы и разбирать их потранзисторно. Почитайте Кена Ширриффа, помоему я почерпнул это у него.

Мне бабушка на ДР в 7-м классе подарила МК-85 с настощим Бейсиком! Я его сносил до дыр, ВУЗ с ним закончил.

Да уж, обмен софтом в то время был целым ритуальным действом! У нас в клубе были такие личности которые программированием мало интересовались, зато постоянно тоскали откуда-то новый софт - знакомства, связи... Сейчас наверное уважаемые люди. ;-)

Тут у меня опечатка: IPC = 1 конечно же.

На Apple II две последовательные инструкции могут исполнятся сколько угодно долго, но только не 4 такта, так как обновление экрана и необходимость обновления динамической памяти постоянно тормозят процессор. :-)

Но если абстрагироваться от конкретной машины (или на некоторое время остановить видеоконтроллер на вашем Apple II), то MOS 6502 работал следующим образом: если в последний такт исполнения инструкции не требовалось обращаться к памяти, то он начинал операцию fetch для следующей инструкции вместе с исполнением текущей. Таким образом экономился один так. Иными словами две последовательные 2-х тактовые инструкции (например: TXY и TAX) выполнялись за 3 такта, а не за 4. С этим столкнулись создатели различных эмуляторов 15-20 лет назад когда потребовалось реализовать точную потактовую эмуляцию. Оказалось что это нифига не просто. :)

Я не могу найти для Вас хорошую статью с описанием внутренностей MOS 6502 из-за того что поисковики совсем слились и подсовывают мне ответ невросетей вместо ссылки на статьи. Но вот пара цитат со старых форумов:

The original MOS Technology 6502 microprocessor had limited pipelining, where the fetch of the next opcode could overlap with the final part of the previous instruction, but it was not fully pipelined like more advanced CPUs. This design allowed for some efficiency in instruction processing without the complexities of a complete execution pipeline. https://6502.org/forum/viewtopic.php?t=4923

The internal logic runs at the same speed as the external clock rate. It featured a simple two-stage pipeline; on each cycle, the processor fetches one byte from memory and processes another. https://en.wikipedia.org/wiki/MOS_Technology_6502

Each cpu cycle is broken down into two phases: an operation then a memory access, in that order. If the opcode does not have to access memory on its last cycle, it will pre-fetch the next opcode. This makes some instructions appear to be one cycle shorter than they really are. https://forums.nesdev.org/viewtopic.php?t=6307

У MOS 6502 были зачатки конвейерной обработки: по переднему фронту такта инструкция считывалась из памяти (fetch) во внутренний регистр, по спаду - исполнялась (execute). Таким образом в процессоре на исполнении одновременно находились две инструкции. Если потоком идут двухтактовые инструкции, то они будут загружаться каждый такт, что теоритически могло выдвать IPC = 2. Этот факт упоминает в Википедии, но без разьяснений. Помоему хорощее описание MOS 6502 было в блоге у Кена Шерриффа. Я бы дал ссылку, но к сожалению, Гуглом пользоваться стало соврешенно не возможно, как и найти информацию в сети. :(

В 91-м году видел в магазине Поиск. Один штука. С дисководом и блоком памяти на 512КБ. Лежал он там долго, пока его не купил мой друг, точнее его родители. :-)

Правцы тоже были у нас в клубе, но я про них ничего не знаю, как-то не зацепили. К ним не было никакого софта, ни ассемблера, ни дебаггера. Что с ним делать то ? :)

Спасибо за ссылку. Про пролог на БК ничего не знал, не было его в нашем окружении. :)

Самые быстрые операции 6502 выполняются за 2 такта, поэтому больше 500 тысяч оп/с при тактовой частоте 1 МГц он выполнить никак не может.

Может. Я выше писал как это просиходит.

Графический чип в БК был на базе ПЛИС.

Откуда такая информация ? Скорее всего то была микросхема БМК, они зашиваются на заводе один раз (последним слоем металлизации).

Вот именно эта команда совсем не показатель.

Я согласен, это была такая шутка юмора. :-) Но поверьте, когда рядом стоят БК-0010 и Atari, разница в скороcти исполнения программ видна невооруженным взглядом.

@AlexSpirit все верно говорит. MOS 6502 по переднему фронту читал иструкцию, а по заднему - исполнял её. Поэтому у него имеются инструкции которые выполняются за один такт (более 500 тыс оп/сек на 1 МГц). Но принимать DDR за удвоение частоты я бы не стал. :-)

Да, у MOS 6502 были зачатки конвейеризации: некоторые инструкции завешали исполнение (пересылка из регистра в регистр) и в этот же момент производилась выборка следующей.

В 88-м я хотел cовсем не советский Atari 65XE, но предки денег не давали.

В 1990-92-м годах я уже мечтал о Поиске с флоповодом. Потому что IBM PC/AT стоил дороже Москвича. Но предки дали денег только на "Magic" (клон Спектрума) - зря потраченые деньги. Через 5 лет я слегка подзаработал и собрал себе свой IBM PC на AMD K5. :)

Наверное, самой продвинутой советской ПЭВМ была ДВК-4 с КЦГД, но она была не для рядовых граждан. ДВК-ашками оснащали ВУЗы и прочие проектные институты, там где небыло своего ИВЦ.

УК-НЦ (MC-0511) с флоповодом была интересной машинкой, относительно недорогой. Но я не помню чтобы эти ПЭВМ были в свободной продаже. Их поставляли в школы и Дворцы Пионеров.

До 1990-го года, из доступных (в свободной продаже), ПЭВМ БК-0010 была наверное самая топовая. Если не единственная. :-) Учитывайте, что в СССР был дефицит всего!

У i8080 тоже двухфазное тактирование.

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

Хрен редьки не слаще.

В статье на Википедии есть такая вот спекуляция на эту тему:

Максимальная гарантированная документацией тактовая частота для процессора КР580ВМ80А — 2,5 МГц. Каждая команда выполняется за 1—5 машинных циклов, каждый из которых состоит из 3—5 тактов. Минимальное время выполнения простых регистровых команд — 4 такта. Таким образом общая гарантированная производительность 2,5 МГц / (5 циклов * 5 тактов) равна 100 тысяч операций в секунду, а некая теоретическая максимально расчётная производительность процессора оценивается в 625 тысяч операций в секунду, что приближается к отраженной в документации производительности ЦПУ следующего поколения i8085 — 700 тысяч операций в секунду.

Из которой следует, что теоритический максиммум у КР580ВМ80А был 625 тыс оп/с. Но я отчетливо помню, еще со студенчекого УМК-80, что в спецификации на этот микропроцессор была дана средная производительность в 125 тыс оп/сек при частоте 1 МГц. На MOS 6502 эта же средняя составляет 600 тыс оп/сек на 1 МГц. И это без учета того, что у 6502 есть целая страница памяти из 128 регистров по 16 бит для косвенной адресации, а это сильно увеличивало эффективность программы.

На счет видео на БК. На сколько я помню, там была реализована такая фишка: так как процессор тратил много тактов на свои внутрении нужды, то видео контроллер в это время мог свободно иметь доступ к памяти, раз шина свободна. Была какая-то схема арбитража, которая разносила доступ к памяти от ЦП и видеоконтроллера во времени, что сильно снижало простой ЦП. Поэтому тормоза от видео конечно были, но не такие существенные как на других 8-ми битных ПЭВМ. Да, вывод текста в графическом (по умолчанию) режиме осуществвлялся программно, что сильно замедляло скорость отображения и прокрутки текста.

Тут надо различать "архитектуру" (систему команд) и "микроархитектур" - конкретный способ реализации. Так вот, К1801ВМ1 был однокристальным микропроцессором в котором попытались упихнуть очень сложную арихитектуру PDP-11. За счет чего ? Правильно, за счет микрокода - каждая инструкция состявляет десятки микроинструкций. На всё это тратятся такты процессора со страшной силой.

Еще хочу заметить вот что. В качестве доводов в пользу отечественный решений, в отечетсвенной литературе авторы часто приводят тот факт что К1801ВМ1 был первым в мире микропроцессором с архитектурой PDP-11, и, якобы, даже DEC не смог сделать такое! Так вот, наивно полагать что в DEC работали дураки и не видели такой возможности. Напротив, они всё посчитали и пришли к выводу, что на имеющимся в тот момент уровне технологий производства микросхем, такой вот "микроспроцессор" получится тормозом и просто будет не востребован на рынке. В DEC поступили мудрее, они сделали MicroVAX - микпропроцессор на на одном кристалле, вынеся все сложные PDP-шные инструкции на отдельные кристаллы как доп опции.

Вся эта 16-ти битность на К1801ВМ1 выходила боком. Инструкция записи нуля в 16-ти битовую ячейку по адресу в регистре R1, CLR (R1), исполняется за 30 тактов процессора. И этим всё сказано.

1
23 ...

Information

Rating
1,599-th
Date of birth
Registered
Activity