The TGI driver has a few Lynx-specific extensions.
 
-Calling tgi_ioctl(0, spr) will display a standard Lynx sprite on screen.
+Calling tgi_sprite(spr) or tgi_ioctl(0, spr) will display a standard Lynx
+sprite on screen.
 
-Calling tgi_ioctl(1, 0) will do a flip screen. If you decide to flip the
-screen then it may be a good idea to call the install-routine for the
-joystick to get that flipped too.
+Calling tgi_flip() or tgi_ioctl(1, 0) will do a flip screen.
 
-Calling tgi_ioctl(2, bgindex) will set the text background color to the index
-defined by bgindex. If bgindex is 0 then the background color is transparent.
+Calling tgi_setbgcolor(bgcolor) or tgi_ioctl(2, bgindex) will set the text
+background color to the index defined by bgindex. If bgindex is 0 then the
+background color is transparent.
+
+To set the framerate of the display hardware call tgi_setframerate(rate) or
+tgi_ioctl(3, rate). The supported framerates are 50, 60 and 75 frames per
+second. Actually there is no real reason to use anything else than 75 frames
+per second.
+
+To check if the drawing engine is busy with the previous swap you can
+call tgi_busy or tgi_ioctl(4, 0). It returns 0 if idle and 1 if busy
+
+To update displays you can call tgi_updatedisplay() or tgi_ioctl(4, 1) it
+will wait for the next VBL interrupt and set the draw buffer to the
+view buffer. The draw buffer is also changed to (drawbuffer xor 1).
+
+Set an address for a subroutine you want to call at every VBL by calling
+tgi_setvblhook(addr) or tgi_ioctl(5, addr).
 
 <sect1>Extended memory drivers<p>
 
 
 
 
 
+/*****************************************************************************/
+/*                                TGI extras                                 */
+/*****************************************************************************/
+
+
+
+#define tgi_sprite(spr) tgi_ioctl(0, (unsigned)(spr))
+#define tgi_flip() tgi_ioctl(1, 0)
+#define tgi_setbgcolor(bgcol) tgi_ioctl(2, (unsigned)(bgcol))
+#define tgi_setframerate(rate) tgi_ioctl(3, (unsigned)(rate))
+#define tgi_busy() tgi_ioctl(4, 0)
+#define tgi_updatedisplay() tgi_ioctl(4, 1)
+#define tgi_setvblhook(addr) tgi_ioctl(5, (unsigned)(addr))
+
+
+/*****************************************************************************/
+/*                           TGI extras                                      */
+/*****************************************************************************/
+
+#define tgi_sprite(spr) tgi_ioctl(0, (unsigned)(spr))
+#define tgi_flip() tgi_ioctl(1, 0)
+#define tgi_setbgcolor(bgcol) tgi_ioctl(2, (unsigned)(bgcol))
+#define tgi_setframerate(rate) tgi_ioctl(3, (unsigned)(rate))
+#define tgi_busy() tgi_ioctl(4, 0)
+#define tgi_updatedisplay() tgi_ioctl(4, 1)
+#define tgi_setvblhook(addr) tgi_ioctl(5, (unsigned)(addr))
+
 /* End of lynx.h */
 #endif
 
 
        pha
        cld
                jsr     callirq
+       lda     INTSET
+       sta     INTRST
        pla
        plx
        ply
 
 ;
 ; To set the frame rate for the display hardware call tgi_ioctl(3, rate)
 ;
-; To make a request for swapping the display buffers call tgi_ioctl(4, dataptr)
-; If the value of the char pointed to by the dataptr is 0 then fill in the
-; value of the char with the current state of the swap buffer 0 = idle, 1 = busy
-; If the value is not 0 then activate the swap function at next VBL interrupt
+; To check if the drawing engine is busy with the previous swap you can
+; call tgi_ioctl(4, 0). It returns 0 if idle and 1 if busy
+;
+; To update displays you can call tgi_ioctl(4, 1) it will wait for the
+; next VBL interrupt and swap draw and view buffers.
 ;
 ; Set an address for a subroutine you want to call at every VBL
 ; tgi_ioctl(5, hook)
         bne    IRQVBL
        clc                     ; Not a VBL interrupt - exit
        rts
-IRQVBL: sta    INTRST          ; Clear interrupt
+IRQVBL: 
        lda     SWAPREQUEST
-       bne     @L0
+       beq     @L0
        lda     DRAWPAGE
        jsr     SETVIEWPAGE
        lda     DRAWPAGE
        stz     SWAPREQUEST
 @L0:
        jsr     VBLHOOK
-       sec
+       clc
        rts
 
 ; ------------------------------------------------------------------------