<< Previous Message Main Index Next Message >>
<< Previous Message in Thread This Month Next Message in Thread >>
Date   : Tue, 20 Sep 1994 16:30:58 WET DST
From   : Bonfield James <jkb@...>
Subject: R65C00 series information

Hello,

Just as people are complaining it's quiet - I happen have some info ready for
mailing. Actually I tried mailing this earlier, but a local mail switch system
was having a few daydreams and seemed to lose the UK. I claim no
responsibility for this info, but I'd be happy to hear if any of it's
incorrect. My primary source is the Rockwell data sheets.

I hope you enjoy it. Some of it's quite scary indeed.

	James

PS. I'll get around to writing some info on the R6522 chip soon I hope.


		 The R65C00 series: R65C02, R65C102, R65C112
		 ==========================================

This has large holes in places, but they're all filled by the advanced user
guide (I hope). The R65C00 series are the Rockwell CMOS chips. The original
6502A (and the R6502) were NMOS chips.


Differences

				R65C02	R65C102	R65C112
Pin compatible with R6502	y	n	n
on chip clock osc.		y	y	n
phases of clock input		2	2	1
Bus enable signal		n	y	y
Memory Lock signal		n	y	y
DMA support			n	y	y

The R6502 would ignore RDY during a write operation. The CMOS ones will stop
the processor during clock 02 if RDY is 'asserted' during a write.

It gets a bit heavy after this, describing pinouts and signal (eg clock)
descriptions.

The software visible differences between CMOS and NMOS chips are:

				NMOS			CMOS

Indexed addressing modes	Extra read of		Extra read of last
across page boundary		invalid address		instruction byte

Execution of invalid opcodes	Some terminate only	All are NOPS
				by reset. Results are
				undefined.

Jump indirect with operand	Page address does not	Incs page addr and
of xxFF.			increment.		takes 1 extra cycle.

Read/modify/write (eg INC)	One read and two	Two read and one 
instructions at effective	write cycles.		write cycle
address.

Decimal flag			Indeterminate after	Set to 0 after reset
				reset			and interrupts.

Flags after decimal operation	Invalid N, V and Z.	Valid flags, but adds
							1 cycle.

Interrupt after fetch of	Interrupt vector is	BRK is executed, then
BRK instruction			loaded. BRK vector is	interrupt is executed.
				ignored.


Instructions

I'll only describe in detail the ones that aren't on the standard 6502A.
See the table below for cycles, length, and addressing mode details.

BBR	Branch on Bit Reset. There are infact 8 opcodes for this, each one
	representing a particular bit. The 'opcode & 7' represents the bit
	number. It takes 2 operands, but the data sheet doesn't say anything
	about these! My plays with the master when writing hackrom showed that
	the order is "BBR1 zp rel". The AUG specifies the length of this
	instruction wrongly.
	Status register : No change

BBS	As for BBR, except a Branch on Bit Set.

BRA	Branch always
	Status register : No change

PHX	Push X register onto stack
	Status register : No change

PHY	Push Y register onto stack
	Status register : No change

PLX	Pull X register from stack
	Status register : N and Z (as PLA)

PLY	Pull Y register from stack
	Status register : N and Z (as PLA)

RMB	Reset Memory Bit. Not listed in AUG at all. Eight opcodes of which the
	bottom three bits encode the bit to reset (clear). Only works in zero
	page addressing mode.
	Status register : No change

SMB	Set Memory Bit. As RMB except to set.

STZ	Store Zero. Writes zero to the effective address.
	Status register : No change

TRB	Test and Reset Bits. With M equal to the address specified in the
	operand, this stores A & M in M.
	Status register : Z set if new M == 0

TSB	Test and Set Bits. Stores A | M in M.
	Status register : Z set if new M == 0


Opcode table

   LSD	0	1	2	3	4	5	6	7
MSD	BRK	ORA			*TSB	ORA	ASL	*RMB0
0	implied	(ind,x)			zp	zp	zp	zp
	1 7	2 6			2 5	2 3	2 5	2 5

	BPL	ORA	*ORA		*TRB	ORA	ASL	*RMB1
1	Rel	(ind),y	(ind)		zp	zp,x	zp,x	zp
	2 2**	2 5*	2 5		2 5	2 4	2 6	2 5

	JSR	AND			BIT	AND	ROL	*RMB2
2	ABS	(ind,x)			zp	zp	zp	zp
	3 6	2 6			2 3	2 3	2 5	2 5

	BMI	AND	*AND		*BIT	AND	ROL	*RMB3
3	rel	(ind),y	(ind)		zp,x	zp,x	zp,x	zp
	2 2**	2 5*	2 5		2 4	2 4	2 6	2 5
	
	RTI	EOR				EOR	LSR	*RMB4
4	implied	(ind,x)				zp	zp	zp	
	1 6	2 6				2 3	2 5	2 5

	BVC	EOR	*EOR			EOR	LSR	*RMB5
5	rel	(ind),y	(ind)			zp,x	zp,x	zp
	2 2**	2 5*	2 5			2 4	2 6	2 5
	
	RTS	ADC			*STZ	ADC	ROR	*RMB6
6	implied	(ind,x)			zp	zp	zp	zp	
	1 6	2 6+			2 3	2 3+	2 5	2 5

	BVS	ADC	*ADC		*STZ	ADC	ROR	*RMB6
7	rel	(ind),y	(ind)		zp,x	zp,x	zp,x	zp
	2 2**	2 5*+	2 5+		2 4	2 4+	2 6	2 5

	*BRA	STA			STY	STA	STX	*SMB0
8	rel	(ind,x)			zp	zp	zp	zp	
	2 3*	2 6			2 3	2 3	2 3	2 5

	BCC	STA	*STA		STY	STA	STX	*SMB1
9	rel	(ind),y	(ind)		zp,x	zp,x	zp,x	zp
	2 2**	2 6	2 5		2 4	2 4	2 4	2 5

	LDY	LDA	LDX		LDY	LDA	LDX	*SMB2
A	imm	(ind,x)	imm		zp	zp	zp	zp	
	2 2	2 6	2 2		2 3	2 3	2 3	2 5

	BCS	LDA	*LDA		LDY	LDA	LDX	*SMB3
B	rel	(ind),y	(ind)		zp,x	zp,x	zp,x	zp
	2 2**	2 5*	2 5		2 4	2 4	2 4	2 5

	CPY	CMP			CPY	CMP	DEC	*SMB4
C	imm	(ind,x)			zp	zp	zp	zp	
	2 2	2 6			2 3	2 3	2 5	2 5

	BNE	CMP	*CMP			CMP	DEC	*SMB5
D	rel	(ind),y	(ind)			zp,x	zp,x	zp
	2 2**	2 5*	2 5			2 4	2 6	2 5

	CPX	SBC			CPX	SBC	INC	*SMB6
E	imm	(ind,x)			zp	zp	zp	zp	
	2 2	2 6+			2 3	2 3+	2 5	2 5

	BEQ	SBC	*SBC			SBC	INC	*SMB7
F	rel	(ind),y	(ind)			zp,x	zp,x	zp
	2 2**	2 5*+	2 5+			2 4+	2 6	2 5


   LSD	8	9	A	B	C	D	E	F
MSD	PHP	ORA	ASL		*TSB	ORA	ASL	*BBR0
0	implied	imm	acc		abs	abs	abs	zp
	1 3	2 2	1 2		3 6	3 4	3 6	3 5**

	CLC	ORA	*INC		*TRB	ORA	ASL	*BBR1
1	impied	abs,y	acc		abs	abs,x	abs,x	zp
	1 2	3 4*	1 2		3 6	3 4*	3 7	3 5**

	PLP	AND	ROL		BIT	AND	ROL	*BBR2
2	implied	imm	acc		abs	abs	abs	zp
	1 4	2 2	1 2		3 4	3 4	3 6	3 5**

	SEC	AND	*DEC		*BIT	AND	ROL	BBR3
3	impied	abs,y	acc		abs,x	abs,x	abs,x	zp
	1 2	3 4*	1 2		3 4*	3 4*	3 7	3 5**

	PHA	EOR	LSR		JMP	EOR	LSR	*BBR4
4	implied	imm	acc		abs	abs	abs	zp
	1 3	2 2	1 2		3 3	3 4	3 6	3 5**	

	CLI	EOR	*PHY			EOR	LSR	*BBR5
5	impied	abs,y	acc			abs,x	abs,x	zp
	1 2	3 4*	1 3			3 4*	3 7	3 5**

	PLA	ADC	ROR		JMP	ADC	ROR	*BBR6
6	implied	imm	acc		(abs)	abs	abs	zp
	1 4	2 2+	1 2		3 6	3 4+	3 6	3 5**	

	SEI	ADC	*PLY		*JMP	ADC	ROR	*BBR7
7	impied	abs,y	implied		(abs,x)	abs,x	abs,x	zp
	1 2	3 4*+	1 4		3 6	3 4*+	3 7	3 5**

	DEY	*BIT	TXA		STY	STA	STX	*BBS0
8	implied	imm	implied		abs	abs	abs	zp
	1 2	2 2	1 2		3 4	3 4	3 4	3 5**	

	TYA	STA	TXS		*STZ	STA	*STZ	*BBS1
9	impied	abs,y	implied		abs	abs,x	abs,x	zp
	1 2	3 5	1 2		3 4	3 5	3 5	3 5**

	TAY	LDA	TAX		LDY	LDA	LDX	*BBS2
A	implied	imm	implied		abs	abs	abs	zp
	1 2	2 2	1 2		3 4	3 4	3 4	3 5**	

	CLV	LDA	TSX		LDY	LDA	LDX	*BBS3
B	impied	abs,y	implied		abs,x	abs,x	abs,y	zp
	1 2	3 4*	1 2		3 4*	3 4*	3 4*	3 5**

	INY	CMP	DEC		CPY	CMP	DEC	*BBS4
C	implied	imm	implied		abs	abs	abs	zp
	1 2	2 2	1 2		3 4	3 4	3 6	3 5**	

	CLD	CMP	*PHX			CMP	DEC	*BBS4
D	impied	abs,y	implied			abs,x	abs,x	zp
	1 2	3 4*	1 3			3 4*	3 7	3 5**

	INX	SBC	NOP		CPX	SBC	INC	*BBS6
E	implied	imm	implied		abs	abs	abs	zp
	1 2	2 2+	1 2		3 4	3 4+	3 6	3 5**	

	SED	SBC	*PLX			SBC	INC	*BBS7
F	impied	abs,y	implied			abs,x	abs,x	zp
	1 2	3 4*+	1 4			3 4*+	3 7	3 5**


*TSB	(* == New) OP Code
zp	Addressing mMde
2 5	Instruction Bytes, Machine Cycles

For "Machine Cycles":				
+   Add 1 in decimal mode			
*   Add 1 if page boundary is crossed
**  Add 2 is branch occurs to different page


Misc
----

The data sheet then goes onto describe the electrical characteristics, which
I'm sure you're not bothered with. Next come the timing diagrams, which are
too hairy to detail here, and of little relevance.

<< Previous Message Main Index Next Message >>
<< Previous Message in Thread This Month Next Message in Thread >>