From a77ce6f7b08a0a2fae59e3c2113ef54bed002ff5 Mon Sep 17 00:00:00 2001 From: Jason Bou-Samra <154414066+bou-samra@users.noreply.github.com> Date: Sun, 17 Mar 2024 12:27:48 +1100 Subject: [PATCH] bulk data dump initial commit --- README.md | 5 +- a.out | Bin 0 -> 17768 bytes fs-uae-full-2012271552-01.png | Bin 0 -> 2611 bytes playfield.c | 121 ++++++++++++++++++++++++++++++++++ 4 files changed, 125 insertions(+), 1 deletion(-) create mode 100644 a.out create mode 100644 fs-uae-full-2012271552-01.png create mode 100644 playfield.c diff --git a/README.md b/README.md index ff47f15..f58e74b 100644 --- a/README.md +++ b/README.md @@ -1 +1,4 @@ -# playfield \ No newline at end of file +This is a conversion of a piece of code from the Amiga Hardware Reference Manual - Second Printing - July 1986 (page 55) +under the heading "examples of forming basic playfields" +Essentially it is a translation of Motorola 68000 assembly to C language code, utilising SDL2 obviously instead of banging the metal directly to display the output. + diff --git a/a.out b/a.out new file mode 100644 index 0000000000000000000000000000000000000000..84434701c8a64dc9bcf67ef691ecd868c953ef52 GIT binary patch literal 17768 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 F0s!z%tVI9- literal 0 HcmV?d00001 diff --git a/playfield.c b/playfield.c new file mode 100644 index 0000000..2f640f9 --- /dev/null +++ b/playfield.c @@ -0,0 +1,121 @@ +/******************************************************** + ** FILENAME : playfield.c ** + ** AUTHOR : Jason Bou-Samra ** + ** : Paragon ** + ** DATE : 09/01/2023 ** + ** DESCRIPTION: amiga 1000 playfield example ** + ** NOTES : a recreation of the amiga 1000 ** + ** playfield example in C/SDL ** + ** CHANGES : see changes.txt ** + ********************************************************/ +/* to compile: cc name.c -lSDL2 -lm */ + +#include +#include +#include +#include + +int initSDL (void); +int shutdownSDL (void); +int do_playfield(void); + +bool quit = false; /* quit flag */ + +SDL_Window *window = NULL; +SDL_Renderer *sr; +SDL_Event event; + +int p1x, p2x, line; + +/* window paramaters */ +#define WIDTH 640 /* pixels */ +#define HEIGHT 512 /* pixels */ +#define TITLE "Playfield Example" /* window title */ + +int main (void) +{ + initSDL (); + SDL_RenderSetScale (sr, 2.0, 2.0); /* scale x2 */ + + while (quit == false) + { + + while (SDL_PollEvent (&event)) + { + if (event.type == SDL_QUIT || event.type == SDL_WINDOWEVENT_CLOSE) + { + quit = true; + } + } + if (quit) + { + break; + } + +do_playfield(); + + SDL_Delay(50); + } + shutdownSDL (); /* bye */ +} + +/* initialise SDL */ +int initSDL () +{ + SDL_Init (SDL_INIT_EVERYTHING); + +/* new window */ + window = SDL_CreateWindow (TITLE, /* title */ + SDL_WINDOWPOS_UNDEFINED, /* x pos */ + SDL_WINDOWPOS_UNDEFINED, /* w pos */ + WIDTH, /* width */ + HEIGHT, /* height */ + 0); /* Additional flag(s) */ + + /* deal with error */ + if (window == NULL) + { + fprintf (stderr, "SDL window failed to initialise: %s\n", + SDL_GetError ()); + return 1; + } + +/* creater renderer */ + sr = SDL_CreateRenderer (window, 0, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC); +} + +/* shutdown routine */ +int shutdownSDL () +{ + SDL_DestroyWindow (window); /* free memory */ + SDL_Quit (); /* shutdown entire sdl sub-systems */ + return 0; +} + +int do_playfield() +{ + SDL_SetRenderDrawColor (sr, 0xFF, 0x00, 0x00, 0xFF); /* background */ + SDL_RenderClear (sr); + SDL_SetRenderDrawColor (sr, 0xFF, 0xFF, 0x00, 0xFF); /* set pen colour*/ + +line=0; + for (int i=0; i<200; i++) // 200 lines +{ + p1x=0; p2x=7; + +for (int j=0; j<20; j++) // #FF00FF00 recreate pattern +{ + SDL_RenderDrawLine (sr, p1x, line, p2x, line); + + p2x=p2x+16; + p1x=p1x+16; +// printf("%i %i %i\n", line, p1x, p2x); +} + line=line+1; + } + SDL_RenderPresent (sr); +} + +/* author*/ +char author[] = { "amiga 1000 playfield example" }; +const char* text = "by commodore amiga inc.";