I am new to this forum, new to the 6502 processor, this is my first post in the forum, and it is directly my first question.
After reading some blogposts, such as,
- http://www.grappendorf.net/projects/650 ... essor.html,
- https://coronax.wordpress.com/2012/11/1 ... n-circles/,
- http://www.plingboot.com/2015/10/homebrew-6502-part-2/, etc.
However, I am wondering a bit about the values that I read from the address lines. I am especially wondering about three things:
- When reset, should I not see $FFFC and $FFFD on the address lines?
The Western Design Center Manual says:As you can see on my log below, I see something like $FC in both resets but not a consecutive $FFFC and $FFFD as expected. Additionally, I cannot see those seven clock cycles before "counting" on the address lines starts.Quote:When a positive edge is detected, there will be a reset sequence lasting seven clock cycles. The program counter is loaded with the reset vector from locations FFFC (low byte) and FFFD (high byte). - Why are some addresses left out?
As you can see in the log below, there is for example a jump from `0xEB 0x0` to `0xEB 0x2`, one from `0xEB 0x2` to `0xEB 0x4`, etc.
I would have expected something like `0xEB 0x0` to `0xEB 0x1` to `0xEB 0x2` to `0xEB 0x3` to `0xEB 0x4`, etc. - Why are some of the addresses there for more than a clock cycle?
For example, in the log below, `0xEB 0xA` is read 9 times in a row, `0xEB 0x14` is read 8 times in a row, etc.
I would have expected each number to appear once per clock cycle.
In the following is an excerpt from a log of the address lines with my comments after the `<--` arrow on the right hand side.
Code: Select all
00000000 00000000 : 0x0 0x0 RWB: 1 SYNC: 1
00000000 00000000 : 0x0 0x0 RWB: 1 SYNC: 1
00000000 00000000 : 0x0 0x0 RWB: 1 SYNC: 1
00000000 00000000 : 0x0 0x0 RWB: 1 SYNC: 1
00000000 00000000 : 0x0 0x0 RWB: 1 SYNC: 1
00000000 00000000 : 0x0 0x0 RWB: 1 SYNC: 1
00000000 00000000 : 0x0 0x0 RWB: 1 SYNC: 1
00000000 00000000 : 0x0 0x0 RWB: 1 SYNC: 1
00000000 00000000 : 0x0 0x0 RWB: 1 SYNC: 1
11111111 11101010 : 0xFF 0xEA RWB: 1 SYNC: 0 <-- First reset
11111111 11101010 : 0xFF 0xEA RWB: 1 SYNC: 0
00000001 11111100 : 0x1 0xFC RWB: 1 SYNC: 0
11101010 11110000 : 0xEA 0xF0 RWB: 1 SYNC: 0
11101010 11110101 : 0xEA 0xF5 RWB: 1 SYNC: 0
11101010 11111010 : 0xEA 0xFA RWB: 1 SYNC: 0
11101010 11111111 : 0xEA 0xFF RWB: 1 SYNC: 0
11101011 00000000 : 0xEB 0x0 RWB: 1 SYNC: 0
11101011 00000000 : 0xEB 0x0 RWB: 1 SYNC: 0
11101011 00000000 : 0xEB 0x0 RWB: 1 SYNC: 0
11101011 00000000 : 0xEB 0x0 RWB: 1 SYNC: 0
11101011 00000010 : 0xEB 0x2 RWB: 1 SYNC: 0
11101011 00000100 : 0xEB 0x4 RWB: 1 SYNC: 0
11101011 00000110 : 0xEB 0x6 RWB: 1 SYNC: 0
11101011 00001000 : 0xEB 0x8 RWB: 1 SYNC: 0
11101011 00001010 : 0xEB 0xA RWB: 1 SYNC: 0
11101011 00001010 : 0xEB 0xA RWB: 1 SYNC: 0
11101011 00001010 : 0xEB 0xA RWB: 1 SYNC: 0
11101011 00001010 : 0xEB 0xA RWB: 1 SYNC: 0
11101011 00001010 : 0xEB 0xA RWB: 1 SYNC: 0
11101011 00001010 : 0xEB 0xA RWB: 1 SYNC: 0
11101011 00001010 : 0xEB 0xA RWB: 1 SYNC: 0
11101011 00001010 : 0xEB 0xA RWB: 1 SYNC: 0
11101011 00001010 : 0xEB 0xA RWB: 1 SYNC: 0
11101011 00001100 : 0xEB 0xC RWB: 1 SYNC: 0
11101011 00001110 : 0xEB 0xE RWB: 1 SYNC: 0
11101011 00010000 : 0xEB 0x10 RWB: 1 SYNC: 0
11101011 00010010 : 0xEB 0x12 RWB: 1 SYNC: 0
11101011 00010100 : 0xEB 0x14 RWB: 1 SYNC: 0
11101011 00010100 : 0xEB 0x14 RWB: 1 SYNC: 0
11101011 00010100 : 0xEB 0x14 RWB: 1 SYNC: 0
11101011 00010100 : 0xEB 0x14 RWB: 1 SYNC: 0
11101011 00010100 : 0xEB 0x14 RWB: 1 SYNC: 0
11101011 00010100 : 0xEB 0x14 RWB: 1 SYNC: 0
11101011 00010100 : 0xEB 0x14 RWB: 1 SYNC: 0
11101011 00010100 : 0xEB 0x14 RWB: 1 SYNC: 0
11101011 00010110 : 0xEB 0x16 RWB: 1 SYNC: 0
11101011 00011000 : 0xEB 0x18 RWB: 1 SYNC: 0
11101011 00011010 : 0xEB 0x1A RWB: 1 SYNC: 0
11101011 00011100 : 0xEB 0x1C RWB: 1 SYNC: 0
11101011 00011110 : 0xEB 0x1E RWB: 1 SYNC: 0
11101011 00011110 : 0xEB 0x1E RWB: 1 SYNC: 0
11101011 00011110 : 0xEB 0x1E RWB: 1 SYNC: 0
11101011 00011110 : 0xEB 0x1E RWB: 1 SYNC: 0
11101011 00011110 : 0xEB 0x1E RWB: 1 SYNC: 0
11101011 00011110 : 0xEB 0x1E RWB: 1 SYNC: 0
11101011 00011110 : 0xEB 0x1E RWB: 1 SYNC: 0
11101011 00011110 : 0xEB 0x1E RWB: 1 SYNC: 0
11101011 00011110 : 0xEB 0x1E RWB: 1 SYNC: 0
11101011 00100000 : 0xEB 0x20 RWB: 1 SYNC: 0
11101011 00100001 : 0xEB 0x21 RWB: 1 SYNC: 0
11101011 00100010 : 0xEB 0x22 RWB: 1 SYNC: 1
11101011 00100100 : 0xEB 0x24 RWB: 1 SYNC: 0
11101011 00100100 : 0xEB 0x24 RWB: 1 SYNC: 0
11101011 00100100 : 0xEB 0x24 RWB: 1 SYNC: 0
11101011 00100100 : 0xEB 0x24 RWB: 1 SYNC: 0
11101011 00100100 : 0xEB 0x24 RWB: 1 SYNC: 0
11101011 00100100 : 0xEB 0x24 RWB: 1 SYNC: 0
11101011 00100100 : 0xEB 0x24 RWB: 1 SYNC: 0
11101011 00100100 : 0xEB 0x24 RWB: 1 SYNC: 0
11101011 00100100 : 0xEB 0x24 RWB: 1 SYNC: 0
11101011 00100110 : 0xEB 0x26 RWB: 1 SYNC: 0
11101011 00101000 : 0xEB 0x28 RWB: 1 SYNC: 0
11101011 00101001 : 0xEB 0x29 RWB: 1 SYNC: 0
11101011 00101010 : 0xEB 0x2A RWB: 1 SYNC: 0
11101011 00101100 : 0xEB 0x2C RWB: 1 SYNC: 0
11101011 00101100 : 0xEB 0x2C RWB: 1 SYNC: 0
11101011 00101100 : 0xEB 0x2C RWB: 1 SYNC: 0
11101011 00101100 : 0xEB 0x2C RWB: 1 SYNC: 0
11101011 00101100 : 0xEB 0x2C RWB: 1 SYNC: 0
11101011 00101100 : 0xEB 0x2C RWB: 1 SYNC: 0
11101011 00101100 : 0xEB 0x2C RWB: 1 SYNC: 0
11101011 00101100 : 0xEB 0x2C RWB: 1 SYNC: 0
11101011 00101100 : 0xEB 0x2C RWB: 1 SYNC: 0
11101011 00101110 : 0xEB 0x2E RWB: 1 SYNC: 0
11101011 00110000 : 0xEB 0x30 RWB: 1 SYNC: 0
11101011 00110001 : 0xEB 0x31 RWB: 1 SYNC: 1
11101011 00110010 : 0xEB 0x32 RWB: 1 SYNC: 0
11101011 00110010 : 0xEB 0x32 RWB: 1 SYNC: 0
11101011 00110010 : 0xEB 0x32 RWB: 1 SYNC: 0
11101011 00110010 : 0xEB 0x32 RWB: 1 SYNC: 0
11101011 00110010 : 0xEB 0x32 RWB: 1 SYNC: 0
11101011 00110010 : 0xEB 0x32 RWB: 1 SYNC: 0
11101011 00110010 : 0xEB 0x32 RWB: 1 SYNC: 0
11101011 00110010 : 0xEB 0x32 RWB: 1 SYNC: 0
11101011 00110010 : 0xEB 0x32 RWB: 1 SYNC: 0
11101011 00110100 : 0xEB 0x34 RWB: 1 SYNC: 0
11101011 00110110 : 0xEB 0x36 RWB: 1 SYNC: 0
11101011 00111000 : 0xEB 0x38 RWB: 1 SYNC: 0
11101011 00111010 : 0xEB 0x3A RWB: 1 SYNC: 0
11101011 00111010 : 0xEB 0x3A RWB: 1 SYNC: 0
11101011 00111010 : 0xEB 0x3A RWB: 1 SYNC: 0
11101011 00111010 : 0xEB 0x3A RWB: 1 SYNC: 0
11101011 00111010 : 0xEB 0x3A RWB: 1 SYNC: 0
11101011 00111010 : 0xEB 0x3A RWB: 1 SYNC: 0
11101011 00111010 : 0xEB 0x3A RWB: 1 SYNC: 0
11101011 00111010 : 0xEB 0x3A RWB: 1 SYNC: 0
11101011 00111010 : 0xEB 0x3A RWB: 1 SYNC: 0
11101011 00111100 : 0xEB 0x3C RWB: 1 SYNC: 0
11101011 00111110 : 0xEB 0x3E RWB: 1 SYNC: 0
11101011 01000000 : 0xEB 0x40 RWB: 1 SYNC: 0
11101011 01000001 : 0xEB 0x41 RWB: 1 SYNC: 0
11101011 01000010 : 0xEB 0x42 RWB: 1 SYNC: 0
11101011 01000010 : 0xEB 0x42 RWB: 1 SYNC: 0
11101011 01000010 : 0xEB 0x42 RWB: 1 SYNC: 0
11101011 01000010 : 0xEB 0x42 RWB: 1 SYNC: 0
11101011 01000010 : 0xEB 0x42 RWB: 1 SYNC: 0
11101011 01000010 : 0xEB 0x42 RWB: 1 SYNC: 0
11101011 01000010 : 0xEB 0x42 RWB: 1 SYNC: 0
11101011 01000010 : 0xEB 0x42 RWB: 1 SYNC: 0
11101011 01000010 : 0xEB 0x42 RWB: 1 SYNC: 0
11101011 01000011 : 0xEB 0x43 RWB: 1 SYNC: 0
11101011 01000100 : 0xEB 0x44 RWB: 1 SYNC: 0
11101011 01000101 : 0xEB 0x45 RWB: 1 SYNC: 0
11101011 01000110 : 0xEB 0x46 RWB: 1 SYNC: 0
11101011 01000110 : 0xEB 0x46 RWB: 1 SYNC: 0
11101011 01000110 : 0xEB 0x46 RWB: 1 SYNC: 0
11101011 01000110 : 0xEB 0x46 RWB: 1 SYNC: 0
11101011 01000110 : 0xEB 0x46 RWB: 1 SYNC: 0
11101011 01000110 : 0xEB 0x46 RWB: 1 SYNC: 0
11101011 01000110 : 0xEB 0x46 RWB: 1 SYNC: 0
11101011 01000110 : 0xEB 0x46 RWB: 1 SYNC: 0
11101011 01000110 : 0xEB 0x46 RWB: 1 SYNC: 0
11101011 01000111 : 0xEB 0x47 RWB: 1 SYNC: 0
11101011 01001000 : 0xEB 0x48 RWB: 1 SYNC: 0
11101011 01001001 : 0xEB 0x49 RWB: 1 SYNC: 0
11101011 01001010 : 0xEB 0x4A RWB: 1 SYNC: 0
11101011 01001011 : 0xEB 0x4B RWB: 1 SYNC: 0
11101011 01001011 : 0xEB 0x4B RWB: 1 SYNC: 0
11101011 01001011 : 0xEB 0x4B RWB: 1 SYNC: 0
11101011 01001011 : 0xEB 0x4B RWB: 1 SYNC: 0
11101011 01001011 : 0xEB 0x4B RWB: 1 SYNC: 0
11101011 01001011 : 0xEB 0x4B RWB: 1 SYNC: 0
11101011 01001100 : 0xEB 0x4C RWB: 1 SYNC: 0
11101011 01001100 : 0xEB 0x4C RWB: 1 SYNC: 0
11101011 01001110 : 0xEB 0x4E RWB: 1 SYNC: 0
11101011 01010011 : 0xEB 0x53 RWB: 1 SYNC: 0
11101011 01011000 : 0xEB 0x58 RWB: 1 SYNC: 0
11101011 01011101 : 0xEB 0x5D RWB: 1 SYNC: 0
11101011 01100011 : 0xEB 0x63 RWB: 1 SYNC: 0
11101011 01101001 : 0xEB 0x69 RWB: 1 SYNC: 0
11101011 01101110 : 0xEB 0x6E RWB: 1 SYNC: 0
11101011 01110011 : 0xEB 0x73 RWB: 1 SYNC: 0
11101011 01111000 : 0xEB 0x78 RWB: 1 SYNC: 0
11101011 01111101 : 0xEB 0x7D RWB: 1 SYNC: 0
11101011 10000010 : 0xEB 0x82 RWB: 1 SYNC: 0
11101011 10000111 : 0xEB 0x87 RWB: 1 SYNC: 0
11101011 10001100 : 0xEB 0x8C RWB: 1 SYNC: 0
11101011 10010001 : 0xEB 0x91 RWB: 1 SYNC: 0
11101011 10010110 : 0xEB 0x96 RWB: 1 SYNC: 0
11101011 10011011 : 0xEB 0x9B RWB: 1 SYNC: 0
11101011 10011110 : 0xEB 0x9E RWB: 1 SYNC: 0
11101011 10100100 : 0xEB 0xA4 RWB: 1 SYNC: 0
11101011 10101001 : 0xEB 0xA9 RWB: 1 SYNC: 0
11101011 10101110 : 0xEB 0xAE RWB: 1 SYNC: 0
11101011 10110011 : 0xEB 0xB3 RWB: 1 SYNC: 0
11101011 10111000 : 0xEB 0xB8 RWB: 1 SYNC: 0
11101011 10111101 : 0xEB 0xBD RWB: 1 SYNC: 0
11101011 11000010 : 0xEB 0xC2 RWB: 1 SYNC: 0
11101011 11000111 : 0xEB 0xC7 RWB: 1 SYNC: 0
11101011 11001011 : 0xEB 0xCB RWB: 1 SYNC: 0
11101011 11010000 : 0xEB 0xD0 RWB: 1 SYNC: 0
11101011 11010101 : 0xEB 0xD5 RWB: 1 SYNC: 1
11101011 11011010 : 0xEB 0xDA RWB: 1 SYNC: 1
11101011 11100001 : 0xEB 0xE1 RWB: 1 SYNC: 0
11101011 11100111 : 0xEB 0xE7 RWB: 1 SYNC: 0
11101011 11101100 : 0xEB 0xEC RWB: 1 SYNC: 0
11101011 11101100 : 0xEB 0xEC RWB: 1 SYNC: 0
11101011 11101100 : 0xEB 0xEC RWB: 1 SYNC: 0
00000001 11111100 : 0x1 0xFC RWB: 1 SYNC: 0 <-- second reset
11101010 11101111 : 0xEA 0xEF RWB: 1 SYNC: 0
11101010 11110100 : 0xEA 0xF4 RWB: 1 SYNC: 0
11101010 11111001 : 0xEA 0xF9 RWB: 1 SYNC: 0
11101010 11111110 : 0xEA 0xFE RWB: 1 SYNC: 0
11101011 00000011 : 0xEB 0x3 RWB: 1 SYNC: 0
11101011 00001000 : 0xEB 0x8 RWB: 1 SYNC: 0
11101011 00001101 : 0xEB 0xD RWB: 1 SYNC: 0
11101011 00010011 : 0xEB 0x13 RWB: 1 SYNC: 0
11101011 00011000 : 0xEB 0x18 RWB: 1 SYNC: 0
11101011 00011101 : 0xEB 0x1D RWB: 1 SYNC: 0
11101011 00100010 : 0xEB 0x22 RWB: 1 SYNC: 0
11101011 00100100 : 0xEB 0x24 RWB: 1 SYNC: 0
11101011 00100100 : 0xEB 0x24 RWB: 1 SYNC: 0
11101011 00100100 : 0xEB 0x24 RWB: 1 SYNC: 0
11101011 00100100 : 0xEB 0x24 RWB: 1 SYNC: 0
11101011 00100100 : 0xEB 0x24 RWB: 1 SYNC: 0
11101011 00100101 : 0xEB 0x25 RWB: 1 SYNC: 0
11101011 00100110 : 0xEB 0x26 RWB: 1 SYNC: 0
11101011 00101000 : 0xEB 0x28 RWB: 1 SYNC: 0
11101011 00101001 : 0xEB 0x29 RWB: 1 SYNC: 0
11101011 00101001 : 0xEB 0x29 RWB: 1 SYNC: 0
11101011 00101001 : 0xEB 0x29 RWB: 1 SYNC: 0
11101011 00101001 : 0xEB 0x29 RWB: 1 SYNC: 0
11101011 00101001 : 0xEB 0x29 RWB: 1 SYNC: 0
11101011 00101001 : 0xEB 0x29 RWB: 1 SYNC: 0
11101011 00101001 : 0xEB 0x29 RWB: 1 SYNC: 0
11101011 00101001 : 0xEB 0x29 RWB: 1 SYNC: 0
11101011 00101001 : 0xEB 0x29 RWB: 1 SYNC: 0
11101011 00101010 : 0xEB 0x2A RWB: 1 SYNC: 0
- I have an Arduino Mega2550, which I use to provide 5V, create a clock signal, read the address bus, and to read the `SYNC` and the `RWB` pin
- I am using a WDC 65c02s (W65C02S6TPG-14)
- Those pins pulled-high via 3.3kohm pull-up resitistors are the same as in the L-Star computer, see https://github.com/JacGoudsmit/L-Star

My hypothesis is, that the clock signal is not sufficiently clean. A clock signal with a lot of ringing could cause the processor continuing NOPing without my program reading the address lines. Unfortunately, I do not have access to any kind of oscilloscope to verify this.
Do you have any idea why I am seeing those weird behaviour when reading the address line? Is there anything I can do to my circuit to make it work as expected? If it is something like adding another decoupling capacitor somewhere, where and how should that be done?
In the following and for completness the Arduino program, which I am using for the experiment.
Code: Select all
#define CLOCK 52
#define SYNC 50
#define RWB 51
#define A0 22
#define A1 23
#define A2 24
#define A3 25
#define A4 26
#define A5 27
#define A6 28
#define A7 29
#define A8 30
#define A9 31
#define A10 32
#define A11 33
#define A12 34
#define A13 35
#define A14 36
#define A15 37
void setup() {
pinMode(CLOCK, OUTPUT);
digitalWrite(CLOCK, LOW);
Serial.begin(115200);
delay(500);
}
void loop() {
digitalWrite(CLOCK, LOW);
delay(100);
digitalWrite(CLOCK, HIGH);
byte a0 = digitalRead(A0);
byte a1 = digitalRead(A1);
byte a2 = digitalRead(A2);
byte a3 = digitalRead(A3);
byte a4 = digitalRead(A4);
byte a5 = digitalRead(A5);
byte a6 = digitalRead(A6);
byte a7 = digitalRead(A7);
byte a8 = digitalRead(A8);
byte a9 = digitalRead(A9);
byte a10 = digitalRead(A10);
byte a11 = digitalRead(A11);
byte a12 = digitalRead(A12);
byte a13 = digitalRead(A13);
byte a14 = digitalRead(A14);
byte a15 = digitalRead(A15);
byte address_value_low = a7 << 7;
address_value_low += a6 << 6;
address_value_low += a5 << 5;
address_value_low += a4 << 4;
address_value_low += a3 << 3;
address_value_low += a2 << 2;
address_value_low += a1 << 1;
address_value_low += a0;
byte address_value_high = a15 << 7;
address_value_high += a14 << 6;
address_value_high += a13 << 5;
address_value_high += a12 << 4;
address_value_high += a11 << 3;
address_value_high += a10 << 2;
address_value_high += a9 << 1;
address_value_high += a8;
Serial.print(a15);
Serial.print(a14);
Serial.print(a13);
Serial.print(a12);
Serial.print(a11);
Serial.print(a10);
Serial.print(a9);
Serial.print(a8);
Serial.print(' ');
Serial.print(a7);
Serial.print(a6);
Serial.print(a5);
Serial.print(a4);
Serial.print(a3);
Serial.print(a2);
Serial.print(a1);
Serial.print(a0);
Serial.print(" : 0x");
Serial.print(address_value_high, HEX);
Serial.print(" 0x");
Serial.print(address_value_low, HEX);
Serial.print(" RWB: ");
Serial.print(digitalRead(RWB));
Serial.print(" SYNC: ");
Serial.print(digitalRead(SYNC));
Serial.println();
}