nedoPC.org

Electronics hobbyists community established in 2002
Atom Feed | View unanswered posts | View active topics It is currently 28 Mar 2024 06:03



Reply to topic  [ 15 posts ] 
6502 растактовка 
Author Message
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Джентельмены, где бы посмотреть внутреннюю растактовку 6502 (или 65С02) согласно его полной
блок-схеме, которую поклонники 6502 считают самой правильной?
Attachment:
6502 gJB7m.gif
6502 gJB7m.gif [ 590.39 KiB | Viewed 14988 times ]

Не такую простую диаграмму, как есть у нас здесь на форуме:
http://www.nedopc.org/forum/viewtopic.php?p=138016#p138016
А более подробную, типа "по переднему фронту Ф1 код операции заносится..." ну и т.д.

Мне казалось, 6502 подробно "разжеван" его поклонниками... но растактовку уже сутки найти не могу... :osad:

_________________
iLavr


19 Oct 2017 04:39
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Так, судя по совпадению названий регистров с блок-схемой, 6502 пилят-пилят, но никак не допилят: 6502_Breaking NES :-?
Quote:
PD : текущее значения кода операции для предекодирования
IR : регистр инструкций (хранит код текущей операции)
X, Y : индексные регистры
S: указатель стека
AI, BI : входные значения для АЛУ
ADD : промежуточный результат операции на АЛУ
AC : аккумулятор
PCH/PCL : program counter, состоящий из 2-х половинок
PCHS/PCLS : вспомогательные регистры program counter (S означает "set" (?))
ABH/ABL : регистры для вывода на внешнюю шину адреса
DL : data latch, хранит последнее прочитанное значение внешней шины данных
DOR : data output register, содержит значение которое будет записано в шину данных
P : регистр флагов, на самом деле состоит из множества разбросанных по схеме защелок

_________________
iLavr


19 Oct 2017 06:40
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Эх и странные мануалы aka даташиты у MOS Technology на свои продукты... :-?

http://6502.org/documents/datasheets/mos/

Может быть они думали:"Еще мы вам за $25 мануалы писать будем..." :osad:

Рядом с ними мануалы на i8080 от Intel и даже описание К580ВМ80А от Кобылинского -
так просто подробнейшие сказки братьев Гримм и баснописца Крылова! :o


P.S. Ну хоть в даташите от Synertek некоторые растактовки есть, хотя не так подробно, как хотелось бы:
http://datasheets.chipdb.org/Synertek/6502.pdf
Хочу вобще потактово посмотреть, как в 6502 используют АЛУ для относительной адресации...
Attachment:
6502branch.jpg
6502branch.jpg [ 56.47 KiB | Viewed 14968 times ]

_________________
iLavr


19 Oct 2017 09:31
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Lavr wrote:
Хочу вобще потактово посмотреть, как в 6502 используют АЛУ для относительной адресации...

Как говорится, "я фигею, дорогая редакция"! :o Эти знающие 6502 и сами задаются таким вопросом: Branch Relative uses ALU?
Bryan Parkoff wrote:
As I said earlier in the previous thread, I questioned if program counter goes to arithmetic logic unit to do increment. They answered no because program counter register has its own increment.

And I have another question. It is the branch relative. Do a byte as branch relative is loaded into data bus from memory location before it is transferred to arithmetic logic unit to do addition?

I wonder if branch relative goes to ALU’s input B register and program counter’s low byte goes to ALU’s input A register through special bus. After addition is performed, the modified program counter’s low byte is transferred back to the program counter’s low byte register from ALU’s output register.

The process will be repeated if page boundary is crossed. The ALU’s input B register is discarded. The program counter’s high byte is transferred to ALU’s input A register. The carry increments or decrements the program counter’s high byte. After addition is performed, the modified program counter’s high byte is transferred back to the program counter’s high byte register from ALU’s output register.


Некоторый скудный материал по этому вопросу есть вот здесь:
Microprocessor Design - Program Counter
Но пока никакой ясности, как же это конкретно делается в 6502... :osad:


P.S. Самое непонятное - откуда взялась эта подробная схема 6502 в старте топика. Все её хвалят,
везде на неё ссылаются, но где ж документ из которого её выдернули!
:o

P.P.S. Ну да, много где упоминается, что эта подробная схема 6502 взята из статьи
некоего Donald F. Hanson-а
"A VHDL Conversion Tool for Logic Equations with Embedded D Latches".
Но откуда её сам этот Donald F. Hanson взял...
:-?

_________________
iLavr


19 Oct 2017 16:03
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Lavr wrote:
Ну да, много где упоминается, что эта подробная схема 6502 взята из статьи
некоего Donald F. Hanson-а
"A VHDL Conversion Tool for Logic Equations with Embedded D Latches".
Но откуда её сам этот Donald F. Hanson взял...
:-?

А сам этот Donald F. Hanson взял эту подробную схему 6502 (вместе с какими-то другими
тайными лицами
) у MOS Technology! :o
Attachment:
6502blockD.gif
6502blockD.gif [ 29.55 KiB | Viewed 14960 times ]

А сама MOS Technology никогда нигде и никому ничего не рассказывает про эту блок-схему 6502.
И во всех даташитах использует упрощенную схему.

Очень познавательно... :-?

_________________
iLavr


19 Oct 2017 17:43
Profile
Senior

Joined: 27 Jul 2015 15:20
Posts: 101
Reply with quote
А это не то? 6502 simulator
И вроде на этом ресурсе всё до транзисторов разобрано и посчитано...


19 Oct 2017 17:54
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
IgorR76 wrote:
И вроде на этом ресурсе всё до транзисторов разобрано и посчитано...

А что у них является источником информации о 6502?
Показываю, прямо по Вашей ссылке:
Attachment:
HansonBlockDiagram.jpg
HansonBlockDiagram.jpg [ 30.68 KiB | Viewed 14954 times ]

- Фотографии кристалла;
- Эта самая диаграмма Hanson-а из начала этого топика;
- Последняя ссылка больше нигде не доступна - но это тоже материалы самодеятельного вскрывателя микросхем.

Где хоть один официальный документ от MOS Technology? :o

Неофициальный сайт http://www.visual6502.org/JSSim/index.html считают самым
надёжным источником информации о 6502 даже на http://6502.org/... :-?
Хотя, казалось бы, должно бы быть наоборот... :ewink:

_________________
iLavr


19 Oct 2017 18:18
Profile
Senior

Joined: 27 Jul 2015 15:20
Posts: 101
Reply with quote
Фотографии кристалла, потранзисторная схема и основанный на ней эмулятор надежнее официального документа от MOS.
"Вам шашечки или ехать?"(с)


19 Oct 2017 18:24
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
IgorR76 wrote:
"Вам шашечки или ехать?"(с)

Мне, конечно же, ехать... но тогда объясните мне согласно вот этой блок-схеме:

Image

Как делается проброс PCH и PCL сквозь АЛУ каждого за 1 такт:

Image

Если 1 такт выглядит вот так:
Image

У меня что-то "шашечки с ехать" не складываются... :-?



P.S. Ссылку на http://visual6502.org/ мы тут видели с 23 июня 2012 года, а может и раньше...
Но к пониманию вопроса в старте топика это пока не приблизило...

_________________
iLavr


19 Oct 2017 18:40
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
В следующем документе - все растактовки команд 6502 :
Attachment:
6502_2.PDF [630.39 KiB]
Downloaded 465 times

Правда, насколько я понял, никакой привязки к limited form of pipelining в документе нет.

Вероятно, следует руководствоваться следующими соображениями:
Quote:
The 6502 has a two-stage "pipeline" for instruction decoding, so the opcode for the next is already fetched in the last cycle of the current instruction.

This is how the 2 cycle variant of branch works:
One cycle for opcode fetch, one cycle to fetch the offset, and if the branch is not taken, then the next opcode is just fetched normally.

For the 3-cycle variant, it's too late to change the next opcode fetch (because it was already scheduled by the "fetch offset" cycle). Also, the offset has to be fed into the ALU to get the next address. So if the branch is taken, you'll have one "empty" memory cycle for the location directly after the branch instruction.

_________________
iLavr


04 Jul 2018 11:08
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Lavr wrote:
В следующем документе - все растактовки команд 6502 :
...
Правда, насколько я понял, никакой привязки к limited form of pipelining в документе нет.

This limited form of pipelining, как ни странно, поясняется на примере в следующем мануале на стр. 54:
http://users.telenet.be/kim1-6502/6502/proman.html --- это описание для KIM-1 & MCS6500
MICROCOMPUTER FAMILY PROGRAMMING MANUAL

Attachment:
6502.GIF
6502.GIF [ 13.97 KiB | Viewed 13301 times ]

"Как ни странно" - потому как у меня этот документ давно есть, но про pipelining почитать не приходилось... :D


P.S. И, кстати говоря, все растактовки команд 6502 есть и в этом документе, также, как: Приложение А.
http://users.telenet.be/kim1-6502/6502/hwman.html#AA

_________________
iLavr


05 Jul 2018 04:46
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Я подумал, что надо бы уже и разобраться с этими Ф0, Ф1 и Ф2...

В общем, согласно всем мануалам и даташитам идея вырисовывается следующая:
Attachment:
f0_f2.gif
f0_f2.gif [ 37.88 KiB | Viewed 13198 times ]

То, что для Intel8080 делает задающий генератор 8224 снаружи - двухтактную последовательность
непересекающихся импульсов
, в микропроцессоре 6502 делается внутри, в результате чего получается,
что внутри он работает как бы на удвоенной частоте.

ВременнЫе интервалы должны быть примерно следующие (по мануалу MCS6500 MICROCOMPUTER FAMILY):
Attachment:
f1_f2_.gif
f1_f2_.gif [ 3.57 KiB | Viewed 13198 times ]
Параметр TD - от 0 (не пересекаются), в большую сторону не нормирован.

И исследователи 6502, разбирая его потранзисторную структуру, пришли к следующей схеме
формирования Ф1 и Ф2 внутри микропроцессора:
Attachment:
6502_clock_internal_logic.jpg
6502_clock_internal_logic.jpg [ 14.74 KiB | Viewed 13198 times ]

Но мне думается, что она переусложнена для повторения на дискретных микросхемах.
Продолжу ниже...

_________________
iLavr


13 Jul 2018 03:03
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Если проанализировать тактовую диаграмму (я взял эту картинку на 6502.org), то логические
соотношения, необходимые для формирования Ф1 и Ф2 довольно неплохо видны:
Attachment:
fh1_fh2.gif
fh1_fh2.gif [ 7.8 KiB | Viewed 13196 times ]

То есть, нам необходима задержанная на некоторый интервал времени последовательность импульсов,
и из неё и входной последовательности импульсов можно сформировать Ф1 и Ф2, используя
логические элементы, избирательно реагирующие на совпадение лог."0" и лог."1".

Я смоделировал это в Proteus следующим образом:
Attachment:
f0_f2_.gif
f0_f2_.gif [ 4.62 KiB | Viewed 13196 times ]

4 элемента 7400 - это даже слишком большая задержка, но сделал так, чтобы хорошо было видно
на виртуальном осциллографе.

В результате получились следующие осциллограммы сигналов:
Attachment:
f0_f2o.gif
f0_f2o.gif [ 3.91 KiB | Viewed 13196 times ]

_________________
iLavr


13 Jul 2018 03:17
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Lavr wrote:
То есть, нам необходима задержанная на некоторый интервал времени последовательность импульсов,
и из неё и входной последовательности импульсов можно сформировать Ф1 и Ф2, используя
логические элементы, избирательно реагирующие на совпадение лог."0" и лог."1".
А мысль совершенно правильная, и не один я к такой мысли пришел... :wink:

Вот, смотрю я в проекте TTL 6502 - yet another project практически идентичное решение:
Attachment:
CLK_Phases_1.jpg
CLK_Phases_1.jpg [ 14.55 KiB | Viewed 13062 times ]

Есть сигнал CLK из него сформирован сигнал DELAYED CLK, из них аналогично формируют PH2.

_________________
iLavr


22 Jul 2018 06:37
Profile
Junior

Joined: 16 Jan 2022 14:49
Posts: 1
Reply with quote
Привет! Мы тут смастерили симулятор 6502:

https://github.com/emu-russia/breaks/releases/tag/breaks-debug-14

Он умеет генерировать Markdown с веселыми картинками:

https://github.com/emu-russia/breaks/blob/master/BreakingNESWiki/6502/ops/A2.md

Думаю это сполна удовлетворит ваше любопытство :)

Хотя нижняя часть ещё не очень хорошо понимает что говорит верхняя, но для анализа этого достаточно,
т.к. все команды для нижней части генерируются как следует.

По поводу PHI1/PHI2. Всё уже раскопано, тут:
https://github.com/emu-russia/breaks/blob/master/BreakingNESWiki/6502/clock.md

PHI1/PHI2 сделаны таким образом, чтобы не налезать друг на друга.
Знатоки говорят что это был распространенный приём во времена винтажных чипов,
как один из приемов "стабилизации" схемы.
То есть в её работе были маленькие промежутки, когда не было ни PHI1, ни PHI2.


16 Jan 2022 15:07
Profile
Display posts from previous:  Sort by  
Reply to topic   [ 15 posts ] 

Who is online

Users browsing this forum: No registered users and 5 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software.