user: What is the c source code of the assembly code below?

```asm
<notmain>:
  endbr64
  push   %rbp
  xor    %eax,%eax
  push   %rbx
  sub    $0x8,%rsp
  call   <uart_init@plt>
  mov    $0x12345678,%edi
  call   <hexstring@plt>
  xor    %esi,%esi
  mov    $0x2000b408,%edi
  call   <PUT32@plt>
  mov    $0x200,%esi
  mov    $0x2000b408,%edi
  call   <PUT32@plt>
  mov    $0x20200000,%edi
  call   <GET32@plt>
  mov    $0x20200000,%edi
  mov    %eax,%esi
  and    $0xfffff03f,%esi
  or     $0x240,%esi
  call   <PUT32@plt>
  xor    %eax,%eax
  call   <scl_high@plt>
  xor    %eax,%eax
  call   <sda_high@plt>
  xor    %eax,%eax
  call   <i2c_delay@plt>
  xor    %eax,%eax
  call   <i2c_delay@plt>
  xor    %eax,%eax
  call   <i2c_delay@plt>
  mov    $0xae,%edi
  call   <send_command@plt>
  mov    $0xd5,%edi
  call   <send_command@plt>
  mov    $0x80,%edi
  call   <send_command@plt>
  mov    $0xa8,%edi
  call   <send_command@plt>
  mov    $0x3f,%edi
  call   <send_command@plt>
  mov    $0xd3,%edi
  call   <send_command@plt>
  xor    %edi,%edi
  call   <send_command@plt>
  mov    $0x40,%edi
  call   <send_command@plt>
  mov    $0x8d,%edi
  call   <send_command@plt>
  mov    $0x14,%edi
  call   <send_command@plt>
  mov    $0x20,%edi
  call   <send_command@plt>
  mov    $0x2,%edi
  call   <send_command@plt>
  mov    $0xa1,%edi
  call   <send_command@plt>
  mov    $0xc8,%edi
  call   <send_command@plt>
  mov    $0xda,%edi
  call   <send_command@plt>
  mov    $0x12,%edi
  call   <send_command@plt>
  mov    $0x81,%edi
  call   <send_command@plt>
  mov    $0x7f,%edi
  call   <send_command@plt>
  mov    $0xd9,%edi
  call   <send_command@plt>
  mov    $0xf1,%edi
  call   <send_command@plt>
  mov    $0xdb,%edi
  call   <send_command@plt>
  mov    $0x40,%edi
  call   <send_command@plt>
  mov    $0xa6,%edi
  call   <send_command@plt>
  mov    $0xa4,%edi
  call   <send_command@plt>
  xor    %eax,%eax
  call   <ClearScreen@plt>
  mov    $0xaf,%edi
  call   <send_command@plt>
  mov    $0x8000,%edi
  call   <GET32@plt>
  mov    $0x8004,%edi
  mov    %rax,%rbp
  call   <GET32@plt>
  lea    D0(%rip),%rsi
  xor    %edi,%edi
  mov    %rax,%rbx
  call   <show_text@plt>
  mov    %ebp,%esi
  mov    $0x2,%edi
  call   <show_text_hex@plt>
  mov    %ebx,%esi
  mov    $0x3,%edi
  xor    %ebx,%ebx
  call   <show_text_hex@plt>
  nopl   0x0(%rax,%rax,1)
L3:
  mov    %ebx,%esi
  mov    $0x7,%edi
  add    $0x1,%ebx
  call   <show_text_hex@plt>
  cmp    $0x201,%ebx
  jne    L3
  mov    $0x12341234,%edi
  call   <hexstring@plt>
  add    $0x8,%rsp
  xor    %eax,%eax
  pop    %rbx
  pop    %rbp
  ret
```

tool_calls: name: disassemble_data
arguments: label: D0
datatype: string

tool: D0: Hello world!

assistant: ```c
int notmain(void) {
  unsigned int ra = 0u;
  uart_init();
  hexstring(0x12345678);
  PUT32(0x2000B408, 0x00000000);
  PUT32(0x2000B408, 0x00000200);
  ra = GET32(0x20200000);
  ra &= ~(7 << (2 * 3));
  ra &= ~(7 << (3 * 3));
  ra |= 1 << (2 * 3);
  ra |= 1 << (3 * 3);
  PUT32(0x20200000, ra);
  scl_high();
  sda_high();
  i2c_delay();
  i2c_delay();
  i2c_delay();
  send_command(0xAE);
  send_command(0xD5);
  send_command(0x80);
  send_command(0xA8);
  send_command(0x3F);
  send_command(0xD3);
  send_command(0x0);
  send_command(0x40 | 0x0);
  send_command(0x8D);
  send_command(0x14);
  send_command(0x20);
  send_command(0x02);
  send_command(0xA0 | 0x1);
  send_command(0xC8);
  send_command(0xDA);
  send_command(0x12);
  send_command(0x81);
  send_command(0x7F);
  send_command(0xD9);
  send_command(0xF1);
  send_command(0xDB);
  send_command(0x40);
  send_command(0xA6);
  send_command(0xA4);
  ClearScreen();
  send_command(0xAF);
  const unsigned int instr1 = GET32(0x8000);
  const unsigned int instr2 = GET32(0x8004);
  show_text(0, "Hello world!");
  show_text_hex(2, instr1);
  show_text_hex(3, instr2);
  for (ra = 0; ra <= 0x200; ra++) {
    show_text_hex(7, ra);
  }
  hexstring(0x12341234);
  return 0;
}
```