<html>
<body>
  <div id="body" style="background-color:#ffffff;" >
<table cellspacing="0" cellpadding="0" border="0" rules="cols">
<tr class="head" style="border-bottom-width:1px;border-bottom-style:solid;" ><td class="headtd" style="padding:0;padding-top:.2em;" colspan="4">Commit in <b><tt>lxdream</tt></b></td></tr>
<tr><td><tt>src/gtkui/<a href="#file1">gtk_ctrl.c</a></tt></td><td id="added" class="headtd2" style="padding-left:.3em;padding-right:.3em; background-color:#ddffdd;" align="right">+1</td><td id="removed" class="headtd2" style="padding-left:.3em;padding-right:.3em; background-color:#ffdddd;" align="right">-1</td><td class="headtd2" style="padding-left:.3em;padding-right:.3em;" nowrap="nowrap">b072c961c729 -> aacaae9812ea</td></tr>
<tr class="alt" style=";" ><td><tt>         /<a href="#file2">gtkcb.c</a></tt></td><td id="addedalt" class="headtd2" style="padding-left:.3em;padding-right:.3em; background-color:#ccf7cc;" align="right">+14</td><td id="removed" class="headtd2" style="padding-left:.3em;padding-right:.3em; background-color:#ffdddd;" align="right">-5</td><td class="headtd2" style="padding-left:.3em;padding-right:.3em;" nowrap="nowrap">b072c961c729 -> aacaae9812ea</td></tr>
<tr><td><tt>         /<a href="#file3">gtkui.h</a></tt></td><td id="added" class="headtd2" style="padding-left:.3em;padding-right:.3em; background-color:#ddffdd;" align="right">+2</td><td id="removed" class="headtd2" style="padding-left:.3em;padding-right:.3em; background-color:#ffdddd;" align="right">-2</td><td class="headtd2" style="padding-left:.3em;padding-right:.3em;" nowrap="nowrap">b072c961c729 -> aacaae9812ea</td></tr>
<tr class="alt" style=";" ><td><tt>src/sh4/<a href="#file4">timer.c</a></tt></td><td id="addedalt" class="headtd2" style="padding-left:.3em;padding-right:.3em; background-color:#ccf7cc;" align="right">+46</td><td id="removed" class="headtd2" style="padding-left:.3em;padding-right:.3em; background-color:#ffdddd;" align="right">-15</td><td class="headtd2" style="padding-left:.3em;padding-right:.3em;" nowrap="nowrap">b072c961c729 -> aacaae9812ea</td></tr>
<tr><td><tt>test/<a href="#file5">Makefile.in</a></tt></td><td id="added" class="headtd2" style="padding-left:.3em;padding-right:.3em; background-color:#ddffdd;" align="right">+12</td><td id="removed" class="headtd2" style="padding-left:.3em;padding-right:.3em; background-color:#ffdddd;" align="right">-3</td><td class="headtd2" style="padding-left:.3em;padding-right:.3em;" nowrap="nowrap">b072c961c729 -> aacaae9812ea</td></tr>
<tr><td></td><td id="added" class="headtd2" style="padding-left:.3em;padding-right:.3em; background-color:#ddffdd;" align="right">+75</td><td id="removed" class="headtd2" style="padding-left:.3em;padding-right:.3em; background-color:#ffdddd;" align="right">-26</td><td></td></tr>
</table>
<small id="info" style="color: #888888;" >5 modified files</small><br />
<pre class="comment" style="white-space:-moz-pre-wrap;white-space:-pre-wrap;white-space:-o-pre-wrap;white-space:pre-wrap;word-wrap:break-word;padding:4px;border:1px dashed #000000;background-color:#ffffdd;" >
GTK: Force file extension when creating files
</pre>
<hr /><a name="file1" /><div class="file" style="border:1px solid #eeeeee;margin-top:1em;margin-bottom:1em;" >
<span class="pathname" style="font-family:monospace; float:right;" >lxdream/src/gtkui</span><br />
<div class="fileheader" style="margin-bottom:.5em;" ><big><b>gtk_ctrl.c</b></big> <small id="info" style="color: #888888;" >b072c961c729 -> aacaae9812ea</small></div>
<pre class="diff" style="margin:0;" ><small id="info" style="color: #888888;" >--- lxdream/src/gtkui/gtk_ctrl.c
+++ lxdream/src/gtkui/gtk_ctrl.c
@@ -113,7 +113,7 @@
</small></pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" >             }
         } else if( devclz == CREATE_VMU_TAG ) {
             devclz = NULL;
</pre><pre id="removed" class="diff" style="margin:0; background-color:#ffdddd;" >-            vmu_filename = save_file_dialog( _("Create VMU"), "*.vmu", "VMU Files",
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+            vmu_filename = save_file_dialog( _("Create VMU"), "*.vmu", "VMU Files",<span id="addedchars" style="background-color:#99ff99;font-weight:bolder;" > ".vmu",</span>
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" >                     CONFIG_VMU_PATH );
             if( vmu_filename != NULL ) {
                 devclz = &vmu_class;
</pre></div>
<hr /><a name="file2" /><div class="file" style="border:1px solid #eeeeee;margin-top:1em;margin-bottom:1em;" >
<span class="pathname" style="font-family:monospace; float:right;" >lxdream/src/gtkui</span><br />
<div class="fileheader" style="margin-bottom:.5em;" ><big><b>gtkcb.c</b></big> <small id="info" style="color: #888888;" >b072c961c729 -> aacaae9812ea</small></div>
<pre class="diff" style="margin:0;" ><small id="info" style="color: #888888;" >--- lxdream/src/gtkui/gtkcb.c
+++ lxdream/src/gtkui/gtkcb.c
@@ -76,7 +76,7 @@
</small></pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > }
 
 gchar *save_file_dialog( const char *title, const char *pattern, const char *patname,
</pre><pre id="removed" class="diff" style="margin:0; background-color:#ffdddd;" >-                         int initial_dir_key )
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+                         const char *mandatory_ext, int initial_dir_key )
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > {
     GtkWidget *file;
     gchar *filename = NULL;
</pre><pre class="diff" style="margin:0;" ><small id="info" style="color: #888888;" >@@ -97,6 +97,15 @@
</small></pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" >     int result = gtk_dialog_run( GTK_DIALOG(file) );
     if( result == GTK_RESPONSE_ACCEPT ) {
         filename = gtk_file_chooser_get_filename( GTK_FILE_CHOOSER(file) );
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+        if( mandatory_ext ) {
+            int extlen = strlen(mandatory_ext);
+            int fnlen = strlen(filename);
+            if( fnlen < extlen || strcmp(filename + (fnlen - extlen), mandatory_ext) != 0 ) {
+                gchar *f2 = g_strdup_printf("%s%s",filename, mandatory_ext);
+                g_free(filename);
+                filename = f2;
+            }
+        }
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" >         if( initial_dir_key != -1 ) {
             gchar *end_path = gtk_file_chooser_get_current_folder( GTK_FILE_CHOOSER(file) );
             set_gui_path(initial_dir_key,end_path);
</pre><pre class="diff" style="margin:0;" ><small id="info" style="color: #888888;" >@@ -118,9 +127,9 @@
</small></pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > }
 
 void save_file_dialog_cb( const char *title, file_callback_t action, const char *pattern, const char *patname,
</pre><pre id="removed" class="diff" style="margin:0; background-color:#ffdddd;" >-                          int initial_dir_key )
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+                          const char *mandatory_ext, int initial_dir_key )
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > {
</pre><pre id="removed" class="diff" style="margin:0; background-color:#ffdddd;" >-    gchar *filename = save_file_dialog( title, pattern, patname, initial_dir_key );
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+    gchar *filename = save_file_dialog( title, pattern, patname, <span id="addedchars" style="background-color:#99ff99;font-weight:bolder;" >mandatory_ext, </span>initial_dir_key );
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" >     if( filename != NULL ) {
         action(filename);
         g_free(filename);
</pre><pre class="diff" style="margin:0;" ><small id="info" style="color: #888888;" >@@ -224,7 +233,7 @@
</small></pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > 
 void save_state_action_callback( GtkAction *action, gpointer user_data)
 {
</pre><pre id="removed" class="diff" style="margin:0; background-color:#ffdddd;" >-    save_file_dialog_cb( "Save state...", dreamcast_save_state, "*.dst", _("lxDream Save State (*.dst)"), CONFIG_SAVE_PATH );
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+    save_file_dialog_cb( "Save state...", dreamcast_save_state, "*.dst", _("lxDream Save State (*.dst)"), <span id="addedchars" style="background-color:#99ff99;font-weight:bolder;" >".dst", </span>CONFIG_SAVE_PATH );
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > }
 
 void quick_state_action_callback( GtkRadioAction *action, GtkRadioAction *current, gpointer user_data)
</pre><pre class="diff" style="margin:0;" ><small id="info" style="color: #888888;" >@@ -316,7 +325,7 @@
</small></pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > 
 void save_scene_action_callback( GtkAction *action, gpointer user_data)
 {
</pre><pre id="removed" class="diff" style="margin:0; background-color:#ffdddd;" >-    save_file_dialog_cb( _("Save next scene..."), pvr2_save_next_scene, "*.dsc", _("lxdream scene file (*.dsc)"), CONFIG_SAVE_PATH );
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+    save_file_dialog_cb( _("Save next scene..."), pvr2_save_next_scene, "*.dsc", _("lxdream scene file (*.dsc)"), <span id="addedchars" style="background-color:#99ff99;font-weight:bolder;" >".dsc", </span>CONFIG_SAVE_PATH );
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > }
 
 int debug_window_get_selected_row( debug_window_t data );
</pre></div>
<hr /><a name="file3" /><div class="file" style="border:1px solid #eeeeee;margin-top:1em;margin-bottom:1em;" >
<span class="pathname" style="font-family:monospace; float:right;" >lxdream/src/gtkui</span><br />
<div class="fileheader" style="margin-bottom:.5em;" ><big><b>gtkui.h</b></big> <small id="info" style="color: #888888;" >b072c961c729 -> aacaae9812ea</small></div>
<pre class="diff" style="margin:0;" ><small id="info" style="color: #888888;" >--- lxdream/src/gtkui/gtkui.h
+++ lxdream/src/gtkui/gtkui.h
@@ -93,11 +93,11 @@
</small></pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > gchar *open_file_dialog( const char *title, const char *pattern, const char *patname,
                          int initial_dir_key );
 gchar *save_file_dialog( const char *title, const char *pattern, const char *patname,
</pre><pre id="removed" class="diff" style="margin:0; background-color:#ffdddd;" >-                         int initial_dir_key );
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+                         const char *mandatory_ext, int initial_dir_key );
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > void open_file_dialog_cb( const char *title, file_callback_t action, const char *pattern, const char *patname,
                           int initial_dir_key );
 void save_file_dialog_cb( const char *title, file_callback_t action, const char *pattern, const char *patname,
</pre><pre id="removed" class="diff" style="margin:0; background-color:#ffdddd;" >-                          int initial_dir_key );
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+                          const char *mandatory_ext, int initial_dir_key );
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > gboolean gtk_gui_gdrom_mount_image( const char *filename );
 /**
  * Extract the keyval of the key event if no modifier keys were pressed -
</pre></div>
<hr /><a name="file4" /><div class="file" style="border:1px solid #eeeeee;margin-top:1em;margin-bottom:1em;" >
<span class="pathname" style="font-family:monospace; float:right;" >lxdream/src/sh4</span><br />
<div class="fileheader" style="margin-bottom:.5em;" ><big><b>timer.c</b></big> <small id="info" style="color: #888888;" >b072c961c729 -> aacaae9812ea</small></div>
<pre class="diff" style="margin:0;" ><small id="info" style="color: #888888;" >--- lxdream/src/sh4/timer.c
+++ lxdream/src/sh4/timer.c
@@ -42,7 +42,7 @@
</small></pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > 
 uint32_t sh4_cpu_period = 1000 / SH4_BASE_RATE; /* in nanoseconds */
 uint32_t sh4_bus_period = 2* 1000 / SH4_BASE_RATE;
</pre><pre id="removed" class="diff" style="margin:0; background-color:#ffdddd;" >-uint32_t sh4_peripheral_period = 4 * <span id="removedchars" style="background-color:#ff9999;font-weight:bolder;" >2</span>000 / SH4_BASE_RATE;
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+uint32_t sh4_peripheral_period = 4 * <span id="addedchars" style="background-color:#99ff99;font-weight:bolder;" >1</span>000 / SH4_BASE_RATE;
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > 
 MMIO_REGION_READ_FN( CPG, reg )
 {
</pre><pre class="diff" style="margin:0;" ><small id="info" style="color: #888888;" >@@ -112,13 +112,29 @@
</small></pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > 
 /********************************** TMU *************************************/
 
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+#define TCR_ICPF 0x0200
+#define TCR_UNF  0x0100
+#define TCR_UNIE 0x0020
+
+#define TCR_IRQ_ACTIVE (TCR_UNF|TCR_UNIE)
+
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > #define TMU_IS_RUNNING(timer)  (MMIO_READ(TMU,TSTR) & (1<<timer))
 
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+struct TMU_timer {
+    uint32_t timer_period;
+    uint32_t timer_remainder; /* left-over cycles from last count */
+    uint32_t timer_run; /* cycles already run from this slice */
+};
+
+static struct TMU_timer TMU_timers[3];
+
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > uint32_t TMU_count( int timer, uint32_t nanosecs );
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+void TMU_schedule_timer( int timer );
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > 
 void TMU_event_callback( int eventid )
 {
     TMU_count( eventid - EVENT_TMU0, sh4r.slice_cycle );
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+    assert( MMIO_READ( TMU, TCR0 + (eventid - EVENT_TMU0)*12 ) & 0x100 );
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > }
 
 void TMU_init(void)
</pre><pre class="diff" style="margin:0;" ><small id="info" style="color: #888888;" >@@ -128,19 +144,16 @@
</small></pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" >     register_event_callback( EVENT_TMU2, TMU_event_callback );
 }    
 
</pre><pre id="removed" class="diff" style="margin:0; background-color:#ffdddd;" >-#define TCR_ICPF 0x0200
-#define TCR_UNF  0x0100
-#define TCR_UNIE 0x0020
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+void TMU_dump(unsigned timer)
+{
+    fprintf(stderr, "Timer %d: %s %08x/%08x %dns run: %08X - %08X\n",
+            timer, TMU_IS_RUNNING(timer) ? "running" : "stopped",
+            MMIO_READ(TMU, TCNT0 + (timer*12)), MMIO_READ(TMU, TCOR0 + (timer*12)),
+            TMU_timers[timer].timer_period,
+            TMU_timers[timer].timer_run,
+            TMU_timers[timer].timer_remainder );
+}
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > 
</pre><pre id="removed" class="diff" style="margin:0; background-color:#ffdddd;" >-#define TCR_IRQ_ACTIVE (TCR_UNF|TCR_UNIE)
-
-struct TMU_timer {
-    uint32_t timer_period;
-    uint32_t timer_remainder; /* left-over cycles from last count */
-    uint32_t timer_run; /* cycles already run from this slice */
-};
-
-static struct TMU_timer TMU_timers[3];
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > 
 void TMU_set_timer_control( int timer,  int tcr )
 {
</pre><pre class="diff" style="margin:0;" ><small id="info" style="color: #888888;" >@@ -188,17 +201,31 @@
</small></pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" >         period = sh4_peripheral_period; /* I dunno... */
         break;
     }
</pre><pre id="removed" class="diff" style="margin:0; background-color:#ffdddd;" >-    TMU_timers[timer].timer_period = period;
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+
+    if( period != TMU_timers[timer].timer_period ) {
+        if( TMU_IS_RUNNING(timer) ) {
+            /* If we're changing clock speed while counting, sync up and reschedule */
+            TMU_count(timer, sh4r.slice_cycle);
+            TMU_timers[timer].timer_period = period;
+            TMU_schedule_timer(timer);
+        } else {
+            TMU_timers[timer].timer_period = period;
+        }
+    }
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > 
     MMIO_WRITE( TMU, TCR0 + (12*timer), tcr );
 }
 
 void TMU_schedule_timer( int timer )
 {
</pre><pre id="removed" class="diff" style="margin:0; background-color:#ffdddd;" >-    uint64_t duration = (uint64_t)((uint32_t)(MMIO_READ( TMU, TCNT0 + 12*timer )+1)) * 
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+    uint64_t duration = ((uint64_t)((uint32_t)(MMIO_READ( TMU, TCNT0 + 12*timer )))+1) * 
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" >     (uint64_t)TMU_timers[timer].timer_period - TMU_timers[timer].timer_remainder;
     event_schedule_long( EVENT_TMU0+timer, (uint32_t)(duration / 1000000000), 
                          (uint32_t)(duration % 1000000000) );
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+//    if( timer == 2 ) {
+//        WARN( "Schedule timer %d: %lldns", timer, duration );
+//        TMU_dump(timer);
+//    }
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > }
 
 void TMU_start( int timer )
</pre><pre class="diff" style="margin:0;" ><small id="info" style="color: #888888;" >@@ -230,6 +257,8 @@
</small></pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" >     uint32_t count = run_ns / TMU_timers[timer].timer_period;
     uint32_t value = MMIO_READ( TMU, TCNT0 + 12*timer );
     uint32_t reset = MMIO_READ( TMU, TCOR0 + 12*timer );
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+//    if( timer == 2 )
+//        WARN( "Counting timer %d: %d ns, %d ticks", timer, run_ns, count );
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" >     if( count > value ) {
         uint32_t tcr = MMIO_READ( TMU, TCR0 + 12*timer );
         tcr |= TCR_UNF;
</pre><pre class="diff" style="margin:0;" ><small id="info" style="color: #888888;" >@@ -239,6 +268,8 @@
</small></pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" >         if( tcr & TCR_UNIE ) 
             intc_raise_interrupt( INT_TMU_TUNI0 + timer );
         MMIO_WRITE( TMU, TCNT0 + 12*timer, value );
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+//        if( timer == 2 )
+//            WARN( "Underflowed timer %d", timer );
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" >         TMU_schedule_timer(timer);
     } else {
         value -= count;
</pre></div>
<hr /><a name="file5" /><div class="file" style="border:1px solid #eeeeee;margin-top:1em;margin-bottom:1em;" >
<span class="pathname" style="font-family:monospace; float:right;" >lxdream/test</span><br />
<div class="fileheader" style="margin-bottom:.5em;" ><big><b>Makefile.in</b></big> <small id="info" style="color: #888888;" >b072c961c729 -> aacaae9812ea</small></div>
<pre class="diff" style="margin:0;" ><small id="info" style="color: #888888;" >--- lxdream/test/Makefile.in
+++ lxdream/test/Makefile.in
@@ -73,6 +73,7 @@
</small></pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > @BUILD_SYSTEST_TRUE@check: build-tests
 @BUILD_SYSTEST_TRUE@   $(RUNTEST) testsh4
 @BUILD_SYSTEST_TRUE@   $(RUNTESTX) testsh4
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+@BUILD_SYSTEST_TRUE@ $(RUNTEST) randmath < $(srcdir)/random.dat > randmath.out && diff -u randmath.out randmath.expect
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > @BUILD_SYSTEST_TRUE@       $(RUNTEST) testmmu
 @BUILD_SYSTEST_TRUE@   $(RUNTEST) testregs
 @BUILD_SYSTEST_TRUE@   cat $(srcdir)/testta.data $(srcdir)/testta2.data $(srcdir)/testta3.data $(srcdir)/testta4.data $(srcdir)/testta5.data | $(RUNTEST) testta
</pre><pre class="diff" style="margin:0;" ><small id="info" style="color: #888888;" >@@ -80,7 +81,7 @@
</small></pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > #    $(RUNTEST) testide -d ../disc/test.nrg
 
 
</pre><pre id="removed" class="diff" style="margin:0; background-color:#ffdddd;" >-build-tests: testsh4 testmmu testmath testide testta testregs testrend testdisp testspu testmmu
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+build-tests: testsh4 testmmu testmath testide testta testregs testrend testdisp testspu testmmu<span id="addedchars" style="background-color:#99ff99;font-weight:bolder;" > randmath randmath.expect</span>
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > 
 lib/crt0.so: lib/crt0.s
        $(mkdir_p) lib
</pre><pre class="diff" style="margin:0;" ><small id="info" style="color: #888888;" >@@ -161,6 +162,14 @@
</small></pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" >      $(SH4CC) $(SH4LDFLAGS) $^  -o $@ $(SH4LIBS)
        $(SH4OBJCOPY) testFF10 testFF10.bin
 
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+randmath: lib/crt0.so $(SHARED_OBJECTS) randmath.so
+       $(SH4CC) $(SH4LDFLAGS) $^ -o $@ $(SH4LIBS)
+       $(SH4OBJCOPY) randmath randmath.bin
+
+randmath.expect: randmath.c
+       $(HOSTCC) $^ -o randmath.native
+       ./randmath.native < $(srcdir)/random.dat > $@
+
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > .PHONY : clean
 clean:
        rm -f *.o *.so *.ao *.ac *.bin sh4/*.so lib/*.so lib-arm/*.ao mapleid \
</pre><pre class="diff" style="margin:0;" ><small id="info" style="color: #888888;" >@@ -184,10 +193,10 @@
</small></pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" >         sh4/subv.s sh4/tas.s sh4/testsh4.c sh4/tlb.s sh4/vmexit.s sh4/trapa.s sh4/undef.s \
         sh4/xtrct.s sh4/utlb.c sh4/utlb.h sh4/testutlb.s testdata.c testdata.h testdisp.c \
         testide.c testmath.c testaica.c sh4/testmmu.c sh4/mmummio.c testregs.c testrend.c \
</pre><pre id="removed" class="diff" style="margin:0; background-color:#ffdddd;" >-        testspu.c testta.c testyuv.c timer.c timer.h \
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+        testspu.c testta.c testyuv.c timer.c timer.h <span id="addedchars" style="background-color:#99ff99;font-weight:bolder;" >randmath.c </span>\
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" >         testta.data testta2.data testta3.data testta4.data testta5.data testsort.data \
         lxdream.rc dc.x lib/crt0.s lib/libc.a lib/libm.a lib/newlib-1.8.2-dc.patch \
</pre><pre id="removed" class="diff" style="margin:0; background-color:#ffdddd;" >-        aica.x lib-arm/libc.a lib-arm/libm.a lib-arm/crt0.s \
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+        aica.x lib-arm/libc.a lib-arm/libm.a lib-arm/crt0.s <span id="addedchars" style="background-color:#99ff99;font-weight:bolder;" >random.dat </span>\
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" >    include/_ansi.h include/_syslist.h include/ar.h include/assert.h include/ctype.h \
        include/dirent.h include/errno.h include/fastmath.h include/fcntl.h include/grp.h \
        include/ieeefp.h include/locale.h include/machine/fastmath.h include/machine/ieeefp.h \
</pre></div>
<center><small>Chaos Theory</small></center>
</div></body></html>