From d270f8c0ec2895eb3db0ebb539cbd3ac0135bea5 Mon Sep 17 00:00:00 2001 From: yz70s Date: Tue, 20 Sep 2016 18:52:26 +0200 Subject: [PATCH] xbox.cpp/chihiro.cpp: small refactoring --- src/mame/drivers/chihiro.cpp | 59 +++++----- src/mame/machine/xbox.cpp | 209 +++++++++++++++++++---------------- 2 files changed, 143 insertions(+), 125 deletions(-) diff --git a/src/mame/drivers/chihiro.cpp b/src/mame/drivers/chihiro.cpp index 5a96b478cb4..ac84ac32471 100644 --- a/src/mame/drivers/chihiro.cpp +++ b/src/mame/drivers/chihiro.cpp @@ -585,21 +585,23 @@ St. Instr. Comment /* jamtable disassembler */ void chihiro_state::jamtable_disasm(address_space &space, UINT32 address, UINT32 size) // 0xff000080 == fff00080 { + debugger_cpu &cpu = machine().debugger().cpu(); + debugger_console &con = machine().debugger().console(); offs_t addr = (offs_t)address; if (!space.device().memory().translate(space.spacenum(), TRANSLATE_READ_DEBUG, addr)) { - machine().debugger().console().printf("Address is unmapped.\n"); + con.printf("Address is unmapped.\n"); return; } while (1) { offs_t base = addr; - UINT32 opcode = space.read_byte(addr); + UINT32 opcode = cpu.read_byte(space, address, true); addr++; - UINT32 op1 = space.read_dword_unaligned(addr); + UINT32 op1 = cpu.read_dword(space, address, true); addr += 4; - UINT32 op2 = space.read_dword_unaligned(addr); + UINT32 op2 = cpu.read_dword(space, address, true); addr += 4; char sop1[16]; @@ -620,7 +622,7 @@ void chihiro_state::jamtable_disasm(address_space &space, UINT32 address, UINT32 sprintf(sop1, "%08X", op1); sprintf(pcrel, "%08X", base + 9 + op1); } - machine().debugger().console().printf("%08X ", base); + con.printf("%08X ", base); // dl=instr ebx=par1 eax=par2 switch (opcode) { @@ -635,39 +637,39 @@ void chihiro_state::jamtable_disasm(address_space &space, UINT32 address, UINT32 // | | Reserved | Bus Number | Device Number | Function Number | Register Number |0|0| // +-+----------+------------+---------------+-----------------+-----------------+-+-+ // 31 - Enable bit - machine().debugger().console().printf("POKEPCI PCICONF[%s]=%s\n", sop2, sop1); + con.printf("POKEPCI PCICONF[%s]=%s\n", sop2, sop1); break; case 0x02: - machine().debugger().console().printf("OUTB PORT[%s]=%s\n", sop2, sop1); + con.printf("OUTB PORT[%s]=%s\n", sop2, sop1); break; case 0x03: - machine().debugger().console().printf("POKE MEM[%s]=%s\n", sop2, sop1); + con.printf("POKE MEM[%s]=%s\n", sop2, sop1); break; case 0x04: - machine().debugger().console().printf("BNE IF ACC != %s THEN PC=%s\n", sop2, pcrel); + con.printf("BNE IF ACC != %s THEN PC=%s\n", sop2, pcrel); break; case 0x05: // out cf8,op2 // in acc,cfc - machine().debugger().console().printf("PEEKPCI ACC=PCICONF[%s]\n", sop2); + con.printf("PEEKPCI ACC=PCICONF[%s]\n", sop2); break; case 0x06: - machine().debugger().console().printf("AND/OR ACC=(ACC & %s) | %s\n", sop2, sop1); + con.printf("AND/OR ACC=(ACC & %s) | %s\n", sop2, sop1); break; case 0x07: - machine().debugger().console().printf("BRA PC=%s\n", pcrel); + con.printf("BRA PC=%s\n", pcrel); break; case 0x08: - machine().debugger().console().printf("INB ACC=PORT[%s]\n", sop2); + con.printf("INB ACC=PORT[%s]\n", sop2); break; case 0x09: - machine().debugger().console().printf("PEEK ACC=MEM[%s]\n", sop2); + con.printf("PEEK ACC=MEM[%s]\n", sop2); break; case 0xee: - machine().debugger().console().printf("END\n"); + con.printf("END\n"); break; default: - machine().debugger().console().printf("NOP ????\n"); + con.printf("NOP ????\n"); break; } if (opcode == 0xee) @@ -696,34 +698,35 @@ void chihiro_state::threadlist_command(int ref, int params, const char **param) { const UINT32 thlists = 0x8003aae0; // magic address address_space &space = m_maincpu->space(); - debugger_console con = machine().debugger().console(); + debugger_cpu &cpu = machine().debugger().cpu(); + debugger_console &con = machine().debugger().console(); con.printf("Pri. _KTHREAD Stack Function\n"); con.printf("-------------------------------\n"); for (int pri=0;pri < 16;pri++) { UINT32 curr = thlists + pri * 8; - UINT32 next = machine().debugger().cpu().read_dword(space, curr, true); + UINT32 next = cpu.read_dword(space, curr, true); while (next != curr) { UINT32 kthrd = next - 0x5c; - UINT32 topstack = machine().debugger().cpu().read_dword(space, kthrd + 0x1c, true); - UINT32 tlsdata = machine().debugger().cpu().read_dword(space, kthrd + 0x28, true); + UINT32 topstack = cpu.read_dword(space, kthrd + 0x1c, true); + UINT32 tlsdata = cpu.read_dword(space, kthrd + 0x28, true); UINT32 function; if (tlsdata == 0) - function = machine().debugger().cpu().read_dword(space, topstack - 0x210 - 8, true); + function = cpu.read_dword(space, topstack - 0x210 - 8, true); else - function = machine().debugger().cpu().read_dword(space, tlsdata - 8, true); + function = cpu.read_dword(space, tlsdata - 8, true); con.printf(" %02d %08x %08x %08x\n", pri, kthrd, topstack, function); - next = machine().debugger().cpu().read_dword(space, next, true); + next = cpu.read_dword(space, next, true); } } } void chihiro_state::chihiro_help_command(int ref, int params, const char **param) { - debugger_console con = machine().debugger().console(); + debugger_console &con = machine().debugger().console(); con.printf("Available Chihiro commands:\n"); con.printf(" chihiro jamdis,, -- Disassemble bytes of JamTable instructions starting at \n"); @@ -746,10 +749,10 @@ void chihiro_state::debug_commands(int ref, int params, const char **param) void chihiro_state::hack_eeprom() { // 8003b744,3b744=0x90 0x90 - m_maincpu->space(0).write_byte(0x3b744, 0x90); - m_maincpu->space(0).write_byte(0x3b745, 0x90); - m_maincpu->space(0).write_byte(0x3b766, 0xc9); - m_maincpu->space(0).write_byte(0x3b767, 0xc3); + m_maincpu->space(AS_PROGRAM).write_byte(0x3b744, 0x90); + m_maincpu->space(AS_PROGRAM).write_byte(0x3b745, 0x90); + m_maincpu->space(AS_PROGRAM).write_byte(0x3b766, 0xc9); + m_maincpu->space(AS_PROGRAM).write_byte(0x3b767, 0xc3); } #define HACK_ITEMS 5 diff --git a/src/mame/machine/xbox.cpp b/src/mame/machine/xbox.cpp index 9b15cbab1ae..77523ea6a7c 100644 --- a/src/mame/machine/xbox.cpp +++ b/src/mame/machine/xbox.cpp @@ -23,80 +23,87 @@ void xbox_base_state::dump_string_command(int ref, int params, const char **param) { + debugger_cpu &cpu = machine().debugger().cpu(); + debugger_console &con = machine().debugger().console(); address_space &space = m_maincpu->space(); + UINT64 addr; + offs_t address; if (params < 1) return; - UINT64 addr; if (!machine().debugger().commands().validate_number_parameter(param[0], &addr)) return; - offs_t address = (offs_t)addr; + address = (offs_t)addr; if (!m_maincpu->translate(AS_PROGRAM, TRANSLATE_READ_DEBUG, address)) { - machine().debugger().console().printf("Address is unmapped.\n"); + con.printf("Address is unmapped.\n"); return; } + address = (offs_t)addr; - UINT32 length = space.read_word_unaligned(address); - UINT32 maximumlength = space.read_word_unaligned(address + 2); - offs_t buffer = space.read_dword_unaligned(address + 4); - machine().debugger().console().printf("Length %d word\n", length); - machine().debugger().console().printf("MaximumLength %d word\n", maximumlength); - machine().debugger().console().printf("Buffer %08X byte* ", buffer); - if (!m_maincpu->translate(AS_PROGRAM, TRANSLATE_READ_DEBUG, buffer)) - { - machine().debugger().console().printf("\nBuffer is unmapped.\n"); - return; - } + UINT32 length = cpu.read_word(space, address, true); + UINT32 maximumlength = cpu.read_word(space, address + 2, true); + offs_t buffer = cpu.read_dword(space, address + 4, true); + con.printf("Length %d word\n", length); + con.printf("MaximumLength %d word\n", maximumlength); + con.printf("Buffer %08X byte* ", buffer); if (length > 256) length = 256; for (int a = 0; a < length; a++) { - UINT8 c = space.read_byte(buffer + a); - machine().debugger().console().printf("%c", c); + UINT8 c = cpu.read_byte(space, buffer + a, true); + con.printf("%c", c); } - machine().debugger().console().printf("\n"); + con.printf("\n"); } void xbox_base_state::dump_process_command(int ref, int params, const char **param) { + debugger_cpu &cpu = machine().debugger().cpu(); + debugger_console &con = machine().debugger().console(); address_space &space = m_maincpu->space(); + UINT64 addr; + offs_t address; if (params < 1) return; - UINT64 addr; if (!machine().debugger().commands().validate_number_parameter(param[0], &addr)) return; - offs_t address = (offs_t)addr; + address = (offs_t)addr; if (!m_maincpu->translate(AS_PROGRAM, TRANSLATE_READ_DEBUG, address)) { - machine().debugger().console().printf("Address is unmapped.\n"); + con.printf("Address is unmapped.\n"); return; } - machine().debugger().console().printf("ReadyListHead {%08X,%08X} _LIST_ENTRY\n", space.read_dword_unaligned(address), space.read_dword_unaligned(address + 4)); - machine().debugger().console().printf("ThreadListHead {%08X,%08X} _LIST_ENTRY\n", space.read_dword_unaligned(address + 8), space.read_dword_unaligned(address + 12)); - machine().debugger().console().printf("StackCount %d dword\n", space.read_dword_unaligned(address + 16)); - machine().debugger().console().printf("ThreadQuantum %d dword\n", space.read_dword_unaligned(address + 20)); - machine().debugger().console().printf("BasePriority %d byte\n", space.read_byte(address + 24)); - machine().debugger().console().printf("DisableBoost %d byte\n", space.read_byte(address + 25)); - machine().debugger().console().printf("DisableQuantum %d byte\n", space.read_byte(address + 26)); - machine().debugger().console().printf("_padding %d byte\n", space.read_byte(address + 27)); + address = (offs_t)addr; + + con.printf("ReadyListHead {%08X,%08X} _LIST_ENTRY\n", cpu.read_dword(space, address, true), cpu.read_dword(space, address + 4, true)); + con.printf("ThreadListHead {%08X,%08X} _LIST_ENTRY\n", cpu.read_dword(space, address + 8, true), cpu.read_dword(space, address + 12, true)); + con.printf("StackCount %d dword\n", cpu.read_dword(space, address + 16, true)); + con.printf("ThreadQuantum %d dword\n", cpu.read_dword(space, address + 20, true)); + con.printf("BasePriority %d byte\n", cpu.read_byte(space, address + 24, true)); + con.printf("DisableBoost %d byte\n", cpu.read_byte(space, address + 25, true)); + con.printf("DisableQuantum %d byte\n", cpu.read_byte(space, address + 26, true)); + con.printf("_padding %d byte\n", cpu.read_byte(space, address + 27, true)); } void xbox_base_state::dump_list_command(int ref, int params, const char **param) { + debugger_cpu &cpu = machine().debugger().cpu(); + debugger_console &con = machine().debugger().console(); address_space &space = m_maincpu->space(); + UINT64 addr; + offs_t address; if (params < 1) return; - UINT64 addr; if (!machine().debugger().commands().validate_number_parameter(param[0], &addr)) return; @@ -110,26 +117,27 @@ void xbox_base_state::dump_list_command(int ref, int params, const char **param) } UINT64 start = addr; - offs_t address = (offs_t)addr; + address = (offs_t)addr; if (!m_maincpu->translate(AS_PROGRAM, TRANSLATE_READ_DEBUG, address)) { - machine().debugger().console().printf("Address is unmapped.\n"); + con.printf("Address is unmapped.\n"); return; } + address = (offs_t)addr; if (params >= 2) - machine().debugger().console().printf("Entry Object\n"); + con.printf("Entry Object\n"); else - machine().debugger().console().printf("Entry\n"); + con.printf("Entry\n"); UINT64 old; for (int num = 0; num < 32; num++) { if (params >= 2) - machine().debugger().console().printf("%08X %08X\n", (UINT32)addr, (offs_t)addr - offset); + con.printf("%08X %08X\n", (UINT32)addr, (offs_t)addr - offset); else - machine().debugger().console().printf("%08X\n", (UINT32)addr); + con.printf("%08X\n", (UINT32)addr); old = addr; - addr = space.read_dword_unaligned(address); + addr = cpu.read_dword(space, address, true); if (addr == start) break; if (addr == old) @@ -137,99 +145,102 @@ void xbox_base_state::dump_list_command(int ref, int params, const char **param) address = (offs_t)addr; if (!m_maincpu->translate(AS_PROGRAM, TRANSLATE_READ_DEBUG, address)) break; + address = (offs_t)addr; } } void xbox_base_state::dump_dpc_command(int ref, int params, const char **param) { + debugger_cpu &cpu = machine().debugger().cpu(); + debugger_console &con = machine().debugger().console(); address_space &space = m_maincpu->space(); + UINT64 addr; + offs_t address; if (params < 1) return; - UINT64 addr; if (!machine().debugger().commands().validate_number_parameter(param[0], &addr)) return; - offs_t address = (offs_t)addr; + address = (offs_t)addr; if (!m_maincpu->translate(AS_PROGRAM, TRANSLATE_READ_DEBUG, address)) { - machine().debugger().console().printf("Address is unmapped.\n"); + con.printf("Address is unmapped.\n"); return; } - machine().debugger().console().printf("Type %d word\n", space.read_word_unaligned(address)); - machine().debugger().console().printf("Inserted %d byte\n", space.read_byte(address + 2)); - machine().debugger().console().printf("Padding %d byte\n", space.read_byte(address + 3)); - machine().debugger().console().printf("DpcListEntry {%08X,%08X} _LIST_ENTRY\n", space.read_dword_unaligned(address + 4), space.read_dword_unaligned(address + 8)); - machine().debugger().console().printf("DeferredRoutine %08X dword\n", space.read_dword_unaligned(address + 12)); - machine().debugger().console().printf("DeferredContext %08X dword\n", space.read_dword_unaligned(address + 16)); - machine().debugger().console().printf("SystemArgument1 %08X dword\n", space.read_dword_unaligned(address + 20)); - machine().debugger().console().printf("SystemArgument2 %08X dword\n", space.read_dword_unaligned(address + 24)); + address = (offs_t)addr; + con.printf("Type %d word\n", cpu.read_word(space, address, true)); + con.printf("Inserted %d byte\n", cpu.read_byte(space, address + 2, true)); + con.printf("Padding %d byte\n", cpu.read_byte(space, address + 3, true)); + con.printf("DpcListEntry {%08X,%08X} _LIST_ENTRY\n", cpu.read_dword(space, address + 4, true), cpu.read_dword(space, address + 8, true)); + con.printf("DeferredRoutine %08X dword\n", cpu.read_dword(space, address + 12, true)); + con.printf("DeferredContext %08X dword\n", cpu.read_dword(space, address + 16, true)); + con.printf("SystemArgument1 %08X dword\n", cpu.read_dword(space, address + 20, true)); + con.printf("SystemArgument2 %08X dword\n", cpu.read_dword(space, address + 24, true)); } void xbox_base_state::dump_timer_command(int ref, int params, const char **param) { + debugger_cpu &cpu = machine().debugger().cpu(); + debugger_console &con = machine().debugger().console(); address_space &space = m_maincpu->space(); + UINT64 addr; + offs_t address; if (params < 1) return; - UINT64 addr; if (!machine().debugger().commands().validate_number_parameter(param[0], &addr)) return; - offs_t address = (offs_t)addr; + address = (offs_t)addr; if (!m_maincpu->translate(AS_PROGRAM, TRANSLATE_READ_DEBUG, address)) { - machine().debugger().console().printf("Address is unmapped.\n"); + con.printf("Address is unmapped.\n"); return; } - machine().debugger().console().printf("Header.Type %d byte\n", space.read_byte(address)); - machine().debugger().console().printf("Header.Absolute %d byte\n", space.read_byte(address + 1)); - machine().debugger().console().printf("Header.Size %d byte\n", space.read_byte(address + 2)); - machine().debugger().console().printf("Header.Inserted %d byte\n", space.read_byte(address + 3)); - machine().debugger().console().printf("Header.SignalState %08X dword\n", space.read_dword_unaligned(address + 4)); - machine().debugger().console().printf("Header.WaitListEntry {%08X,%08X} _LIST_ENTRY\n", space.read_dword_unaligned(address + 8), space.read_dword_unaligned(address + 12)); - machine().debugger().console().printf("%s", string_format("DueTime %I64x qword\n", (INT64)space.read_qword_unaligned(address + 16)).c_str()); - machine().debugger().console().printf("TimerListEntry {%08X,%08X} _LIST_ENTRY\n", space.read_dword_unaligned(address + 24), space.read_dword_unaligned(address + 28)); - machine().debugger().console().printf("Dpc %08X dword\n", space.read_dword_unaligned(address + 32)); - machine().debugger().console().printf("Period %d dword\n", space.read_dword_unaligned(address + 36)); + address = (offs_t)addr; + con.printf("Header.Type %d byte\n", cpu.read_byte(space, address, true)); + con.printf("Header.Absolute %d byte\n", cpu.read_byte(space, address + 1, true)); + con.printf("Header.Size %d byte\n", cpu.read_byte(space, address + 2, true)); + con.printf("Header.Inserted %d byte\n", cpu.read_byte(space, address + 3, true)); + con.printf("Header.SignalState %08X dword\n", cpu.read_dword(space, address + 4, true)); + con.printf("Header.WaitListEntry {%08X,%08X} _LIST_ENTRY\n", cpu.read_dword(space, address + 8, true), cpu.read_dword(space, address + 12, true)); + con.printf("%s", string_format("DueTime %I64x qword\n", (INT64)cpu.read_qword(space, address + 16, true)).c_str()); + con.printf("TimerListEntry {%08X,%08X} _LIST_ENTRY\n", cpu.read_dword(space, address + 24, true), cpu.read_dword(space, address + 28, true)); + con.printf("Dpc %08X dword\n", cpu.read_dword(space, address + 32, true)); + con.printf("Period %d dword\n", cpu.read_dword(space, address + 36, true)); } void xbox_base_state::curthread_command(int ref, int params, const char **param) { + debugger_cpu &cpu = machine().debugger().cpu(); + debugger_console &con = machine().debugger().console(); address_space &space = m_maincpu->space(); + offs_t address; - UINT64 fsbase = m_maincpu->state_int(44); - offs_t address = (offs_t)fsbase + 0x28; + UINT64 fsbase = m_maincpu->state_int(44); // base of FS register + address = (offs_t)fsbase + 0x28; if (!m_maincpu->translate(AS_PROGRAM, TRANSLATE_READ_DEBUG, address)) { - machine().debugger().console().printf("Address is unmapped.\n"); + con.printf("Address is unmapped.\n"); return; } + address = (offs_t)fsbase + 0x28; - UINT32 kthrd = space.read_dword_unaligned(address); - machine().debugger().console().printf("Current thread is %08X\n", kthrd); - + UINT32 kthrd = cpu.read_dword(space, address, true); + con.printf("Current thread is %08X\n", kthrd); address = (offs_t)kthrd + 0x1c; - if (!m_maincpu->translate(AS_PROGRAM, TRANSLATE_READ_DEBUG, address)) - return; - - UINT32 topstack = space.read_dword_unaligned(address); - machine().debugger().console().printf("Current thread stack top is %08X\n", topstack); - + UINT32 topstack = cpu.read_dword(space, address, true); + con.printf("Current thread stack top is %08X\n", topstack); address = (offs_t)kthrd + 0x28; - if (!m_maincpu->translate(AS_PROGRAM, TRANSLATE_READ_DEBUG, address)) - return; - - UINT32 tlsdata = space.read_dword_unaligned(address); + UINT32 tlsdata = cpu.read_dword(space, address, true); if (tlsdata == 0) address = (offs_t)topstack - 0x210 - 8; else address = (offs_t)tlsdata - 8; - if (!m_maincpu->translate(AS_PROGRAM, TRANSLATE_READ_DEBUG, address)) - return; - machine().debugger().console().printf("Current thread function is %08X\n", space.read_dword_unaligned(address)); + con.printf("Current thread function is %08X\n", cpu.read_dword(space, address, true)); } void xbox_base_state::generate_irq_command(int ref, int params, const char **param) @@ -249,20 +260,22 @@ void xbox_base_state::generate_irq_command(int ref, int params, const char **par void xbox_base_state::nv2a_combiners_command(int ref, int params, const char **param) { + debugger_console &con = machine().debugger().console(); int en = nvidia_nv2a->toggle_register_combiners_usage(); if (en != 0) - machine().debugger().console().printf("Register combiners enabled\n"); + con.printf("Register combiners enabled\n"); else - machine().debugger().console().printf("Register combiners disabled\n"); + con.printf("Register combiners disabled\n"); } void xbox_base_state::waitvblank_command(int ref, int params, const char **param) { + debugger_console &con = machine().debugger().console(); int en = nvidia_nv2a->toggle_wait_vblank_support(); if (en != 0) - machine().debugger().console().printf("Vblank method enabled\n"); + con.printf("Vblank method enabled\n"); else - machine().debugger().console().printf("Vblank method disabled\n"); + con.printf("Vblank method disabled\n"); } void xbox_base_state::grab_texture_command(int ref, int params, const char **param) @@ -350,20 +363,22 @@ void xbox_base_state::vprogdis_command(int ref, int params, const char **param) void xbox_base_state::help_command(int ref, int params, const char **param) { - machine().debugger().console().printf("Available Xbox commands:\n"); - machine().debugger().console().printf(" xbox dump_string,
-- Dump _STRING object at
\n"); - machine().debugger().console().printf(" xbox dump_process,
-- Dump _PROCESS object at
\n"); - machine().debugger().console().printf(" xbox dump_list,
[,] -- Dump _LIST_ENTRY chain starting at
\n"); - machine().debugger().console().printf(" xbox dump_dpc,
-- Dump _KDPC object at
\n"); - machine().debugger().console().printf(" xbox dump_timer,
-- Dump _KTIMER object at
\n"); - machine().debugger().console().printf(" xbox curthread -- Print information about current thread\n"); - machine().debugger().console().printf(" xbox irq, -- Generate interrupt with irq number 0-15\n"); - machine().debugger().console().printf(" xbox nv2a_combiners -- Toggle use of register combiners\n"); - machine().debugger().console().printf(" xbox waitvblank -- Toggle support for wait vblank method\n"); - machine().debugger().console().printf(" xbox grab_texture,, -- Save to the next used texture of type \n"); - machine().debugger().console().printf(" xbox grab_vprog, -- save current vertex program instruction slots to \n"); - machine().debugger().console().printf(" xbox vprogdis,
,[,] -- disassemble vertex program instructions at
of \n"); - machine().debugger().console().printf(" xbox help -- this list\n"); + debugger_console &con = machine().debugger().console(); + + con.printf("Available Xbox commands:\n"); + con.printf(" xbox dump_string,
-- Dump _STRING object at
\n"); + con.printf(" xbox dump_process,
-- Dump _PROCESS object at
\n"); + con.printf(" xbox dump_list,
[,] -- Dump _LIST_ENTRY chain starting at
\n"); + con.printf(" xbox dump_dpc,
-- Dump _KDPC object at
\n"); + con.printf(" xbox dump_timer,
-- Dump _KTIMER object at
\n"); + con.printf(" xbox curthread -- Print information about current thread\n"); + con.printf(" xbox irq, -- Generate interrupt with irq number 0-15\n"); + con.printf(" xbox nv2a_combiners -- Toggle use of register combiners\n"); + con.printf(" xbox waitvblank -- Toggle support for wait vblank method\n"); + con.printf(" xbox grab_texture,, -- Save to the next used texture of type \n"); + con.printf(" xbox grab_vprog, -- save current vertex program instruction slots to \n"); + con.printf(" xbox vprogdis,
,[,] -- disassemble vertex program instructions at
of \n"); + con.printf(" xbox help -- this list\n"); } void xbox_base_state::xbox_debug_commands(int ref, int params, const char **param)