Lines Matching refs:parentObj
477 var parentObj = this;
479 return parentObj.audioUnderRun(sampleCount);
1438 this.DISPLAYOFFCONTROL = [function (parentObj) {
1645 function (parentObj) {
1650 function (parentObj) {
1651 parentObj.registerC = parentObj.memoryReader[parentObj.programCounter](parentObj, parentObj.programCounter);
1652 parentObj.registerB = parentObj.memoryRead((parentObj.programCounter + 1) & 0xFFFF);
1653 parentObj.programCounter = (parentObj.programCounter + 2) & 0xFFFF;
1657 function (parentObj) {
1658 parentObj.memoryWrite((parentObj.registerB << 8) | parentObj.registerC, parentObj.registerA);
1662 function (parentObj) {
1663 var temp_var = ((parentObj.registerB << 8) | parentObj.registerC) + 1;
1664 parentObj.registerB = (temp_var >> 8) & 0xFF;
1665 parentObj.registerC = temp_var & 0xFF;
1669 function (parentObj) {
1670 parentObj.registerB = (parentObj.registerB + 1) & 0xFF;
1671 parentObj.FZero = (parentObj.registerB == 0);
1672 parentObj.FHalfCarry = ((parentObj.registerB & 0xF) == 0);
1673 parentObj.FSubtract = false;
1677 function (parentObj) {
1678 parentObj.registerB = (parentObj.registerB - 1) & 0xFF;
1679 parentObj.FZero = (parentObj.registerB == 0);
1680 parentObj.FHalfCarry = ((parentObj.registerB & 0xF) == 0xF);
1681 parentObj.FSubtract = true;
1685 function (parentObj) {
1686 parentObj.registerB = parentObj.memoryReader[parentObj.programCounter](parentObj, parentObj.programCounter);
1687 parentObj.programCounter = (parentObj.programCounter + 1) & 0xFFFF;
1691 function (parentObj) {
1692 parentObj.FCarry = (parentObj.registerA > 0x7F);
1693 parentObj.registerA = ((parentObj.registerA << 1) & 0xFF) | (parentObj.registerA >> 7);
1694 parentObj.FZero = parentObj.FSubtract = parentObj.FHalfCarry = false;
1698 function (parentObj) {
1699 var temp_var = (parentObj.memoryRead((parentObj.programCounter + 1) & 0xFFFF) << 8) | parentObj.memoryReader[parentObj.programCounter](parentObj, parentObj.programCounter);
1700 parentObj.programCounter = (parentObj.programCounter + 2) & 0xFFFF;
1701 parentObj.memoryWrite(temp_var, parentObj.stackPointer & 0xFF);
1702 parentObj.memoryWrite((temp_var + 1) & 0xFFFF, parentObj.stackPointer >> 8);
1706 function (parentObj) {
1707 var dirtySum = parentObj.registersHL + ((parentObj.registerB << 8) | parentObj.registerC);
1708 parentObj.FHalfCarry = ((parentObj.registersHL & 0xFFF) > (dirtySum & 0xFFF));
1709 parentObj.FCarry = (dirtySum > 0xFFFF);
1710 parentObj.registersHL = dirtySum & 0xFFFF;
1711 parentObj.FSubtract = false;
1715 function (parentObj) {
1716 parentObj.registerA = parentObj.memoryRead((parentObj.registerB << 8) | parentObj.registerC);
1720 function (parentObj) {
1721 var temp_var = (((parentObj.registerB << 8) | parentObj.registerC) - 1) & 0xFFFF;
1722 parentObj.registerB = temp_var >> 8;
1723 parentObj.registerC = temp_var & 0xFF;
1727 function (parentObj) {
1728 parentObj.registerC = (parentObj.registerC + 1) & 0xFF;
1729 parentObj.FZero = (parentObj.registerC == 0);
1730 parentObj.FHalfCarry = ((parentObj.registerC & 0xF) == 0);
1731 parentObj.FSubtract = false;
1735 function (parentObj) {
1736 parentObj.registerC = (parentObj.registerC - 1) & 0xFF;
1737 parentObj.FZero = (parentObj.registerC == 0);
1738 parentObj.FHalfCarry = ((parentObj.registerC & 0xF) == 0xF);
1739 parentObj.FSubtract = true;
1743 function (parentObj) {
1744 parentObj.registerC = parentObj.memoryReader[parentObj.programCounter](parentObj, parentObj.programCounter);
1745 parentObj.programCounter = (parentObj.programCounter + 1) & 0xFFFF;
1749 function (parentObj) {
1750 parentObj.registerA = (parentObj.registerA >> 1) | ((parentObj.registerA & 1) << 7);
1751 parentObj.FCarry = (parentObj.registerA > 0x7F);
1752 parentObj.FZero = parentObj.FSubtract = parentObj.FHalfCarry = false;
1756 function (parentObj) {
1757 if (parentObj.cGBC) {
1758 if ((parentObj.memory[0xFF4D] & 0x01) == 0x01) { //Speed change requested.
1759 if (parentObj.memory[0xFF4D] > 0x7F) { //Go back to single speed mode.
1761 parentObj.doubleSpeedShifter = 0;
1762 parentObj.memory[0xFF4D] &= 0x7F; //Clear the double speed mode flag.
1766 parentObj.doubleSpeedShifter = 1;
1767 parentObj.memory[0xFF4D] |= 0x80; //Set the double speed mode flag.
1769 parentObj.memory[0xFF4D] &= 0xFE; //Reset the request bit.
1772 parentObj.handleSTOP();
1776 parentObj.handleSTOP();
1781 function (parentObj) {
1782 parentObj.registerE = parentObj.memoryReader[parentObj.programCounter](parentObj, parentObj.programCounter);
1783 parentObj.registerD = parentObj.memoryRead((parentObj.programCounter + 1) & 0xFFFF);
1784 parentObj.programCounter = (parentObj.programCounter + 2) & 0xFFFF;
1788 function (parentObj) {
1789 parentObj.memoryWrite((parentObj.registerD << 8) | parentObj.registerE, parentObj.registerA);
1793 function (parentObj) {
1794 var temp_var = ((parentObj.registerD << 8) | parentObj.registerE) + 1;
1795 parentObj.registerD = (temp_var >> 8) & 0xFF;
1796 parentObj.registerE = temp_var & 0xFF;
1800 function (parentObj) {
1801 parentObj.registerD = (parentObj.registerD + 1) & 0xFF;
1802 parentObj.FZero = (parentObj.registerD == 0);
1803 parentObj.FHalfCarry = ((parentObj.registerD & 0xF) == 0);
1804 parentObj.FSubtract = false;
1808 function (parentObj) {
1809 parentObj.registerD = (parentObj.registerD - 1) & 0xFF;
1810 parentObj.FZero = (parentObj.registerD == 0);
1811 parentObj.FHalfCarry = ((parentObj.registerD & 0xF) == 0xF);
1812 parentObj.FSubtract = true;
1816 function (parentObj) {
1817 parentObj.registerD = parentObj.memoryReader[parentObj.programCounter](parentObj, parentObj.programCounter);
1818 parentObj.programCounter = (parentObj.programCounter + 1) & 0xFFFF;
1822 function (parentObj) {
1823 var carry_flag = (parentObj.FCarry) ? 1 : 0;
1824 parentObj.FCarry = (parentObj.registerA > 0x7F);
1825 parentObj.registerA = ((parentObj.registerA << 1) & 0xFF) | carry_flag;
1826 parentObj.FZero = parentObj.FSubtract = parentObj.FHalfCarry = false;
1830 function (parentObj) {
1831 parentObj.programCounter = (parentObj.programCounter + ((parentObj.memoryReader[parentObj.programCounter](parentObj, parentObj.programCounter) << 24) >> 24) + 1) & 0xFFFF;
1835 function (parentObj) {
1836 var dirtySum = parentObj.registersHL + ((parentObj.registerD << 8) | parentObj.registerE);
1837 parentObj.FHalfCarry = ((parentObj.registersHL & 0xFFF) > (dirtySum & 0xFFF));
1838 parentObj.FCarry = (dirtySum > 0xFFFF);
1839 parentObj.registersHL = dirtySum & 0xFFFF;
1840 parentObj.FSubtract = false;
1844 function (parentObj) {
1845 parentObj.registerA = parentObj.memoryRead((parentObj.registerD << 8) | parentObj.registerE);
1849 function (parentObj) {
1850 var temp_var = (((parentObj.registerD << 8) | parentObj.registerE) - 1) & 0xFFFF;
1851 parentObj.registerD = temp_var >> 8;
1852 parentObj.registerE = temp_var & 0xFF;
1856 function (parentObj) {
1857 parentObj.registerE = (parentObj.registerE + 1) & 0xFF;
1858 parentObj.FZero = (parentObj.registerE == 0);
1859 parentObj.FHalfCarry = ((parentObj.registerE & 0xF) == 0);
1860 parentObj.FSubtract = false;
1864 function (parentObj) {
1865 parentObj.registerE = (parentObj.registerE - 1) & 0xFF;
1866 parentObj.FZero = (parentObj.registerE == 0);
1867 parentObj.FHalfCarry = ((parentObj.registerE & 0xF) == 0xF);
1868 parentObj.FSubtract = true;
1872 function (parentObj) {
1873 parentObj.registerE = parentObj.memoryReader[parentObj.programCounter](parentObj, parentObj.programCounter);
1874 parentObj.programCounter = (parentObj.programCounter + 1) & 0xFFFF;
1878 function (parentObj) {
1879 var carry_flag = (parentObj.FCarry) ? 0x80 : 0;
1880 parentObj.FCarry = ((parentObj.registerA & 1) == 1);
1881 parentObj.registerA = (parentObj.registerA >> 1) | carry_flag;
1882 parentObj.FZero = parentObj.FSubtract = parentObj.FHalfCarry = false;
1886 function (parentObj) {
1887 if (!parentObj.FZero) {
1888 parentObj.programCounter = (parentObj.programCounter + ((parentObj.memoryReader[parentObj.programCounter](parentObj, parentObj.programCounter) << 24) >> 24) + 1) & 0xFFFF;
1889 parentObj.CPUTicks += 4;
1892 parentObj.programCounter = (parentObj.programCounter + 1) & 0xFFFF;
1897 function (parentObj) {
1898 parentObj.registersHL = (parentObj.memoryRead((parentObj.programCounter + 1) & 0xFFFF) << 8) | parentObj.memoryReader[parentObj.programCounter](parentObj, parentObj.programCounter);
1899 parentObj.programCounter = (parentObj.programCounter + 2) & 0xFFFF;
1903 function (parentObj) {
1904 parentObj.memoryWriter[parentObj.registersHL](parentObj, parentObj.registersHL, parentObj.registerA);
1905 parentObj.registersHL = (parentObj.registersHL + 1) & 0xFFFF;
1909 function (parentObj) {
1910 parentObj.registersHL = (parentObj.registersHL + 1) & 0xFFFF;
1914 function (parentObj) {
1915 var H = ((parentObj.registersHL >> 8) + 1) & 0xFF;
1916 parentObj.FZero = (H == 0);
1917 parentObj.FHalfCarry = ((H & 0xF) == 0);
1918 parentObj.FSubtract = false;
1919 parentObj.registersHL = (H << 8) | (parentObj.registersHL & 0xFF);
1923 function (parentObj) {
1924 var H = ((parentObj.registersHL >> 8) - 1) & 0xFF;
1925 parentObj.FZero = (H == 0);
1926 parentObj.FHalfCarry = ((H & 0xF) == 0xF);
1927 parentObj.FSubtract = true;
1928 parentObj.registersHL = (H << 8) | (parentObj.registersHL & 0xFF);
1932 function (parentObj) {
1933 parentObj.registersHL = (parentObj.memoryReader[parentObj.programCounter](parentObj, parentObj.programCounter) << 8) | (parentObj.registersHL & 0xFF);
1934 parentObj.programCounter = (parentObj.programCounter + 1) & 0xFFFF;
1938 function (parentObj) {
1939 if (!parentObj.FSubtract) {
1940 if (parentObj.FCarry || parentObj.registerA > 0x99) {
1941 parentObj.registerA = (parentObj.registerA + 0x60) & 0xFF;
1942 parentObj.FCarry = true;
1944 if (parentObj.FHalfCarry || (parentObj.registerA & 0xF) > 0x9) {
1945 parentObj.registerA = (parentObj.registerA + 0x06) & 0xFF;
1946 parentObj.FHalfCarry = false;
1949 else if (parentObj.FCarry && parentObj.FHalfCarry) {
1950 parentObj.registerA = (parentObj.registerA + 0x9A) & 0xFF;
1951 parentObj.FHalfCarry = false;
1953 else if (parentObj.FCarry) {
1954 parentObj.registerA = (parentObj.registerA + 0xA0) & 0xFF;
1956 else if (parentObj.FHalfCarry) {
1957 parentObj.registerA = (parentObj.registerA + 0xFA) & 0xFF;
1958 parentObj.FHalfCarry = false;
1960 parentObj.FZero = (parentObj.registerA == 0);
1964 function (parentObj) {
1965 if (parentObj.FZero) {
1966 parentObj.programCounter = (parentObj.programCounter + ((parentObj.memoryReader[parentObj.programCounter](parentObj, parentObj.programCounter) << 24) >> 24) + 1) & 0xFFFF;
1967 parentObj.CPUTicks += 4;
1970 parentObj.programCounter = (parentObj.programCounter + 1) & 0xFFFF;
1975 function (parentObj) {
1976 parentObj.FHalfCarry = ((parentObj.registersHL & 0xFFF) > 0x7FF);
1977 parentObj.FCarry = (parentObj.registersHL > 0x7FFF);
1978 parentObj.registersHL = (parentObj.registersHL << 1) & 0xFFFF;
1979 parentObj.FSubtract = false;
1983 function (parentObj) {
1984 parentObj.registerA = parentObj.memoryReader[parentObj.registersHL](parentObj, parentObj.registersHL);
1985 parentObj.registersHL = (parentObj.registersHL + 1) & 0xFFFF;
1989 function (parentObj) {
1990 parentObj.registersHL = (parentObj.registersHL - 1) & 0xFFFF;
1994 function (parentObj) {
1995 var L = (parentObj.registersHL + 1) & 0xFF;
1996 parentObj.FZero = (L == 0);
1997 parentObj.FHalfCarry = ((L & 0xF) == 0);
1998 parentObj.FSubtract = false;
1999 parentObj.registersHL = (parentObj.registersHL & 0xFF00) | L;
2003 function (parentObj) {
2004 var L = (parentObj.registersHL - 1) & 0xFF;
2005 parentObj.FZero = (L == 0);
2006 parentObj.FHalfCarry = ((L & 0xF) == 0xF);
2007 parentObj.FSubtract = true;
2008 parentObj.registersHL = (parentObj.registersHL & 0xFF00) | L;
2012 function (parentObj) {
2013 parentObj.registersHL = (parentObj.registersHL & 0xFF00) | parentObj.memoryReader[parentObj.programCounter](parentObj, parentObj.programCounter);
2014 parentObj.programCounter = (parentObj.programCounter + 1) & 0xFFFF;
2018 function (parentObj) {
2019 parentObj.registerA ^= 0xFF;
2020 parentObj.FSubtract = parentObj.FHalfCarry = true;
2024 function (parentObj) {
2025 parentObj.FCarry) {
2026 parentObj.programCounter = (parentObj.programCounter + ((parentObj.memoryReader[parentObj.programCounter](parentObj, parentObj.programCounter) << 24) >> 24) + 1) & 0xFFFF;
2027 parentObj.CPUTicks += 4;
2030 parentObj.programCounter = (parentObj.programCounter + 1) & 0xFFFF;
2035 function (parentObj) {
2036 parentObj.stackPointer = (parentObj.memoryRead((parentObj.programCounter + 1) & 0xFFFF) << 8) | parentObj.memoryReader[parentObj.programCounter](parentObj, parentObj.programCounter);
2037 parentObj.programCounter = (parentObj.programCounter + 2) & 0xFFFF;
2041 function (parentObj) {
2042 parentObj.memoryWriter[parentObj.registersHL](parentObj, parentObj.registersHL, parentObj.registerA);
2043 parentObj.registersHL = (parentObj.registersHL - 1) & 0xFFFF;
2047 function (parentObj) {
2048 parentObj.stackPointer = (parentObj.stackPointer + 1) & 0xFFFF;
2052 function (parentObj) {
2053 var temp_var = (parentObj.memoryReader[parentObj.registersHL](parentObj, parentObj.registersHL) + 1) & 0xFF;
2054 parentObj.FZero = (temp_var == 0);
2055 parentObj.FHalfCarry = ((temp_var & 0xF) == 0);
2056 parentObj.FSubtract = false;
2057 parentObj.memoryWriter[parentObj.registersHL](parentObj, parentObj.registersHL, temp_var);
2061 function (parentObj) {
2062 var temp_var = (parentObj.memoryReader[parentObj.registersHL](parentObj, parentObj.registersHL) - 1) & 0xFF;
2063 parentObj.FZero = (temp_var == 0);
2064 parentObj.FHalfCarry = ((temp_var & 0xF) == 0xF);
2065 parentObj.FSubtract = true;
2066 parentObj.memoryWriter[parentObj.registersHL](parentObj, parentObj.registersHL, temp_var);
2070 function (parentObj) {
2071 parentObj.memoryWriter[parentObj.registersHL](parentObj, parentObj.registersHL, parentObj.memoryReader[parentObj.programCounter](parentObj, parentObj.programCounter));
2072 parentObj.programCounter = (parentObj.programCounter + 1) & 0xFFFF;
2076 function (parentObj) {
2077 parentObj.FCarry = true;
2078 parentObj.FSubtract = parentObj.FHalfCarry = false;
2082 function (parentObj) {
2083 if (parentObj.FCarry) {
2084 parentObj.programCounter = (parentObj.programCounter + ((parentObj.memoryReader[parentObj.programCounter](parentObj, parentObj.programCounter) << 24) >> 24) + 1) & 0xFFFF;
2085 parentObj.CPUTicks += 4;
2088 parentObj.programCounter = (parentObj.programCounter + 1) & 0xFFFF;
2093 function (parentObj) {
2094 var dirtySum = parentObj.registersHL + parentObj.stackPointer;
2095 parentObj.FHalfCarry = ((parentObj.registersHL & 0xFFF) > (dirtySum & 0xFFF));
2096 parentObj.FCarry = (dirtySum > 0xFFFF);
2097 parentObj.registersHL = dirtySum & 0xFFFF;
2098 parentObj.FSubtract = false;
2102 function (parentObj) {
2103 parentObj.registerA = parentObj.memoryReader[parentObj.registersHL](parentObj, parentObj.registersHL);
2104 parentObj.registersHL = (parentObj.registersHL - 1) & 0xFFFF;
2108 function (parentObj) {
2109 parentObj.stackPointer = (parentObj.stackPointer - 1) & 0xFFFF;
2113 function (parentObj) {
2114 parentObj.registerA = (parentObj.registerA + 1) & 0xFF;
2115 parentObj.FZero = (parentObj.registerA == 0);
2116 parentObj.FHalfCarry = ((parentObj.registerA & 0xF) == 0);
2117 parentObj.FSubtract = false;
2121 function (parentObj) {
2122 parentObj.registerA = (parentObj.registerA - 1) & 0xFF;
2123 parentObj.FZero = (parentObj.registerA == 0);
2124 parentObj.FHalfCarry = ((parentObj.registerA & 0xF) == 0xF);
2125 parentObj.FSubtract = true;
2129 function (parentObj) {
2130 parentObj.registerA = parentObj.memoryReader[parentObj.programCounter](parentObj, parentObj.programCounter);
2131 parentObj.programCounter = (parentObj.programCounter + 1) & 0xFFFF;
2135 function (parentObj) {
2136 parentObj.FCarry = !parentObj.FCarry;
2137 parentObj.FSubtract = parentObj.FHalfCarry = false;
2141 function (parentObj) {
2146 function (parentObj) {
2147 parentObj.registerB = parentObj.registerC;
2151 function (parentObj) {
2152 parentObj.registerB = parentObj.registerD;
2156 function (parentObj) {
2157 parentObj.registerB = parentObj.registerE;
2161 function (parentObj) {
2162 parentObj.registerB = parentObj.registersHL >> 8;
2166 function (parentObj) {
2167 parentObj.registerB = parentObj.registersHL & 0xFF;
2171 function (parentObj) {
2172 parentObj.registerB = parentObj.memoryReader[parentObj.registersHL](parentObj, parentObj.registersHL);
2176 function (parentObj) {
2177 parentObj.registerB = parentObj.registerA;
2181 function (parentObj) {
2182 parentObj.registerC = parentObj.registerB;
2186 function (parentObj) {
2191 function (parentObj) {
2192 parentObj.registerC = parentObj.registerD;
2196 function (parentObj) {
2197 parentObj.registerC = parentObj.registerE;
2201 function (parentObj) {
2202 parentObj.registerC = parentObj.registersHL >> 8;
2206 function (parentObj) {
2207 parentObj.registerC = parentObj.registersHL & 0xFF;
2211 function (parentObj) {
2212 parentObj.registerC = parentObj.memoryReader[parentObj.registersHL](parentObj, parentObj.registersHL);
2216 function (parentObj) {
2217 parentObj.registerC = parentObj.registerA;
2221 function (parentObj) {
2222 parentObj.registerD = parentObj.registerB;
2226 function (parentObj) {
2227 parentObj.registerD = parentObj.registerC;
2231 function (parentObj) {
2236 function (parentObj) {
2237 parentObj.registerD = parentObj.registerE;
2241 function (parentObj) {
2242 parentObj.registerD = parentObj.registersHL >> 8;
2246 function (parentObj) {
2247 parentObj.registerD = parentObj.registersHL & 0xFF;
2251 function (parentObj) {
2252 parentObj.registerD = parentObj.memoryReader[parentObj.registersHL](parentObj, parentObj.registersHL);
2256 function (parentObj) {
2257 parentObj.registerD = parentObj.registerA;
2261 function (parentObj) {
2262 parentObj.registerE = parentObj.registerB;
2266 function (parentObj) {
2267 parentObj.registerE = parentObj.registerC;
2271 function (parentObj) {
2272 parentObj.registerE = parentObj.registerD;
2276 function (parentObj) {
2281 function (parentObj) {
2282 parentObj.registerE = parentObj.registersHL >> 8;
2286 function (parentObj) {
2287 parentObj.registerE = parentObj.registersHL & 0xFF;
2291 function (parentObj) {
2292 parentObj.registerE = parentObj.memoryReader[parentObj.registersHL](parentObj, parentObj.registersHL);
2296 function (parentObj) {
2297 parentObj.registerE = parentObj.registerA;
2301 function (parentObj) {
2302 parentObj.registersHL = (parentObj.registerB << 8) | (parentObj.registersHL & 0xFF);
2306 function (parentObj) {
2307 parentObj.registersHL = (parentObj.registerC << 8) | (parentObj.registersHL & 0xFF);
2311 function (parentObj) {
2312 parentObj.registersHL = (parentObj.registerD << 8) | (parentObj.registersHL & 0xFF);
2316 function (parentObj) {
2317 parentObj.registersHL = (parentObj.registerE << 8) | (parentObj.registersHL & 0xFF);
2321 function (parentObj) {
2326 function (parentObj) {
2327 parentObj.registersHL = (parentObj.registersHL & 0xFF) * 0x101;
2331 function (parentObj) {
2332 parentObj.registersHL = (parentObj.memoryReader[parentObj.registersHL](parentObj, parentObj.registersHL) << 8) | (parentObj.registersHL & 0xFF);
2336 function (parentObj) {
2337 parentObj.registersHL = (parentObj.registerA << 8) | (parentObj.registersHL & 0xFF);
2341 function (parentObj) {
2342 parentObj.registersHL = (parentObj.registersHL & 0xFF00) | parentObj.registerB;
2346 function (parentObj) {
2347 parentObj.registersHL = (parentObj.registersHL & 0xFF00) | parentObj.registerC;
2351 function (parentObj) {
2352 parentObj.registersHL = (parentObj.registersHL & 0xFF00) | parentObj.registerD;
2356 function (parentObj) {
2357 parentObj.registersHL = (parentObj.registersHL & 0xFF00) | parentObj.registerE;
2361 function (parentObj) {
2362 parentObj.registersHL = (parentObj.registersHL & 0xFF00) | (parentObj.registersHL >> 8);
2366 function (parentObj) {
2371 function (parentObj) {
2372 parentObj.registersHL = (parentObj.registersHL & 0xFF00) | parentObj.memoryReader[parentObj.registersHL](parentObj, parentObj.registersHL);
2376 function (parentObj) {
2377 parentObj.registersHL = (parentObj.registersHL & 0xFF00) | parentObj.registerA;
2381 function (parentObj) {
2382 parentObj.memoryWriter[parentObj.registersHL](parentObj, parentObj.registersHL, parentObj.registerB);
2386 function (parentObj) {
2387 parentObj.memoryWriter[parentObj.registersHL](parentObj, parentObj.registersHL, parentObj.registerC);
2391 function (parentObj) {
2392 parentObj.memoryWriter[parentObj.registersHL](parentObj, parentObj.registersHL, parentObj.registerD);
2396 function (parentObj) {
2397 parentObj.memoryWriter[parentObj.registersHL](parentObj, parentObj.registersHL, parentObj.registerE);
2401 function (parentObj) {
2402 parentObj.memoryWriter[parentObj.registersHL](parentObj, parentObj.registersHL, parentObj.registersHL >> 8);
2406 function (parentObj) {
2407 parentObj.memoryWriter[parentObj.registersHL](parentObj, parentObj.registersHL, parentObj.registersHL & 0xFF);
2411 function (parentObj) {
2413 if ((parentObj.interruptsEnabled & parentObj.interruptsRequested & 0x1F) > 0) {
2414 if (!parentObj.cGBC && !parentObj.usedBootROM) {
2416 parentObj.skipPCIncrement = true;
2420 parentObj.CPUTicks += 4;
2425 parentObj.calculateHALTPeriod();
2430 function (parentObj) {
2431 parentObj.memoryWriter[parentObj.registersHL](parentObj, parentObj.registersHL, parentObj.registerA);
2435 function (parentObj) {
2436 parentObj.registerA = parentObj.registerB;
2440 function (parentObj) {
2441 parentObj.registerA = parentObj.registerC;
2445 function (parentObj) {
2446 parentObj.registerA = parentObj.registerD;
2450 function (parentObj) {
2451 parentObj.registerA = parentObj.registerE;
2455 function (parentObj) {
2456 parentObj.registerA = parentObj.registersHL >> 8;
2460 function (parentObj) {
2461 parentObj.registerA = parentObj.registersHL & 0xFF;
2465 function (parentObj) {
2466 parentObj.registerA = parentObj.memoryReader[parentObj.registersHL](parentObj, parentObj.registersHL);
2470 function (parentObj) {
2475 function (parentObj) {
2476 var dirtySum = parentObj.registerA + parentObj.registerB;
2477 parentObj.FHalfCarry = ((dirtySum & 0xF) < (parentObj.registerA & 0xF));
2478 parentObj.FCarry = (dirtySum > 0xFF);
2479 parentObj.registerA = dirtySum & 0xFF;
2480 parentObj.FZero = (parentObj.registerA == 0);
2481 parentObj.FSubtract = false;
2485 function (parentObj) {
2486 var dirtySum = parentObj.registerA + parentObj.registerC;
2487 parentObj.FHalfCarry = ((dirtySum & 0xF) < (parentObj.registerA & 0xF));
2488 parentObj.FCarry = (dirtySum > 0xFF);
2489 parentObj.registerA = dirtySum & 0xFF;
2490 parentObj.FZero = (parentObj.registerA == 0);
2491 parentObj.FSubtract = false;
2495 function (parentObj) {
2496 var dirtySum = parentObj.registerA + parentObj.registerD;
2497 parentObj.FHalfCarry = ((dirtySum & 0xF) < (parentObj.registerA & 0xF));
2498 parentObj.FCarry = (dirtySum > 0xFF);
2499 parentObj.registerA = dirtySum & 0xFF;
2500 parentObj.FZero = (parentObj.registerA == 0);
2501 parentObj.FSubtract = false;
2505 function (parentObj) {
2506 var dirtySum = parentObj.registerA + parentObj.registerE;
2507 parentObj.FHalfCarry = ((dirtySum & 0xF) < (parentObj.registerA & 0xF));
2508 parentObj.FCarry = (dirtySum > 0xFF);
2509 parentObj.registerA = dirtySum & 0xFF;
2510 parentObj.FZero = (parentObj.registerA == 0);
2511 parentObj.FSubtract = false;
2515 function (parentObj) {
2516 var dirtySum = parentObj.registerA + (parentObj.registersHL >> 8);
2517 parentObj.FHalfCarry = ((dirtySum & 0xF) < (parentObj.registerA & 0xF));
2518 parentObj.FCarry = (dirtySum > 0xFF);
2519 parentObj.registerA = dirtySum & 0xFF;
2520 parentObj.FZero = (parentObj.registerA == 0);
2521 parentObj.FSubtract = false;
2525 function (parentObj) {
2526 var dirtySum = parentObj.registerA + (parentObj.registersHL & 0xFF);
2527 parentObj.FHalfCarry = ((dirtySum & 0xF) < (parentObj.registerA & 0xF));
2528 parentObj.FCarry = (dirtySum > 0xFF);
2529 parentObj.registerA = dirtySum & 0xFF;
2530 parentObj.FZero = (parentObj.registerA == 0);
2531 parentObj.FSubtract = false;
2535 function (parentObj) {
2536 var dirtySum = parentObj.registerA + parentObj.memoryReader[parentObj.registersHL](parentObj, parentObj.registersHL);
2537 parentObj.FHalfCarry = ((dirtySum & 0xF) < (parentObj.registerA & 0xF));
2538 parentObj.FCarry = (dirtySum > 0xFF);
2539 parentObj.registerA = dirtySum & 0xFF;
2540 parentObj.FZero = (parentObj.registerA == 0);
2541 parentObj.FSubtract = false;
2545 function (parentObj) {
2546 parentObj.FHalfCarry = ((parentObj.registerA & 0x8) == 0x8);
2547 parentObj.FCarry = (parentObj.registerA > 0x7F);
2548 parentObj.registerA = (parentObj.registerA << 1) & 0xFF;
2549 parentObj.FZero = (parentObj.registerA == 0);
2550 parentObj.FSubtract = false;
2554 function (parentObj) {
2555 var dirtySum = parentObj.registerA + parentObj.registerB + ((parentObj.FCarry) ? 1 : 0);
2556 parentObj.FHalfCarry = ((parentObj.registerA & 0xF) + (parentObj.registerB & 0xF) + ((parentObj.FCarry) ? 1 : 0) > 0xF);
2557 parentObj.FCarry = (dirtySum > 0xFF);
2558 parentObj.registerA = dirtySum & 0xFF;
2559 parentObj.FZero = (parentObj.registerA == 0);
2560 parentObj.FSubtract = false;
2564 function (parentObj) {
2565 var dirtySum = parentObj.registerA + parentObj.registerC + ((parentObj.FCarry) ? 1 : 0);
2566 parentObj.FHalfCarry = ((parentObj.registerA & 0xF) + (parentObj.registerC & 0xF) + ((parentObj.FCarry) ? 1 : 0) > 0xF);
2567 parentObj.FCarry = (dirtySum > 0xFF);
2568 parentObj.registerA = dirtySum & 0xFF;
2569 parentObj.FZero = (parentObj.registerA == 0);
2570 parentObj.FSubtract = false;
2574 function (parentObj) {
2575 var dirtySum = parentObj.registerA + parentObj.registerD + ((parentObj.FCarry) ? 1 : 0);
2576 parentObj.FHalfCarry = ((parentObj.registerA & 0xF) + (parentObj.registerD & 0xF) + ((parentObj.FCarry) ? 1 : 0) > 0xF);
2577 parentObj.FCarry = (dirtySum > 0xFF);
2578 parentObj.registerA = dirtySum & 0xFF;
2579 parentObj.FZero = (parentObj.registerA == 0);
2580 parentObj.FSubtract = false;
2584 function (parentObj) {
2585 var dirtySum = parentObj.registerA + parentObj.registerE + ((parentObj.FCarry) ? 1 : 0);
2586 parentObj.FHalfCarry = ((parentObj.registerA & 0xF) + (parentObj.registerE & 0xF) + ((parentObj.FCarry) ? 1 : 0) > 0xF);
2587 parentObj.FCarry = (dirtySum > 0xFF);
2588 parentObj.registerA = dirtySum & 0xFF;
2589 parentObj.FZero = (parentObj.registerA == 0);
2590 parentObj.FSubtract = false;
2594 function (parentObj) {
2595 var tempValue = (parentObj.registersHL >> 8);
2596 var dirtySum = parentObj.registerA + tempValue + ((parentObj.FCarry) ? 1 : 0);
2597 parentObj.FHalfCarry = ((parentObj.registerA & 0xF) + (tempValue & 0xF) + ((parentObj.FCarry) ? 1 : 0) > 0xF);
2598 parentObj.FCarry = (dirtySum > 0xFF);
2599 parentObj.registerA = dirtySum & 0xFF;
2600 parentObj.FZero = (parentObj.registerA == 0);
2601 parentObj.FSubtract = false;
2605 function (parentObj) {
2606 var tempValue = (parentObj.registersHL & 0xFF);
2607 var dirtySum = parentObj.registerA + tempValue + ((parentObj.FCarry) ? 1 : 0);
2608 parentObj.FHalfCarry = ((parentObj.registerA & 0xF) + (tempValue & 0xF) + ((parentObj.FCarry) ? 1 : 0) > 0xF);
2609 parentObj.FCarry = (dirtySum > 0xFF);
2610 parentObj.registerA = dirtySum & 0xFF;
2611 parentObj.FZero = (parentObj.registerA == 0);
2612 parentObj.FSubtract = false;
2616 function (parentObj) {
2617 var tempValue = parentObj.memoryReader[parentObj.registersHL](parentObj, parentObj.registersHL);
2618 var dirtySum = parentObj.registerA + tempValue + ((parentObj.FCarry) ? 1 : 0);
2619 parentObj.FHalfCarry = ((parentObj.registerA & 0xF) + (tempValue & 0xF) + ((parentObj.FCarry) ? 1 : 0) > 0xF);
2620 parentObj.FCarry = (dirtySum > 0xFF);
2621 parentObj.registerA = dirtySum & 0xFF;
2622 parentObj.FZero = (parentObj.registerA == 0);
2623 parentObj.FSubtract = false;
2627 function (parentObj) {
2629 var dirtySum = (parentObj.registerA << 1) | ((parentObj.FCarry) ? 1 : 0);
2630 parentObj.FHalfCarry = ((((parentObj.registerA << 1) & 0x1E) | ((parentObj.FCarry) ? 1 : 0)) > 0xF);
2631 parentObj.FCarry = (dirtySum > 0xFF);
2632 parentObj.registerA = dirtySum & 0xFF;
2633 parentObj.FZero = (parentObj.registerA == 0);
2634 parentObj.FSubtract = false;
2638 function (parentObj) {
2639 var dirtySum = parentObj.registerA - parentObj.registerB;
2640 parentObj.FHalfCarry = ((parentObj.registerA & 0xF) < (dirtySum & 0xF));
2641 parentObj.FCarry = (dirtySum < 0);
2642 parentObj.registerA = dirtySum & 0xFF;
2643 parentObj.FZero = (dirtySum == 0);
2644 parentObj.FSubtract = true;
2648 function (parentObj) {
2649 var dirtySum = parentObj.registerA - parentObj.registerC;
2650 parentObj.FHalfCarry = ((parentObj.registerA & 0xF) < (dirtySum & 0xF));
2651 parentObj.FCarry = (dirtySum < 0);
2652 parentObj.registerA = dirtySum & 0xFF;
2653 parentObj.FZero = (dirtySum == 0);
2654 parentObj.FSubtract = true;
2658 function (parentObj) {
2659 var dirtySum = parentObj.registerA - parentObj.registerD;
2660 parentObj.FHalfCarry = ((parentObj.registerA & 0xF) < (dirtySum & 0xF));
2661 parentObj.FCarry = (dirtySum < 0);
2662 parentObj.registerA = dirtySum & 0xFF;
2663 parentObj.FZero = (dirtySum == 0);
2664 parentObj.FSubtract = true;
2668 function (parentObj) {
2669 var dirtySum = parentObj.registerA - parentObj.registerE;
2670 parentObj.FHalfCarry = ((parentObj.registerA & 0xF) < (dirtySum & 0xF));
2671 parentObj.FCarry = (dirtySum < 0);
2672 parentObj.registerA = dirtySum & 0xFF;
2673 parentObj.FZero = (dirtySum == 0);
2674 parentObj.FSubtract = true;
2678 function (parentObj) {
2679 var dirtySum = parentObj.registerA - (parentObj.registersHL >> 8);
2680 parentObj.FHalfCarry = ((parentObj.registerA & 0xF) < (dirtySum & 0xF));
2681 parentObj.FCarry = (dirtySum < 0);
2682 parentObj.registerA = dirtySum & 0xFF;
2683 parentObj.FZero = (dirtySum == 0);
2684 parentObj.FSubtract = true;
2688 function (parentObj) {
2689 var dirtySum = parentObj.registerA - (parentObj.registersHL & 0xFF);
2690 parentObj.FHalfCarry = ((parentObj.registerA & 0xF) < (dirtySum & 0xF));
2691 parentObj.FCarry = (dirtySum < 0);
2692 parentObj.registerA = dirtySum & 0xFF;
2693 parentObj.FZero = (dirtySum == 0);
2694 parentObj.FSubtract = true;
2698 function (parentObj) {
2699 var dirtySum = parentObj.registerA - parentObj.memoryReader[parentObj.registersHL](parentObj, parentObj.registersHL);
2700 parentObj.FHalfCarry = ((parentObj.registerA & 0xF) < (dirtySum & 0xF));
2701 parentObj.FCarry = (dirtySum < 0);
2702 parentObj.registerA = dirtySum & 0xFF;
2703 parentObj.FZero = (dirtySum == 0);
2704 parentObj.FSubtract = true;
2708 function (parentObj) {
2710 parentObj.registerA = 0;
2711 parentObj.FHalfCarry = parentObj.FCarry = false;
2712 parentObj.FZero = parentObj.FSubtract = true;
2716 function (parentObj) {
2717 var dirtySum = parentObj.registerA - parentObj.registerB - ((parentObj.FCarry) ? 1 : 0);
2718 parentObj.FHalfCarry = ((parentObj.registerA & 0xF) - (parentObj.registerB & 0xF) - ((parentObj.FCarry) ? 1 : 0) < 0);
2719 parentObj.FCarry = (dirtySum < 0);
2720 parentObj.registerA = dirtySum & 0xFF;
2721 parentObj.FZero = (parentObj.registerA == 0);
2722 parentObj.FSubtract = true;
2726 function (parentObj) {
2727 var dirtySum = parentObj.registerA - parentObj.registerC - ((parentObj.FCarry) ? 1 : 0);
2728 parentObj.FHalfCarry = ((parentObj.registerA & 0xF) - (parentObj.registerC & 0xF) - ((parentObj.FCarry) ? 1 : 0) < 0);
2729 parentObj.FCarry = (dirtySum < 0);
2730 parentObj.registerA = dirtySum & 0xFF;
2731 parentObj.FZero = (parentObj.registerA == 0);
2732 parentObj.FSubtract = true;
2736 function (parentObj) {
2737 var dirtySum = parentObj.registerA - parentObj.registerD - ((parentObj.FCarry) ? 1 : 0);
2738 parentObj.FHalfCarry = ((parentObj.registerA & 0xF) - (parentObj.registerD & 0xF) - ((parentObj.FCarry) ? 1 : 0) < 0);
2739 parentObj.FCarry = (dirtySum < 0);
2740 parentObj.registerA = dirtySum & 0xFF;
2741 parentObj.FZero = (parentObj.registerA == 0);
2742 parentObj.FSubtract = true;
2746 function (parentObj) {
2747 var dirtySum = parentObj.registerA - parentObj.registerE - ((parentObj.FCarry) ? 1 : 0);
2748 parentObj.FHalfCarry = ((parentObj.registerA & 0xF) - (parentObj.registerE & 0xF) - ((parentObj.FCarry) ? 1 : 0) < 0);
2749 parentObj.FCarry = (dirtySum < 0);
2750 parentObj.registerA = dirtySum & 0xFF;
2751 parentObj.FZero = (parentObj.registerA == 0);
2752 parentObj.FSubtract = true;
2756 function (parentObj) {
2757 var temp_var = parentObj.registersHL >> 8;
2758 var dirtySum = parentObj.registerA - temp_var - ((parentObj.FCarry) ? 1 : 0);
2759 parentObj.FHalfCarry = ((parentObj.registerA & 0xF) - (temp_var & 0xF) - ((parentObj.FCarry) ? 1 : 0) < 0);
2760 parentObj.FCarry = (dirtySum < 0);
2761 parentObj.registerA = dirtySum & 0xFF;
2762 parentObj.FZero = (parentObj.registerA == 0);
2763 parentObj.FSubtract = true;
2767 function (parentObj) {
2768 var dirtySum = parentObj.registerA - (parentObj.registersHL & 0xFF) - ((parentObj.FCarry) ? 1 : 0);
2769 parentObj.FHalfCarry = ((parentObj.registerA & 0xF) - (parentObj.registersHL & 0xF) - ((parentObj.FCarry) ? 1 : 0) < 0);
2770 parentObj.FCarry = (dirtySum < 0);
2771 parentObj.registerA = dirtySum & 0xFF;
2772 parentObj.FZero = (parentObj.registerA == 0);
2773 parentObj.FSubtract = true;
2777 function (parentObj) {
2778 var temp_var = parentObj.memoryReader[parentObj.registersHL](parentObj, parentObj.registersHL);
2779 var dirtySum = parentObj.registerA - temp_var - ((parentObj.FCarry) ? 1 : 0);
2780 parentObj.FHalfCarry = ((parentObj.registerA & 0xF) - (temp_var & 0xF) - ((parentObj.FCarry) ? 1 : 0) < 0);
2781 parentObj.FCarry = (dirtySum < 0);
2782 parentObj.registerA = dirtySum & 0xFF;
2783 parentObj.FZero = (parentObj.registerA == 0);
2784 parentObj.FSubtract = true;
2788 function (parentObj) {
2790 if (parentObj.FCarry) {
2791 parentObj.FZero = false;
2792 parentObj.FSubtract = parentObj.FHalfCarry = parentObj.FCarry = true;
2793 parentObj.registerA = 0xFF;
2796 parentObj.FHalfCarry = parentObj.FCarry = false;
2797 parentObj.FSubtract = parentObj.FZero = true;
2798 parentObj.registerA = 0;
2803 function (parentObj) {
2804 parentObj.registerA &= parentObj.registerB;
2805 parentObj.FZero = (parentObj.registerA == 0);
2806 parentObj.FHalfCarry = true;
2807 parentObj.FSubtract = parentObj.FCarry = false;
2811 function (parentObj) {
2812 parentObj.registerA &= parentObj.registerC;
2813 parentObj.FZero = (parentObj.registerA == 0);
2814 parentObj.FHalfCarry = true;
2815 parentObj.FSubtract = parentObj.FCarry = false;
2819 function (parentObj) {
2820 parentObj.registerA &= parentObj.registerD;
2821 parentObj.FZero = (parentObj.registerA == 0);
2822 parentObj.FHalfCarry = true;
2823 parentObj.FSubtract = parentObj.FCarry = false;
2827 function (parentObj) {
2828 parentObj.registerA &= parentObj.registerE;
2829 parentObj.FZero = (parentObj.registerA == 0);
2830 parentObj.FHalfCarry = true;
2831 parentObj.FSubtract = parentObj.FCarry = false;
2835 function (parentObj) {
2836 parentObj.registerA &= (parentObj.registersHL >> 8);
2837 parentObj.FZero = (parentObj.registerA == 0);
2838 parentObj.FHalfCarry = true;
2839 parentObj.FSubtract = parentObj.FCarry = false;
2843 function (parentObj) {
2844 parentObj.registerA &= parentObj.registersHL;
2845 parentObj.FZero = (parentObj.registerA == 0);
2846 parentObj.FHalfCarry = true;
2847 parentObj.FSubtract = parentObj.FCarry = false;
2851 function (parentObj) {
2852 parentObj.registerA &= parentObj.memoryReader[parentObj.registersHL](parentObj, parentObj.registersHL);
2853 parentObj.FZero = (parentObj.registerA == 0);
2854 parentObj.FHalfCarry = true;
2855 parentObj.FSubtract = parentObj.FCarry = false;
2859 function (parentObj) {
2861 parentObj.FZero = (parentObj.registerA == 0);
2862 parentObj.FHalfCarry = true;
2863 parentObj.FSubtract = parentObj.FCarry = false;
2867 function (parentObj) {
2868 parentObj.registerA ^= parentObj.registerB;
2869 parentObj.FZero = (parentObj.registerA == 0);
2870 parentObj.FSubtract = parentObj.FHalfCarry = parentObj.FCarry = false;
2874 function (parentObj) {
2875 parentObj.registerA ^= parentObj.registerC;
2876 parentObj.FZero = (parentObj.registerA == 0);
2877 parentObj.FSubtract = parentObj.FHalfCarry = parentObj.FCarry = false;
2881 function (parentObj) {
2882 parentObj.registerA ^= parentObj.registerD;
2883 parentObj.FZero = (parentObj.registerA == 0);
2884 parentObj.FSubtract = parentObj.FHalfCarry = parentObj.FCarry = false;
2888 function (parentObj) {
2889 parentObj.registerA ^= parentObj.registerE;
2890 parentObj.FZero = (parentObj.registerA == 0);
2891 parentObj.FSubtract = parentObj.FHalfCarry = parentObj.FCarry = false;
2895 function (parentObj) {
2896 parentObj.registerA ^= (parentObj.registersHL >> 8);
2897 parentObj.FZero = (parentObj.registerA == 0);
2898 parentObj.FSubtract = parentObj.FHalfCarry = parentObj.FCarry = false;
2902 function (parentObj) {
2903 parentObj.registerA ^= (parentObj.registersHL & 0xFF);
2904 parentObj.FZero = (parentObj.registerA == 0);
2905 parentObj.FSubtract = parentObj.FHalfCarry = parentObj.FCarry = false;
2909 function (parentObj) {
2910 parentObj.registerA ^= parentObj.memoryReader[parentObj.registersHL](parentObj, parentObj.registersHL);
2911 parentObj.FZero = (parentObj.registerA == 0);
2912 parentObj.FSubtract = parentObj.FHalfCarry = parentObj.FCarry = false;
2916 function (parentObj) {
2918 parentObj.registerA = 0;
2919 parentObj.FZero = true;
2920 parentObj.FSubtract = parentObj.FHalfCarry = parentObj.FCarry = false;
2924 function (parentObj) {
2925 parentObj.registerA |= parentObj.registerB;
2926 parentObj.FZero = (parentObj.registerA == 0);
2927 parentObj.FSubtract = parentObj.FCarry = parentObj.FHalfCarry = false;
2931 function (parentObj) {
2932 parentObj.registerA |= parentObj.registerC;
2933 parentObj.FZero = (parentObj.registerA == 0);
2934 parentObj.FSubtract = parentObj.FCarry = parentObj.FHalfCarry = false;
2938 function (parentObj) {
2939 parentObj.registerA |= parentObj.registerD;
2940 parentObj.FZero = (parentObj.registerA == 0);
2941 parentObj.FSubtract = parentObj.FCarry = parentObj.FHalfCarry = false;
2945 function (parentObj) {
2946 parentObj.registerA |= parentObj.registerE;
2947 parentObj.FZero = (parentObj.registerA == 0);
2948 parentObj.FSubtract = parentObj.FCarry = parentObj.FHalfCarry = false;
2952 function (parentObj) {
2953 parentObj.registerA |= (parentObj.registersHL >> 8);
2954 parentObj.FZero = (parentObj.registerA == 0);
2955 parentObj.FSubtract = parentObj.FCarry = parentObj.FHalfCarry = false;
2959 function (parentObj) {
2960 parentObj.registerA |= (parentObj.registersHL & 0xFF);
2961 parentObj.FZero = (parentObj.registerA == 0);
2962 parentObj.FSubtract = parentObj.FCarry = parentObj.FHalfCarry = false;
2966 function (parentObj) {
2967 parentObj.registerA |= parentObj.memoryReader[parentObj.registersHL](parentObj, parentObj.registersHL);
2968 parentObj.FZero = (parentObj.registerA == 0);
2969 parentObj.FSubtract = parentObj.FCarry = parentObj.FHalfCarry = false;
2973 function (parentObj) {
2975 parentObj.FZero = (parentObj.registerA == 0);
2976 parentObj.FSubtract = parentObj.FCarry = parentObj.FHalfCarry = false;
2980 function (parentObj) {
2981 var dirtySum = parentObj.registerA - parentObj.registerB;
2982 parentObj.FHalfCarry = ((dirtySum & 0xF) > (parentObj.registerA & 0xF));
2983 parentObj.FCarry = (dirtySum < 0);
2984 parentObj.FZero = (dirtySum == 0);
2985 parentObj.FSubtract = true;
2989 function (parentObj) {
2990 var dirtySum = parentObj.registerA - parentObj.registerC;
2991 parentObj.FHalfCarry = ((dirtySum & 0xF) > (parentObj.registerA & 0xF));
2992 parentObj.FCarry = (dirtySum < 0);
2993 parentObj.FZero = (dirtySum == 0);
2994 parentObj.FSubtract = true;
2998 function (parentObj) {
2999 var dirtySum = parentObj.registerA - parentObj.registerD;
3000 parentObj.FHalfCarry = ((dirtySum & 0xF) > (parentObj.registerA & 0xF));
3001 parentObj.FCarry = (dirtySum < 0);
3002 parentObj.FZero = (dirtySum == 0);
3003 parentObj.FSubtract = true;
3007 function (parentObj) {
3008 var dirtySum = parentObj.registerA - parentObj.registerE;
3009 parentObj.FHalfCarry = ((dirtySum & 0xF) > (parentObj.registerA & 0xF));
3010 parentObj.FCarry = (dirtySum < 0);
3011 parentObj.FZero = (dirtySum == 0);
3012 parentObj.FSubtract = true;
3016 function (parentObj) {
3017 var dirtySum = parentObj.registerA - (parentObj.registersHL >> 8);
3018 parentObj.FHalfCarry = ((dirtySum & 0xF) > (parentObj.registerA & 0xF));
3019 parentObj.FCarry = (dirtySum < 0);
3020 parentObj.FZero = (dirtySum == 0);
3021 parentObj.FSubtract = true;
3025 function (parentObj) {
3026 var dirtySum = parentObj.registerA - (parentObj.registersHL & 0xFF);
3027 parentObj.FHalfCarry = ((dirtySum & 0xF) > (parentObj.registerA & 0xF));
3028 parentObj.FCarry = (dirtySum < 0);
3029 parentObj
3030 parentObj.FSubtract = true;
3034 function (parentObj) {
3035 var dirtySum = parentObj.registerA - parentObj.memoryReader[parentObj.registersHL](parentObj, parentObj.registersHL);
3036 parentObj.FHalfCarry = ((dirtySum & 0xF) > (parentObj.registerA & 0xF));
3037 parentObj.FCarry = (dirtySum < 0);
3038 parentObj.FZero = (dirtySum == 0);
3039 parentObj.FSubtract = true;
3043 function (parentObj) {
3044 parentObj.FHalfCarry = parentObj.FCarry = false;
3045 parentObj.FZero = parentObj.FSubtract = true;
3049 function (parentObj) {
3050 if (!parentObj.FZero) {
3051 parentObj.programCounter = (parentObj.memoryRead((parentObj.stackPointer + 1) & 0xFFFF) << 8) | parentObj.memoryReader[parentObj.stackPointer](parentObj, parentObj.stackPointer);
3052 parentObj.stackPointer = (parentObj.stackPointer + 2) & 0xFFFF;
3053 parentObj.CPUTicks += 12;
3058 function (parentObj) {
3059 parentObj.registerC = parentObj.memoryReader[parentObj.stackPointer](parentObj, parentObj.stackPointer);
3060 parentObj.registerB = parentObj.memoryRead((parentObj.stackPointer + 1) & 0xFFFF);
3061 parentObj.stackPointer = (parentObj.stackPointer + 2) & 0xFFFF;
3065 function (parentObj) {
3066 if (!parentObj.FZero) {
3067 parentObj.programCounter = (parentObj.memoryRead((parentObj.programCounter + 1) & 0xFFFF) << 8) | parentObj.memoryReader[parentObj.programCounter](parentObj, parentObj.programCounter);
3068 parentObj.CPUTicks += 4;
3071 parentObj.programCounter = (parentObj.programCounter + 2) & 0xFFFF;
3076 function (parentObj) {
3077 parentObj.programCounter = (parentObj.memoryRead((parentObj.programCounter + 1) & 0xFFFF) << 8) | parentObj.memoryReader[parentObj.programCounter](parentObj, parentObj.programCounter);
3081 function (parentObj) {
3082 if (!parentObj.FZero) {
3083 var temp_pc = (parentObj.memoryRead((parentObj.programCounter + 1) & 0xFFFF) << 8) | parentObj.memoryReader[parentObj.programCounter](parentObj, parentObj.programCounter);
3084 parentObj.programCounter = (parentObj.programCounter + 2) & 0xFFFF;
3085 parentObj.stackPointer = (parentObj.stackPointer - 1) & 0xFFFF;
3086 parentObj.memoryWriter[parentObj.stackPointer](parentObj, parentObj.stackPointer, parentObj.programCounter >> 8);
3087 parentObj.stackPointer = (parentObj.stackPointer - 1) & 0xFFFF;
3088 parentObj.memoryWriter[parentObj.stackPointer](parentObj, parentObj.stackPointer, parentObj.programCounter & 0xFF);
3089 parentObj.programCounter = temp_pc;
3090 parentObj.CPUTicks += 12;
3093 parentObj.programCounter = (parentObj.programCounter + 2) & 0xFFFF;
3098 function (parentObj) {
3099 parentObj.stackPointer = (parentObj.stackPointer - 1) & 0xFFFF;
3100 parentObj.memoryWriter[parentObj.stackPointer](parentObj, parentObj.stackPointer, parentObj.registerB);
3101 parentObj.stackPointer = (parentObj.stackPointer - 1) & 0xFFFF;
3102 parentObj.memoryWriter[parentObj.stackPointer](parentObj, parentObj.stackPointer, parentObj.registerC);
3106 function (parentObj) {
3107 var dirtySum = parentObj.registerA + parentObj.memoryReader[parentObj.programCounter](parentObj, parentObj.programCounter);
3108 parentObj.programCounter = (parentObj.programCounter + 1) & 0xFFFF;
3109 parentObj.FHalfCarry = ((dirtySum & 0xF) < (parentObj.registerA & 0xF));
3110 parentObj.FCarry = (dirtySum > 0xFF);
3111 parentObj.registerA = dirtySum & 0xFF;
3112 parentObj.FZero = (parentObj.registerA == 0);
3113 parentObj.FSubtract = false;
3117 function (parentObj) {
3118 parentObj.stackPointer = (parentObj.stackPointer - 1) & 0xFFFF;
3119 parentObj.memoryWriter[parentObj.stackPointer](parentObj, parentObj.stackPointer, parentObj.programCounter >> 8);
3120 parentObj.stackPointer = (parentObj.stackPointer - 1) & 0xFFFF;
3121 parentObj.memoryWriter[parentObj.stackPointer](parentObj, parentObj.stackPointer, parentObj.programCounter & 0xFF);
3122 parentObj.programCounter = 0;
3126 function (parentObj) {
3127 if (parentObj.FZero) {
3128 parentObj.programCounter = (parentObj.memoryRead((parentObj.stackPointer + 1) & 0xFFFF) << 8) | parentObj.memoryReader[parentObj.stackPointer](parentObj, parentObj.stackPointer);
3129 parentObj.stackPointer = (parentObj.stackPointer + 2) & 0xFFFF;
3130 parentObj.CPUTicks += 12;
3135 function (parentObj) {
3136 parentObj.programCounter = (parentObj.memoryRead((parentObj.stackPointer + 1) & 0xFFFF) << 8) | parentObj.memoryReader[parentObj.stackPointer](parentObj, parentObj.stackPointer);
3137 parentObj.stackPointer = (parentObj.stackPointer + 2) & 0xFFFF;
3141 function (parentObj) {
3142 if (parentObj.FZero) {
3143 parentObj.programCounter = (parentObj.memoryRead((parentObj.programCounter + 1) & 0xFFFF) << 8) | parentObj.memoryReader[parentObj.programCounter](parentObj, parentObj.programCounter);
3144 parentObj.CPUTicks += 4;
3147 parentObj.programCounter = (parentObj.programCounter + 2) & 0xFFFF;
3152 function (parentObj) {
3153 var opcode = parentObj.memoryReader[parentObj.programCounter](parentObj, parentObj.programCounter);
3155 parentObj.programCounter = (parentObj.programCounter + 1) & 0xFFFF;
3157 parentObj.CPUTicks += parentObj.SecondaryTICKTable[opcode];
3159 parentObj.CBOPCODE[opcode](parentObj);
3163 function (parentObj) {
3164 if (parentObj.FZero) {
3165 var temp_pc = (parentObj.memoryRead((parentObj.programCounter + 1) & 0xFFFF) << 8) | parentObj.memoryReader[parentObj.programCounter](parentObj, parentObj.programCounter);
3166 parentObj.programCounter = (parentObj.programCounter + 2) & 0xFFFF;
3167 parentObj.stackPointer = (parentObj.stackPointer - 1) & 0xFFFF;
3168 parentObj.memoryWriter[parentObj.stackPointer](parentObj, parentObj.stackPointer, parentObj.programCounter >> 8);
3169 parentObj.stackPointer = (parentObj.stackPointer - 1) & 0xFFFF;
3170 parentObj.memoryWriter[parentObj.stackPointer](parentObj, parentObj.stackPointer, parentObj.programCounter & 0xFF);
3171 parentObj.programCounter = temp_pc;
3172 parentObj.CPUTicks += 12;
3175 parentObj.programCounter = (parentObj.programCounter + 2) & 0xFFFF;
3180 function (parentObj) {
3181 var temp_pc = (parentObj.memoryRead((parentObj.programCounter + 1) & 0xFFFF) << 8) | parentObj.memoryReader[parentObj.programCounter](parentObj, parentObj.programCounter);
3182 parentObj.programCounter = (parentObj.programCounter + 2) & 0xFFFF;
3183 parentObj.stackPointer = (parentObj.stackPointer - 1) & 0xFFFF;
3184 parentObj.memoryWriter[parentObj.stackPointer](parentObj, parentObj.stackPointer, parentObj.programCounter >> 8);
3185 parentObj.stackPointer = (parentObj.stackPointer - 1) & 0xFFFF;
3186 parentObj.memoryWriter[parentObj.stackPointer](parentObj, parentObj.stackPointer, parentObj.programCounter & 0xFF);
3187 parentObj.programCounter = temp_pc;
3191 function (parentObj) {
3192 var tempValue = parentObj.memoryReader[parentObj.programCounter](parentObj, parentObj.programCounter);
3193 parentObj.programCounter = (parentObj.programCounter + 1) & 0xFFFF;
3194 var dirtySum = parentObj.registerA + tempValue + ((parentObj.FCarry) ? 1 : 0);
3195 parentObj.FHalfCarry = ((parentObj.registerA & 0xF) + (tempValue & 0xF) + ((parentObj.FCarry) ? 1 : 0) > 0xF);
3196 parentObj.FCarry = (dirtySum > 0xFF);
3197 parentObj.registerA = dirtySum & 0xFF;
3198 parentObj.FZero = (parentObj.registerA == 0);
3199 parentObj.FSubtract = false;
3203 function (parentObj) {
3204 parentObj.stackPointer = (parentObj.stackPointer - 1) & 0xFFFF;
3205 parentObj.memoryWriter[parentObj.stackPointer](parentObj, parentObj.stackPointer, parentObj.programCounter >> 8);
3206 parentObj.stackPointer = (parentObj.stackPointer - 1) & 0xFFFF;
3207 parentObj.memoryWriter[parentObj.stackPointer](parentObj, parentObj.stackPointer, parentObj.programCounter & 0xFF);
3208 parentObj.programCounter = 0x8;
3212 function (parentObj) {
3213 if (!parentObj.FCarry) {
3214 parentObj.programCounter = (parentObj.memoryRead((parentObj.stackPointer + 1) & 0xFFFF) << 8) | parentObj.memoryReader[parentObj.stackPointer](parentObj, parentObj.stackPointer);
3215 parentObj.stackPointer = (parentObj.stackPointer + 2) & 0xFFFF;
3216 parentObj.CPUTicks += 12;
3221 function (parentObj) {
3222 parentObj.registerE = parentObj.memoryReader[parentObj.stackPointer](parentObj, parentObj.stackPointer);
3223 parentObj.registerD = parentObj.memoryRead((parentObj.stackPointer + 1) & 0xFFFF);
3224 parentObj.stackPointer = (parentObj.stackPointer + 2) & 0xFFFF;
3228 function (parentObj) {
3229 if (!parentObj.FCarry) {
3230 parentObj.programCounter = (parentObj.memoryRead((parentObj.programCounter + 1) & 0xFFFF) << 8) | parentObj.memoryReader[parentObj.programCounter](parentObj, parentObj.programCounter);
3231 parentObj.CPUTicks += 4;
3234 parentObj.programCounter = (parentObj.programCounter + 2) & 0xFFFF;
3239 function (parentObj) {
3245 function (parentObj) {
3246 if (!parentObj.FCarry) {
3247 var temp_pc = (parentObj.memoryRead((parentObj.programCounter + 1) & 0xFFFF) << 8) | parentObj.memoryReader[parentObj.programCounter](parentObj, parentObj.programCounter);
3248 parentObj.programCounter = (parentObj.programCounter + 2) & 0xFFFF;
3249 parentObj.stackPointer = (parentObj.stackPointer - 1) & 0xFFFF;
3250 parentObj.memoryWriter[parentObj.stackPointer](parentObj, parentObj.stackPointer, parentObj.programCounter >> 8);
3251 parentObj.stackPointer = (parentObj.stackPointer - 1) & 0xFFFF;
3252 parentObj.memoryWriter[parentObj.stackPointer](parentObj, parentObj.stackPointer, parentObj.programCounter & 0xFF);
3253 parentObj.programCounter = temp_pc;
3254 parentObj.CPUTicks += 12;
3257 parentObj.programCounter = (parentObj.programCounter + 2) & 0xFFFF;
3262 function (parentObj) {
3263 parentObj.stackPointer = (parentObj.stackPointer - 1) & 0xFFFF;
3264 parentObj.memoryWriter[parentObj.stackPointer](parentObj, parentObj.stackPointer, parentObj.registerD);
3265 parentObj.stackPointer = (parentObj.stackPointer - 1) & 0xFFFF;
3266 parentObj.memoryWriter[parentObj.stackPointer](parentObj, parentObj.stackPointer, parentObj.registerE);
3270 function (parentObj) {
3271 var dirtySum = parentObj.registerA - parentObj.memoryReader[parentObj.programCounter](parentObj, parentObj.programCounter);
3272 parentObj.programCounter = (parentObj.programCounter + 1) & 0xFFFF;
3273 parentObj.FHalfCarry = ((parentObj.registerA & 0xF) < (dirtySum & 0xF));
3274 parentObj.FCarry = (dirtySum < 0);
3275 parentObj.registerA = dirtySum & 0xFF;
3276 parentObj.FZero = (dirtySum == 0);
3277 parentObj.FSubtract = true;
3281 function (parentObj) {
3282 parentObj.stackPointer = (parentObj.stackPointer - 1) & 0xFFFF;
3283 parentObj.memoryWriter[parentObj.stackPointer](parentObj, parentObj.stackPointer, parentObj.programCounter >> 8);
3284 parentObj.stackPointer = (parentObj.stackPointer - 1) & 0xFFFF;
3285 parentObj.memoryWriter[parentObj.stackPointer](parentObj, parentObj.stackPointer, parentObj.programCounter & 0xFF);
3286 parentObj.programCounter = 0x10;
3290 function (parentObj) {
3291 if (parentObj.FCarry) {
3292 parentObj.programCounter = (parentObj.memoryRead((parentObj.stackPointer + 1) & 0xFFFF) << 8) | parentObj.memoryReader[parentObj.stackPointer](parentObj, parentObj.stackPointer);
3293 parentObj.stackPointer = (parentObj.stackPointer + 2) & 0xFFFF;
3294 parentObj.CPUTicks += 12;
3299 function (parentObj) {
3300 parentObj.programCounter = (parentObj.memoryRead((parentObj.stackPointer + 1) & 0xFFFF) << 8) | parentObj.memoryReader[parentObj.stackPointer](parentObj, parentObj.stackPointer);
3301 parentObj.stackPointer = (parentObj.stackPointer + 2) & 0xFFFF;
3303 parentObj.IRQEnableDelay = (parentObj.IRQEnableDelay == 2 || parentObj.memoryReader[parentObj.programCounter](parentObj, parentObj.programCounter) == 0x76) ? 1 : 2;
3307 function (parentObj) {
3308 if (parentObj.FCarry) {
3309 parentObj.programCounter = (parentObj.memoryRead((parentObj.programCounter + 1) & 0xFFFF) << 8) | parentObj.memoryReader[parentObj.programCounter](parentObj, parentObj.programCounter);
3310 parentObj.CPUTicks += 4;
3313 parentObj.programCounter = (parentObj.programCounter + 2) & 0xFFFF;
3318 function (parentObj) {
3324 function (parentObj) {
3325 if (parentObj.FCarry) {
3326 var temp_pc = (parentObj.memoryRead((parentObj.programCounter + 1) & 0xFFFF) << 8) | parentObj.memoryReader[parentObj.programCounter](parentObj, parentObj.programCounter);
3327 parentObj.programCounter = (parentObj.programCounter + 2) & 0xFFFF;
3328 parentObj.stackPointer = (parentObj.stackPointer - 1) & 0xFFFF;
3329 parentObj.memoryWriter[parentObj.stackPointer](parentObj, parentObj.stackPointer, parentObj.programCounter >> 8);
3330 parentObj.stackPointer = (parentObj.stackPointer - 1) & 0xFFFF;
3331 parentObj.memoryWriter[parentObj.stackPointer](parentObj, parentObj.stackPointer, parentObj.programCounter & 0xFF);
3332 parentObj.programCounter = temp_pc;
3333 parentObj.CPUTicks += 12;
3336 parentObj.programCounter = (parentObj.programCounter + 2) & 0xFFFF;
3341 function (parentObj) {
3347 function (parentObj) {
3348 var temp_var = parentObj.memoryReader[parentObj.programCounter](parentObj, parentObj.programCounter);
3349 parentObj.programCounter = (parentObj.programCounter + 1) & 0xFFFF;
3350 var dirtySum = parentObj.registerA - temp_var - ((parentObj.FCarry) ? 1 : 0);
3351 parentObj.FHalfCarry = ((parentObj.registerA & 0xF) - (temp_var & 0xF) - ((parentObj.FCarry) ? 1 : 0) < 0);
3352 parentObj.FCarry = (dirtySum < 0);
3353 parentObj.registerA = dirtySum & 0xFF;
3354 parentObj.FZero = (parentObj.registerA == 0);
3355 parentObj.FSubtract = true;
3359 function (parentObj) {
3360 parentObj.stackPointer = (parentObj.stackPointer - 1) & 0xFFFF;
3361 parentObj.memoryWriter[parentObj.stackPointer](parentObj, parentObj.stackPointer, parentObj.programCounter >> 8);
3362 parentObj.stackPointer = (parentObj.stackPointer - 1) & 0xFFFF;
3363 parentObj.memoryWriter[parentObj.stackPointer](parentObj, parentObj.stackPointer, parentObj.programCounter & 0xFF);
3364 parentObj.programCounter = 0x18;
3368 function (parentObj) {
3369 parentObj.memoryHighWrite(parentObj.memoryReader[parentObj.programCounter](parentObj, parentObj.programCounter), parentObj.registerA);
3370 parentObj.programCounter = (parentObj.programCounter + 1) & 0xFFFF;
3374 function (parentObj) {
3375 parentObj.registersHL = (parentObj.memoryRead((parentObj.stackPointer + 1) & 0xFFFF) << 8) | parentObj.memoryReader[parentObj.stackPointer](parentObj, parentObj.stackPointer);
3376 parentObj.stackPointer = (parentObj.stackPointer + 2) & 0xFFFF;
3380 function (parentObj) {
3381 parentObj.memoryHighWriter[parentObj.registerC](parentObj, parentObj.registerC, parentObj.registerA);
3385 function (parentObj) {
3391 function (parentObj) {
3397 function (parentObj) {
3398 parentObj.stackPointer = (parentObj.stackPointer - 1) & 0xFFFF;
3399 parentObj.memoryWriter[parentObj.stackPointer](parentObj, parentObj.stackPointer, parentObj.registersHL >> 8);
3400 parentObj.stackPointer = (parentObj.stackPointer - 1) & 0xFFFF;
3401 parentObj.memoryWriter[parentObj.stackPointer](parentObj, parentObj.stackPointer, parentObj.registersHL & 0xFF);
3405 function (parentObj) {
3406 parentObj.registerA &= parentObj.memoryReader[parentObj.programCounter](parentObj, parentObj.programCounter);
3407 parentObj.programCounter = (parentObj.programCounter + 1) & 0xFFFF;
3408 parentObj.FZero = (parentObj.registerA == 0);
3409 parentObj.FHalfCarry = true;
3410 parentObj.FSubtract = parentObj.FCarry = false;
3414 function (parentObj) {
3415 parentObj.stackPointer = (parentObj.stackPointer - 1) & 0xFFFF;
3416 parentObj.memoryWriter[parentObj.stackPointer](parentObj, parentObj.stackPointer, parentObj.programCounter >> 8);
3417 parentObj.stackPointer = (parentObj.stackPointer - 1) & 0xFFFF;
3418 parentObj.memoryWriter[parentObj.stackPointer](parentObj, parentObj.stackPointer, parentObj.programCounter & 0xFF);
3419 parentObj.programCounter = 0x20;
3423 function (parentObj) {
3424 var temp_value2 = (parentObj.memoryReader[parentObj.programCounter](parentObj, parentObj.programCounter) << 24) >> 24;
3425 parentObj.programCounter = (parentObj.programCounter + 1) & 0xFFFF;
3426 var temp_value = (parentObj.stackPointer + temp_value2) & 0xFFFF;
3427 temp_value2 = parentObj.stackPointer ^ temp_value2 ^ temp_value;
3428 parentObj.stackPointer = temp_value;
3429 parentObj.FCarry = ((temp_value2 & 0x100) == 0x100);
3430 parentObj.FHalfCarry = ((temp_value2 & 0x10) == 0x10);
3431 parentObj.FZero = parentObj.FSubtract = false;
3435 function (parentObj) {
3436 parentObj.programCounter = parentObj.registersHL;
3440 function (parentObj) {
3441 parentObj.memoryWrite((parentObj.memoryRead((parentObj.programCounter + 1) & 0xFFFF) << 8) | parentObj.memoryReader[parentObj.programCounter](parentObj, parentObj.programCounter), parentObj.registerA);
3442 parentObj.programCounter = (parentObj.programCounter + 2) & 0xFFFF;
3446 function (parentObj) {
3452 function (parentObj) {
3458 function (parentObj) {
3464 function (parentObj) {
3465 parentObj.registerA ^= parentObj.memoryReader[parentObj.programCounter](parentObj, parentObj.programCounter);
3466 parentObj.programCounter = (parentObj.programCounter + 1) & 0xFFFF;
3467 parentObj.FZero = (parentObj.registerA == 0);
3468 parentObj.FSubtract = parentObj.FHalfCarry = parentObj.FCarry = false;
3472 function (parentObj) {
3473 parentObj.stackPointer = (parentObj.stackPointer - 1) & 0xFFFF;
3474 parentObj.memoryWriter[parentObj.stackPointer](parentObj, parentObj.stackPointer, parentObj.programCounter >> 8);
3475 parentObj.stackPointer = (parentObj.stackPointer - 1) & 0xFFFF;
3476 parentObj.memoryWriter[parentObj.stackPointer](parentObj, parentObj.stackPointer, parentObj.programCounter & 0xFF);
3477 parentObj.programCounter = 0x28;
3481 function (parentObj) {
3482 parentObj.registerA = parentObj.memoryHighRead(parentObj.memoryReader[parentObj.programCounter](parentObj, parentObj.programCounter));
3483 parentObj.programCounter = (parentObj.programCounter + 1) & 0xFFFF;
3487 function (parentObj) {
3488 var temp_var = parentObj.memoryReader[parentObj.stackPointer](parentObj, parentObj.stackPointer);
3489 parentObj.FZero = (temp_var > 0x7F);
3490 parentObj.FSubtract = ((temp_var & 0x40) == 0x40);
3491 parentObj.FHalfCarry = ((temp_var & 0x20) == 0x20);
3492 parentObj.FCarry = ((temp_var & 0x10) == 0x10);
3493 parentObj.registerA = parentObj.memoryRead((parentObj.stackPointer + 1) & 0xFFFF);
3494 parentObj.stackPointer = (parentObj.stackPointer + 2) & 0xFFFF;
3498 function (parentObj) {
3499 parentObj.registerA = parentObj.memoryHighReader[parentObj.registerC](parentObj, parentObj.registerC);
3503 function (parentObj) {
3504 parentObj.IME = false;
3505 parentObj.IRQEnableDelay = 0;
3509 function (parentObj) {
3515 function (parentObj) {
3516 parentObj.stackPointer = (parentObj.stackPointer - 1) & 0xFFFF;
3517 parentObj.memoryWriter[parentObj.stackPointer](parentObj, parentObj.stackPointer, parentObj.registerA);
3518 parentObj.stackPointer = (parentObj.stackPointer - 1) & 0xFFFF;
3519 parentObj.memoryWriter[parentObj.stackPointer](parentObj, parentObj.stackPointer, ((parentObj.FZero) ? 0x80 : 0) | ((parentObj.FSubtract) ? 0x40 : 0) | ((parentObj.FHalfCarry) ? 0x20 : 0) | ((parentObj.FCarry) ? 0x10 : 0));
3523 function (parentObj) {
3524 parentObj.registerA |= parentObj.memoryReader[parentObj.programCounter](parentObj, parentObj.programCounter);
3525 parentObj.FZero = (parentObj.registerA == 0);
3526 parentObj.programCounter = (parentObj.programCounter + 1) & 0xFFFF;
3527 parentObj.FSubtract = parentObj.FCarry = parentObj.FHalfCarry = false;
3531 function (parentObj) {
3532 parentObj.stackPointer = (parentObj.stackPointer - 1) & 0xFFFF;
3533 parentObj.memoryWriter[parentObj.stackPointer](parentObj, parentObj.stackPointer, parentObj.programCounter >> 8);
3534 parentObj.stackPointer = (parentObj.stackPointer - 1) & 0xFFFF;
3535 parentObj.memoryWriter[parentObj.stackPointer](parentObj, parentObj.stackPointer, parentObj.programCounter & 0xFF);
3536 parentObj.programCounter = 0x30;
3540 function (parentObj) {
3541 var temp_var = (parentObj.memoryReader[parentObj.programCounter](parentObj, parentObj.programCounter) << 24) >> 24;
3542 parentObj.programCounter = (parentObj.programCounter + 1) & 0xFFFF;
3543 parentObj.registersHL = (parentObj.stackPointer + temp_var) & 0xFFFF;
3544 temp_var = parentObj.stackPointer ^ temp_var ^ parentObj.registersHL;
3545 parentObj.FCarry = ((temp_var & 0x100) == 0x100);
3546 parentObj.FHalfCarry = ((temp_var & 0x10) == 0x10);
3547 parentObj.FZero = parentObj.FSubtract = false;
3551 function (parentObj) {
3552 parentObj.stackPointer = parentObj.registersHL;
3556 function (parentObj) {
3557 parentObj.registerA = parentObj.memoryRead((parentObj.memoryRead((parentObj.programCounter + 1) & 0xFFFF) << 8) | parentObj.memoryReader[parentObj.programCounter](parentObj, parentObj.programCounter));
3558 parentObj.programCounter = (parentObj.programCounter + 2) & 0xFFFF;
3562 function (parentObj) {
3564 parentObj.IRQEnableDelay = (parentObj.IRQEnableDelay == 2 || parentObj.memoryReader[parentObj.programCounter](parentObj, parentObj.programCounter) == 0x76) ? 1 : 2;
3568 function (parentObj) {
3574 function (parentObj) {
3580 function (parentObj) {
3581 var dirtySum = parentObj.registerA - parentObj.memoryReader[parentObj.programCounter](parentObj, parentObj.programCounter);
3582 parentObj.programCounter = (parentObj.programCounter + 1) & 0xFFFF;
3583 parentObj.FHalfCarry = ((dirtySum & 0xF) > (parentObj.registerA & 0xF));
3584 parentObj.FCarry = (dirtySum < 0);
3585 parentObj.FZero = (dirtySum == 0);
3586 parentObj.FSubtract = true;
3590 function (parentObj) {
3591 parentObj.stackPointer = (parentObj.stackPointer - 1) & 0xFFFF;
3592 parentObj.memoryWriter[parentObj.stackPointer](parentObj, parentObj.stackPointer, parentObj.programCounter >> 8);
3593 parentObj.stackPointer = (parentObj.stackPointer - 1) & 0xFFFF;
3594 parentObj.memoryWriter[parentObj.stackPointer](parentObj, parentObj.stackPointer, parentObj.programCounter & 0xFF);
3595 parentObj.programCounter = 0x38;
3601 function (parentObj) {
3602 parentObj.FCarry = (parentObj.registerB > 0x7F);
3603 parentObj.registerB = ((parentObj.registerB << 1) & 0xFF) | ((parentObj.FCarry) ? 1 : 0);
3604 parentObj.FHalfCarry = parentObj.FSubtract = false;
3605 parentObj.FZero = (parentObj.registerB == 0);
3609 ,function (parentObj) {
3610 parentObj.FCarry = (parentObj.registerC > 0x7F);
3611 parentObj.registerC = ((parentObj.registerC << 1) & 0xFF) | ((parentObj.FCarry) ? 1 : 0);
3612 parentObj.FHalfCarry = parentObj.FSubtract = false;
3613 parentObj.FZero = (parentObj.registerC == 0);
3617 ,function (parentObj) {
3618 parentObj.FCarry = (parentObj.registerD > 0x7F);
3619 parentObj.registerD = ((parentObj.registerD << 1) & 0xFF) | ((parentObj.FCarry) ? 1 : 0);
3620 parentObj.FHalfCarry = parentObj.FSubtract = false;
3621 parentObj.FZero = (parentObj.registerD == 0);
3625 ,function (parentObj) {
3626 parentObj.FCarry = (parentObj.registerE > 0x7F);
3627 parentObj.registerE = ((parentObj.registerE << 1) & 0xFF) | ((parentObj.FCarry) ? 1 : 0);
3628 parentObj.FHalfCarry = parentObj.FSubtract = false;
3629 parentObj.FZero = (parentObj.registerE == 0);
3633 ,function (parentObj) {
3634 parentObj.FCarry = (parentObj.registersHL > 0x7FFF);
3635 parentObj.registersHL = ((parentObj.registersHL << 1) & 0xFE00) | ((parentObj.FCarry) ? 0x100 : 0) | (parentObj.registersHL & 0xFF);
3636 parentObj.FHalfCarry = parentObj.FSubtract = false;
3637 parentObj.FZero = (parentObj.registersHL < 0x100);
3641 ,function (parentObj) {
3642 parentObj.FCarry = ((parentObj.registersHL & 0x80) == 0x80);
3643 parentObj.registersHL = (parentObj.registersHL & 0xFF00) | ((parentObj.registersHL << 1) & 0xFF) | ((parentObj.FCarry) ? 1 : 0);
3644 parentObj.FHalfCarry = parentObj.FSubtract = false;
3645 parentObj.FZero = ((parentObj.registersHL & 0xFF) == 0);
3649 ,function (parentObj) {
3650 var temp_var = parentObj.memoryReader[parentObj.registersHL](parentObj, parentObj.registersHL);
3651 parentObj.FCarry = (temp_var > 0x7F);
3652 temp_var = ((temp_var << 1) & 0xFF) | ((parentObj.FCarry) ? 1 : 0);
3653 parentObj.memoryWriter[parentObj.registersHL](parentObj, parentObj.registersHL, temp_var);
3654 parentObj.FHalfCarry = parentObj.FSubtract = false;
3655 parentObj.FZero = (temp_var == 0);
3659 ,function (parentObj) {
3660 parentObj.FCarry = (parentObj.registerA > 0x7F);
3661 parentObj.registerA = ((parentObj.registerA << 1) & 0xFF) | ((parentObj.FCarry) ? 1 : 0);
3662 parentObj.FHalfCarry = parentObj.FSubtract = false;
3663 parentObj.FZero = (parentObj.registerA == 0);
3667 ,function (parentObj) {
3668 parentObj.FCarry = ((parentObj.registerB & 0x01) == 0x01);
3669 parentObj.registerB = ((parentObj.FCarry) ? 0x80 : 0) | (parentObj.registerB >> 1);
3670 parentObj.FHalfCarry = parentObj.FSubtract = false;
3671 parentObj.FZero = (parentObj.registerB == 0);
3675 ,function (parentObj) {
3676 parentObj.FCarry = ((parentObj.registerC & 0x01) == 0x01);
3677 parentObj.registerC = ((parentObj.FCarry) ? 0x80 : 0) | (parentObj.registerC >> 1);
3678 parentObj.FHalfCarry = parentObj.FSubtract = false;
3679 parentObj.FZero = (parentObj.registerC == 0);
3683 ,function (parentObj) {
3684 parentObj.FCarry = ((parentObj.registerD & 0x01) == 0x01);
3685 parentObj.registerD = ((parentObj.FCarry) ? 0x80 : 0) | (parentObj.registerD >> 1);
3686 parentObj.FHalfCarry = parentObj.FSubtract = false;
3687 parentObj.FZero = (parentObj.registerD == 0);
3691 ,function (parentObj) {
3692 parentObj.FCarry = ((parentObj.registerE & 0x01) == 0x01);
3693 parentObj.registerE = ((parentObj.FCarry) ? 0x80 : 0) | (parentObj.registerE >> 1);
3694 parentObj.FHalfCarry = parentObj.FSubtract = false;
3695 parentObj.FZero = (parentObj.registerE == 0);
3699 ,function (parentObj) {
3700 parentObj.FCarry = ((parentObj.registersHL & 0x0100) == 0x0100);
3701 parentObj.registersHL = ((parentObj.FCarry) ? 0x8000 : 0) | ((parentObj.registersHL >> 1) & 0xFF00) | (parentObj.registersHL & 0xFF);
3702 parentObj.FHalfCarry = parentObj.FSubtract = false;
3703 parentObj.FZero = (parentObj.registersHL < 0x100);
3707 ,function (parentObj) {
3708 parentObj.FCarry = ((parentObj.registersHL & 0x01) == 0x01);
3709 parentObj.registersHL = (parentObj.registersHL & 0xFF00) | ((parentObj.FCarry) ? 0x80 : 0) | ((parentObj.registersHL & 0xFF) >> 1);
3710 parentObj.FHalfCarry = parentObj.FSubtract = false;
3711 parentObj.FZero = ((parentObj.registersHL & 0xFF) == 0);
3715 ,function (parentObj) {
3716 var temp_var = parentObj.memoryReader[parentObj.registersHL](parentObj, parentObj.registersHL);
3717 parentObj.FCarry = ((temp_var & 0x01) == 0x01);
3718 temp_var = ((parentObj.FCarry) ? 0x80 : 0) | (temp_var >> 1);
3719 parentObj.memoryWriter[parentObj.registersHL](parentObj, parentObj.registersHL, temp_var);
3720 parentObj.FHalfCarry = parentObj.FSubtract = false;
3721 parentObj.FZero = (temp_var == 0);
3725 ,function (parentObj) {
3726 parentObj.FCarry = ((parentObj.registerA & 0x01) == 0x01);
3727 parentObj.registerA = ((parentObj.FCarry) ? 0x80 : 0) | (parentObj.registerA >> 1);
3728 parentObj.FHalfCarry = parentObj.FSubtract = false;
3729 parentObj.FZero = (parentObj.registerA == 0);
3733 ,function (parentObj) {
3734 var newFCarry = (parentObj.registerB > 0x7F);
3735 parentObj.registerB = ((parentObj.registerB << 1) & 0xFF) | ((parentObj.FCarry) ? 1 : 0);
3736 parentObj.FCarry = newFCarry;
3737 parentObj.FHalfCarry = parentObj.FSubtract = false;
3738 parentObj.FZero = (parentObj.registerB == 0);
3742 ,function (parentObj) {
3743 var newFCarry = (parentObj.registerC > 0x7F);
3744 parentObj.registerC = ((parentObj.registerC << 1) & 0xFF) | ((parentObj.FCarry) ? 1 : 0);
3745 parentObj.FCarry = newFCarry;
3746 parentObj.FHalfCarry = parentObj.FSubtract = false;
3747 parentObj.FZero = (parentObj.registerC == 0);
3751 ,function (parentObj) {
3752 var newFCarry = (parentObj.registerD > 0x7F);
3753 parentObj.registerD = ((parentObj.registerD << 1) & 0xFF) | ((parentObj.FCarry) ? 1 : 0);
3754 parentObj.FCarry = newFCarry;
3755 parentObj.FHalfCarry = parentObj.FSubtract = false;
3756 parentObj.FZero = (parentObj.registerD == 0);
3760 ,function (parentObj) {
3761 var newFCarry = (parentObj.registerE > 0x7F);
3762 parentObj.registerE = ((parentObj.registerE << 1) & 0xFF) | ((parentObj.FCarry) ? 1 : 0);
3763 parentObj.FCarry = newFCarry;
3764 parentObj.FHalfCarry = parentObj.FSubtract = false;
3765 parentObj.FZero = (parentObj.registerE == 0);
3769 ,function (parentObj) {
3770 var newFCarry = (parentObj.registersHL > 0x7FFF);
3771 parentObj.registersHL = ((parentObj.registersHL << 1) & 0xFE00) | ((parentObj.FCarry) ? 0x100 : 0) | (parentObj.registersHL & 0xFF);
3772 parentObj.FCarry = newFCarry;
3773 parentObj.FHalfCarry = parentObj.FSubtract = false;
3774 parentObj.FZero = (parentObj.registersHL < 0x100);
3778 ,function (parentObj) {
3779 var newFCarry = ((parentObj.registersHL & 0x80) == 0x80);
3780 parentObj.registersHL = (parentObj.registersHL & 0xFF00) | ((parentObj.registersHL << 1) & 0xFF) | ((parentObj.FCarry) ? 1 : 0);
3781 parentObj.FCarry = newFCarry;
3782 parentObj.FHalfCarry = parentObj.FSubtract = false;
3783 parentObj.FZero = ((parentObj.registersHL & 0xFF) == 0);
3787 ,function (parentObj) {
3788 var temp_var = parentObj.memoryReader[parentObj.registersHL](parentObj, parentObj.registersHL);
3790 temp_var = ((temp_var << 1) & 0xFF) | ((parentObj
3791 parentObj.FCarry = newFCarry;
3792 parentObj.memoryWriter[parentObj.registersHL](parentObj, parentObj.registersHL, temp_var);
3793 parentObj.FHalfCarry = parentObj.FSubtract = false;
3794 parentObj.FZero = (temp_var == 0);
3798 ,function (parentObj) {
3799 var newFCarry = (parentObj.registerA > 0x7F);
3800 parentObj.registerA = ((parentObj.registerA << 1) & 0xFF) | ((parentObj.FCarry) ? 1 : 0);
3801 parentObj.FCarry = newFCarry;
3802 parentObj.FHalfCarry = parentObj.FSubtract = false;
3803 parentObj.FZero = (parentObj.registerA == 0);
3807 ,function (parentObj) {
3808 var newFCarry = ((parentObj.registerB & 0x01) == 0x01);
3809 parentObj.registerB = ((parentObj.FCarry) ? 0x80 : 0) | (parentObj.registerB >> 1);
3810 parentObj.FCarry = newFCarry;
3811 parentObj.FHalfCarry = parentObj.FSubtract = false;
3812 parentObj.FZero = (parentObj.registerB == 0);
3816 ,function (parentObj) {
3817 var newFCarry = ((parentObj.registerC & 0x01) == 0x01);
3818 parentObj.registerC = ((parentObj.FCarry) ? 0x80 : 0) | (parentObj.registerC >> 1);
3819 parentObj.FCarry = newFCarry;
3820 parentObj.FHalfCarry = parentObj.FSubtract = false;
3821 parentObj.FZero = (parentObj.registerC == 0);
3825 ,function (parentObj) {
3826 var newFCarry = ((parentObj.registerD & 0x01) == 0x01);
3827 parentObj.registerD = ((parentObj.FCarry) ? 0x80 : 0) | (parentObj.registerD >> 1);
3828 parentObj.FCarry = newFCarry;
3829 parentObj.FHalfCarry = parentObj.FSubtract = false;
3830 parentObj.FZero = (parentObj.registerD == 0);
3834 ,function (parentObj) {
3835 var newFCarry = ((parentObj.registerE & 0x01) == 0x01);
3836 parentObj.registerE = ((parentObj.FCarry) ? 0x80 : 0) | (parentObj.registerE >> 1);
3837 parentObj.FCarry = newFCarry;
3838 parentObj.FHalfCarry = parentObj.FSubtract = false;
3839 parentObj.FZero = (parentObj.registerE == 0);
3843 ,function (parentObj) {
3844 var newFCarry = ((parentObj.registersHL & 0x0100) == 0x0100);
3845 parentObj.registersHL = ((parentObj.FCarry) ? 0x8000 : 0) | ((parentObj.registersHL >> 1) & 0xFF00) | (parentObj.registersHL & 0xFF);
3846 parentObj.FCarry = newFCarry;
3847 parentObj.FHalfCarry = parentObj.FSubtract = false;
3848 parentObj.FZero = (parentObj.registersHL < 0x100);
3852 ,function (parentObj) {
3853 var newFCarry = ((parentObj.registersHL & 0x01) == 0x01);
3854 parentObj.registersHL = (parentObj.registersHL & 0xFF00) | ((parentObj.FCarry) ? 0x80 : 0) | ((parentObj.registersHL & 0xFF) >> 1);
3855 parentObj.FCarry = newFCarry;
3856 parentObj.FHalfCarry = parentObj.FSubtract = false;
3857 parentObj.FZero = ((parentObj.registersHL & 0xFF) == 0);
3861 ,function (parentObj) {
3862 var temp_var = parentObj.memoryReader[parentObj.registersHL](parentObj, parentObj.registersHL);
3864 temp_var = ((parentObj.FCarry) ? 0x80 : 0) | (temp_var >> 1);
3865 parentObj.FCarry = newFCarry;
3866 parentObj.memoryWriter[parentObj.registersHL](parentObj, parentObj.registersHL, temp_var);
3867 parentObj.FHalfCarry = parentObj.FSubtract = false;
3868 parentObj.FZero = (temp_var == 0);
3872 ,function (parentObj) {
3873 var newFCarry = ((parentObj.registerA & 0x01) == 0x01);
3874 parentObj.registerA = ((parentObj.FCarry) ? 0x80 : 0) | (parentObj.registerA >> 1);
3875 parentObj.FCarry = newFCarry;
3876 parentObj.FHalfCarry = parentObj.FSubtract = false;
3877 parentObj.FZero = (parentObj.registerA == 0);
3881 ,function (parentObj) {
3882 parentObj.FCarry = (parentObj.registerB > 0x7F);
3883 parentObj.registerB = (parentObj.registerB << 1) & 0xFF;
3884 parentObj.FHalfCarry = parentObj.FSubtract = false;
3885 parentObj.FZero = (parentObj.registerB == 0);
3889 ,function (parentObj) {
3890 parentObj.FCarry = (parentObj.registerC > 0x7F);
3891 parentObj.registerC = (parentObj.registerC << 1) & 0xFF;
3892 parentObj.FHalfCarry = parentObj.FSubtract = false;
3893 parentObj.FZero = (parentObj.registerC == 0);
3897 ,function (parentObj) {
3898 parentObj.FCarry = (parentObj.registerD > 0x7F);
3899 parentObj.registerD = (parentObj.registerD << 1) & 0xFF;
3900 parentObj.FHalfCarry = parentObj.FSubtract = false;
3901 parentObj.FZero = (parentObj.registerD == 0);
3905 ,function (parentObj) {
3906 parentObj.FCarry = (parentObj.registerE > 0x7F);
3907 parentObj.registerE = (parentObj.registerE << 1) & 0xFF;
3908 parentObj.FHalfCarry = parentObj.FSubtract = false;
3909 parentObj.FZero = (parentObj.registerE == 0);
3913 ,function (parentObj) {
3914 parentObj.FCarry = (parentObj.registersHL > 0x7FFF);
3915 parentObj.registersHL = ((parentObj.registersHL << 1) & 0xFE00) | (parentObj.registersHL & 0xFF);
3916 parentObj.FHalfCarry = parentObj.FSubtract = false;
3917 parentObj.FZero = (parentObj.registersHL < 0x100);
3921 ,function (parentObj) {
3922 parentObj.FCarry = ((parentObj.registersHL & 0x0080) == 0x0080);
3923 parentObj.registersHL = (parentObj.registersHL & 0xFF00) | ((parentObj.registersHL << 1) & 0xFF);
3924 parentObj.FHalfCarry = parentObj.FSubtract = false;
3925 parentObj.FZero = ((parentObj.registersHL & 0xFF) == 0);
3929 ,function (parentObj) {
3930 var temp_var = parentObj.memoryReader[parentObj.registersHL](parentObj, parentObj.registersHL);
3931 parentObj.FCarry = (temp_var > 0x7F);
3933 parentObj.memoryWriter[parentObj.registersHL](parentObj, parentObj.registersHL, temp_var);
3934 parentObj.FHalfCarry = parentObj.FSubtract = false;
3935 parentObj.FZero = (temp_var == 0);
3939 ,function (parentObj) {
3940 parentObj.FCarry = (parentObj.registerA > 0x7F);
3941 parentObj.registerA = (parentObj.registerA << 1) & 0xFF;
3942 parentObj.FHalfCarry = parentObj.FSubtract = false;
3943 parentObj.FZero = (parentObj.registerA == 0);
3947 ,function (parentObj) {
3948 parentObj.FCarry = ((parentObj.registerB & 0x01) == 0x01);
3949 parentObj.registerB = (parentObj.registerB & 0x80) | (parentObj.registerB >> 1);
3950 parentObj.FHalfCarry = parentObj.FSubtract = false;
3951 parentObj.FZero = (parentObj.registerB == 0);
3955 ,function (parentObj) {
3956 parentObj.FCarry = ((parentObj.registerC & 0x01) == 0x01);
3957 parentObj.registerC = (parentObj.registerC & 0x80) | (parentObj.registerC >> 1);
3958 parentObj.FHalfCarry = parentObj.FSubtract = false;
3959 parentObj.FZero = (parentObj.registerC == 0);
3963 ,function (parentObj) {
3964 parentObj.FCarry = ((parentObj.registerD & 0x01) == 0x01);
3965 parentObj.registerD = (parentObj.registerD & 0x80) | (parentObj.registerD >> 1);
3966 parentObj.FHalfCarry = parentObj.FSubtract = false;
3967 parentObj.FZero = (parentObj.registerD == 0);
3971 ,function (parentObj) {
3972 parentObj.FCarry = ((parentObj.registerE & 0x01) == 0x01);
3973 parentObj.registerE = (parentObj.registerE & 0x80) | (parentObj.registerE >> 1);
3974 parentObj.FHalfCarry = parentObj.FSubtract = false;
3975 parentObj.FZero = (parentObj.registerE == 0);
3979 ,function (parentObj) {
3980 parentObj.FCarry = ((parentObj.registersHL & 0x0100) == 0x0100);
3981 parentObj.registersHL = ((parentObj.registersHL >> 1) & 0xFF00) | (parentObj.registersHL & 0x80FF);
3982 parentObj.FHalfCarry = parentObj.FSubtract = false;
3983 parentObj.FZero = (parentObj.registersHL < 0x100);
3987 ,function (parentObj) {
3988 parentObj.FCarry = ((parentObj.registersHL & 0x0001) == 0x0001);
3989 parentObj.registersHL = (parentObj.registersHL & 0xFF80) | ((parentObj.registersHL & 0xFF) >> 1);
3990 parentObj.FHalfCarry = parentObj.FSubtract = false;
3991 parentObj.FZero = ((parentObj.registersHL & 0xFF) == 0);
3995 ,function (parentObj) {
3996 var temp_var = parentObj.memoryReader[parentObj.registersHL](parentObj, parentObj.registersHL);
3997 parentObj.FCarry = ((temp_var & 0x01) == 0x01);
3999 parentObj.memoryWriter[parentObj.registersHL](parentObj, parentObj.registersHL, temp_var);
4000 parentObj.FHalfCarry = parentObj.FSubtract = false;
4001 parentObj.FZero = (temp_var == 0);
4005 ,function (parentObj) {
4006 parentObj.FCarry = ((parentObj.registerA & 0x01) == 0x01);
4007 parentObj.registerA = (parentObj.registerA & 0x80) | (parentObj.registerA >> 1);
4008 parentObj.FHalfCarry = parentObj.FSubtract = false;
4009 parentObj.FZero = (parentObj.registerA == 0);
4013 ,function (parentObj) {
4014 parentObj.registerB = ((parentObj.registerB & 0xF) << 4) | (parentObj.registerB >> 4);
4015 parentObj.FZero = (parentObj.registerB == 0);
4016 parentObj.FCarry = parentObj.FHalfCarry = parentObj.FSubtract = false;
4020 ,function (parentObj) {
4021 parentObj.registerC = ((parentObj.registerC & 0xF) << 4) | (parentObj.registerC >> 4);
4022 parentObj.FZero = (parentObj.registerC == 0);
4023 parentObj.FCarry = parentObj.FHalfCarry = parentObj.FSubtract = false;
4027 ,function (parentObj) {
4028 parentObj.registerD = ((parentObj.registerD & 0xF) << 4) | (parentObj.registerD >> 4);
4029 parentObj.FZero = (parentObj.registerD == 0);
4030 parentObj.FCarry = parentObj.FHalfCarry = parentObj.FSubtract = false;
4034 ,function (parentObj) {
4035 parentObj.registerE = ((parentObj.registerE & 0xF) << 4) | (parentObj.registerE >> 4);
4036 parentObj.FZero = (parentObj.registerE == 0);
4037 parentObj.FCarry = parentObj.FHalfCarry = parentObj.FSubtract = false;
4041 ,function (parentObj) {
4042 parentObj.registersHL = ((parentObj.registersHL & 0xF00) << 4) | ((parentObj.registersHL & 0xF000) >> 4) | (parentObj.registersHL & 0xFF);
4043 parentObj.FZero = (parentObj.registersHL < 0x100);
4044 parentObj.FCarry = parentObj.FHalfCarry = parentObj.FSubtract = false;
4048 ,function (parentObj) {
4049 parentObj.registersHL = (parentObj.registersHL & 0xFF00) | ((parentObj.registersHL & 0xF) << 4) | ((parentObj.registersHL & 0xF0) >> 4);
4050 parentObj.FZero = ((parentObj.registersHL & 0xFF) == 0);
4051 parentObj.FCarry = parentObj.FHalfCarry = parentObj.FSubtract = false;
4055 ,function (parentObj) {
4056 var temp_var = parentObj.memoryReader[parentObj.registersHL](parentObj, parentObj.registersHL);
4058 parentObj.memoryWriter[parentObj.registersHL](parentObj, parentObj.registersHL, temp_var);
4059 parentObj.FZero = (temp_var == 0);
4060 parentObj.FCarry = parentObj.FHalfCarry = parentObj.FSubtract = false;
4064 ,function (parentObj) {
4065 parentObj.registerA = ((parentObj.registerA & 0xF) << 4) | (parentObj.registerA >> 4);
4066 parentObj.FZero = (parentObj.registerA == 0);
4067 parentObj.FCarry = parentObj.FHalfCarry = parentObj.FSubtract = false;
4071 ,function (parentObj) {
4072 parentObj.FCarry = ((parentObj.registerB & 0x01) == 0x01);
4073 parentObj.registerB >>= 1;
4074 parentObj.FHalfCarry = parentObj.FSubtract = false;
4075 parentObj.FZero = (parentObj.registerB == 0);
4079 ,function (parentObj) {
4080 parentObj.FCarry = ((parentObj.registerC & 0x01) == 0x01);
4081 parentObj.registerC >>= 1;
4082 parentObj.FHalfCarry = parentObj.FSubtract = false;
4083 parentObj.FZero = (parentObj.registerC == 0);
4087 ,function (parentObj) {
4088 parentObj.FCarry = ((parentObj.registerD & 0x01) == 0x01);
4089 parentObj.registerD >>= 1;
4090 parentObj.FHalfCarry = parentObj.FSubtract = false;
4091 parentObj.FZero = (parentObj.registerD == 0);
4095 ,function (parentObj) {
4096 parentObj.FCarry = ((parentObj.registerE & 0x01) == 0x01);
4097 parentObj.registerE >>= 1;
4098 parentObj.FHalfCarry = parentObj.FSubtract = false;
4099 parentObj.FZero = (parentObj.registerE == 0);
4103 ,function (parentObj) {
4104 parentObj.FCarry = ((parentObj.registersHL & 0x0100) == 0x0100);
4105 parentObj.registersHL = ((parentObj.registersHL >> 1) & 0xFF00) | (parentObj.registersHL & 0xFF);
4106 parentObj.FHalfCarry = parentObj.FSubtract = false;
4107 parentObj.FZero = (parentObj.registersHL < 0x100);
4111 ,function (parentObj) {
4112 parentObj.FCarry = ((parentObj.registersHL & 0x0001) == 0x0001);
4113 parentObj.registersHL = (parentObj.registersHL & 0xFF00) | ((parentObj.registersHL & 0xFF) >> 1);
4114 parentObj.FHalfCarry = parentObj.FSubtract = false;
4115 parentObj.FZero = ((parentObj.registersHL & 0xFF) == 0);
4119 ,function (parentObj) {
4120 var temp_var = parentObj.memoryReader[parentObj.registersHL](parentObj, parentObj.registersHL);
4121 parentObj.FCarry = ((temp_var & 0x01) == 0x01);
4122 parentObj.memoryWriter[parentObj.registersHL](parentObj, parentObj.registersHL, temp_var >> 1);
4123 parentObj.FHalfCarry = parentObj.FSubtract = false;
4124 parentObj.FZero = (temp_var < 2);
4128 ,function (parentObj) {
4129 parentObj.FCarry = ((parentObj.registerA & 0x01) == 0x01);
4130 parentObj.registerA >>= 1;
4131 parentObj.FHalfCarry = parentObj.FSubtract = false;
4132 parentObj.FZero = (parentObj.registerA == 0);
4136 ,function (parentObj) {
4137 parentObj.FHalfCarry = true;
4138 parentObj.FSubtract = false;
4139 parentObj.FZero = ((parentObj.registerB & 0x01) == 0);
4143 ,function (parentObj) {
4144 parentObj.FHalfCarry = true;
4145 parentObj.FSubtract = false;
4146 parentObj.FZero = ((parentObj.registerC & 0x01) == 0);
4150 ,function (parentObj) {
4151 parentObj.FHalfCarry = true;
4152 parentObj.FSubtract = false;
4153 parentObj.FZero = ((parentObj.registerD & 0x01) == 0);
4157 ,function (parentObj) {
4158 parentObj.FHalfCarry = true;
4159 parentObj.FSubtract = false;
4160 parentObj.FZero = ((parentObj.registerE & 0x01) == 0);
4164 ,function (parentObj) {
4165 parentObj.FHalfCarry = true;
4166 parentObj.FSubtract = false;
4167 parentObj.FZero = ((parentObj.registersHL & 0x0100) == 0);
4171 ,function (parentObj) {
4172 parentObj.FHalfCarry = true;
4173 parentObj.FSubtract = false;
4174 parentObj.FZero = ((parentObj.registersHL & 0x0001) == 0);
4178 ,function (parentObj) {
4179 parentObj.FHalfCarry = true;
4180 parentObj.FSubtract = false;
4181 parentObj.FZero = ((parentObj.memoryReader[parentObj.registersHL](parentObj, parentObj.registersHL) & 0x01) == 0);
4185 ,function (parentObj) {
4186 parentObj.FHalfCarry = true;
4187 parentObj.FSubtract = false;
4188 parentObj.FZero = ((parentObj.registerA & 0x01) == 0);
4192 ,function (parentObj) {
4193 parentObj.FHalfCarry = true;
4194 parentObj.FSubtract = false;
4195 parentObj.FZero = ((parentObj.registerB & 0x02) == 0);
4199 ,function (parentObj) {
4200 parentObj.FHalfCarry = true;
4201 parentObj.FSubtract = false;
4202 parentObj.FZero = ((parentObj.registerC & 0x02) == 0);
4206 ,function (parentObj) {
4207 parentObj.FHalfCarry = true;
4208 parentObj.FSubtract = false;
4209 parentObj.FZero = ((parentObj.registerD & 0x02) == 0);
4213 ,function (parentObj) {
4214 parentObj.FHalfCarry = true;
4215 parentObj.FSubtract = false;
4216 parentObj.FZero = ((parentObj.registerE & 0x02) == 0);
4220 ,function (parentObj) {
4221 parentObj.FHalfCarry = true;
4222 parentObj.FSubtract = false;
4223 parentObj.FZero = ((parentObj.registersHL & 0x0200) == 0);
4227 ,function (parentObj) {
4228 parentObj.FHalfCarry = true;
4229 parentObj.FSubtract = false;
4230 parentObj.FZero = ((parentObj.registersHL & 0x0002) == 0);
4234 ,function (parentObj) {
4235 parentObj.FHalfCarry = true;
4236 parentObj.FSubtract = false;
4237 parentObj.FZero = ((parentObj.memoryReader[parentObj.registersHL](parentObj, parentObj.registersHL) & 0x02) == 0);
4241 ,function (parentObj) {
4242 parentObj.FHalfCarry = true;
4243 parentObj.FSubtract = false;
4244 parentObj.FZero = ((parentObj.registerA & 0x02) == 0);
4248 ,function (parentObj) {
4249 parentObj.FHalfCarry = true;
4250 parentObj.FSubtract = false;
4251 parentObj.FZero = ((parentObj.registerB & 0x04) == 0);
4255 ,function (parentObj) {
4256 parentObj.FHalfCarry = true;
4257 parentObj.FSubtract = false;
4258 parentObj.FZero = ((parentObj.registerC & 0x04) == 0);
4262 ,function (parentObj) {
4263 parentObj.FHalfCarry = true;
4264 parentObj.FSubtract = false;
4265 parentObj.FZero = ((parentObj.registerD & 0x04) == 0);
4269 ,function (parentObj) {
4270 parentObj.FHalfCarry = true;
4271 parentObj.FSubtract = false;
4272 parentObj.FZero = ((parentObj.registerE & 0x04) == 0);
4276 ,function (parentObj) {
4277 parentObj.FHalfCarry = true;
4278 parentObj.FSubtract = false;
4279 parentObj.FZero = ((parentObj.registersHL & 0x0400) == 0);
4283 ,function (parentObj) {
4284 parentObj.FHalfCarry = true;
4285 parentObj.FSubtract = false;
4286 parentObj.FZero = ((parentObj.registersHL & 0x0004) == 0);
4290 ,function (parentObj) {
4291 parentObj.FHalfCarry = true;
4292 parentObj.FSubtract = false;
4293 parentObj.FZero = ((parentObj.memoryReader[parentObj.registersHL](parentObj, parentObj.registersHL) & 0x04) == 0);
4297 ,function (parentObj) {
4298 parentObj.FHalfCarry = true;
4299 parentObj.FSubtract = false;
4300 parentObj.FZero = ((parentObj.registerA & 0x04) == 0);
4304 ,function (parentObj) {
4305 parentObj.FHalfCarry = true;
4306 parentObj.FSubtract = false;
4307 parentObj.FZero = ((parentObj.registerB & 0x08) == 0);
4311 ,function (parentObj) {
4312 parentObj.FHalfCarry = true;
4313 parentObj.FSubtract = false;
4314 parentObj.FZero = ((parentObj.registerC & 0x08) == 0);
4318 ,function (parentObj) {
4319 parentObj.FHalfCarry = true;
4320 parentObj.FSubtract = false;
4321 parentObj.FZero = ((parentObj.registerD & 0x08) == 0);
4325 ,function (parentObj) {
4326 parentObj.FHalfCarry = true;
4327 parentObj.FSubtract = false;
4328 parentObj.FZero = ((parentObj.registerE & 0x08) == 0);
4332 ,function (parentObj) {
4333 parentObj.FHalfCarry = true;
4334 parentObj.FSubtract = false;
4335 parentObj.FZero = ((parentObj.registersHL & 0x0800) == 0);
4339 ,function (parentObj) {
4340 parentObj.FHalfCarry = true;
4341 parentObj.FSubtract = false;
4342 parentObj.FZero = ((parentObj.registersHL & 0x0008) == 0);
4346 ,function (parentObj) {
4347 parentObj.FHalfCarry = true;
4348 parentObj.FSubtract = false;
4349 parentObj.FZero = ((parentObj.memoryReader[parentObj.registersHL](parentObj, parentObj.registersHL) & 0x08) == 0);
4353 ,function (parentObj) {
4354 parentObj.FHalfCarry = true;
4355 parentObj.FSubtract = false;
4356 parentObj.FZero = ((parentObj.registerA & 0x08) == 0);
4360 ,function (parentObj) {
4361 parentObj.FHalfCarry = true;
4362 parentObj.FSubtract = false;
4363 parentObj.FZero = ((parentObj.registerB & 0x10) == 0);
4367 ,function (parentObj) {
4368 parentObj.FHalfCarry = true;
4369 parentObj.FSubtract = false;
4370 parentObj.FZero = ((parentObj.registerC & 0x10) == 0);
4374 ,function (parentObj) {
4375 parentObj.FHalfCarry = true;
4376 parentObj.FSubtract = false;
4377 parentObj.FZero = ((parentObj.registerD & 0x10) == 0);
4381 ,function (parentObj) {
4382 parentObj.FHalfCarry = true;
4383 parentObj.FSubtract = false;
4384 parentObj.FZero = ((parentObj.registerE & 0x10) == 0);
4388 ,function (parentObj) {
4389 parentObj.FHalfCarry = true;
4390 parentObj.FSubtract = false;
4391 parentObj.FZero = ((parentObj.registersHL & 0x1000) == 0);
4395 ,function (parentObj) {
4396 parentObj.FHalfCarry = true;
4397 parentObj.FSubtract = false;
4398 parentObj.FZero = ((parentObj.registersHL & 0x0010) == 0);
4402 ,function (parentObj) {
4403 parentObj.FHalfCarry = true;
4404 parentObj.FSubtract = false;
4405 parentObj.FZero = ((parentObj.memoryReader[parentObj.registersHL](parentObj, parentObj.registersHL) & 0x10) == 0);
4409 ,function (parentObj) {
4410 parentObj.FHalfCarry = true;
4411 parentObj.FSubtract = false;
4412 parentObj.FZero = ((parentObj.registerA & 0x10) == 0);
4416 ,function (parentObj) {
4417 parentObj.FHalfCarry = true;
4418 parentObj.FSubtract = false;
4419 parentObj.FZero = ((parentObj.registerB & 0x20) == 0);
4423 ,function (parentObj) {
4424 parentObj.FHalfCarry = true;
4425 parentObj.FSubtract = false;
4426 parentObj.FZero = ((parentObj.registerC & 0x20) == 0);
4430 ,function (parentObj) {
4431 parentObj.FHalfCarry = true;
4432 parentObj.FSubtract = false;
4433 parentObj.FZero = ((parentObj.registerD & 0x20) == 0);
4437 ,function (parentObj) {
4438 parentObj.FHalfCarry = true;
4439 parentObj.FSubtract = false;
4440 parentObj.FZero = ((parentObj.registerE & 0x20) == 0);
4444 ,function (parentObj) {
4445 parentObj.FHalfCarry = true;
4446 parentObj.FSubtract = false;
4447 parentObj.FZero = ((parentObj.registersHL & 0x2000) == 0);
4451 ,function (parentObj) {
4452 parentObj.FHalfCarry = true;
4453 parentObj.FSubtract = false;
4454 parentObj.FZero = ((parentObj.registersHL & 0x0020) == 0);
4458 ,function (parentObj) {
4459 parentObj.FHalfCarry = true;
4460 parentObj.FSubtract = false;
4461 parentObj.FZero = ((parentObj.memoryReader[parentObj.registersHL](parentObj, parentObj.registersHL) & 0x20) == 0);
4465 ,function (parentObj) {
4466 parentObj.FHalfCarry = true;
4467 parentObj.FSubtract = false;
4468 parentObj.FZero = ((parentObj.registerA & 0x20) == 0);
4472 ,function (parentObj) {
4473 parentObj.FHalfCarry = true;
4474 parentObj.FSubtract = false;
4475 parentObj.FZero = ((parentObj.registerB & 0x40) == 0);
4479 ,function (parentObj) {
4480 parentObj.FHalfCarry = true;
4481 parentObj.FSubtract = false;
4482 parentObj.FZero = ((parentObj.registerC & 0x40) == 0);
4486 ,function (parentObj) {
4487 parentObj.FHalfCarry = true;
4488 parentObj.FSubtract = false;
4489 parentObj.FZero = ((parentObj.registerD & 0x40) == 0);
4493 ,function (parentObj) {
4494 parentObj.FHalfCarry = true;
4495 parentObj.FSubtract = false;
4496 parentObj.FZero = ((parentObj.registerE & 0x40) == 0);
4500 ,function (parentObj) {
4501 parentObj.FHalfCarry = true;
4502 parentObj.FSubtract = false;
4503 parentObj.FZero = ((parentObj.registersHL & 0x4000) == 0);
4507 ,function (parentObj) {
4508 parentObj.FHalfCarry = true;
4509 parentObj.FSubtract = false;
4510 parentObj.FZero = ((parentObj.registersHL & 0x0040) == 0);
4514 ,function (parentObj) {
4515 parentObj.FHalfCarry = true;
4516 parentObj.FSubtract = false;
4517 parentObj.FZero = ((parentObj.memoryReader[parentObj.registersHL](parentObj, parentObj.registersHL) & 0x40) == 0);
4521 ,function (parentObj) {
4522 parentObj.FHalfCarry = true;
4523 parentObj.FSubtract = false;
4524 parentObj.FZero = ((parentObj.registerA & 0x40) == 0);
4528 ,function (parentObj) {
4529 parentObj.FHalfCarry = true;
4530 parentObj.FSubtract = false;
4531 parentObj.FZero = ((parentObj.registerB & 0x80) == 0);
4535 ,function (parentObj) {
4536 parentObj.FHalfCarry = true;
4537 parentObj.FSubtract = false;
4538 parentObj.FZero = ((parentObj.registerC & 0x80) == 0);
4542 ,function (parentObj) {
4543 parentObj.FHalfCarry = true;
4544 parentObj.FSubtract = false;
4545 parentObj.FZero = ((parentObj.registerD & 0x80) == 0);
4549 ,function (parentObj) {
4550 parentObj.FHalfCarry = true;
4551 parentObj.FSubtract = false;
4552 parentObj.FZero = ((parentObj.registerE & 0x80) == 0);
4556 ,function (parentObj) {
4557 parentObj.FHalfCarry = true;
4558 parentObj.FSubtract = false;
4559 parentObj.FZero = ((parentObj.registersHL & 0x8000) == 0);
4563 ,function (parentObj) {
4564 parentObj.FHalfCarry = true;
4565 parentObj.FSubtract = false;
4566 parentObj.FZero = ((parentObj.registersHL & 0x0080) == 0);
4570 ,function (parentObj) {
4571 parentObj.FHalfCarry = true;
4572 parentObj.FSubtract = false;
4573 parentObj.FZero = ((parentObj.memoryReader[parentObj.registersHL](parentObj, parentObj.registersHL) & 0x80) == 0);
4577 ,function (parentObj) {
4578 parentObj.FHalfCarry = true;
4579 parentObj.FSubtract = false;
4580 parentObj.FZero = ((parentObj.registerA & 0x80) == 0);
4584 ,function (parentObj) {
4585 parentObj.registerB &= 0xFE;
4589 ,function (parentObj) {
4590 parentObj.registerC &= 0xFE;
4594 ,function (parentObj) {
4595 parentObj.registerD &= 0xFE;
4599 ,function (parentObj) {
4600 parentObj.registerE &= 0xFE;
4604 ,function (parentObj) {
4605 parentObj.registersHL &= 0xFEFF;
4609 ,function (parentObj) {
4610 parentObj.registersHL &= 0xFFFE;
4614 ,function (parentObj) {
4615 parentObj.memoryWriter[parentObj.registersHL](parentObj, parentObj.registersHL, parentObj.memoryReader[parentObj.registersHL](parentObj, parentObj.registersHL) & 0xFE);
4619 ,function (parentObj) {
4620 parentObj.registerA &= 0xFE;
4624 ,function (parentObj) {
4625 parentObj.registerB &= 0xFD;
4629 ,function (parentObj) {
4630 parentObj.registerC &= 0xFD;
4634 ,function (parentObj) {
4635 parentObj.registerD &= 0xFD;
4639 ,function (parentObj) {
4640 parentObj.registerE &= 0xFD;
4644 ,function (parentObj) {
4645 parentObj.registersHL &= 0xFDFF;
4649 ,function (parentObj) {
4650 parentObj.registersHL &= 0xFFFD;
4654 ,function (parentObj) {
4655 parentObj.memoryWriter[parentObj.registersHL](parentObj, parentObj.registersHL, parentObj.memoryReader[parentObj.registersHL](parentObj, parentObj.registersHL) & 0xFD);
4659 ,function (parentObj) {
4660 parentObj.registerA &= 0xFD;
4664 ,function (parentObj) {
4665 parentObj.registerB &= 0xFB;
4669 ,function (parentObj) {
4670 parentObj.registerC &= 0xFB;
4674 ,function (parentObj) {
4675 parentObj.registerD &= 0xFB;
4679 ,function (parentObj) {
4680 parentObj.registerE &= 0xFB;
4684 ,function (parentObj) {
4685 parentObj.registersHL &= 0xFBFF;
4689 ,function (parentObj) {
4690 parentObj.registersHL &= 0xFFFB;
4694 ,function (parentObj) {
4695 parentObj.memoryWriter[parentObj.registersHL](parentObj, parentObj.registersHL, parentObj.memoryReader[parentObj.registersHL](parentObj, parentObj.registersHL) & 0xFB);
4699 ,function (parentObj) {
4700 parentObj.registerA &= 0xFB;
4704 ,function (parentObj) {
4705 parentObj.registerB &= 0xF7;
4709 ,function (parentObj) {
4710 parentObj.registerC &= 0xF7;
4714 ,function (parentObj) {
4715 parentObj.registerD &= 0xF7;
4719 ,function (parentObj) {
4720 parentObj.registerE &= 0xF7;
4724 ,function (parentObj) {
4725 parentObj.registersHL &= 0xF7FF;
4729 ,function (parentObj) {
4730 parentObj.registersHL &= 0xFFF7;
4734 ,function (parentObj) {
4735 parentObj.memoryWriter[parentObj.registersHL](parentObj, parentObj.registersHL, parentObj.memoryReader[parentObj.registersHL](parentObj, parentObj.registersHL) & 0xF7);
4739 ,function (parentObj) {
4740 parentObj.registerA &= 0xF7;
4744 ,function (parentObj) {
4745 parentObj.registerB &= 0xEF;
4749 ,function (parentObj) {
4750 parentObj.registerC &= 0xEF;
4754 ,function (parentObj) {
4755 parentObj.registerD &= 0xEF;
4759 ,function (parentObj) {
4760 parentObj.registerE &= 0xEF;
4764 ,function (parentObj) {
4765 parentObj.registersHL &= 0xEFFF;
4769 ,function (parentObj) {
4770 parentObj.registersHL &= 0xFFEF;
4774 ,function (parentObj) {
4775 parentObj.memoryWriter[parentObj.registersHL](parentObj, parentObj.registersHL, parentObj.memoryReader[parentObj.registersHL](parentObj, parentObj.registersHL) & 0xEF);
4779 ,function (parentObj) {
4780 parentObj.registerA &= 0xEF;
4784 ,function (parentObj) {
4785 parentObj.registerB &= 0xDF;
4789 ,function (parentObj) {
4790 parentObj.registerC &= 0xDF;
4794 ,function (parentObj) {
4795 parentObj.registerD &= 0xDF;
4799 ,function (parentObj) {
4800 parentObj.registerE &= 0xDF;
4804 ,function (parentObj) {
4805 parentObj.registersHL &= 0xDFFF;
4809 ,function (parentObj) {
4810 parentObj.registersHL &= 0xFFDF;
4814 ,function (parentObj) {
4815 parentObj.memoryWriter[parentObj.registersHL](parentObj, parentObj.registersHL, parentObj.memoryReader[parentObj.registersHL](parentObj, parentObj.registersHL) & 0xDF);
4819 ,function (parentObj) {
4820 parentObj.registerA &= 0xDF;
4824 ,function (parentObj) {
4825 parentObj.registerB &= 0xBF;
4829 ,function (parentObj) {
4830 parentObj.registerC &= 0xBF;
4834 ,function (parentObj) {
4835 parentObj.registerD &= 0xBF;
4839 ,function (parentObj) {
4840 parentObj.registerE &= 0xBF;
4844 ,function (parentObj) {
4845 parentObj.registersHL &= 0xBFFF;
4849 ,function (parentObj) {
4850 parentObj.registersHL &= 0xFFBF;
4854 ,function (parentObj) {
4855 parentObj.memoryWriter[parentObj.registersHL](parentObj, parentObj.registersHL, parentObj.memoryReader[parentObj.registersHL](parentObj, parentObj.registersHL) & 0xBF);
4859 ,function (parentObj) {
4860 parentObj.registerA &= 0xBF;
4864 ,function (parentObj) {
4865 parentObj.registerB &= 0x7F;
4869 ,function (parentObj) {
4870 parentObj.registerC &= 0x7F;
4874 ,function (parentObj) {
4875 parentObj.registerD &= 0x7F;
4879 ,function (parentObj) {
4880 parentObj.registerE &= 0x7F;
4884 ,function (parentObj) {
4885 parentObj.registersHL &= 0x7FFF;
4889 ,function (parentObj) {
4890 parentObj.registersHL &= 0xFF7F;
4894 ,function (parentObj) {
4895 parentObj.memoryWriter[parentObj.registersHL](parentObj, parentObj.registersHL, parentObj.memoryReader[parentObj.registersHL](parentObj, parentObj.registersHL) & 0x7F);
4899 ,function (parentObj) {
4900 parentObj.registerA &= 0x7F;
4904 ,function (parentObj) {
4905 parentObj.registerB |= 0x01;
4909 ,function (parentObj) {
4910 parentObj.registerC |= 0x01;
4914 ,function (parentObj) {
4915 parentObj.registerD |= 0x01;
4919 ,function (parentObj) {
4920 parentObj.registerE |= 0x01;
4924 ,function (parentObj) {
4925 parentObj.registersHL |= 0x0100;
4929 ,function (parentObj) {
4930 parentObj.registersHL |= 0x01;
4934 ,function (parentObj) {
4935 parentObj.memoryWriter[parentObj.registersHL](parentObj, parentObj.registersHL, parentObj.memoryReader[parentObj.registersHL](parentObj, parentObj.registersHL) | 0x01);
4939 ,function (parentObj) {
4940 parentObj.registerA |= 0x01;
4944 ,function (parentObj) {
4945 parentObj.registerB |= 0x02;
4949 ,function (parentObj) {
4950 parentObj.registerC |= 0x02;
4954 ,function (parentObj) {
4955 parentObj.registerD |= 0x02;
4959 ,function (parentObj) {
4960 parentObj.registerE |= 0x02;
4964 ,function (parentObj) {
4965 parentObj.registersHL |= 0x0200;
4969 ,function (parentObj) {
4970 parentObj.registersHL |= 0x02;
4974 ,function (parentObj) {
4975 parentObj.memoryWriter[parentObj.registersHL](parentObj, parentObj.registersHL, parentObj.memoryReader[parentObj.registersHL](parentObj, parentObj.registersHL) | 0x02);
4979 ,function (parentObj) {
4980 parentObj.registerA |= 0x02;
4984 ,function (parentObj) {
4985 parentObj.registerB |= 0x04;
4989 ,function (parentObj) {
4990 parentObj.registerC |= 0x04;
4994 ,function (parentObj) {
4995 parentObj.registerD |= 0x04;
4999 ,function (parentObj) {
5000 parentObj.registerE |= 0x04;
5004 ,function (parentObj) {
5005 parentObj.registersHL |= 0x0400;
5009 ,function (parentObj) {
5010 parentObj.registersHL |= 0x04;
5014 ,function (parentObj) {
5015 parentObj.memoryWriter[parentObj.registersHL](parentObj, parentObj.registersHL, parentObj.memoryReader[parentObj.registersHL](parentObj, parentObj.registersHL) | 0x04);
5019 ,function (parentObj) {
5020 parentObj.registerA |= 0x04;
5024 ,function (parentObj) {
5025 parentObj.registerB |= 0x08;
5029 ,function (parentObj) {
5030 parentObj.registerC |= 0x08;
5034 ,function (parentObj) {
5035 parentObj.registerD |= 0x08;
5039 ,function (parentObj) {
5040 parentObj.registerE |= 0x08;
5044 ,function (parentObj) {
5045 parentObj.registersHL |= 0x0800;
5049 ,function (parentObj) {
5050 parentObj.registersHL |= 0x08;
5054 ,function (parentObj) {
5055 parentObj.memoryWriter[parentObj.registersHL](parentObj, parentObj.registersHL, parentObj.memoryReader[parentObj.registersHL](parentObj, parentObj.registersHL) | 0x08);
5059 ,function (parentObj) {
5060 parentObj.registerA |= 0x08;
5064 ,function (parentObj) {
5065 parentObj.registerB |= 0x10;
5069 ,function (parentObj) {
5070 parentObj.registerC |= 0x10;
5074 ,function (parentObj) {
5075 parentObj.registerD |= 0x10;
5079 ,function (parentObj) {
5080 parentObj.registerE |= 0x10;
5084 ,function (parentObj) {
5085 parentObj.registersHL |= 0x1000;
5089 ,function (parentObj) {
5090 parentObj.registersHL |= 0x10;
5094 ,function (parentObj) {
5095 parentObj.memoryWriter[parentObj.registersHL](parentObj, parentObj.registersHL, parentObj.memoryReader[parentObj.registersHL](parentObj, parentObj.registersHL) | 0x10);
5099 ,function (parentObj) {
5100 parentObj.registerA |= 0x10;
5104 ,function (parentObj) {
5105 parentObj.registerB |= 0x20;
5109 ,function (parentObj) {
5110 parentObj.registerC |= 0x20;
5114 ,function (parentObj) {
5115 parentObj.registerD |= 0x20;
5119 ,function (parentObj) {
5120 parentObj.registerE |= 0x20;
5124 ,function (parentObj) {
5125 parentObj.registersHL |= 0x2000;
5129 ,function (parentObj) {
5130 parentObj.registersHL |= 0x20;
5134 ,function (parentObj) {
5135 parentObj.memoryWriter[parentObj.registersHL](parentObj, parentObj.registersHL, parentObj.memoryReader[parentObj.registersHL](parentObj, parentObj.registersHL) | 0x20);
5139 ,function (parentObj) {
5140 parentObj.registerA |= 0x20;
5144 ,function (parentObj) {
5145 parentObj.registerB |= 0x40;
5149 ,function (parentObj) {
5150 parentObj.registerC |= 0x40;
5154 ,function (parentObj) {
5155 parentObj.registerD |= 0x40;
5159 ,function (parentObj) {
5160 parentObj.registerE |= 0x40;
5164 ,function (parentObj) {
5165 parentObj.registersHL |= 0x4000;
5169 ,function (parentObj) {
5170 parentObj.registersHL |= 0x40;
5174 ,function (parentObj) {
5175 parentObj.memoryWriter[parentObj.registersHL](parentObj, parentObj.registersHL, parentObj.memoryReader[parentObj.registersHL](parentObj, parentObj.registersHL) | 0x40);
5179 ,function (parentObj) {
5180 parentObj.registerA |= 0x40;
5184 ,function (parentObj) {
5185 parentObj.registerB |= 0x80;
5189 ,function (parentObj) {
5190 parentObj.registerC |= 0x80;
5194 ,function (parentObj) {
5195 parentObj.registerD |= 0x80;
5199 ,function (parentObj) {
5200 parentObj.registerE |= 0x80;
5204 ,function (parentObj) {
5205 parentObj.registersHL |= 0x8000;
5209 ,function (parentObj) {
5210 parentObj.registersHL |= 0x80;
5214 ,function (parentObj) {
5215 parentObj.memoryWriter[parentObj.registersHL](parentObj, parentObj.registersHL, parentObj.memoryReader[parentObj.registersHL](parentObj, parentObj.registersHL) | 0x80);
5219 ,function (parentObj) {
5220 parentObj.registerA |= 0x80;
6420 var parentObj = this;
7316 this.LINECONTROL[line] = function (parentObj) {
7317 parentObj.LCDTicks < 80) {
7318 parentObj.scanLineMode2();
7320 else if (parentObj.LCDTicks < 252) {
7321 parentObj.scanLineMode3();
7323 else if (parentObj.LCDTicks < 456) {
7324 parentObj.scanLineMode0();
7328 parentObj.LCDTicks -= 456;
7329 if (parentObj.STATTracker != 3) {
7331 if (parentObj.STATTracker != 2) {
7332 if (parentObj.STATTracker == 0 && parentObj.mode2TriggerSTAT) {
7333 parentObj.interruptsRequested |= 0x2;
7335 parentObj.incrementScanLineQueue();
7337 if (parentObj.hdmaRunning) {
7338 parentObj.executeHDMA();
7340 if (parentObj.mode0TriggerSTAT) {
7341 parentObj.interruptsRequested |= 0x2;
7345 parentObj.actualScanLine = ++parentObj.memory[0xFF44];
7347 if (parentObj.actualScanLine == parentObj.memory[0xFF45]) {
7348 parentObj.memory[0xFF41] |= 0x04;
7349 if (parentObj.LYCMatchTriggerSTAT) {
7350 parentObj.interruptsRequested |= 0x2;
7354 parentObj.memory[0xFF41] &= 0x7B;
7356 parentObj.checkIRQMatching();
7358 parentObj.STATTracker = 0;
7359 parentObj.modeSTAT = 2;
7360 parentObj.LINECONTROL[parentObj.actualScanLine](parentObj); //Scan Line and STAT Mode Control.
7366 this.LINECONTROL[143] = function (parentObj) {
7367 if (parentObj.LCDTicks < 80) {
7368 parentObj.scanLineMode2();
7370 else if (parentObj.LCDTicks < 252) {
7371 parentObj.scanLineMode3();
7373 else if (parentObj.LCDTicks < 456) {
7374 parentObj.scanLineMode0();
7379 parentObj.LCDTicks -= 456;
7380 if (parentObj.STATTracker != 3) {
7382 if (parentObj.STATTracker != 2) {
7383 if (parentObj.STATTracker == 0 && parentObj.mode2TriggerSTAT) {
7384 parentObj.interruptsRequested |= 0x2;
7386 parentObj.incrementScanLineQueue();
7388 if (parentObj.hdmaRunning) {
7389 parentObj.executeHDMA();
7391 if (parentObj.mode0TriggerSTAT) {
7392 parentObj.interruptsRequested |= 0x2;
7396 parentObj.actualScanLine = parentObj.memory[0xFF44] = 144;
7398 if (parentObj.memory[0xFF45] == 144) {
7399 parentObj.memory[0xFF41] |= 0x04;
7400 if (parentObj.LYCMatchTriggerSTAT) {
7401 parentObj.interruptsRequested |= 0x2;
7405 parentObj.memory[0xFF41] &= 0x7B;
7408 parentObj.STATTracker = 0;
7410 parentObj.modeSTAT = 1;
7411 parentObj.interruptsRequested |= (parentObj.mode1TriggerSTAT) ? 0x3 : 0x1;
7412 parentObj.checkIRQMatching();
7414 if (parentObj.drewBlank == 0) {
7416 if (parentObj.totalLinesPassed < 144 || (parentObj.totalLinesPassed == 144 && parentObj.midScanlineOffset > -1)) {
7418 parentObj.graphicsJITVBlank();
7420 parentObj.prepareFrame();
7425 --parentObj.drewBlank;
7427 parentObj.LINECONTROL[144](parentObj); //Scan Line and STAT Mode Control.
7433 this.LINECONTROL[line] = function (parentObj) {
7434 if (parentObj.LCDTicks >= 456) {
7436 parentObj.LCDTicks -= 456;
7437 parentObj.actualScanLine = ++parentObj.memory[0xFF44];
7439 if (parentObj.actualScanLine == parentObj.memory[0xFF45]) {
7440 parentObj.memory[0xFF41] |= 0x04;
7441 if (parentObj.LYCMatchTriggerSTAT) {
7442 parentObj.interruptsRequested |= 0x2;
7443 parentObj.checkIRQMatching();
7447 parentObj.memory[0xFF41] &= 0x7B;
7449 parentObj.LINECONTROL[parentObj.actualScanLine](parentObj); //Scan Line and STAT Mode Control.
7455 this.LINECONTROL[153] = function (parentObj) {
7456 if (parentObj.LCDTicks >= 8) {
7457 if (parentObj.STATTracker != 4 && parentObj.memory[0xFF44] == 153) {
7458 parentObj.memory[0xFF44] = 0; //LY register resets to 0 early.
7460 if (parentObj.memory[0xFF45] == 0) {
7461 parentObj.memory[0xFF41] |= 0x04;
7462 if (parentObj.LYCMatchTriggerSTAT) {
7463 parentObj.interruptsRequested |= 0x2;
7464 parentObj.checkIRQMatching();
7468 parentObj.memory[0xFF41] &= 0x7B;
7470 parentObj.STATTracker = 4;
7472 if (parentObj.LCDTicks >= 456) {
7474 parentObj.LCDTicks -= 456;
7475 parentObj.STATTracker = parentObj.actualScanLine = 0;
7476 parentObj.LINECONTROL[0](parentObj); //Scan Line and STAT Mode Control.
8854 this.memoryHighReader[0] = this.memoryReader[0xFF00] = function (parentObj, address) {
8855 return 0xC0 | parentObj.memory[0xFF00]; //Top nibble returns as set.
8860 this.memoryHighReader[0x01] = this.memoryReader[0xFF01] = function (parentObj, address) {
8861 return (parentObj.memory[0xFF02] < 0x80) ? parentObj.memory[0xFF01] : 0xFF;
8867 this.memoryHighReader[0x02] = this.memoryReader[0xFF02] = function (parentObj, address) {
8868 return ((parentObj.serialTimer <= 0) ? 0x7C : 0xFC) | parentObj.memory[0xFF02];
8872 this.memoryHighReader[0x02] = this.memoryReader[0xFF02] = function (parentObj, address) {
8873 return ((parentObj.serialTimer <= 0) ? 0x7E : 0xFE) | parentObj.memory[0xFF02];
8879 this.memoryHighReader[0x04] = this.memoryReader[0xFF04] = function (parentObj, address) {
8880 parentObj.memory[0xFF04] = (parentObj.memory[0xFF04] + (parentObj.DIVTicks >> 8)) & 0xFF;
8881 parentObj.DIVTicks &= 0xFF;
8882 return parentObj.memory[0xFF04];
8887 this.memoryHighReader[0x07] = this.memoryReader[0xFF07] = function (parentObj, address) {
8888 return 0xF8 | parentObj.memory[0xFF07];
8893 this.memoryHighReader[0x0F] = this.memoryReader[0xFF0F] = function (parentObj, address) {
8894 return 0xE0 | parentObj.interruptsRequested;
8898 this.memoryHighReader[0x10] = this.memoryReader[0xFF10] = function (parentObj, address) {
8899 return 0x80 | parentObj.memory[0xFF10];
8903 this.memoryHighReader[0x11] = this.memoryReader[0xFF11] = function (parentObj, address) {
8904 return 0x3F | parentObj.memory[0xFF11];
8911 this.memoryHighReader[0x14] = this.memoryReader[0xFF14] = function (parentObj, address) {
8912 return 0xBF | parentObj.memory[0xFF14];
8916 this.memoryHighReader[0x16] = this.memoryReader[0xFF16] = function (parentObj, address) {
8917 return 0x3F | parentObj.memory[0xFF16];
8924 this.memoryHighReader[0x19] = this.memoryReader[0xFF19] = function (parentObj, address) {
8925 return 0xBF | parentObj.memory[0xFF19];
8929 this.memoryHighReader[0x1A] = this.memoryReader[0xFF1A] = function (parentObj, address) {
8930 return 0x7F | parentObj.memory[0xFF1A];
8937 this.memoryHighReader[0x1C] = this.memoryReader[0xFF1C] = function (parentObj, address) {
8938 return 0x9F | parentObj.memory[0xFF1C];
8942 this.memoryHighReader[0x1D] = this.memoryReader[0xFF1D] = function (parentObj, address) {
8947 this.memoryHighReader[0x1E] = this.memoryReader[0xFF1E] = function (parentObj, address) {
8948 return 0xBF | parentObj.memory[0xFF1E];
8956 this.memoryHighReader[0x23] = this.memoryReader[0xFF23] = function (parentObj, address) {
8957 return 0xBF | parentObj.memory[0xFF23];
8961 this.memoryHighReader[0x26] = this.memoryReader[0xFF26] = function (parentObj, address) {
8962 parentObj.audioJIT();
8963 return 0x70 | parentObj.memory[0xFF26];
8993 this.memoryReader[index] = function (parentObj, address) {
8994 return (parentObj.channel3canPlay) ? parentObj.memory[0xFF00 | (parentObj.channel3lastSampleLookup >> 1)] : parentObj.memory[address];
8996 this.memoryHighReader[index & 0xFF] = function (parentObj, address) {
8997 return (parentObj.channel3canPlay) ? parentObj.memory[0xFF00 | (parentObj.channel3lastSampleLookup >> 1)] : parentObj.memory[0xFF00 | address];
9001 this.memoryHighReader[0x41] = this.memoryReader[0xFF41] = function (parentObj, address) {
9002 return 0x80 | parentObj.memory[0xFF41] | parentObj.modeSTAT;
9006 this.memoryHighReader[0x42] = this.memoryReader[0xFF42] = function (parentObj, address) {
9007 return parentObj.backgroundY;
9011 this.memoryHighReader[0x43] = this.memoryReader[0xFF43] = function (parentObj, address) {
9012 return parentObj.backgroundX;
9016 this.memoryHighReader[0x44] = this.memoryReader[0xFF44] = function (parentObj, address) {
9017 return ((parentObj.LCDisOn) ? parentObj.memory[0xFF44] : 0);
9022 this.memoryHighReader[0x4A] = this.memoryReader[0xFF4A] = function (parentObj, address) {
9023 return parentObj.windowY;
9027 this.memoryHighReader[0x4F] = this.memoryReader[0xFF4F] = function (parentObj, address) {
9028 return parentObj
9033 this.memoryHighReader[0x55] = this.memoryReader[0xFF55] = function (parentObj, address) {
9034 if (!parentObj.LCDisOn && parentObj.hdmaRunning) { //Undocumented behavior alert: HDMA becomes GDMA when LCD is off (Worms Armageddon Fix).
9036 parentObj.DMAWrite((parentObj.memory[0xFF55] & 0x7F) + 1);
9037 parentObj.memory[0xFF55] = 0xFF; //Transfer completed.
9038 parentObj.hdmaRunning = false;
9040 return parentObj.memory[0xFF55];
9050 this.memoryHighReader[0x56] = this.memoryReader[0xFF56] = function (parentObj, address) {
9052 return 0x3C | ((parentObj.memory[0xFF56] >= 0xC0) ? (0x2 | (parentObj.memory[0xFF56] & 0xC1)) : (parentObj.memory[0xFF56] & 0xC3));
9062 this.memoryHighReader[0x6C] = this.memoryReader[0xFF6C] = function (parentObj, address) {
9063 return 0xFE | parentObj.memory[0xFF6C];
9073 this.memoryHighReader[0x70] = this.memoryReader[0xFF70] = function (parentObj, address) {
9074 return 0x40 | parentObj.memory[0xFF70];
9082 this.memoryHighReader[0x75] = this.memoryReader[0xFF75] = function (parentObj, address) {
9083 return 0x8F | parentObj.memory[0xFF75];
9088 this.memoryHighReader[index & 0xFF] = this.memoryReader[index] = function (parentObj, address) {
9094 this.memoryHighReader[0xFF] = this.memoryReader[0xFFFF] = function (parentObj, address) {
9095 return parentObj.interruptsEnabled;
9108 GameBoyCore.prototype.memoryReadNormal = function (parentObj, address) {
9109 return parentObj.memory[address];
9111 GameBoyCore.prototype.memoryHighReadNormal = function (parentObj, address) {
9112 return parentObj.memory[0xFF00 | address];
9114 GameBoyCore.prototype.memoryReadROM = function (parentObj, address) {
9115 return parentObj.ROM[parentObj.currentROMBank + address];
9117 GameBoyCore.prototype.memoryReadMBC = function (parentObj, address) {
9119 if (parentObj.MBCRAMBanksEnabled || settings[10]) {
9120 return parentObj.MBCRam[address + parentObj.currMBCRAMBankPosition];
9125 GameBoyCore.prototype.memoryReadMBC7 = function (parentObj, address) {
9127 if (parentObj.MBCRAMBanksEnabled || settings[10]) {
9138 return parentObj.highY;
9141 return parentObj.lowY;
9144 return parentObj.highX;
9147 return parentObj.lowX;
9149 return parentObj.MBCRam[address + parentObj.currMBCRAMBankPosition];
9155 GameBoyCore.prototype.memoryReadMBC3 = function (parentObj, address) {
9157 if (parentObj.MBCRAMBanksEnabled || settings[10]) {
9158 switch (parentObj.currMBCRAMBank) {
9163 return parentObj.MBCRam[address + parentObj.currMBCRAMBankPosition];
9166 return parentObj.latchedSeconds;
9169 return parentObj.latchedMinutes;
9172 return parentObj.latchedHours;
9175 return parentObj.latchedLDays;
9178 return (((parentObj.RTCDayOverFlow) ? 0x80 : 0) + ((parentObj.RTCHALT) ? 0x40 : 0)) + parentObj.latchedHDays;
9184 GameBoyCore.prototype.memoryReadGBCMemory = function (parentObj, address) {
9185 return parentObj.GBCMemory[address + parentObj.gbcRamBankPosition];
9187 GameBoyCore.prototype.memoryReadOAM = function (parentObj, address) {
9188 return (parentObj.modeSTAT > 1) ? 0xFF : parentObj.memory[address];
9190 GameBoyCore.prototype.memoryReadECHOGBCMemory = function (parentObj, address) {
9191 return parentObj.GBCMemory[address + parentObj.gbcRamBankPositionECHO];
9193 GameBoyCore.prototype.memoryReadECHONormal = function (parentObj, address) {
9194 return parentObj.memory[address - 0x2000];
9196 GameBoyCore.prototype.memoryReadBAD = function (parentObj, address) {
9199 GameBoyCore.prototype.VRAMDATAReadCGBCPU = function (parentObj, address) {
9201 return (parentObj.modeSTAT > 2) ? 0xFF : ((parentObj.currVRAMBank == 0) ? parentObj.memory[address] : parentObj.VRAM[address & 0x1FFF]);
9203 GameBoyCore.prototype.VRAMDATAReadDMGCPU = function (parentObj, address) {
9205 return (parentObj.modeSTAT > 2) ? 0xFF : parentObj.memory[address];
9207 GameBoyCore.prototype.VRAMCHRReadCGBCPU = function (parentObj, address) {
9209 return (parentObj.modeSTAT > 2) ? 0xFF : parentObj.BGCHRCurrentBank[address & 0x7FF];
9211 GameBoyCore.prototype.VRAMCHRReadDMGCPU = function (parentObj, address) {
9213 return (parentObj.modeSTAT > 2) ? 0xFF : parentObj.BGCHRBank1[address & 0x7FF];
9384 GameBoyCore.prototype.MBCWriteEnable = function (parentObj, address, data) {
9386 parentObj.MBCRAMBanksEnabled = ((data & 0x0F) == 0x0A); //If lower nibble is 0x0A, then enable, otherwise disable.
9388 GameBoyCore.prototype.MBC1WriteROMBank = function (parentObj, address, data) {
9390 parentObj.ROMBank1offs = (parentObj.ROMBank1offs & 0x60) | (data & 0x1F);
9391 parentObj.setCurrentMBC1ROMBank();
9393 GameBoyCore.prototype.MBC1WriteRAMBank = function (parentObj, address, data) {
9395 if (parentObj.MBC1Mode) {
9397 parentObj.currMBCRAMBank = data & 0x03;
9398 parentObj.currMBCRAMBankPosition = (parentObj.currMBCRAMBank << 13) - 0xA000;
9402 parentObj.ROMBank1offs = ((data & 0x03) << 5) | (parentObj.ROMBank1offs & 0x1F);
9403 parentObj.setCurrentMBC1ROMBank();
9406 GameBoyCore.prototype.MBC1WriteType = function (parentObj, address, data) {
9408 parentObj.MBC1Mode = ((data & 0x1) == 0x1);
9409 if (parentObj.MBC1Mode) {
9410 parentObj.ROMBank1offs &= 0x1F;
9411 parentObj.setCurrentMBC1ROMBank();
9414 parentObj.currMBCRAMBank = 0;
9415 parentObj.currMBCRAMBankPosition = -0xA000;
9418 GameBoyCore.prototype.MBC2WriteROMBank = function (parentObj, address, data) {
9420 parentObj.ROMBank1offs = data & 0x0F;
9421 parentObj.setCurrentMBC2AND3ROMBank();
9423 GameBoyCore.prototype.MBC3WriteROMBank = function (parentObj, address, data) {
9425 parentObj.ROMBank1offs = data & 0x7F;
9426 parentObj.setCurrentMBC2AND3ROMBank();
9428 GameBoyCore.prototype.MBC3WriteRAMBank = function (parentObj, address, data) {
9429 parentObj.currMBCRAMBank = data;
9432 parentObj.currMBCRAMBankPosition = (parentObj.currMBCRAMBank << 13) - 0xA000;
9435 GameBoyCore.prototype.MBC3WriteRTCLatch = function (parentObj, address, data) {
9437 parentObj.RTCisLatched = false;
9439 else if (!parentObj.RTCisLatched) {
9441 parentObj.RTCisLatched = true;
9442 parentObj.latchedSeconds = parentObj.RTCSeconds | 0;
9443 parentObj.latchedMinutes = parentObj.RTCMinutes;
9444 parentObj.latchedHours = parentObj.RTCHours;
9445 parentObj.latchedLDays = (parentObj.RTCDays & 0xFF);
9446 parentObj.latchedHDays = parentObj.RTCDays >> 8;
9449 GameBoyCore.prototype.MBC5WriteROMBankLow = function (parentObj, address, data) {
9451 parentObj.ROMBank1offs = (parentObj.ROMBank1offs & 0x100) | data;
9452 parentObj.setCurrentMBC5ROMBank();
9454 GameBoyCore.prototype.MBC5WriteROMBankHigh = function (parentObj, address, data) {
9456 parentObj.ROMBank1offs = ((data & 0x01) << 8) | (parentObj.ROMBank1offs & 0xFF);
9457 parentObj.setCurrentMBC5ROMBank();
9459 GameBoyCore.prototype.MBC5WriteRAMBank = function (parentObj, address, data) {
9461 parentObj.currMBCRAMBank = data & 0xF;
9462 parentObj.currMBCRAMBankPosition = (parentObj.currMBCRAMBank << 13) - 0xA000;
9464 GameBoyCore.prototype.RUMBLEWriteRAMBank = function (parentObj, address, data) {
9467 parentObj.currMBCRAMBank = data & 0x03;
9468 parentObj.currMBCRAMBankPosition = (parentObj.currMBCRAMBank << 13) - 0xA000;
9470 GameBoyCore.prototype.HuC3WriteRAMBank = function (parentObj, address, data) {
9472 parentObj.currMBCRAMBank = data & 0x03;
9473 parentObjparentObj.currMBCRAMBank << 13) - 0xA000;
9475 GameBoyCore.prototype.cartIgnoreWrite = function (parentObj, address, data) {
9478 GameBoyCore.prototype.memoryWriteNormal = function (parentObj, address, data) {
9479 parentObj.memory[address] = data;
9481 GameBoyCore.prototype.memoryHighWriteNormal = function (parentObj, address, data) {
9482 parentObj.memory[0xFF00 | address] = data;
9484 GameBoyCore.prototype.memoryWriteMBCRAM = function (parentObj, address, data) {
9485 if (parentObj.MBCRAMBanksEnabled || settings[10]) {
9486 parentObj.MBCRam[address + parentObj.currMBCRAMBankPosition] = data;
9489 GameBoyCore.prototype.memoryWriteMBC3RAM = function (parentObj, address, data) {
9490 if (parentObj.MBCRAMBanksEnabled || settings[10]) {
9491 switch (parentObj.currMBCRAMBank) {
9496 parentObj.MBCRam[address + parentObj.currMBCRAMBankPosition] = data;
9500 parentObj.RTCSeconds = data;
9503 cout("(Bank #" + parentObj.currMBCRAMBank + ") RTC write out of range: " + data, 1);
9508 parentObj.RTCMinutes = data;
9511 cout("(Bank #" + parentObj.currMBCRAMBank + ") RTC write out of range: " + data, 1);
9516 parentObj.RTCHours = data;
9519 cout("(Bank #" + parentObj.currMBCRAMBank + ") RTC write out of range: " + data, 1);
9523 parentObj.RTCDays = (data & 0xFF) | (parentObj.RTCDays & 0x100);
9526 parentObj.RTCDayOverFlow = (data > 0x7F);
9527 parentObj.RTCHalt = (data & 0x40) == 0x40;
9528 parentObj.RTCDays = ((data & 0x1) << 8) | (parentObj.RTCDays & 0xFF);
9531 cout("Invalid MBC3 bank address selected: " + parentObj.currMBCRAMBank, 0);
9535 GameBoyCore.prototype.memoryWriteGBCRAM = function (parentObj, address, data) {
9536 parentObj.GBCMemory[address + parentObj.gbcRamBankPosition] = data;
9538 GameBoyCore.prototype.memoryWriteOAMRAM = function (parentObj, address, data) {
9539 if (parentObj.modeSTAT < 2) { //OAM RAM cannot be written to in mode 2 & 3
9540 if (parentObj.memory[address] != data) {
9541 parentObj.graphicsJIT();
9542 parentObj.memory[address] = data;
9546 GameBoyCore.prototype.memoryWriteECHOGBCRAM = function (parentObj, address, data) {
9547 parentObj.GBCMemory[address + parentObj.gbcRamBankPositionECHO] = data;
9549 GameBoyCore.prototype.memoryWriteECHONormal = function (parentObj, address, data) {
9550 parentObj.memory[address - 0x2000] = data;
9552 GameBoyCore.prototype.VRAMGBDATAWrite = function (parentObj, address, data) {
9553 if (parentObj.modeSTAT < 3) { //VRAM cannot be written to during mode 3
9554 if (parentObj.memory[address] != data) {
9556 parentObj.graphicsJIT();
9557 parentObj.memory[address] = data;
9558 parentObj.generateGBOAMTileLine(address);
9562 GameBoyCore.prototype.VRAMGBDATAUpperWrite = function (parentObj, address, data) {
9563 if (parentObj.modeSTAT < 3) { //VRAM cannot be written to during mode 3
9564 if (parentObj.memory[address] != data) {
9566 parentObj.graphicsJIT();
9567 parentObj.memory[address] = data;
9568 parentObj.generateGBTileLine(address);
9572 GameBoyCore.prototype.VRAMGBCDATAWrite = function (parentObj, address, data) {
9573 if (parentObj.modeSTAT < 3) { //VRAM cannot be written to during mode 3
9574 if (parentObj.currVRAMBank == 0) {
9575 if (parentObj.memory[address] != data) {
9577 parentObj.graphicsJIT();
9578 parentObj.memory[address] = data;
9579 parentObj.generateGBCTileLineBank1(address);
9584 if (parentObj.VRAM[address] != data) {
9586 parentObj.graphicsJIT();
9587 parentObj.VRAM[address] = data;
9588 parentObj.generateGBCTileLineBank2(address);
9593 GameBoyCore.prototype.VRAMGBCHRMAPWrite = function (parentObj, address, data) {
9594 if (parentObj.modeSTAT < 3) { //VRAM cannot be written to during mode 3
9596 if (parentObj.BGCHRBank1[address] != data) {
9598 parentObj.graphicsJIT();
9599 parentObj.BGCHRBank1[address] = data;
9603 GameBoyCore.prototype.VRAMGBCCHRMAPWrite = function (parentObj, address, data) {
9604 if (parentObj.modeSTAT < 3) { //VRAM cannot be written to during mode 3
9606 if (parentObj.BGCHRCurrentBank[address] != data) {
9608 parentObj.graphicsJIT();
9609 parentObj.BGCHRCurrentBank[address] = data;
9732 this.memoryHighWriter[0] = this.memoryWriter[0xFF00] = function (parentObj, address, data) {
9733 parentObj.memory[0xFF00] = (data & 0x30) | ((((data & 0x20) == 0) ? (parentObj.JoyPad >> 4) : 0xF) & (((data & 0x10) == 0) ? (parentObj.JoyPad & 0xF) : 0xF));
9736 this.memoryHighWriter[0x1] = this.memoryWriter[0xFF01] = function (parentObj, address, data) {
9737 if (parentObj.memory[0xFF02] < 0x80) { //Cannot write while a serial transfer is active.
9738 parentObj.memory[0xFF01] = data;
9742 this.memoryHighWriter[0x4] = this.memoryWriter[0xFF04] = function (parentObj, address, data) {
9743 parentObj.DIVTicks &= 0xFF; //Update DIV for realignment.
9744 parentObj.memory[0xFF04] = 0;
9747 this.memoryHighWriter[0x5] = this.memoryWriter[0xFF05] = function (parentObj, address, data) {
9748 parentObj.memory[0xFF05] = data;
9751 this.memoryHighWriter[0x6] = this.memoryWriter[0xFF06] = function (parentObj, address, data) {
9752 parentObj.memory[0xFF06] = data;
9755 this.memoryHighWriter[0x7] = this.memoryWriter[0xFF07] = function (parentObj, address, data) {
9756 parentObj.memory[0xFF07] = data & 0x07;
9757 parentObj.TIMAEnabled = (data & 0x04) == 0x04;
9758 parentObj.TACClocker = Math.pow(4, ((data & 0x3) != 0) ? (data & 0x3) : 4) << 2; //TODO: Find a way to not make a conditional in here...
9761 this.memoryHighWriter[0xF] = this.memoryWriter[0xFF0F] = function (parentObj, address, data) {
9762 parentObj.interruptsRequested = data;
9763 parentObj.checkIRQMatching();
9765 this.memoryHighWriter[0x10] = this.memoryWriter[0xFF10] = function (parentObj, address, data) {
9766 if (parentObj.soundMasterEnabled) {
9767 parentObj.audioJIT();
9768 if (parentObj.channel1decreaseSweep && (data & 0x08) == 0) {
9769 if (parentObj.channel1numSweep != parentObj.channel1frequencySweepDivider) {
9770 parentObj.channel1SweepFault = true;
9773 parentObj.channel1lastTimeSweep = (data & 0x70) >> 4;
9774 parentObj.channel1frequencySweepDivider = data & 0x07;
9775 parentObj.channel1decreaseSweep = ((data & 0x08) == 0x08);
9776 parentObj.memory[0xFF10] = data;
9777 parentObj.channel1EnableCheck();
9780 this.memoryHighWriter[0x11] = this.memoryWriter[0xFF11] = function (parentObj, address, data) {
9781 if (parentObj.soundMasterEnabled || !parentObj.cGBC) {
9782 if (parentObj.soundMasterEnabled) {
9783 parentObj.audioJIT();
9788 parentObj.channel1CachedDuty = parentObj.dutyLookup[data >> 6];
9789 parentObj.channel1totalLength = 0x40 - (data & 0x3F);
9790 parentObj.memory[0xFF11] = data & 0xC0;
9791 parentObj.channel1EnableCheck();
9794 this.memoryHighWriter[0x12] = this.memoryWriter[0xFF12] = function (parentObj, address, data) {
9795 if (parentObj.soundMasterEnabled) {
9796 parentObj.audioJIT();
9797 if (parentObj.channel1Enabled && parentObj.channel1envelopeSweeps == 0) {
9799 if (((parentObj.memory[0xFF12] ^ data) & 0x8) == 0x8) {
9800 if ((parentObj.memory[0xFF12] & 0x8) == 0) {
9801 if ((parentObj.memory[0xFF12] & 0x7) == 0x7) {
9802 parentObj.channel1envelopeVolume += 2;
9805 ++parentObj.channel1envelopeVolume;
9808 parentObj.channel1envelopeVolume = (16 - parentObj.channel1envelopeVolume) & 0xF;
9810 else if ((parentObj.memory[0xFF12] & 0xF) == 0x8) {
9811 parentObj.channel1envelopeVolume = (1 + parentObj.channel1envelopeVolume) & 0xF;
9813 parentObj.channel1OutputLevelCache();
9815 parentObj.channel1envelopeType = ((data & 0x08) == 0x08);
9816 parentObj.memory[0xFF12] = data;
9817 parentObj.channel1VolumeEnableCheck();
9820 this.memoryHighWriter[0x13] = this.memoryWriter[0xFF13] = function (parentObj, address, data) {
9821 if (parentObj.soundMasterEnabled) {
9822 parentObj.audioJIT();
9823 parentObj.channel1frequency = (parentObj.channel1frequency & 0x700) | data;
9824 parentObj.channel1FrequencyTracker = (0x800 - parentObj.channel1frequency) << 2;
9825 parentObj.memory[0xFF13] = data;
9828 this.memoryHighWriter[0x14] = this.memoryWriter[0xFF14] = function (parentObj, address, data) {
9829 if (parentObj.soundMasterEnabled) {
9830 parentObj.audioJIT();
9831 parentObj.channel1consecutive = ((data & 0x40) == 0x0);
9832 parentObj.channel1frequency = ((data & 0x7) << 8) | (parentObj.channel1frequency & 0xFF);
9833 parentObj.channel1FrequencyTracker = (0x800 - parentObj.channel1frequency) << 2;
9836 parentObjparentObj.channel1lastTimeSweep;
9837 parentObj.channel1numSweep = parentObj.channel1frequencySweepDivider;
9839 var nr12 = parentObj.memory[0xFF12];
9840 parentObj.channel1envelopeVolume = nr12 >> 4;
9841 parentObj.channel1OutputLevelCache();
9842 parentObj.channel1envelopeSweepsLast = (nr12 & 0x7) - 1;
9843 if (parentObj.channel1totalLength == 0) {
9844 parentObj.channel1totalLength = 0x40;
9846 if (parentObj.channel1lastTimeSweep > 0 || parentObj.channel1frequencySweepDivider > 0) {
9847 parentObj.memory[0xFF26] |= 0x1;
9850 parentObj.memory[0xFF26] &= 0xFE;
9853 parentObj.memory[0xFF26] |= 0x1;
9855 parentObj.channel1ShadowFrequency = parentObj.channel1frequency;
9857 parentObj.channel1SweepFault = false;
9859 parentObj.runAudioSweep();
9861 parentObj.channel1EnableCheck();
9862 parentObj.memory[0xFF14] = data & 0x40;
9865 this.memoryHighWriter[0x16] = this.memoryWriter[0xFF16] = function (parentObj, address, data) {
9866 if (parentObj.soundMasterEnabled || !parentObj.cGBC) {
9867 if (parentObj.soundMasterEnabled) {
9868 parentObj.audioJIT();
9873 parentObj.channel2CachedDuty = parentObj.dutyLookup[data >> 6];
9874 parentObj.channel2totalLength = 0x40 - (data & 0x3F);
9875 parentObj.memory[0xFF16] = data & 0xC0;
9876 parentObj.channel2EnableCheck();
9879 this.memoryHighWriter[0x17] = this.memoryWriter[0xFF17] = function (parentObj, address, data) {
9880 if (parentObj.soundMasterEnabled) {
9881 parentObj.audioJIT();
9882 if (parentObj.channel2Enabled && parentObj.channel2envelopeSweeps == 0) {
9884 if (((parentObj.memory[0xFF17] ^ data) & 0x8) == 0x8) {
9885 if ((parentObj.memory[0xFF17] & 0x8) == 0) {
9886 if ((parentObj.memory[0xFF17] & 0x7) == 0x7) {
9887 parentObj.channel2envelopeVolume += 2;
9890 ++parentObj.channel2envelopeVolume;
9893 parentObj.channel2envelopeVolume = (16 - parentObj.channel2envelopeVolume) & 0xF;
9895 else if ((parentObj.memory[0xFF17] & 0xF) == 0x8) {
9896 parentObj.channel2envelopeVolume = (1 + parentObj.channel2envelopeVolume) & 0xF;
9898 parentObj.channel2OutputLevelCache();
9900 parentObj.channel2envelopeType = ((data & 0x08) == 0x08);
9901 parentObj.memory[0xFF17] = data;
9902 parentObj.channel2VolumeEnableCheck();
9905 this.memoryHighWriter[0x18] = this.memoryWriter[0xFF18] = function (parentObj, address, data) {
9906 if (parentObj.soundMasterEnabled) {
9907 parentObj.audioJIT();
9908 parentObj.channel2frequency = (parentObj.channel2frequency & 0x700) | data;
9909 parentObj.channel2FrequencyTracker = (0x800 - parentObj.channel2frequency) << 2;
9910 parentObj.memory[0xFF18] = data;
9913 this.memoryHighWriter[0x19] = this.memoryWriter[0xFF19] = function (parentObj, address, data) {
9914 if (parentObj.soundMasterEnabled) {
9915 parentObj.audioJIT();
9918 var nr22 = parentObj.memory[0xFF17];
9919 parentObj.channel2envelopeVolume = nr22 >> 4;
9920 parentObj.channel2OutputLevelCache();
9921 parentObj.channel2envelopeSweepsLast = (nr22 & 0x7) - 1;
9922 if (parentObj.channel2totalLength == 0) {
9923 parentObj.channel2totalLength = 0x40;
9926 parentObj.memory[0xFF26] |= 0x2;
9929 parentObj.channel2consecutive = ((data & 0x40) == 0x0);
9930 parentObj.channel2frequency = ((data & 0x7) << 8) | (parentObj.channel2frequency & 0xFF);
9931 parentObj.channel2FrequencyTracker = (0x800 - parentObj.channel2frequency) << 2;
9932 parentObj.memory[0xFF19] = data & 0x40;
9933 parentObj.channel2EnableCheck();
9936 this.memoryHighWriter[0x1A] = this.memoryWriter[0xFF1A] = function (parentObj, address, data) {
9937 if (parentObj.soundMasterEnabled) {
9938 parentObj.audioJIT();
9939 if (!parentObj.channel3canPlay && data >= 0x80) {
9940 parentObj.channel3lastSampleLookup = 0;
9941 parentObj.channel3UpdateCache();
9943 parentObj.channel3canPlay = (data > 0x7F);
9944 if (parentObj.channel3canPlay && parentObj.memory[0xFF1A] > 0x7F && !parentObj.channel3consecutive) {
9945 parentObj.memory[0xFF26] |= 0x4;
9947 parentObj.memory[0xFF1A] = data & 0x80;
9948 //parentObj.channel3EnableCheck();
9951 this.memoryHighWriter[0x1B] = this.memoryWriter[0xFF1B] = function (parentObj, address, data) {
9952 if (parentObj.soundMasterEnabled || !parentObj.cGBC) {
9953 if (parentObj.soundMasterEnabled) {
9954 parentObj.audioJIT();
9956 parentObj.channel3totalLength = 0x100 - data;
9957 parentObj.memory[0xFF1B] = data;
9958 parentObj.channel3EnableCheck();
9961 this.memoryHighWriter[0x1C] = this.memoryWriter[0xFF1C] = function (parentObj, address, data) {
9962 if (parentObj.soundMasterEnabled) {
9963 parentObj.audioJIT();
9965 parentObj.memory[0xFF1C] = data;
9966 parentObj.channel3patternType = (data == 0) ? 4 : ((data >> 5) - 1);
9969 this.memoryHighWriter[0x1D] = this.memoryWriter[0xFF1D] = function (parentObj, address, data) {
9970 if (parentObj.soundMasterEnabled) {
9971 parentObj.audioJIT();
9972 parentObj.channel3frequency = (parentObj.channel3frequency & 0x700) | data;
9973 parentObj.channel3FrequencyPeriod = (0x800 - parentObj.channel3frequency) << 1;
9974 parentObj.memory[0xFF1D] = data;
9977 this.memoryHighWriter[0x1E] = this.memoryWriter[0xFF1E] = function (parentObj, address, data) {
9978 if (parentObj.soundMasterEnabled) {
9979 parentObj.audioJIT();
9981 if (parentObj.channel3totalLength == 0) {
9982 parentObj.channel3totalLength = 0x100;
9984 parentObj.channel3lastSampleLookup = 0;
9986 parentObj.memory[0xFF26] |= 0x4;
9989 parentObj.channel3consecutive = ((data & 0x40) == 0x0);
9990 parentObj.channel3frequency = ((data & 0x7) << 8) | (parentObj.channel3frequency & 0xFF);
9991 parentObj.channel3FrequencyPeriod = (0x800 - parentObj.channel3frequency) << 1;
9992 parentObj.memory[0xFF1E] = data & 0x40;
9993 parentObj.channel3EnableCheck();
9996 this.memoryHighWriter[0x20] = this.memoryWriter[0xFF20] = function (parentObj, address, data) {
9997 if (parentObj.soundMasterEnabled || !parentObj.cGBC) {
9998 if (parentObj.soundMasterEnabled) {
9999 parentObj.audioJIT();
10001 parentObj.channel4totalLength = 0x40 - (data & 0x3F);
10002 parentObj.memory[0xFF20] = data | 0xC0;
10003 parentObj.channel4EnableCheck();
10006 this.memoryHighWriter[0x21] = this.memoryWriter[0xFF21] = function (parentObj, address, data) {
10007 if (parentObj.soundMasterEnabled) {
10008 parentObj.audioJIT();
10009 if (parentObj.channel4Enabled && parentObj.channel4envelopeSweeps == 0) {
10011 if (((parentObj.memory[0xFF21] ^ data) & 0x8) == 0x8) {
10012 if ((parentObj.memory[0xFF21] & 0x8) == 0) {
10013 if ((parentObj.memory[0xFF21] & 0x7) == 0x7) {
10014 parentObj.channel4envelopeVolume += 2;
10017 ++parentObj.channel4envelopeVolume;
10020 parentObj.channel4envelopeVolume = (16 - parentObj.channel4envelopeVolume) & 0xF;
10022 else if ((parentObj.memory[0xFF21] & 0xF) == 0x8) {
10023 parentObj.channel4envelopeVolume = (1 + parentObj.channel4envelopeVolume) & 0xF;
10025 parentObj.channel4currentVolume = parentObj.channel4envelopeVolume << parentObj.channel4VolumeShifter;
10027 parentObj.channel4envelopeType = ((data & 0x08) == 0x08);
10028 parentObj.memory[0xFF21] = data;
10029 parentObj.channel4UpdateCache();
10030 parentObj.channel4VolumeEnableCheck();
10033 this.memoryHighWriter[0x22] = this.memoryWriter[0xFF22] = function (parentObj, address, data) {
10034 if (parentObj.soundMasterEnabled) {
10035 parentObj.audioJIT();
10036 parentObj.channel4FrequencyPeriod = Math.max((data & 0x7) << 4, 8) << (data >> 4);
10038 if ((bitWidth == 0x8 && parentObj.channel4BitRange == 0x7FFF) || (bitWidth == 0 && parentObj.channel4BitRange == 0x7F)) {
10039 parentObj.channel4lastSampleLookup = 0;
10040 parentObj.channel4BitRange = (bitWidth == 0x8) ? 0x7F : 0x7FFF;
10041 parentObj.channel4VolumeShifter = (bitWidth == 0x8) ? 7 : 15;
10042 parentObj.channel4currentVolume = parentObj.channel4envelopeVolume << parentObj.channel4VolumeShifter;
10043 parentObj.noiseSampleTable = (bitWidth == 0x8) ? parentObj.LSFR7Table : parentObj.LSFR15Table;
10045 parentObj.memory[0xFF22] = data;
10046 parentObj.channel4UpdateCache();
10049 this.memoryHighWriter[0x23] = this.memoryWriter[0xFF23] = function (parentObj, address, data) {
10050 if (parentObj.soundMasterEnabled) {
10051 parentObj.audioJIT();
10052 parentObj.memory[0xFF23] = data;
10053 parentObj.channel4consecutive = ((data & 0x40) == 0x0);
10055 var nr42 = parentObj.memory[0xFF21];
10056 parentObj.channel4envelopeVolume = nr42 >> 4;
10057 parentObj.channel4currentVolume = parentObj.channel4envelopeVolume << parentObj.channel4VolumeShifter;
10058 parentObj.channel4envelopeSweepsLast = (nr42 & 0x7) - 1;
10059 if (parentObj.channel4totalLength == 0) {
10060 parentObj.channel4totalLength = 0x40;
10063 parentObj.memory[0xFF26] |= 0x8;
10066 parentObj.channel4EnableCheck();
10069 this.memoryHighWriter[0x24] = this.memoryWriter[0xFF24] = function (parentObj, address, data) {
10070 if (parentObj.soundMasterEnabled && parentObj.memory[0xFF24] != data) {
10071 parentObj.audioJIT();
10072 parentObj.memory[0xFF24] = data;
10073 parentObj.VinLeftChannelMasterVolume = ((data >> 4) & 0x07) + 1;
10074 parentObj.VinRightChannelMasterVolume = (data & 0x07) + 1;
10075 parentObj.mixerOutputLevelCache();
10078 this.memoryHighWriter[0x25] = this.memoryWriter[0xFF25] = function (parentObj, address, data) {
10079 if (parentObj.soundMasterEnabled && parentObj.memory[0xFF25] != data) {
10080 parentObj.audioJIT();
10081 parentObj.memory[0xFF25] = data;
10082 parentObj.rightChannel1 = ((data & 0x01) == 0x01);
10083 parentObj.rightChannel2 = ((data & 0x02) == 0x02);
10084 parentObj.rightChannel3 = ((data & 0x04) == 0x04);
10085 parentObj.rightChannel4 = ((data & 0x08) == 0x08);
10086 parentObj.leftChannel1 = ((data & 0x10) == 0x10);
10087 parentObj.leftChannel2 = ((data & 0x20) == 0x20);
10088 parentObj.leftChannel3 = ((data & 0x40) == 0x40);
10089 parentObj.leftChannel4 = (data > 0x7F);
10090 parentObj.channel1OutputLevelCache();
10091 parentObj.channel2OutputLevelCache();
10092 parentObj.channel3OutputLevelCache();
10093 parentObj.channel4OutputLevelCache();
10096 this.memoryHighWriter[0x26] = this.memoryWriter[0xFF26] = function (parentObj, address, data) {
10097 parentObj.audioJIT();
10098 if (!parentObj.soundMasterEnabled && data > 0x7F) {
10099 parentObj.memory[0xFF26] = 0x80;
10100 parentObj.soundMasterEnabled = true;
10101 parentObj.initializeAudioStartState();
10103 else if (parentObj.soundMasterEnabled && data < 0x80) {
10104 parentObj.memory[0xFF26] = 0;
10105 parentObj.soundMasterEnabled = false;
10108 parentObj.memoryWriter[index](parentObj, index, 0);
10123 this.memoryHighWriter[0x30] = this.memoryWriter[0xFF30] = function (parentObj, address, data) {
10124 parentObj.channel3WriteRAM(0, data);
10126 this.memoryHighWriter[0x31] = this.memoryWriter[0xFF31] = function (parentObj, address, data) {
10127 parentObj.channel3WriteRAM(0x1, data);
10129 this.memoryHighWriter[0x32] = this.memoryWriter[0xFF32] = function (parentObj, address, data) {
10130 parentObj.channel3WriteRAM(0x2, data);
10132 this.memoryHighWriter[0x33] = this.memoryWriter[0xFF33] = function (parentObj, address, data) {
10133 parentObj.channel3WriteRAM(0x3, data);
10135 this.memoryHighWriter[0x34] = this.memoryWriter[0xFF34] = function (parentObj, address, data) {
10136 parentObj.channel3WriteRAM(0x4, data);
10138 this.memoryHighWriter[0x35] = this.memoryWriter[0xFF35] = function (parentObj, address, data) {
10139 parentObj.channel3WriteRAM(0x5, data);
10141 this.memoryHighWriter[0x36] = this.memoryWriter[0xFF36] = function (parentObj, address, data) {
10142 parentObj.channel3WriteRAM(0x6, data);
10144 this.memoryHighWriter[0x37] = this.memoryWriter[0xFF37] = function (parentObj, address, data) {
10145 parentObj.channel3WriteRAM(0x7, data);
10147 this.memoryHighWriter[0x38] = this.memoryWriter[0xFF38] = function (parentObj, address, data) {
10148 parentObj.channel3WriteRAM(0x8, data);
10150 this.memoryHighWriter[0x39] = this.memoryWriter[0xFF39] = function (parentObj, address, data) {
10151 parentObj.channel3WriteRAM(0x9, data);
10153 this.memoryHighWriter[0x3A] = this.memoryWriter[0xFF3A] = function (parentObj, address, data) {
10154 parentObj.channel3WriteRAM(0xA, data);
10156 this.memoryHighWriter[0x3B] = this.memoryWriter[0xFF3B] = function (parentObj, address, data) {
10157 parentObj.channel3WriteRAM(0xB, data);
10159 this.memoryHighWriter[0x3C] = this.memoryWriter[0xFF3C] = function (parentObj, address, data) {
10160 parentObj.channel3WriteRAM(0xC, data);
10162 this.memoryHighWriter[0x3D] = this.memoryWriter[0xFF3D] = function (parentObj, address, data) {
10163 parentObj.channel3WriteRAM(0xD, data);
10165 this.memoryHighWriter[0x3E] = this.memoryWriter[0xFF3E] = function (parentObj, address, data) {
10166 parentObj.channel3WriteRAM(0xE, data);
10168 this.memoryHighWriter[0x3F] = this.memoryWriter[0xFF3F] = function (parentObj, address, data) {
10169 parentObj.channel3WriteRAM(0xF, data);
10172 this.memoryHighWriter[0x42] = this.memoryWriter[0xFF42] = function (parentObj, address, data) {
10173 if (parentObj.backgroundY != data) {
10174 parentObj.midScanLineJIT();
10175 parentObj.backgroundY = data;
10179 this.memoryHighWriter[0x43] = this.memoryWriter[0xFF43] = function (parentObj, address, data) {
10180 if (parentObj.backgroundX != data) {
10181 parentObj.midScanLineJIT();
10182 parentObj.backgroundX = data;
10186 this.memoryHighWriter[0x44] = this.memoryWriter[0xFF44] = function (parentObj, address, data) {
10188 if (parentObj.LCDisOn) {
10190 parentObj.modeSTAT = 2;
10191 parentObj.midScanlineOffset = -1;
10192 parentObj.totalLinesPassed = parentObj.currentX = parentObj.queuedScanLines = parentObj.lastUnrenderedLine = parentObj.LCDTicks = parentObj.STATTracker = parentObj.actualScanLine = parentObj.memory[0xFF44] = 0;
10196 this.memoryHighWriter[0x45] = this.memoryWriter[0xFF45] = function (parentObj, address, data) {
10197 if (parentObj.memory[0xFF45] != data) {
10198 parentObj.memory[0xFF45] = data;
10199 if (parentObj.LCDisOn) {
10200 parentObj.matchLYC(); //Get the compare of the first scan line.
10205 this.memoryHighWriter[0x4A] = this.memoryWriter[0xFF4A] = function (parentObj, address, data) {
10206 if (parentObj.windowY != data) {
10207 parentObj.midScanLineJIT();
10208 parentObj.windowY = data;
10212 this.memoryHighWriter[0x4B] = this.memoryWriter[0xFF4B] = function (parentObj, address, data) {
10213 if (parentObj.memory[0xFF4B] != data) {
10214 parentObj.midScanLineJIT();
10215 parentObj.memory[0xFF4B] = data;
10216 parentObj.windowX = data - 7;
10219 this.memoryHighWriter[0x72] = this.memoryWriter[0xFF72] = function (parentObj, address, data) {
10220 parentObj.memory[0xFF72] = data;
10222 this.memoryHighWriter[0x73] = this.memoryWriter[0xFF73] = function (parentObj, address, data) {
10223 parentObj.memory[0xFF73] = data;
10225 this.memoryHighWriter[0x75] = this.memoryWriter[0xFF75] = function (parentObj, address, data) {
10226 parentObj.memory[0xFF75] = data;
10231 this.memoryHighWriter[0xFF] = this.memoryWriter[0xFFFF] = function (parentObj, address, data) {
10232 parentObj.interruptsEnabled = data;
10233 parentObj.checkIRQMatching();
10242 this.memoryHighWriter[0x2] = this.memoryWriter[0xFF02] = function (parentObj, address, data) {
10245 parentObj.memory[0xFF02] = (data & 0x7F);
10246 parentObj.serialTimer = ((data & 0x2) == 0) ? 4096 : 128; //Set the Serial IRQ counter.
10247 parentObj.serialShiftTimer = parentObj.serialShiftTimerAllocated = ((data & 0x2) == 0) ? 512 : 16; //Set the transfer data shift counter.
10251 parentObj.memory[0xFF02] = data;
10252 parentObj.serialShiftTimer = parentObj.serialShiftTimerAllocated = parentObj.serialTimer = 0; //Zero the timers, since we're emulating as if nothing is connected.
10255 this.memoryHighWriter[0x40] = this.memoryWriter[0xFF40] = function (parentObj, address, data) {
10256 if (parentObj.memory[0xFF40] != data) {
10257 parentObj.midScanLineJIT();
10259 if (temp_var != parentObj.LCDisOn) {
10261 parentObj.LCDisOn = temp_var;
10262 parentObj.memory[0xFF41] &= 0x78;
10263 parentObj.midScanlineOffset = -1;
10264 parentObj.totalLinesPassed = parentObj.currentX = parentObj.queuedScanLines = parentObj.lastUnrenderedLine = parentObj.STATTracker = parentObj.LCDTicks = parentObj.actualScanLine = parentObj.memory[0xFF44] = 0;
10265 if (parentObj.LCDisOn) {
10266 parentObj.modeSTAT = 2;
10267 parentObj.matchLYC(); //Get the compare of the first scan line.
10268 parentObj.LCDCONTROL = parentObj.LINECONTROL;
10271 parentObj.modeSTAT = 0;
10272 parentObj.LCDCONTROL = parentObj.DISPLAYOFFCONTROL;
10273 parentObj.DisplayShowOff();
10275 parentObj.interruptsRequested &= 0xFD;
10277 parentObj.gfxWindowCHRBankPosition = ((data & 0x40) == 0x40) ? 0x400 : 0;
10278 parentObj.gfxWindowDisplay = ((data & 0x20) == 0x20);
10279 parentObj.gfxBackgroundBankOffset = ((data & 0x10) == 0x10) ? 0 : 0x80;
10280 parentObj.gfxBackgroundCHRBankPosition = ((data & 0x08) == 0x08) ? 0x400 : 0;
10281 parentObj.gfxSpriteNormalHeight = ((data & 0x04) == 0);
10282 parentObj.gfxSpriteShow = ((data & 0x02) == 0x02);
10283 parentObj.BGPriorityEnabled = ((data & 0x01) == 0x01);
10284 parentObj.priorityFlaggingPathRebuild(); //Special case the priority flagging as an optimization.
10285 parentObj.memory[0xFF40] = data;
10288 this.memoryHighWriter[0x41] = this.memoryWriter[0xFF41] = function (parentObj, address, data) {
10289 parentObj.LYCMatchTriggerSTAT = ((data & 0x40) == 0x40);
10290 parentObj.mode2TriggerSTAT = ((data & 0x20) == 0x20);
10291 parentObj.mode1TriggerSTAT = ((data & 0x10) == 0x10);
10292 parentObj.mode0TriggerSTAT = ((data & 0x08) == 0x08);
10293 parentObj.memory[0xFF41] = data & 0x78;
10295 this.memoryHighWriter[0x46] = this.memoryWriter[0xFF46] = function (parentObj, address, data) {
10296 parentObj.memory[0xFF46] = data;
10300 var stat = parentObj.modeSTAT;
10301 parentObj.modeSTAT = 0;
10304 newData = parentObj.memoryReader[data](parentObj, data++);
10305 if (newData != parentObj.memory[address]) {
10307 parentObj.modeSTAT = stat;
10308 parentObj.graphicsJIT();
10309 parentObj.modeSTAT = 0;
10310 parentObj.memory[address++] = newData;
10316 parentObj.memory[address++] = parentObj.memoryReader[data](parentObj, data++);
10317 parentObj.memory[address++] = parentObj.memoryReader[data](parentObj, data++);
10318 parentObj.memory[address++] = parentObj.memoryReader[data](parentObj, data++);
10319 parentObj.memory[address++] = parentObj.memoryReader[data](parentObj, data++);
10322 parentObj.modeSTAT = stat;
10326 this.memoryHighWriter[0x4D] = this.memoryWriter[0xFF4D] = function (parentObj, address, data) {
10327 parentObj.memory[0xFF4D] = (data & 0x7F) | (parentObj.memory[0xFF4D] & 0x80);
10329 this.memoryHighWriter[0x4F] = this.memoryWriter[0xFF4F] = function (parentObj, address, data) {
10330 parentObj.currVRAMBank = data & 0x01;
10331 if (parentObj.currVRAMBank > 0) {
10332 parentObj.BGCHRCurrentBank = parentObj.BGCHRBank2;
10335 parentObj.BGCHRCurrentBank = parentObj.BGCHRBank1;
10339 this.memoryHighWriter[0x51] = this.memoryWriter[0xFF51] = function (parentObj, address, data) {
10340 if (!parentObj.hdmaRunning) {
10341 parentObj.memory[0xFF51] = data;
10344 this.memoryHighWriter[0x52] = this.memoryWriter[0xFF52] = function (parentObj, address, data) {
10345 if (!parentObj.hdmaRunning) {
10346 parentObj.memory[0xFF52] = data & 0xF0;
10349 this.memoryHighWriter[0x53] = this.memoryWriter[0xFF53] = function (parentObj, address, data) {
10350 if (!parentObj.hdmaRunning) {
10351 parentObj.memory[0xFF53] = data & 0x1F;
10354 this.memoryHighWriter[0x54] = this.memoryWriter[0xFF54] = function (parentObj, address, data) {
10355 if (!parentObj.hdmaRunning) {
10356 parentObj.memory[0xFF54] = data & 0xF0;
10359 this.memoryHighWriter[0x55] = this.memoryWriter[0xFF55] = function (parentObj, address, data) {
10360 if (!parentObj.hdmaRunning) {
10363 parentObj.DMAWrite((data & 0x7F) + 1);
10364 parentObj.memory[0xFF55] = 0xFF; //Transfer completed.
10368 parentObj.hdmaRunning = true;
10369 parentObj.memory[0xFF55] = data & 0x7F;
10374 parentObj.hdmaRunning = false;
10375 parentObj.memory[0xFF55] |= 0x80;
10378 parentObj.memory[0xFF55] = data & 0x7F;
10381 this.memoryHighWriter[0x68] = this.memoryWriter[0xFF68] = function (parentObj, address, data) {
10382 parentObj.memory[0xFF69] = parentObj.gbcBGRawPalette[data & 0x3F];
10383 parentObj.memory[0xFF68] = data;
10385 this.memoryHighWriter[0x69] = this.memoryWriter[0xFF69] = function (parentObj, address, data) {
10386 parentObj.updateGBCBGPalette(parentObj.memory[0xFF68] & 0x3F, data);
10387 if (parentObj.memory[0xFF68] > 0x7F) { // high bit = autoincrement
10388 var next = ((parentObj.memory[0xFF68] + 1) & 0x3F);
10389 parentObj.memory[0xFF68] = (next | 0x80);
10390 parentObj.memory[0xFF69] = parentObj.gbcBGRawPalette[next];
10393 parentObj.memory[0xFF69] = data;
10396 this.memoryHighWriter[0x6A] = this.memoryWriter[0xFF6A] = function (parentObj, address, data) {
10397 parentObj.memory[0xFF6B] = parentObj.gbcOBJRawPalette[data & 0x3F];
10398 parentObj.memory[0xFF6A] = data;
10400 this.memoryHighWriter[0x6B] = this.memoryWriter[0xFF6B] = function (parentObj, address, data) {
10401 parentObj.updateGBCOBJPalette(parentObj.memory[0xFF6A] & 0x3F, data);
10402 if (parentObj.memory[0xFF6A] > 0x7F) { // high bit = autoincrement
10403 var next = ((parentObj.memory[0xFF6A] + 1) & 0x3F);
10404 parentObj.memory[0xFF6A] = (next | 0x80);
10405 parentObj.memory[0xFF6B] = parentObj.gbcOBJRawPalette[next];
10408 parentObj.memory[0xFF6B] = data;
10412 this.memoryHighWriter[0x70] = this.memoryWriter[0xFF70] = function (parentObj, address, data) {
10413 var addressCheck = (parentObj.memory[0xFF51] << 8) | parentObj.memory[0xFF52]; //Cannot change the RAM bank while WRAM is the source of a running HDMA.
10414 if (!parentObj.hdmaRunning || addressCheck < 0xD000 || addressCheck >= 0xE000) {
10415 parentObj.gbcRamBank = Math.max(data & 0x07, 1); //Bank range is from 1-7
10416 parentObj.gbcRamBankPosition = ((parentObj.gbcRamBank - 1) << 12) - 0xD000;
10417 parentObj.gbcRamBankPositionECHO = parentObj.gbcRamBankPosition - 0x2000;
10419 parentObj.memory[0xFF70] = data; //Bit 6 cannot be written to.
10421 this.memoryHighWriter[0x74] = this.memoryWriter[0xFF74] = function (parentObj, address, data) {
10422 parentObj.memory[0xFF74] = data;
10428 this.memoryHighWriter[0x2] = this.memoryWriter[0xFF02] = function (parentObj, address, data) {
10431 parentObj.memory[0xFF02] = (data & 0x7F);
10432 parentObj.serialTimer = 4096; //Set the Serial IRQ counter.
10433 parentObj.serialShiftTimer = parentObj.serialShiftTimerAllocated = 512; //Set the transfer data shift counter.
10437 parentObj.memory[0xFF02] = data;
10438 parentObj.serialShiftTimer = parentObj.serialShiftTimerAllocated = parentObj.serialTimer = 0; //Zero the timers, since we're emulating as if nothing is connected.
10441 this.memoryHighWriter[0x40] = this.memoryWriter[0xFF40] = function (parentObj, address, data) {
10442 if (parentObj.memory[0xFF40] != data) {
10443 parentObj.midScanLineJIT();
10445 if (temp_var != parentObj.LCDisOn) {
10447 parentObj.LCDisOn = temp_var;
10448 parentObj.memory[0xFF41] &= 0x78;
10449 parentObj.midScanlineOffset = -1;
10450 parentObj.totalLinesPassed = parentObj.currentX = parentObj.queuedScanLines = parentObj.lastUnrenderedLine = parentObj.STATTracker = parentObj.LCDTicks = parentObj.actualScanLine = parentObj.memory[0xFF44] = 0;
10451 if (parentObj.LCDisOn) {
10452 parentObj.modeSTAT = 2;
10453 parentObj.matchLYC(); //Get the compare of the first scan line.
10454 parentObj.LCDCONTROL = parentObj.LINECONTROL;
10457 parentObj.modeSTAT = 0;
10458 parentObj.LCDCONTROL = parentObj.DISPLAYOFFCONTROL;
10459 parentObj.DisplayShowOff();
10461 parentObj.interruptsRequested &= 0xFD;
10463 parentObj.gfxWindowCHRBankPosition = ((data & 0x40) == 0x40) ? 0x400 : 0;
10464 parentObj.gfxWindowDisplay = (data & 0x20) == 0x20;
10465 parentObj.gfxBackgroundBankOffset = ((data & 0x10) == 0x10) ? 0 : 0x80;
10466 parentObj.gfxBackgroundCHRBankPosition = ((data & 0x08) == 0x08) ? 0x400 : 0;
10467 parentObj.gfxSpriteNormalHeight = ((data & 0x04) == 0);
10468 parentObj.gfxSpriteShow = (data & 0x02) == 0x02;
10469 parentObj.bgEnabled = ((data & 0x01) == 0x01);
10470 parentObj.memory[0xFF40] = data;
10473 this.memoryHighWriter[0x41] = this.memoryWriter[0xFF41] = function (parentObj, address, data) {
10474 parentObj.LYCMatchTriggerSTAT = ((data & 0x40) == 0x40);
10475 parentObj.mode2TriggerSTAT = ((data & 0x20) == 0x20);
10476 parentObj.mode1TriggerSTAT = ((data & 0x10) == 0x10);
10477 parentObj.mode0TriggerSTAT = ((data & 0x08) == 0x08);
10478 parentObj.memory[0xFF41] = data & 0x78;
10479 if ((!parentObj.usedBootROM || !parentObj.usedGBCBootROM) && parentObj.LCDisOn && parentObj.modeSTAT < 2) {
10480 parentObj.interruptsRequested |= 0x2;
10481 parentObj.checkIRQMatching();
10484 this.memoryHighWriter[0x46] = this.memoryWriter[0xFF46] = function (parentObj, address, data) {
10485 parentObj.memory[0xFF46] = data;
10489 var stat = parentObj.modeSTAT;
10490 parentObj.modeSTAT = 0;
10493 newData = parentObj.memoryReader[data](parentObj, data++);
10494 if (newData != parentObj.memory[address]) {
10496 parentObj.modeSTAT = stat;
10497 parentObj.graphicsJIT();
10498 parentObj.modeSTAT = 0;
10499 parentObj.memory[address++] = newData;
10505 parentObj.memory[address++] = parentObj.memoryReader[data](parentObj, data++);
10506 parentObj.memory[address++] = parentObj.memoryReader[data](parentObj, data++);
10507 parentObj.memory[address++] = parentObj.memoryReader[data](parentObj, data++);
10508 parentObj.memory[address++] = parentObj.memoryReader[data](parentObj, data++);
10511 parentObj.modeSTAT = stat;
10514 this.memoryHighWriter[0x47] = this.memoryWriter[0xFF47] = function (parentObj, address, data) {
10515 if (parentObj.memory[0xFF47] != data) {
10516 parentObj.midScanLineJIT();
10517 parentObj.updateGBBGPalette(data);
10518 parentObj.memory[0xFF47] = data;
10521 this.memoryHighWriter[0x48] = this.memoryWriter[0xFF48] = function (parentObj, address, data) {
10522 if (parentObj.memory[0xFF48] != data) {
10523 parentObj.midScanLineJIT();
10524 parentObj.updateGBOBJPalette(0, data);
10525 parentObj.memory[0xFF48] = data;
10528 this.memoryHighWriter[0x49] = this.memoryWriter[0xFF49] = function (parentObj, address, data) {
10529 if (parentObj.memory[0xFF49] != data) {
10530 parentObj.midScanLineJIT();
10531 parentObj.updateGBOBJPalette(4, data);
10532 parentObj.memory[0xFF49] = data;
10535 this.memoryHighWriter[0x4D] = this.memoryWriter[0xFF4D] = function (parentObj, address, data) {
10536 parentObj.memory[0xFF4D] = data;
10552 this.memoryHighWriter[0x50] = this.memoryWriter[0xFF50] = function (parentObj, address, data) {
10554 parentObj.inBootstrap = false;
10555 parentObj.disableBootROM(); //Fill in the boot ROM ranges with ROM bank 0 ROM ranges
10556 parentObj
10559 this.memoryHighWriter[0x6C] = this.memoryWriter[0xFF6C] = function (parentObj, address, data) {
10560 if (parentObj.inBootstrap) {
10561 parentObj.cGBC = ((data & 0x1) == 0);
10563 if (parentObj.name + parentObj.gameCode + parentObj.ROM[0x143] == "Game and Watch 50") {
10564 parentObj.cGBC = true;
10567 cout("Booted to GBC Mode: " + parentObj.cGBC, 0);
10569 parentObj.memory[0xFF6C] = data;