//========================================================================================
//  Malfunction.java
//    en:Malfunction reproduction
//    ja:故障再現
//  Copyright (C) 2003-2026 Makoto Kamada
//
//  This file is part of the XEiJ (X68000 Emulator in Java).
//  You can use, modify and redistribute the XEiJ if the conditions are met.
//  Read the XEiJ License for more details.
//  https://stdkmd.net/xeij/
//========================================================================================

package xeij;

class Malfunction {

  public static final boolean MLF_ON = false;

  //mlfRaster (dataY)
  //  TVRAMのプレーン0のbit15-12を担当するマルチポートRAM(XVIで言うとIC56)のデータを暴れさせる
  //  drawRaster (dataY, screenY, false)の直前に呼び出す
  public static void mlfRaster (int dataY) {
    int my = (CRTC.crtR11TxYZero + dataY) & 1023;  //メモリY座標
    final int ba = 0x00e00000 + (0 << 17);  //ベースアドレス。プレーン0
    int sa = ba + 128 * my;  //開始アドレス
    int ea = sa + 128;  //終了アドレス
    for (int a = sa; a < ea; a += 2) {
      MainMemory.mmrM8[a] = (byte) (((random () >>> 24) & 0xf0) |  //bit15-12をノイズに
                                    (MainMemory.mmrM8[a] & 0x0f));  //bit11-8はそのまま
    }
  }  //mlfRaster

  private static int x = 123456789;
  private static int y = 362436069;
  private static int z = 521288629;
  private static int w = 88675123;
  private static int random () {
    int t = x ^ (x << 11);
    x = y;
    y = z;
    z = w;
    return w = (w ^ (w >>> 19)) ^ (t ^ (t >>> 8));
  }  //random

}  //class Malfunction
