// File: mikeakohn[P]cloudtari/build/../src/TIA.cxx
// Function: TIA::draw_pixel()
void TIA::draw_pixel()
{
  uint8_t color = write_regs[COLUBK];

  if ((write_regs[CTRLPF] & 4) == 0)
  {
    // Sprites have priority.
    do
    {
      if (player_0.is_pixel_on())  { color = write_regs[COLUP0]; break; }
      if (missile_0.is_pixel_on()) { color = write_regs[COLUP0]; break; }
      if (player_1.is_pixel_on())  { color = write_regs[COLUP1]; break; }
      if (missile_1.is_pixel_on()) { color = write_regs[COLUP1]; break; }
      if (playfield.is_pixel_on()) { color = write_regs[COLUPF]; break; }
      if (ball.is_pixel_on())      { color = write_regs[COLUPF]; break; }
    } while (false);
  }
    else
  {
    // Playfield has priority.
    do
    {
      if (playfield.is_pixel_on()) { color = write_regs[COLUPF]; break; }
      if (ball.is_pixel_on())      { color = write_regs[COLUPF]; break; }
      if (player_0.is_pixel_on())  { color = write_regs[COLUP0]; break; }
      if (missile_0.is_pixel_on()) { color = write_regs[COLUP0]; break; }
      if (player_1.is_pixel_on())  { color = write_regs[COLUP1]; break; }
      if (missile_1.is_pixel_on()) { color = write_regs[COLUP1]; break; }
    } while (false);
  }

  set_pixel(get_x(), get_y(), color);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x20, %rsp
movq %rdi, -0x8(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0x18(%rbp)
movb 0x89(%rax), %cl
movb %cl, -0x9(%rbp)
movzbl 0x8a(%rax), %eax
andl $0x4, %eax
cmpl $0x0, %eax
jne 0xb22b
jmp 0xb152
movq -0x18(%rbp), %rdi
addq $0x30, %rdi
callq 0xbbf0
testb $0x1, %al
jne 0xb165
jmp 0xb177
movq -0x18(%rbp), %rax
movb 0x86(%rax), %al
movb %al, -0x9(%rbp)
jmp 0xb226
movq -0x18(%rbp), %rdi
addq $0x58, %rdi
callq 0xbc10
testb $0x1, %al
jne 0xb18a
jmp 0xb19c
movq -0x18(%rbp), %rax
movb 0x86(%rax), %al
movb %al, -0x9(%rbp)
jmp 0xb226
movq -0x18(%rbp), %rdi
addq $0x44, %rdi
callq 0xbbf0
testb $0x1, %al
jne 0xb1af
jmp 0xb1be
movq -0x18(%rbp), %rax
movb 0x87(%rax), %al
movb %al, -0x9(%rbp)
jmp 0xb226
movq -0x18(%rbp), %rdi
addq $0x64, %rdi
callq 0xbc10
testb $0x1, %al
jne 0xb1d1
jmp 0xb1e0
movq -0x18(%rbp), %rax
movb 0x87(%rax), %al
movb %al, -0x9(%rbp)
jmp 0xb226
movq -0x18(%rbp), %rdi
addq $0x18, %rdi
callq 0xbc30
testb $0x1, %al
jne 0xb1f3
jmp 0xb202
movq -0x18(%rbp), %rax
movb 0x88(%rax), %al
movb %al, -0x9(%rbp)
jmp 0xb226
movq -0x18(%rbp), %rdi
addq $0x70, %rdi
callq 0xbc10
testb $0x1, %al
jne 0xb215
jmp 0xb224
movq -0x18(%rbp), %rax
movb 0x88(%rax), %al
movb %al, -0x9(%rbp)
jmp 0xb226
jmp 0xb226
jmp 0xb303
jmp 0xb22d
movq -0x18(%rbp), %rdi
addq $0x18, %rdi
callq 0xbc30
testb $0x1, %al
jne 0xb240
jmp 0xb252
movq -0x18(%rbp), %rax
movb 0x88(%rax), %al
movb %al, -0x9(%rbp)
jmp 0xb301
movq -0x18(%rbp), %rdi
addq $0x70, %rdi
callq 0xbc10
testb $0x1, %al
jne 0xb265
jmp 0xb277
movq -0x18(%rbp), %rax
movb 0x88(%rax), %al
movb %al, -0x9(%rbp)
jmp 0xb301
movq -0x18(%rbp), %rdi
addq $0x30, %rdi
callq 0xbbf0
testb $0x1, %al
jne 0xb28a
jmp 0xb299
movq -0x18(%rbp), %rax
movb 0x86(%rax), %al
movb %al, -0x9(%rbp)
jmp 0xb301
movq -0x18(%rbp), %rdi
addq $0x58, %rdi
callq 0xbc10
testb $0x1, %al
jne 0xb2ac
jmp 0xb2bb
movq -0x18(%rbp), %rax
movb 0x86(%rax), %al
movb %al, -0x9(%rbp)
jmp 0xb301
movq -0x18(%rbp), %rdi
addq $0x44, %rdi
callq 0xbbf0
testb $0x1, %al
jne 0xb2ce
jmp 0xb2dd
movq -0x18(%rbp), %rax
movb 0x87(%rax), %al
movb %al, -0x9(%rbp)
jmp 0xb301
movq -0x18(%rbp), %rdi
addq $0x64, %rdi
callq 0xbc10
testb $0x1, %al
jne 0xb2f0
jmp 0xb2ff
movq -0x18(%rbp), %rax
movb 0x87(%rax), %al
movb %al, -0x9(%rbp)
jmp 0xb301
jmp 0xb301
jmp 0xb303
movq -0x18(%rbp), %rdi
callq 0xbe00
movq -0x18(%rbp), %rdi
movl %eax, -0x1c(%rbp)
callq 0xbe20
movq -0x18(%rbp), %rdi
movl -0x1c(%rbp), %esi
movl %eax, %edx
movzbl -0x9(%rbp), %ecx
callq 0xbc50
addq $0x20, %rsp
popq %rbp
retq