PIN3.doc

/*-------------------------------------------------------------------------------------------

                PINBALL, motherfucker!

                (Version 2, 'cause Computers BITE)

 

                (c) Jason David Ditmars 1997

-------------------------------------------------------------------------------------------*/

 

/* Input/Output definitions:

 

Sounds (PORTC)                                                                  Pussy Control (PORTA, PORTD)                    

quiet                                                       0xFC                       clit LED                                                  A:0x08

winner!                                                   0xFD                       vibrator D-to-A    bit 1                        A:0x10

disco soundtrack                                 0xFE                                                        bit 2                        A:0x20

spinner                                                   0xF8                                                        bit 3                        A:0x40

start-up                                                  0xF4                        cum/lube pump                                     D:0x04

spell C-U-M                                          0xEC

spell F-U-C-K                                        0xDC

bumpers 'n' drops                                 0xBC

loser                                                       0x7C

 

Outputs (PORTB)                                                                Inputs (PORTE)                                                   

score up                                                 0x01                        all C-U-M drops                                   0x01

score reset                                             0x02                        clit button (start)                                  0x02

C-U-M reset                                          0x04                        tits 'n' drops                                          0x04

ballhole solenoid                                  0x08                        K spinner                                               0x08

K light                                                    0x10                        F slot                                                      0x10

C light                                                    0x20                        U slot                                                     0x20

U light                                                    0x40                        C slot                                                      0x40

F light                                                     0x80                        lose ball switch                                     0x80

*/

 

#include "mytimer.h"

#include "mystdlib.h"

 

void wait(int);                                                       void score(int);

void fuckslots(unsigned char);                         void demo(void);

void cream(void);                                                void blinkfuck(int);

int rand(void);                                                      void srand(unsigned int);

int checkball(void);

near volatile int soundoff,thescore = 0;

 

void main(void){

                unsigned char inputs;

                hc11setup();

                while(1==1){

                                inputs = PORTE;

                                if (RTICntr > soundoff){                     /* back to soundtrack                         */

                                                if (thescore>50)

                                                                PORTC = 0xFD;    /* "Oh boy, you did it! "                     */

                                                else         PORTC = 0xFE;     /* otherwise disco                               */

                                }

                                if (PORTA != 0){

                                                if (PORTA == 0x60)

                                                                PORTA = 0x18;     /* run pussy by shifting 2 bits          */

                                                PORTA <<= 1;                      /* across port A                                   */

                                }

                                if ((inputs & 0x08) == 0){                    /* if K spinner...                                    */

                                                PORTB |= 0x11;                     /* score & K light                                */

                                                PORTC = 0xF8;                     /* "Goddamn you're good"                */

                                                RTICntr = 0; soundoff = 300;

                                                inputs = 0xFF;

                                }

                                else         PORTB &= 0xF0;                  /* score off                                            */

 

                                if ((inputs & 0x01) == 0){                    /* if C-U-M drops...                             */

                                                wait(200);

                                                PORTC = 0xEC;                    /* "You're gonna make.."                    */

                                                RTICntr = 0; soundoff = 750;

                                                score(10);                              /* rack 'em up!!                                     */

                                                PORTB |= 0x04;                     /* RESET C-U-M                                  */

                                                wait(100);

                                                PORTB &= 0xF0;

                                                cream();                                  /* ejaculate!                                          */

                                                inputs = 0xFF;

                                }

                                if ((inputs & 0x04) == 0){                    /* if TiTs or CUMdrops...                   */

                                                PORTC = 0xBC;                    /* "Oooh ah oh"                                  */

                                                RTICntr = 0; soundoff = 40;

                                                score(1);                                /* one lousy point                               */

                                                inputs = 0xFF;

                                }

                                if ((inputs & 0x10) == 0)                      /* F slot */

                                                fuckslots(0x80);

 

                                if ((inputs & 0x20) == 0)                      /* U slot */

                                                fuckslots(0x40);

 

                                if ((inputs & 0x40) == 0)                      /* C slot */

                                                fuckslots(0x20);

 

                                if ((inputs & 0x80) == 0){                    /* LOSER                                               */

                                                PORTC = 0x7C;                     /* you suck                                           */

                                                wait(800);

                                                demo();                                  /* run the demo 'til clit button            */

                                                PORTA = 0; PORTB = 0x04;               /* reset CUM                        */

                                                wait(50);

                                                PORTB = 0x02;                     /* reset score                                        */

                                                thescore = 0;

                                                wait(50);

                                                PORTB = 0x08;                     /* let ball through hole                        */

                                                wait(50);

                                                PORTD = 0x08;                     /* switch to low-current sol coil*/

                                                PORTB = 0; PORTC = 0xF4;               /* play BUGLE sound         */

                                                cream();                                  /* give em some cumlube                   */

                                                wait(400);

                                                PORTC = 0xFE;                     /* play disco soundtrack                    */

                                                while(checkball() == 1);       /* shoot your load!                              */

                                                PORTD = 0;

                                }

                }

}

 

void cream(void){                                                               /* spew cumlube!                                 */

                PORTD |= 0x04;

                wait(150);                                                               /* not too long or it will                      */

                PORTD &= 0xFB;                                                 /* get all over everything                   */

}

 

void fuckslots(unsigned char slot){

                int i;

                PORTB |= slot;

                score(3);

                if ((PORTB & 0xF0) == 0xF0){                            /* "F-U-C-K spells FUCK!"                */

                                PORTC = 0xDC;                                    /* "Fuck me harder..."                         */

                                RTICntr = 0; soundoff = 900;

                                score(20);                                              /* wow, jackpot                                    */

                                for(i=0;i<7;i++)                                     /* Blink F-U-C-K lights                       */

                                                blinkfuck(10);

                                PORTA = 0x18;                                     /* make that clit cherry red */

                }

}

 

void score(int points){                                                       /* yar dude, score!                               */

                int i;

                for(i=0;i<points;i++){

                                PORTB |= 0x01;                                     /* upsydaisy                                         */

                                wait(15);

                                PORTB &= 0xF0;

                                wait(8);

                                thescore++;

                }

}

 

void demo(void){                                                                 /* if she's just sitting there..               */

                int i=2,c; long j; unsigned char k;

                PORTB = 0x80;

                srand(thescore);

                while ((PORTE & 0x02) != 0){                             /* wait for START button                  */

                                if (PORTB == 0x10)

                                                PORTB = 0x80;

                                else         PORTB >>= 1;                      /* chase F-U-C-K lights                      */

                                j = RTICntr;

                                while((RTICntr < (j+30)) & ((PORTE & 0x02) != 0));

                                if ((i % 500) == 1){                                /* play a random quote every            */

                                                k = 0x01;                                 /* few minutes                                      */

                                                PORTC = (0xFC ^ (k <<= (rand() % 8)));           /* fat algorithm!    */

                                                if ((PORTC | 0x03) != 0){

                                                                if ((PORTC & 0x01) != 0)

                                                                                cream(); /* pour baby pour                                */

                                                                wait(1200);

                                                                PORTC = 0xFC;

                                                }

                                }

                                if ((i % 5) == 0){                                                    /* Blink clit, run vibe           */

                                                if ((PORTA & 0x78) == 0x78)

                                                                PORTA = 0;

                                                else{       k = ((PORTA >>= 3) + 1); /* add 1 and shift left             */

                                                                PORTA = (k <<= 3);

                                                }

                                }

                                if ((i % 2010) == 0){                                              /* get her a little wet            */

                                                PORTC = 0xFD;

                                                for(c=25;c>-50;c--)                               /* blink FUCK faster &       */

                                                                blinkfuck(c);                          /* faster & faster                  */

                                                PORTC = 0xBC;

                                                cream();                                                  /* cum here                           */

                                                PORTB = 0x80;

                                }

                                i++;

                }

}

 

void blinkfuck(int c){

                PORTB = 0xF0; PORTA = 0x78;

                if (c>0) wait(c*6);

                else wait(4);

                PORTB = 0; PORTA = 0;

                if (c>0) wait(c*5);

                else wait(4);

}

 

int checkball(void){                                                            /* makes sure you shoot your ball    */

                while((PORTE & 0x80) == 0);                             /* wait till switch goes off                  */           

                wait(100);                                                               /* debounce that sucker                     */

                if ((PORTE & 0x80) == 0)                                     /* check switch again                          */

                                return(1);

                else return(0);                                                       /* yeah I'm too lazy to build a            */

}                                                                                              /* 555, you nerd                                   */

 

void wait(int dur){

                long i = RTICntr;

                while(RTICntr < (dur+i));

}

 

/*-------------------------------------------------------------------------------------------

  ***       Yes, there are lots of magic numbers.

  ***

  ***       Props to: J.K.Reeder, A.T.Duffey, B.Dinkins&Kat H., Jimbo Brenner,

                Ronen Mintz, L.Wells, Tadd Fernee, Mas n' Pops, Steve Waldeck, D.Miller,

                Barbara DeGenevieve, Carolyn Ottmers, Shawn Decker, Ed Bennett,

                Jerry Saltz, Chris Bratton, Janis Plastics, Greg Mowery & CityNEON,

                Cupid's Treasures & Marilyn Star, and in the final hour -- Matt Akers

  ***

  ***   Keep bouncin'!

-------------------------------------------------------------------------------------------*/

BACK