Subversion Repositories planix.SVN

Rev

Rev 2 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 - 1
 
2
From The Be Newsletter 
3
Volume 3, Issue 8 -- February 24, 1999
4
 
5
--------------------------------------------------------------------------------
6
BE ENGINEERING INSIGHTS: Adventures in Graphics Drivers 
7
By Leo Schwab -- <ewhac@be.com> 
8
--------------------------------------------------------------------------------
9
 
10
This adventure is more true than I might otherwise be
11
willing to admit. All persons and events depicted are
12
entirely fictitious, except where they aren't. Unflattering
13
characterizations of certain organizations are entirely
14
deliberate and intentional.
15
 
16
	You are in a cube. In front of you is a 16"
17
	(visible) Sony monitor. In front of that is a
18
	Mitsumi keyboard and an unbranded mouse. Just to
19
	the right is a 266 MHz PC clone. The system is
20
	running a development version of BeOS R4.
21
 
22
	There is a graphics card here.
23
	There is a floppy disk here.
24
	There is a note from your boss here.
25
	There is a Hoberman sphere here.
26
 
27
> INVENTORY
28
 
29
	You have a well-used satchel. Inside it are
30
 
31
	    A set of screwdrivers
32
	    A small telescope
33
	    A 16M laptop RAM module
34
	    A book on decorative knots
35
	    A PCMCIA Ethernet card
36
	    Last year's tax return
37
	    A 166 MHz Pentium laptop computer
38
	    A bottle of echinacea capsules
39
	    Hair sticks
40
 
41
	Your wallet contains $3200.
42
 
43
> REPLACE KEYBOARD
44
 
45
	You put aside the amazingly cruddy Mitsumi keyboard
46
	and substitute your favorite AT&T keyboard.
47
 
48
> PUT LAPTOP ON DESK
49
 
50
	The laptop is now on the desk.
51
 
52
> READ NOTE
53
 
54
	"Write a driver for this card. We'd like it in time
55
	for R4 release."
56
 
57
> EXAMINE GRAPHICS CARD
58
 
59
	You are evidently the proud owner of a Yoyodyne
60
	Monstra VelocElite-LX 128-3D-AGP graphics card.
61
 
62
> INSERT CARD IN MACHINE
63
 
64
	The machine emits a curious and worrying noise.
65
 
66
> TURN OFF MACHINE AND INSERT CARD
67
 
68
	The graphics card is now installed in the machine.
69
 
70
> TURN ON MACHINE
71
 
72
	BeOS R4(devel) boots. You are looking at a
73
	gray scale desktop.
74
 
75
> EXAMINE FLOPPY DISK
76
 
77
	The handwritten label reads, "Programming docs."
78
 
79
> INSERT DISK AND PRINT DOCS
80
 
81
	Nothing happens.
82
 
83
> INSERT DISK, MOUNT DISK, AND PRINT DOCS
84
 
85
	The drive spins for a moment, and the command prompt
86
	returns.
87
 
88
> READ DOCS
89
 
90
	I see no docs here.
91
 
92
> GO TO PRINTER AND GET DOCS
93
 
94
	The printer is out of paper.
95
 
96
> PUT PAPER IN PRINTER
97
 
98
	There is no paper here.
99
 
100
> STEAL PAPER FROM COPIER UPSTAIRS
101
 
102
	After installing the liberated paper in the printer,
103
	you print your docs.
104
 
105
> EXAMINE DOCS
106
 
107
	The cover page reads, "Yoyodyne Monstra
108
	VelocElite-LX 128-3D Programmer's Reference. Alpha
109
	Revision 05-31-98. Confidential and Proprietary.
110
	Restricted Secret; Level Violet. Do not expose in
111
	public. This document must be kept secured when not
112
	in use. Disclosure of this document to third
113
	parties is punishable by death."
114
 
115
> READ DOCS
116
 
117
	After several hours, you finish reading the docs.
118
	The VelocElite-LX is a depressingly predictable
119
	variation on the VGA register set. There are some
120
	registers that have unhelpfully terse descriptions.
121
	The card also has the ability to execute rendering
122
	command lists out of RAM.
123
 
124
	You now know enough to write a rough driver for the
125
	card.
126
 
127
> WRITE ROUGH DRIVER
128
 
129
	After several days, you have driver ready to test.
130
 
131
> INSTALL DRIVER AND TEST
132
	You reboot the machine.  The screen is blank.
133
 
134
> RUN 'minicom' ON LAPTOP
135
 
136
	The 'minicom' terminal emulator is now running in an
137
	XTerm on the laptop.
138
 
139
> PRESS ALT-SYSRQ ON MACHINE
140
 
141
	Nothing happens.
142
 
143
> PLUG SERIAL CABLE INTO LAPTOP
144
 
145
	The "kdebug>" prompt from the kernel debugger
146
	appears on the XTerm.
147
 
148
> EXAMINE REGISTERS
149
 
150
	After thirty minutes, you determine that two of the
151
	sync registers are set incorrectly.
152
 
153
> FIX BUGS IN DRIVER AND TEST
154
 
155
	You can't see anything.
156
 
157
> REBOOT IN SAFE MODE AND FIX BUGS
158
 
159
	A new version of the driver is ready to test.
160
 
161
> TEST
162
 
163
	You reboot the machine. You see a color BeOS
164
	desktop.
165
 
166
> TEST MODES
167
 
168
	You switch to 800*600. It looks fine.
169
	You switch to 1024*768. It looks fine.
170
	You switch to 1152*864. There are pixel sparkles on
171
	the screen.
172
 
173
> PRESS ALT-SYSRQ ON MACHINE
174
 
175
	Nothing happens.
176
 
177
> YES, IT DOES!
178
 
179
	Oh, sorry, I forgot. You get a "kdebug>" prompt.
180
 
181
> EXAMINE SYNC REGISTERS
182
 
183
	After forty minutes, you find nothing wrong with the
184
	registers.
185
 
186
> EXAMINE REGISTER 0x6000
187
 
188
	Register 0x6000 (FIFO watermarks) contains 0x0201
189
	(powerup default).
190
 
191
> WRITE 0x0200 TO REGISTER 0x6000
192
 
193
	This is one of the poorly documented registers. Are
194
	you sure you want to do this?
195
 
196
> YES
197
 
198
	The screen goes blank.
199
 
200
> WRITE 0x0201 TO REGISTER 0x6000
201
 
202
	You see a color BeOS desktop.
203
 
204
> WRITE 0x0202 TO REGISTER 0x6000
205
 
206
	The screen goes blank.
207
 
208
[ ...Many more iterations deleted... ]
209
 
210
> WRITE 0x1810 TO REGISTER 0x6000
211
 
212
	The pixel sparkles cease.
213
 
214
> MODIFY DRIVER TO WRITE 0x1810 to 0x6000 AND TEST
215
 
216
	You reboot the machine. You see a color BeOS
217
	desktop, sans pixel sparkles.
218
 
219
> ADD HARDWARE BLITTER SUPPORT TO DRIVER AND TEST
220
 
221
	You reboot the machine. You see a perfectly stable
222
	display of utter garbage with icons and text on top
223
	of it.
224
 
225
> FIX RECTANGLE CODE AND TEST
226
 
227
	You reboot the machine. You see a color BeOS desktop.
228
 
229
> DRAG WINDOW
230
 
231
	The screen turns blank.
232
 
233
> FIX BLITTING CODE AND TEST
234
 
235
	You can't see anything. If you proceed, you will
236
	likely be eaten by a Grue.
237
 
238
> REBOOT IN SAFE MODE, FIX BLITTING CODE, AND TEST
239
 
240
	You reboot the machine. A color BeOS desktop greets
241
	you.
242
 
243
> DRAG WINDOW
244
 
245
	The window moves, but leaves "dirt" behind it.
246
 
247
> READ DOCS ON BLITTER
248
 
249
	"The blit width register is set to the number of
250
	bytes copied per row." Your code reflects this
251
	statement.
252
 
253
> ADD FENCEPOST TO BLIT WIDTH AND TEST
254
 
255
	You reboot the machine. Windows now drag normally,
256
	except for some weirdness at the left edge of the
257
	screen.
258
 
259
> EXAMINE WEIRDNESS
260
 
261
	It looks as if the left four columns of pixels are
262
	being blitted 64 pixels too high.
263
 
264
> READ DOCS ON BLITTER
265
 
266
	There is nothing in the docs to explain this behavior.
267
 
268
> GO www.yoyodyne.com
269
 
270
	You are in a Web site.
271
 
272
	There are many links here.
273
 
274
> GO DEVELOPER SUPPORT
275
 
276
	There is no developer support here.
277
 
278
> READ DOCS ON SUPPORT
279
 
280
	There is nothing in the docs on how to get support.
281
 
282
> TALK TO BOSS
283
 
284
	Your boss gives you the e-mail address of the contact
285
	person at Yoyodyne.
286
 
287
> SEND MAIL DESCRIBING PROBLEM
288
 
289
	The e-mail disappears down the Ethernet port, on its
290
	way to yoyodyne.com.
291
 
292
> WAIT
293
 
294
	Time passes.
295
 
296
	You have new mail.
297
 
298
> READ MAIL
299
 
300
	You have 1 new message(s):
301
 
302
	From: john.smallberries@yoyodyne.com
303
	"Oh, yeah. That's a known bug. The official
304
	workaround is to copy those four pixel columns in
305
	software."
306
 
307
> WRITE SPECIAL CASE FOR BLITTING CODE AND TEST
308
 
309
	You reboot the machine. Windows now glide across
310
	the display like silk.
311
 
312
> TEST 15 BIT MODES
313
 
314
	All 15 bit modes work perfectly.
315
 
316
> TEST 16 BIT MODES
317
 
318
	All 16 bit modes work perfectly.
319
 
320
> TEST 32 BIT MODES
321
 
322
	The screen turns blank, then returns to the previous
323
	mode.
324
 
325
> READ DOCS ON DISPLAY DEPTHS
326
 
327
	"The following display depths are supported:
328
 
329
		0x00:	4 bits
330
		0x02:	8 bits
331
		0x04:	16 bits (RGB 555)
332
		0x05:	16 bits (RGB 565)
333
		0x06:	24 bits (RGB 888)
334
		0x08:	32 bits (xRGB 8888)"
335
 
336
> PRESS ALT-SYSRQ AND EXAMINE REGISTER
337
 
338
	The display depth register is set to 0x05.
339
 
340
> WRITE 0x08 TO REGISTER
341
 
342
	The display turns blank.
343
 
344
> WRITE 0x06 TO REGISTER
345
 
346
	You see a color BeOS desktop.
347
 
348
> WRITE MAIL DESCRIBING PROBLEM
349
 
350
	Nothing happens.
351
 
352
> ENTER 'c' AT DEBUGGER PROMPT AND WRITE MAIL
353
 
354
	The e-mail disappears down the Ethernet port, on its
355
	way to yoyodyne.com.
356
 
357
> WAIT
358
 
359
	Time passes.
360
 
361
	You have new mail.
362
 
363
> READ MAIL
364
 
365
	You have 1 new message(s):
366
 
367
	From: john.smallberries@yoyodyne.com
368
	"I just spoke to our hardware engineer, and he says
369
	that 32-bit modes don't really work all that well,
370
	and they should be avoided. 24-bit works fine,
371
	however."
372
 
373
> REMOVE 32 BIT SUPPORT FROM DRIVER AND TEST
374
 
375
	You reboot the machine. You have now have a
376
	functional accelerated BeOS desktop.
377
 
378
> CHECK DRIVER INTO SOURCE TREE
379
 
380
	You check in your new source files into the master
381
	source tree.
382
 
383
	You have broken the build.
384
 
385
	A dunce cap has appeared in your cube.
386
 
387
> FIX DEPENDENCY FILE AND CHECK IN
388
 
389
	The build is restored to its former glory.
390
 
391
	The dunce cap has vanished.
392
 
393
	You have new mail.
394
 
395
> READ MAIL
396
 
397
	You have 1 new message(s):
398
 
399
	From: baron@be.com
400
	"We're having trouble with the Yoyodyne driver in
401
	the QA lab. Can you look at it?"
402
 
403
> GO QA LAB
404
 
405
	You are in the QA Lab. Many machines on many
406
	shelves are here, running test programs. The Baron
407
	directs you to the misbehaving machine. Its screen
408
	is blank.
409
 
410
> TELNET INTO MACHINE
411
 
412
	A 'bash' shell prompt greets you.
413
 
414
> REMOVE FILE '/boot/home/config/settings/app_server_settings'
415
  AND REBOOT
416
 
417
	You reboot the machine. You see a perfectly
418
	functional 640*480 display.
419
 
420
	The Baron looks like he has something to say.
421
 
422
> TALK TO BARON
423
 
424
	He directs you to another machine. The monitor
425
	looks as if it can't quite sync to the card's
426
	signal.
427
 
428
> TELNET INTO MACHINE
429
 
430
	A 'bash' shell prompt greets you.
431
 
432
> REMOVE FILE '/boot/home/config/settings/app_server_settings'
433
  AND REBOOT
434
 
435
	Ha ha! That doesn't work this time! A sense of
436
	crushing defeat envelops you.
437
 
438
> DON'T EDITORIALIZE
439
 
440
	Sorry.
441
 
442
> EXAMINE MONITOR
443
 
444
	You are looking at a Flabloden 15ZF monitor.
445
 
446
> READ MONITOR DOCS
447
 
448
	"Congratulations on your purchase of a Flabloden
449
	15ZF monitor. Our products are fully compliant with
450
	VESA standards, including the VESA signalling and
451
	GTF specifications, assuring your monitor will work
452
	with whatever the hell graphics card you have
453
	installed..."
454
 
455
> GO www.vesa.org
456
 
457
	You are at the Video Electronics Standards
458
	Association's Web site.
459
 
460
	There are many links here.
461
 
462
	A Reporter from CNN visiting Jean-Louis wanders by.
463
	He glances in your cube.
464
 
465
> HIDE YOYODYNE DOCS!
466
 
467
	It is too late. The Reporter has seen the docs on
468
	your desk. A lightning bolt stabs out of the sky
469
	and through the ceiling, striking the Reporter,
470
	leaving only a smoking pile of ash.
471
 
472
> CLEAN UP ASH
473
 
474
	You dutifully clean up the Reporter's remains.
475
 
476
> SEARCH FOR GTF DOCS
477
 
478
	You find a link here named "VESA General Timing
479
	Formula."
480
 
481
> GO VESA GENERAL TIMING FORMULA
482
 
483
	A Troll bars your way. He is demanding tribute.
484
 
485
> EXAMINE TROLL
486
 
487
	He is big, strong, mean, ugly, pitiless, and
488
	unusually well dressed.
489
 
490
> EVADE TROLL
491
 
492
	Despite your best efforts, the Troll thwarts your
493
	attempts to evade him.
494
 
495
> TALK TO TROLL
496
 
497
	"THOU CANST NOT PASS LEST THOU PAYEST UNTO ME MY
498
	RIGHTFUL TRIBUTE!" thunders the Troll.
499
 
500
> EXPLAIN SITUATION TO TROLL
501
 
502
	The Troll ignores you.
503
 
504
> KILL TROLL
505
 
506
	You can't do that.
507
 
508
> DAMMIT!
509
 
510
	Now who's editorializing?
511
 
512
> PAY TRIBUTE
513
 
514
	Reluctantly, you hand over the required tribute.
515
	The Troll gives you a token so that you may pass
516
	this way again.
517
 
518
	Your wallet now contains $2500.
519
 
520
> GO VESA GENERAL TIMING FORMULA
521
 
522
	There is a file here. The description says it
523
	contains the algorithm for calculating sync timings
524
	for any display mode.
525
 
526
> DOWNLOAD FILE
527
 
528
	A copy of the file is now on your machine.
529
 
530
> READ FILE
531
 
532
	There is no PDF reader here.
533
 
534
> TRANSFER FILE TO LAPTOP AND READ
535
 
536
	After picking through some opaque language, you now
537
	understand the VESA GTF.
538
 
539
> ADD VESA GTF CODE TO DRIVER AND TEST
540
 
541
	You reboot the machine. The Flabloden 15ZF monitor
542
	now works perfectly.
543
 
544
	You have new mail.
545
 
546
> READ MAIL
547
 
548
	You have 2 new message(s):
549
 
550
	From: xf541ceuc8@aol.com
551
	"MAKE.MONEY.FAST! Hi, my name is Dave Rhodes..."
552
 
553
> DELETE MESSAGE, NEXT MESSAGE
554
 
555
	From: rjs@be.com
556
	"We're going to need AGP support on the Yoyodyne
557
	card so we can start on OpenGL acceleration. Can
558
	you help with that?"
559
 
560
> READ DOCS ON AGP
561
 
562
	Except for a few PCI configuration registers, there
563
	is no mention of AGP in the docs.
564
 
565
> GO developer.intel.com
566
 
567
	You are at Intel's developers' Web site.
568
 
569
	There are many links here.
570
 
571
> FIND AGP DOCS
572
 
573
	You find a single file named, "Accelerated Graphics
574
	Port Interface Specification (v2.0)".
575
 
576
> DOWNLOAD FILE TO LAPTOP AND READ
577
 
578
	AGP is an extension to PCI. Like a modern CPU's
579
	MMU, AGP uses a translation table (called a GART) to
580
	make disjoint blocks of system memory appear
581
	contiguous. Both the graphics card and the
582
	motherboard controller must be properly configured
583
	for AGP to work. The layout and function of the PCI
584
	AGP configuration registers are described only in
585
	general terms. Most of the rest of the document
586
	describes hardware implementation and signalling
587
	details.
588
 
589
> EXAMINE MOTHERBOARD IN MACHINE
590
 
591
	Your machine uses an Intel 440LX motherboard
592
	controller.
593
 
594
> GO developer.intel.com
595
 
596
	You are at Intel's developers' Web site.
597
 
598
	There are many links here.
599
 
600
> FIND 440LX DOCS
601
 
602
	You find a file named, "Intel 440LX AGPset: 82443LX
603
	PCI AGP Controller (PAC) Datasheet"
604
 
605
> DOWNLOAD FILE TO LAPTOP AND READ
606
 
607
	You now understand how to program the host's and
608
	graphics card's AGP control registers.
609
 
610
> ADD CODE ENABLING AGP 1X MODE TO DRIVER AND TEST
611
 
612
	You reboot the machine. Everything still works.
613
 
614
> ADD CODE ENABLING SIDEBAND ADDRESSING TO DRIVER AND TEST
615
 
616
	You reboot the machine. Everything still works.
617
 
618
> ADD CODE ENABLING GART TO DRIVER AND TEST
619
 
620
	You do not know how to create a GART.
621
 
622
> READ AGP DOCS ON GART
623
 
624
	"The specific layout of the GART is
625
	chipset-specific, and not documented here. GART
626
	manipulation is done via a miniport driver or HAL
627
	supplied with the chipset BIOS reference
628
	implementation."
629
 
630
> READ 440LX DOCS ON GART
631
 
632
	There is no description of the GART here.
633
 
634
> GO developer.intel.com
635
 
636
	You are at Intel's developers' Web site.
637
 
638
	There are many links here.
639
 
640
> FIND GART DOCS
641
 
642
	There are no GART docs here.
643
 
644
> SEARCH FOR OTHER AGP RESOURCES
645
 
646
	There is a link to the AGP Implementor's Forum, at
647
	www.agpforum.org.
648
 
649
> GO www.agpforum.org
650
 
651
	You are at the AGP Implementor's Forum Web site.
652
 
653
	There are many links here.
654
 
655
> FIND GART DOCS
656
 
657
	A Troll bars your way. He is demanding tribute.
658
 
659
> EVADE TROLL
660
 
661
	Despite your best efforts, the Troll thwarts your
662
	attempts to evade him.
663
 
664
> PAY TRIBUTE
665
 
666
	Reluctantly, you hand over the required tribute.
667
	The Troll gives you a token so that you may pass
668
	this way again.
669
 
670
	Your wallet is now empty.
671
 
672
> FIND GART DOCS
673
 
674
	There are no GART docs here. The Troll laughs
675
	uproariously.
676
 
677
> FIND ALL PROGRAMMING DOCS
678
 
679
	You find a file named, "System Software."
680
 
681
> DOWNLOAD FILE TO LAPTOP AND READ
682
 
683
	'ghostscript' reports: "This PDF file is encrypted
684
	and cannot be processed."
685
 
686
> CRASH LAPTOP BACK TO WINDOWS
687
 
688
	You close your XTerms, reboot the laptop, and in
689
	mere minutes, Windows is ready.
690
 
691
> OPEN "SYSTEM SOFTWARE" DOCS
692
 
693
	The PDF reader opens. This looks suspiciously like a
694
	Powerpoint slide.
695
 
696
> SEARCH DOCS FOR "GART"
697
 
698
	"GART manipulation is performed through the miniport
699
	driver and DirectX 5 extensions..."
700
 
701
> CURSE
702
 
703
	You heartily curse in a manner that comes only with
704
	long practice. Co-workers pop up from their cubes
705
	like prairie dogs.
706
 
707
> SCORE
708
 
709
	Out of a possible 127 points, you have a total score
710
	of 83 (65%).
711
 
712
> SAVE
713
 
714
	Your adventure has been saved...
715