SNES: PPU registers

This commit is contained in:
Ilari Liusvaara 2013-12-21 02:09:34 +02:00
parent 92c1c776cc
commit b5aaf93f07
3 changed files with 354 additions and 5 deletions

39
lua.lyx
View file

@ -4804,7 +4804,44 @@ bsnes core
\begin_layout Itemize
Registers are: pbpc, pb, pc, r0, r1, r2, r3, r4, r5, a, x, y, z, s, d, db,
p, e, irq, wai, mdr, vector, aa, rd, sp, dp, p_n, p_v, p_m, p_x, p_d, p_i,
p_z, p_c
p_z, p_c, ppu_display_disabled, ppu_oam_priority, ppu_bg_tilesize[0], ppu_bg_ti
lesize[1], ppu_bg_tilesize[2], ppu_bg_tilesize[3], ppu_bg3_priority, ppu_mosaic_
enabled[0], ppu_mosaic_enabled[1], ppu_mosaic_enabled[2], ppu_mosaic_enabled[3],
ppu_vram_incmode, ppu_mode7_vflip, ppu_mode7_hflip, ppu_window1_enabled[0],
ppu_window1_enabled[1], ppu_window1_enabled[2], ppu_window1_enabled[3],
ppu_window1_enabled[4], ppu_window1_enabled[5], ppu_window1_invert[0],
ppu_window1_invert[1], ppu_window1_invert[2], ppu_window1_invert[3], ppu_window
1_invert[4], ppu_window1_invert[5], ppu_window2_enabled[0], ppu_window2_enabled[
1], ppu_window2_enabled[2], ppu_window2_enabled[3], ppu_window2_enabled[4],
ppu_window2_enabled[5], ppu_window2_invert[0], ppu_window2_invert[1], ppu_windo
w2_invert[2], ppu_window2_invert[3], ppu_window2_invert[4], ppu_window2_invert[5
], ppu_bg_enabled[0], ppu_bg_enabled[1], ppu_bg_enabled[2], ppu_bg_enabled[3],
ppu_bg_enabled[4], ppu_bgsub_enabled[0], ppu_bgsub_enabled[1], ppu_bgsub_enable
d[2], ppu_bgsub_enabled[3], ppu_bgsub_enabled[4], ppu_window_enabled[0],
ppu_window_enabled[1], ppu_window_enabled[2], ppu_window_enabled[3], ppu_window
_enabled[4], ppu_sub_window_enabled[0], ppu_sub_window_enabled[1], ppu_sub_windo
w_enabled[2], ppu_sub_window_enabled[3], ppu_sub_window_enabled[4], ppu_addsub_m
ode, ppu_direct_color, ppu_color_mode, ppu_color_halve, ppu_color_enabled[0],
ppu_color_enabled[1], ppu_color_enabled[2], ppu_color_enabled[3], ppu_color_ena
bled[4], ppu_color_enabled[5], ppu_mode7_extbg, ppu_pseudo_hires, ppu_overscan,
ppu_oam_interlace, ppu_interlace, ppu_latch_hcounter, ppu_latch_vcounter,
ppu_counters_latched, ppu_time_over, ppu_range_over, ppu_ppu1_mdr, ppu_ppu2_mdr
, ppu_bg_y[0], ppu_bg_y[1], ppu_bg_y[2], ppu_bg_y[3], ppu_ioamaddr, ppu_icgramad
dr, ppu_display_brightness, ppu_oam_basesize, ppu_oam_nameselect, ppu_oam_tdaddr
, ppu_oam_baseaddr, ppu_oam_addr, ppu_oam_firstsprite, ppu_oam_latchdata,
ppu_bg_mode, ppu_mosaic_size, ppu_mosaic_countdown, ppu_bg_scaddr[0], ppu_bg_sc
addr[1], ppu_bg_scaddr[2], ppu_bg_scaddr[3], ppu_bg_scsize[0], ppu_bg_scsize[1],
ppu_bg_scsize[2], ppu_bg_scsize[3], ppu_bg_tdaddr[0], ppu_bg_tdaddr[1],
ppu_bg_tdaddr[2], ppu_bg_tdaddr[3], ppu_bg_ofslatch, ppu_m7_hofs, ppu_m7_vofs,
ppu_bg_hofs[0], ppu_bg_hofs[1], ppu_bg_hofs[2], ppu_bg_hofs[3], ppu_bg_vofs[0],
ppu_bg_vofs[1], ppu_bg_vofs[2], ppu_bg_vofs[3], ppu_vram_mapping, ppu_vram_incs
ize, ppu_vram_addr, ppu_mode7_repeat, ppu_m7_latch, ppu_m7a, ppu_m7b, ppu_m7c,
ppu_m7d, ppu_m7x, ppu_m7y, ppu_cgram_addr, ppu_cgram_latchdata, ppu_window1_lef
t, ppu_window1_right, ppu_window2_left, ppu_window2_right, ppu_window_mask[0],
ppu_window_mask[1], ppu_window_mask[2], ppu_window_mask[3], ppu_window_mask[4],
ppu_window_mask[5], ppu_color_mask, ppu_colorsub_mask, ppu_color_r, ppu_color_g
, ppu_color_b, ppu_color_rgb, ppu_scanlines, ppu_hcounter, ppu_vcounter,
ppu_vram_readbuffer, ppu_oam_itemcount, ppu_oam_tilecount,
\end_layout
\begin_layout Itemize

BIN
lua.pdf

Binary file not shown.

View file

@ -146,6 +146,318 @@ namespace
true},
{"p_c", []() -> uint64_t { return SNES::cpu.regs.p.c; }, [](uint64_t v) { SNES::cpu.regs.p.c = v; },
true},
#ifdef BSNES_IS_COMPAT
{"ppu_display_disabled", []() -> uint64_t { return SNES::ppu.regs.display_disabled; },
[](uint64_t v) { SNES::ppu.regs.display_disabled = v; }, true},
{"ppu_oam_priority", []() -> uint64_t { return SNES::ppu.regs.oam_priority; },
[](uint64_t v) { SNES::ppu.regs.oam_priority = v; }, true},
{"ppu_bg_tilesize[0]", []() -> uint64_t { return SNES::ppu.regs.bg_tilesize[0]; },
[](uint64_t v) { SNES::ppu.regs.bg_tilesize[0] = v; }, true},
{"ppu_bg_tilesize[1]", []() -> uint64_t { return SNES::ppu.regs.bg_tilesize[1]; },
[](uint64_t v) { SNES::ppu.regs.bg_tilesize[1] = v; }, true},
{"ppu_bg_tilesize[2]", []() -> uint64_t { return SNES::ppu.regs.bg_tilesize[2]; },
[](uint64_t v) { SNES::ppu.regs.bg_tilesize[2] = v; }, true},
{"ppu_bg_tilesize[3]", []() -> uint64_t { return SNES::ppu.regs.bg_tilesize[3]; },
[](uint64_t v) { SNES::ppu.regs.bg_tilesize[3] = v; }, true},
{"ppu_bg3_priority", []() -> uint64_t { return SNES::ppu.regs.bg3_priority; },
[](uint64_t v) { SNES::ppu.regs.bg3_priority = v; }, true},
{"ppu_mosaic_enabled[0]", []() -> uint64_t { return SNES::ppu.regs.mosaic_enabled[0]; },
[](uint64_t v) { SNES::ppu.regs.mosaic_enabled[0] = v; }, true},
{"ppu_mosaic_enabled[1]", []() -> uint64_t { return SNES::ppu.regs.mosaic_enabled[1]; },
[](uint64_t v) { SNES::ppu.regs.mosaic_enabled[1] = v; }, true},
{"ppu_mosaic_enabled[2]", []() -> uint64_t { return SNES::ppu.regs.mosaic_enabled[2]; },
[](uint64_t v) { SNES::ppu.regs.mosaic_enabled[2] = v; }, true},
{"ppu_mosaic_enabled[3]", []() -> uint64_t { return SNES::ppu.regs.mosaic_enabled[3]; },
[](uint64_t v) { SNES::ppu.regs.mosaic_enabled[3] = v; }, true},
{"ppu_vram_incmode", []() -> uint64_t { return SNES::ppu.regs.vram_incmode; },
[](uint64_t v) { SNES::ppu.regs.vram_incmode = v; }, true},
{"ppu_mode7_vflip", []() -> uint64_t { return SNES::ppu.regs.mode7_vflip; },
[](uint64_t v) { SNES::ppu.regs.mode7_vflip = v; }, true},
{"ppu_mode7_hflip", []() -> uint64_t { return SNES::ppu.regs.mode7_hflip; },
[](uint64_t v) { SNES::ppu.regs.mode7_hflip = v; }, true},
{"ppu_window1_enabled[0]", []() -> uint64_t { return SNES::ppu.regs.window1_enabled[0]; },
[](uint64_t v) { SNES::ppu.regs.window1_enabled[0] = v; }, true},
{"ppu_window1_enabled[1]", []() -> uint64_t { return SNES::ppu.regs.window1_enabled[1]; },
[](uint64_t v) { SNES::ppu.regs.window1_enabled[1] = v; }, true},
{"ppu_window1_enabled[2]", []() -> uint64_t { return SNES::ppu.regs.window1_enabled[2]; },
[](uint64_t v) { SNES::ppu.regs.window1_enabled[2] = v; }, true},
{"ppu_window1_enabled[3]", []() -> uint64_t { return SNES::ppu.regs.window1_enabled[3]; },
[](uint64_t v) { SNES::ppu.regs.window1_enabled[3] = v; }, true},
{"ppu_window1_enabled[4]", []() -> uint64_t { return SNES::ppu.regs.window1_enabled[4]; },
[](uint64_t v) { SNES::ppu.regs.window1_enabled[4] = v; }, true},
{"ppu_window1_enabled[5]", []() -> uint64_t { return SNES::ppu.regs.window1_enabled[5]; },
[](uint64_t v) { SNES::ppu.regs.window1_enabled[5] = v; }, true},
{"ppu_window1_invert[0]", []() -> uint64_t { return SNES::ppu.regs.window1_invert[0]; },
[](uint64_t v) { SNES::ppu.regs.window1_invert[0] = v; }, true},
{"ppu_window1_invert[1]", []() -> uint64_t { return SNES::ppu.regs.window1_invert[1]; },
[](uint64_t v) { SNES::ppu.regs.window1_invert[1] = v; }, true},
{"ppu_window1_invert[2]", []() -> uint64_t { return SNES::ppu.regs.window1_invert[2]; },
[](uint64_t v) { SNES::ppu.regs.window1_invert[2] = v; }, true},
{"ppu_window1_invert[3]", []() -> uint64_t { return SNES::ppu.regs.window1_invert[3]; },
[](uint64_t v) { SNES::ppu.regs.window1_invert[3] = v; }, true},
{"ppu_window1_invert[4]", []() -> uint64_t { return SNES::ppu.regs.window1_invert[4]; },
[](uint64_t v) { SNES::ppu.regs.window1_invert[4] = v; }, true},
{"ppu_window1_invert[5]", []() -> uint64_t { return SNES::ppu.regs.window1_invert[5]; },
[](uint64_t v) { SNES::ppu.regs.window1_invert[5] = v; }, true},
{"ppu_window2_enabled[0]", []() -> uint64_t { return SNES::ppu.regs.window2_enabled[0]; },
[](uint64_t v) { SNES::ppu.regs.window2_enabled[0] = v; }, true},
{"ppu_window2_enabled[1]", []() -> uint64_t { return SNES::ppu.regs.window2_enabled[1]; },
[](uint64_t v) { SNES::ppu.regs.window2_enabled[1] = v; }, true},
{"ppu_window2_enabled[2]", []() -> uint64_t { return SNES::ppu.regs.window2_enabled[2]; },
[](uint64_t v) { SNES::ppu.regs.window2_enabled[2] = v; }, true},
{"ppu_window2_enabled[3]", []() -> uint64_t { return SNES::ppu.regs.window2_enabled[3]; },
[](uint64_t v) { SNES::ppu.regs.window2_enabled[3] = v; }, true},
{"ppu_window2_enabled[4]", []() -> uint64_t { return SNES::ppu.regs.window2_enabled[4]; },
[](uint64_t v) { SNES::ppu.regs.window2_enabled[4] = v; }, true},
{"ppu_window2_enabled[5]", []() -> uint64_t { return SNES::ppu.regs.window2_enabled[5]; },
[](uint64_t v) { SNES::ppu.regs.window2_enabled[5] = v; }, true},
{"ppu_window2_invert[0]", []() -> uint64_t { return SNES::ppu.regs.window2_invert[0]; },
[](uint64_t v) { SNES::ppu.regs.window2_invert[0] = v; }, true},
{"ppu_window2_invert[1]", []() -> uint64_t { return SNES::ppu.regs.window2_invert[1]; },
[](uint64_t v) { SNES::ppu.regs.window2_invert[1] = v; }, true},
{"ppu_window2_invert[2]", []() -> uint64_t { return SNES::ppu.regs.window2_invert[2]; },
[](uint64_t v) { SNES::ppu.regs.window2_invert[2] = v; }, true},
{"ppu_window2_invert[3]", []() -> uint64_t { return SNES::ppu.regs.window2_invert[3]; },
[](uint64_t v) { SNES::ppu.regs.window2_invert[3] = v; }, true},
{"ppu_window2_invert[4]", []() -> uint64_t { return SNES::ppu.regs.window2_invert[4]; },
[](uint64_t v) { SNES::ppu.regs.window2_invert[4] = v; }, true},
{"ppu_window2_invert[5]", []() -> uint64_t { return SNES::ppu.regs.window2_invert[5]; },
[](uint64_t v) { SNES::ppu.regs.window2_invert[5] = v; }, true},
{"ppu_bg_enabled[0]", []() -> uint64_t { return SNES::ppu.regs.bg_enabled[0]; },
[](uint64_t v) { SNES::ppu.regs.bg_enabled[0] = v; }, true},
{"ppu_bg_enabled[1]", []() -> uint64_t { return SNES::ppu.regs.bg_enabled[1]; },
[](uint64_t v) { SNES::ppu.regs.bg_enabled[1] = v; }, true},
{"ppu_bg_enabled[2]", []() -> uint64_t { return SNES::ppu.regs.bg_enabled[2]; },
[](uint64_t v) { SNES::ppu.regs.bg_enabled[2] = v; }, true},
{"ppu_bg_enabled[3]", []() -> uint64_t { return SNES::ppu.regs.bg_enabled[3]; },
[](uint64_t v) { SNES::ppu.regs.bg_enabled[3] = v; }, true},
{"ppu_bg_enabled[4]", []() -> uint64_t { return SNES::ppu.regs.bg_enabled[4]; },
[](uint64_t v) { SNES::ppu.regs.bg_enabled[4] = v; }, true},
{"ppu_bgsub_enabled[0]", []() -> uint64_t { return SNES::ppu.regs.bgsub_enabled[0]; },
[](uint64_t v) { SNES::ppu.regs.bgsub_enabled[0] = v; }, true},
{"ppu_bgsub_enabled[1]", []() -> uint64_t { return SNES::ppu.regs.bgsub_enabled[1]; },
[](uint64_t v) { SNES::ppu.regs.bgsub_enabled[1] = v; }, true},
{"ppu_bgsub_enabled[2]", []() -> uint64_t { return SNES::ppu.regs.bgsub_enabled[2]; },
[](uint64_t v) { SNES::ppu.regs.bgsub_enabled[2] = v; }, true},
{"ppu_bgsub_enabled[3]", []() -> uint64_t { return SNES::ppu.regs.bgsub_enabled[3]; },
[](uint64_t v) { SNES::ppu.regs.bgsub_enabled[3] = v; }, true},
{"ppu_bgsub_enabled[4]", []() -> uint64_t { return SNES::ppu.regs.bgsub_enabled[4]; },
[](uint64_t v) { SNES::ppu.regs.bgsub_enabled[4] = v; }, true},
{"ppu_window_enabled[0]", []() -> uint64_t { return SNES::ppu.regs.window_enabled[0]; },
[](uint64_t v) { SNES::ppu.regs.window_enabled[0] = v; }, true},
{"ppu_window_enabled[1]", []() -> uint64_t { return SNES::ppu.regs.window_enabled[1]; },
[](uint64_t v) { SNES::ppu.regs.window_enabled[1] = v; }, true},
{"ppu_window_enabled[2]", []() -> uint64_t { return SNES::ppu.regs.window_enabled[2]; },
[](uint64_t v) { SNES::ppu.regs.window_enabled[2] = v; }, true},
{"ppu_window_enabled[3]", []() -> uint64_t { return SNES::ppu.regs.window_enabled[3]; },
[](uint64_t v) { SNES::ppu.regs.window_enabled[3] = v; }, true},
{"ppu_window_enabled[4]", []() -> uint64_t { return SNES::ppu.regs.window_enabled[4]; },
[](uint64_t v) { SNES::ppu.regs.window_enabled[4] = v; }, true},
{"ppu_sub_window_enabled[0]", []() -> uint64_t { return SNES::ppu.regs.sub_window_enabled[0]; },
[](uint64_t v) { SNES::ppu.regs.sub_window_enabled[0] = v; }, true},
{"ppu_sub_window_enabled[1]", []() -> uint64_t { return SNES::ppu.regs.sub_window_enabled[1]; },
[](uint64_t v) { SNES::ppu.regs.sub_window_enabled[1] = v; }, true},
{"ppu_sub_window_enabled[2]", []() -> uint64_t { return SNES::ppu.regs.sub_window_enabled[2]; },
[](uint64_t v) { SNES::ppu.regs.sub_window_enabled[2] = v; }, true},
{"ppu_sub_window_enabled[3]", []() -> uint64_t { return SNES::ppu.regs.sub_window_enabled[3]; },
[](uint64_t v) { SNES::ppu.regs.sub_window_enabled[3] = v; }, true},
{"ppu_sub_window_enabled[4]", []() -> uint64_t { return SNES::ppu.regs.sub_window_enabled[4]; },
[](uint64_t v) { SNES::ppu.regs.sub_window_enabled[4] = v; }, true},
{"ppu_addsub_mode", []() -> uint64_t { return SNES::ppu.regs.addsub_mode; },
[](uint64_t v) { SNES::ppu.regs.addsub_mode = v; }, true},
{"ppu_direct_color", []() -> uint64_t { return SNES::ppu.regs.direct_color; },
[](uint64_t v) { SNES::ppu.regs.direct_color = v; }, true},
{"ppu_color_mode", []() -> uint64_t { return SNES::ppu.regs.color_mode; },
[](uint64_t v) { SNES::ppu.regs.color_mode = v; }, true},
{"ppu_color_halve", []() -> uint64_t { return SNES::ppu.regs.color_halve; },
[](uint64_t v) { SNES::ppu.regs.color_halve = v; }, true},
{"ppu_color_enabled[0]", []() -> uint64_t { return SNES::ppu.regs.color_enabled[0]; },
[](uint64_t v) { SNES::ppu.regs.color_enabled[0] = v; }, true},
{"ppu_color_enabled[1]", []() -> uint64_t { return SNES::ppu.regs.color_enabled[1]; },
[](uint64_t v) { SNES::ppu.regs.color_enabled[1] = v; }, true},
{"ppu_color_enabled[2]", []() -> uint64_t { return SNES::ppu.regs.color_enabled[2]; },
[](uint64_t v) { SNES::ppu.regs.color_enabled[2] = v; }, true},
{"ppu_color_enabled[3]", []() -> uint64_t { return SNES::ppu.regs.color_enabled[3]; },
[](uint64_t v) { SNES::ppu.regs.color_enabled[3] = v; }, true},
{"ppu_color_enabled[4]", []() -> uint64_t { return SNES::ppu.regs.color_enabled[4]; },
[](uint64_t v) { SNES::ppu.regs.color_enabled[4] = v; }, true},
{"ppu_color_enabled[5]", []() -> uint64_t { return SNES::ppu.regs.color_enabled[5]; },
[](uint64_t v) { SNES::ppu.regs.color_enabled[5] = v; }, true},
{"ppu_mode7_extbg", []() -> uint64_t { return SNES::ppu.regs.mode7_extbg; },
[](uint64_t v) { SNES::ppu.regs.mode7_extbg = v; }, true},
{"ppu_pseudo_hires", []() -> uint64_t { return SNES::ppu.regs.pseudo_hires; },
[](uint64_t v) { SNES::ppu.regs.pseudo_hires = v; }, true},
{"ppu_overscan", []() -> uint64_t { return SNES::ppu.regs.overscan; },
[](uint64_t v) { SNES::ppu.regs.overscan = v; }, true},
{"ppu_oam_interlace", []() -> uint64_t { return SNES::ppu.regs.oam_interlace; },
[](uint64_t v) { SNES::ppu.regs.oam_interlace = v; }, true},
{"ppu_interlace", []() -> uint64_t { return SNES::ppu.regs.interlace; },
[](uint64_t v) { SNES::ppu.regs.interlace = v; }, true},
{"ppu_latch_hcounter", []() -> uint64_t { return SNES::ppu.regs.latch_hcounter; },
[](uint64_t v) { SNES::ppu.regs.latch_hcounter = v; }, true},
{"ppu_latch_vcounter", []() -> uint64_t { return SNES::ppu.regs.latch_vcounter; },
[](uint64_t v) { SNES::ppu.regs.latch_vcounter = v; }, true},
{"ppu_counters_latched", []() -> uint64_t { return SNES::ppu.regs.counters_latched; },
[](uint64_t v) { SNES::ppu.regs.counters_latched = v; }, true},
{"ppu_time_over", []() -> uint64_t { return SNES::ppu.regs.time_over; },
[](uint64_t v) { SNES::ppu.regs.time_over = v; }, true},
{"ppu_range_over", []() -> uint64_t { return SNES::ppu.regs.range_over; },
[](uint64_t v) { SNES::ppu.regs.range_over = v; }, true},
{"ppu_ppu1_mdr", []() -> uint64_t { return SNES::ppu.regs.ppu1_mdr; },
[](uint64_t v) { SNES::ppu.regs.ppu1_mdr = v; }},
{"ppu_ppu2_mdr", []() -> uint64_t { return SNES::ppu.regs.ppu2_mdr; },
[](uint64_t v) { SNES::ppu.regs.ppu2_mdr = v; }},
{"ppu_bg_y[0]", []() -> uint64_t { return SNES::ppu.regs.bg_y[0]; },
[](uint64_t v) { SNES::ppu.regs.bg_y[0] = v; }},
{"ppu_bg_y[1]", []() -> uint64_t { return SNES::ppu.regs.bg_y[1]; },
[](uint64_t v) { SNES::ppu.regs.bg_y[1] = v; }},
{"ppu_bg_y[2]", []() -> uint64_t { return SNES::ppu.regs.bg_y[2]; },
[](uint64_t v) { SNES::ppu.regs.bg_y[2] = v; }},
{"ppu_bg_y[3]", []() -> uint64_t { return SNES::ppu.regs.bg_y[3]; },
[](uint64_t v) { SNES::ppu.regs.bg_y[3] = v; }},
{"ppu_ioamaddr", []() -> uint64_t { return SNES::ppu.regs.ioamaddr; },
[](uint64_t v) { SNES::ppu.regs.ioamaddr = v; }},
{"ppu_icgramaddr", []() -> uint64_t { return SNES::ppu.regs.icgramaddr; },
[](uint64_t v) { SNES::ppu.regs.icgramaddr = v; }},
{"ppu_display_brightness", []() -> uint64_t { return SNES::ppu.regs.display_brightness; },
[](uint64_t v) { SNES::ppu.regs.display_brightness = v; }},
{"ppu_oam_basesize", []() -> uint64_t { return SNES::ppu.regs.oam_basesize; },
[](uint64_t v) { SNES::ppu.regs.oam_basesize = v; }},
{"ppu_oam_nameselect", []() -> uint64_t { return SNES::ppu.regs.oam_nameselect; },
[](uint64_t v) { SNES::ppu.regs.oam_nameselect = v; }},
{"ppu_oam_tdaddr", []() -> uint64_t { return SNES::ppu.regs.oam_tdaddr; },
[](uint64_t v) { SNES::ppu.regs.oam_tdaddr = v; }},
{"ppu_oam_baseaddr", []() -> uint64_t { return SNES::ppu.regs.oam_baseaddr; },
[](uint64_t v) { SNES::ppu.regs.oam_baseaddr = v; }},
{"ppu_oam_addr", []() -> uint64_t { return SNES::ppu.regs.oam_addr; },
[](uint64_t v) { SNES::ppu.regs.oam_addr = v; }},
{"ppu_oam_firstsprite", []() -> uint64_t { return SNES::ppu.regs.oam_firstsprite; },
[](uint64_t v) { SNES::ppu.regs.oam_firstsprite = v; }},
{"ppu_oam_latchdata", []() -> uint64_t { return SNES::ppu.regs.oam_latchdata; },
[](uint64_t v) { SNES::ppu.regs.oam_latchdata = v; }},
{"ppu_bg_mode", []() -> uint64_t { return SNES::ppu.regs.bg_mode; },
[](uint64_t v) { SNES::ppu.regs.bg_mode = v; }},
{"ppu_mosaic_size", []() -> uint64_t { return SNES::ppu.regs.mosaic_size; },
[](uint64_t v) { SNES::ppu.regs.mosaic_size = v; }},
{"ppu_mosaic_countdown", []() -> uint64_t { return SNES::ppu.regs.mosaic_countdown; },
[](uint64_t v) { SNES::ppu.regs.mosaic_countdown = v; }},
{"ppu_bg_scaddr[0]", []() -> uint64_t { return SNES::ppu.regs.bg_scaddr[0]; },
[](uint64_t v) { SNES::ppu.regs.bg_scaddr[0] = v; }},
{"ppu_bg_scaddr[1]", []() -> uint64_t { return SNES::ppu.regs.bg_scaddr[1]; },
[](uint64_t v) { SNES::ppu.regs.bg_scaddr[1] = v; }},
{"ppu_bg_scaddr[2]", []() -> uint64_t { return SNES::ppu.regs.bg_scaddr[2]; },
[](uint64_t v) { SNES::ppu.regs.bg_scaddr[2] = v; }},
{"ppu_bg_scaddr[3]", []() -> uint64_t { return SNES::ppu.regs.bg_scaddr[3]; },
[](uint64_t v) { SNES::ppu.regs.bg_scaddr[3] = v; }},
{"ppu_bg_scsize[0]", []() -> uint64_t { return SNES::ppu.regs.bg_scsize[0]; },
[](uint64_t v) { SNES::ppu.regs.bg_scsize[0] = v; }},
{"ppu_bg_scsize[1]", []() -> uint64_t { return SNES::ppu.regs.bg_scsize[1]; },
[](uint64_t v) { SNES::ppu.regs.bg_scsize[1] = v; }},
{"ppu_bg_scsize[2]", []() -> uint64_t { return SNES::ppu.regs.bg_scsize[2]; },
[](uint64_t v) { SNES::ppu.regs.bg_scsize[2] = v; }},
{"ppu_bg_scsize[3]", []() -> uint64_t { return SNES::ppu.regs.bg_scsize[3]; },
[](uint64_t v) { SNES::ppu.regs.bg_scsize[3] = v; }},
{"ppu_bg_tdaddr[0]", []() -> uint64_t { return SNES::ppu.regs.bg_tdaddr[0]; },
[](uint64_t v) { SNES::ppu.regs.bg_tdaddr[0] = v; }},
{"ppu_bg_tdaddr[1]", []() -> uint64_t { return SNES::ppu.regs.bg_tdaddr[1]; },
[](uint64_t v) { SNES::ppu.regs.bg_tdaddr[1] = v; }},
{"ppu_bg_tdaddr[2]", []() -> uint64_t { return SNES::ppu.regs.bg_tdaddr[2]; },
[](uint64_t v) { SNES::ppu.regs.bg_tdaddr[2] = v; }},
{"ppu_bg_tdaddr[3]", []() -> uint64_t { return SNES::ppu.regs.bg_tdaddr[3]; },
[](uint64_t v) { SNES::ppu.regs.bg_tdaddr[3] = v; }},
{"ppu_bg_ofslatch", []() -> uint64_t { return SNES::ppu.regs.bg_ofslatch; },
[](uint64_t v) { SNES::ppu.regs.bg_ofslatch = v; }},
{"ppu_m7_hofs", []() -> uint64_t { return SNES::ppu.regs.m7_hofs; },
[](uint64_t v) { SNES::ppu.regs.m7_hofs = v; }},
{"ppu_m7_vofs", []() -> uint64_t { return SNES::ppu.regs.m7_vofs; },
[](uint64_t v) { SNES::ppu.regs.m7_vofs = v; }},
{"ppu_bg_hofs[0]", []() -> uint64_t { return SNES::ppu.regs.bg_hofs[0]; },
[](uint64_t v) { SNES::ppu.regs.bg_hofs[0] = v; }},
{"ppu_bg_hofs[1]", []() -> uint64_t { return SNES::ppu.regs.bg_hofs[1]; },
[](uint64_t v) { SNES::ppu.regs.bg_hofs[1] = v; }},
{"ppu_bg_hofs[2]", []() -> uint64_t { return SNES::ppu.regs.bg_hofs[2]; },
[](uint64_t v) { SNES::ppu.regs.bg_hofs[2] = v; }},
{"ppu_bg_hofs[3]", []() -> uint64_t { return SNES::ppu.regs.bg_hofs[3]; },
[](uint64_t v) { SNES::ppu.regs.bg_hofs[3] = v; }},
{"ppu_bg_vofs[0]", []() -> uint64_t { return SNES::ppu.regs.bg_vofs[0]; },
[](uint64_t v) { SNES::ppu.regs.bg_vofs[0] = v; }},
{"ppu_bg_vofs[1]", []() -> uint64_t { return SNES::ppu.regs.bg_vofs[1]; },
[](uint64_t v) { SNES::ppu.regs.bg_vofs[1] = v; }},
{"ppu_bg_vofs[2]", []() -> uint64_t { return SNES::ppu.regs.bg_vofs[2]; },
[](uint64_t v) { SNES::ppu.regs.bg_vofs[2] = v; }},
{"ppu_bg_vofs[3]", []() -> uint64_t { return SNES::ppu.regs.bg_vofs[3]; },
[](uint64_t v) { SNES::ppu.regs.bg_vofs[3] = v; }},
{"ppu_vram_mapping", []() -> uint64_t { return SNES::ppu.regs.vram_mapping; },
[](uint64_t v) { SNES::ppu.regs.vram_mapping = v; }},
{"ppu_vram_incsize", []() -> uint64_t { return SNES::ppu.regs.vram_incsize; },
[](uint64_t v) { SNES::ppu.regs.vram_incsize = v; }},
{"ppu_vram_addr", []() -> uint64_t { return SNES::ppu.regs.vram_addr; },
[](uint64_t v) { SNES::ppu.regs.vram_addr = v; }},
{"ppu_mode7_repeat", []() -> uint64_t { return SNES::ppu.regs.mode7_repeat; },
[](uint64_t v) { SNES::ppu.regs.mode7_repeat = v; }},
{"ppu_m7_latch", []() -> uint64_t { return SNES::ppu.regs.m7_latch; },
[](uint64_t v) { SNES::ppu.regs.m7_latch = v; }},
{"ppu_m7a", []() -> uint64_t { return SNES::ppu.regs.m7a; },
[](uint64_t v) { SNES::ppu.regs.m7a = v; }},
{"ppu_m7b", []() -> uint64_t { return SNES::ppu.regs.m7b; },
[](uint64_t v) { SNES::ppu.regs.m7b = v; }},
{"ppu_m7c", []() -> uint64_t { return SNES::ppu.regs.m7c; },
[](uint64_t v) { SNES::ppu.regs.m7c = v; }},
{"ppu_m7d", []() -> uint64_t { return SNES::ppu.regs.m7d; },
[](uint64_t v) { SNES::ppu.regs.m7d = v; }},
{"ppu_m7x", []() -> uint64_t { return SNES::ppu.regs.m7x; },
[](uint64_t v) { SNES::ppu.regs.m7x = v; }},
{"ppu_m7y", []() -> uint64_t { return SNES::ppu.regs.m7y; },
[](uint64_t v) { SNES::ppu.regs.m7y = v; }},
{"ppu_cgram_addr", []() -> uint64_t { return SNES::ppu.regs.cgram_addr; },
[](uint64_t v) { SNES::ppu.regs.cgram_addr = v; }},
{"ppu_cgram_latchdata", []() -> uint64_t { return SNES::ppu.regs.cgram_latchdata; },
[](uint64_t v) { SNES::ppu.regs.cgram_latchdata = v; }},
{"ppu_window1_left", []() -> uint64_t { return SNES::ppu.regs.window1_left; },
[](uint64_t v) { SNES::ppu.regs.window1_left = v; }},
{"ppu_window1_right", []() -> uint64_t { return SNES::ppu.regs.window1_right; },
[](uint64_t v) { SNES::ppu.regs.window1_right = v; }},
{"ppu_window2_left", []() -> uint64_t { return SNES::ppu.regs.window2_left; },
[](uint64_t v) { SNES::ppu.regs.window2_left = v; }},
{"ppu_window2_right", []() -> uint64_t { return SNES::ppu.regs.window2_right; },
[](uint64_t v) { SNES::ppu.regs.window2_right = v; }},
{"ppu_window_mask[0]", []() -> uint64_t { return SNES::ppu.regs.window_mask[0]; },
[](uint64_t v) { SNES::ppu.regs.window_mask[0] = v; }},
{"ppu_window_mask[1]", []() -> uint64_t { return SNES::ppu.regs.window_mask[1]; },
[](uint64_t v) { SNES::ppu.regs.window_mask[1] = v; }},
{"ppu_window_mask[2]", []() -> uint64_t { return SNES::ppu.regs.window_mask[2]; },
[](uint64_t v) { SNES::ppu.regs.window_mask[2] = v; }},
{"ppu_window_mask[3]", []() -> uint64_t { return SNES::ppu.regs.window_mask[3]; },
[](uint64_t v) { SNES::ppu.regs.window_mask[3] = v; }},
{"ppu_window_mask[4]", []() -> uint64_t { return SNES::ppu.regs.window_mask[4]; },
[](uint64_t v) { SNES::ppu.regs.window_mask[4] = v; }},
{"ppu_window_mask[5]", []() -> uint64_t { return SNES::ppu.regs.window_mask[5]; },
[](uint64_t v) { SNES::ppu.regs.window_mask[5] = v; }},
{"ppu_color_mask", []() -> uint64_t { return SNES::ppu.regs.color_mask; },
[](uint64_t v) { SNES::ppu.regs.color_mask = v; }},
{"ppu_colorsub_mask", []() -> uint64_t { return SNES::ppu.regs.colorsub_mask; },
[](uint64_t v) { SNES::ppu.regs.colorsub_mask = v; }},
{"ppu_color_r", []() -> uint64_t { return SNES::ppu.regs.color_r; },
[](uint64_t v) { SNES::ppu.regs.color_r = v; }},
{"ppu_color_g", []() -> uint64_t { return SNES::ppu.regs.color_g; },
[](uint64_t v) { SNES::ppu.regs.color_g = v; }},
{"ppu_color_b", []() -> uint64_t { return SNES::ppu.regs.color_b; },
[](uint64_t v) { SNES::ppu.regs.color_b = v; }},
{"ppu_color_rgb", []() -> uint64_t { return SNES::ppu.regs.color_rgb; },
[](uint64_t v) { SNES::ppu.regs.color_rgb = v; }},
{"ppu_scanlines", []() -> uint64_t { return SNES::ppu.regs.scanlines; },
[](uint64_t v) { SNES::ppu.regs.scanlines = v; }},
{"ppu_hcounter", []() -> uint64_t { return SNES::ppu.regs.hcounter; },
[](uint64_t v) { SNES::ppu.regs.hcounter = v; }},
{"ppu_vcounter", []() -> uint64_t { return SNES::ppu.regs.vcounter; },
[](uint64_t v) { SNES::ppu.regs.vcounter = v; }},
{"ppu_vram_readbuffer", []() -> uint64_t { return SNES::ppu.regs.vram_readbuffer; },
[](uint64_t v) { SNES::ppu.regs.vram_readbuffer = v; }},
{"ppu_oam_itemcount", []() -> uint64_t { return SNES::ppu.regs.oam_itemcount; },
[](uint64_t v) { SNES::ppu.regs.oam_itemcount = v; }},
{"ppu_oam_tilecount", []() -> uint64_t { return SNES::ppu.regs.oam_tilecount; },
[](uint64_t v) { SNES::ppu.regs.oam_tilecount = v; }},
#endif
//TODO: SMP registers, DSP registers, chip registers.
{NULL, NULL, NULL}
};
@ -314,12 +626,12 @@ namespace
for(size_t j = 0; j < p2controllers; j++)
r.logical_map[j + 1] = std::make_pair(2U, j);
for(size_t j = 1; j < p1controllers; j++)
r.logical_map[j + p2controllers] = std::make_pair(1U, j);
r.logical_map[j + p2controllers] = std::make_pair(1U, j);
} else {
for(size_t j = 0; j < p1controllers; j++)
r.logical_map[j] = std::make_pair(1, j);
for(size_t j = 0; j < p2controllers; j++)
r.logical_map[j + p1controllers] = std::make_pair(2U, j);
r.logical_map[j + p1controllers] = std::make_pair(2U, j);
}
return r;
}
@ -666,7 +978,7 @@ namespace
}) {}
std::string c_core_identifier() {
return (stringfmt() << snes_library_id() << " (" << SNES::Info::Profile << " core)").str();
return (stringfmt() << snes_library_id() << " (" << SNES::Info::Profile << " core)").str();
}
bool c_set_region(core_region& region) {
if(&region == &region_auto)
@ -831,7 +1143,7 @@ again:
SNES::system.power();
else
SNES::system.reset();
messages << "SNES reset (delayed " << delayreset_cycles_run << ")"
messages << "SNES reset (delayed " << delayreset_cycles_run << ")"
<< std::endl;
#else
messages << "Delayresets not supported on this bsnes version "