I don't have a real graphics tablet to calibrate against, however there is calibration information on the various software disks available.

The tablet calibration file is stored in TAB.INFORMATION and it has a really simple format:

slot #, upper left x1,y1 and lower right x2,y2

490 PRINT D$;"OPEN TAB.INFORMATION"
500 PRINT D$;"WRITE TAB.INFORMATION"
510 PRINT SL: PRINT X1: PRINT Y1: PRINT X2: PRINT Y2
520 PRINT D$;"CLOSE TAB.INFORMATION"
525 PRINT D$;"LOCK TAB.INFORMATION"

The scale is set to 2 in the MENU ALIGNMENT calibration program so those numbers should be multiplied by 2 to get the actual results.


Code
[MAME]> loaddisk("../../APPLE GRAPHICS TABLET pristine.dsk")
[MAME]> hexdump(getfileraw("TAB.INFORMATION"))
(11,0f) 00  *A 006 HELLO                          TS List=(13,0f)
(11,0f) 01  *B 022 GRAPHICS TABLET LOGO           TS List=(14,0f)
(11,0f) 02  *A 012 MENU ALIGNMENT                 TS List=(15,0f)
(11,0f) 03  *T 002 GRAPHICS TABLET SOFTWARE       TS List=(16,0f)
(11,0f) 04  *A 00a QUICK-DRAW                     TS List=(17,0f)
(11,0f) 05  *B 005 UTILITIES                      TS List=(18,0f)
(11,0e) 01  *T 002 TAB.INFORMATION                TS List=(20,0f)
matched "TAB.INFORMATION" with "TAB.INFORMATION               "
00   b2 8d b2 b9 b3 8d b3 b2  |  b6 8d b3 b0 b9 b0 8d b3  |  2.293.326.3090.3
10   b1 b1 b8 8d 00 00 00 00  |  00 00 00 00 00 00 00 00  |  118.............
20   00 00 00 00 00 00 00 00  |  00 00 00 00 00 00 00 00  |  ................
30   00 00 00 00 00 00 00 00  |  00 00 00 00 00 00 00 00  |  ................
40   00 00 00 00 00 00 00 00  |  00 00 00 00 00 00 00 00  |  ................
50   00 00 00 00 00 00 00 00  |  00 00 00 00 00 00 00 00  |  ................
60   00 00 00 00 00 00 00 00  |  00 00 00 00 00 00 00 00  |  ................

[MAME]> loaddisk("../../Apple Graphics Tablet - Applesoft BASIC.dsk")
[MAME]> hexdump(getfileraw("TAB.INFORMATION"))
(11,0f) 00  *A 006 HELLO                          TS List=(12,0f)
(11,0f) 01  *B 022 GRAPHICS TABLET LOGO           TS List=(13,0f)
(11,0f) 02  *A 012 MENU ALIGNMENT                 TS List=(16,0f)
(11,0f) 03  *A 002 DOCUMENT FILE LENGTHS          TS List=(0c,0f)
(11,0f) 04  *B 005 UTILITIES                      TS List=(0a,0d)
(11,0f) 05  *T 002 TAB.INFORMATION                TS List=(09,0f)
matched "TAB.INFORMATION" with "TAB.INFORMATION               "
00   b5 8d b2 b8 b5 8d b2 b7  |  b1 8d b3 b0 b7 b1 8d b3  |  5.285.271.3071.3
10   b0 b5 b6 8d 00 00 00 00  |  00 00 00 00 00 00 00 00  |  056.............
20   00 00 00 00 00 00 00 00  |  00 00 00 00 00 00 00 00  |  ................
30   00 00 00 00 00 00 00 00  |  00 00 00 00 00 00 00 00  |  ................
40   00 00 00 00 00 00 00 00  |  00 00 00 00 00 00 00 00  |  ................
50   00 00 00 00 00 00 00 00  |  00 00 00 00 00 00 00 00  |  ................

So it looks like the numbers are pretty consistent, around 290 and 3090. X and Y are approx the same so we'll assume they will be the same. Multiplying by 2 we get around 580 for upper left and 6200 for lower right.

If we divide those numbers by 3 we get approx 193 and 2066 for our tablet calibration.

[MAME]> print(580/3)
193.33333333333
[MAME]> print(6200/3)
2066.6666666667
[MAME]>

and we'll change those sliders to match:

Some fine tuning of the values gives us 2064 and 193.

[Linked Image from i.imgur.com]

Now the tablet is pretty well calibrated for the graphics software,

[MAME]> setxy(-127,0) -- puts cursor on the far left edge
[MAME]> setxy(127,0) -- puts cursor on the far right edge

[MAME]> setxy(-128,0) -- puts cursor off the screen
[MAME]> setxy(128,0)

The tablet software seems to work better with the ability to have the cursor off the screen at the edges.

Computing the position of the buttons is a lot easier with the possible joystick range from -128 to 128 going from screen edge to screen edge.

Code
function clickat(x,y) pu() fr(3) setxy(x-128,y-128) print("click at ",x,y) fr(15) pd() fr(20) pu() fr(25) setxy(0,0) fr(2) end
function clickb(x,y,size,offset) size = size or 255 offset = offset or 0 buttonsize=size/22 clickat(x*buttonsize+buttonsize/2+offset,4) end   -- 22 buttons across
function doco(f,...) co1=coroutine.create(f) ok,err = coroutine.resume(co1,...) print("coroutine.resume -> ",ok,err) end

doco(clickb,9)   -- clicks on Pen Color
doco(clickb,3)  -- click on BG Color

and I can do my own Jackson Pollock.

[Linked Image from i.imgur.com]