private void clockAPUFourStepMode() {
				
				// we clock envelope on step 1,2,3,4 in either mode
				clockEnvelope();
				clockTriangleLinearCounter();

				if(internal_step == 2 || internal_step == 4) {
					clockLengthCounter();
					clockSweepUnits();
					if(internal_step == 4) {
						if(!_inhibitInterrupt) {
							triggerCount = 2; // apparently the irq flag is set 3 times in a row
							_frameInterruptFlag = true;
							_justSet = true;
							if(_nes != null){
								if(APU_DEV_MODE) {
									System.out.println("Triggering APU IRQ at clock: " + _clocks);
								}
								_nes.doIRQ(_frameInterruptFlag);
						}

						}												
					}
				}

				if(internal_step == 4){
					internal_step = 1;
					_clocks = 0;
				} else {
					internal_step++;
				}
				
				sequencer = SEQUENCER_4STEP[_mode][internal_step];
				notifyAPUChanged();

			}