Форум Эму-Россия http://forum.emu-russia.net/ |
|
Эмуляция pipeline в 6502 http://forum.emu-russia.net/viewtopic.php?f=13&t=4458 |
Страница 1 из 1 |
Автор: | Korben [ 16 мар 2013, 20:49 ] |
Заголовок сообщения: | Эмуляция pipeline в 6502 |
Как известно, некоторые инструкциии в 6502 "пайплайновые". При эмуляции по машинным циклам - всё красиво, но при попытке эмулировать по инструкциям можем наткнуться на камень - по количеству циклов инструкция завершилась, но последний такт (как правило, решающий) - не завершен. А хотелось бы иметь два режима эмуляции, с "горячим" переключением между ними: 1. Real-time, с потактовым выполнением; 2. Пошаговый, с выполнением по инструкциям; Что можете посоветовать ? |
Автор: | org [ 18 мар 2013, 10:16 ] |
Заголовок сообщения: | Re: Эмуляция pipeline в 6502 |
Это что за инструкции такие ? У 6502 нет очереди команд. |
Автор: | Korben [ 18 мар 2013, 10:30 ] |
Заголовок сообщения: | Re: Эмуляция pipeline в 6502 |
LDA immediate - хотя команда и 2-тактовая (исполнение следующей начинается ровно после 2 тактов от начала этой), в реальности 3ий такт выполняется при T0 следующей команды. Код: Execution of the instruction takes place during the fetching and decoding of the next instruction. Разве путаю что ? |
Автор: | org [ 18 мар 2013, 11:50 ] |
Заголовок сообщения: | Re: Эмуляция pipeline в 6502 |
Просто каждый такт 6502 состоит из двух полутактов - PHI1 и PHI2, то есть за 1 такт 6502 делает 2 действия. Поэтому чтобы точно эмулировать процессор надо выполнять все инструкции полутактами. |
Автор: | org [ 18 мар 2013, 12:48 ] |
Заголовок сообщения: | Re: Эмуляция pipeline в 6502 |
"Оверлап" у 6502 происходит постоянно, потому что в 1м такте может умещаться Decode предыдущей инструкции и Fetch следующей. Phi1 - Decode Phi2 - Fetch вместо Fetch может быть Read адреса, операндов или других значений. но это никакой не "пайплайн" ![]() |
Автор: | Korben [ 22 мар 2013, 20:31 ] |
Заголовок сообщения: | Re: Эмуляция pipeline в 6502 |
согласен на "оверлап".... тогда просьба знатоков пояснить работу PLA - на вход подается T0..T5 сдвиговым регистром, D0..D7 и PHI1 / PHI2 флип-флопом ? |
Автор: | org [ 22 мар 2013, 22:52 ] |
Заголовок сообщения: | Re: Эмуляция pipeline в 6502 |
пока могу только расписать как обрабатывается эта инструкция внутри 6502. по полутактам пока не готов расписать ![]() первый такт : выборка кода операции потом : S/SB, SB/ADD, ADD/ADL, 0/ADH17, ADH/ABH, ADL/ABL - это равносильно следующему: - поместить регистр S на шину SB - соединить SB с регистром ADD - поместить регистр ADD на ADL эти три шага помещают регистр стека на младшие 8 разрядов шины адреса - команды ADH/ABH и ADL/ABL помещают внутреннюю шину AD на внешнюю шину адреса CPU - 0/ADH17 очищает разряды 1-7 старшей половины, в результате итоговый адрес становится 0x01SS (S - регистр стека) R/W = 1 , то есть читаем по указанному адресу затем : DL/DB, SB/DB, SB/AC то есть прочитанные данные с Data Latch помещаются на шину DB, DB соединяется с шиной SB, а шина SB в конце-концов с регистром A. ну и где-то в промежутке - это инкремент регистра S: S/SB, SB/DB, 0/ADD, DB/ADD, SUMS, I/ADDC ; AC/SB, SB/S то есть в ALU подается регистр S и форсируется флаг переноса, чтобы результат суммы был S + 1. сумма эта потом помещается на шину SB, а с этой шины назад на регистр S. опять же - это только предположение как это работает, на самом деле надо изучать схему ) |
Автор: | Korben [ 22 мар 2013, 23:41 ] |
Заголовок сообщения: | Re: Эмуляция pipeline в 6502 |
спасибо, осилю это - вопросы появятся.....пока немного раскопал PLA, докопаю - буду спрашивать. PLA имелся ввиду 130х21 logic array ) а не одноименная мнемоника, но не суть важно, в любом случае спасибо. |
Автор: | org [ 23 мар 2013, 01:41 ] |
Заголовок сообщения: | Re: Эмуляция pipeline в 6502 |
Ааа )) PLA обычный декодер. на него подается T0 - T5 и код операции (IR) + в инвертированном виде (/IR). проверяет он примерно так: Если ( IR[0] == 1 && IR[1] == 0 && T0 ) то выходная линия = 1. На самом деле вместо IR0/1 проверяется сразу комбинация IR0 | IR1, кроме последней линии. схема тут : http://breaknes.com/files/6502/6502.jpg там не все транзисторы подписаны, но по полисиликоновым проводам понятно что к чему. смысл PLA - выбрать нужную группу из таблицы опкодов, ну или в частном случае - один требуемый код операции. проверяет он это дело по маске вида 0101XX01, где 1 и 0 это понятно, а X - это не имеет значения (0 или 1). если подаваемый код операции на декодер подходит под эту маску, то линия декодера срабатывает. ну и дополнительно проверяется условие T0 - T5, причем не обязательно конкретное значение T (линия может срабатывать на любой такт) |
Автор: | Korben [ 23 мар 2013, 02:01 ] |
Заголовок сообщения: | Re: Эмуляция pipeline в 6502 |
это тоже знакомо, а где там полутакт ? это первый вопрос, но еще сам толком линии не глядел. дальше, гляжу линию CLear Carry Код: бит 10 55 66 22 33 44 77 0|1 2345 PLA 01 00 01 01 10 10 01 010 0000 почему 5ый бит не инвертирован ? -- 23 мар 2013, 11:14 -- ага, попробую сам ответить - там 5 бит маска под лог.AND, сброшен потому, что линия должна срабатывать как для CLC, так и для SEC. Заодно для себя примерно выяснил что за странный такт TX - это тот самый "оверлаповый" такт...Зато появился новый вопрос - что за линии(взял пару для примера): Цитата: G02 92: 000000001010000000100 XXX11XXX T3 RIGHT ODD C13 33: 000000000100000001000 XXXX0XXX T2 LEFT ALL и еще.... вот пример одной из команд Код: Zero Page Addressing (3 cycles) Tn Address Bus Data Bus R/W Comments T0 PC OP CODE 1 Fetch OP CODE T1 PC + 1 ADL 1 Fetch Zero Page Effective Address T2 00, ADL Data 0 Write internal register to memory T0 PC + 2 OP CODE 1 Next Instruction на основе чего процессор выставляет линию R/W ? это "заложенно" в линии ? |
Автор: | org [ 23 мар 2013, 14:03 ] |
Заголовок сообщения: | Re: Эмуляция pipeline в 6502 |
линии RIGHT ODD / LEFT ALL это я так их назвал ) если забить XXX11XXX в мой декодер http://breaknes.com/files/6502/decoder.htm то увидишь что эта линия активна для всех опкодов справа (RIGHT), на четных строках (ODD). такие линии обычно выполняют роль "excluder" -ов, то есть исключают часть ненужных опкодов. контакт R/W выставляется рандомной логикой, на основе целого ряда линий декодера. там есть небольшая схема "RW SELECT". также по время RESET R/W ставится в режим чтения, чтобы не сохранять вектор прерывания в стеке (для RESET это не нужно) CLC/SEC совмещены, потому что в рандомную логику дополнительно подается IR5, то есть 5й разряд кода операции, который позволяет отличить CLC от SEC при их обработке. то же самое с другими командами установки/сброса флагов. |
Автор: | Korben [ 23 мар 2013, 22:10 ] |
Заголовок сообщения: | Re: Эмуляция pipeline в 6502 |
org писал(а): то увидишь что эта линия активна для всех опкодов справа (RIGHT), на четных строках (ODD). такие линии обычно выполняют роль "excluder" -ов, то есть исключают часть ненужных опкодов. а смысл отсекания ? я понимаю выборку по методу адресации к памяти, или исключение "JMP (excluder for C11)", но смысла этих немного не пойму. видел декодер, полезная штука. |
Автор: | org [ 25 мар 2013, 00:38 ] |
Заголовок сообщения: | Re: Эмуляция pipeline в 6502 |
Линии 91 и 92 идут в схему, которая управляет очисткой сдвигового регистра T (счетчик тактов), для длинных инструкций. 92я линия активируется на последнем такте (T3) следующих 4-х тактовых инструкций: ![]() Но так как у нас нет возможности сделать такую хитрую маску, поэтому тупо берутся все опкоды по нечетным линиям ![]() а 91я линия - это последний такт инструкций вида OP ind, Y (они все выполняются 5 тактов) Завершение более длинных инструкций проверяется в специальной схеме - ENDX, которая выдает наружу сигнал для сброса T. И кстати для инструкций, которые выполняются более 6 тактов есть ещё один, встроенный счетчик тактов - T5 и T6, а чтобы декодер разрешил выполнение этих инструкций, в него подается TX, но внутри рандомной логики TX станет либо T5, либо T6. Когда смотришь на результат декодера нужно игнорировать те инструкции, которые короче указанного количества тактов, то есть например CLC никогда не выполнится во время T3, потому что она 2х-тактовая. |
Автор: | Korben [ 25 мар 2013, 04:23 ] |
Заголовок сообщения: | Re: Эмуляция pipeline в 6502 |
ох, вроде и понятно всё, а в то же время сложно для меня это ( попробую всё таки описать микрокодом...не потяну я ПЛА ( |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа [ Летнее время ] |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |