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