user: Translate the below assembly code into C programming language:

```asm
<fc8300_init>:
  endbr64
  push   %rbx
  mov    %rdi,%rbx
  mov    $0x3,%ecx
  mov    $0xc5,%edx
  mov    $0x5f04,%esi
  call   <bbm_byte_write@plt>
  mov    $0x1,%edi
  call   <msWait@plt>
  mov    $0x0,%ecx
  mov    $0xc5,%edx
  mov    $0x5f04,%esi
  mov    %rbx,%rdi
  call   <bbm_byte_write@plt>
  mov    $0x1,%ecx
  mov    $0x50,%edx
  mov    $0x5f04,%esi
  mov    %rbx,%rdi
  call   <bbm_byte_write@plt>
  mov    $0x0,%ecx
  mov    $0x51,%edx
  mov    $0x5f04,%esi
  mov    %rbx,%rdi
  call   <bbm_byte_write@plt>
  mov    $0x5f04,%esi
  mov    %rbx,%rdi
  call   <fc8300_set_default_core_clk@plt>
  mov    $0x5f04,%esi
  mov    %rbx,%rdi
  call   <fc8300_reset@plt>
  mov    $0x0,%ecx
  mov    $0xb4,%edx
  mov    $0x5f04,%esi
  mov    %rbx,%rdi
  call   <bbm_byte_write@plt>
  mov    $0x0,%ecx
  mov    $0xb5,%edx
  mov    $0x5f04,%esi
  mov    %rbx,%rdi
  call   <bbm_byte_write@plt>
  mov    $0x6,%ecx
  mov    $0xb3,%edx
  mov    $0x5f04,%esi
  mov    %rbx,%rdi
  call   <bbm_byte_write@plt>
  mov    $0x1,%ecx
  mov    $0xba,%edx
  mov    $0x5f04,%esi
  mov    %rbx,%rdi
  call   <bbm_byte_write@plt>
  mov    $0x0,%ecx
  mov    $0xb9,%edx
  mov    $0x5f04,%esi
  mov    %rbx,%rdi
  call   <bbm_byte_write@plt>
  mov    $0x0,%ecx
  mov    $0xae,%edx
  mov    $0x5f04,%esi
  mov    %rbx,%rdi
  call   <bbm_byte_write@plt>
  mov    $0x7777777,%ecx
  mov    $0xe0,%edx
  mov    $0x5f04,%esi
  mov    %rbx,%rdi
  call   <bbm_long_write@plt>
  mov    $0x71,%ecx
  mov    $0x1020,%edx
  mov    $0x5f04,%esi
  mov    %rbx,%rdi
  call   <bbm_byte_write@plt>
  mov    $0xa,%ecx
  mov    $0x1069,%edx
  mov    $0x5f04,%esi
  mov    %rbx,%rdi
  call   <bbm_byte_write@plt>
  mov    $0x27,%ecx
  mov    $0x1000,%edx
  mov    $0x5f04,%esi
  mov    %rbx,%rdi
  call   <bbm_byte_write@plt>
  mov    $0x16,%ecx
  mov    $0x1083,%edx
  mov    $0x5f04,%esi
  mov    %rbx,%rdi
  call   <bbm_byte_write@plt>
  mov    $0x16,%ecx
  mov    $0x1084,%edx
  mov    $0x5f04,%esi
  mov    %rbx,%rdi
  call   <bbm_byte_write@plt>
  mov    $0x6,%ecx
  mov    $0x3052,%edx
  mov    $0x5f04,%esi
  mov    %rbx,%rdi
  call   <bbm_byte_write@plt>
  mov    $0x1900,%ecx
  mov    $0x3104,%edx
  mov    $0x5f04,%esi
  mov    %rbx,%rdi
  call   <bbm_word_write@plt>
  mov    $0x3e0,%ecx
  mov    $0x1008,%edx
  mov    $0x5f04,%esi
  mov    %rbx,%rdi
  call   <bbm_word_write@plt>
  mov    $0x3f,%ecx
  mov    $0x4070,%edx
  mov    $0x5f04,%esi
  mov    %rbx,%rdi
  call   <bbm_word_write@plt>
  mov    $0x620,%ecx
  mov    $0x4200,%edx
  mov    $0x5f04,%esi
  mov    %rbx,%rdi
  call   <bbm_word_write@plt>
  mov    $0x2,%ecx
  mov    $0x4208,%edx
  mov    $0x5800,%esi
  mov    %rbx,%rdi
  call   <bbm_byte_write@plt>
  mov    $0x16,%ecx
  mov    $0x4307,%edx
  mov    $0x5800,%esi
  mov    %rbx,%rdi
  call   <bbm_byte_write@plt>
  mov    $0x0,%ecx
  mov    $0x8010,%edx
  mov    $0x5f04,%esi
  mov    %rbx,%rdi
  call   <bbm_word_write@plt>
  mov    $0xdffb,%ecx
  mov    $0x8020,%edx
  mov    $0x5f04,%esi
  mov    %rbx,%rdi
  call   <bbm_word_write@plt>
  mov    $0x6ffd,%ecx
  mov    $0x8030,%edx
  mov    $0x5f04,%esi
  mov    %rbx,%rdi
  call   <bbm_word_write@plt>
  mov    $0xdffc,%ecx
  mov    $0x8018,%edx
  mov    $0x5f04,%esi
  mov    %rbx,%rdi
  call   <bbm_word_write@plt>
  mov    $0xe0c7,%ecx
  mov    $0x8028,%edx
  mov    $0x5f04,%esi
  mov    %rbx,%rdi
  call   <bbm_word_write@plt>
  mov    $0x65,%ecx
  mov    $0x8038,%edx
  mov    $0x5f04,%esi
  mov    %rbx,%rdi
  call   <bbm_word_write@plt>
  mov    $0xe0c8,%ecx
  mov    $0x801a,%edx
  mov    $0x5f04,%esi
  mov    %rbx,%rdi
  call   <bbm_word_write@plt>
  mov    $0xe8bf,%ecx
  mov    $0x802a,%edx
  mov    $0x5f04,%esi
  mov    %rbx,%rdi
  call   <bbm_word_write@plt>
  mov    $0x3fb,%ecx
  mov    $0x803a,%edx
  mov    $0x5f04,%esi
  mov    %rbx,%rdi
  call   <bbm_word_write@plt>
  mov    $0xe8c0,%ecx
  mov    $0x801c,%edx
  mov    $0x5f04,%esi
  mov    %rbx,%rdi
  call   <bbm_word_write@plt>
  mov    $0xea57,%ecx
  mov    $0x802c,%edx
  mov    $0x5f04,%esi
  mov    %rbx,%rdi
  call   <bbm_word_write@plt>
  mov    $0xcb,%ecx
  mov    $0x803c,%edx
  mov    $0x5f04,%esi
  mov    %rbx,%rdi
  call   <bbm_word_write@plt>
  mov    $0xea58,%ecx
  mov    $0x801e,%edx
  mov    $0x5f04,%esi
  mov    %rbx,%rdi
  call   <bbm_word_write@plt>
  mov    $0xea73,%ecx
  mov    $0x802e,%edx
  mov    $0x5f04,%esi
  mov    %rbx,%rdi
  call   <bbm_word_write@plt>
  mov    $0xd,%ecx
  mov    $0x803e,%edx
  mov    $0x5f04,%esi
  mov    %rbx,%rdi
  call   <bbm_word_write@plt>
  mov    $0x1,%ecx
  mov    $0x800f,%edx
  mov    $0x5800,%esi
  mov    %rbx,%rdi
  call   <bbm_byte_write@plt>
  mov    $0x0,%ecx
  mov    $0x20,%edx
  mov    $0x5f04,%esi
  mov    %rbx,%rdi
  call   <bbm_byte_write@plt>
  mov    $0x0,%ecx
  mov    $0xa000,%edx
  mov    $0x5f04,%esi
  mov    %rbx,%rdi
  call   <bbm_byte_write@plt>
  mov    $0x9,%ecx
  mov    $0x4242,%edx
  mov    $0x5f04,%esi
  mov    %rbx,%rdi
  call   <bbm_byte_write@plt>
  mov    $0xff,%ecx
  mov    $0x800a,%edx
  mov    $0x5f04,%esi
  mov    %rbx,%rdi
  call   <bbm_byte_write@plt>
  mov    $0x1,%ecx
  mov    $0x800c,%edx
  mov    $0x5f04,%esi
  mov    %rbx,%rdi
  call   <bbm_byte_write@plt>
  mov    $0x1,%ecx
  mov    $0x17,%edx
  mov    $0x5800,%esi
  mov    %rbx,%rdi
  call   <bbm_byte_write@plt>
  mov    $0xde,%ecx
  mov    $0x18,%edx
  mov    $0x5800,%esi
  mov    %rbx,%rdi
  call   <bbm_byte_write@plt>
  mov    $0x1,%ecx
  mov    $0x8002,%edx
  mov    $0x5800,%esi
  mov    %rbx,%rdi
  call   <bbm_byte_write@plt>
  mov    $0x1,%ecx
  mov    $0x8003,%edx
  mov    $0x5800,%esi
  mov    %rbx,%rdi
  call   <bbm_byte_write@plt>
  mov    $0x1,%ecx
  mov    $0x3,%edx
  mov    $0x5800,%esi
  mov    %rbx,%rdi
  call   <bbm_byte_write@plt>
  mov    $0x1,%ecx
  mov    $0x6,%edx
  mov    $0x5800,%esi
  mov    %rbx,%rdi
  call   <bbm_byte_write@plt>
  mov    $0x0,%eax
  pop    %rbx
  ret
```

assistant: ```c
int fc8300_init(void *handle, unsigned short devid) {
  bbm_byte_write(handle, 0x5f04, 0x00c5, 0x03);
  msWait(1);
  bbm_byte_write(handle, 0x5f04, 0x00c5, 0x00);
  bbm_byte_write(handle, 0x5f04, 0x0050, 0x01);
  bbm_byte_write(handle, 0x5f04, 0x0051, 0x00);
  fc8300_set_default_core_clk(handle, 0x5f04);
  fc8300_reset(handle, 0x5f04);
  bbm_byte_write(handle, 0x5f04, 0x00b4, 0x00);
  bbm_byte_write(handle, 0x5f04, 0x00b5, 0x00);
  bbm_byte_write(handle, 0x5f04, 0x00b3, 0x06);
  bbm_byte_write(handle, 0x5f04, 0x00ba, 0x01);
  bbm_byte_write(handle, 0x5f04, 0x00b9, 0x00);
  bbm_byte_write(handle, 0x5f04, 0x00ae, 0x00);
  bbm_long_write(handle, 0x5f04, 0x00e0, 0x07777777);
  bbm_byte_write(handle, 0x5f04, 0x1020, 0x71);
  bbm_byte_write(handle, 0x5f04, 0x1069, 0x0a);
  bbm_byte_write(handle, 0x5f04, 0x1000, 0x27);
  bbm_byte_write(handle, 0x5f04, 0x1083, 0x16);
  bbm_byte_write(handle, 0x5f04, 0x1084, 0x16);
  bbm_byte_write(handle, 0x5f04, 0x3052, 0x06);
  bbm_word_write(handle, 0x5f04, 0x3104, 0x1900);
  bbm_word_write(handle, 0x5f04, 0x1008, 0x03e0);
  bbm_word_write(handle, 0x5f04, 0x4070, 0x003f);
  bbm_word_write(handle, 0x5f04, 0x4200, 0x0620);
  bbm_byte_write(handle, 0x5800, 0x4208, 0x02);
  bbm_byte_write(handle, 0x5800, 0x4307, 0x16);
  bbm_word_write(handle, 0x5f04, 0x8010, (0x0000));
  bbm_word_write(handle, 0x5f04, 0x8020, ((0x0000) + (188 * 305) - 1));
  bbm_word_write(handle, 0x5f04, 0x8030, ((188 * 305) / 2 - 1));
  bbm_word_write(handle, 0x5f04, 0x8018, (((((0x0000) + (188 * 305)) + (0)) + (0)) + (0)));
  bbm_word_write(handle, 0x5f04, 0x8028, ((((((0x0000) + (188 * 305)) + (0)) + (0)) + (0)) + (204) - 1));
  bbm_word_write(handle, 0x5f04, 0x8038, ((204) / 2 - 1));
  bbm_word_write(handle, 0x5f04, 0x801a, ((((((0x0000) + (188 * 305)) + (0)) + (0)) + (0)) + (204)));
  bbm_word_write(handle, 0x5f04, 0x802a, (((((((0x0000) + (188 * 305)) + (0)) + (0)) + (0)) + (204)) + (2040) - 1));
  bbm_word_write(handle, 0x5f04, 0x803a, ((2040) / 2 - 1));
  bbm_word_write(handle, 0x5f04, 0x801c, (((((((0x0000) + (188 * 305)) + (0)) + (0)) + (0)) + (204)) + (2040)));
  bbm_word_write(handle, 0x5f04, 0x802c, ((((((((0x0000) + (188 * 305)) + (0)) + (0)) + (0)) + (204)) + (2040)) + (408) - 1));
  bbm_word_write(handle, 0x5f04, 0x803c, ((408) / 2 - 1));
  bbm_word_write(handle, 0x5f04, 0x801e, ((((((((0x0000) + (188 * 305)) + (0)) + (0)) + (0)) + (204)) + (2040)) + (408)));
  bbm_word_write(handle, 0x5f04, 0x802e, (((((((((0x0000) + (188 * 305)) + (0)) + (0)) + (0)) + (204)) + (2040)) + (408)) + (28) - 1));
  bbm_word_write(handle, 0x5f04, 0x803e, ((28) / 2 - 1));
  bbm_byte_write(handle, 0x5800, 0x800f, 0x01);
  bbm_byte_write(handle, 0x5f04, 0x0020, 0x00);
  bbm_byte_write(handle, 0x5f04, 0xa000, 0x00);
  bbm_byte_write(handle, 0x5f04, 0x4242, 0x09);
  bbm_byte_write(handle, 0x5f04, 0x800a, 0xff);
  bbm_byte_write(handle, 0x5f04, 0x800c, 0x01);
  bbm_byte_write(handle, 0x5800, 0x0017, 0x01);
  bbm_byte_write(handle, 0x5800, 0x0018, 0xDE);
  bbm_byte_write(handle, 0x5800, 0x8002, 0x01);
  bbm_byte_write(handle, 0x5800, 0x8003, 0x01);
  bbm_byte_write(handle, 0x5800, 0x0003, 0x01);
  bbm_byte_write(handle, 0x5800, 0x0006, 0x01);
  return 0;
}
```