This is a small example on how to use Graphics 15+ with CC65
General Information
Author: Carsten Strotmann
Language: C
Compiler/Interpreter: cc65
Published: 2003
Download: Graphics 15plus/GRA.ATR
How to get 320x192 Pixel with 4 colors? (Idea: Mario Krix)
To get more colors in hi-res mode (Graphics 8 / Antic Mode $F, 320x192 1 Color), it is possible to mix it with the Graphics 15 Mode (160x192, 4 Colors, Antic Mode $F). This is done be changing the Antic Mode every line. On a normal CRT this lines will melt together.
To get an uniform background, we place 4 Players + 4 Missiles in the Background. The Screen Memory can be used as normal, either direct or through ATARI OS graphic commands.
/* -*- C -*- **************************************************************** * * Copyright 2003 Carsten Strotmann. * License GPL * * * System : cc65 ATARI Target * Module : * Object Name : $RCSfile: GraphicsFifteenPlusCC.txt,v $ * Revision : $Revision: 1.1 $ * Date : $Date: 2003/01/12 21:05:00 $ * Author : $Author: CarstenStrotmann $ * Created By : Carsten Strotmann * Created : Sun Jan 12 18:12:49 2003 * Last Modified : <030112.2152> * * Description Test ATARI Graphics 15+ Mode * * Notes * * History * * $Log: GraphicsFifteenPlusCC.txt,v $ * Revision 1.1 2003/01/12 21:05:00 CarstenStrotmann * none * * Revision 1.1 2003/01/12 21:03:00 CarstenStrotmann * none * * Revision 1.1 2003/01/12 20:59:58 CarstenStrotmann * none * * **************************************************************************** * * Copyright (c) 2003 Carsten Strotmann. * * All Rights Reserved. * ****************************************************************************/ #include <atari.h> #include <stdio.h> typedef unsigned word; typedef unsigned char byte; static void g15plus(void) { word dlvec; byte anticcmd; byte cnt; graphics(15); /* Graphics 15 + 16 */ dlvec = *(word*) 0x0230; /* Display List Startaddress */ cnt = 0; do { anticcmd = *(byte*) dlvec; if ((cnt & 0x01) == 1) /* ever odd line */ { if ((anticcmd & 0x0e) == 0x0e) { *(byte*) dlvec = anticcmd | 0x0f; /* change to Gr. 8 */ } } if ((anticcmd & 0x40) == 0x40) /* skip adress reload */ { dlvec++; dlvec++; } dlvec++; /* next line */ cnt++; } while (anticcmd != 0x41); /* enable background Player / Missile */ *(byte*) 0x022f = 0x2e; /* enable PM Graphics */ *(byte*) 0xd01d = 0; /* disable ANTIC Player & Missile */ *(word*) 0xd00D = 0xffff; /* all bits on Player 0+1 */ *(word*) 0xd00F = 0xffff; /* all bits on Player 2+3 */ *(byte*) 0xd011 = 0xff; /* all bits on Missiles */ *(word*) 0xd008 = 0x0303; /* Player 0+1 4xsize */ *(word*) 0xd00a = 0x0303; /* Player 2+3 4xsize */ *(byte*) 0xd00c = 0xff; /* all Missiles 4xsize */ *(byte*) 0xd000 = 0x30; /* Position Player */ *(byte*) 0xd001 = 0x50; *(byte*) 0xd002 = 0x70; *(byte*) 0xd003 = 0x90; *(byte*) 0xd004 = 0xB0; /* Position Missiles */ *(byte*) 0xd005 = 0xB8; *(byte*) 0xd006 = 0xC0; *(byte*) 0xd007 = 0xC8; *(word*) 0x2c0 = 0x0; /* Color of PM=background */ *(word*) 0x2c2 = 0x0; *(byte*) 0x026f = 1; /* player priority */ printf("Graphics 15+ Testscreen"); } int main(void) { g15plus(); getchar(); return(0); }