[HN Gopher] TinyBIOS - A minimalist open-source BIOS project for...
       ___________________________________________________________________
        
       TinyBIOS - A minimalist open-source BIOS project for fun
        
       Author : peter_d_sherman
       Score  : 125 points
       Date   : 2022-11-19 15:27 UTC (7 hours ago)
        
 (HTM) web link (github.com)
 (TXT) w3m dump (github.com)
        
       | adrian_b wrote:
       | The main task for any BIOS is to initialize the memory
       | controller, which for modern DDR4 or DDR5 memory is a very
       | complex and undocumented task, so it must be done usually by a
       | binary firmware blob provided by Intel or AMD.
       | 
       | The usual operating systems might be able to initialize the
       | peripherals, but they expect an already working memory and a
       | memory map provided by the BIOS.
       | 
       | After a quick browsing through the sources, it seems that this
       | project has not progressed so far yet, even if it probes for
       | working memory and it may be able to use the cache memory as RAM
       | on some CPU models (as all BIOSes must do, before the memory
       | controller is initialized).
       | 
       | Under an emulator like QEMU, a BIOS can work even if it is not
       | able to initialize a real memory controller, but on real bare-
       | metal hardware that has to work.
        
         | buildbot wrote:
         | The fact that DDR works at all is kinda black magic, every boot
         | the memory controller does a training routine to understand the
         | analog aspects of the specific ram and board in order to
         | actually make it function at all.
         | https://www.systemverilog.io/ddr4-initialization-and-calibra...
         | 
         | Edit: Reading the article is really cool, I just searched it as
         | a reference but it is very in depth!
        
           | packetlost wrote:
           | A lot of wifi/other wireless analog devices go through
           | analogous training procedures. Things like timing and delays
           | are pretty important to these types of systems and you don't
           | have a clock edge to synchronize against like you do in wired
           | protocols like SPI (though I imagine DDR initialization
           | _does_ have pins used for this or similar).
        
             | monocasa wrote:
             | Yeah, DDR does have a synchronous clock. One of the points
             | of calibration is making sure the signals are actually
             | sampled correctly wrt to the clock signal since the bit
             | times are so short even small differences of trace length
             | matter. The length matching is just to get it in the
             | ballpark that can be corrected with per pin delays.
             | 
             | Ironically perhaps, at bit times like these it's easier to
             | not have a clock signal and simply perform clock recovery
             | like PCIe does, but that comes with higher latency for the
             | interface.
        
         | monocasa wrote:
         | These days in x86 SoCs, DRAM is normally initialized by other
         | cores smaller like the ME and PSP before the main core which
         | would run the bios come up. For instance, apparently oxide's
         | code doesn't have to bring up DRAM despite being the first code
         | to run on the main cores.
        
           | mkopec wrote:
           | On AMD Zen and later that is true, but on Intel the BIOS is
           | still responsible for DRAM init (done via Intel's FSP)
        
       | snvzz wrote:
       | Checked sources just to see what assembler was used.
       | 
       | It uses NASM, my go-to assembler. A great choice.
        
         | 13of40 wrote:
         | A86 is a great minimalist assembler for 16-bit code. In the
         | humble words of its author:
         | 
         | "A86 (with its 32-bit version A386) is the finest assembler
         | available, at any cost under any terms, for the Intel 86-family
         | of microprocessors (IBM-PC, compatibles, and not-so-
         | compatibles)."
         | 
         | Actually, come to think of it, I'm not sure if a86.exe is a
         | 16-bit binary or 32, so it might not run on modern Windows.
        
       | rkagerer wrote:
       | The demo image is the clearest boot logging I've ever seen, while
       | still being succinct. I wish all BIOS's presented themselves so
       | straighforwardly.
        
       | mjovanovic0 wrote:
       | Side question: what IDE/editor ASM developers use today?
        
         | snvzz wrote:
         | I favor KDE's kate as editor, nasm as assembler, gnu make as
         | build system.
        
         | monocasa wrote:
         | Whatever they're comfortable with. There isn't really much IDE
         | support for ASM, so it doesn't really matter what you pick as
         | long as you can do dirty things with the build system. I tend
         | to just use vscode.
        
       | Karrot_Kream wrote:
       | Does anyone have any recs to learn about what goes into a basic
       | BIOS? The TinyBIOS source is super easy to read but I'm looking
       | more for something like xv6 which is both fun to read and also
       | pedagogic (a tall order I'm asking for free, I know ;)
        
       | jamesy0ung wrote:
       | I'm quite sure the PC Engines alix2 uses TinyBIOS
        
         | spaam wrote:
         | maybe you thinking about
         | https://en.wikipedia.org/wiki/Coreboot?
        
           | st_goliath wrote:
           | Most of the ALIX boards use something called TinyBIOS[1][2].
           | Browsing through the source tree from the pcengines site, it
           | doesn't seem to share any relation with this project here.
           | 
           | The current APU boards use Coreboot[3]
           | 
           | [1] https://www.pcengines.ch/alix.htm
           | 
           | [2] https://www.pcengines.ch/tinybios.htm
           | 
           | [3] https://www.pcengines.ch/apu2.htm
        
       ___________________________________________________________________
       (page generated 2022-11-19 23:00 UTC)