INT 33,14 - Swap Interrupt Subroutines

	AX = 14h
	ES:DX = far pointer to user routine
	CX = user interrupt mask:

		│F-8│7│6│5│4│3│2│1│0│ user interrupt mask in CX
		  │  │ │ │ │ │ │ │ └─── cursor position changed
		  │  │ │ │ │ │ │ └──── left button pressed
		  │  │ │ │ │ │ └───── left button released
		  │  │ │ │ │ └────── right button pressed
		  │  │ │ │ └─────── right button released
		  └──┴─┴─┴──────── unused

	on return:
	CX = previous user interrupt mask
	ES:DX = far pointer to previous user interrupt

	- routine at ES:DX is called if an event occurs and the
	  corresponding bit specified in user mask is set
	- routine at ES:DX receives parameters in the following
	  registers:

	  AX = condition mask causing call
	  CX = horizontal cursor position
	  DX = vertical cursor position
	  DI = horizontal counts
	  SI = vertical counts
	  DS = mouse driver data segment
	  BX = button state:

	     │F-2│1│0│
	       │  │ └─── left button (1 = pressed)
	       │  └──── right button (1 = pressed)
	       └────── unused

	- initial call mask and user routine should be restore on exit
	  from user program
	- user program may need to set DS to it's own segment
	- see	INT 33,C