Release DraStic Nintendo DS emulator


Thanks for the updates Exophase!

I just wanted to say that Chrono Trigger still crashes for me after the teleporter scene. The untouched ROM crashes the pandora while the "fixed" one crashes Drastic. It'd be really great to play that game on the pandora, so a fix would be greatly appreciated! But I know you're busy and it might not be your priority right now.

Cheers,

FG
 
Thanks for the updates Exophase!


I just wanted to say that Chrono Trigger still crashes for me after the teleporter scene. The untouched ROM crashes the pandora while the "fixed" one crashes Drastic. It'd be really great to play that game on the pandora, so a fix would be greatly appreciated! But I know you're busy and it might not be your priority right now.


Cheers,


FG
Turns out it was a bug in the rendering code. I've fixed it, this will be reflected in the next version.
 
Last edited by a moderator:
Thanks for the updates Exophase!


I just wanted to say that Chrono Trigger still crashes for me after the teleporter scene. The untouched ROM crashes the pandora while the "fixed" one crashes Drastic. It'd be really great to play that game on the pandora, so a fix would be greatly appreciated! But I know you're busy and it might not be your priority right now.


Cheers,


FG
Turns out it was a bug in the rendering code. I've fixed it, this will be reflected in the next version.
Gosh that was fast! Thank you very much!
 
Somehow, in the newest version I can actually make progress in Hotel Dusk (i.e. select the bell at the front desk). Though, it is the kind of game that has some graphical glitches when frameskip is turned on, so I might have to wait a while before it's completely "playable".

Edit: In fact, it looks like selecting 3d objects only works reliably when frameskip is off.

Edit2: Actually, maybe I should read the readme once in a while, this fix is even listed there :p

Edit3: Since this actually wasn't mentioned in the readme, the shadow glitch in Super Mario 64 is fixed... or so it seemed at first, but actually it seems the shadows aren't showing up at all.
 
Last edited by a moderator:
I just had my pandora freeze while playing Phoenix Wright: Ace Detective in DraStic

I'm running on a Rebirth edition unit overclocked to 850 at OPP5

The game in question had enabled the mic not long before it crashed (though I have no idea why)

I had to reset the unit twice to get it to boot again (the first attempt just left me at a black screen with the backlight on)

I was however able to get a backtrace in /proc/last_kmsg

DraStic output and last_kmsg output are behind the spoiler tags.

Starting DraStic (version r1.4p)

Checking directory /mnt/utmp/DraStic/backup: It's there.
Checking directory /mnt/utmp/DraStic/savestates: It's there.
Checking directory /mnt/utmp/DraStic/config: It's there.
Checking directory /mnt/utmp/DraStic/profiles: It's there.
Checking directory /mnt/utmp/DraStic/system: It's there.
Loading directory config file /mnt/utmp/DraStic/config/drastic.cf2
Loading config file /mnt/utmp/DraStic/config/drastic.cfg
got keypad at device keypad
got gpio-keys at device gpio-keys
Using touchscreen at /dev/input/touchscreen0.
Got memory mapped buffer at 0x40397000 (drastic_mapped_memory.dat)
Direct mapping main RAM to 2000000
Direct mapping main RAM to 2400000
Direct mapping main RAM to 2800000
Direct mapping main RAM to 2c00000
Initializing ARM9 bus-level memory map.
Initializing ARM7 bus-level memory map.
Initializing CP15.
Initializing DMA.
ALSA output: requested rate of 44100, got 44100.
ALSA output: requested buffer size of 8192, got 8192.
ALSA output: requested period size of 2048, got 2048.
ALSA output: Using synchronous engine.
1524.326172 cycles per output sample (0.000656 samples per cycle)
Loaded 6406 games in database file /mnt/utmp/DraStic/game_database.xml.
Processing command line options.
Loaded 340 files in file info cache.
Directory load took 0.041474 seconds.
Loading config file /mnt/utmp/DraStic/config/Phoenix Wright - Ace Attorney.cfg
Config file /mnt/utmp/DraStic/config/Phoenix Wright - Ace Attorney.cfg does not exist.
Loading config file /mnt/utmp/DraStic/config/drastic.cfg
Setting up ARM9 memory map.
Setting up ARM7 memory map.
Remapping ITCM limit from 0 to 0
Remapping DTCM from 0, 0 to 0, 0
Remapping DTCM from 0, 0 to 27e0000, 4000
Remapping ITCM limit from 0 to 2000000
Gamecard title: PHOENIX WRIG
Game code: 45594741
Maker code: 3830
Unit code: 0
Chip size: 65536KB
ROM version: 0
Autostart: 0
ARM9 ROM offset: 4000
ARM9 entry PC: 2000800
ARM9 RAM offset: 2000000
ARM9 size: ccef8
ARM7 ROM offset: d1000
ARM7 entry PC: 2380000
ARM7 RAM offset: 2380000
ARM7 size: 26f28
Found game in database: titled Phoenix Wright - Ace Attorney. Flash backup: 40000 bytes, ID 00204012
Loading backup file /mnt/utmp/DraStic/backup/Phoenix Wright - Ace Attorney.dsv
Performing recompiler base block translation (2000800 2380000).
fb pixels overlay: 0x411d1000
Got buffers 0x411d1000/0x41201000, 0x41231000/0x41261000
DS screen top is at (240 0) to (559 239)
DS screen bottom is at (240 240) to (559 479)
Calling recompiler event update handler (@ 0x80a96e8).
Remapping ITCM limit from 2000000 to 2000000
Remapping DTCM from 27e0000, 4000 to 27c0000, 4000
DTCM moved off of main RAM, remapping main RAM to it.
load state @ 0, 0 in.
Loading state /mnt/utmp/DraStic/savestates/Phoenix Wright - Ace Attorney_0.dss
Remapping ITCM limit from 2000000 to 2000000
Remapping DTCM from 27c0000, 4000 to 27c0000, 4000
DTCM moved off of main RAM, remapping main RAM to it.
Saving backup data file.
Saving backup data file.
Saving state to /mnt/utmp/DraStic/savestates/Phoenix Wright - Ace Attorney_0.dss.
Saving state to /mnt/utmp/DraStic/savestates/Phoenix Wright - Ace Attorney_0.dss.
load state @ 0, 0 in.
Loading state /mnt/utmp/DraStic/savestates/Phoenix Wright - Ace Attorney_0.dss
Remapping ITCM limit from 2000000 to 2000000
Remapping DTCM from 27c0000, 4000 to 27c0000, 4000
DTCM moved off of main RAM, remapping main RAM to it.
load state @ 0, 0 in.
Loading state /mnt/utmp/DraStic/savestates/Phoenix Wright - Ace Attorney_0.dss
Remapping ITCM limit from 2000000 to 2000000
Remapping DTCM from 27c0000, 4000 to 27c0000, 4000
DTCM moved off of main RAM, remapping main RAM to it.
Saving state to /mnt/utmp/DraStic/savestates/Phoenix Wright - Ace Attorney_0.dss.
ALSA capture: requested rate of 44100, got 44100.
load state @ 0, 0 in.
Loading state /mnt/utmp/DraStic/savestates/Phoenix Wright - Ace Attorney_0.dss
Remapping ITCM limit from 2000000 to 2000000
Remapping DTCM from 27c0000, 4000 to 27c0000, 4000
DTCM moved off of main RAM, remapping main RAM to it.
load state @ 0, 0 in.
Loading state /mnt/utmp/DraStic/savestates/Phoenix Wright - Ace Attorney_0.dss
Remapping ITCM limit from 2000000 to 2000000
Remapping DTCM from 27c0000, 4000 to 27c0000, 4000
DTCM moved off of main RAM, remapping main RAM to it.



op-vizzini:~$ cat /proc/last_kmsg
[ 0.151641] _omap_mux_init_gpio: Could not set gpio192
[ 0.153076] _omap_mux_init_gpio: Could not set gpio193
[ 1.669006] twl4030_wdt twl4030_wdt: Failed to register misc device
[ 1.670013] voltdm_scale: No voltage scale API registered for vdd_mpu_iva
[ 14.258453] FAT-fs (mmcblk1): invalid media value (0x06)
[ 14.285430] FAT-fs (mmcblk0): invalid media value (0x00)
[ 15.616882] FAT-fs (mmcblk0): invalid media value (0x00)
[ 15.619140] FAT-fs (mmcblk1): invalid media value (0x06)
[ 22.529479] musb-hdrc musb-hdrc: VBUS_ERROR in a_idle (80, f0, <SessEnd), retry #0, port1 00000100
[91281.542480] end_request: I/O error, dev sr0, sector 0
[91281.542663] Buffer I/O error on device sr0, logical block 0
[91281.542785] Buffer I/O error on device sr0, logical block 1
[91281.542938] Buffer I/O error on device sr0, logical block 2
[91281.543060] Buffer I/O error on device sr0, logical block 3
[91281.543212] Buffer I/O error on device sr0, logical block 4
[91281.543334] Buffer I/O error on device sr0, logical block 5
[91281.543487] Buffer I/O error on device sr0, logical block 6
[91281.543579] Buffer I/O error on device sr0, logical block 7
[91281.543762] Buffer I/O error on device sr0, logical block 8
[91281.543853] Buffer I/O error on device sr0, logical block 9
[91281.607116] end_request: I/O error, dev sr0, sector 240
[91281.667816] end_request: I/O error, dev sr0, sector 0
[91282.052124] end_request: I/O error, dev sr0, sector 1421056
[91282.059967] end_request: I/O error, dev sr0, sector 1421056
[91282.108734] end_request: I/O error, dev sr0, sector 1421240
[91282.114715] end_request: I/O error, dev sr0, sector 1421240
[91282.330230] end_request: I/O error, dev sr0, sector 0
[91282.343139] end_request: I/O error, dev sr0, sector 0
[91282.348236] end_request: I/O error, dev sr0, sector 0
[91282.531188] end_request: I/O error, dev sr0, sector 1421248
[91282.538452] end_request: I/O error, dev sr0, sector 1421248
[91282.544891] end_request: I/O error, dev sr0, sector 1421248
[91282.552185] end_request: I/O error, dev sr0, sector 1421248
[91282.559753] end_request: I/O error, dev sr0, sector 1421248
[91282.567108] end_request: I/O error, dev sr0, sector 1421248
[91282.615417] end_request: I/O error, dev sr0, sector 1421192
[91282.623321] end_request: I/O error, dev sr0, sector 1421240
[91282.823120] end_request: I/O error, dev sr0, sector 0
[91282.829071] end_request: I/O error, dev sr0, sector 0
[91283.033508] end_request: I/O error, dev sr0, sector 1421248
[91283.041168] end_request: I/O error, dev sr0, sector 1421248
[91283.047576] end_request: I/O error, dev sr0, sector 1421248
[91283.305114] end_request: I/O error, dev sr0, sector 1421056
[91283.309234] end_request: I/O error, dev sr0, sector 1421056
[91283.351928] end_request: I/O error, dev sr0, sector 1421240
[91283.355987] end_request: I/O error, dev sr0, sector 1421240
[91283.572479] end_request: I/O error, dev sr0, sector 0
[91283.576324] end_request: I/O error, dev sr0, sector 0
[91283.579833] end_request: I/O error, dev sr0, sector 0
[91283.772613] end_request: I/O error, dev sr0, sector 1421248
[91283.776702] end_request: I/O error, dev sr0, sector 1421248
[91283.786773] end_request: I/O error, dev sr0, sector 1421248
[91283.791564] end_request: I/O error, dev sr0, sector 1421248
[91283.795562] end_request: I/O error, dev sr0, sector 1421248
[91283.800781] end_request: I/O error, dev sr0, sector 1421248
[91283.839141] end_request: I/O error, dev sr0, sector 1421192
[91283.890655] end_request: I/O error, dev sr0, sector 1421240
[91284.092712] end_request: I/O error, dev sr0, sector 0
[91284.096801] end_request: I/O error, dev sr0, sector 0
[91284.302551] end_request: I/O error, dev sr0, sector 1421248
[91284.307037] end_request: I/O error, dev sr0, sector 1421248
[91284.313018] end_request: I/O error, dev sr0, sector 1421248
[91284.446594] end_request: I/O error, dev sr0, sector 1421056
[91284.450958] end_request: I/O error, dev sr0, sector 1421056
[91284.492156] end_request: I/O error, dev sr0, sector 1421240
[91284.496826] end_request: I/O error, dev sr0, sector 1421240
[91284.695556] end_request: I/O error, dev sr0, sector 0
[91284.699523] end_request: I/O error, dev sr0, sector 0
[91284.708618] end_request: I/O error, dev sr0, sector 0
[91284.896453] end_request: I/O error, dev sr0, sector 1421248
[91284.900451] end_request: I/O error, dev sr0, sector 1421248
[91284.905303] end_request: I/O error, dev sr0, sector 1421248
[91284.910003] end_request: I/O error, dev sr0, sector 1421248
[91284.914825] end_request: I/O error, dev sr0, sector 1421248
[91284.918457] end_request: I/O error, dev sr0, sector 1421248
[91284.962463] end_request: I/O error, dev sr0, sector 1421192
[91284.970306] end_request: I/O error, dev sr0, sector 1421240
[91285.160888] end_request: I/O error, dev sr0, sector 0
[91285.167938] end_request: I/O error, dev sr0, sector 0
[91285.370819] end_request: I/O error, dev sr0, sector 1421248
[91285.378417] end_request: I/O error, dev sr0, sector 1421248
[91285.384948] end_request: I/O error, dev sr0, sector 1421248
[91285.505493] end_request: I/O error, dev sr0, sector 1421056
[91285.512207] end_request: I/O error, dev sr0, sector 1421056
[91285.561767] end_request: I/O error, dev sr0, sector 1421240
[91285.571075] end_request: I/O error, dev sr0, sector 1421240
[91285.790496] end_request: I/O error, dev sr0, sector 0
[91285.796173] end_request: I/O error, dev sr0, sector 0
[91285.801788] end_request: I/O error, dev sr0, sector 0
[91286.001312] end_request: I/O error, dev sr0, sector 1421248
[91286.008911] end_request: I/O error, dev sr0, sector 1421248
[91286.021087] end_request: I/O error, dev sr0, sector 1421248
[91286.028076] end_request: I/O error, dev sr0, sector 1421248
[91286.034057] end_request: I/O error, dev sr0, sector 1421248
[91286.040344] end_request: I/O error, dev sr0, sector 1421248
[91286.085510] end_request: I/O error, dev sr0, sector 1421192
[91286.137115] end_request: I/O error, dev sr0, sector 1421240
[91286.338775] end_request: I/O error, dev sr0, sector 0
[91286.342987] end_request: I/O error, dev sr0, sector 0
[91286.548797] end_request: I/O error, dev sr0, sector 1421248
[91286.548980] Buffer I/O error on device sr0, logical block 177656
[91286.553253] end_request: I/O error, dev sr0, sector 1421248
[91286.553405] Buffer I/O error on device sr0, logical block 177656
[91286.558410] end_request: I/O error, dev sr0, sector 1421248
[91286.558532] Buffer I/O error on device sr0, logical block 177656
[91286.932830] end_request: I/O error, dev sr0, sector 0
[91286.932922] Buffer I/O error on device sr0, logical block 0
[91286.933044] Buffer I/O error on device sr0, logical block 1
[91286.933227] Buffer I/O error on device sr0, logical block 2
[91286.933319] Buffer I/O error on device sr0, logical block 3
[91286.933502] Buffer I/O error on device sr0, logical block 4
[91286.933593] Buffer I/O error on device sr0, logical block 5
[91286.933746] Buffer I/O error on device sr0, logical block 6
[91286.997558] end_request: I/O error, dev sr0, sector 240
[91287.060546] end_request: I/O error, dev sr0, sector 0
[91287.192749] end_request: I/O error, dev sr0, sector 0
[91287.196990] end_request: I/O error, dev sr0, sector 240
[91287.261474] end_request: I/O error, dev sr0, sector 0
[91338.654998] end_request: I/O error, dev sr0, sector 0
[91338.655120] Buffer I/O error on device sr0, logical block 0
[91338.655303] Buffer I/O error on device sr0, logical block 1
[91338.655395] Buffer I/O error on device sr0, logical block 2
[91338.655578] Buffer I/O error on device sr0, logical block 3
[91338.655670] Buffer I/O error on device sr0, logical block 4
[91338.655853] Buffer I/O error on device sr0, logical block 5
[91338.655944] Buffer I/O error on device sr0, logical block 6
[91338.656127] Buffer I/O error on device sr0, logical block 7
[91338.656219] Buffer I/O error on device sr0, logical block 8
[91338.656402] Buffer I/O error on device sr0, logical block 9
[91338.659576] end_request: I/O error, dev sr0, sector 240
[91338.799621] end_request: I/O error, dev sr0, sector 0
[190509.901641] ------------[ cut here ]------------
[190509.901763] kernel BUG at arch/arm/mach-omap2/omap_l3_smx.c:186!
[190509.901916] Internal error: Oops - undefined instruction: 0 [#1]
[190509.902008] Modules linked in: wl1251_sdio wl1251 sg sr_mod cdrom usb_storage ehci_hcd aes_generic mac80211 cfg80211 ecb aufs squashfs xz_dec bluetooth g_cdc omaplfb(O) pvrsrvkm(O) snd_pcm_oss snd_mixer_oss ipv6 fuse ads7846 hwmon [last unloaded: wl1251]
[190509.904510] CPU: 0 Tainted: G O (3.2.39 #872)
[190509.904724] PC is at omap3_l3_app_irq+0x11c/0x120
[190509.904815] LR is at handle_irq_event_percpu+0x54/0x194
[190509.904998] pc : [<c002ea74>] lr : [<c007b340>] psr: 200001d3
[190509.904998] sp : c0577e88 ip : f8000000 fp : 00000001
[190509.905242] r10: c058faf8 r9 : c05d5af0 r8 : 0000000a
[190509.905364] r7 : 00000000 r6 : 00000000 r5 : 00000000 r4 : 00080000
[190509.905517] r3 : 00000000 r2 : 00080000 r1 : 00000000 r0 : 00080000
[190509.905700] Flags: nzCv IRQs off FIQs off Mode SVC_32 ISA ARM Segment kernel
[190509.905792] Control: 10c5387d Table: 99098019 DAC: 55555555
[190509.905975] Process swapper (pid: 0, stack limit = 0xc05762f0)
[190509.906066] Stack: (0xc0577e88 to 0xc0578000)
[190509.906219] 7e80: c0029024 00000000 c05d5af0 00000000 00000000 de8390c0
[190509.906341] 7ea0: 0000000a 00000000 00000000 0000000a c05d5af0 c007b340 c05b3610 00000001
[190509.906524] 7ec0: c057e694 c058faf8 0000000a 00000000 c0577f44 00000003 c05b3610 00000001
[190509.906677] 7ee0: c057e694 c007b4a8 c058faf8 c007d220 c059ea14 c007ac44 0000019a c0014b54
[190509.906860] 7f00: c0029024 60000053 fa200000 c0013834 c0577f58 0002cb42 0002cb42 00000000
[190509.906951] 7f20: 00000001 c057e898 c05b35f4 00000003 00000003 c05b3610 00000001 c057e694
[190509.907135] 7f40: 00000000 c0577f58 c0029018 c0029024 60000053 ffffffff 00000000 0002cb42
[190509.907318] 7f60: 51892ab8 3a715270 51892ab8 3a6e872e c05b35f4 c057e634 c057e898 00000001
[190509.907501] 7f80: 00000001 c00291b0 51892ab8 c057e634 00000000 c057e898 c05e0f70 80004059
[190509.907592] 7fa0: 411fc083 00000000 00000000 c02fd55c 00000000 c0576000 c05b2bc8 c057c374
[190509.907775] 7fc0: c057c36c c0014e10 c05789a8 c056b0cc c09e5180 c0544758 c0544168 00000000
[190509.907958] 7fe0: 00000000 c056b0cc 10c5387d c0578084 c056b09c 80008040 00000000 00000000
[190509.908050] [<c002ea74>] (omap3_l3_app_irq+0x11c/0x120) from [<c007b340>] (handle_irq_event_percpu+0x54/0x194)
[190509.908233] [<c007b340>] (handle_irq_event_percpu+0x54/0x194) from [<c007b4a8>] (handle_irq_event+0x28/0x38)
[190509.908416] [<c007b4a8>] (handle_irq_event+0x28/0x38) from [<c007d220>] (handle_level_irq+0x84/0x108)
[190509.908599] [<c007d220>] (handle_level_irq+0x84/0x108) from [<c007ac44>] (generic_handle_irq+0x30/0x40)
[190509.908813] [<c007ac44>] (generic_handle_irq+0x30/0x40) from [<c0014b54>] (handle_IRQ+0x38/0x84)
[190509.908996] [<c0014b54>] (handle_IRQ+0x38/0x84) from [<c0013834>] (__irq_svc+0x34/0x78)
[190509.909088] [<c0013834>] (__irq_svc+0x34/0x78) from [<c0029024>] (omap3_enter_idle+0xbc/0x138)
[190509.909271] [<c0029024>] (omap3_enter_idle+0xbc/0x138) from [<c00291b0>] (omap3_enter_idle_bm+0x110/0x2b0)
[190509.909454] [<c00291b0>] (omap3_enter_idle_bm+0x110/0x2b0) from [<c02fd55c>] (cpuidle_idle_call+0xb4/0x12c)
[190509.909637] [<c02fd55c>] (cpuidle_idle_call+0xb4/0x12c) from [<c0014e10>] (cpu_idle+0x68/0xa8)
[190509.909820] [<c0014e10>] (cpu_idle+0x68/0xa8) from [<c0544758>] (start_kernel+0x2cc/0x2d8)
[190509.909942] Code: e591c008 e28c3e53 e1c320d0 eaffffca (e7f001f2)
[190509.910125] ---[ end trace 530851fdd70b2325 ]---
[190509.910217] Kernel panic - not syncing: Fatal exception in interrupt
[190509.910400] [<c001a680>] (unwind_backtrace+0x0/0xf8) from [<c03e4058>] (panic+0x64/0x1a8)
[190509.910583] [<c03e4058>] (panic+0x64/0x1a8) from [<c0017a14>] (arm_notify_die+0x0/0x50)
[190509.910705] [<c0017a14>] (arm_notify_die+0x0/0x50) from [<0000000b>] (0xb)
[190776.379486] gadget: high-speed config #1: CDC Composite (ECM + ACM)

No errors detected

op-vizzini:~$ uname -a
Linux op-vizzini 3.2.39 #872 Sat Mar 23 02:56:41 EET 2013 armv7l GNU/Linux

- Neelix
 
Thanks Neelix. Kernel bug is triggering at the same line of code as usual (BUG_ON(status & L3_STATUS_0_TIMEOUT_MASK)) but the stuff after it is pretty weird.. undefined instruction and crashes and what have you. Not like it really matters, I guess.

We know things will keep going if the bug line is commented out, but I'm curious if the microphone (and not just sound) actually still works.
 
Does it still print a message to the log when the bug is not triggered?  If so (and if notaz can supply me with such a kernel)  I may be able to test that.

- Neelix
 
And I have an answer.   once the 'crash' happens the mic stops responding...  until it is reinitialised, then it starts working again.

(when I changed ROMs it started working again)

- Neelix
 
So not really a good fix :/ Unless it could be communicated back to userspace somehow..
 
Could a recovery mechanism be added to the kernel code?  reinitialise the capture device as per the most recent initialisation request received from userspace instead of bugging out?

- Neelix
 
Could a recovery mechanism be added to the kernel code?  reinitialise the capture device as per the most recent initialisation request received from userspace instead of bugging out?
The problem is drivers in Linux are abstracted away from each other, and the code that catches the problem is generic and doesn't even know it's audio related, or which sDMA channel is related to the error..

So not really a good fix :/ Unless it could be communicated back to userspace somehow..
It might already be, try logging snd_pcm_prepare() / snd_pcm_readi() errors.
 
Bugreport: Drastic scatters empty files named drastic_file_info.txt all over my SD card along the filepath it moves for selecting your roms

I had just downloaded and used the newest DraStic 1.4.0.0 (info dialogue 1.4p), never hacked any file or setting, but nevertheless got "drastic_file_info.txt" files all over the (writable FAT32) paths along which I had navigated with DraStic. I found a post talking about drastic_file_info.txt, but it did not contain any applicable info.

I erased its appdata (and placed the BIOS files into it freshly), to rule out the possibility that this had resulted from an old version or a corrupted configuration, but it happened again!

Paths scattered with drastic_file_info.txt :

/media/mysdcard/pandora/appdata/DraStic/drastic_file_info.txt

 

/media/mysdcard/drastic_file_info.txt

/media/mysdcard/pandora/drastic_file_info.txt

/media/mysdcard/pandora/roms/drastic_file_info.txt

/media/mysdcard/pandora/roms/nds/drastic_file_info.txt
 
Last edited by a moderator:
Yeah I know. I thought I fixed it but I didn't. I'll have to look at it at some point. The reason the files are there is to accelerate getting file info from directories with a huge number of NDS files. It's supposed to unlink empty ones, I don't know what happened (I was certain it worked before, maybe I broke it).

I know it's annoying but the practical implications aren't that bad, blank files don't really take up a lot of space so try to live with it :p If it helps I could make it .drastic_file_info.txt, then it'd probably have taken longer to notice them ;)
 
I propose this: Name them .drastic_file_info.txt (to not annoy in a GUI filebrowser's default view) and unlink them if empty (to not scatter, which would be a really bad manner).

Question: How does DraStic determine wether drastic_file_info.txt is up-to-date and therefore if needed update/unlink them?

  1. Mod-date of "drastic_file_info.txt" and "." are the same?
    Cheap and very reliable, unless someone adds files, and deliberately changes mod-date of directory back to as it was.
    This test fails if the rom files remain the same but another indexing software also creates its index file here, and thereby updates the dir's mod-date.

  2. Lines in drastic_file_info.txt are the same as valid files in dir?
    Not accurate!!! Would be falsely true for "a, b, c" and "a, c, d", although "b" dissappeared and "d" appeared.
  3. Filenames in drastic_file_info.txt match those from valid files in dir?
    Very reliable but not so cheap anymore
  4. Compare checksums!
    Most reliable but very expensive. Thus the last option.
 
Last edited by a moderator:
I propose this: Name them .drastic_file_info.txt (to not annoy in a GUI filebrowser's default view) and unlink them if empty (to not scatter, which would be a really bad manner).
It's supposed to be unlinking them. I'm not sure why it isn't. I'll change it to .drastic_file_info.txt for the next version.

Question: How does DraStic determine wether drastic_file_info.txt is up-to-date and therefore if needed update/unlink them?

  • Mod-date of "drastic_file_info.txt" and "." are the same?Cheap and very reliable, unless someone adds files, and deliberately changes mod-date of directory back to as it was.

    This test fails if the rom files remain the same but another indexing software also creates its index file here, and thereby updates the dir's mod-date.
  • Lines in drastic_file_info.txt are the same as valid files in dir?Not accurate!!! Would be falsely true for "a, b, c" and "a, c, d", although "b" dissappeared and "d" appeared.
  • Filenames in drastic_file_info.txt match those from valid files in dir?Very reliable but not so cheap anymore
  • Compare checksums!Most reliable but very expensive. Thus the last option.
I'm not really sure what you're asking.. the lines of drastic_file_info.txt tie a file names to gamecard ID and title. I don't know if this matches your second or third scenario. The directories are scanned regardless of the drastic_file_info.txt file, the file is just there so it can quickly display some game data (title, header title, game code) without having to scan the game files themselves. Scanning the directory is fast, even if you have thousands of files, but (depending on your SD card) scanning thousands of zip files can take a long time, up to dozens of seconds. If new files are encountered that weren't in the info file they're added to it. Old files entries aren't removed, it only appends to the file. It goes without saying that checksumming all of the files would defeat the purpose of the info file being there, since it'd be much slower than getting their header.

The system fails if you change the directory so a file with the same name now contains a different game. I could check for this by putting a file timestamp in the info file. But this is a pretty strange and unusual thing to do so I don't bother.
 
Back
Top