
main.o:     file format elf64-x86-64


Disassembly of section .text:

0000000000000000 <wait_retrace>:

// Portable version - generate a debug trace only!

#define debugstr(s) printf("// %s\n", s)

static inline void wait_retrace(void) {fflush(stdout); printf("  wait_retrace();\n");}
       0:	55                   	push   %rbp
       1:	48 89 e5             	mov    %rsp,%rbp
       4:	48 8b 05 00 00 00 00 	mov    0x0(%rip),%rax        # b <wait_retrace+0xb>
       b:	48 89 c7             	mov    %rax,%rdi
       e:	e8 00 00 00 00       	callq  13 <wait_retrace+0x13>
      13:	bf 00 00 00 00       	mov    $0x0,%edi
      18:	e8 00 00 00 00       	callq  1d <wait_retrace+0x1d>
      1d:	5d                   	pop    %rbp
      1e:	c3                   	retq   

000000000000001f <move>:
static inline void move(char y, char x) {printf("  move(%d, %d);\n", (int)y, (int)x);}
      1f:	55                   	push   %rbp
      20:	48 89 e5             	mov    %rsp,%rbp
      23:	48 83 ec 10          	sub    $0x10,%rsp
      27:	89 fa                	mov    %edi,%edx
      29:	89 f0                	mov    %esi,%eax
      2b:	88 55 fc             	mov    %dl,-0x4(%rbp)
      2e:	88 45 f8             	mov    %al,-0x8(%rbp)
      31:	0f be 55 f8          	movsbl -0x8(%rbp),%edx
      35:	0f be 4d fc          	movsbl -0x4(%rbp),%ecx
      39:	b8 00 00 00 00       	mov    $0x0,%eax
      3e:	89 ce                	mov    %ecx,%esi
      40:	48 89 c7             	mov    %rax,%rdi
      43:	b8 00 00 00 00       	mov    $0x0,%eax
      48:	e8 00 00 00 00       	callq  4d <move+0x2e>
      4d:	c9                   	leaveq 
      4e:	c3                   	retq   

000000000000004f <line>:
static inline void line(char y, char x) {printf("  line(%d, %d);\n", (int)y, (int)x);}
      4f:	55                   	push   %rbp
      50:	48 89 e5             	mov    %rsp,%rbp
      53:	48 83 ec 10          	sub    $0x10,%rsp
      57:	89 fa                	mov    %edi,%edx
      59:	89 f0                	mov    %esi,%eax
      5b:	88 55 fc             	mov    %dl,-0x4(%rbp)
      5e:	88 45 f8             	mov    %al,-0x8(%rbp)
      61:	0f be 55 f8          	movsbl -0x8(%rbp),%edx
      65:	0f be 4d fc          	movsbl -0x4(%rbp),%ecx
      69:	b8 00 00 00 00       	mov    $0x0,%eax
      6e:	89 ce                	mov    %ecx,%esi
      70:	48 89 c7             	mov    %rax,%rdi
      73:	b8 00 00 00 00       	mov    $0x0,%eax
      78:	e8 00 00 00 00       	callq  7d <line+0x2e>
      7d:	c9                   	leaveq 
      7e:	c3                   	retq   

000000000000007f <reset_beam>:
#define dots(size, array) printf("  dots(%d, %s);\n", (int)((unsigned char)(size)), #array)
#define displaylist(array) do { printf("  displaylist(%s);\n", #array); (void)array; } while (0)
static inline void dot(char y, char x) {printf("  dot(%d, %d);\n", (int)y, (int)x);}
static inline void reset_beam(void) {printf("  reset_beam();\n");}
      7f:	55                   	push   %rbp
      80:	48 89 e5             	mov    %rsp,%rbp
      83:	bf 00 00 00 00       	mov    $0x0,%edi
      88:	e8 00 00 00 00       	callq  8d <reset_beam+0xe>
      8d:	5d                   	pop    %rbp
      8e:	c3                   	retq   

000000000000008f <set_scale>:
static inline void set_scale(unsigned char scale) {printf("  set_scale(%d);\n", (int)((unsigned char)scale));}
      8f:	55                   	push   %rbp
      90:	48 89 e5             	mov    %rsp,%rbp
      93:	48 83 ec 10          	sub    $0x10,%rsp
      97:	89 f8                	mov    %edi,%eax
      99:	88 45 fc             	mov    %al,-0x4(%rbp)
      9c:	0f b6 55 fc          	movzbl -0x4(%rbp),%edx
      a0:	b8 00 00 00 00       	mov    $0x0,%eax
      a5:	89 d6                	mov    %edx,%esi
      a7:	48 89 c7             	mov    %rax,%rdi
      aa:	b8 00 00 00 00       	mov    $0x0,%eax
      af:	e8 00 00 00 00       	callq  b4 <set_scale+0x25>
      b4:	c9                   	leaveq 
      b5:	c3                   	retq   

00000000000000b6 <intensity>:
static inline void intensity(char brightness) {printf("  intensity(%d);\n", (int)brightness);}
      b6:	55                   	push   %rbp
      b7:	48 89 e5             	mov    %rsp,%rbp
      ba:	48 83 ec 10          	sub    $0x10,%rsp
      be:	89 f8                	mov    %edi,%eax
      c0:	88 45 fc             	mov    %al,-0x4(%rbp)
      c3:	0f be 55 fc          	movsbl -0x4(%rbp),%edx
      c7:	b8 00 00 00 00       	mov    $0x0,%eax
      cc:	89 d6                	mov    %edx,%esi
      ce:	48 89 c7             	mov    %rax,%rdi
      d1:	b8 00 00 00 00       	mov    $0x0,%eax
      d6:	e8 00 00 00 00       	callq  db <intensity+0x25>
      db:	c9                   	leaveq 
      dc:	c3                   	retq   

00000000000000dd <poll_joystick>:
#define rotate_vl(angle, points, original, rotated) do { printf("  rotate(%d, %d, %s, %s);\n", angle, points, #original, #rotated);} while (0)
static void poll_joystick(void) {printf("  poll_joystick();\n");}
      dd:	55                   	push   %rbp
      de:	48 89 e5             	mov    %rsp,%rbp
      e1:	bf 00 00 00 00       	mov    $0x0,%edi
      e6:	e8 00 00 00 00       	callq  eb <poll_joystick+0xe>
      eb:	5d                   	pop    %rbp
      ec:	c3                   	retq   

00000000000000ed <init_hardware>:
static void init_hardware(void) {printf("  init_hardware();\n");}
      ed:	55                   	push   %rbp
      ee:	48 89 e5             	mov    %rsp,%rbp
      f1:	bf 00 00 00 00       	mov    $0x0,%edi
      f6:	e8 00 00 00 00       	callq  fb <init_hardware+0xe>
      fb:	5d                   	pop    %rbp
      fc:	c3                   	retq   

00000000000000fd <SHOW_SCORE>:
  line_rel_xy(0,24), // to 96,24
  move_rel_xy(0,-12), // to 96,12
  line_rel_xy(8,0), // to 104,12
  move_rel_xy(-8,12), // to 96,24
  line_rel_xy(16,0), // to 112,24
ENDDEF(SCORE)
      fd:	55                   	push   %rbp
      fe:	48 89 e5             	mov    %rsp,%rbp
     101:	b8 00 00 00 00       	mov    $0x0,%eax
     106:	be 00 00 00 00       	mov    $0x0,%esi
     10b:	48 89 c7             	mov    %rax,%rdi
     10e:	b8 00 00 00 00       	mov    $0x0,%eax
     113:	e8 00 00 00 00       	callq  118 <SHOW_SCORE+0x1b>
     118:	5d                   	pop    %rbp
     119:	c3                   	retq   

000000000000011a <SHOW_HIGH_SCORE>:
  line_rel_xy(0,24), // to 216,24
  move_rel_xy(0,-12), // to 216,12
  line_rel_xy(8,0), // to 224,12
  move_rel_xy(-8,12), // to 216,24
  line_rel_xy(16,0), // to 232,24
ENDDEF(HIGH_SCORE)
     11a:	55                   	push   %rbp
     11b:	48 89 e5             	mov    %rsp,%rbp
     11e:	b8 00 00 00 00       	mov    $0x0,%eax
     123:	be 00 00 00 00       	mov    $0x0,%esi
     128:	48 89 c7             	mov    %rax,%rdi
     12b:	b8 00 00 00 00       	mov    $0x0,%eax
     130:	e8 00 00 00 00       	callq  135 <SHOW_HIGH_SCORE+0x1b>
     135:	5d                   	pop    %rbp
     136:	c3                   	retq   

0000000000000137 <SHOW_CREDITS>:
  line_rel_xy(0,12), // to 160,12
  line_rel_xy(-16,0), // to 144,12
  line_rel_xy(0,12), // to 144,24
  line_rel_xy(16,0), // to 160,24
  move_rel_xy(30,-24), // to 190,0
ENDDEF(CREDITS)
     137:	55                   	push   %rbp
     138:	48 89 e5             	mov    %rsp,%rbp
     13b:	b8 00 00 00 00       	mov    $0x0,%eax
     140:	be 00 00 00 00       	mov    $0x0,%esi
     145:	48 89 c7             	mov    %rax,%rdi
     148:	b8 00 00 00 00       	mov    $0x0,%eax
     14d:	e8 00 00 00 00       	callq  152 <SHOW_CREDITS+0x1b>
     152:	5d                   	pop    %rbp
     153:	c3                   	retq   

0000000000000154 <SHOW_INSERT_COIN>:
  line_rel_xy(0,24), // to 224,24
  move_rel_xy(16,-24), // to 240,0
  line_rel_xy(0,24), // to 240,24
  line_rel_xy(16,-24), // to 256,0
  line_rel_xy(0,24), // to 256,24
ENDDEF(INSERT_COIN)
     154:	55                   	push   %rbp
     155:	48 89 e5             	mov    %rsp,%rbp
     158:	b8 00 00 00 00       	mov    $0x0,%eax
     15d:	be 00 00 00 00       	mov    $0x0,%esi
     162:	48 89 c7             	mov    %rax,%rdi
     165:	b8 00 00 00 00       	mov    $0x0,%eax
     16a:	e8 00 00 00 00       	callq  16f <SHOW_INSERT_COIN+0x1b>
     16f:	5d                   	pop    %rbp
     170:	c3                   	retq   

0000000000000171 <SHOW_PRESS_START>:
  line_rel_xy(0,-24), // to 216,0
  move_rel_xy(24,24), // to 240,24
  line_rel_xy(16,0), // to 256,24
  move_rel_xy(-8,0), // to 248,24
  line_rel_xy(0,-24), // to 248,0
ENDDEF(PRESS_START)
     171:	55                   	push   %rbp
     172:	48 89 e5             	mov    %rsp,%rbp
     175:	b8 00 00 00 00       	mov    $0x0,%eax
     17a:	be 00 00 00 00       	mov    $0x0,%esi
     17f:	48 89 c7             	mov    %rax,%rdi
     182:	b8 00 00 00 00       	mov    $0x0,%eax
     187:	e8 00 00 00 00       	callq  18c <SHOW_PRESS_START+0x1b>
     18c:	5d                   	pop    %rbp
     18d:	c3                   	retq   

000000000000018e <SHOW_N0>:
  line_rel_xy(16,0), // to 16,24
  line_rel_xy(0,-24), // to 16,0
  line_rel_xy(-16,0), // to 0,0
  line_rel_xy(0,24), // to 0,24
  move_rel_xy(24,-24), // to 24,0
ENDDEF(N0)
     18e:	55                   	push   %rbp
     18f:	48 89 e5             	mov    %rsp,%rbp
     192:	b8 00 00 00 00       	mov    $0x0,%eax
     197:	be 00 00 00 00       	mov    $0x0,%esi
     19c:	48 89 c7             	mov    %rax,%rdi
     19f:	b8 00 00 00 00       	mov    $0x0,%eax
     1a4:	e8 00 00 00 00       	callq  1a9 <SHOW_N0+0x1b>
     1a9:	5d                   	pop    %rbp
     1aa:	c3                   	retq   

00000000000001ab <SHOW_N1>:

DEFINE(N1)
  move_rel_xy(8,0), // to 8,0
  line_rel_xy(0,24), // to 8,24
  move_rel_xy(16,-24), // to 24,0
ENDDEF(N1)
     1ab:	55                   	push   %rbp
     1ac:	48 89 e5             	mov    %rsp,%rbp
     1af:	b8 00 00 00 00       	mov    $0x0,%eax
     1b4:	be 00 00 00 00       	mov    $0x0,%esi
     1b9:	48 89 c7             	mov    %rax,%rdi
     1bc:	b8 00 00 00 00       	mov    $0x0,%eax
     1c1:	e8 00 00 00 00       	callq  1c6 <SHOW_N1+0x1b>
     1c6:	5d                   	pop    %rbp
     1c7:	c3                   	retq   

00000000000001c8 <SHOW_N2>:
  line_rel_xy(0,-12), // to 16,12
  line_rel_xy(-16,0), // to 0,12
  line_rel_xy(0,-12), // to 0,0
  line_rel_xy(16,0), // to 16,0
  move_rel_xy(8,0), // to 24,0
ENDDEF(N2)
     1c8:	55                   	push   %rbp
     1c9:	48 89 e5             	mov    %rsp,%rbp
     1cc:	b8 00 00 00 00       	mov    $0x0,%eax
     1d1:	be 00 00 00 00       	mov    $0x0,%esi
     1d6:	48 89 c7             	mov    %rax,%rdi
     1d9:	b8 00 00 00 00       	mov    $0x0,%eax
     1de:	e8 00 00 00 00       	callq  1e3 <SHOW_N2+0x1b>
     1e3:	5d                   	pop    %rbp
     1e4:	c3                   	retq   

00000000000001e5 <SHOW_N3>:
  line_rel_xy(8,0), // to 16,12
  move_rel_xy(0,-12), // to 16,0
  line_rel_xy(0,24), // to 16,24
  line_rel_xy(-16,0), // to 0,24
  move_rel_xy(24,-24), // to 24,0
ENDDEF(N3)
     1e5:	55                   	push   %rbp
     1e6:	48 89 e5             	mov    %rsp,%rbp
     1e9:	b8 00 00 00 00       	mov    $0x0,%eax
     1ee:	be 00 00 00 00       	mov    $0x0,%esi
     1f3:	48 89 c7             	mov    %rax,%rdi
     1f6:	b8 00 00 00 00       	mov    $0x0,%eax
     1fb:	e8 00 00 00 00       	callq  200 <SHOW_N3+0x1b>
     200:	5d                   	pop    %rbp
     201:	c3                   	retq   

0000000000000202 <SHOW_N4>:
  line_rel_xy(0,-12), // to 0,12
  line_rel_xy(16,0), // to 16,12
  move_rel_xy(-8,0), // to 8,12
  line_rel_xy(0,-12), // to 8,0
  move_rel_xy(16,0), // to 24,0
ENDDEF(N4)
     202:	55                   	push   %rbp
     203:	48 89 e5             	mov    %rsp,%rbp
     206:	b8 00 00 00 00       	mov    $0x0,%eax
     20b:	be 00 00 00 00       	mov    $0x0,%esi
     210:	48 89 c7             	mov    %rax,%rdi
     213:	b8 00 00 00 00       	mov    $0x0,%eax
     218:	e8 00 00 00 00       	callq  21d <SHOW_N4+0x1b>
     21d:	5d                   	pop    %rbp
     21e:	c3                   	retq   

000000000000021f <SHOW_N5>:
  line_rel_xy(0,12), // to 16,12
  line_rel_xy(-16,0), // to 0,12
  line_rel_xy(0,12), // to 0,24
  line_rel_xy(16,0), // to 16,24
  move_rel_xy(8,-24), // to 24,0
ENDDEF(N5)
     21f:	55                   	push   %rbp
     220:	48 89 e5             	mov    %rsp,%rbp
     223:	b8 00 00 00 00       	mov    $0x0,%eax
     228:	be 00 00 00 00       	mov    $0x0,%esi
     22d:	48 89 c7             	mov    %rax,%rdi
     230:	b8 00 00 00 00       	mov    $0x0,%eax
     235:	e8 00 00 00 00       	callq  23a <SHOW_N5+0x1b>
     23a:	5d                   	pop    %rbp
     23b:	c3                   	retq   

000000000000023c <SHOW_N6>:
  line_rel_xy(16,0), // to 16,12
  line_rel_xy(0,-12), // to 16,0
  line_rel_xy(-16,0), // to 0,0
  line_rel_xy(0,24), // to 0,24
  move_rel_xy(24,-24), // to 24,0
ENDDEF(N6)
     23c:	55                   	push   %rbp
     23d:	48 89 e5             	mov    %rsp,%rbp
     240:	b8 00 00 00 00       	mov    $0x0,%eax
     245:	be 00 00 00 00       	mov    $0x0,%esi
     24a:	48 89 c7             	mov    %rax,%rdi
     24d:	b8 00 00 00 00       	mov    $0x0,%eax
     252:	e8 00 00 00 00       	callq  257 <SHOW_N6+0x1b>
     257:	5d                   	pop    %rbp
     258:	c3                   	retq   

0000000000000259 <SHOW_N7>:
DEFINE(N7)
  move_rel_xy(8,0), // to 8,0
  line_rel_xy(8,24), // to 16,24
  line_rel_xy(-16,0), // to 0,24
  move_rel_xy(24,-24), // to 24,0
ENDDEF(N7)
     259:	55                   	push   %rbp
     25a:	48 89 e5             	mov    %rsp,%rbp
     25d:	b8 00 00 00 00       	mov    $0x0,%eax
     262:	be 00 00 00 00       	mov    $0x0,%esi
     267:	48 89 c7             	mov    %rax,%rdi
     26a:	b8 00 00 00 00       	mov    $0x0,%eax
     26f:	e8 00 00 00 00       	callq  274 <SHOW_N7+0x1b>
     274:	5d                   	pop    %rbp
     275:	c3                   	retq   

0000000000000276 <SHOW_N8>:
  move_rel_xy(0,12), // to 16,24
  line_rel_xy(0,-24), // to 16,0
  move_rel_xy(-16,24), // to 0,24
  line_rel_xy(0,-24), // to 0,0
  move_rel_xy(24,0), // to 24,0
ENDDEF(N8)
     276:	55                   	push   %rbp
     277:	48 89 e5             	mov    %rsp,%rbp
     27a:	b8 00 00 00 00       	mov    $0x0,%eax
     27f:	be 00 00 00 00       	mov    $0x0,%esi
     284:	48 89 c7             	mov    %rax,%rdi
     287:	b8 00 00 00 00       	mov    $0x0,%eax
     28c:	e8 00 00 00 00       	callq  291 <SHOW_N8+0x1b>
     291:	5d                   	pop    %rbp
     292:	c3                   	retq   

0000000000000293 <SHOW_N9>:
  line_rel_xy(0,-12), // to 0,12
  line_rel_xy(16,0), // to 16,12
  move_rel_xy(0,12), // to 16,24
  line_rel_xy(0,-24), // to 16,0
  move_rel_xy(4,0), // to 24,0
ENDDEF(N9)
     293:	55                   	push   %rbp
     294:	48 89 e5             	mov    %rsp,%rbp
     297:	b8 00 00 00 00       	mov    $0x0,%eax
     29c:	be 00 00 00 00       	mov    $0x0,%esi
     2a1:	48 89 c7             	mov    %rax,%rdi
     2a4:	b8 00 00 00 00       	mov    $0x0,%eax
     2a9:	e8 00 00 00 00       	callq  2ae <SHOW_N9+0x1b>
     2ae:	5d                   	pop    %rbp
     2af:	c3                   	retq   

00000000000002b0 <urandom16>:

// 16 bit maths, no floats.

static signed16 rseed;
static inline signed16 urandom16(void)
{
     2b0:	55                   	push   %rbp
     2b1:	48 89 e5             	mov    %rsp,%rbp
  // VECTREX HAS A BUILT-IN RANDOM THAT WE CAN USE!
  // (though it doesn't seem very good - this may be better and faster)
  return (rseed = (rseed * 2053) + 13849);
     2b4:	0f b7 05 00 00 00 00 	movzwl 0x0(%rip),%eax        # 2bb <urandom16+0xb>
     2bb:	89 c2                	mov    %eax,%edx
     2bd:	89 d0                	mov    %edx,%eax
     2bf:	c1 e0 09             	shl    $0x9,%eax
     2c2:	01 d0                	add    %edx,%eax
     2c4:	c1 e0 02             	shl    $0x2,%eax
     2c7:	01 d0                	add    %edx,%eax
     2c9:	66 05 19 36          	add    $0x3619,%ax
     2cd:	66 89 05 00 00 00 00 	mov    %ax,0x0(%rip)        # 2d4 <urandom16+0x24>
     2d4:	0f b7 05 00 00 00 00 	movzwl 0x0(%rip),%eax        # 2db <urandom16+0x2b>
}
     2db:	5d                   	pop    %rbp
     2dc:	c3                   	retq   

00000000000002dd <irand>:

static inline unsigned16 irand(signed16 max) {
     2dd:	55                   	push   %rbp
     2de:	48 89 e5             	mov    %rsp,%rbp
     2e1:	48 83 ec 08          	sub    $0x8,%rsp
     2e5:	89 f8                	mov    %edi,%eax
     2e7:	66 89 45 fc          	mov    %ax,-0x4(%rbp)
  // returns int 0..max-1
  return (unsigned16)(urandom16() % max); // probably not very random, but this is a video game, not crypto
     2eb:	e8 c0 ff ff ff       	callq  2b0 <urandom16>
     2f0:	98                   	cwtl   
     2f1:	0f bf 4d fc          	movswl -0x4(%rbp),%ecx
     2f5:	89 c2                	mov    %eax,%edx
     2f7:	c1 fa 1f             	sar    $0x1f,%edx
     2fa:	f7 f9                	idiv   %ecx
     2fc:	89 d0                	mov    %edx,%eax
}
     2fe:	c9                   	leaveq 
     2ff:	c3                   	retq   

0000000000000300 <pickrandom>:

static inline signed16 pickrandom(signed16 low, signed16 high)
{
     300:	55                   	push   %rbp
     301:	48 89 e5             	mov    %rsp,%rbp
     304:	48 83 ec 08          	sub    $0x8,%rsp
     308:	89 fa                	mov    %edi,%edx
     30a:	89 f0                	mov    %esi,%eax
     30c:	66 89 55 fc          	mov    %dx,-0x4(%rbp)
     310:	66 89 45 f8          	mov    %ax,-0x8(%rbp)
  // We'll just assume that high > low...
  return (signed16)irand(high-low+1)+low;  // pick a random integer between low and high inclusive.
     314:	0f b7 55 f8          	movzwl -0x8(%rbp),%edx
     318:	0f b7 45 fc          	movzwl -0x4(%rbp),%eax
     31c:	89 d1                	mov    %edx,%ecx
     31e:	66 29 c1             	sub    %ax,%cx
     321:	89 c8                	mov    %ecx,%eax
     323:	83 c0 01             	add    $0x1,%eax
     326:	98                   	cwtl   
     327:	89 c7                	mov    %eax,%edi
     329:	e8 af ff ff ff       	callq  2dd <irand>
     32e:	0f b7 55 fc          	movzwl -0x4(%rbp),%edx
     332:	01 d0                	add    %edx,%eax
}
     334:	c9                   	leaveq 
     335:	c3                   	retq   

0000000000000336 <star_x1>:
#endif

static signed8 pxy[32];
static signed16 pxa[16], pya[16];

static signed16 star_x1(unsigned8 idx) {
     336:	55                   	push   %rbp
     337:	48 89 e5             	mov    %rsp,%rbp
     33a:	48 83 ec 18          	sub    $0x18,%rsp
     33e:	89 f8                	mov    %edi,%eax
     340:	88 45 ec             	mov    %al,-0x14(%rbp)
  unsigned8 xtype = (idx>>2)&3, ytype = idx&3;
     343:	0f b6 45 ec          	movzbl -0x14(%rbp),%eax
     347:	c0 e8 02             	shr    $0x2,%al
     34a:	83 e0 03             	and    $0x3,%eax
     34d:	88 45 fe             	mov    %al,-0x2(%rbp)
     350:	0f b6 45 ec          	movzbl -0x14(%rbp),%eax
     354:	83 e0 03             	and    $0x3,%eax
     357:	88 45 ff             	mov    %al,-0x1(%rbp)

  idx = xtype ^ ytype; // four types of star trail ...
     35a:	0f b6 45 ff          	movzbl -0x1(%rbp),%eax
     35e:	0f b6 55 fe          	movzbl -0x2(%rbp),%edx
     362:	31 d0                	xor    %edx,%eax
     364:	88 45 ec             	mov    %al,-0x14(%rbp)
  if (idx == 0) { // left edge
     367:	80 7d ec 00          	cmpb   $0x0,-0x14(%rbp)
     36b:	75 07                	jne    374 <star_x1+0x3e>
    return -((signed16)127<<3);
     36d:	b8 08 fc ff ff       	mov    $0xfffffc08,%eax
     372:	eb 20                	jmp    394 <star_x1+0x5e>
  } else if (idx == 2) { // right edge
     374:	80 7d ec 02          	cmpb   $0x2,-0x14(%rbp)
     378:	75 07                	jne    381 <star_x1+0x4b>
    return (signed16)127<<3;
     37a:	b8 f8 03 00 00       	mov    $0x3f8,%eax
     37f:	eb 13                	jmp    394 <star_x1+0x5e>
  } else { // top or bottom edges
    return pickrandom(-127, 127)<<3;  // could use Scratch's random byte directly...
     381:	be 7f 00 00 00       	mov    $0x7f,%esi
     386:	bf 81 ff ff ff       	mov    $0xffffff81,%edi
     38b:	e8 70 ff ff ff       	callq  300 <pickrandom>
     390:	98                   	cwtl   
     391:	c1 e0 03             	shl    $0x3,%eax
  }
}
     394:	c9                   	leaveq 
     395:	c3                   	retq   

0000000000000396 <star_y1>:

static signed16 star_y1(unsigned8 idx) {
     396:	55                   	push   %rbp
     397:	48 89 e5             	mov    %rsp,%rbp
     39a:	48 83 ec 18          	sub    $0x18,%rsp
     39e:	89 f8                	mov    %edi,%eax
     3a0:	88 45 ec             	mov    %al,-0x14(%rbp)
  unsigned8 xtype = (idx>>2)&3, ytype = idx&3;
     3a3:	0f b6 45 ec          	movzbl -0x14(%rbp),%eax
     3a7:	c0 e8 02             	shr    $0x2,%al
     3aa:	83 e0 03             	and    $0x3,%eax
     3ad:	88 45 fe             	mov    %al,-0x2(%rbp)
     3b0:	0f b6 45 ec          	movzbl -0x14(%rbp),%eax
     3b4:	83 e0 03             	and    $0x3,%eax
     3b7:	88 45 ff             	mov    %al,-0x1(%rbp)

  idx = xtype ^ ytype; // four types of star trail ...
     3ba:	0f b6 45 ff          	movzbl -0x1(%rbp),%eax
     3be:	0f b6 55 fe          	movzbl -0x2(%rbp),%edx
     3c2:	31 d0                	xor    %edx,%eax
     3c4:	88 45 ec             	mov    %al,-0x14(%rbp)
  if (idx == 1) { // top edge
     3c7:	80 7d ec 01          	cmpb   $0x1,-0x14(%rbp)
     3cb:	75 07                	jne    3d4 <star_y1+0x3e>
    return (signed16)127<<3; // right edge
     3cd:	b8 f8 03 00 00       	mov    $0x3f8,%eax
     3d2:	eb 20                	jmp    3f4 <star_y1+0x5e>
  } else if (idx == 3) { // bottom edge
     3d4:	80 7d ec 03          	cmpb   $0x3,-0x14(%rbp)
     3d8:	75 07                	jne    3e1 <star_y1+0x4b>
    return -((signed16)127<<3);
     3da:	b8 08 fc ff ff       	mov    $0xfffffc08,%eax
     3df:	eb 13                	jmp    3f4 <star_y1+0x5e>
  } else {
    return pickrandom(-127, 127)<<3;
     3e1:	be 7f 00 00 00       	mov    $0x7f,%esi
     3e6:	bf 81 ff ff ff       	mov    $0xffffff81,%edi
     3eb:	e8 10 ff ff ff       	callq  300 <pickrandom>
     3f0:	98                   	cwtl   
     3f1:	c1 e0 03             	shl    $0x3,%eax
  }
}
     3f4:	c9                   	leaveq 
     3f5:	c3                   	retq   

00000000000003f6 <clipoff>:

#define abs(x) (x<0?-x:x)
static inline boolean clipoff(signed16 x, signed16 y)
{
     3f6:	55                   	push   %rbp
     3f7:	48 89 e5             	mov    %rsp,%rbp
     3fa:	89 fa                	mov    %edi,%edx
     3fc:	89 f0                	mov    %esi,%eax
     3fe:	66 89 55 fc          	mov    %dx,-0x4(%rbp)
     402:	66 89 45 f8          	mov    %ax,-0x8(%rbp)
  return ((abs(x)+abs(y)) < 0x20); // diamond
     406:	0f bf 45 fc          	movswl -0x4(%rbp),%eax
     40a:	89 c1                	mov    %eax,%ecx
     40c:	c1 f9 1f             	sar    $0x1f,%ecx
     40f:	89 ca                	mov    %ecx,%edx
     411:	31 c2                	xor    %eax,%edx
     413:	29 ca                	sub    %ecx,%edx
     415:	0f bf 45 f8          	movswl -0x8(%rbp),%eax
     419:	89 c1                	mov    %eax,%ecx
     41b:	c1 f9 1f             	sar    $0x1f,%ecx
     41e:	31 c8                	xor    %ecx,%eax
     420:	29 c8                	sub    %ecx,%eax
     422:	01 d0                	add    %edx,%eax
     424:	83 f8 1f             	cmp    $0x1f,%eax
     427:	0f 9e c0             	setle  %al
     42a:	0f b6 c0             	movzbl %al,%eax
  //  return ( (-(signed16)0x20 <= x) && (x < (signed16)0x20) && (-(signed16)0x12 <= y) && (y < (signed16)0x12));  // rectangle
}
     42d:	5d                   	pop    %rbp
     42e:	c3                   	retq   

000000000000042f <move_star>:
#undef abs

static void move_star(unsigned8 starno)
{
     42f:	55                   	push   %rbp
     430:	48 89 e5             	mov    %rsp,%rbp
     433:	48 83 ec 18          	sub    $0x18,%rsp
     437:	89 f8                	mov    %edi,%eax
     439:	88 45 ec             	mov    %al,-0x14(%rbp)
  signed16 x, y;

  x = pxa[starno]; y = pya[starno];       // coordinate space is 0,0 center!
     43c:	0f b6 45 ec          	movzbl -0x14(%rbp),%eax
     440:	48 98                	cltq   
     442:	0f b7 84 00 00 00 00 	movzwl 0x0(%rax,%rax,1),%eax
     449:	00 
     44a:	66 89 45 fc          	mov    %ax,-0x4(%rbp)
     44e:	0f b6 45 ec          	movzbl -0x14(%rbp),%eax
     452:	48 98                	cltq   
     454:	0f b7 84 00 00 00 00 	movzwl 0x0(%rax,%rax,1),%eax
     45b:	00 
     45c:	66 89 45 fe          	mov    %ax,-0x2(%rbp)
  x = ((x<<5)-x)>>5; y = ((y<<5)-y)>>5;   // move stars closer to the center, ie towards 0
     460:	0f bf 45 fc          	movswl -0x4(%rbp),%eax
     464:	89 c2                	mov    %eax,%edx
     466:	c1 e2 05             	shl    $0x5,%edx
     469:	0f bf 45 fc          	movswl -0x4(%rbp),%eax
     46d:	89 d1                	mov    %edx,%ecx
     46f:	29 c1                	sub    %eax,%ecx
     471:	89 c8                	mov    %ecx,%eax
     473:	c1 f8 05             	sar    $0x5,%eax
     476:	66 89 45 fc          	mov    %ax,-0x4(%rbp)
     47a:	0f bf 45 fe          	movswl -0x2(%rbp),%eax
     47e:	89 c2                	mov    %eax,%edx
     480:	c1 e2 05             	shl    $0x5,%edx
     483:	0f bf 45 fe          	movswl -0x2(%rbp),%eax
     487:	89 d1                	mov    %edx,%ecx
     489:	29 c1                	sub    %eax,%ecx
     48b:	89 c8                	mov    %ecx,%eax
     48d:	c1 f8 05             	sar    $0x5,%eax
     490:	66 89 45 fe          	mov    %ax,-0x2(%rbp)
  if (clipoff((signed16)x>>(signed16)4,(signed16)y>>(signed16)4)) {  // ANSI C paranoia
     494:	0f b7 45 fe          	movzwl -0x2(%rbp),%eax
     498:	66 c1 f8 04          	sar    $0x4,%ax
     49c:	0f bf d0             	movswl %ax,%edx
     49f:	0f b7 45 fc          	movzwl -0x4(%rbp),%eax
     4a3:	66 c1 f8 04          	sar    $0x4,%ax
     4a7:	98                   	cwtl   
     4a8:	89 d6                	mov    %edx,%esi
     4aa:	89 c7                	mov    %eax,%edi
     4ac:	e8 45 ff ff ff       	callq  3f6 <clipoff>
     4b1:	85 c0                	test   %eax,%eax
     4b3:	74 1e                	je     4d3 <move_star+0xa4>
    x = star_x1(starno); y = star_y1(starno); // reset when they disappear
     4b5:	0f b6 45 ec          	movzbl -0x14(%rbp),%eax
     4b9:	89 c7                	mov    %eax,%edi
     4bb:	e8 76 fe ff ff       	callq  336 <star_x1>
     4c0:	66 89 45 fc          	mov    %ax,-0x4(%rbp)
     4c4:	0f b6 45 ec          	movzbl -0x14(%rbp),%eax
     4c8:	89 c7                	mov    %eax,%edi
     4ca:	e8 c7 fe ff ff       	callq  396 <star_y1>
     4cf:	66 89 45 fe          	mov    %ax,-0x2(%rbp)
  }
  pxa[starno] = x; pya[starno] = y;
     4d3:	0f b6 45 ec          	movzbl -0x14(%rbp),%eax
     4d7:	48 98                	cltq   
     4d9:	0f b7 55 fc          	movzwl -0x4(%rbp),%edx
     4dd:	66 89 94 00 00 00 00 	mov    %dx,0x0(%rax,%rax,1)
     4e4:	00 
     4e5:	0f b6 45 ec          	movzbl -0x14(%rbp),%eax
     4e9:	48 98                	cltq   
     4eb:	0f b7 55 fe          	movzwl -0x2(%rbp),%edx
     4ef:	66 89 94 00 00 00 00 	mov    %dx,0x0(%rax,%rax,1)
     4f6:	00 
}
     4f7:	c9                   	leaveq 
     4f8:	c3                   	retq   

00000000000004f9 <init_stars>:
  dot((signed8)(pxa[starno]>>4),(signed8)(pya[starno]>>4));
  move((signed8)(-(pxa[starno]>>4)),(signed8)(-(pya[starno]>>4))); // correct back to 0,0 for next dot.
}

static inline void init_stars(void)
{
     4f9:	55                   	push   %rbp
     4fa:	48 89 e5             	mov    %rsp,%rbp
     4fd:	53                   	push   %rbx
     4fe:	48 83 ec 10          	sub    $0x10,%rsp
  unsigned8 i, star;

  for (star = 0U; star < 16U; star++) {
     502:	c6 45 f7 00          	movb   $0x0,-0x9(%rbp)
     506:	eb 64                	jmp    56c <init_stars+0x73>
    pxa[star] = star_x1(star); pya[star] = star_y1(star);
     508:	0f b6 5d f7          	movzbl -0x9(%rbp),%ebx
     50c:	0f b6 45 f7          	movzbl -0x9(%rbp),%eax
     510:	89 c7                	mov    %eax,%edi
     512:	e8 1f fe ff ff       	callq  336 <star_x1>
     517:	48 63 d3             	movslq %ebx,%rdx
     51a:	66 89 84 12 00 00 00 	mov    %ax,0x0(%rdx,%rdx,1)
     521:	00 
     522:	0f b6 5d f7          	movzbl -0x9(%rbp),%ebx
     526:	0f b6 45 f7          	movzbl -0x9(%rbp),%eax
     52a:	89 c7                	mov    %eax,%edi
     52c:	e8 65 fe ff ff       	callq  396 <star_y1>
     531:	48 63 d3             	movslq %ebx,%rdx
     534:	66 89 84 12 00 00 00 	mov    %ax,0x0(%rdx,%rdx,1)
     53b:	00 
    for (i=0; i < star*13; i++) move_star(star); // skew the starting points (QUICK HACK)
     53c:	c6 45 f6 00          	movb   $0x0,-0xa(%rbp)
     540:	eb 0f                	jmp    551 <init_stars+0x58>
     542:	0f b6 45 f7          	movzbl -0x9(%rbp),%eax
     546:	89 c7                	mov    %eax,%edi
     548:	e8 e2 fe ff ff       	callq  42f <move_star>
     54d:	80 45 f6 01          	addb   $0x1,-0xa(%rbp)
     551:	0f b6 4d f6          	movzbl -0xa(%rbp),%ecx
     555:	0f b6 55 f7          	movzbl -0x9(%rbp),%edx
     559:	89 d0                	mov    %edx,%eax
     55b:	01 c0                	add    %eax,%eax
     55d:	01 d0                	add    %edx,%eax
     55f:	c1 e0 02             	shl    $0x2,%eax
     562:	01 d0                	add    %edx,%eax
     564:	39 c1                	cmp    %eax,%ecx
     566:	7c da                	jl     542 <init_stars+0x49>

static inline void init_stars(void)
{
  unsigned8 i, star;

  for (star = 0U; star < 16U; star++) {
     568:	80 45 f7 01          	addb   $0x1,-0x9(%rbp)
     56c:	80 7d f7 0f          	cmpb   $0xf,-0x9(%rbp)
     570:	76 96                	jbe    508 <init_stars+0xf>
    pxa[star] = star_x1(star); pya[star] = star_y1(star);
    for (i=0; i < star*13; i++) move_star(star); // skew the starting points (QUICK HACK)
  }
}
     572:	48 83 c4 10          	add    $0x10,%rsp
     576:	5b                   	pop    %rbx
     577:	5d                   	pop    %rbp
     578:	c3                   	retq   

0000000000000579 <stars>:

static unsigned8 starfield_scale = (unsigned8)0xFF;
static void stars(unsigned8 speed) // will always be centered on 0,0
{
     579:	55                   	push   %rbp
     57a:	48 89 e5             	mov    %rsp,%rbp
     57d:	48 83 ec 20          	sub    $0x20,%rsp
     581:	89 f8                	mov    %edi,%eax
     583:	88 45 ec             	mov    %al,-0x14(%rbp)
  unsigned8 star, i;

  debugstr("stars");
     586:	b8 00 00 00 00       	mov    $0x0,%eax
     58b:	be 00 00 00 00       	mov    $0x0,%esi
     590:	48 89 c7             	mov    %rax,%rdi
     593:	b8 00 00 00 00       	mov    $0x0,%eax
     598:	e8 00 00 00 00       	callq  59d <stars+0x24>

  for (star = 0U; star < 16U; star++) {
     59d:	c6 45 fc 00          	movb   $0x0,-0x4(%rbp)
     5a1:	eb 22                	jmp    5c5 <stars+0x4c>
    for (i = 0U; i < speed; i++) move_star(star);
     5a3:	c6 45 fd 00          	movb   $0x0,-0x3(%rbp)
     5a7:	eb 0f                	jmp    5b8 <stars+0x3f>
     5a9:	0f b6 45 fc          	movzbl -0x4(%rbp),%eax
     5ad:	89 c7                	mov    %eax,%edi
     5af:	e8 7b fe ff ff       	callq  42f <move_star>
     5b4:	80 45 fd 01          	addb   $0x1,-0x3(%rbp)
     5b8:	0f b6 45 fd          	movzbl -0x3(%rbp),%eax
     5bc:	3a 45 ec             	cmp    -0x14(%rbp),%al
     5bf:	72 e8                	jb     5a9 <stars+0x30>
{
  unsigned8 star, i;

  debugstr("stars");

  for (star = 0U; star < 16U; star++) {
     5c1:	80 45 fc 01          	addb   $0x1,-0x4(%rbp)
     5c5:	80 7d fc 0f          	cmpb   $0xf,-0x4(%rbp)
     5c9:	76 d8                	jbe    5a3 <stars+0x2a>
  dots(16, pxy);
#endif
  (void)pxy;
  // New fast   algorithm, does approximate fading with distance.
  {
    unsigned8 angle=63, shifted_scale;
     5cb:	c6 45 fe 3f          	movb   $0x3f,-0x2(%rbp)
      reset_beam();
     5cf:	e8 ab fa ff ff       	callq  7f <reset_beam>

      shifted_scale = starfield_scale-(unsigned8)0xBF;
     5d4:	0f b6 05 00 00 00 00 	movzbl 0x0(%rip),%eax        # 5db <stars+0x62>
     5db:	83 c0 41             	add    $0x41,%eax
     5de:	88 45 ff             	mov    %al,-0x1(%rbp)
      intensity(shifted_scale>>1);
     5e1:	0f b6 45 ff          	movzbl -0x1(%rbp),%eax
     5e5:	d0 e8                	shr    %al
     5e7:	0f be c0             	movsbl %al,%eax
     5ea:	89 c7                	mov    %eax,%edi
     5ec:	e8 c5 fa ff ff       	callq  b6 <intensity>
      set_scale(shifted_scale);
     5f1:	0f b6 45 ff          	movzbl -0x1(%rbp),%eax
     5f5:	89 c7                	mov    %eax,%edi
     5f7:	e8 93 fa ff ff       	callq  8f <set_scale>
      dots(4, (signed8 *)stardots);  reset_beam(); 
     5fc:	b8 00 00 00 00       	mov    $0x0,%eax
     601:	ba 00 00 00 00       	mov    $0x0,%edx
     606:	be 04 00 00 00       	mov    $0x4,%esi
     60b:	48 89 c7             	mov    %rax,%rdi
     60e:	b8 00 00 00 00       	mov    $0x0,%eax
     613:	e8 00 00 00 00       	callq  618 <stars+0x9f>
     618:	e8 62 fa ff ff       	callq  7f <reset_beam>

      shifted_scale = starfield_scale-(unsigned8)0x7F;
     61d:	0f b6 05 00 00 00 00 	movzbl 0x0(%rip),%eax        # 624 <stars+0xab>
     624:	83 e8 7f             	sub    $0x7f,%eax
     627:	88 45 ff             	mov    %al,-0x1(%rbp)
      rotate_vl((unsigned int)((angle+11)&63), (unsigned int)4, stardots, rotated);
     62a:	0f b6 45 fe          	movzbl -0x2(%rbp),%eax
     62e:	83 c0 0b             	add    $0xb,%eax
     631:	89 c6                	mov    %eax,%esi
     633:	83 e6 3f             	and    $0x3f,%esi
     636:	b8 00 00 00 00       	mov    $0x0,%eax
     63b:	41 b8 00 00 00 00    	mov    $0x0,%r8d
     641:	b9 00 00 00 00       	mov    $0x0,%ecx
     646:	ba 04 00 00 00       	mov    $0x4,%edx
     64b:	48 89 c7             	mov    %rax,%rdi
     64e:	b8 00 00 00 00       	mov    $0x0,%eax
     653:	e8 00 00 00 00       	callq  658 <stars+0xdf>
      intensity(shifted_scale>>1);
     658:	0f b6 45 ff          	movzbl -0x1(%rbp),%eax
     65c:	d0 e8                	shr    %al
     65e:	0f be c0             	movsbl %al,%eax
     661:	89 c7                	mov    %eax,%edi
     663:	e8 4e fa ff ff       	callq  b6 <intensity>
      set_scale(shifted_scale);
     668:	0f b6 45 ff          	movzbl -0x1(%rbp),%eax
     66c:	89 c7                	mov    %eax,%edi
     66e:	e8 1c fa ff ff       	callq  8f <set_scale>
      dots(4, rotated);   reset_beam();     
     673:	b8 00 00 00 00       	mov    $0x0,%eax
     678:	ba 00 00 00 00       	mov    $0x0,%edx
     67d:	be 04 00 00 00       	mov    $0x4,%esi
     682:	48 89 c7             	mov    %rax,%rdi
     685:	b8 00 00 00 00       	mov    $0x0,%eax
     68a:	e8 00 00 00 00       	callq  68f <stars+0x116>
     68f:	e8 eb f9 ff ff       	callq  7f <reset_beam>

      shifted_scale = starfield_scale-(unsigned8)0x3F;
     694:	0f b6 05 00 00 00 00 	movzbl 0x0(%rip),%eax        # 69b <stars+0x122>
     69b:	83 e8 3f             	sub    $0x3f,%eax
     69e:	88 45 ff             	mov    %al,-0x1(%rbp)
      rotate_vl((unsigned int)((angle+14)&63), (unsigned int)4, stardots, rotated);
     6a1:	0f b6 45 fe          	movzbl -0x2(%rbp),%eax
     6a5:	83 c0 0e             	add    $0xe,%eax
     6a8:	89 c6                	mov    %eax,%esi
     6aa:	83 e6 3f             	and    $0x3f,%esi
     6ad:	b8 00 00 00 00       	mov    $0x0,%eax
     6b2:	41 b8 00 00 00 00    	mov    $0x0,%r8d
     6b8:	b9 00 00 00 00       	mov    $0x0,%ecx
     6bd:	ba 04 00 00 00       	mov    $0x4,%edx
     6c2:	48 89 c7             	mov    %rax,%rdi
     6c5:	b8 00 00 00 00       	mov    $0x0,%eax
     6ca:	e8 00 00 00 00       	callq  6cf <stars+0x156>
      intensity(shifted_scale>>1);
     6cf:	0f b6 45 ff          	movzbl -0x1(%rbp),%eax
     6d3:	d0 e8                	shr    %al
     6d5:	0f be c0             	movsbl %al,%eax
     6d8:	89 c7                	mov    %eax,%edi
     6da:	e8 d7 f9 ff ff       	callq  b6 <intensity>
      set_scale(shifted_scale);
     6df:	0f b6 45 ff          	movzbl -0x1(%rbp),%eax
     6e3:	89 c7                	mov    %eax,%edi
     6e5:	e8 a5 f9 ff ff       	callq  8f <set_scale>
      dots(4, rotated);   reset_beam();     
     6ea:	b8 00 00 00 00       	mov    $0x0,%eax
     6ef:	ba 00 00 00 00       	mov    $0x0,%edx
     6f4:	be 04 00 00 00       	mov    $0x4,%esi
     6f9:	48 89 c7             	mov    %rax,%rdi
     6fc:	b8 00 00 00 00       	mov    $0x0,%eax
     701:	e8 00 00 00 00       	callq  706 <stars+0x18d>
     706:	e8 74 f9 ff ff       	callq  7f <reset_beam>

      shifted_scale = starfield_scale;
     70b:	0f b6 05 00 00 00 00 	movzbl 0x0(%rip),%eax        # 712 <stars+0x199>
     712:	88 45 ff             	mov    %al,-0x1(%rbp)
      rotate_vl((unsigned int)((angle+4)&63), (unsigned int)4, stardots, rotated);
     715:	0f b6 45 fe          	movzbl -0x2(%rbp),%eax
     719:	83 c0 04             	add    $0x4,%eax
     71c:	89 c6                	mov    %eax,%esi
     71e:	83 e6 3f             	and    $0x3f,%esi
     721:	b8 00 00 00 00       	mov    $0x0,%eax
     726:	41 b8 00 00 00 00    	mov    $0x0,%r8d
     72c:	b9 00 00 00 00       	mov    $0x0,%ecx
     731:	ba 04 00 00 00       	mov    $0x4,%edx
     736:	48 89 c7             	mov    %rax,%rdi
     739:	b8 00 00 00 00       	mov    $0x0,%eax
     73e:	e8 00 00 00 00       	callq  743 <stars+0x1ca>
      set_scale(shifted_scale);
     743:	0f b6 45 ff          	movzbl -0x1(%rbp),%eax
     747:	89 c7                	mov    %eax,%edi
     749:	e8 41 f9 ff ff       	callq  8f <set_scale>
      intensity(shifted_scale>>1);
     74e:	0f b6 45 ff          	movzbl -0x1(%rbp),%eax
     752:	d0 e8                	shr    %al
     754:	0f be c0             	movsbl %al,%eax
     757:	89 c7                	mov    %eax,%edi
     759:	e8 58 f9 ff ff       	callq  b6 <intensity>
      dots(4, rotated);        
     75e:	b8 00 00 00 00       	mov    $0x0,%eax
     763:	ba 00 00 00 00       	mov    $0x0,%edx
     768:	be 04 00 00 00       	mov    $0x4,%esi
     76d:	48 89 c7             	mov    %rax,%rdi
     770:	b8 00 00 00 00       	mov    $0x0,%eax
     775:	e8 00 00 00 00       	callq  77a <stars+0x201>
      starfield_scale -= 4; // must be power of 2
     77a:	0f b6 05 00 00 00 00 	movzbl 0x0(%rip),%eax        # 781 <stars+0x208>
     781:	83 e8 04             	sub    $0x4,%eax
     784:	88 05 00 00 00 00    	mov    %al,0x0(%rip)        # 78a <stars+0x211>

  }

}
     78a:	c9                   	leaveq 
     78b:	c3                   	retq   

000000000000078c <position_and_scale>:

static void position_and_scale(signed8 absx, signed8 absy, signed16 scale)
{
     78c:	55                   	push   %rbp
     78d:	48 89 e5             	mov    %rsp,%rbp
     790:	48 83 ec 10          	sub    $0x10,%rsp
     794:	89 f1                	mov    %esi,%ecx
     796:	89 d0                	mov    %edx,%eax
     798:	40 88 7d fc          	mov    %dil,-0x4(%rbp)
     79c:	88 4d f8             	mov    %cl,-0x8(%rbp)
     79f:	66 89 45 f4          	mov    %ax,-0xc(%rbp)
  reset_beam();
     7a3:	e8 d7 f8 ff ff       	callq  7f <reset_beam>
  set_scale(0x7f);
     7a8:	bf 7f 00 00 00       	mov    $0x7f,%edi
     7ad:	e8 dd f8 ff ff       	callq  8f <set_scale>
  move(absy, absx);
     7b2:	0f be 55 fc          	movsbl -0x4(%rbp),%edx
     7b6:	0f be 45 f8          	movsbl -0x8(%rbp),%eax
     7ba:	89 d6                	mov    %edx,%esi
     7bc:	89 c7                	mov    %eax,%edi
     7be:	e8 5c f8 ff ff       	callq  1f <move>
  set_scale((unsigned8)scale);
     7c3:	0f b7 45 f4          	movzwl -0xc(%rbp),%eax
     7c7:	0f b6 c0             	movzbl %al,%eax
     7ca:	89 c7                	mov    %eax,%edi
     7cc:	e8 be f8 ff ff       	callq  8f <set_scale>
}
     7d1:	c9                   	leaveq 
     7d2:	c3                   	retq   

00000000000007d3 <position_and_scale_and_intensity>:

static inline void position_and_scale_and_intensity(signed8 absx, signed8 absy, signed16 scale, unsigned8 bright)
{
     7d3:	55                   	push   %rbp
     7d4:	48 89 e5             	mov    %rsp,%rbp
     7d7:	48 83 ec 10          	sub    $0x10,%rsp
     7db:	89 c8                	mov    %ecx,%eax
     7dd:	40 88 7d fc          	mov    %dil,-0x4(%rbp)
     7e1:	40 88 75 f8          	mov    %sil,-0x8(%rbp)
     7e5:	66 89 55 f4          	mov    %dx,-0xc(%rbp)
     7e9:	88 45 f0             	mov    %al,-0x10(%rbp)
  position_and_scale(absx, absy, scale);
     7ec:	0f bf 55 f4          	movswl -0xc(%rbp),%edx
     7f0:	0f be 4d f8          	movsbl -0x8(%rbp),%ecx
     7f4:	0f be 45 fc          	movsbl -0x4(%rbp),%eax
     7f8:	89 ce                	mov    %ecx,%esi
     7fa:	89 c7                	mov    %eax,%edi
     7fc:	e8 8b ff ff ff       	callq  78c <position_and_scale>
  intensity(bright);
     801:	0f b6 45 f0          	movzbl -0x10(%rbp),%eax
     805:	0f be c0             	movsbl %al,%eax
     808:	89 c7                	mov    %eax,%edi
     80a:	e8 a7 f8 ff ff       	callq  b6 <intensity>
}
     80f:	c9                   	leaveq 
     810:	c3                   	retq   

0000000000000811 <draw_shields>:

/* Shields on the vectrex are sideways wrt the 'real' tailgunner */
static void draw_shields(unsigned8 scale)
{
     811:	55                   	push   %rbp
     812:	48 89 e5             	mov    %rsp,%rbp
     815:	48 83 ec 20          	sub    $0x20,%rsp
     819:	89 f8                	mov    %edi,%eax
     81b:	88 45 ec             	mov    %al,-0x14(%rbp)
  const signed8 *ptr = shieldvec;
     81e:	48 c7 45 f0 00 00 00 	movq   $0x0,-0x10(%rbp)
     825:	00 
  signed16 i;
  signed8 x1, y1;

  debugstr("draw_shields");
     826:	b8 00 00 00 00       	mov    $0x0,%eax
     82b:	be 00 00 00 00       	mov    $0x0,%esi
     830:	48 89 c7             	mov    %rax,%rdi
     833:	b8 00 00 00 00       	mov    $0x0,%eax
     838:	e8 00 00 00 00       	callq  83d <draw_shields+0x2c>

  position_and_scale(0, 0, scale);
     83d:	0f b6 45 ec          	movzbl -0x14(%rbp),%eax
     841:	89 c2                	mov    %eax,%edx
     843:	be 00 00 00 00       	mov    $0x0,%esi
     848:	bf 00 00 00 00       	mov    $0x0,%edi
     84d:	e8 3a ff ff ff       	callq  78c <position_and_scale>

  //  24,24,  96,-96, 24,24, -72,72, -72,-72, 24,-24, 96,96, 24,-24, -72,-72, -72,72
  move(shieldvec[18], shieldvec[0]); /* Should move the starting point into the array... */
     852:	0f b6 05 00 00 00 00 	movzbl 0x0(%rip),%eax        # 859 <draw_shields+0x48>
     859:	0f be d0             	movsbl %al,%edx
     85c:	0f b6 05 00 00 00 00 	movzbl 0x0(%rip),%eax        # 863 <draw_shields+0x52>
     863:	0f be c0             	movsbl %al,%eax
     866:	89 d6                	mov    %edx,%esi
     868:	89 c7                	mov    %eax,%edi
     86a:	e8 b0 f7 ff ff       	callq  1f <move>
  for (i = 0; i < 10; i++) {         /* DRAW THE VECTOR */
     86f:	66 c7 45 fc 00 00    	movw   $0x0,-0x4(%rbp)
     875:	eb 34                	jmp    8ab <draw_shields+0x9a>
    y1 = (*ptr++); x1 = (*ptr++);
     877:	48 8b 45 f0          	mov    -0x10(%rbp),%rax
     87b:	0f b6 00             	movzbl (%rax),%eax
     87e:	88 45 fe             	mov    %al,-0x2(%rbp)
     881:	48 83 45 f0 01       	addq   $0x1,-0x10(%rbp)
     886:	48 8b 45 f0          	mov    -0x10(%rbp),%rax
     88a:	0f b6 00             	movzbl (%rax),%eax
     88d:	88 45 ff             	mov    %al,-0x1(%rbp)
     890:	48 83 45 f0 01       	addq   $0x1,-0x10(%rbp)
    line(y1, x1);                    // Swapped x for y because of portrait mode Vectrex display
     895:	0f be 55 ff          	movsbl -0x1(%rbp),%edx
     899:	0f be 45 fe          	movsbl -0x2(%rbp),%eax
     89d:	89 d6                	mov    %edx,%esi
     89f:	89 c7                	mov    %eax,%edi
     8a1:	e8 a9 f7 ff ff       	callq  4f <line>

  position_and_scale(0, 0, scale);

  //  24,24,  96,-96, 24,24, -72,72, -72,-72, 24,-24, 96,96, 24,-24, -72,-72, -72,72
  move(shieldvec[18], shieldvec[0]); /* Should move the starting point into the array... */
  for (i = 0; i < 10; i++) {         /* DRAW THE VECTOR */
     8a6:	66 83 45 fc 01       	addw   $0x1,-0x4(%rbp)
     8ab:	66 83 7d fc 09       	cmpw   $0x9,-0x4(%rbp)
     8b0:	7e c5                	jle    877 <draw_shields+0x66>
    y1 = (*ptr++); x1 = (*ptr++);
    line(y1, x1);                    // Swapped x for y because of portrait mode Vectrex display
  }
}
     8b2:	c9                   	leaveq 
     8b3:	c3                   	retq   

00000000000008b4 <Draw_crosshair>:

static inline void Draw_crosshair(signed8 absx, signed8 absy)
{
     8b4:	55                   	push   %rbp
     8b5:	48 89 e5             	mov    %rsp,%rbp
     8b8:	48 83 ec 10          	sub    $0x10,%rsp
     8bc:	89 fa                	mov    %edi,%edx
     8be:	89 f0                	mov    %esi,%eax
     8c0:	88 55 fc             	mov    %dl,-0x4(%rbp)
     8c3:	88 45 f8             	mov    %al,-0x8(%rbp)
  debugstr("Draw_crosshair");
     8c6:	b8 00 00 00 00       	mov    $0x0,%eax
     8cb:	be 00 00 00 00       	mov    $0x0,%esi
     8d0:	48 89 c7             	mov    %rax,%rdi
     8d3:	b8 00 00 00 00       	mov    $0x0,%eax
     8d8:	e8 00 00 00 00       	callq  8dd <Draw_crosshair+0x29>

  position_and_scale(absx, absy, 0x18);
     8dd:	0f be 4d f8          	movsbl -0x8(%rbp),%ecx
     8e1:	0f be 45 fc          	movsbl -0x4(%rbp),%eax
     8e5:	ba 18 00 00 00       	mov    $0x18,%edx
     8ea:	89 ce                	mov    %ecx,%esi
     8ec:	89 c7                	mov    %eax,%edi
     8ee:	e8 99 fe ff ff       	callq  78c <position_and_scale>
  displaylist(crosshair);
     8f3:	b8 00 00 00 00       	mov    $0x0,%eax
     8f8:	be 00 00 00 00       	mov    $0x0,%esi
     8fd:	48 89 c7             	mov    %rax,%rdi
     900:	b8 00 00 00 00       	mov    $0x0,%eax
     905:	e8 00 00 00 00       	callq  90a <Draw_crosshair+0x56>
}
     90a:	c9                   	leaveq 
     90b:	c3                   	retq   

000000000000090c <sinsymmetry>:
static signed16 shieldsegment;
static signed16 shieldsubticksleft;
#endif

static inline fp2_14 sinsymmetry(unsigned8 angle128)
{
     90c:	55                   	push   %rbp
     90d:	48 89 e5             	mov    %rsp,%rbp
     910:	89 f8                	mov    %edi,%eax
     912:	88 45 fc             	mov    %al,-0x4(%rbp)
  // '>', not '>=', is a special case for sin(x)=1.0
  if (angle128 > 64U) return sine[128-angle128]; else return sine[angle128];
     915:	80 7d fc 40          	cmpb   $0x40,-0x4(%rbp)
     919:	76 1b                	jbe    936 <sinsymmetry+0x2a>
     91b:	0f b6 45 fc          	movzbl -0x4(%rbp),%eax
     91f:	ba 80 00 00 00       	mov    $0x80,%edx
     924:	89 d1                	mov    %edx,%ecx
     926:	29 c1                	sub    %eax,%ecx
     928:	89 c8                	mov    %ecx,%eax
     92a:	48 98                	cltq   
     92c:	0f b7 84 00 00 00 00 	movzwl 0x0(%rax,%rax,1),%eax
     933:	00 
     934:	eb 0e                	jmp    944 <sinsymmetry+0x38>
     936:	0f b6 45 fc          	movzbl -0x4(%rbp),%eax
     93a:	48 98                	cltq   
     93c:	0f b7 84 00 00 00 00 	movzwl 0x0(%rax,%rax,1),%eax
     943:	00 
}
     944:	5d                   	pop    %rbp
     945:	c3                   	retq   

0000000000000946 <fp2_14_sin>:

static inline fp2_14 fp2_14_sin(signed16 angle256)
{
     946:	55                   	push   %rbp
     947:	48 89 e5             	mov    %rsp,%rbp
     94a:	48 83 ec 08          	sub    $0x8,%rsp
     94e:	89 f8                	mov    %edi,%eax
     950:	66 89 45 fc          	mov    %ax,-0x4(%rbp)
  if ((unsigned8)angle256 >= 128U) return -sinsymmetry((unsigned8)(angle256-128)&127); else return sinsymmetry((unsigned8)angle256&127);
     954:	0f b7 45 fc          	movzwl -0x4(%rbp),%eax
     958:	84 c0                	test   %al,%al
     95a:	79 15                	jns    971 <fp2_14_sin+0x2b>
     95c:	0f b7 45 fc          	movzwl -0x4(%rbp),%eax
     960:	0f b6 c0             	movzbl %al,%eax
     963:	83 e0 7f             	and    $0x7f,%eax
     966:	89 c7                	mov    %eax,%edi
     968:	e8 9f ff ff ff       	callq  90c <sinsymmetry>
     96d:	f7 d8                	neg    %eax
     96f:	eb 11                	jmp    982 <fp2_14_sin+0x3c>
     971:	0f b7 45 fc          	movzwl -0x4(%rbp),%eax
     975:	0f b6 c0             	movzbl %al,%eax
     978:	83 e0 7f             	and    $0x7f,%eax
     97b:	89 c7                	mov    %eax,%edi
     97d:	e8 8a ff ff ff       	callq  90c <sinsymmetry>
}
     982:	c9                   	leaveq 
     983:	c3                   	retq   

0000000000000984 <fp2_14_cos>:

static inline fp2_14 fp2_14_cos(signed16 angle256)
{
     984:	55                   	push   %rbp
     985:	48 89 e5             	mov    %rsp,%rbp
     988:	48 83 ec 08          	sub    $0x8,%rsp
     98c:	89 f8                	mov    %edi,%eax
     98e:	66 89 45 fc          	mov    %ax,-0x4(%rbp)
  return fp2_14_sin(angle256+64); // implicit &255 in these unsigned8 parameters
     992:	0f b7 45 fc          	movzwl -0x4(%rbp),%eax
     996:	83 c0 40             	add    $0x40,%eax
     999:	98                   	cwtl   
     99a:	89 c7                	mov    %eax,%edi
     99c:	e8 a5 ff ff ff       	callq  946 <fp2_14_sin>
}
     9a1:	c9                   	leaveq 
     9a2:	c3                   	retq   

00000000000009a3 <drawtgintro>:

// The revolving intro placard...

static void drawtgintro(unsigned8 scale, unsigned8 bright) {
     9a3:	55                   	push   %rbp
     9a4:	48 89 e5             	mov    %rsp,%rbp
     9a7:	48 83 ec 10          	sub    $0x10,%rsp
     9ab:	89 fa                	mov    %edi,%edx
     9ad:	89 f0                	mov    %esi,%eax
     9af:	88 55 fc             	mov    %dl,-0x4(%rbp)
     9b2:	88 45 f8             	mov    %al,-0x8(%rbp)
  position_and_scale_and_intensity(0,0, (unsigned8)((signed16)scale*(signed16)2/(signed16)5), bright);
     9b5:	0f b6 75 f8          	movzbl -0x8(%rbp),%esi
     9b9:	0f b6 45 fc          	movzbl -0x4(%rbp),%eax
     9bd:	8d 0c 00             	lea    (%rax,%rax,1),%ecx
     9c0:	ba 67 66 66 66       	mov    $0x66666667,%edx
     9c5:	89 c8                	mov    %ecx,%eax
     9c7:	f7 ea                	imul   %edx
     9c9:	d1 fa                	sar    %edx
     9cb:	89 c8                	mov    %ecx,%eax
     9cd:	c1 f8 1f             	sar    $0x1f,%eax
     9d0:	89 d1                	mov    %edx,%ecx
     9d2:	29 c1                	sub    %eax,%ecx
     9d4:	89 c8                	mov    %ecx,%eax
     9d6:	0f b6 c0             	movzbl %al,%eax
     9d9:	89 f1                	mov    %esi,%ecx
     9db:	89 c2                	mov    %eax,%edx
     9dd:	be 00 00 00 00       	mov    $0x0,%esi
     9e2:	bf 00 00 00 00       	mov    $0x0,%edi
     9e7:	e8 e7 fd ff ff       	callq  7d3 <position_and_scale_and_intensity>
  displaylist((signed8 *)placard[((unsigned8)intro_rot+128)&255]);
     9ec:	b8 00 00 00 00       	mov    $0x0,%eax
     9f1:	be 00 00 00 00       	mov    $0x0,%esi
     9f6:	48 89 c7             	mov    %rax,%rdi
     9f9:	b8 00 00 00 00       	mov    $0x0,%eax
     9fe:	e8 00 00 00 00       	callq  a03 <drawtgintro+0x60>
}
     a03:	c9                   	leaveq 
     a04:	c3                   	retq   

0000000000000a05 <show_digit>:

static inline void show_digit(signed8 digit)
{
     a05:	55                   	push   %rbp
     a06:	48 89 e5             	mov    %rsp,%rbp
     a09:	48 83 ec 10          	sub    $0x10,%rsp
     a0d:	89 f8                	mov    %edi,%eax
     a0f:	88 45 fc             	mov    %al,-0x4(%rbp)
  displaylist(digitlist[(int)digit]);
     a12:	b8 00 00 00 00       	mov    $0x0,%eax
     a17:	be 00 00 00 00       	mov    $0x0,%esi
     a1c:	48 89 c7             	mov    %rax,%rdi
     a1f:	b8 00 00 00 00       	mov    $0x0,%eax
     a24:	e8 00 00 00 00       	callq  a29 <show_digit+0x24>
    case 7: SHOW_N7(); break;
    case 8: SHOW_N8(); break;
    case 9: SHOW_N9(); break;
  }
#endif
}
     a29:	c9                   	leaveq 
     a2a:	c3                   	retq   

0000000000000a2b <SHOW_NUM>:

static void SHOW_NUM(signed16 num, signed8 absx, signed8 absy, unsigned16 scale) { // left-aligned
     a2b:	55                   	push   %rbp
     a2c:	48 89 e5             	mov    %rsp,%rbp
     a2f:	48 83 ec 20          	sub    $0x20,%rsp
     a33:	89 c8                	mov    %ecx,%eax
     a35:	66 89 7d ec          	mov    %di,-0x14(%rbp)
     a39:	40 88 75 e8          	mov    %sil,-0x18(%rbp)
     a3d:	88 55 e4             	mov    %dl,-0x1c(%rbp)
     a40:	66 89 45 e0          	mov    %ax,-0x20(%rbp)
  signed8 digit, zeroes;

  // If scale is 0, this draws a number starting at the current position, which is at the origin
  // of the previous number offset by the number width.

  if (scale) position_and_scale(absx, absy, 0x20);
     a44:	66 83 7d e0 00       	cmpw   $0x0,-0x20(%rbp)
     a49:	74 16                	je     a61 <SHOW_NUM+0x36>
     a4b:	0f be 4d e4          	movsbl -0x1c(%rbp),%ecx
     a4f:	0f be 45 e8          	movsbl -0x18(%rbp),%eax
     a53:	ba 20 00 00 00       	mov    $0x20,%edx
     a58:	89 ce                	mov    %ecx,%esi
     a5a:	89 c7                	mov    %eax,%edi
     a5c:	e8 2b fd ff ff       	callq  78c <position_and_scale>

  // This replaces code that used divide by 10 and modulo 10.  Much faster.

  // handles full 16 bit range of -32768:32767  -  Uses negative numbers to avoid the issue of negating -32768

  if (num >= 0) num = -num; /* else MINUS(); */  // TO DO: add a font character for '-'.
     a61:	66 83 7d ec 00       	cmpw   $0x0,-0x14(%rbp)
     a66:	78 0a                	js     a72 <SHOW_NUM+0x47>
     a68:	0f b7 45 ec          	movzwl -0x14(%rbp),%eax
     a6c:	f7 d8                	neg    %eax
     a6e:	66 89 45 ec          	mov    %ax,-0x14(%rbp)
  digit = 0;
     a72:	c6 45 fe 00          	movb   $0x0,-0x2(%rbp)
  zeroes = 1; // CLRing is shorter
     a76:	c6 45 ff 01          	movb   $0x1,-0x1(%rbp)
  // max 11 add/subtracts...
  if (num <= -20000) { num += 20000; digit += 2; zeroes = 0; }
     a7a:	66 81 7d ec e1 b1    	cmpw   $0xb1e1,-0x14(%rbp)
     a80:	7d 1a                	jge    a9c <SHOW_NUM+0x71>
     a82:	0f b7 45 ec          	movzwl -0x14(%rbp),%eax
     a86:	66 05 20 4e          	add    $0x4e20,%ax
     a8a:	66 89 45 ec          	mov    %ax,-0x14(%rbp)
     a8e:	0f b6 45 fe          	movzbl -0x2(%rbp),%eax
     a92:	83 c0 02             	add    $0x2,%eax
     a95:	88 45 fe             	mov    %al,-0x2(%rbp)
     a98:	c6 45 ff 00          	movb   $0x0,-0x1(%rbp)
  if (num <= -10000) { num += 10000; digit += 1; zeroes = 0; }
     a9c:	66 81 7d ec f1 d8    	cmpw   $0xd8f1,-0x14(%rbp)
     aa2:	7d 1a                	jge    abe <SHOW_NUM+0x93>
     aa4:	0f b7 45 ec          	movzwl -0x14(%rbp),%eax
     aa8:	66 05 10 27          	add    $0x2710,%ax
     aac:	66 89 45 ec          	mov    %ax,-0x14(%rbp)
     ab0:	0f b6 45 fe          	movzbl -0x2(%rbp),%eax
     ab4:	83 c0 01             	add    $0x1,%eax
     ab7:	88 45 fe             	mov    %al,-0x2(%rbp)
     aba:	c6 45 ff 00          	movb   $0x0,-0x1(%rbp)
  if (!zeroes) show_digit(digit);
     abe:	80 7d ff 00          	cmpb   $0x0,-0x1(%rbp)
     ac2:	75 0b                	jne    acf <SHOW_NUM+0xa4>
     ac4:	0f be 45 fe          	movsbl -0x2(%rbp),%eax
     ac8:	89 c7                	mov    %eax,%edi
     aca:	e8 36 ff ff ff       	callq  a05 <show_digit>
  digit = 0;
     acf:	c6 45 fe 00          	movb   $0x0,-0x2(%rbp)
  if (num <= -8000) { num += 8000; digit += 8; zeroes = 0; } else if (num <= -4000) { num += 4000; digit += 4; zeroes = 0; }
     ad3:	66 81 7d ec c1 e0    	cmpw   $0xe0c1,-0x14(%rbp)
     ad9:	7d 1c                	jge    af7 <SHOW_NUM+0xcc>
     adb:	0f b7 45 ec          	movzwl -0x14(%rbp),%eax
     adf:	66 05 40 1f          	add    $0x1f40,%ax
     ae3:	66 89 45 ec          	mov    %ax,-0x14(%rbp)
     ae7:	0f b6 45 fe          	movzbl -0x2(%rbp),%eax
     aeb:	83 c0 08             	add    $0x8,%eax
     aee:	88 45 fe             	mov    %al,-0x2(%rbp)
     af1:	c6 45 ff 00          	movb   $0x0,-0x1(%rbp)
     af5:	eb 22                	jmp    b19 <SHOW_NUM+0xee>
     af7:	66 81 7d ec 61 f0    	cmpw   $0xf061,-0x14(%rbp)
     afd:	7d 1a                	jge    b19 <SHOW_NUM+0xee>
     aff:	0f b7 45 ec          	movzwl -0x14(%rbp),%eax
     b03:	66 05 a0 0f          	add    $0xfa0,%ax
     b07:	66 89 45 ec          	mov    %ax,-0x14(%rbp)
     b0b:	0f b6 45 fe          	movzbl -0x2(%rbp),%eax
     b0f:	83 c0 04             	add    $0x4,%eax
     b12:	88 45 fe             	mov    %al,-0x2(%rbp)
     b15:	c6 45 ff 00          	movb   $0x0,-0x1(%rbp)
  if (num <= -2000) { num += 2000; digit += 2; zeroes = 0; }
     b19:	66 81 7d ec 31 f8    	cmpw   $0xf831,-0x14(%rbp)
     b1f:	7d 1a                	jge    b3b <SHOW_NUM+0x110>
     b21:	0f b7 45 ec          	movzwl -0x14(%rbp),%eax
     b25:	66 05 d0 07          	add    $0x7d0,%ax
     b29:	66 89 45 ec          	mov    %ax,-0x14(%rbp)
     b2d:	0f b6 45 fe          	movzbl -0x2(%rbp),%eax
     b31:	83 c0 02             	add    $0x2,%eax
     b34:	88 45 fe             	mov    %al,-0x2(%rbp)
     b37:	c6 45 ff 00          	movb   $0x0,-0x1(%rbp)
  if (num <= -1000) { num += 1000; digit += 1; zeroes = 0; }
     b3b:	66 81 7d ec 19 fc    	cmpw   $0xfc19,-0x14(%rbp)
     b41:	7d 1a                	jge    b5d <SHOW_NUM+0x132>
     b43:	0f b7 45 ec          	movzwl -0x14(%rbp),%eax
     b47:	66 05 e8 03          	add    $0x3e8,%ax
     b4b:	66 89 45 ec          	mov    %ax,-0x14(%rbp)
     b4f:	0f b6 45 fe          	movzbl -0x2(%rbp),%eax
     b53:	83 c0 01             	add    $0x1,%eax
     b56:	88 45 fe             	mov    %al,-0x2(%rbp)
     b59:	c6 45 ff 00          	movb   $0x0,-0x1(%rbp)
  if (!zeroes) show_digit(digit);
     b5d:	80 7d ff 00          	cmpb   $0x0,-0x1(%rbp)
     b61:	75 0b                	jne    b6e <SHOW_NUM+0x143>
     b63:	0f be 45 fe          	movsbl -0x2(%rbp),%eax
     b67:	89 c7                	mov    %eax,%edi
     b69:	e8 97 fe ff ff       	callq  a05 <show_digit>
  digit = 0;
     b6e:	c6 45 fe 00          	movb   $0x0,-0x2(%rbp)
  if (num <= -800) { num += 800; digit += 8; zeroes = 0; } else if (num <= -400) { num += 400; digit += 4; zeroes = 0; }
     b72:	66 81 7d ec e1 fc    	cmpw   $0xfce1,-0x14(%rbp)
     b78:	7d 1c                	jge    b96 <SHOW_NUM+0x16b>
     b7a:	0f b7 45 ec          	movzwl -0x14(%rbp),%eax
     b7e:	66 05 20 03          	add    $0x320,%ax
     b82:	66 89 45 ec          	mov    %ax,-0x14(%rbp)
     b86:	0f b6 45 fe          	movzbl -0x2(%rbp),%eax
     b8a:	83 c0 08             	add    $0x8,%eax
     b8d:	88 45 fe             	mov    %al,-0x2(%rbp)
     b90:	c6 45 ff 00          	movb   $0x0,-0x1(%rbp)
     b94:	eb 22                	jmp    bb8 <SHOW_NUM+0x18d>
     b96:	66 81 7d ec 71 fe    	cmpw   $0xfe71,-0x14(%rbp)
     b9c:	7d 1a                	jge    bb8 <SHOW_NUM+0x18d>
     b9e:	0f b7 45 ec          	movzwl -0x14(%rbp),%eax
     ba2:	66 05 90 01          	add    $0x190,%ax
     ba6:	66 89 45 ec          	mov    %ax,-0x14(%rbp)
     baa:	0f b6 45 fe          	movzbl -0x2(%rbp),%eax
     bae:	83 c0 04             	add    $0x4,%eax
     bb1:	88 45 fe             	mov    %al,-0x2(%rbp)
     bb4:	c6 45 ff 00          	movb   $0x0,-0x1(%rbp)
  if (num <= -200) { num += 200; digit += 2; zeroes = 0; }
     bb8:	66 81 7d ec 39 ff    	cmpw   $0xff39,-0x14(%rbp)
     bbe:	7d 1a                	jge    bda <SHOW_NUM+0x1af>
     bc0:	0f b7 45 ec          	movzwl -0x14(%rbp),%eax
     bc4:	66 05 c8 00          	add    $0xc8,%ax
     bc8:	66 89 45 ec          	mov    %ax,-0x14(%rbp)
     bcc:	0f b6 45 fe          	movzbl -0x2(%rbp),%eax
     bd0:	83 c0 02             	add    $0x2,%eax
     bd3:	88 45 fe             	mov    %al,-0x2(%rbp)
     bd6:	c6 45 ff 00          	movb   $0x0,-0x1(%rbp)
  if (num <= -100) { num += 100; digit += 1; zeroes = 0; }
     bda:	66 83 7d ec 9d       	cmpw   $0xff9d,-0x14(%rbp)
     bdf:	7d 19                	jge    bfa <SHOW_NUM+0x1cf>
     be1:	0f b7 45 ec          	movzwl -0x14(%rbp),%eax
     be5:	83 c0 64             	add    $0x64,%eax
     be8:	66 89 45 ec          	mov    %ax,-0x14(%rbp)
     bec:	0f b6 45 fe          	movzbl -0x2(%rbp),%eax
     bf0:	83 c0 01             	add    $0x1,%eax
     bf3:	88 45 fe             	mov    %al,-0x2(%rbp)
     bf6:	c6 45 ff 00          	movb   $0x0,-0x1(%rbp)
  if (!zeroes) show_digit(digit);
     bfa:	80 7d ff 00          	cmpb   $0x0,-0x1(%rbp)
     bfe:	75 0b                	jne    c0b <SHOW_NUM+0x1e0>
     c00:	0f be 45 fe          	movsbl -0x2(%rbp),%eax
     c04:	89 c7                	mov    %eax,%edi
     c06:	e8 fa fd ff ff       	callq  a05 <show_digit>
  digit = 0;
     c0b:	c6 45 fe 00          	movb   $0x0,-0x2(%rbp)
  if (num <= -80) { num += 80; digit += 8; zeroes = 0; } else if (num <= -40) { num += 40; digit += 4; zeroes = 0; }
     c0f:	66 83 7d ec b1       	cmpw   $0xffb1,-0x14(%rbp)
     c14:	7d 1b                	jge    c31 <SHOW_NUM+0x206>
     c16:	0f b7 45 ec          	movzwl -0x14(%rbp),%eax
     c1a:	83 c0 50             	add    $0x50,%eax
     c1d:	66 89 45 ec          	mov    %ax,-0x14(%rbp)
     c21:	0f b6 45 fe          	movzbl -0x2(%rbp),%eax
     c25:	83 c0 08             	add    $0x8,%eax
     c28:	88 45 fe             	mov    %al,-0x2(%rbp)
     c2b:	c6 45 ff 00          	movb   $0x0,-0x1(%rbp)
     c2f:	eb 20                	jmp    c51 <SHOW_NUM+0x226>
     c31:	66 83 7d ec d9       	cmpw   $0xffd9,-0x14(%rbp)
     c36:	7d 19                	jge    c51 <SHOW_NUM+0x226>
     c38:	0f b7 45 ec          	movzwl -0x14(%rbp),%eax
     c3c:	83 c0 28             	add    $0x28,%eax
     c3f:	66 89 45 ec          	mov    %ax,-0x14(%rbp)
     c43:	0f b6 45 fe          	movzbl -0x2(%rbp),%eax
     c47:	83 c0 04             	add    $0x4,%eax
     c4a:	88 45 fe             	mov    %al,-0x2(%rbp)
     c4d:	c6 45 ff 00          	movb   $0x0,-0x1(%rbp)
  if (num <= -20) { num += 20; digit += 2; zeroes = 0; }
     c51:	66 83 7d ec ed       	cmpw   $0xffed,-0x14(%rbp)
     c56:	7d 19                	jge    c71 <SHOW_NUM+0x246>
     c58:	0f b7 45 ec          	movzwl -0x14(%rbp),%eax
     c5c:	83 c0 14             	add    $0x14,%eax
     c5f:	66 89 45 ec          	mov    %ax,-0x14(%rbp)
     c63:	0f b6 45 fe          	movzbl -0x2(%rbp),%eax
     c67:	83 c0 02             	add    $0x2,%eax
     c6a:	88 45 fe             	mov    %al,-0x2(%rbp)
     c6d:	c6 45 ff 00          	movb   $0x0,-0x1(%rbp)
  if (num <= -10) { num += 10; digit += 1; zeroes = 0; }
     c71:	66 83 7d ec f7       	cmpw   $0xfff7,-0x14(%rbp)
     c76:	7d 19                	jge    c91 <SHOW_NUM+0x266>
     c78:	0f b7 45 ec          	movzwl -0x14(%rbp),%eax
     c7c:	83 c0 0a             	add    $0xa,%eax
     c7f:	66 89 45 ec          	mov    %ax,-0x14(%rbp)
     c83:	0f b6 45 fe          	movzbl -0x2(%rbp),%eax
     c87:	83 c0 01             	add    $0x1,%eax
     c8a:	88 45 fe             	mov    %al,-0x2(%rbp)
     c8d:	c6 45 ff 00          	movb   $0x0,-0x1(%rbp)
  if (!zeroes) show_digit(digit);
     c91:	80 7d ff 00          	cmpb   $0x0,-0x1(%rbp)
     c95:	75 0b                	jne    ca2 <SHOW_NUM+0x277>
     c97:	0f be 45 fe          	movsbl -0x2(%rbp),%eax
     c9b:	89 c7                	mov    %eax,%edi
     c9d:	e8 63 fd ff ff       	callq  a05 <show_digit>
  show_digit((signed8)-num);
     ca2:	0f b7 45 ec          	movzwl -0x14(%rbp),%eax
     ca6:	f7 d8                	neg    %eax
     ca8:	0f be c0             	movsbl %al,%eax
     cab:	89 c7                	mov    %eax,%edi
     cad:	e8 53 fd ff ff       	callq  a05 <show_digit>
}
     cb2:	c9                   	leaveq 
     cb3:	c3                   	retq   

0000000000000cb4 <Draw_lastscore>:

static void Draw_lastscore(void)
{
     cb4:	55                   	push   %rbp
     cb5:	48 89 e5             	mov    %rsp,%rbp
  debugstr("Draw_lastscore");
     cb8:	b8 00 00 00 00       	mov    $0x0,%eax
     cbd:	be 00 00 00 00       	mov    $0x0,%esi
     cc2:	48 89 c7             	mov    %rax,%rdi
     cc5:	b8 00 00 00 00       	mov    $0x0,%eax
     cca:	e8 00 00 00 00       	callq  ccf <Draw_lastscore+0x1b>
  position_and_scale(-100,127,32);
     ccf:	ba 20 00 00 00       	mov    $0x20,%edx
     cd4:	be 7f 00 00 00       	mov    $0x7f,%esi
     cd9:	bf 9c ff ff ff       	mov    $0xffffff9c,%edi
     cde:	e8 a9 fa ff ff       	callq  78c <position_and_scale>
  SHOW_SCORE();
     ce3:	e8 15 f4 ff ff       	callq  fd <SHOW_SCORE>
  SHOW_NUM(LastScore, -98,113, 256);
     ce8:	0f b7 05 00 00 00 00 	movzwl 0x0(%rip),%eax        # cef <Draw_lastscore+0x3b>
     cef:	98                   	cwtl   
     cf0:	b9 00 01 00 00       	mov    $0x100,%ecx
     cf5:	ba 71 00 00 00       	mov    $0x71,%edx
     cfa:	be 9e ff ff ff       	mov    $0xffffff9e,%esi
     cff:	89 c7                	mov    %eax,%edi
     d01:	e8 25 fd ff ff       	callq  a2b <SHOW_NUM>
}
     d06:	5d                   	pop    %rbp
     d07:	c3                   	retq   

0000000000000d08 <Draw_highscore>:

static void Draw_highscore(void)
{
     d08:	55                   	push   %rbp
     d09:	48 89 e5             	mov    %rsp,%rbp
  debugstr("Draw_highscore");
     d0c:	b8 00 00 00 00       	mov    $0x0,%eax
     d11:	be 00 00 00 00       	mov    $0x0,%esi
     d16:	48 89 c7             	mov    %rax,%rdi
     d19:	b8 00 00 00 00       	mov    $0x0,%eax
     d1e:	e8 00 00 00 00       	callq  d23 <Draw_highscore+0x1b>
  position_and_scale(40,127,32);
     d23:	ba 20 00 00 00       	mov    $0x20,%edx
     d28:	be 7f 00 00 00       	mov    $0x7f,%esi
     d2d:	bf 28 00 00 00       	mov    $0x28,%edi
     d32:	e8 55 fa ff ff       	callq  78c <position_and_scale>
  SHOW_HIGH_SCORE();
     d37:	e8 de f3 ff ff       	callq  11a <SHOW_HIGH_SCORE>
  SHOW_NUM(HighScore, 52,113, 256);
     d3c:	0f b7 05 00 00 00 00 	movzwl 0x0(%rip),%eax        # d43 <Draw_highscore+0x3b>
     d43:	98                   	cwtl   
     d44:	b9 00 01 00 00       	mov    $0x100,%ecx
     d49:	ba 71 00 00 00       	mov    $0x71,%edx
     d4e:	be 34 00 00 00       	mov    $0x34,%esi
     d53:	89 c7                	mov    %eax,%edi
     d55:	e8 d1 fc ff ff       	callq  a2b <SHOW_NUM>
}
     d5a:	5d                   	pop    %rbp
     d5b:	c3                   	retq   

0000000000000d5c <Draw_insertcoin>:

static void Draw_insertcoin(void) // Not yet used
{
     d5c:	55                   	push   %rbp
     d5d:	48 89 e5             	mov    %rsp,%rbp
  debugstr("Draw_insertcoin");
     d60:	b8 00 00 00 00       	mov    $0x0,%eax
     d65:	be 00 00 00 00       	mov    $0x0,%esi
     d6a:	48 89 c7             	mov    %rax,%rdi
     d6d:	b8 00 00 00 00       	mov    $0x0,%eax
     d72:	e8 00 00 00 00       	callq  d77 <Draw_insertcoin+0x1b>
  intensity(global_flashing_intensity<<1);
     d77:	0f b6 05 00 00 00 00 	movzbl 0x0(%rip),%eax        # d7e <Draw_insertcoin+0x22>
     d7e:	0f b6 c0             	movzbl %al,%eax
     d81:	01 c0                	add    %eax,%eax
     d83:	0f be c0             	movsbl %al,%eax
     d86:	89 c7                	mov    %eax,%edi
     d88:	e8 29 f3 ff ff       	callq  b6 <intensity>
  position_and_scale(-40,-80,32);
     d8d:	ba 20 00 00 00       	mov    $0x20,%edx
     d92:	be b0 ff ff ff       	mov    $0xffffffb0,%esi
     d97:	bf d8 ff ff ff       	mov    $0xffffffd8,%edi
     d9c:	e8 eb f9 ff ff       	callq  78c <position_and_scale>
  SHOW_INSERT_COIN();
     da1:	e8 ae f3 ff ff       	callq  154 <SHOW_INSERT_COIN>
}
     da6:	5d                   	pop    %rbp
     da7:	c3                   	retq   

0000000000000da8 <Draw_start>:

static void Draw_start(void)
{
     da8:	55                   	push   %rbp
     da9:	48 89 e5             	mov    %rsp,%rbp
  debugstr("Draw_start");
     dac:	b8 00 00 00 00       	mov    $0x0,%eax
     db1:	be 00 00 00 00       	mov    $0x0,%esi
     db6:	48 89 c7             	mov    %rax,%rdi
     db9:	b8 00 00 00 00       	mov    $0x0,%eax
     dbe:	e8 00 00 00 00       	callq  dc3 <Draw_start+0x1b>
  intensity(global_flashing_intensity<<1);
     dc3:	0f b6 05 00 00 00 00 	movzbl 0x0(%rip),%eax        # dca <Draw_start+0x22>
     dca:	0f b6 c0             	movzbl %al,%eax
     dcd:	01 c0                	add    %eax,%eax
     dcf:	0f be c0             	movsbl %al,%eax
     dd2:	89 c7                	mov    %eax,%edi
     dd4:	e8 dd f2 ff ff       	callq  b6 <intensity>
  position_and_scale(-39,-80,32);
     dd9:	ba 20 00 00 00       	mov    $0x20,%edx
     dde:	be b0 ff ff ff       	mov    $0xffffffb0,%esi
     de3:	bf d9 ff ff ff       	mov    $0xffffffd9,%edi
     de8:	e8 9f f9 ff ff       	callq  78c <position_and_scale>
  SHOW_PRESS_START();
     ded:	e8 7f f3 ff ff       	callq  171 <SHOW_PRESS_START>
}
     df2:	5d                   	pop    %rbp
     df3:	c3                   	retq   

0000000000000df4 <Draw_credits>:

static void Draw_credits(void)
{
     df4:	55                   	push   %rbp
     df5:	48 89 e5             	mov    %rsp,%rbp
  debugstr("Draw_credits");
     df8:	b8 00 00 00 00       	mov    $0x0,%eax
     dfd:	be 00 00 00 00       	mov    $0x0,%esi
     e02:	48 89 c7             	mov    %rax,%rdi
     e05:	b8 00 00 00 00       	mov    $0x0,%eax
     e0a:	e8 00 00 00 00       	callq  e0f <Draw_credits+0x1b>
  position_and_scale(-46,-30,48);
     e0f:	ba 30 00 00 00       	mov    $0x30,%edx
     e14:	be e2 ff ff ff       	mov    $0xffffffe2,%esi
     e19:	bf d2 ff ff ff       	mov    $0xffffffd2,%edi
     e1e:	e8 69 f9 ff ff       	callq  78c <position_and_scale>
  SHOW_CREDITS();
     e23:	e8 0f f3 ff ff       	callq  137 <SHOW_CREDITS>
  if (Credits > 9U) {
     e28:	0f b6 05 00 00 00 00 	movzbl 0x0(%rip),%eax        # e2f <Draw_credits+0x3b>
     e2f:	3c 09                	cmp    $0x9,%al
     e31:	76 1b                	jbe    e4e <Draw_credits+0x5a>
    SHOW_NUM(9, 0,0,0); // display any more than 9 as 9. (This is what many arcade machines did in real life)
     e33:	b9 00 00 00 00       	mov    $0x0,%ecx
     e38:	ba 00 00 00 00       	mov    $0x0,%edx
     e3d:	be 00 00 00 00       	mov    $0x0,%esi
     e42:	bf 09 00 00 00       	mov    $0x9,%edi
     e47:	e8 df fb ff ff       	callq  a2b <SHOW_NUM>
     e4c:	eb 20                	jmp    e6e <Draw_credits+0x7a>
  } else {
    SHOW_NUM(Credits, 0,0,0);
     e4e:	0f b6 05 00 00 00 00 	movzbl 0x0(%rip),%eax        # e55 <Draw_credits+0x61>
     e55:	0f b6 c0             	movzbl %al,%eax
     e58:	b9 00 00 00 00       	mov    $0x0,%ecx
     e5d:	ba 00 00 00 00       	mov    $0x0,%edx
     e62:	be 00 00 00 00       	mov    $0x0,%esi
     e67:	89 c7                	mov    %eax,%edi
     e69:	e8 bd fb ff ff       	callq  a2b <SHOW_NUM>
  }
}
     e6e:	5d                   	pop    %rbp
     e6f:	c3                   	retq   

0000000000000e70 <Draw_ships_remaining>:

static void Draw_ships_remaining(void)
{
     e70:	55                   	push   %rbp
     e71:	48 89 e5             	mov    %rsp,%rbp
  SHOW_NUM(10, 90,120, 64);
     e74:	b9 40 00 00 00       	mov    $0x40,%ecx
     e79:	ba 78 00 00 00       	mov    $0x78,%edx
     e7e:	be 5a 00 00 00       	mov    $0x5a,%esi
     e83:	bf 0a 00 00 00       	mov    $0xa,%edi
     e88:	e8 9e fb ff ff       	callq  a2b <SHOW_NUM>
}
     e8d:	5d                   	pop    %rbp
     e8e:	c3                   	retq   

0000000000000e8f <Draw_shields_remaining>:

static void Draw_shields_remaining(void)
{
     e8f:	55                   	push   %rbp
     e90:	48 89 e5             	mov    %rsp,%rbp
  SHOW_NUM(80, -5,127, 128);
     e93:	b9 80 00 00 00       	mov    $0x80,%ecx
     e98:	ba 7f 00 00 00       	mov    $0x7f,%edx
     e9d:	be fb ff ff ff       	mov    $0xfffffffb,%esi
     ea2:	bf 50 00 00 00       	mov    $0x50,%edi
     ea7:	e8 7f fb ff ff       	callq  a2b <SHOW_NUM>
}
     eac:	5d                   	pop    %rbp
     ead:	c3                   	retq   

0000000000000eae <Draw_score>:

static void Draw_score(void)
{
     eae:	55                   	push   %rbp
     eaf:	48 89 e5             	mov    %rsp,%rbp
  SHOW_NUM(Score, -100,120, 64);
     eb2:	0f b7 05 00 00 00 00 	movzwl 0x0(%rip),%eax        # eb9 <Draw_score+0xb>
     eb9:	98                   	cwtl   
     eba:	b9 40 00 00 00       	mov    $0x40,%ecx
     ebf:	ba 78 00 00 00       	mov    $0x78,%edx
     ec4:	be 9c ff ff ff       	mov    $0xffffff9c,%esi
     ec9:	89 c7                	mov    %eax,%edi
     ecb:	e8 5b fb ff ff       	callq  a2b <SHOW_NUM>
}
     ed0:	5d                   	pop    %rbp
     ed1:	c3                   	retq   

0000000000000ed2 <follow_crosshair>:

static signed8 crosshair_x, crosshair_y;

void follow_crosshair(signed8 x, signed8 y)
{
     ed2:	55                   	push   %rbp
     ed3:	48 89 e5             	mov    %rsp,%rbp
     ed6:	48 83 ec 10          	sub    $0x10,%rsp
     eda:	89 fa                	mov    %edi,%edx
     edc:	89 f0                	mov    %esi,%eax
     ede:	88 55 fc             	mov    %dl,-0x4(%rbp)
     ee1:	88 45 f8             	mov    %al,-0x8(%rbp)
  crosshair_x += XJoy; crosshair_y += YJoy;
     ee4:	0f b6 05 00 00 00 00 	movzbl 0x0(%rip),%eax        # eeb <follow_crosshair+0x19>
     eeb:	89 c2                	mov    %eax,%edx
     eed:	0f b6 05 00 00 00 00 	movzbl 0x0(%rip),%eax        # ef4 <follow_crosshair+0x22>
     ef4:	01 d0                	add    %edx,%eax
     ef6:	88 05 00 00 00 00    	mov    %al,0x0(%rip)        # efc <follow_crosshair+0x2a>
     efc:	0f b6 05 00 00 00 00 	movzbl 0x0(%rip),%eax        # f03 <follow_crosshair+0x31>
     f03:	89 c2                	mov    %eax,%edx
     f05:	0f b6 05 00 00 00 00 	movzbl 0x0(%rip),%eax        # f0c <follow_crosshair+0x3a>
     f0c:	01 d0                	add    %edx,%eax
     f0e:	88 05 00 00 00 00    	mov    %al,0x0(%rip)        # f14 <follow_crosshair+0x42>
  Draw_crosshair(crosshair_x, crosshair_y);
     f14:	0f b6 05 00 00 00 00 	movzbl 0x0(%rip),%eax        # f1b <follow_crosshair+0x49>
     f1b:	0f be d0             	movsbl %al,%edx
     f1e:	0f b6 05 00 00 00 00 	movzbl 0x0(%rip),%eax        # f25 <follow_crosshair+0x53>
     f25:	0f be c0             	movsbl %al,%eax
     f28:	89 d6                	mov    %edx,%esi
     f2a:	89 c7                	mov    %eax,%edi
     f2c:	e8 83 f9 ff ff       	callq  8b4 <Draw_crosshair>
  (void)x; (void)y;
}
     f31:	c9                   	leaveq 
     f32:	c3                   	retq   

0000000000000f33 <next_frame>:

static void next_frame(void)
{
     f33:	55                   	push   %rbp
     f34:	48 89 e5             	mov    %rsp,%rbp
  // do things here that must be done on every frame, eg polling buttons/joystick
  debugstr("next_frame");
     f37:	b8 00 00 00 00       	mov    $0x0,%eax
     f3c:	be 00 00 00 00       	mov    $0x0,%esi
     f41:	48 89 c7             	mov    %rax,%rdi
     f44:	b8 00 00 00 00       	mov    $0x0,%eax
     f49:	e8 00 00 00 00       	callq  f4e <next_frame+0x1b>
  wait_retrace();
     f4e:	e8 ad f0 ff ff       	callq  0 <wait_retrace>
  poll_joystick();
     f53:	e8 85 f1 ff ff       	callq  dd <poll_joystick>
  if ((frame_number & 16) == 0) {
     f58:	0f b7 05 00 00 00 00 	movzwl 0x0(%rip),%eax        # f5f <next_frame+0x2c>
     f5f:	98                   	cwtl   
     f60:	83 e0 10             	and    $0x10,%eax
     f63:	85 c0                	test   %eax,%eax
     f65:	75 12                	jne    f79 <next_frame+0x46>
    global_flashing_intensity += 4; // 16 frames of getting brighter
     f67:	0f b6 05 00 00 00 00 	movzbl 0x0(%rip),%eax        # f6e <next_frame+0x3b>
     f6e:	83 c0 04             	add    $0x4,%eax
     f71:	88 05 00 00 00 00    	mov    %al,0x0(%rip)        # f77 <next_frame+0x44>
     f77:	eb 10                	jmp    f89 <next_frame+0x56>
  } else {
    global_flashing_intensity -= 4; // then 16 frames of getting darker
     f79:	0f b6 05 00 00 00 00 	movzbl 0x0(%rip),%eax        # f80 <next_frame+0x4d>
     f80:	83 e8 04             	sub    $0x4,%eax
     f83:	88 05 00 00 00 00    	mov    %al,0x0(%rip)        # f89 <next_frame+0x56>
  }
  frame_number++; // wraps.
     f89:	0f b7 05 00 00 00 00 	movzwl 0x0(%rip),%eax        # f90 <next_frame+0x5d>
     f90:	83 c0 01             	add    $0x1,%eax
     f93:	66 89 05 00 00 00 00 	mov    %ax,0x0(%rip)        # f9a <next_frame+0x67>
  //SHOW_NUM(Debug, -100,-100, 128);
}
     f9a:	5d                   	pop    %rbp
     f9b:	c3                   	retq   

0000000000000f9c <main>:

int main(void) { // cmoc doesn't allow argc, argv
     f9c:	55                   	push   %rbp
     f9d:	48 89 e5             	mov    %rsp,%rbp
     fa0:	53                   	push   %rbx
     fa1:	48 83 ec 18          	sub    $0x18,%rsp
  signed16 frames;
  unsigned8 placard_scale, placard_brightness;

  Debug = Score = HighScore = LastScore = rseed = frame_number =
   (signed16)(crosshair_x = crosshair_y = XJoy = YJoy = (signed8)(Credits = global_flashing_intensity = 0));
     fa5:	c6 05 00 00 00 00 00 	movb   $0x0,0x0(%rip)        # fac <main+0x10>
     fac:	0f b6 05 00 00 00 00 	movzbl 0x0(%rip),%eax        # fb3 <main+0x17>
     fb3:	88 05 00 00 00 00    	mov    %al,0x0(%rip)        # fb9 <main+0x1d>
     fb9:	0f b6 05 00 00 00 00 	movzbl 0x0(%rip),%eax        # fc0 <main+0x24>
     fc0:	88 05 00 00 00 00    	mov    %al,0x0(%rip)        # fc6 <main+0x2a>
     fc6:	0f b6 05 00 00 00 00 	movzbl 0x0(%rip),%eax        # fcd <main+0x31>
     fcd:	88 05 00 00 00 00    	mov    %al,0x0(%rip)        # fd3 <main+0x37>
     fd3:	0f b6 05 00 00 00 00 	movzbl 0x0(%rip),%eax        # fda <main+0x3e>
     fda:	88 05 00 00 00 00    	mov    %al,0x0(%rip)        # fe0 <main+0x44>
     fe0:	0f b6 05 00 00 00 00 	movzbl 0x0(%rip),%eax        # fe7 <main+0x4b>
     fe7:	88 05 00 00 00 00    	mov    %al,0x0(%rip)        # fed <main+0x51>
     fed:	0f b6 05 00 00 00 00 	movzbl 0x0(%rip),%eax        # ff4 <main+0x58>
     ff4:	66 98                	cbtw   

int main(void) { // cmoc doesn't allow argc, argv
  signed16 frames;
  unsigned8 placard_scale, placard_brightness;

  Debug = Score = HighScore = LastScore = rseed = frame_number =
     ff6:	66 89 05 00 00 00 00 	mov    %ax,0x0(%rip)        # ffd <main+0x61>
     ffd:	0f b7 05 00 00 00 00 	movzwl 0x0(%rip),%eax        # 1004 <main+0x68>
    1004:	66 89 05 00 00 00 00 	mov    %ax,0x0(%rip)        # 100b <main+0x6f>
    100b:	0f b7 05 00 00 00 00 	movzwl 0x0(%rip),%eax        # 1012 <main+0x76>
    1012:	66 89 05 00 00 00 00 	mov    %ax,0x0(%rip)        # 1019 <main+0x7d>
    1019:	0f b7 05 00 00 00 00 	movzwl 0x0(%rip),%eax        # 1020 <main+0x84>
    1020:	66 89 05 00 00 00 00 	mov    %ax,0x0(%rip)        # 1027 <main+0x8b>
    1027:	0f b7 05 00 00 00 00 	movzwl 0x0(%rip),%eax        # 102e <main+0x92>
    102e:	66 89 05 00 00 00 00 	mov    %ax,0x0(%rip)        # 1035 <main+0x99>
    1035:	0f b7 05 00 00 00 00 	movzwl 0x0(%rip),%eax        # 103c <main+0xa0>
    103c:	66 89 05 00 00 00 00 	mov    %ax,0x0(%rip)        # 1043 <main+0xa7>
   (signed16)(crosshair_x = crosshair_y = XJoy = YJoy = (signed8)(Credits = global_flashing_intensity = 0));

  init_hardware();
    1043:	e8 a5 f0 ff ff       	callq  ed <init_hardware>
  init_stars();
    1048:	e8 ac f4 ff ff       	callq  4f9 <init_stars>

  position_and_scale_and_intensity(0,0, 0x7f, MAX_BRIGHTNESS);
    104d:	b9 7f 00 00 00       	mov    $0x7f,%ecx
    1052:	ba 7f 00 00 00       	mov    $0x7f,%edx
    1057:	be 00 00 00 00       	mov    $0x0,%esi
    105c:	bf 00 00 00 00       	mov    $0x0,%edi
    1061:	e8 6d f7 ff ff       	callq  7d3 <position_and_scale_and_intensity>

  Score = 72; HighScore = 2047; LastScore = 132; // only for demo.
    1066:	66 c7 05 00 00 00 00 	movw   $0x48,0x0(%rip)        # 106f <main+0xd3>
    106d:	48 00 
    106f:	66 c7 05 00 00 00 00 	movw   $0x7ff,0x0(%rip)        # 1078 <main+0xdc>
    1076:	ff 07 
    1078:	66 c7 05 00 00 00 00 	movw   $0x84,0x0(%rip)        # 1081 <main+0xe5>
    107f:	84 00 

  // This is ostensibly an attract mode but really it is a deterministic QA test of all the component pieces.
  for (;;) {
    debugstr("main loop");
    1081:	b8 00 00 00 00       	mov    $0x0,%eax
    1086:	be 00 00 00 00       	mov    $0x0,%esi
    108b:	48 89 c7             	mov    %rax,%rdi
    108e:	b8 00 00 00 00       	mov    $0x0,%eax
    1093:	e8 00 00 00 00       	callq  1098 <main+0xfc>

    // approaching banner:

    placard_scale = (unsigned8)((signed16)(0xFF-160));
    1098:	c6 45 ee 5f          	movb   $0x5f,-0x12(%rbp)
    placard_brightness = (unsigned8)((signed16)(((signed16)MAX_BRIGHTNESS+(signed16)MAX_BRIGHTNESS-160)));
    109c:	c6 45 ef 5e          	movb   $0x5e,-0x11(%rbp)
    intro_rot = 128;
    10a0:	c6 05 00 00 00 00 80 	movb   $0x80,0x0(%rip)        # 10a7 <main+0x10b>
    // start at 128 step by -2  end at 64 after one full revolution (128 + 32 steps)
    for (frames = 0; frames < 160; frames++) {
    10a7:	66 c7 45 ea 00 00    	movw   $0x0,-0x16(%rbp)
    10ad:	eb 42                	jmp    10f1 <main+0x155>
      next_frame();
    10af:	e8 7f fe ff ff       	callq  f33 <next_frame>
      drawtgintro(placard_scale, placard_brightness>>1);
    10b4:	0f b6 45 ef          	movzbl -0x11(%rbp),%eax
    10b8:	d0 e8                	shr    %al
    10ba:	0f b6 d0             	movzbl %al,%edx
    10bd:	0f b6 45 ee          	movzbl -0x12(%rbp),%eax
    10c1:	89 d6                	mov    %edx,%esi
    10c3:	89 c7                	mov    %eax,%edi
    10c5:	e8 d9 f8 ff ff       	callq  9a3 <drawtgintro>
      placard_scale++; placard_brightness++;
    10ca:	80 45 ee 01          	addb   $0x1,-0x12(%rbp)
    10ce:	80 45 ef 01          	addb   $0x1,-0x11(%rbp)
      stars(1);
    10d2:	bf 01 00 00 00       	mov    $0x1,%edi
    10d7:	e8 9d f4 ff ff       	callq  579 <stars>
      intro_rot -= 2;
    10dc:	0f b6 05 00 00 00 00 	movzbl 0x0(%rip),%eax        # 10e3 <main+0x147>
    10e3:	83 e8 02             	sub    $0x2,%eax
    10e6:	88 05 00 00 00 00    	mov    %al,0x0(%rip)        # 10ec <main+0x150>

    placard_scale = (unsigned8)((signed16)(0xFF-160));
    placard_brightness = (unsigned8)((signed16)(((signed16)MAX_BRIGHTNESS+(signed16)MAX_BRIGHTNESS-160)));
    intro_rot = 128;
    // start at 128 step by -2  end at 64 after one full revolution (128 + 32 steps)
    for (frames = 0; frames < 160; frames++) {
    10ec:	66 83 45 ea 01       	addw   $0x1,-0x16(%rbp)
    10f1:	66 81 7d ea 9f 00    	cmpw   $0x9f,-0x16(%rbp)
    10f7:	7e b6                	jle    10af <main+0x113>
      intro_rot -= 2;
    }

    {signed16 i;
      // pulse the placard a few times...
      for (i = 0; i < 2; i++) {
    10f9:	66 c7 45 ec 00 00    	movw   $0x0,-0x14(%rbp)
    10ff:	eb 61                	jmp    1162 <main+0x1c6>
        placard_brightness = MAX_BRIGHTNESS&0xF8;
    1101:	c6 45 ef 78          	movb   $0x78,-0x11(%rbp)
        while (placard_brightness != 0) {
    1105:	eb 24                	jmp    112b <main+0x18f>
          next_frame();
    1107:	e8 27 fe ff ff       	callq  f33 <next_frame>
          drawtgintro(placard_scale, placard_brightness);
    110c:	0f b6 55 ef          	movzbl -0x11(%rbp),%edx
    1110:	0f b6 45 ee          	movzbl -0x12(%rbp),%eax
    1114:	89 d6                	mov    %edx,%esi
    1116:	89 c7                	mov    %eax,%edi
    1118:	e8 86 f8 ff ff       	callq  9a3 <drawtgintro>
          stars(1);
    111d:	bf 01 00 00 00       	mov    $0x1,%edi
    1122:	e8 52 f4 ff ff       	callq  579 <stars>
          placard_brightness -= 8;
    1127:	80 6d ef 08          	subb   $0x8,-0x11(%rbp)

    {signed16 i;
      // pulse the placard a few times...
      for (i = 0; i < 2; i++) {
        placard_brightness = MAX_BRIGHTNESS&0xF8;
        while (placard_brightness != 0) {
    112b:	80 7d ef 00          	cmpb   $0x0,-0x11(%rbp)
    112f:	75 d6                	jne    1107 <main+0x16b>
          next_frame();
          drawtgintro(placard_scale, placard_brightness);
          stars(1);
          placard_brightness -= 8;
        }
        while (placard_brightness != (MAX_BRIGHTNESS&0xF8)) {
    1131:	eb 24                	jmp    1157 <main+0x1bb>
          placard_brightness += 8;
    1133:	80 45 ef 08          	addb   $0x8,-0x11(%rbp)
          next_frame();
    1137:	e8 f7 fd ff ff       	callq  f33 <next_frame>
          drawtgintro(placard_scale, placard_brightness);
    113c:	0f b6 55 ef          	movzbl -0x11(%rbp),%edx
    1140:	0f b6 45 ee          	movzbl -0x12(%rbp),%eax
    1144:	89 d6                	mov    %edx,%esi
    1146:	89 c7                	mov    %eax,%edi
    1148:	e8 56 f8 ff ff       	callq  9a3 <drawtgintro>
          stars(1);
    114d:	bf 01 00 00 00       	mov    $0x1,%edi
    1152:	e8 22 f4 ff ff       	callq  579 <stars>
          next_frame();
          drawtgintro(placard_scale, placard_brightness);
          stars(1);
          placard_brightness -= 8;
        }
        while (placard_brightness != (MAX_BRIGHTNESS&0xF8)) {
    1157:	80 7d ef 78          	cmpb   $0x78,-0x11(%rbp)
    115b:	75 d6                	jne    1133 <main+0x197>
      intro_rot -= 2;
    }

    {signed16 i;
      // pulse the placard a few times...
      for (i = 0; i < 2; i++) {
    115d:	66 83 45 ec 01       	addw   $0x1,-0x14(%rbp)
    1162:	66 83 7d ec 01       	cmpw   $0x1,-0x14(%rbp)
    1167:	7e 98                	jle    1101 <main+0x165>
        }
      }
    }

    // now fade it out
    placard_brightness = MAX_BRIGHTNESS&0xF8;
    1169:	c6 45 ef 78          	movb   $0x78,-0x11(%rbp)
    while (placard_brightness != 0) {
    116d:	eb 24                	jmp    1193 <main+0x1f7>
      next_frame();
    116f:	e8 bf fd ff ff       	callq  f33 <next_frame>
      drawtgintro(placard_scale, placard_brightness);
    1174:	0f b6 55 ef          	movzbl -0x11(%rbp),%edx
    1178:	0f b6 45 ee          	movzbl -0x12(%rbp),%eax
    117c:	89 d6                	mov    %edx,%esi
    117e:	89 c7                	mov    %eax,%edi
    1180:	e8 1e f8 ff ff       	callq  9a3 <drawtgintro>
      stars(1);
    1185:	bf 01 00 00 00       	mov    $0x1,%edi
    118a:	e8 ea f3 ff ff       	callq  579 <stars>
      placard_brightness -= 8;
    118f:	80 6d ef 08          	subb   $0x8,-0x11(%rbp)
      }
    }

    // now fade it out
    placard_brightness = MAX_BRIGHTNESS&0xF8;
    while (placard_brightness != 0) {
    1193:	80 7d ef 00          	cmpb   $0x0,-0x11(%rbp)
    1197:	75 d6                	jne    116f <main+0x1d3>
      drawtgintro(placard_scale, placard_brightness);
      stars(1);
      placard_brightness -= 8;
    }

    debugstr("wait for coins...");
    1199:	b8 00 00 00 00       	mov    $0x0,%eax
    119e:	be 00 00 00 00       	mov    $0x0,%esi
    11a3:	48 89 c7             	mov    %rax,%rdi
    11a6:	b8 00 00 00 00       	mov    $0x0,%eax
    11ab:	e8 00 00 00 00       	callq  11b0 <main+0x214>
    global_flashing_intensity = 0; frame_number = 0; // start flashing from off position
    11b0:	c6 05 00 00 00 00 00 	movb   $0x0,0x0(%rip)        # 11b7 <main+0x21b>
    11b7:	66 c7 05 00 00 00 00 	movw   $0x0,0x0(%rip)        # 11c0 <main+0x224>
    11be:	00 00 
    for (frames = 0; ; frames++) {
    11c0:	66 c7 45 ea 00 00    	movw   $0x0,-0x16(%rbp)
      if (frames == 80) Credits += 1;
    11c6:	66 83 7d ea 50       	cmpw   $0x50,-0x16(%rbp)
    11cb:	75 10                	jne    11dd <main+0x241>
    11cd:	0f b6 05 00 00 00 00 	movzbl 0x0(%rip),%eax        # 11d4 <main+0x238>
    11d4:	83 c0 01             	add    $0x1,%eax
    11d7:	88 05 00 00 00 00    	mov    %al,0x0(%rip)        # 11dd <main+0x241>
      if (frames == 120) Credits += 1;
    11dd:	66 83 7d ea 78       	cmpw   $0x78,-0x16(%rbp)
    11e2:	75 10                	jne    11f4 <main+0x258>
    11e4:	0f b6 05 00 00 00 00 	movzbl 0x0(%rip),%eax        # 11eb <main+0x24f>
    11eb:	83 c0 01             	add    $0x1,%eax
    11ee:	88 05 00 00 00 00    	mov    %al,0x0(%rip)        # 11f4 <main+0x258>
      next_frame();
    11f4:	e8 3a fd ff ff       	callq  f33 <next_frame>
      stars(1);
    11f9:	bf 01 00 00 00       	mov    $0x1,%edi
    11fe:	e8 76 f3 ff ff       	callq  579 <stars>
      if (Credits == 0) Draw_insertcoin(); else {Draw_start(); Draw_credits();}
    1203:	0f b6 05 00 00 00 00 	movzbl 0x0(%rip),%eax        # 120a <main+0x26e>
    120a:	84 c0                	test   %al,%al
    120c:	75 07                	jne    1215 <main+0x279>
    120e:	e8 49 fb ff ff       	callq  d5c <Draw_insertcoin>
    1213:	eb 0a                	jmp    121f <main+0x283>
    1215:	e8 8e fb ff ff       	callq  da8 <Draw_start>
    121a:	e8 d5 fb ff ff       	callq  df4 <Draw_credits>
      intensity(MAX_BRIGHTNESS);
    121f:	bf 7f 00 00 00       	mov    $0x7f,%edi
    1224:	e8 8d ee ff ff       	callq  b6 <intensity>
      Draw_lastscore();
    1229:	e8 86 fa ff ff       	callq  cb4 <Draw_lastscore>
      Draw_highscore();
    122e:	e8 d5 fa ff ff       	callq  d08 <Draw_highscore>
      if (button1) break;
    1233:	0f b6 05 00 00 00 00 	movzbl 0x0(%rip),%eax        # 123a <main+0x29e>
    123a:	84 c0                	test   %al,%al
    123c:	75 07                	jne    1245 <main+0x2a9>
      placard_brightness -= 8;
    }

    debugstr("wait for coins...");
    global_flashing_intensity = 0; frame_number = 0; // start flashing from off position
    for (frames = 0; ; frames++) {
    123e:	66 83 45 ea 01       	addw   $0x1,-0x16(%rbp)
      if (Credits == 0) Draw_insertcoin(); else {Draw_start(); Draw_credits();}
      intensity(MAX_BRIGHTNESS);
      Draw_lastscore();
      Draw_highscore();
      if (button1) break;
    }
    1243:	eb 81                	jmp    11c6 <main+0x22a>
      stars(1);
      if (Credits == 0) Draw_insertcoin(); else {Draw_start(); Draw_credits();}
      intensity(MAX_BRIGHTNESS);
      Draw_lastscore();
      Draw_highscore();
      if (button1) break;
    1245:	90                   	nop
    }
    Credits = 0; // only for demo
    1246:	c6 05 00 00 00 00 00 	movb   $0x0,0x0(%rip)        # 124d <main+0x2b1>

    // shields and crosshair - simulated play...
    for (frames = 0; frames < 255; frames++) {
    124d:	66 c7 45 ea 00 00    	movw   $0x0,-0x16(%rbp)
    1253:	e9 9c 00 00 00       	jmpq   12f4 <main+0x358>
      next_frame();
    1258:	e8 d6 fc ff ff       	callq  f33 <next_frame>
      stars(1);
    125d:	bf 01 00 00 00       	mov    $0x1,%edi
    1262:	e8 12 f3 ff ff       	callq  579 <stars>
      intensity(MAX_BRIGHTNESS);
    1267:	bf 7f 00 00 00       	mov    $0x7f,%edi
    126c:	e8 45 ee ff ff       	callq  b6 <intensity>
      Draw_ships_remaining();
    1271:	e8 fa fb ff ff       	callq  e70 <Draw_ships_remaining>
      Draw_shields_remaining();
    1276:	e8 14 fc ff ff       	callq  e8f <Draw_shields_remaining>
      Draw_score();
    127b:	e8 2e fc ff ff       	callq  eae <Draw_score>
      /*Draw_*/follow_crosshair((signed8)(fp2_14_sin(frames)>>8), (signed8)(fp2_14_cos(frames)>>8));
    1280:	0f bf 45 ea          	movswl -0x16(%rbp),%eax
    1284:	89 c7                	mov    %eax,%edi
    1286:	e8 f9 f6 ff ff       	callq  984 <fp2_14_cos>
    128b:	66 c1 f8 08          	sar    $0x8,%ax
    128f:	0f be d8             	movsbl %al,%ebx
    1292:	0f bf 45 ea          	movswl -0x16(%rbp),%eax
    1296:	89 c7                	mov    %eax,%edi
    1298:	e8 a9 f6 ff ff       	callq  946 <fp2_14_sin>
    129d:	66 c1 f8 08          	sar    $0x8,%ax
    12a1:	0f be c0             	movsbl %al,%eax
    12a4:	89 de                	mov    %ebx,%esi
    12a6:	89 c7                	mov    %eax,%edi
    12a8:	e8 00 00 00 00       	callq  12ad <main+0x311>
      if (button2) {
    12ad:	0f b6 05 00 00 00 00 	movzbl 0x0(%rip),%eax        # 12b4 <main+0x318>
    12b4:	84 c0                	test   %al,%al
    12b6:	74 37                	je     12ef <main+0x353>
        intensity((unsigned8)pickrandom(64,127));
    12b8:	be 7f 00 00 00       	mov    $0x7f,%esi
    12bd:	bf 40 00 00 00       	mov    $0x40,%edi
    12c2:	e8 39 f0 ff ff       	callq  300 <pickrandom>
    12c7:	0f be c0             	movsbl %al,%eax
    12ca:	89 c7                	mov    %eax,%edi
    12cc:	e8 e5 ed ff ff       	callq  b6 <intensity>
        if (pickrandom(0,31)) draw_shields(0xF0);
    12d1:	be 1f 00 00 00       	mov    $0x1f,%esi
    12d6:	bf 00 00 00 00       	mov    $0x0,%edi
    12db:	e8 20 f0 ff ff       	callq  300 <pickrandom>
    12e0:	66 85 c0             	test   %ax,%ax
    12e3:	74 0a                	je     12ef <main+0x353>
    12e5:	bf f0 00 00 00       	mov    $0xf0,%edi
    12ea:	e8 22 f5 ff ff       	callq  811 <draw_shields>
      if (button1) break;
    }
    Credits = 0; // only for demo

    // shields and crosshair - simulated play...
    for (frames = 0; frames < 255; frames++) {
    12ef:	66 83 45 ea 01       	addw   $0x1,-0x16(%rbp)
    12f4:	66 81 7d ea fe 00    	cmpw   $0xfe,-0x16(%rbp)
    12fa:	0f 8e 58 ff ff ff    	jle    1258 <main+0x2bc>
      }
    }


    // 'whoosh' when a ship got by us.
    debugstr("whoosh...");
    1300:	b8 00 00 00 00       	mov    $0x0,%eax
    1305:	be 00 00 00 00       	mov    $0x0,%esi
    130a:	48 89 c7             	mov    %rax,%rdi
    130d:	b8 00 00 00 00       	mov    $0x0,%eax
    1312:	e8 00 00 00 00       	callq  1317 <main+0x37b>
    for (frames = 0; frames < 64; frames++) {
    1317:	66 c7 45 ea 00 00    	movw   $0x0,-0x16(%rbp)
    131d:	eb 3f                	jmp    135e <main+0x3c2>
      next_frame();
    131f:	e8 0f fc ff ff       	callq  f33 <next_frame>
      stars(3);
    1324:	bf 03 00 00 00       	mov    $0x3,%edi
    1329:	e8 4b f2 ff ff       	callq  579 <stars>
      intensity((unsigned8)(64-frames)*2); // fade out
    132e:	0f b7 45 ea          	movzwl -0x16(%rbp),%eax
    1332:	89 c2                	mov    %eax,%edx
    1334:	b8 00 00 00 00       	mov    $0x0,%eax
    1339:	28 d0                	sub    %dl,%al
    133b:	01 c0                	add    %eax,%eax
    133d:	83 c0 80             	add    $0xffffff80,%eax
    1340:	0f be c0             	movsbl %al,%eax
    1343:	89 c7                	mov    %eax,%edi
    1345:	e8 6c ed ff ff       	callq  b6 <intensity>
      Draw_ships_remaining();
    134a:	e8 21 fb ff ff       	callq  e70 <Draw_ships_remaining>
      Draw_shields_remaining();
    134f:	e8 3b fb ff ff       	callq  e8f <Draw_shields_remaining>
      Draw_score();
    1354:	e8 55 fb ff ff       	callq  eae <Draw_score>
    }


    // 'whoosh' when a ship got by us.
    debugstr("whoosh...");
    for (frames = 0; frames < 64; frames++) {
    1359:	66 83 45 ea 01       	addw   $0x1,-0x16(%rbp)
    135e:	66 83 7d ea 3f       	cmpw   $0x3f,-0x16(%rbp)
    1363:	7e ba                	jle    131f <main+0x383>
      intensity((unsigned8)(64-frames)*2); // fade out
      Draw_ships_remaining();
      Draw_shields_remaining();
      Draw_score();
    }
  }
    1365:	e9 17 fd ff ff       	jmpq   1081 <main+0xe5>
