Hmm, I don't have a complete demo screen or game yet. My test program simply splits the screen and displays a logo from a wandering scanline and leaving the TOS screen intact. In C it looks like this:
extern unsigned char Logo[];
long Mymain()
{
/* unsigned char *physbase = Physbase(); */
unsigned short *palette_copy;
unsigned char i;
for(i=0, palette_copy = (unsigned short *)&Logo[2]; i < 16; i++)
{
STEPlayfield_LowerScreen.palette[i] = *palette_copy++;
}
STEPlayfield_UpperScreen.start_of_screen = Physbase();
STEPlayfield_UpperScreen.palette[0] = *(unsigned short *)0xFFFF8240UL;
STEPlayfield_UpperScreen.palette[1] = *(unsigned short *)0xFFFF8242UL;
STEPlayfield_UpperScreen.palette[2] = *(unsigned short *)0xFFFF8244UL;
STEPlayfield_UpperScreen.palette[3] = *(unsigned short *)0xFFFF8246UL;
STEPlayfield_UpperScreen.palette[4] = *(unsigned short *)0xFFFF8248UL;
STEPlayfield_UpperScreen.palette[5] = *(unsigned short *)0xFFFF824AUL;
STEPlayfield_UpperScreen.palette[6] = *(unsigned short *)0xFFFF824CUL;
STEPlayfield_UpperScreen.palette[7] = *(unsigned short *)0xFFFF824EUL;
STEPlayfield_UpperScreen.palette[8] = *(unsigned short *)0xFFFF8250UL;
STEPlayfield_UpperScreen.palette[9] = *(unsigned short *)0xFFFF8252UL;
STEPlayfield_UpperScreen.palette[10] = *(unsigned short *)0xFFFF8254UL;
STEPlayfield_UpperScreen.palette[11] = *(unsigned short *)0xFFFF8256UL;
STEPlayfield_UpperScreen.palette[12] = *(unsigned short *)0xFFFF8258UL;
STEPlayfield_UpperScreen.palette[13] = *(unsigned short *)0xFFFF825AUL;
STEPlayfield_UpperScreen.palette[14] = *(unsigned short *)0xFFFF825CUL;
STEPlayfield_UpperScreen.palette[15] = *(unsigned short *)0xFFFF825EUL;
STEPlayfield_UpperScreen.linewid = 0;
STEPlayfield_UpperScreen.hscroll = 0;
Fill out the data structures, there is plenty of documentation in the header file and call the Install routine. Calling Uninstall resets the old Shifter settings and VBL/Timer B setups.