 			switch (addressingMode)
 			{
 				case IMP:
+					// No Op
 					break;
 				default:
 					_emulator.log("Invalid addressing mode " + ADDR_NAME[addressingMode] + " for Instruction: NOP");

					value = param1;
					break;
				case ZPG:
					value = readUnsignedByte(param1);
					break;
				case ZPX:
					value = readUnsignedByte(param1);
					value += X;
					value = readUnsignedByte(value & 0xFF);
					break;
				case ABS:
					value = readUnsignedByte(paramWord);

					value = readUnsignedByte(paramWord + Y);
					break;
				case INX:
					// Address to read value from is at (param1 + X) & 0xFF
					value = (param1 + X) & 0xFF; // Pointer to address
					if (value == 0xFF)  // Page boundary
						value = readUnsignedByte(0xFF) | (readUnsignedByte(0) << 8);
					else
					{
						_mem.position = value;
						value = _mem.readUnsignedShort(); // address
					}
						
					value = readUnsignedByte(value);
					break;
				case INY:
					if (param1 == 0xFF)
						value = readUnsignedByte(value) | (readUnsignedByte(0) << 8);
					else
					{
						_mem.position = param1;
						value = _mem.readUnsignedShort();
					}
						
					value += Y;
					value = readUnsignedByte(value);
					break;
				default:
					_emulator.log("Invalid addressing mode " + ADDR_NAME[addressingMode] + " for Instruction: ADC");
					break;
			}
			
			result = A + value;
			
			P &= ~(NEGATIVE_FLAG | CARRY_FLAG | OVERFLOW_FLAG);
			
			if (result & 0x80)
				P |= NEGATIVE_FLAG;
			if (result & 0x100)
				P |= CARRY_FLAG;
				
			var sign:uint = 0;
			// Overflow if A and Value have the same sign, but result is a different sign
			// Could check wtih (A & V & ~R | ~A & ~V & R) & 0x80 .. is that faster?
			if (((sign = A & 0x80) == (value & 0x80)) && (sign != (result & 0x80)))
				P |= OVERFLOW_FLAG;
			
		}
		
		private function instrAND(addressingMode:uint, param1:uint, param2:uint, paramWord:uint):void
		{
			var value:uint = 0;
			switch (addressingMode)
			{
				case IMM:
					value = param1;
					break;
				case ZPG:
					_mem.position = param1;
					value = _mem.readUnsignedByte();
					break;
				case ZPX:
					_mem.position = (param1 + X) & 0xFF;
					value = _mem.readUnsignedByte();
					break;
				case ABS:
					value = readUnsignedByte(paramWord);
					break;
				case ABX:
					value = readUnsignedByte(paramWord + X);
					// Calculate cycle by checking paramWord + X & 0xFF < paramWord & 0xFF(or param1?)
					break;
				case ABY:
					value = readUnsignedByte(paramWord + Y);
					break;
				case INX:
					// Address to read value from is at (param1 + X) & 0xFF
					value = (param1 + X) & 0xFF; // Pointer to address
					if (value == 0xFF)  // Page boundary
						value = readUnsignedByte(0xFF) | (readUnsignedByte(0) << 8);
					else
					{
						_mem.position = value;
						value = _mem.readUnsignedShort(); // address
					}
						
					value = readUnsignedByte(value);
					break;
				case INY:
					if (param1 == 0xFF)
						value = readUnsignedByte(value) | (readUnsignedByte(0) << 8);
					else
					{
						_mem.position = param1;
						value = _mem.readUnsignedShort();
					}
						
					value += Y;
					value = readUnsignedByte(value);
					break;
				default:
					_emulator.log("Invalid addressing mode " + ADDR_NAME[addressingMode] + " for Instruction: AND");
					break;
			}
			
			A = A & value & 0xFF;
			
			P &= 0x7D;  // Clear Negative and Zero Flag
			
