|
nedoPC.orgElectronics hobbyists community established in 2002 |
|
Author |
Message |
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22811 Location: Silicon Valley
|
| | | | Lavr wrote: PS. И я что-то подзабыл, что за трюк у TMS1000 с РС? Кажется кто-то упоминал... но вот не помню... да по мануалу там shift-registr as Program Counter. И есть вот такие упоминания:"I remember the code was split up into 64 byte pages, and used a grey code counter, so the PC ran 0, 1, 3, 7, F, 1F, 3F, 3E, etc." | | | | |
У меня получилось вот так (это неправильный вариант, правильный см. ниже):
#00 #01 #03 #07 #0F #1F #3E #3D #3B #37 #2F #1E #3C #39 #33 #27 #0E #1D #3A #35 #2B #16 #2C #18 #30 #21 #02 #05 #0B #17 #2E #1C #38 #31 #23 #06 #0D #1B #36 #2D #1A #34 #29 #12 #24 #08 #11 #22 #04 #09 #13 #26 #0C #19 #32 #25 #0A #15 #2A #14 #28 #10 #20
Это с помощью LFSR вида x^6 + x^5 + 1:
т.е. это 6-битный сдвиговый регистр, один XOR-гейт и одна инверсия (или 2 XOR-гейта, где второй одной ногой к "1" прицеплен). P.S. Интересно, что такой LFSR обходит по одному разу все ячейки кроме #3F (в которую не заходит вовсе), т.е. факт перепутывания ячеек от разработчика в общем случае можно скрыть, а в его программе команды типа явного перехода на адрес подменять ассемблером во время компиляции P.P.S. т.е. в программе у чувака написано JMP 5, а ассемблер во время компиляции генерирует код #9F (переход в ячейку с адресом #1F) P.P.P.S. это был неправильный вариант, а вот правильный:генерируется чуть более запутанной программкой:
( алгоритм позаимствован из http://blog.kevtris.org/blogfiles/TMSDIS.BAS )
в отличие от первоначального варианта оно обходит все 64 ячейки (#3F добавился перед #3E)
RASM-таблички уже поправлены в соответствии с новой информацией
Last edited by Shaos on 10 May 2013 14:34, edited 6 times in total.
|
07 May 2013 17:06 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
А меня как раз вот эта фича смутила в своё время...
Мы ведь не в первый раз про TMS1000 говорим.
Я прочитал когда - у меня её нативная система команд восторга не вызвала...
А уж необходимость (или возможность) PLA программировать - так и вовсе ввергла
в негатив.
Поэтому я к TMS сейчас вернулся, когда увидел, что на ней можно добиться аналогичного
моей задаче результата...
Послушай...ты про РС понятно всё изложил... но ЗАЧЕМ они ТАК его сделали?
Неужели 6-битный сдвиговый регистр, один XOR-гейт и одна инверсия получаются
проще обычного счетчика?
_________________ iLavr
|
08 May 2013 07:29 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22811 Location: Silicon Valley
|
| | | | Lavr wrote: А меня как раз вот эта фича смутила в своё время... .... Послушай...ты про РС понятно всё изложил... но ЗАЧЕМ они ТАК его сделали? Неужели 6-битный сдвиговый регистр, один XOR-гейт и одна инверсия получаются проще обычного счетчика? | | | | |
Как я чуть позже написал у них не просто XOR, а какие-то многоногие AND-гейты понавешаны, чтобы охватить все 64 ячейки - так что может и не проще счётчика...
|
08 May 2013 07:43 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22811 Location: Silicon Valley
|
Читал википедию, много думал...
По сути счётный триггер (T-триггер), это D-триггер с XOR-гейтом (Q'=Q(+)T), соответственно сдвиговый регистр на 6 битов (6 D-триггеров) с одним XOR-гейтом будет легче счётчика из 6 D-триггеров к каждому из которых прилеплен XOR-гейт...
|
08 May 2013 12:33 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Прочитал патент на калькулятор... мелькнула мысль - вот же забавно будет узнать,
что всю эту тень на плетень с РС, TI развели сугубо для патентной чистоты!
_________________ iLavr
|
08 May 2013 15:33 |
|
|
petrenko
Doomed
Joined: 10 Mar 2012 16:21 Posts: 598 Location: РФ
|
Это довольно распространённый ( ну по крайней мере в те времена ) схемотехнический приём.
Я когда изучал внутреннее устройство 564ик2 - узнал, что "родная"- Экситоновская ИК2 в части счётчика сделана как раз на основе счётчика джонсона из 5 триггеров, а уж потом идёт кодер пяти линий в три бита адреса ( они из ИМС выходят и подаются далее обычно на двухпортовую память, а пять линий управляют выбором одного из пяти семисегментных индикаторов ). В Воронеже вроде бы по другому её делали - не так, как Экситон нарисовал, но это достоверно не выяснено.
|
08 May 2013 15:50 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Ну а почему не поставить просто двоичный счётчик?
Но мне кажется, что счётный триггер ( T-триггер), это D-триггер с обратной связью
с выхода /Q - на D !
Что может быть проще шести таких триггеров (в контексте TMS1000)?
Я даже не знаю...
_________________ iLavr
|
08 May 2013 16:43 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22811 Location: Silicon Valley
|
| | | | Lavr wrote: Ну а почему не поставить просто двоичный счётчик? Но мне кажется, что счётный триггер ( T-триггер), это D-триггер с обратной связью с выхода /Q - на D ! Что может быть проще шести таких триггеров (в контексте TMS1000)? Я даже не знаю... | | | | |
а вообще да - для счётчика вход T то и ненужен - он всегда "1" и XOR-гейт заменяется на инверсию...
|
08 May 2013 19:08 |
|
|
petrenko
Doomed
Joined: 10 Mar 2012 16:21 Posts: 598 Location: РФ
|
Не считаю себя настолько "гуру"( я, не забывайте, всё же самоучка, без образования вообще ), чтобы объяснять гораздо более образованным и опытным людям искусство схемотехники. Но причины для такого схемотехнического решения есть и весьма основательные.
|
09 May 2013 17:32 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
А ты можешь пояснить написанное белым шрифтом подробнее?
Я, честно говоря, в этом не уловил связи ни с хитрым shift-регистром,
ни с шестью счетными триггерами...
_________________ iLavr
|
10 May 2013 10:33 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
| | | | Shaos wrote: | | | | Lavr wrote: PS. И я что-то подзабыл, что за трюк у TMS1000 с РС? Кажется кто-то упоминал... но вот не помню... да по мануалу там shift-registr as Program Counter. И есть вот такие упоминания:"I remember the code was split up into 64 byte pages, and used a grey code counter, so the PC ran 0, 1, 3, 7, F, 1F, 3F, 3E, etc." | | | | |
У меня получилось вот так: #00 #01 #03 #07 #0F #1F #3E #3D #3B #37 #2F #1E #3C #39 #33 #27 #0E #1D #3A #35 #2B #16 #2C #18 #30 #21 #02 #05 #0B #17 #2E #1C #38 #31 #23 #06 #0D #1B #36 #2D #1A #34 #29 #12 #24 #08 #11 #22 #04 #09 #13 #26 #0C #19 #32 #25 #0A #15 #2A #14 #28 #10 #20 Это с помощью LFSR вида x^6 + x^5 + 1: | | | | |
А это не код ли Грея, действительно, как нам с самого начала и сказали?
_________________ iLavr
|
10 May 2013 12:09 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22811 Location: Silicon Valley
|
Нет, там вот это было (ты забыл перенести):
в соответствии с алгоритмом из этой программки получилась такая табличка:
вот моя программка:
в отличие от первоначального варианта оно обходит все 64 ячейки (#3F добавился перед #3E)
P.S. поправил RASM-таблички в соответствии с новой информацией
|
10 May 2013 12:15 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Я вот тут несколько странный код на С обнаружил...
http://mamedev.org/source/src/emu/cpu/tms0980/tms0980.c.html
Похоже на софтверную эмуляцию TMS-процессора.
Там приводится вот такой алгоритм для РС и адреса:
| | | | Code: 626 /* 627 The program counter is implemented using PRNG logic and gets incremented as follows: 628 629 00, 01, 03, 07, 0F, 1F, 3F, 3E, 630 3D, 3B, 37, 2F, 1E, 3C, 39, 33 631 27, 0E, 1D, 3A, 35, 2B, 16, 2C, 632 18, 30, 21, 02, 05, 0B, 17, 2E, 633 1C, 38, 31, 23, 06, 0D, 1B, 36, 634 2D, 1A, 34, 29, 12, 24, 08, 11, 635 22, 04, 09, 13, 26, 0C, 19, 32, 636 25, 0A, 15, 2A, 14, 28, 10, 20 637 638 There is also a strange address (AD) to location (LOC) mapping performed by the 639 tms1000 family. 640 641 From tms1000 family pdf: 642 AD LOC 643 000 000000 003 000011 644 001 000001 004 000100 645 003 000011 00C 001100 646 007 000111 01C 011100 647 00F 001111 03C 111100 648 01F 011111 03F 111111 649 03F 111111 03E 111110 650 03E 111110 039 111001 651 03D 111101 036 110110 652 03B 111011 02E 101110 653 037 110111 01E 011110 654 02F 101111 03D 111101 655 01E 011110 038 111000 656 03C 111100 031 110001 657 039 111001 026 100110 658 033 110011 00E 001110 659 027 100111 01D 011101 660 00E 001110 03B 111011 661 01D 011101 037 110111 662 03A 111010 029 101001 663 035 110101 016 010110 664 02B 101011 02D 101101 665 016 010110 018 011000 666 02C 101100 032 110010 667 018 011000 020 100000 668 030 110000 001 000001 669 021 100001 005 000101 670 002 000010 00B 001011 671 005 000101 014 010100 672 00B 001011 02C 101100 673 017 010111 01F 011111 674 02E 101110 03A 111010 675 01C 011100 030 110000 676 038 111000 021 100001 677 031 110001 006 000110 678 023 100011 00D 001101 679 006 000110 01B 011011 680 00D 001101 034 110100 681 01B 011011 02F 101111 682 036 110110 019 011001 683 02D 101101 035 110101 684 01A 011010 028 101000 685 034 110100 011 010001 686 029 101001 025 100101 687 012 010010 008 001000 688 024 100100 012 010010 689 008 001000 023 100011 690 011 010001 007 000111 691 022 100010 00A 001010 692 004 000100 013 010011 693 009 001001 024 100100 694 013 010011 00F 001111 695 026 100110 01A 011010 696 00C 001100 033 110011 697 019 011001 027 100111 698 032 110010 009 001001 699 025 100101 015 010101 700 00A 001010 02B 101011 701 015 010101 017 010111 702 02A 101010 02A 101010 703 014 010100 010 010000 704 028 101000 022 100010 705 010 010000 000 000000 706 020 100000 002 000010 707 708 The following formula seems to be used to decode a program counter 709 into a rom address: 710 location{5:2} = pc{3:0} 711 location{1:0} = ( pc{5:4} == 00 && pc{0} == 0 ) => 11 712 ( pc{5:4} == 00 && pc{0} == 1 ) => 00 713 ( pc{5:4} == 01 && pc{0} == 0 ) => 00 714 ( pc{5:4} == 01 && pc{0} == 1 ) => 11 715 ( pc{5:4} == 10 && pc{0} == 0 ) => 10 716 ( pc{5:4} == 10 && pc{0} == 1 ) => 01 717 ( pc{5:4} == 11 && pc{0} == 0 ) => 01 718 ( pc{5:4} == 11 && pc{0} == 1 ) => 10 719 720 */ | | | | |
PS. Это код из некоего эмулятора MAME: stands for Multiple Arcade Machine Emulator.
PPS. http://emu-russia.net/ru/files/emus/mame/
_________________ iLavr
|
10 May 2013 13:36 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22811 Location: Silicon Valley
|
внутренний маппинг на самом деле неважен - важен именно внешний, на уровне объектного файла, а его то мы как раз и раскусили уже (как я уже писал таблички для RASM правильные)
|
10 May 2013 14:08 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Похоже, что MAME - Multiple Arcade Machine Emulator - это единственный эмулятор,
способный интерпретировать код TMS1000.
Корме него попадается только артефактный TMS1000 CPU Calculator Emulator in Minecraft.
_________________ iLavr
|
10 May 2013 14:19 |
|
|
Who is online |
Users browsing this forum: No registered users and 2 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
|
|