gameboy superoptimizer
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 

351 lines
6.1 KiB

import pytest
from tests.insn.helpers import *
def test_rlca():
cpu = CPU()
cpu.set_reg8(R8.A, 0x80)
RLCA().exec(cpu)
assert cpu.get_reg8(R8.A) == 0x01
assert cpu.carry == 1
assert cpu.cycles == 4
RLCA().exec(cpu)
assert cpu.get_reg8(R8.A) == 0x02
assert cpu.carry == 0
assert cpu.cycles == 8
def test_rla():
cpu = CPU()
cpu.set_reg8(R8.A, 0x80)
RLA().exec(cpu)
assert cpu.get_reg8(R8.A) == 0x00
assert cpu.carry == 1
assert cpu.cycles == 4
RLA().exec(cpu)
assert cpu.get_reg8(R8.A) == 0x01
assert cpu.carry == 0
assert cpu.cycles == 8
def test_rrca():
cpu = CPU()
cpu.set_reg8(R8.A, 0x01)
RRCA().exec(cpu)
assert cpu.get_reg8(R8.A) == 0x80
assert cpu.carry == 1
assert cpu.cycles == 4
RRCA().exec(cpu)
assert cpu.get_reg8(R8.A) == 0x40
assert cpu.carry == 0
assert cpu.cycles == 8
def test_rra():
cpu = CPU()
cpu.set_reg8(R8.A, 0x01)
RRA().exec(cpu)
assert cpu.get_reg8(R8.A) == 0x00
assert cpu.carry == 1
assert cpu.cycles == 4
RRA().exec(cpu)
assert cpu.get_reg8(R8.A) == 0x80
assert cpu.carry == 0
assert cpu.cycles == 8
@pytest.mark.parametrize("r", R8)
def test_rlc_r(r):
cpu = CPU()
cpu.set_reg8(r, 0x80)
RLC_R(r).exec(cpu)
assert cpu.get_reg8(r) == 0x01
assert cpu.carry == 1
assert cpu.cycles == 8
RLC_R(r).exec(cpu)
assert cpu.get_reg8(r) == 0x02
assert cpu.carry == 0
assert cpu.cycles == 16
def test_rlc_hl():
cpu = CPU()
cpu.deref_hl_set(0x80)
RLC_HL().exec(cpu)
assert cpu.deref_hl() == 0x01
assert cpu.carry == 1
assert cpu.cycles == 16
RLC_HL().exec(cpu)
assert cpu.deref_hl() == 0x02
assert cpu.carry == 0
assert cpu.cycles == 32
@pytest.mark.parametrize("r", R8)
def test_rl_r(r):
cpu = CPU()
cpu.set_reg8(r, 0x80)
RL_R(r).exec(cpu)
assert cpu.get_reg8(r) == 0x00
assert cpu.carry == 1
assert cpu.cycles == 8
RL_R(r).exec(cpu)
assert cpu.get_reg8(r) == 0x01
assert cpu.carry == 0
assert cpu.cycles == 16
def test_rl_hl():
cpu = CPU()
cpu.deref_hl_set(0x80)
RL_HL().exec(cpu)
assert cpu.deref_hl() == 0x00
assert cpu.carry == 1
assert cpu.cycles == 16
RL_HL().exec(cpu)
assert cpu.deref_hl() == 0x01
assert cpu.carry == 0
assert cpu.cycles == 32
@pytest.mark.parametrize("r", R8)
def test_rrc_r(r):
cpu = CPU()
cpu.set_reg8(r, 0x01)
RRC_R(r).exec(cpu)
assert cpu.get_reg8(r) == 0x80
assert cpu.carry == 1
assert cpu.cycles == 8
RRC_R(r).exec(cpu)
assert cpu.get_reg8(r) == 0x40
assert cpu.carry == 0
assert cpu.cycles == 16
def test_rrc_hl():
cpu = CPU()
cpu.set_reg16(R16.HL, 0x1234)
cpu.deref_hl_set(0x01)
RRC_HL().exec(cpu)
assert cpu.deref_hl() == 0x80
assert cpu.carry == 1
assert cpu.cycles == 16
RRC_HL().exec(cpu)
assert cpu.deref_hl() == 0x40
assert cpu.carry == 0
assert cpu.cycles == 32
@pytest.mark.parametrize("r", R8)
def test_rr_r(r):
cpu = CPU()
cpu.set_reg8(r, 0x01)
RR_R(r).exec(cpu)
assert cpu.get_reg8(r) == 0x00
assert cpu.carry == 1
assert cpu.cycles == 8
RR_R(r).exec(cpu)
assert cpu.get_reg8(r) == 0x80
assert cpu.carry == 0
assert cpu.cycles == 16
def test_rr_hl():
cpu = CPU()
cpu.set_reg16(R16.HL, 0x1234)
cpu.deref_hl_set(0x01)
RR_HL().exec(cpu)
assert cpu.deref_hl() == 0x00
assert cpu.carry == 1
assert cpu.cycles == 16
RR_HL().exec(cpu)
assert cpu.deref_hl() == 0x80
assert cpu.carry == 0
assert cpu.cycles == 32
@pytest.mark.parametrize("r", R8)
def test_sla_r(r):
cpu = CPU()
cpu.set_reg8(r, 0xFF)
SLA_R(r).exec(cpu)
assert cpu.get_reg8(r) == 0xFE
assert cpu.carry == 1
assert cpu.cycles == 8
cpu.set_reg8(r, 0x01)
SLA_R(r).exec(cpu)
assert cpu.get_reg8(r) == 0x02
assert cpu.carry == 0
assert cpu.cycles == 16
def test_sla_hl():
cpu = CPU()
cpu.set_reg16(R16.HL, 0x1234)
cpu.deref_hl_set(0xFF)
SLA_HL().exec(cpu)
assert cpu.deref_hl() == 0xFE
assert cpu.carry == 1
assert cpu.cycles == 16
cpu.deref_hl_set(0x01)
SLA_HL().exec(cpu)
assert cpu.deref_hl() == 0x02
assert cpu.carry == 0
assert cpu.cycles == 32
@pytest.mark.parametrize("r", R8)
def test_swap_r(r):
cpu = CPU()
cpu.set_reg8(r, 0xAB)
SWAP_R(r).exec(cpu)
assert cpu.get_reg8(r) == 0xBA
assert cpu.carry == 0
assert cpu.cycles == 8
def test_swap_hl():
cpu = CPU()
cpu.set_reg16(R16.HL, 0x1234)
cpu.deref_hl_set(0xAB)
SWAP_HL().exec(cpu)
assert cpu.deref_hl() == 0xBA
assert cpu.carry == 0
assert cpu.cycles == 16
@pytest.mark.parametrize("r", R8)
def test_sra_r(r):
cpu = CPU()
cpu.set_reg8(r, 0xFF)
SRA_R(r).exec(cpu)
assert cpu.get_reg8(r) == 0xFF
assert cpu.carry == 1
assert cpu.cycles == 8
cpu.set_reg8(r, 0x02)
SRA_R(r).exec(cpu)
assert cpu.get_reg8(r) == 0x01
assert cpu.carry == 0
assert cpu.cycles == 16
def test_sra_hl():
cpu = CPU()
cpu.set_reg16(R16.HL, 0x1234)
cpu.deref_hl_set(0xFF)
SRA_HL().exec(cpu)
assert cpu.deref_hl() == 0xFF
assert cpu.carry == 1
assert cpu.cycles == 16
cpu.deref_hl_set(0x02)
SRA_HL().exec(cpu)
assert cpu.deref_hl() == 0x01
assert cpu.carry == 0
assert cpu.cycles == 32
@pytest.mark.parametrize("r", R8)
def test_srl_r(r):
cpu = CPU()
cpu.set_reg8(r, 0xFF)
SRL_R(r).exec(cpu)
assert cpu.get_reg8(r) == 0x7F
assert cpu.carry == 1
assert cpu.cycles == 8
cpu.set_reg8(r, 0x02)
SRL_R(r).exec(cpu)
assert cpu.get_reg8(r) == 0x01
assert cpu.carry == 0
assert cpu.cycles == 16
def test_srl_hl():
cpu = CPU()
cpu.set_reg16(R16.HL, 0x1234)
cpu.deref_hl_set(0xFF)
SRL_HL().exec(cpu)
assert cpu.deref_hl() == 0x7F
assert cpu.carry == 1
assert cpu.cycles == 16
cpu.deref_hl_set(0x02)
SRL_HL().exec(cpu)
assert cpu.deref_hl() == 0x01
assert cpu.carry == 0
assert cpu.cycles == 32