diff --git a/gr-sim/Makefile b/gr-sim/Makefile new file mode 100644 index 00000000..91c84c9a --- /dev/null +++ b/gr-sim/Makefile @@ -0,0 +1,19 @@ +CC = gcc +CFLAGS = -Wall -O2 +LFLAGS = + +SDL_LIBS= `sdl-config --libs` +SDL_INCLUDE= `sdl-config --cflags` + +all: gr-sim + +gr-sim: gr-sim.o + $(CC) $(LFLAGS) $(SDL_LIBS) -o gr-sim gr-sim.o + +gr-sim.o: gr-sim.c + $(CC) $(CFLAGS) $(SDL_INCLUDE) -c gr-sim.c + +clean: + rm -f *~ *.o gr-sim + + diff --git a/gr-sim/README b/gr-sim/README new file mode 100644 index 00000000..409a1237 --- /dev/null +++ b/gr-sim/README @@ -0,0 +1,4 @@ +Apple II low-res graphics simulator in SDL + +Useful to prototype games, etc., before committing to 6502 assembly. + diff --git a/gr-sim/gr-sim.c b/gr-sim/gr-sim.c new file mode 100644 index 00000000..33c02c45 --- /dev/null +++ b/gr-sim/gr-sim.c @@ -0,0 +1,144 @@ +#include +#include +#include + +#include + +#define XSIZE 40 +#define YSIZE 48 + +#define PIXEL_X_SCALE 14 +#define PIXEL_Y_SCALE 8 + +static int xsize=XSIZE*PIXEL_X_SCALE; +static int ysize=YSIZE*PIXEL_Y_SCALE; + +static unsigned char framebuffer[XSIZE][YSIZE]; + +static int get_input(void) { + + SDL_Event event; + int keypressed; + + + while ( SDL_PollEvent(&event)) { + + switch(event.type) { + + case SDL_KEYDOWN: + keypressed=event.key.keysym.sym; + switch (keypressed) { + + case SDLK_ESCAPE: + return 'q'; + default: + return keypressed; + } + break; + + + case SDL_JOYBUTTONDOWN: + case SDL_JOYAXISMOTION: + default: + printf("Unknown input action!\n"); + break; + + } + } + + return 0; +} + + + + +static unsigned int color[16]={ + 0, /* 0 black */ + 0xe31e60, /* 1 magenta */ + 0x604ebd, /* 2 dark blue */ + 0xff44fd, /* 3 purple */ + 0x00a360, /* 4 dark green */ + 0x9c9c9c, /* 5 grey 1 */ + 0x14cffd, /* 6 medium blue */ + 0xd0c3ff, /* 7 light blue */ + 0x607203, /* 8 brown */ + 0xff6a3c, /* 9 orange */ + 0x9d9d9d, /* 10 grey 2 */ + 0xffa0d0, /* 11 pink */ + 0x14f53c, /* 12 bright green */ + 0xd0dd8d, /* 13 yellow */ + 0x72ffd0, /* 14 aqua */ + 0xffffff, /* 15 white */ +}; + +static int gr_to_screen(SDL_Surface *screen) { + + int x,y,i,j; + unsigned int *t_pointer; + + t_pointer=((Uint32 *)screen->pixels); + + for(y=0;y