{
   struct _CR * cr = (struct _CR*)&(regs->cr);
   uint_t packet_size = size + 16;
-  regs->cr = 0x21;
+  regs->cr = 0x21; /* Turn off remote DMA, stop command */
   cr->stp = 0x0;  //toggle start on
   cr->sta = 0x1;
   Out_Byte(NE2K_CR, regs->cr);
   Out_Byte(NE2K_RSAR0, 0x00);
   Out_Byte(NE2K_RSAR1, TX_START_BUFF);
 
-  regs->cr = 0x16;
+  cr->rd = 0x02; /* Set remote DMA to write */
   Out_Byte(NE2K_CR, regs->cr);
 
   /* Destination Address */
     Out_Word(NE2K_CR + 0x10, (*(data + i + 1) << 8) | *(data + i));
   }
 
+  cr->txp = 0x1; /* Start transmission */
+  Out_Byte(NE2K_CR, regs->cr);
+
   return 0;
 }