diff --git a/index.html b/index.html index 202b747..097c878 100644 --- a/index.html +++ b/index.html @@ -95,14 +95,22 @@
  • Senoko: Open Source Power Board for Novena
  • +
    +

    Hardware with Embedded Software

    + +

    About Renode

    @@ -153,21 +161,15 @@

    What is an Emulator?

    - - + +
    +
    +

    What is an Emulator?

    +

    What is an Emulator?

    -

    Whole-System Emulator

    @@ -190,24 +192,17 @@
  • Parallels
  • --> -
    +
    +

    Transparent Emulator

      -
    • HyperV
    • WSL2/Docker
    • qemu on Linux
    • Rosetta on Mac
    -

    Debugger/Emulator

    -
      -
    • FCEUX (Nintendo Entertainment System)
    • -
    • Dolphin (Wii / Gamecube)
    • -
    -
    -
    -

    Renode Is All of These

    +

    Renode Is Many of These

    • Console: Able to present an interactive environment
    • Transparent: Can run in CI via Robot commands
    • @@ -217,6 +212,20 @@
    +
    +

    What is a Computer?

    + +
    +
    +

    What is a Computer?

    +
      +
    • A system of devices
    • +
    • One or more CPU
    • +
    • One or more buses
    • +
    • One or more blocks of memory
    • +
    • Some I/O
    • +
    +

    What is a Computer?

    @@ -269,6 +278,128 @@
    +
    +

    That's Nice, but What About...

    +
      +
    1. Loading firmware?
    2. +
    3. Adding peripherals?
    4. +
    +
    + +
    +
    +

    What is "Firmware"?

    +
    Firmware is a series of instructions executed by the CPU in + order to accomplish a task
    +
    Firmware is Memory
    +
    +
    +

    Loading Firmware in Renode

    +
    
    +						sysbus LoadELF @firmware.elf
    +					
    +
    
    +						sysbus LoadBinary @rom.bin 0x20000000
    +					
    +
    
    +						sysbus LoadSymbolsFrom @rom.elf
    +					
    +
    +
    +

    How does Renode Interact With $VENDOR_TOOL?

    +
      +
    • Hopefully your vendor tool produces ELF files
    • +
    • At the end of the day, it's all bytes. Just use LoadBinary! +
    • +
    +
    +
    +

    What About Boot ROMs?

    +
      +
    1. Initialize peripherals
    2. +
    3. Check for boot override
    4. +
    5. Check for low-power state
    6. +
    7. Load firmware into RAM
    8. +
    9. Validate firmware
    10. +
    11. Jump to loaded program
    12. +
    +
    
    +						sysbus.cpu VectorTableOffset 0x20000000
    +						sysbus.cpu PC 0x20000c00
    +					
    +
    +
    +
    +
    +

    What about New Peripherals?

    +
    +
    +

    It's All About Small Victories

    +
      +
    • Serial ports are super rewarding
    • +
    • They're also usually simple!
    • +
    • They are easy to script
    • +
    +
    +
    +

    Reusing an Existing Port

    +
    +
    +

    Steps to Set Up a Serial Port

    +
      +
    1. Enable peripheral
    2. +
    3. Set up clock
    4. +
    5. Mux GPIOs
    6. +
    7. Calculate baud rate
    8. +
    9. Write to UART TX register
    10. +
    +
    +
    +

    Steps to Set Up a Serial Port

    + +
    +
    +

    Steps to Set Up a Serial Port

    +
      +
    • Interrupt Support
    • +
    • DMA
    • +
    +
    +
    +

    Example Serial Port

    +
    
    +						{(long)Registers.RxTx, new DoubleWordRegister(this)
    +							.WithValueField(0, 8,
    +								writeCallback: (_, value) => {
    +									this.TransmitCharacter((byte)value);
    +								},
    +								valueProviderCallback: _ => {
    +									if(!TryGetCharacter(out var character))
    +									{
    +										this.Log(LogLevel.Warning, "Empty Rx FIFO.");
    +									}
    +									return character;
    +								})
    +						},
    +					
    +
    +
    +

    What about Missing Definitions?

    +
      +
    • Most registers are unused
    • +
    • Most writes can be ignored
    • +
    +
    +
    +

    Advantages of Emulation

    + +
    +
    +

    Advantages of Emulation

    + +
    +
    +
    -
    -

    What is "Firmware"?

    -
    -
    -

    How does this interact with $VENDOR_TOOL?

    -
    -
    -

    What about boot ROMs?

    -
    -
    -

    What about missing registers?

    -
      -
    • Very few projects use built-in blocks
    • -
    -
    -
    -

    It's All About Small Victories

    -
      -
    • Serial ports are super rewarding
    • -
    • They're also usually simple!
    • -
    • They are easy to script
    • -
    -
    -
    -

    Steps to Set Up a Serial Port

    -
      -
    1. Enable peripheral
    2. -
    3. Set up clock
    4. -
    5. Mux GPIOs
    6. -
    7. Calculate baud rate
    8. -
    9. Write to UART TX register
    10. -
    -
    -
    -

    Steps to Set Up a Serial Port

    - -
    -
    -

    Advantages of Emulation

    - -
    -
    -

    Advantages of Emulation

    - -
    -
    -

    Steps to Set Up a Serial Port

    -
      -
    • Interrupt Support
    • -
    • DMA
    • -
    -
    -
    -

    Example Serial Port

    -
    
    -						{(long)Registers.RxTx, new DoubleWordRegister(this)
    -							.WithValueField(0, 8,
    -								writeCallback: (_, value) => {
    -									this.TransmitCharacter((byte)value);
    -								},
    -								valueProviderCallback: _ => {
    -									if(!TryGetCharacter(out var character))
    -									{
    -										this.Log(LogLevel.Warning, "Empty Rx FIFO.");
    -									}
    -									return character;
    -								})
    -						},		
    -					
    -
    +

    Robot Framework: Running Tests in CI

    
    diff --git a/media/DEC_VT100_terminal_cropped.jpg b/media/DEC_VT100_terminal_cropped.jpg
    new file mode 100644
    index 0000000..b9a609f
    Binary files /dev/null and b/media/DEC_VT100_terminal_cropped.jpg differ