diff --git a/Source/DSPSpy/DSPSpy.vcproj b/Source/DSPSpy/DSPSpy.vcproj
index 97f8e0c1bf..a38481c29f 100644
--- a/Source/DSPSpy/DSPSpy.vcproj
+++ b/Source/DSPSpy/DSPSpy.vcproj
@@ -165,10 +165,6 @@
RelativePath=".\util\dump_roms.ds"
>
-
-
= dsp_steps)
+ if (show_step >= dsp_steps)
show_step = 0;
UpdateLastMessage("OK");
}
@@ -579,7 +593,7 @@ int main()
#endif
{
show_step--;
- if (show_step < 0)
+ if (show_step < 0)
show_step = dsp_steps - 1;
UpdateLastMessage("OK");
}
diff --git a/Source/DSPSpy/tests/dsp_base.inc b/Source/DSPSpy/tests/dsp_base.inc
index b05d06bc51..6860a64f96 100644
--- a/Source/DSPSpy/tests/dsp_base.inc
+++ b/Source/DSPSpy/tests/dsp_base.inc
@@ -29,8 +29,8 @@ MEM_LO: equ 0x0f7F
; Why do we have a main label here?
main:
- clr $ACC1
- clr $ACC0
+ clr $acc1
+ clr $acc0
; get address of memory dump and copy it to DRAM
@@ -40,11 +40,11 @@ main:
si @DIRQ, #0x0001
call wait_for_cpu_mbox
- lrs $AC0.M, @CMBL
+ lrs $ac0.m, @CMBL
andi $ac1.m, #0x7fff
- sr @MEM_HI, $AC1.M
- sr @MEM_LO, $AC0.M
+ sr @MEM_HI, $ac1.m
+ sr @MEM_LO, $ac0.m
lri $ax0.l, #0
lri $ax1.l, #0 ;(DSP_CR_IMEM | DSP_CR_TO_CPU)
@@ -62,11 +62,11 @@ main:
si @DIRQ, #0x0001
call wait_for_cpu_mbox
- lrs $AC0.M, @CMBL
+ lrs $ac0.m, @CMBL
andi $ac1.m, #0x7fff
- sr @MEM_HI, $AC1.M
- sr @MEM_LO, $AC0.M
+ sr @MEM_HI, $ac1.m
+ sr @MEM_LO, $ac0.m
lri $ax0.l, #REGS_BASE
lri $ax1.l, #0 ;(DSP_CR_IMEM | DSP_CR_TO_CPU)
@@ -129,7 +129,7 @@ dead_loop:
; Utility function to do DMA.
; ac0.l:ac0.m - external address.
-; ax0.l - address in DSP
+; ax0.l - address in DSP
do_dma:
sr @DSMAH, $ac0.l
sr @DSMAL, $ac0.m
@@ -139,21 +139,21 @@ do_dma:
; Waits for said DMA to complete by watching a bit in DSCR.
wait_dma:
- LRS $AC1.M, @DSCR
+ lrs $ac1.m, @DSCR
andcf $ac1.m, #0x0004
- JLZ wait_dma
- RET
+ jlz wait_dma
+ ret
; This waits for a mail to arrive in the DSP in-mailbox.
wait_for_dsp_mbox:
- lrs $AC1.M, @DMBH
+ lrs $ac1.m, @DMBH
andcf $ac1.m, #0x8000
jlz wait_for_dsp_mbox
ret
; This waits for the CPU to grab a mail that we just sent from the DSP.
wait_for_cpu_mbox:
- lrs $AC1.M, @cmbh
+ lrs $ac1.m, @CMBH
andcf $ac1.m, #0x8000
jlnz wait_for_cpu_mbox
ret
@@ -200,18 +200,18 @@ irq7:
jmp irq
irq:
- lrs $AC1.M, @DMBH
+ lrs $ac1.m, @DMBH
andcf $ac1.m, #0x8000
jlz irq
- si @DMBH, #0x8BAD
- sr @DMBL, $wr3 ; ???
- ;sr @DMBL, $ac0.m
+ si @DMBH, #0x8bad
+ ;sr @DMBL, $wr3 ; ???
+ sr @DMBL, $ac0.m ; Exception number
si @DIRQ, #0x0001
halt
; DMA:s the current state of the registers back to the PowerPC. To do this,
; it must write the contents of all regs to DRAM.
-; Unfortunately, this loop uses AR0 so it's best to use AR1 and friends for testing
+; Unfortunately, this loop uses ar0 so it's best to use AR1 and friends for testing
; when messing with indexing.
send_back:
; make state safe.
@@ -280,7 +280,7 @@ dma_copy:
; wait for the CPU to recieve our response before we execute the next op
call wait_for_cpu_mbox
- lrs $AC0.M, @CMBL
+ lrs $ac0.m, @CMBL
andi $ac1.m, #0x7fff
; Restore all regs again so we're ready to execute another op.
@@ -338,7 +338,7 @@ dump_memory:
bloop $ar1, _fill_loop2
mrr $ar3, $ac0.m
- nx'ld : $AX0.H, $AX1.H, @$AR0
+ nx'ld : $ax0.h, $ax1.h, @$ar0
mrr $ac1.m, $ar0
mrr $ar0, $ar2
diff --git a/Source/DSPSpy/util/printresult.cpp b/Source/DSPSpy/util/printresult.cpp
deleted file mode 100644
index 562032fc74..0000000000
--- a/Source/DSPSpy/util/printresult.cpp
+++ /dev/null
@@ -1,58 +0,0 @@
-#include
-#include
-
-typedef unsigned short u16;
-
-u16 reg_in[32], reg_out[1000][32];
-
-inline u16 swap16(u16 s) {
- return (s >> 8) | (s << 8);
-}
-
-void printRegs(u16 *lastRegs, u16 *regs) {
- for (int i = 0; i < 32; i++) {
- if (! lastRegs || lastRegs[i] != regs[i]) {
- printf("%02x %04x ", i, swap16(regs[i]));
- } else {
- printf(" ");
- }
-
- if ((i+1) % 8 == 0)
- printf("\n");
- }
-}
-
-int main(int argc, char **argv) {
-
- if (argc != 2) {
- fprintf(stderr, "Usage %s: \n", argv[0]);
- exit(1);
- }
-
- FILE *f = fopen(argv[1], "rb");
- int steps;
- if (f) {
- // read initial regs
- fread(reg_in, 1, 32 * 2, f);
-
- // read initial regs (guess number of steps)
- steps = fread(reg_out, 32 * 2, 1000, f);
- fclose(f);
- } else {
- fprintf(stderr, "Error opening file %s\n", argv[1]);
- exit(1);
- }
-
- printf("Start with:\n");
- printRegs(NULL, reg_in);
-
- printf("\nStep 0:\n");
- printRegs(reg_in, reg_out[0]);
-
- for (int i=1;i < steps;i++) {
- printf("\nStep %d:\n", i);
- printRegs(reg_out[i-1], reg_out[i]);
- }
-
- exit(0);
-}
diff --git a/Source/DSPTool/Src/main.cpp b/Source/DSPTool/Src/main.cpp
index cea5c879f6..06ffb50b6a 100644
--- a/Source/DSPTool/Src/main.cpp
+++ b/Source/DSPTool/Src/main.cpp
@@ -17,6 +17,7 @@
#include "Common.h"
#include "FileUtil.h"
+#include "StringUtil.h"
#include "DSPCodeUtil.h"
// Stub out the dsplib host stuff, since this is just a simple cmdline tools.
@@ -202,23 +203,25 @@ void RunAsmTests()
// Disassemble a file, output to standard output:
// dsptool -d asdf.bin
// Assemble a file:
-// dsptool -o asdf.bin asdf.txt
+// dsptool [-f] -o asdf.bin asdf.txt
// Assemble a file, output header:
-// dsptool -h asdf.h asdf.txt
-// dsptool -f errors are not critical
+// dsptool [-f] -h asdf.h asdf.txt
+// Print results from DSPSpy register dump
+// dsptool -p dsp_dump0.bin
// So far, all this binary can do is test partially that itself works correctly.
int main(int argc, const char *argv[])
{
if(argc == 1 || (argc == 2 && (!strcmp(argv[1], "--help") || (!strcmp(argv[1], "-?")))))
{
- printf("USAGE: DSPTool [-?] [--help] [-d] [-m] [-o ] [-h ] \n");
+ printf("USAGE: DSPTool [-?] [--help] [-f] [-d] [-m] [-p ] [-o ] [-h ] \n");
printf("-? / --help: Prints this message\n");
printf("-d: Disassemble\n");
printf("-m: Input file contains a list of files (Header assembly only)\n");
printf("-s: Print the final size in bytes (only)\n");
+ printf("-f: Force assembly (errors are not critical)\n");
printf("-o