<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title>Rockbox on tsvinc</title>
		<link>https://tsvinc.dev/tags/rockbox/</link>
		<description>Recent content in Rockbox on tsvinc</description>
		<generator>Hugo</generator>
		<language>en-us</language>
		
		
		
		
			<lastBuildDate>Tue, 26 May 2026 00:00:00 +0000</lastBuildDate>
		
			<atom:link href="https://tsvinc.dev/tags/rockbox/index.xml" rel="self" type="application/rss+xml" />
			<item>
				<title>FiiO X1 bare-metal audio: four GPIO offsets, all wrong</title>
				<link>https://tsvinc.dev/posts/fiio-x1-three-wrong-numbers-part-14/</link>
				<pubDate>Tue, 26 May 2026 00:00:00 +0000</pubDate>
				<guid>https://tsvinc.dev/posts/fiio-x1-three-wrong-numbers-part-14/</guid>
				<description>&lt;p&gt;The build was clean: 18,672 bytes, nothing worse than unused-function warnings. A clean build is the most reassuring thing a compiler can say and the least informative, and this one was vouching for an audio driver that, as written, could not have made a sound.&lt;/p&gt;&#xA;&lt;p&gt;The driver belongs to a bootloader for the FiiO X1, a $99 music player on an Ingenic JZ4760B MIPS chip. &lt;a href=&#34;https://tsvinc.dev/posts/fiio-x1-twelve-kilobytes-part-13/&#34;&gt;Part 13&lt;/a&gt; wrote that bootloader: it runs from the SD card as &lt;code&gt;factory.x1&lt;/code&gt;, a file the stock loader executes without checking, and it can load an image of Rockbox, the open-source player firmware. The next step toward Rockbox is sound, and the smallest honest test of sound is a sine wave from bare-metal code: no codecs, no DMA, no mixer. As far as I knew then, that meant three things the stock loader, which doesn&#39;t play music, has no reason to set up: an I2C controller to configure the TI PCM5142 DAC, the AIC (the chip&#39;s audio interface) to send it I2S samples, and the GPIO pins both of them need.&lt;/p&gt;</description>
			</item>
			<item>
				<title>FiiO X1 Rockbox bootloader: 12 KB of SD, FAT32 and a menu</title>
				<link>https://tsvinc.dev/posts/fiio-x1-twelve-kilobytes-part-13/</link>
				<pubDate>Mon, 25 May 2026 00:00:00 +0000</pubDate>
				<guid>https://tsvinc.dev/posts/fiio-x1-twelve-kilobytes-part-13/</guid>
				<description>&lt;p&gt;The first critical finding in the code review said my bootloader would jump into the firmware it had just loaded and execute whatever the instruction cache happened to remember instead. The code compiled. It had a boot menu, an SD card driver and a FAT32 reader, and it would have crashed on the one line that mattered, silently, on a device with no debugger.&lt;/p&gt;&#xA;&lt;p&gt;The device is the FiiO X1, a $99 music player on an Ingenic JZ4760B MIPS chip. &lt;a href=&#34;https://tsvinc.dev/posts/fiio-x1-ten-bands-part-12/&#34;&gt;Part 12&lt;/a&gt; replaced its equalizer presets by patching floats inside the stock firmware, and it worked, for exactly nine presets, because the firmware has nine slots. More slots would mean finding the menu code in Ghidra and patching loop bounds and arrays, and every feature after that would cost the same again. The alternative is Rockbox, the open-source player firmware, and Rockbox needs a way onto the device. This part is that way in: a small bootloader that runs from the SD card, offers a menu, and loads a Rockbox image from the card into RAM.&lt;/p&gt;</description>
			</item>
	</channel>
</rss>
