Unofficial documentation for the Screen Blaster 2 screen enhancer on Atari Falcon 030 v 0.4 - 2003/09/26 0. Disclaimer ------------- This document describes the Screen Blaster 2. This is an unofficial document. The originals authors have nothing in common with this document, except the involved product. This document describes the Screen Blaster 2 as the author understands it. While every effort has been made to ensure that the contents of this document are accurate, the author does not guarantee that any portion of this document is actually correct. In addition, the author cannot be held responsible the consequences of the any use or misuse of the information contained in this document. 1. Introduction --------------- Screen Blaster 2 is a screen enhancer for Atari Falcon 030 computers. It can use standard Videl (Atari Falcon video chip) clocks of 25 MHz, 32 MHz and external clock to generate video modes. When run from the AUTO folder, the sblaster.prg installs a new cookie, plus some new vectors to setup enhanced video modes. 2. The cookie ------------- Its name is 'OSBL', and is a pointer to a function, which is used to control the ScreenBlaster. There are 6 functions than can be called (numbered 0 to 5, which lies in register D0 upon calling this function). The registers d3-d7/a2-a6 are preserved. 2.1 GetPath() -------------- Input: void Output: A0 = pointer to the sblaster.inf path (Ex: 'c:\auto\') 2.2 GetModes() -------------- Input: void Output: A0 = pointer to current videomode infos in memory A1 = pointer to first videomode infos in memory 2.3 SetVideoMode() ------------------ Input: A0 = pointer to videomode infos in memory Output: D0 = Screenblaster enabled status 2.4 GetStatus() --------------- Input: void Output: D0 = Screenblaster enabled status 2.5 SetVirtualScreen() ---------------------- Input: A0 = pointer to videomode infos in memory Output: void 2.6 GetFile() ------------- Input: void Output: A0 = pointer to the sblaster.inf file in memory 3. XBIOS functions ------------------ Vsetscreen() is allowed to change physical screen address, but changing screen mode is disabled. Vsetmode() return the current videomode. 4. Screenblaster sblaster.inf file ---------------------------------- First, you have a header: typedef struct { unsigned char id[24]; /* "OverScan Screenblaster" */ unsigned short dummy1 unsigned short mon_count; /* Number of monitor's names */ unsigned short dummy2[3]; unsigned short mode_count; /* Number of video modes */ unsigned short dummy3[10]; unsigned short clock; /* External clock number */ unsigned short dummy4[5]; unsigned long mon_info[4]; /* Info for each type of monitor */ } sblast2_inf_header_t; Then the monitor's names (mon_count times): typedef struct { unsigned char name[32]; } sblast2_name_t; Then the video mode descriptions (mode_count times): typedef struct { unsigned long next; /* Offset to next mode in memory, replaced by pointer in memory 0xffffffff is last video mode */ unsigned short dummy1; unsigned long offset_name; /* Offset to video mode name, replaced by pointer to it in memory */ unsigned short virt_width; /* Virtual width - 1 */ unsigned short virt_height; /* Virtual height - 1 */ unsigned short phys_width; /* Physical width - 1 */ unsigned short phys_height; /* Physical height - 1 */ unsigned short dummy2[2]; unsigned short bpp; /* Bits per pixel */ unsigned long colours; /* Number of colours */ unsigned short pitch; /* Length of line in bytes */ unsigned short dummy3; unsigned short hfreq; /* Horizontal frequency * 10 */ unsigned short vfreq; /* Vertical frequency * 10 */ unsigned short dummy4[18]; unsigned long offset_regs; /* Offset to video registers list, replaced by pointer to mode->num_regs in memory */ unsigned long dummy5; unsigned short num_regs; /* Number of video registers following */ sblast2_reg_t registers[]; /* Variable length array */ unsigned short dummy6[3]; sblast2_name_t name; /* Name of video mode */ } sblast2_mode_t; typedef struct { unsigned long address; /* Address of video register */ unsigned short value; /* Value of video register */ } sblast2_reg_t; -- Patrice Mandin http://membres.lycos.fr/pmandin/