From  Henrik Lohse

 Q. How does INT 33, AX = 9 work?  How can I create my own character
    bitmaps to make my own cursor shapes?
 A.

 The Inputs :

  AX = 9
  BX = rel. pos. to left corner of image
  CX = rel. pos. to upper corner of image
  ES : DX pointer to a 64 Byte-Field in memory
  
  
  the data in ES:DX should be stored like that :


; hand

anddata  dw 0f3ffh,0edffh,0e1ffh,0e1ffh,0e1ffh,0e049h,0e000h,0e000h
         dw 08000h,00000h,00000h,00000h,00000h,00000h,00000h,08001h
ordata   dw 00c00h,01200h,01200h,01200h,01200h,013b6h,01249h,01249h
         dw 07249h,09001h,09001h,09001h,08001h,08001h,08001h,07ffeh

The ordata-part makes the shape of the cursor. Binary it looks :

ordata dw  0000110000000000b  ; the '1' will form the shape
       dw  0001001000000000b  ; BX should be 4 or 5 or 6  
       dw  0001001000000000b  ; CX should be 0 or 1 
       dw  0001001000000000b  ; (I don't know whether it starts
       dw  0001001000000000b  ;  with 1 or 0 ... )
       dw  0001001110110110b
       dw  0001001001001001b
       dw  0001001001001001b
       dw  0111001001001001b
       dw  1001000000000001b
       dw  1001000000000001b
       dw  1001000000000001b
       dw  1000000000000001b
       dw  1000000000000001b
       dw  1000000000000001b
       dw  0111111111111110b

The anddata-part forms the background-mixing. Binary :

anddata dw 1111001111111111b  ; under a '0' there will no background be
        dw 1110110111111111b  ; visible
        dw 1110000111111111b  ; under the '1' you will see the bg
        dw 1110000111111111b
        dw 1110000111111111b
        dw 1110000001001001b
        dw 1110000000000000b
        dw 1110000000000000b

        ...


Here are some predefined cursorshapes :

; hour-glass

data    dw 00000h,00000h,00000h,08001h,0c003h,0e007h,0f00fh,0e007h
        dw 0c003h,08001h,00000h,00000h,00000h,00000h,00000h,00000h
        dw 00000h,07ffeh,06006h,0300ch,01818h,00c30h,00660h,003c0h
        dw 00660h,00c30h,01998h,033cch,067e6h,07ffeh,00000h,00000h

; arrow
           
data    dw 03fffh,01fffh,00fffh,007ffh,003ffh,001ffh,000ffh,0007fh
        dw 0003fh,0001fh,001ffh,010ffh,030ffh,0f87fh,0f87fh,0fc3fh
        dw 00000h,04000h,06000h,07000h,07800h,07c00h,07e00h,07f00h
        dw 07f80h,07fc0h,07c00h,04600h,00600h,00300h,00300h,00180h

; clock

data    dw 0e007h,0e007h,0e007h,0e007h,0c003h,08001h,08001h,08001h
        dw 08001h,08001h,0c003h,0e007h,0e007h,0e007h,0e007h,0e007h
        dw 00ff0h,00ff0h,00ff0h,00ff0h,01008h,02084h,02084h,02086h
        dw 02f86h,02004h,02004h,01008h,00ff0h,00ff0h,00ff0h,00ff0h

All this stuff only works with 16 x 16 b/w cursors, I don't know if
or how it's possible to create bigger or colored ones.

Hope I was helpful ...

C'ya
      Henne

