nedoPC.org

Community of electronics hobbyists established in 2002

...
Atom Feed | View unanswered posts | View active topics It is currently 18 Oct 2019 22:11



Reply to topic  [ 80 posts ]  Go to page 1, 2, 3, 4, 5, 6  Next
6502 
Author Message
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 18032
Location: Colorado
Reply with quote
Mежду тем легендарный MOS 6502 до сих пор продаётся :)
Attachment:
43191.jpg
43191.jpg [ 3.76 KiB | Viewed 7790 times ]
MPU R6500 CISC 8-Bit 1MHz 40-Pin CDIP

На http://www.jameco.com его можно приобресть за:
6502 1x$5.95 10x$5.49
65C02 1x$5.95 10x$5.49 (у CMOS версии расширенный набор команд и несколько "исправлений" оригинального поведения)
а также там есть 6522 (интерфейсный адаптер за $6), 6532 (озу ио таймер за $8), 6551 (асинхронный последовательный интерфейс за $4)


P.S. вчера наткнулся на страничку где чувак рассказывает как на мелкой логике построил аналог 6502 :)
http://www.6502.org/users/dieter/m02/m02.htm

_________________
:eugeek: https://twitter.com/Shaos1973


Last edited by Shaos on 13 Sep 2011 07:28, edited 1 time in total.



22 Nov 2009 10:48
Profile WWW
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 18032
Location: Colorado
Reply with quote
Post 
Вчера пришёл новый каталог от Jameco а там - реклама НОВОГО (!) WDC65С02 в DIP-40 и частотой 14 МГц (!) за $7.95!!!
Attachment:
WDC_W65C02sp.gif
WDC_W65C02sp.gif [ 39.93 KiB | Viewed 7789 times ]

А также есть 16-битный микроконтроллер WDC65С265 в PLCC и пара периферийных микросхем из той же серии.
Attachment:
W65C265S8PLG-8_lg.gif
W65C265S8PLG-8_lg.gif [ 25.49 KiB | Viewed 7786 times ]

Всё новое и даже RoHS (лужение без свинца)! :o

_________________
:eugeek: https://twitter.com/Shaos1973


04 Jan 2012 22:09
Profile WWW
Banned
User avatar

Joined: 20 Mar 2005 14:41
Posts: 2150
Location: От туда
Reply with quote
Post 
Новое - это хорошо забытое старое.


04 Jan 2012 23:46
Profile
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 18032
Location: Colorado
Reply with quote
Post 
HardWareMan wrote:
Новое - это хорошо забытое старое.


Ну это как бы не забытое, а заново воссозданное старое ;)
http://www.westerndesigncenter.com/wdc/w65c02s-chip.cfm
http://www.westerndesigncenter.com/wdc/ ... s-chip.cfm

_________________
:eugeek: https://twitter.com/Shaos1973


05 Jan 2012 15:26
Profile WWW
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
Post 
To HardWareMan:

Хардыч, ты вот тут ссылку давал на доки по 6502...



Поясни, как он работает с регистрами X и Y?
Я почему-то заблуждался, что они аналогичны IX и IY у Z80, но оказалсь, что это не так. :-?

Тем не менее, они названы и на блок-схеме индексными.
Как 6502 имеет доступ ко всей памяти через 8-разрядные индексные регистры ?


02 Apr 2012 15:59
Profile
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 18032
Location: Colorado
Reply with quote
Post 
Вот собственно оригинальная система команд 6502:

 6502 CPU Instruction Set Summary
Code:
----------------------------------------------------------------
|                                                              |
|                                                              |
|                           Rockwell                           |
|                                                              |
|              666     5555555     000      22222              |
|             6        5          0   0    2     2             |
|            6         5         0   0 0        2              |
|            666666    555555    0  0  0     222               |
|            6     6         5   0 0   0    2                  |
|            6     6         5    0   0    2                   |
|             66666    555555      000     2222222             |
|                                                              |
|         6502 MICROPROCESSOR Instruction Set Summary          |
|                                                              |
|                                                              |                                                              |
|                                                              |
|                                                              |
|                    _________    _________                    |
|                  _|         \__/         |_  ___             |
|             Vss |_|1                   40|_| RES <--         |
|                  _|                      |_                  |
|         --> RDY |_|2                   39|_| CLK2 -->        |
|                  _|                      |_                  |
|        <-- CLK1 |_|3                   38|_| NC              |
|             ___  _|                      |_                  |
|         --> IRQ |_|4                   37|_| CLK0 <--        |
|                  _|                      |_                  |
|              NC |_|5                   36|_| NC              |
|             ___  _|                      |_                  |
|         --> NMI |_|6                   35|_| NC              |
|                  _|                      |_    _             |
|        --> SYNC |_|7                   34|_| R/W -->         |
|                  _|                      |_                  |
|             Vcc |_|8                   33|_| DB7 <-->        |
|                  _|                      |_                  |
|          <-- A0 |_|9                   32|_| DB6 <-->        |
|                  _|                      |_                  |
|          <-- A1 |_|10       6502       31|_| DB5 <-->        |
|                  _|                      |_                  |
|          <-- A2 |_|11                  30|_| DB4 <-->        |
|                  _|                      |_                  |
|          <-- A3 |_|12                  29|_| DB3 <-->        |
|                  _|                      |_                  |
|          <-- A4 |_|13                  28|_| DB2 <-->        |
|                  _|                      |_                  |
|          <-- A5 |_|14                  27|_| DB1 <-->        |
|                  _|                      |_                  |
|          <-- A6 |_|15                  26|_| DB0 <-->        |
|                  _|                      |_                  |
|          <-- A7 |_|16                  25|_| A15 -->         |
|                  _|                      |_                  |
|          <-- A8 |_|17                  24|_| A14 -->         |
|                  _|                      |_                  |
|          <-- A9 |_|18                  23|_| A13 -->         |
|                  _|                      |_                  |
|         <-- A10 |_|19                  22|_| A12 -->         |
|                  _|                      |_                  |
|         <-- A11 |_|20                  21|_| Vss             |
|                   |______________________|                   |
|                                                              |
|                                                              |
|                                                              |
|                                                              |
|                                                              |
|                                                              |
|Written by     Jonathan Bowen                                 |
|               Programming Research Group                     |
|               Oxford University Computing Laboratory         |
|               8-11 Keble Road                                |
|               Oxford OX1 3QD                                 |
|               England                                        |
|                                                              |
|               Tel +44-865-273840                             |
|                                                              |
|Created        September 1981                                 |
|Updated        April 1985                                     |
|Issue          1.5                Copyright (C) J.P.Bowen 1985|
----------------------------------------------------------------
----------------------------------------------------------------
|Mnem.|Op|NVBDIZC|A#ZBIRX@|~|Description           |Notes      |
|-----+--+-------+--------+-+----------------------+-----------|
|ADC s|6D|**---**| XxX  X |4|Add with Carry        |A=A+s+C   %|
|AND s|2D|*----*-| XxX  X |4|Logical AND           |A=A&s     %|
|ASL d|0E|*----**|  xx    |6|Arithmetic Shift Left |d={C,d,0}<-|
|ASLA |0A|*----**|X       |2|Arithmetic Shift Left |A={C,d,0}<-|
|BCC a|90|-------|     X  |2|Branch if Carry Clear |If C=0(4~)%|
|BCS a|B0|-------|     X  |2|Branch if Carry Set   |If C=1(4~)%|
|BEQ a|F0|-------|     X  |2|Branch if Equal       |If Z=1(4~)%|
|BIT s|2C|**---*-|  **    |4|Bit Test              |A&s        |
|BMI a|30|-------|     X  |2|Branch if Minus       |If N=1(4~)%|
|BNE a|D0|-------|     X  |2|Branch if Not Equal   |If Z=0(4~)%|
|BPL a|10|-------|     X  |2|Branch if Plus        |If N=0(4~)%|
|BRK  |00|--+-1--|    X   |7|Break  (-[S]={PC+2,P})|PC=[FFFEH] |
|BVC a|50|-------|     X  |2|Branch if Overflow Clr|If V=0(4~)%|
|BVS a|70|-------|     X  |2|Branch if Overflow Set|If V=1(4~)%|
|CLC  |18|------0|    X   |2|Clear Carry flag      |C=0        |
|CLD  |D8|---0---|    X   |2|Clear Decimal mode    |D=0        |
|CLI  |58|----0--|    X   |2|Clear Int. disable    |I=0        |
|CLV  |B8|-0-----|    X   |2|Clear Overflow flag   |V=0        |
|CMP s|CD|*----**| XxX  X |4|Compare               |A-s        |
|CPX s|EC|*----**| X**    |4|Compare index register|X-s        |
|CPY s|CC|*----**| X**    |4|Compare index register|Y-s        |
|DEC d|CE|*----*-|  xx    |6|Decrement             |d=d-1      |
|DEX  |CA|*----*-|    X   |2|Decrement index reg.  |X=X-1      |
|DEY  |88|*----*-|    X   |2|Decrement index reg.  |Y=Y-1      |
|EOR s|4D|*----*-| XxX  X |4|Logical Exclusive OR  |A=Axs     %|
|INC d|EE|*----*-|  xx    |6|Increment             |d=d+1      |
|INX  |E8|*----*-|    X   |2|Increment index reg.  |X=X+1      |
|INY  |C8|*----*-|    X   |2|Increment index reg.  |Y=Y+1      |
|JMP s|4C|-------|   *   X|3|Jump                  |          !|
|JSR s|20|-------|   *    |6|Jump to Subroutine    |-[S]=PC+2,!|
|LDA s|AD|*----*-| XxX  X |4|Load Accumulator      |A=s       %|
|LDX s|AE|*----*-| Xyy    |4|Load index register   |X=s       %|
|LDY s|AC|*----*-| Xxx    |4|Load index register   |Y=s       %|
|LSR d|4E|0----**|  xx    |6|Logical Shift Right   |d=->{0,d,C}|
|LSRA |4A|0----**|X       |2|Logical Shift Right   |A=->{0,A,C}|
|NOP  |EA|-------|    X   |2|No Operation          |           |
|ORA s|0D|*----*-| XxX  X |4|Logical Inclusive OR  |A=Avs      |
|PHA  |48|-------|    X   |3|Push Accumulator      |-[S]=A     |
|PHP  |08|-------|    X   |3|Push status register  |-[S]=P     |
|PLA  |68|-------|    X   |4|Pull Accumulator      |A=[S]+     |
|PLP  |28|*******|    X   |4|Pull Status Register  |P=[S]+     |
|ROL d|2E|*----**|  xx    |6|Rotate Left           |d={C,d}<-  |
|ROLA |2A|*----**|X       |2|Rotate Left Acc.      |A={C,A}<-  |
|ROR d|6E|*----**|  xx    |6|Rotate Right          |d=->{C,d}  |
|RORA |6A|*----**|X       |2|Rotate Right Acc.     |A=->{C,A}  |
|RTI  |40|*******|    X   |6|Return from Interrupt |{PC,P}=[S]+|
|RTS  |60|-------|    X   |6|Return from Subroutine|PC={[S]+}+1|
|SBC s|ED|*----**| XxX  X |4|Subtract with Carry   |A=A-s-C   %|
|SEC  |38|------1|    X   |2|Set Carry flag        |C=1        |
|SED  |F8|---1---|    X   |2|Set Decimal mode      |D=1        |
|SEI  |78|----1--|    X   |2|Set Interrupt disable |I=1        |
|STA d|8D|-------|  xX  X |4|Store Accumulator     |d=A        |
|STX d|8E|-------|  y*    |4|Store index register  |d=X        |
|STY d|8C|-------|  x*    |4|Store index register  |d=Y        |
|TAX  |AA|*----*-|    X   |2|Transfer Accumulator  |X=A        |
|TAY  |A8|*----*-|    X   |2|Transfer Accumulator  |Y=A        |
|TSX  |BA|*----*-|    X   |2|Transfer Stack pointer|X=S        |
|TXA  |8A|*----*-|    X   |2|Transfer index reg.   |A=X        |
|TXS  |9A|-------|    X   |2|Transfer index reg.   |S=X        |
|TYA  |98|*----*-|    X   |2|Transfer index reg.   |A=Y        |
|-----+--+-------+--------+-+----------------------------------|
|     |XX|       |        |X|Hexadecimal opcode/no. of cycles  |
|--------+-------+--------+-+----------------------------------|
|        |-      |        | |Flag unaffected                   |
|        |*      |        | |Flag affected                     |
|        |0      |        | |Flag reset                        |
|        |1      |        | |Flag set                          |
|        |+      |        | |Flag set on stack                 |
|--------+-------+--------+-+----------------------------------|
| N      |N      |        | |Negative status (Bit 7)           |
| V      | V     |        | |Overflow status (Bit 6)           |
| B      |  B    |        | |Break command indicator (Bit 4)   |
| D      |   D   |        | |Decimal mode control (Bit 3)      |
| I      |    I  |        | |Interrupt disable control (Bit 2) |
| Z      |     Z |        | |Zero status (Bit 1)               |
| C      |      C|        | |Carry status (Bit 0)              |
----------------------------------------------------------------
----------------------------------------------------------------
|Mnemonic        |A#ZBIRX@|Description             |Opcode| ~s |
|----------------+--------+------------------------+------+----|
|                |X       |All mode(s) valid       |      |    |
|                |*       |Non-indexed mode valid  |      |    |
|                |x       |X/non-indexed mode valid|      |    |
|                |y       |Y/non-indexed mode valid|      |    |
|----------------+--------+------------------------+------+----|
|                |        |Add XXH to opcode       | +XXH |    |
|                |        |Subtract XXH from opcode| -XXH |    |
|                |        |Add X to no. of cycles  |      | +X |
|                |        |Subtract X from cycles  |      | -X |
|----------------+--------+------------------------+------+----|
| A              |A       |Accumulator             |      |    |
| #n             | #      |Immediate               | -04H | -2 |
| <n             |  *     |Zero page               | -08H | -1 |
| n              |  *     |Zero page (DIRECT mode) | -08H | -1 |
| n,X            |  x     |Zero page indexed (X)   | +08H | +0 |
| n,Y            |  y     |Zero Page indexed (Y)   | +08H | +0 |
| >nn            |   *    |Absolute                | +00H | +0 |
| nn             |   *    |Absolute (EXTEND mode)  | +00H | +0 |
| nn,X           |   x    |Absolute indexed (X)    | +10H | +0 |
| nn,Y           |   y    |Absolute indexed (Y)    | +0CH | +0 |
| LDX nn,Y       |   y    | ditto                  | +10H | +0 |
|                |    I   |Implicit                |      |    |
| a              |     R  |Relative(PC=PC+1+offset)|      | +2 |
| [nn,X]         |      x |Indexed indirect (X)    | -0CH | +2 |
| [nn],Y         |      y |Indirect indexed (Y)    | +04H | +1 |
| [nn]           |       @|Absolute indirect       | +20H | +2 |
|-------------------------+------------------------------------|
|BYTE     n(,...)         |Byte(s) (8-bit)                     |
|BYTE     'string'(,...)  |Byte text string(s)                 |
|DIRECT                   |Zero page addressing mode           |
|EXTEND                   |Absolute addressing mode            |
|RMB      nn(,...)        |Reserve Memory Bytes                |
|WORD     nn(,...)        |Word(s) (16-bit)                    |
|-------------------------+------------------------------------|
| A                       |Accumulator (8-bit)                 |
| P                       |Processor status register (8-bit)   |
| PC                      |Program Counter (16-bit)            |
| S                       |Stack pointer (9-bit, MSB=1)        |
| X                       |Index register X (8-bit)            |
| Y                       |Index register Y (8-bit)            |
|-------------------------+------------------------------------|
| a                       |Relative address (-128 to +127)     |
| d                       |Destination                         |
| n                       |8-bit expression (0 to 255)         |
| nn                      |16-bit expression (0 to 65535)      |
| s                       |Source                              |
| string                  |String of ASCII characters          |
|-------------------------+------------------------------------|
| +                       |Arithmetic addition                 |
| -                       |Arithmetic subtraction              |
| *                       |Arithmetic multiplication           |
| /                       |Arithmetic division                 |
| &                       |Logical AND                         |
| ~                       |Logical NOT                         |
| v                       |Logical inclusive OR                |
| x                       |Logical exclusive OR                |
| <-                      |Rotate left                         |
| ->                      |Rotate right                        |
| [ ]                     |Indirect addressing                 |
| [ ]+                    |Indirect addressing, auto-increment |
| -[ ]                    |Auto-decrement, indirect addressing |
| { }                     |Combination of operands             |
| $                       |Program counter content             |
| %                       |~s = ~s+1 if crossing page boundary |
| !                       |PC = effective address of source    |
| -->                     |Input pin                           |
| <--                     |Output pin                          |
| <-->                    |Input/output pin                    |
|-------------------------+------------------------------------|
|0000H to 00FFH           |Page 0 (see zero page addressing)   |
|0100H to 01FFH           |Page 1 (stack area, 01FFH = start)  |
|XX00H to XXFFH           |Page n (where n=XXH)                |
|FFFAH to FFFBH           |Non maskable interrupt (NMI) vector |
|FFFCH to FFFDH           |Reset (RES) vector                  |
|FFFEH to FFFFH           |Interrupt Request (IRQ) vector      |
|FFFEH to FFFFH           |Break command vector (see BRK)      |
----------------------------------------------------------------


8-битные ндексные регистры используются как смещение от произвольного фиксированного адреса (16-битного либо 8-битного в пределах нулевой страницы):

http://en.wikibooks.org/wiki/6502_Assembly

_________________
:eugeek: https://twitter.com/Shaos1973


02 Apr 2012 18:11
Profile WWW
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
Post 
Shaos wrote:
Вот собственно оригинальная система команд 6502:
...
8-битные индексные регистры используются как смещение от произвольного фиксированного адреса (16-битного либо 8-битного в пределах нулевой страницы)


А как это получается аппаратно? Хотя бы в рамках блок-схемы?
Или на ней что-то скрыто или опущено?
Какой регистр у них базовый - относительно которого они приплюсовываются
как смещения?

_________________
iLavr


02 Apr 2012 18:38
Profile
Retired
User avatar

Joined: 25 Jul 2011 01:14
Posts: 1334
Location: WWW
Reply with quote
Post 
(X)->PCL
(X+1)->PCH
X=00h-0FFh

X/Y<->PCL/PCH<->INPUT DATA LATCH :-?

Отец, не вводи людей в заблуждение.
http://6502.org/tutorials/6502opcodes.html


02 Apr 2012 19:08
Profile
Banned
User avatar

Joined: 20 Mar 2005 14:41
Posts: 2150
Location: От туда
Reply with quote
Post 
Тут зависит от адресации же. Если ZP, то и X и Y простое беззнаковое (получаемые адреса будут от 0000 до 00FF). Если смещение, тогда число со знаком (-128+127) от базы, которая задается адресацией. Например, ($AA),Y означает что база хранится в нулевой странице, она считывается (два байта) и потом к ней приплюсовывется смещение Y.

Image

Image

Image

А вообще, я давал ссылку, там есть пузатый PDF (mcs6500_family_programming_manual.pdf) с MOS на титульнике, там все адресации и растактовки при их исполнении даны, курите бамбук, школота.


02 Apr 2012 21:24
Profile
Retired
User avatar

Joined: 25 Jul 2011 01:14
Posts: 1334
Location: WWW
Reply with quote
Post 
Quote:
Например, ($AA),Y означает что база хранится в нулевой странице, она считывается (два байта) и потом к ней приплюсовывется смещение Y.


($AA,X) я вот такой вариант имел ввиду


02 Apr 2012 23:06
Profile
Doomed

Joined: 26 May 2003 07:57
Posts: 633
Reply with quote
Post 
Lavr wrote:
Какой регистр у них базовый - относительно которого они приплюсовываются как смещения?

Судя по блок-схеме, адрес выдаётся через DL (input data latch) и ALU. Если адрес вычисляется 16-ти битный, то логично было бы, чтобы младший байт вычислился сначала (при помощи ALU) и сохранился бы в DL, а старший - на след. такте, и выдавался бы сразу из ALU. А для 8-ми битного адреса (из zero page) наверное наоборот: младший байт выдаётся через ALU. Например когда из ZP грузится 16-битный адрес, младший байт сохраняется в DL, затем старший в ALU.

_________________
Страничка эмулятора наших компьютеров
http://bashkiria-2m.narod.ru/


02 Apr 2012 23:34
Profile WWW
Banned
User avatar

Joined: 20 Mar 2005 14:41
Posts: 2150
Location: От туда
Reply with quote
Post 
MC68k wrote:
Quote:
Например, ($AA),Y означает что база хранится в нулевой странице, она считывается (два байта) и потом к ней приплюсовывется смещение Y.

($AA,X) я вот такой вариант имел ввиду

Опять же:

Image

Image

Из зеропэйджа. Прочитайте уже мануальчик то. :3

PS Обращаю ваше внимание на то, что на самом деле регистры X и Y не равноправны. Некоторые виды индексации (мой предыдущий пост) доступны только для Y, а некоторые (этот пост) только для X. Стало быть, они имеют разные схемы управления.
Shaos wrote:
Code:
| [nn,X]         |      x |Indexed indirect (X)    | -0CH | +2 |
| [nn],Y         |      y |Indirect indexed (Y)    | +04H | +1 |


Last edited by HardWareMan on 03 Apr 2012 03:54, edited 1 time in total.



03 Apr 2012 02:02
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
Post 
HardWareMan wrote:
А вообще, я давал ссылку, там есть пузатый PDF (mcs6500_family_programming_manual.pdf) с MOS на титульнике, там все адресации и растактовки при их исполнении даны, курите бамбук, школота.

А я скачал.. даж поблагодарил.. даже с MOS на титульнике... :wink:

А прицеливаюсь я что-либо из схемотехники у них позаимствовать для своего 4-bit CPU.

Для заявленных целей мне явно не хватает инструкции типа PCHL,
либо косвенного перехода по адресу из ячейки памяти...

Перебирать массивы преходов по адресу с голыми JUMP и CALL-RET пока крайне
неудобно и неуклюже вырисовывается.

_________________
iLavr


03 Apr 2012 14:57
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
Интересная страничка Хабара, посвященная Atari 2600.
Quote:
По внешнему виду приставка напоминает древний абонентский громкоговоритель. Деревянная вставка — это в действительности крашенная пластмасса. В отличии от современных приставок, кнопки START и SELECT расположены на корпусе. Помимо джойстиков, в комплекте с приставкой продавались контроллеры Paddle. Это вращающаяся ручка, позволяющая плавно перемещать игрока по одной оси и кнопка огонь.


Image

Quote:
Разберем Атари 2600 и посмотрим, что то же такого сделали разработчики за 2 года и 100.000.000$? Плата содержит всего 3 микросхемы: процессор MOS Technology 6507, микрсхемы TIA и RIOT.


Image

Приставка рассмотрена на страничке весьма подробно, до уровня принципиальных схем, если у кого есть интерес...

_________________
iLavr


26 May 2012 04:25
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
Post 
Хардыч, а ты не мог бы привести какой-либо толковый и небольшой пример
(или ссылку на него) как 6502 использует свою нулевую страницу в качестве
аналогов регистров
(ну так пишут)?
И как он адресуется к старшим адресам?

Ну имеется ввиду пример на ассме, конечно...

А то мне, привыкшему к i8080, как-то несподручным этот механизм 6502
представляется.

_________________
iLavr


22 Jun 2012 15:04
Profile
Display posts from previous:  Sort by  
Reply to topic   [ 80 posts ]  Go to page 1, 2, 3, 4, 5, 6  Next

Who is online

Users browsing this forum: No registered users and 1 guest


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:  
cron
Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software.