Megafuck

Announce (tech) demos or games releases

Moderator: Mask of Destiny

Post Reply
snkenjoi
Newbie
Posts: 6
Joined: Thu Aug 06, 2009 9:36 am

Megafuck

Post by snkenjoi » Tue Aug 11, 2009 9:46 pm

Many thanks to Quadrescence for co-authoring this project with me.

Bored of BASIC? Confused by ASM? Sick of C?

Now you too can develop on the Megadrive/Genesis with the easy to learn brainfuck language!

Released under the WTFPL, Megafuck provides you with an interpreter with full support for all 8 (yes, 8!) brainfuck commands.

Image

Download

Code: Select all

/*  AUTH: Kirjava and Quadrescence
 *  DATE: 11 Aug 2009
 *  DESC: Fuck your brain, MD style!
 *
 *		Licensed under the WTFPL Version 2, which proceeds.
 *		   DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
 *				   Version 2, December 2004
 *
 * Copyright (C) 2009 Kirjava and Quadrescence
 * Everyone is permitted to copy and distribute verbatim or modified
 * copies of this license document, and changing it is allowed as long
 * as the name is changed. 
 *
 *			DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
 *   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
 *
 *  0. You just DO WHAT THE FUCK YOU WANT TO.
 */

#include "genesis.h"

#define charstr(_c) (buf[0]=(_c),buf)
#define in_ch(_p) (*(_p)=getChar())
#define out_ch(_p) ((*(_p)!='\n')?(VDP_drawText(APLAN, charstr(*(_p)), 0x8000, \
								   xcord=xcord%38+1, 3+(ycord=(ycord+xcord/38)%23)),0) \
								 :(VDP_drawText(APLAN, charstr(*(_p)), 0x8000, \
								   xcord=0, 3+(ycord++)%23),0))
#define MAX_MEM 8192
#define GRID_SIZE 2000
#define push(_x) (*++stack=(_x))
#define pop() (--stack,r)
#define peek() (*stack)
#define fall() depth++
#define rise() depth--
#define q *p
#define fucks VDP_fillTileRect
#define fuckz VDP_setTileRect
#define FUUUCK VDP_drawText
#define shits TILE_FONTINDEX

		char buf[2]={'\','\'};		 int xcord=0,ycord=0;	int interp(const char *str);	static void joyEvent(
	   u16 joy, u16 changed, u16	   state);void drawChar	(const char *str, u16 x, u16	y);char getChar();int 
	  x=0,y=0,				c=0,	 co_x=0,				 status=0;					   int			 codez
	 [GRID_SIZE						];char				  get_ch[1]					  ;int			main()
	{char*							 cmdz =				  " +-[]><.,"					;char			str
   [GRID_SIZE						  ];int				   I=0;						   JOY_setEventHandler(
   joyEvent);						  VDP_drawText			(APLAN,						 "Megafuck"	 ,0x8000
	,1,1);while(1)					 {wait(50);drawChar	  (&cmdz[c],	/*by:K+*/co_x+1,  y+3);if		(status)
		break;}if(					 codez[0]==9){		   FUUUCK			/*Q*/(APLAN,  "Needs "	   "moar "
		  "input",					 0x8000,				 1, 3);			  return 0;   }fucks		  (APLAN,
			 0, 1, 3,				  38, 25)				;while			  (codez[I]   !=9){		   switch
			  (codez[I])			   {case 1:				str[I]			  =43;break  ;case 2:		 str[I] 
			   =45;break;			  case 3:				 str[I]			  =91;break  ;case 4:		 str[I] 
				=93;break;			 case 5:				 str[I]			  =62;break  ;case 6:		 str[I] 
				 =60;break;			case 7:				 str[I]			  =46;break  ;case 8:		 str[I] 
				  =44;break;		   case 0:				 str[I]			  =32;break  ;}I++;}		  str[I] 
				   ='\';interp		(str);				  return				0;}char   getChar		  (){for
					 (status=2;		status				  ==2;)				wait(50)  ;fucks(		  APLAN,
					  0,1,2,38,1);	 return				  get_ch			  [0];}void   drawChar		 (const
					   char *str,u16   x, u16				  y){u16			   data[1];   data[0]=		 shits+ 
						(str[0] - 32); fuckz(				  APLAN,				  data,   0x8000,		  x,y,1,
						1);}int interp (const				  char				   *str){   char mem		[MAX_MEM
						],*nest[99],*r =mem,q				  =mem+				MAX_MEM/   2,**stack		= nest,
						 depth =0,ch;  strcpy				  (r,str)			 ;for(;(ch  =*r); r++	   ){ch-']'
						||(depth>1||   (r=q?peek			   ():pop			  ()),!depth  || rise())	  , ch-'['
					   ||fall()||	  push(r),				depth||				(q += (  ch=='+'),q	  -= (ch==
					 '-'),p +=(ch	  =='>'),p/*omgwtf is*/   -= (ch==/*going on?*/'<')),ch-  '.'||out_ch	(p),ch-','
					|| in_ch(p);}	  return 0;}static void   joyEvent(u16 joy, u16 changed,  u16 state)	  {int I=0;
				  if(!status){if	   ( changed  & state  &   BUTTON_START){codez[x]=c;while  (codez[x]	   !=0){x++;
				}codez[x] = 9;		 status=1;}  else if (   changed & state &  BUTTON_UP){  if(c>=8)		 c=1;else 
		  c++;}else if(changed		 & state & BUTTON_DOWN)  {if(c<=1) c=8;else c--;}else if (changed		 &state & 
	   BUTTON_RIGHT){if (c!=0)		 {codez[x] = c;c=codez   [x+1];x++;}}else if(changed  &   state &	   BUTTON_LEFT
	){if(x!=0){codez[x] =c;c		   =codez[x-1];x--;}}else  if (changed & state & BUTTON_A) {if(x>=0		&& c!=0 && 
  codez[x+1]==0){c=0;}}co_x			=x%38;I=x;y=0;while(I   >=38){y++;I-=38;}}if (status==2){if(c<10)	   c = 32;if 
(changed&state&BUTTON_START)		   {status=1;}  else if(   changed & state & BUTTON_UP){if (c>=122)c	  =32;else c++
;}else if(changed & state&			 BUTTON_DOWN){if(c<=32)  c=122;else c--;}get_ch[0]=c;VDP_drawText		  (APLAN, 
"Select a character to use"			" as input; ", 0x8000,  1, 2);VDP_drawText(APLAN,get_ch, 0x8000,		37, 2);}}

KanedaFr
Administrateur
Posts: 1127
Joined: Tue Aug 29, 2006 10:56 am
Contact:

Post by KanedaFr » Wed Aug 12, 2009 8:32 am

errr.....I really don't know waht to do with this post....

why don't you choose another name ?!!! and use this word everywhere ?!

Huge
Very interested
Posts: 197
Joined: Sat Dec 13, 2008 11:50 pm

Post by Huge » Wed Aug 12, 2009 3:35 pm

Wow, even the sourcecode looks like ascii art.
KanedaFr wrote:errr.....I really don't know waht to do with this post....

why don't you choose another name ?!!! and use this word everywhere ?!
It's an interpreter for a language called "Brainfuck"... you can't really name it much anything else.

Chilly Willy
Very interested
Posts: 2767
Joined: Fri Aug 17, 2007 9:33 pm

Post by Chilly Willy » Wed Aug 12, 2009 5:52 pm

It is ascii art - but it needs a monospaced font like courier to look right. As to the name, what else would you call the MegaDrive version of Brainfuck? I think the folks here are adult enough to not take this thread the wrong way. It's not like this is a thread on pron or anything similar.

I.S.T.
Interested
Posts: 11
Joined: Sat Sep 20, 2008 4:20 pm

Post by I.S.T. » Wed Aug 12, 2009 10:30 pm

You ported Brain****(Censored due to not many people here liking cursing) to the Genesis? Bravo.

Post Reply