00025846 <zz0016d832>:
   25846:	53                   	push   %ebx
;allocate 2 longs on the stack
   25847:	83 ec 08             	sub    $0x8,%esp
   2584a:	8b 5c 24 10          	mov    0x10(%esp),%ebx
;magic number 0xe0 = 224 on the stack
   2584e:	c7 04 24 e0 00 00 00 	movl   $0xe0,(%esp)
;get the current position
   25855:	e8 fc ff ff ff       	call   25856 <zz0016d832+0x10>
;put eax onto this struct. What is eax?
   2585a:	89 83 ec 5b 00 00    	mov    %eax,0x5bec(%ebx)
;if (eax != 0)
   25860:	85 c0                	test   %eax,%eax
;jump to l1
   25862:	75 14                	jne    25878 <zz0016d832+0x32>
;else
;eax = piece on the stack
   25864:	8b 44 24 14          	mov    0x14(%esp),%eax
;*eax = 2
   25868:	c7 00 02 00 00 00    	movl   $0x2,(%eax)
;eax = 0
   2586e:	b8 00 00 00 00       	mov    $0x0,%eax
;jump to l2
   25873:	e9 90 00 00 00       	jmp    25908 <zz0016d832+0xc2>
;end if
l1:
;put 0x80 = 128 onto the struct pointed to
   25878:	c7 83 7c 73 00 00 80 	movl   $0x80,0x737c(%ebx)
   2587f:	00 00 00 
;put 0x80 = 128 onto the stack
   25882:	c7 04 24 80 00 00 00 	movl   $0x80,(%esp)
;get the current position
   25889:	e8 fc ff ff ff       	call   2588a <zz0016d832+0x44>
;put eax onto the struct pointed to
   2588e:	89 83 78 73 00 00    	mov    %eax,0x7378(%ebx)
;if (eax != 0)
   25894:	85 c0                	test   %eax,%eax
;jump to l3
   25896:	75 11                	jne    258a9 <zz0016d832+0x63>
;else
;eax = piece on the stack
   25898:	8b 44 24 14          	mov    0x14(%esp),%eax
;*eax = 2
   2589c:	c7 00 02 00 00 00    	movl   $0x2,(%eax)
;eax = 0
   258a2:	b8 00 00 00 00       	mov    $0x0,%eax
;jump to l2
   258a7:	eb 5f                	jmp    25908 <zz0016d832+0xc2>
;end if
l3:
;put 0x40 = 64 onto the struct pointed to (see similar call @l1)
   258a9:	c7 83 7c 73 00 00 40 	movl   $0x40,0x737c(%ebx)
   258b0:	00 00 00 
;put 0x26d49 onto the struct pointed to
   258b3:	c7 83 a8 58 00 00 49 	movl   $0x26d49,0x58a8(%ebx)
   258ba:	6d 02 00 
;put 0x26950 onto the struct pointed to
   258bd:	c7 83 ac 58 00 00 50 	movl   $0x26950,0x58ac(%ebx)
   258c4:	69 02 00 
;put 0x25350 onto the struct pointed to
   258c7:	c7 83 b0 58 00 00 50 	movl   $0x25350,0x58b0(%ebx)
   258ce:	53 02 00 
;put 0x26a28 onto the struct pointed to
   258d1:	c7 83 b4 58 00 00 28 	movl   $0x26a28,0x58b4(%ebx)
   258d8:	6a 02 00 
;put 0x2613d onto the struct pointed to
   258db:	c7 83 b8 58 00 00 3d 	movl   $0x2613d,0x58b8(%ebx)
   258e2:	61 02 00 
;put 0x2590d onto the struct pointed to
   258e5:	c7 83 bc 58 00 00 0d 	movl   $0x2590d,0x58bc(%ebx)
   258ec:	59 02 00 
;put 0x2562b onto the struct pointed to
   258ef:	c7 83 c0 58 00 00 2b 	movl   $0x2562b,0x58c0(%ebx)
   258f6:	56 02 00 
;put 0 onto the struct pointed to
   258f9:	c7 83 c4 58 00 00 00 	movl   $0x0,0x58c4(%ebx)
   25900:	00 00 00 
;eax = 1
   25903:	b8 01 00 00 00       	mov    $0x1,%eax
l2:
;dellocate 2 longs on the stack
   25908:	83 c4 08             	add    $0x8,%esp
;take the stored ebx off the stack
   2590b:	5b                   	pop    %ebx
;return;
   2590c:	c3                   	ret    

;Note: all code paths end here, so that's the end of the function.

;The purpose of the above function is pretty interesting

;A new function starts here it's pretty obvious by the pushes.

;function initialization
   2590d:	55                   	push   %ebp
   2590e:	57                   	push   %edi
   2590f:	56                   	push   %esi
   25910:	53                   	push   %ebx
;allocate 1036 bytes on the stack, owch
   25911:	81 ec 0c 04 00 00    	sub    $0x40c,%esp
;eax = long in a struct on the stack
   25917:	8b 84 24 20 04 00 00 	mov    0x420(%esp),%eax
;put eax onto local variable list
   2591e:	89 44 24 28          	mov    %eax,0x28(%esp)
;edx = extend word to long on struct at eax
;http://en.wikibooks.org/wiki/X86_Assembly/Data_Transfer#Move_and_Extend
   25922:	0f b7 90 d4 01 00 00 	movzwl 0x1d4(%eax),%edx
;eax = edx
   25929:	89 d0                	mov    %edx,%eax
;eax &= 0xf0
   2592b:	25 f0 00 00 00       	and    $0xf0,%eax
;eax -= 0x30
   25930:	83 e8 30             	sub    $0x30,%eax
;if ((unsigned int)eax > 0x3f) 
;http://en.wikibooks.org/wiki/X86_Assembly/Control_Flow#Jump_if_Greater
   25933:	83 f8 3f             	cmp    $0x3f,%eax
;jump to l4
   25936:	77 24                	ja     2595c <zz0016d832+0x116>
;if (dx == 0x35)
   25938:	66 83 fa 35          	cmp    $0x35,%dx
;jump to l5
   2593c:	74 14                	je     25952 <zz0016d832+0x10c>
;if (dx == 0x45)
   2593e:	66 83 fa 45          	cmp    $0x45,%dx
;jump to l5
   25942:	74 0e                	je     25952 <zz0016d832+0x10c>
;if (dx == 0x46)
   25944:	66 83 fa 46          	cmp    $0x46,%dx
;jump to l5
   25948:	74 08                	je     25952 <zz0016d832+0x10c>
;if (dx != 0x36)
   2594a:	66 83 fa 36          	cmp    $0x36,%dx
;nop?
   2594e:	66 90                	xchg   %ax,%ax
;jump to l4
   25950:	75 0a                	jne    2595c <zz0016d832+0x116>
l5:
;put 2 onto the stack (local var)
   25952:	c7 44 24 2c 02 00 00 	movl   $0x2,0x2c(%esp)
   25959:	00 
;jump to l6
   2595a:	eb 08                	jmp    25964 <zz0016d832+0x11e>
l4:
;put 1 on the stack (local var) see same var value @l5
   2595c:	c7 44 24 2c 01 00 00 	movl   $0x1,0x2c(%esp)
   25963:	00 
l6:
;edx = local var on the stack
   25964:	8b 94 24 2c 04 00 00 	mov    0x42c(%esp),%edx
;eax = *edx
   2596b:	8b 02                	mov    (%edx),%eax
;eax &= 0x701f0
   2596d:	25 f0 01 07 00       	and    $0x701f0,%eax
;if (eax == 0xd0)
   25972:	3d d0 00 00 00       	cmp    $0xd0,%eax
;jump to l7
   25977:	74 73                	je     259ec <zz0016d832+0x1a6>
;if ((unsigned int)eax > 0xd0)
   25979:	3d d0 00 00 00       	cmp    $0xd0,%eax
;jump to l8
   2597e:	77 18                	ja     25998 <zz0016d832+0x152>
;if (eax == 0xa0)
   25980:	3d a0 00 00 00       	cmp    $0xa0,%eax
;jump to l9
   25985:	74 4a                	je     259d1 <zz0016d832+0x18b>
;if (eax != 0xc0)
   25987:	3d c0 00 00 00       	cmp    $0xc0,%eax
;nop?
   2598c:	8d 74 26 00          	lea    0x0(%esi),%esi
;jump to l10
   25990:	0f 85 47 07 00 00    	jne    260dd <zz0016d832+0x897>
;jump to l7
   25996:	eb 54                	jmp    259ec <zz0016d832+0x1a6>
l8:
;if (eax == 0x150)
   25998:	3d 50 01 00 00       	cmp    $0x150,%eax
;nop?
   2599d:	8d 76 00             	lea    0x0(%esi),%esi
;jump to l11
   259a0:	74 14                	je     259b6 <zz0016d832+0x170>
;if (eax == 0x800)
   259a2:	3d 00 08 00 00       	cmp    $0x800,%eax
;jump to l11
   259a7:	74 0d                	je     259b6 <zz0016d832+0x170>
;if (eax != 0x140)
   259a9:	3d 40 01 00 00       	cmp    $0x140,%eax
;nop?
   259ae:	66 90                	xchg   %ax,%ax
;jump to l10
   259b0:	0f 85 27 07 00 00    	jne    260dd <zz0016d832+0x897>
l11:
   259b6:	8b 4c 24 28          	mov    0x28(%esp),%ecx
   259ba:	81 c1 d4 4b 00 00    	add    $0x4bd4,%ecx
   259c0:	89 4c 24 30          	mov    %ecx,0x30(%esp)
   259c4:	8b 44 24 28          	mov    0x28(%esp),%eax
   259c8:	0f b7 90 d8 3e 00 00 	movzwl 0x3ed8(%eax),%edx
   259cf:	eb 33                	jmp    25a04 <zz0016d832+0x1be>
l9:
   259d1:	8b 54 24 28          	mov    0x28(%esp),%edx
   259d5:	81 c2 e0 4b 00 00    	add    $0x4be0,%edx
   259db:	89 54 24 30          	mov    %edx,0x30(%esp)
   259df:	8b 4c 24 28          	mov    0x28(%esp),%ecx
   259e3:	0f b7 91 da 3e 00 00 	movzwl 0x3eda(%ecx),%edx
   259ea:	eb 18                	jmp    25a04 <zz0016d832+0x1be>
l7: