Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Prosta gierka TV- do sprawdzenia

tomek_programista 29 Sie 2008 17:51 4461 52
  • #31 29 Sie 2008 17:51
    tomek_programista
    Poziom 19  

    a coś w bascom??

  • #33 29 Sie 2008 20:36
    Dr.Vee
    VIP Zasłużony dla elektroda

    Witam,

    Przecież od samego początku pisałeś, że chcesz kod mieć w C, albo nawet w C++ - a teraz nagle "degradacja" do bascoma? ;)

    Pozdrawiam,
    Dr.Vee

  • #34 30 Sie 2008 15:15
    tomek_programista
    Poziom 19  

    Bo c++ pod kontem avr jest trudny.

  • #35 30 Sie 2008 18:52
    biohack
    Poziom 16  

    Słuchajcie jesteśmy początkujący i potrzebujemy porady w jakim napisać języku gre np :odbijanie kuleczki deseczkami , to w jakim to by było języku ? BASCOM ? C++ ?

  • #36 30 Sie 2008 20:23
    tomek_programista
    Poziom 19  

    Wytłumaczył by mi ktoś ten kod linijka po linijce?

    Code:

     
    //video gen and sound
    //D.5 is sync:1000 ohm + diode to 75 ohm resistor
    //D.6 is video:330 ohm + diode to 75 ohm resistor 
    //B.3 is sound  and should have a 10k resistor to gnd

    #pragma regalloc-    //I allocate the registers myself
    #pragma optsize-     //optimize for speed
                       
    #include <Mega32.h>   
    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    #include <delay.h>   

    //cycles = 63.625 * 16 Note NTSC is 63.55
    //but this line duration makes each frame exactly 1/60 sec
    //which is nice for keeping a realtime clock
    #define lineTime 1018
     
    #define begin {
    #define end   }
    #define ScreenTop 30
    #define ScreenBot 230

    //NOTE that v1 to v8 and i must be in registers! 
    register char v1 @4;
    register char v2 @5;
    register char v3 @6;
    register char v4 @7;
    register char v5 @8;
    register char v6 @9;
    register char v7 @10;
    register char v8 @11;
    register int i @12;

    #pragma regalloc+

    char syncON, syncOFF;
    int LineCount;
    int time;

    //animation
    char x, y, s, vx, vy;

    char screen[1600], t, ts[10];
    char cu1[]="Cornell  ECE 4760";


    //Musical note values
    //C below middle C to  C above middle C
    //zeros are rests
    flash char notes[] = {239,213,189,179,159,142,126,
          120,106,94,90,80,71,63,60,0,0,0,0}; 
    char note, musicT;
                              
    //Point plot lookup table   
    //One bit masks
    flash char pos[8]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};         

          // 5x7 char set
    // Designed by:David Perez de la Cruz,and Ed Lau    
    // see: http://instruct1.cit.cornell.edu/courses/ee476/FinalProjects/s2005/dp93/index.html
    flash char ascii[128][7] = {
    //0
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    //1
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    //2
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    //3
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,




    //4
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    //5
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    //6
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    //7
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    //8
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    //9
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    //10
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    //11
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    //12
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    //13
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    //14
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    //15
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    //16
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    //17
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    //18
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    //19
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    //20
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    //21
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    //22
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    //23
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    //24
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    //25
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    //26
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    //27
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    //28
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    //29
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    //30
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    //31
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    //32 Space
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    //33 Exclamation !
    0b01100000,
    0b01100000,
    0b01100000,
    0b01100000,
    0b00000000,
    0b00000000,
    0b01100000,
    //34 Quotes "
    0b01010000,
    0b01010000,
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    //35 Number #
    0b00000000,
    0b01010000,
    0b11111000,
    0b01010000,
    0b11111000,
    0b01010000,
    0b00000000,
    //36 Dollars $
    0b01110000,
    0b10100000,
    0b10100000,
    0b01110000,
    0b00101000,
    0b00101000,
    0b01110000,
    //37 Percent %
    0b01000000,
    0b10101000,
    0b01010000,
    0b00100000,
    0b01010000,
    0b10101000,
    0b00010000,
    //38 Ampersand &
    0b00100000,
    0b01010000,
    0b10100000,
    0b01000000,
    0b10101000,
    0b10010000,
    0b01101000,
    //39 Single Quote '
    0b01000000,
    0b01000000,
    0b01000000,
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    //40 Left Parenthesis (
    0b00010000,
    0b00100000,
    0b01000000,
    0b01000000,
    0b01000000,
    0b00100000,
    0b00010000,
    //41 Right Parenthesis )
    0b01000000,
    0b00100000,
    0b00010000,
    0b00010000,
    0b00010000,
    0b00100000,
    0b01000000,
    //42 Star *
    0b00010000,
    0b00111000,
    0b00010000,
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    //43 Plus +
    0b00000000,
    0b00100000,
    0b00100000,
    0b11111000,
    0b00100000,
    0b00100000,
    0b00000000,
    //44 Comma ,
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    0b00010000,
    0b00010000,
    //45 Minus -
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    0b11111000,
    0b00000000,
    0b00000000,
    //46 Period .
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    0b00010000,
    // 47 Backslahs /
    0b00000000,
    0b00001000,
    0b00010000,
    0b00100000,
    0b01000000,
    0b10000000,
    0b00000000,
    // 48 Zero
    0b01110000,
    0b10001000,
    0b10011000,
    0b10101000,
    0b11001000,
    0b10001000,
    0b01110000,
    //49 One
    0b00100000,
    0b01100000,
    0b00100000,
    0b00100000,
    0b00100000,
    0b00100000,
    0b01110000, 
    //50 two
    0b01110000,
    0b10001000,
    0b00001000,
    0b00010000,
    0b00100000,
    0b01000000,
    0b11111000,
     //51 Three
    0b11111000,
    0b00010000,
    0b00100000,
    0b00010000,
    0b00001000,
    0b10001000,
    0b01110000,
    //52 Four
    0b00010000,
    0b00110000,
    0b01010000,
    0b10010000,
    0b11111000,
    0b00010000,
    0b00010000,
    //53 Five
    0b11111000,
    0b10000000,
    0b11110000,
    0b00001000,
    0b00001000,
    0b10001000,
    0b01110000,
    //54 Six
    0b01000000,
    0b10000000,
    0b10000000,
    0b11110000,
    0b10001000,
    0b10001000,
    0b01110000,
    //55 Seven
    0b11111000,
    0b00001000,
    0b00010000,
    0b00100000,
    0b01000000,
    0b10000000,
    0b10000000,
    //56 Eight
    0b01110000,
    0b10001000,
    0b10001000,
    0b01110000,
    0b10001000,
    0b10001000,
    0b01110000,
    //57 Nine
    0b01110000,
    0b10001000,
    0b10001000,
    0b01111000,
    0b00001000,
    0b00001000,
    0b00010000,
    //58 :
    0b00000000,
    0b00000000,
    0b00100000,
    0b00000000,
    0b00000000,
    0b00000000,
    0b00100000,
    //59 ;
    0b00000000,
    0b00000000,
    0b00100000,
    0b00000000,
    0b00000000,
    0b00100000,
    0b00100000,
    //60 <
    0b00000000,
    0b00011000,
    0b01100000,
    0b10000000,
    0b01100000,
    0b00011000,
    0b00000000,
    //61 =
    0b00000000,
    0b00000000,
    0b01111000,
    0b00000000,
    0b01111000,
    0b00000000,
    0b00000000,
    //62 >
    0b00000000,
    0b11000000,
    0b00110000,
    0b00001000,
    0b00110000,
    0b11000000,
    0b00000000,
    //63 ?
    0b00110000,
    0b01001000,
    0b00010000,
    0b00100000,
    0b00100000,
    0b00000000,
    0b00100000,
    //64 @
    0b01110000,
    0b10001000,
    0b10111000,
    0b10101000,
    0b10010000,
    0b10001000,
    0b01110000,
    //65 A
    0b01110000,
    0b10001000,
    0b10001000,
    0b10001000,
    0b11111000,
    0b10001000,
    0b10001000,
    //B
    0b11110000,
    0b10001000,
    0b10001000,
    0b11110000,
    0b10001000,
    0b10001000,
    0b11110000,
    //C
    0b01110000,
    0b10001000,
    0b10000000,
    0b10000000,
    0b10000000,
    0b10001000,
    0b01110000,
    //D
    0b11110000,
    0b10001000,
    0b10001000,
    0b10001000,
    0b10001000,
    0b10001000,
    0b11110000,
    //E
    0b11111000,
    0b10000000,
    0b10000000,
    0b11111000,
    0b10000000,
    0b10000000,
    0b11111000,
    //F
    0b11111000,
    0b10000000,
    0b10000000,
    0b11111000,
    0b10000000,
    0b10000000,
    0b10000000,
    //G
    0b01110000,
    0b10001000,
    0b10000000,
    0b10011000,
    0b10001000,
    0b10001000,
    0b01110000,
    //H
    0b10001000,
    0b10001000,
    0b10001000,
    0b11111000,
    0b10001000,
    0b10001000,
    0b10001000,
    //I
    0b01110000,
    0b00100000,
    0b00100000,
    0b00100000,
    0b00100000,
    0b00100000,
    0b01110000,
    //J
    0b00111000,
    0b00010000,
    0b00010000,
    0b00010000,
    0b00010000,
    0b10010000,
    0b01100000,
    //K
    0b10001000,
    0b10010000,
    0b10100000,
    0b11000000,
    0b10100000,
    0b10010000,
    0b10001000,
    //L
    0b10000000,
    0b10000000,
    0b10000000,
    0b10000000,
    0b10000000,
    0b10000000,
    0b11111000,
    //M
    0b10001000,
    0b11011000,
    0b10101000,
    0b10101000,
    0b10001000,
    0b10001000,
    0b10001000,
    //N
    0b10001000,
    0b10001000,
    0b11001000,
    0b10101000,
    0b10011000,
    0b10001000,
    0b10001000,
    //O
    0b01110000,
    0b10001000,
    0b10001000,
    0b10001000,
    0b10001000,
    0b10001000,
    0b01110000,
    //P
    0b11110000,
    0b10001000,
    0b10001000,
    0b11110000,
    0b10000000,
    0b10000000,
    0b10000000,
    //Q
    0b01110000,
    0b10001000,
    0b10001000,
    0b10001000,
    0b10101000,
    0b10010000,
    0b01101000,
    //R
    0b11110000,
    0b10001000,
    0b10001000,
    0b11110000,
    0b10100000,
    0b10010000,
    0b10001000,
    //S
    0b01111000,
    0b10000000,
    0b10000000,
    0b01110000,
    0b00001000,
    0b00001000,
    0b11110000,
    //T
    0b11111000,
    0b00100000,
    0b00100000,
    0b00100000,
    0b00100000,
    0b00100000,
    0b00100000,
    //U
    0b10001000,
    0b10001000,
    0b10001000,
    0b10001000,
    0b10001000,
    0b10001000,
    0b01110000,
    //V
    0b10001000,
    0b10001000,
    0b10001000,
    0b10001000,
    0b10001000,
    0b01010000,
    0b00100000,
    //W
    0b10001000,
    0b10001000,
    0b10001000,
    0b10101000,
    0b10101000,
    0b10101000,
    0b01010000,
    //X
    0b10001000,
    0b10001000,
    0b01010000,
    0b00100000,
    0b01010000,
    0b10001000,
    0b10001000,
    //Y
    0b10001000,
    0b10001000,
    0b10001000,
    0b01010000,
    0b00100000,
    0b00100000,
    0b00100000,
    //Z
    0b11111000,
    0b00001000,
    0b00010000,
    0b00100000,
    0b01000000,
    0b10000000,
    0b11111000,
    //91 [
    0b11100000,
    0b10000000,
    0b10000000,
    0b10000000,
    0b10000000,
    0b10000000,
    0b11100000,
    //92 \
    0b00000000,
    0b10000000,
    0b01000000,
    0b00100000,
    0b00010000,
    0b00001000,
    0b00000000,
    //93 ]
    0b00111000,
    0b00001000,
    0b00001000,
    0b00001000,
    0b00001000,
    0b00001000,
    0b00111000,
    //94 ^
    0b00100000,
    0b01010000,
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    //95 _
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    0b11111000,
    //96 `
    0b10000000,
    0b01000000,
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    //97 a
    0b00000000,
    0b01100000,
    0b00010000,
    0b01110000,
    0b10010000,
    0b01100000,
    0b00000000,
    //98 b
    0b10000000,
    0b10000000,
    0b11100000,
    0b10010000,
    0b10010000,
    0b11100000,
    0b00000000,
    //99 c
    0b00000000,
    0b00000000,
    0b01110000,
    0b10000000,
    0b10000000,
    0b01110000,
    0b00000000,
    // 100 d
    0b00010000,
    0b00010000,
    0b01110000,
    0b10010000,
    0b10010000,
    0b01110000,
    0b00000000,
    //101 e
    0b00000000,
    0b01100000,
    0b10010000,
    0b11110000,
    0b10000000,
    0b01110000,
    0b00000000,
    //102 f
    0b00110000,
    0b01000000,
    0b11100000,
    0b01000000,
    0b01000000,
    0b01000000,
    0b00000000,
    //103 g
    0b00000000,
    0b01100000,
    0b10010000,
    0b01110000,
    0b00010000,
    0b00010000,
    0b01100000,
    //104 h
    0b10000000,
    0b10000000,
    0b11100000,
    0b10010000,
    0b10010000,
    0b10010000,
    0b00000000,
    //105 i
    0b00000000,
    0b00100000,
    0b00000000,
    0b00100000,
    0b00100000,
    0b00100000,
    0b00000000,
    //106 j
    0b00000000,
    0b00010000,
    0b00000000,
    0b00010000,
    0b00010000,
    0b00010000,
    0b01100000,
    //107 k
    0b10000000,
    0b10010000,
    0b10100000,
    0b11000000,
    0b10100000,
    0b10010000,
    0b00000000,
    //108 l
    0b01000000,
    0b01000000,
    0b01000000,
    0b01000000,
    0b01000000,
    0b01000000,
    0b00000000,
    //109 m
    0b00000000,
    0b00000000,
    0b01010000,
    0b10101000,
    0b10101000,
    0b10101000,
    0b00000000,
    //110 n
    0b00000000,
    0b00000000,
    0b01100000,
    0b10010000,
    0b10010000,
    0b10010000,
    0b00000000,
    //111 o
    0b00000000,
    0b00000000,
    0b01100000,
    0b10010000,
    0b10010000,
    0b01100000,
    0b00000000,
    //112 p
    0b00000000,
    0b00000000,
    0b01100000,
    0b10010000,
    0b11110000,
    0b10000000,
    0b10000000,
    //113 q
    0b00000000,
    0b00000000,
    0b01100000,
    0b10010000,
    0b11110000,
    0b00010000,
    0b00010000,
    //114 r
    0b00000000,
    0b00000000,
    0b00111000,
    0b01000000,
    0b01000000,
    0b01000000,
    0b00000000,
    //115 s
    0b00000000,
    0b00000000,
    0b01110000,
    0b01000000,
    0b00010000,
    0b01110000,
    0b00000000,
    //116 t
    0b01000000,
    0b01000000,
    0b11100000,
    0b01000000,
    0b01000000,
    0b01000000,
    0b00000000,
    // 117u
    0b00000000,
    0b00000000,
    0b10010000,
    0b10010000,
    0b10010000,
    0b01100000,
    0b00000000,
    //118 v
    0b00000000,
    0b00000000,
    0b10001000,
    0b10001000,
    0b01010000,
    0b00100000,
    0b00000000,
    //119 w
    0b00000000,
    0b00000000,
    0b10101000,
    0b10101000,
    0b01010000,
    0b01010000,
    0b00000000,
    //120 x
    0b00000000,
    0b00000000,
    0b10010000,
    0b01100000,
    0b01100000,
    0b10010000,
    0b00000000,
    //121 y
    0b00000000,
    0b00000000,
    0b10010000,
    0b10010000,
    0b01100000,
    0b01000000,
    0b10000000,
    //122z
    0b00000000,
    0b00000000,
    0b11110000,
    0b00100000,
    0b01000000,
    0b11110000,
    0b00000000,
    //123 {
    0b00100000,
    0b01000000,
    0b01000000,
    0b10000000,
    0b01000000,
    0b01000000,
    0b00100000,
    //124 |
    0b00100000,
    0b00100000,
    0b00100000,
    0b00100000,
    0b00100000,
    0b00100000,
    0b00100000,
    //125 }
    0b00100000,
    0b00010000,
    0b00010000,
    0b00001000,
    0b00010000,
    0b00010000,
    0b00100000,
    //126 ~
    0b00000000,
    0b00000000,
    0b01000000,
    0b10101000,
    0b00010000,
    0b00000000,
    0b00000000,
    //127 DEL
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000};    
    //==================================
    //================================
    //3x5 font numbers, then letters
    //packed two per definition for fast
    //copy to the screen at x-position divisible by 4
    flash char smallbitmap[39][5]={
       //0
        0b11101110,
       0b10101010,
       0b10101010,
       0b10101010,
       0b11101110,
       //1
       0b01000100,
       0b11001100,
       0b01000100,
       0b01000100,
       0b11101110,
       //2
       0b11101110,
       0b00100010,
       0b11101110,
       0b10001000,
       0b11101110,
       //3
       0b11101110,
       0b00100010,
       0b11101110,
       0b00100010,
       0b11101110,
       //4
       0b10101010,
       0b10101010,
       0b11101110,
       0b00100010,
       0b00100010,
       //5
       0b11101110,
       0b10001000,
       0b11101110,
       0b00100010,
       0b11101110,
       //6
       0b11001100,
       0b10001000,
       0b11101110,
       0b10101010,
       0b11101110,
       //7
       0b11101110,
       0b00100010,
       0b01000100,
       0b10001000,
       0b10001000,
       //8
       0b11101110,
       0b10101010,
       0b11101110,
       0b10101010,
       0b11101110,
       //9
       0b11101110,
       0b10101010,
       0b11101110,
       0b00100010,
       0b01100110,
       //:
       0b00000000,
       0b01000100,
       0b00000000,
       0b01000100,
       0b00000000,
       //=
       0b00000000,
       0b11101110,
       0b00000000,
       0b11101110,
       0b00000000,
       //blank
       0b00000000,
       0b00000000,
       0b00000000,
       0b00000000,
       0b00000000,
       //A
       0b11101110,
       0b10101010,
       0b11101110,
       0b10101010,
       0b10101010,
       //B
       0b11001100,
       0b10101010,
       0b11101110,
       0b10101010,
       0b11001100,
       //C
       0b11101110,
       0b10001000,
       0b10001000,
       0b10001000,
       0b11101110,
       //D
       0b11001100,
       0b10101010,
       0b10101010,
       0b10101010,
       0b11001100,
       //E
       0b11101110,
       0b10001000,
       0b11101110,
       0b10001000,
       0b11101110,
       //F
       0b11101110,
       0b10001000,
       0b11101110,
       0b10001000,
       0b10001000,
       //G
       0b11101110,
       0b10001000,
       0b10001000,
       0b10101010,
       0b11101110,
       //H
       0b10101010,
       0b10101010,
       0b11101110,
       0b10101010,
       0b10101010,
       //I
       0b11101110,
       0b01000100,
       0b01000100,
       0b01000100,
       0b11101110,
       //J
       0b00100010,
       0b00100010,
       0b00100010,
       0b10101010,
       0b11101110,
       //K
       0b10001000,
       0b10101010,
       0b11001100,
       0b11001100,
       0b10101010,
       //L
       0b10001000,
       0b10001000,
       0b10001000,
       0b10001000,
       0b11101110,
       //M
       0b10101010,
       0b11101110,
       0b11101110,
       0b10101010,
       0b10101010,
       //N
       0b00000000,
       0b11001100,
       0b10101010,
       0b10101010,
       0b10101010,
       //O
       0b01000100,
       0b10101010,
       0b10101010,
       0b10101010,
       0b01000100,
       //P
       0b11101110,
       0b10101010,
       0b11101110,
       0b10001000,
       0b10001000,
       //Q
       0b01000100,
       0b10101010,
       0b10101010,
       0b11101110,
       0b01100110,
       //R
       0b11101110,
       0b10101010,
       0b11001100,
       0b11101110,
       0b10101010,
       //S
       0b11101110,
       0b10001000,
       0b11101110,
       0b00100010,
       0b11101110,
       //T
       0b11101110,
       0b01000100,
       0b01000100,
       0b01000100,
       0b01000100,
       //U
       0b10101010,
       0b10101010,
       0b10101010,
       0b10101010,
       0b11101110,
       //V
       0b10101010,
       0b10101010,
       0b10101010,
       0b10101010,
       0b01000100,
       //W
       0b10101010,
       0b10101010,
       0b11101110,
       0b11101110,
       0b10101010,
       //X
       0b00000000,
       0b10101010,
       0b01000100,
       0b01000100,
       0b10101010,
       //Y
       0b10101010,
       0b10101010,
       0b01000100,
       0b01000100,
       0b01000100,
       //Z
       0b11101110,
       0b00100010,
       0b01000100,
       0b10001000,
       0b11101110
       };
       
    //==================================
    //This is the sync generator and raster generator. It MUST be entered from
    //sleep mode to get accurate timing of the sync pulses
    #pragma warn-
    interrupt [TIM1_COMPA] void t1_cmpA(void) 
    begin
      //start the Horizontal sync pulse   
      PORTD = syncON;     
      //update the curent scanline number
      LineCount ++ ;   
      //begin inverted (Vertical) synch after line 247
      if (LineCount==248)
      begin
        syncON = 0b00100000;
        syncOFF = 0;
      end
      //back to regular sync after line 250
      if (LineCount==251)   
      begin
        syncON = 0;
        syncOFF = 0b00100000;
      end 
      //start new frame after line 262
      if (LineCount==263)
      begin
         LineCount = 1;
      end 
     
      delay_us(2); //adjust to make 5 us pulses
      //end sync pulse
      PORTD = syncOFF;   
     
      if (LineCount<ScreenBot && LineCount>=ScreenTop)
        begin
           
           //compute byte index for beginning of the next line
           //left-shift 4 would be individual lines
           // <<3 means line-double the pixels
           //The 0xfff8 truncates the odd line bit
           //i=(LineCount-ScreenTop)<<3 & 0xfff8; //
           
           #asm
           push r16
           lds   r12, _LineCount
           lds   r13, _Linecount+1
           ldi   r16, 30
           sub  r12, r16
           ldi  r16,0
           sbc  r13, r16
           lsl  r12
           rol  r13
           lsl  r12
           rol  r13
           lsl  r12   
           rol  r13
           mov  r16,r12
           andi r16,0xf0
           mov  r12,r16
           pop r16
           #endasm
           
           //load 16 registers with screen info
           #asm
           push r14
           push r15
           push r16
           push r17
           push r18
           push r19
           push r26
           push r27
           
           ldi  r26,low(_screen)   ;base address of screen
           ldi  r27,high(_screen)   
           add  r26,r12            ;offset into screen (add i)
           adc  r27,r13
           ld   r4,x+             ;load 16 registers and inc pointer
           ld   r5,x+
           ld   r6,x+ 
           ld   r7,x+
           ld   r8,x+
           ld   r9,x+
           ld   r10,x+ 
           ld   r11,x+
           ld   r12,x+
           ld   r13,x+
           ld   r14,x+ 
           ld   r15,x+
           ld   r16,x+   
           ld   r17,x+ 
           ld   r18,x+
           ld   r19,x
           
           pop  r27
           pop  r26
           #endasm 

           delay_us(4);  //adjust to center image on screen
           
           //blast 16 bytes to the screen   
           #asm
           ;but first a macro to make the code shorter 
           ;the macro takes a register number as a parameter
           ;and dumps its bits serially to portD.6   
           ;the nop can be eliminated to make the display narrower
           .macro videobits ;regnum
            BST  @0,7
       IN   R30,0x12
       BLD  R30,6
       nop
       OUT  0x12,R30 
       
       BST  @0,6
       IN   R30,0x12
       BLD  R30,6
       nop
       OUT  0x12,R30
       
       BST  @0,5
       IN   R30,0x12
       BLD  R30,6
       nop
       OUT  0x12,R30
       
       BST  @0,4
       IN   R30,0x12
       BLD  R30,6
       nop
       OUT  0x12,R30
       
       BST  @0,3
       IN   R30,0x12
       BLD  R30,6
       nop
       OUT  0x12,R30
       
       BST  @0,2
       IN   R30,0x12
       BLD  R30,6
       nop
       OUT  0x12,R30
       
       BST  @0,1
       IN   R30,0x12
       BLD  R30,6
       nop
       OUT  0x12,R30
       
       BST  @0,0
       IN   R30,0x12
       BLD  R30,6
       nop
       OUT  0x12,R30
           .endm     
           
       videobits r4 ;video line -- byte 1
            videobits r5 ;byte 2 
            videobits r6 ;byte 3
            videobits r7 ;byte 4
            videobits r8 ;byte 5
            videobits r9 ;byte 6
            videobits r10 ;byte 7
            videobits r11 ;byte 8
            videobits r12 ;byte 9
            videobits r13 ;byte 10 
            videobits r14 ;byte 11
            videobits r15 ;byte 12
            videobits r16 ;byte 13
            videobits r17 ;byte 14
            videobits r18 ;byte 15
            videobits r19 ;byte 16
       clt   ;clear video after the last pixel on the line
       IN   R30,0x12
       BLD  R30,6
       OUT  0x12,R30
                            
           pop r19
           pop r18
           pop r17
           pop r16 
           pop r15
           pop r14
           #endasm
                 
        end         
    end 
    #pragma warn+

    //==================================
    //plot one point
    //at x,y with color 1=white 0=black 2=invert
    #pragma warn-
    void video_pt(char x, char y, char c)
    begin   
       
       #asm
       ;  i=(x>>3) + ((int)y<<4) ;   the byte with the pixel in it

       push r16
       ldd r30,y+2       ;get x
       lsr r30
       lsr r30
       lsr r30           ;divide x by 8
       ldd r12,y+1       ;get y
              lsl r12           ;mult y by 16
              clr r13
       lsl r12
       rol r13
       lsl r12
       rol r13
       lsl r12
       rol r13
       add r12, r30        ;add in x/8
       
       ;v2 = screen[i];   r5
            ;v3 = pos[x & 7];  r6
       ;v4 = c            r7
       ldi r30,low(_screen)
       ldi r31,high(_screen)
       add r30, r12
       adc r31, r13
       ld r5,Z        ;get screen byte
       ldd r26,y+2       ;get x
       ldi r27,0
       andi r26,0x07           ;form x & 7
       ldi r30,low(_pos*2) 
       ldi r31,high(_pos*2)
       add r30,r26
       adc r31,r27
       lpm r6,Z
       ld r16,y       ;get c
           
           ;if (v4==1) screen[i] = v2 | v3 ;
           ;if (v4==0) screen[i] = v2 & ~v3;
           ;if (v4==2) screen[i] = v2 ^ v3 ;
           
           cpi r16,1
           brne tst0
           or  r5,r6
           tst0:
           cpi r16,0
           brne tst2
           com r6
           and r5,r6
           tst2:
           cpi r16,2
           brne writescrn
           eor r5,r6
           writescrn:
              ldi r30,low(_screen)
       ldi r31,high(_screen)
       add r30, r12
       adc r31, r13
       st Z, r5           ;write the byte back to the screen
       
       pop r16
       #endasm
           
    end
    #pragma warn+

    //==================================
    // put a big character on the screen
    // c is index into bitmap
    void video_putchar(char x, char y, char c) 
    begin
        v7 = x;
        for (v6=0;v6<7;v6++)
        begin
            v1 = ascii[c][v6];
            v8 = y+v6;
            video_pt(v7,   v8, (v1 & 0x80)==0x80); 
            video_pt(v7+1, v8, (v1 & 0x40)==0x40);
            video_pt(v7+2, v8, (v1 & 0x20)==0x20);
            video_pt(v7+3, v8, (v1 & 0x10)==0x10);
            video_pt(v7+4, v8, (v1 & 0x08)==0x08);
        end
    end

    //==================================
    // put a string of big characters on the screen
    void video_puts(char x, char y, char *str)
    begin
       char i ;
       for (i=0; str[i]!=0; i++)
       begin 
          video_putchar(x,y,str[i]) ;
          x = x+6;
       end
    end
         
    //==================================
    // put a small character on the screen
    // x-cood must be on divisible by 4
    // c is index into bitmap
    void video_smallchar(char x, char y, char c) 
    begin
       char mask;
       i=((int)x>>3) + ((int)y<<4) ;
       if (x == (x & 0xf8)) mask = 0x0f;     //f8
       else mask = 0xf0;
       
       screen[i] =    (screen[i] & mask) | (smallbitmap[c][0] & ~mask);
          screen[i+16] = (screen[i+16] & mask) | (smallbitmap[c][1] & ~mask);
            screen[i+32] = (screen[i+32] & mask) | (smallbitmap[c][2] & ~mask);
            screen[i+48] = (screen[i+48] & mask) | (smallbitmap[c][3] & ~mask);
          screen[i+64] = (screen[i+64] & mask) | (smallbitmap[c][4] & ~mask);
    end 

    //==================================
    // put a string of small characters on the screen
    // x-cood must be on divisible by 4
    void video_putsmalls(char x, char y, char *str)
    begin
       char i ;
       x = x & 0b1111100 ; //make it divisible by 4
       for (i=0; str[i]!=0; i++)
       begin 
          if (str[i]>=0x30 && str[i]<=0x3a)
             video_smallchar(x,y,str[i]-0x30);
          else video_smallchar(x,y,str[i]-0x40+12);
          x = x+4;   
       end
    end
           
    //==================================
    //plot a line
    //at x1,y1 to x2,y2 with color 1=white 0=black 2=invert
    //NOTE: this function requires signed chars   
    //Code is from David Rodgers,
    //"Procedural Elements of Computer Graphics",1985
    void video_line(char x1, char y1, char x2, char y2, char c)
    begin   
       int e;
       signed char dx,dy,j, temp;
       signed char s1,s2, xchange;
            signed char x,y;
           
       x = x1;
       y = y1;
       dx = cabs(x2-x1);
       dy = cabs(y2-y1);
       s1 = csign(x2-x1);
       s2 = csign(y2-y1);
       xchange = 0;   
       if (dy>dx)
       begin
          temp = dx;
          dx = dy;
          dy = temp;
          xchange = 1;
       end
       e = ((int)dy<<1) - dx;   
       for (j=0; j<=dx; j++)
       begin
          video_pt(x,y,c) ;
          if (e>=0)
          begin
             if (xchange==1) x = x + s1;
             else y = y + s2;
             e = e - ((int)dx<<1);
          end
          if (xchange==1) y = y + s2;
          else x = x + s1;
          e = e + ((int)dy<<1);
       end
    end

    //==================================
    //return the value of one point
    //at x,y with color nonzero=white 0=black
    char video_set(char x, char y)
    begin
       //The following construction
         //detects exactly one bit at the x,y location
       i=((int)x>>3) + ((int)y<<4) ; 
        return ( screen[i] & 1<<(7-(x & 0x7)));      
    end

    //==================================
    // set up the ports and timers
    void main(void)
    begin
      //init timer 1 to generate sync
      OCR1A = lineTime;    //One NTSC line
      TCCR1B = 9;       //full speed; clear-on-match
      TCCR1A = 0x00;   //turn off pwm and oc lines
      TIMSK = 0x10;      //enable interrupt T1 cmp
     
      //init ports
      DDRD = 0xf0;      //video out and switches
      //D.5 is sync:1000 ohm + diode to 75 ohm resistor
      //D.6 is video:330 ohm + diode to 75 ohm resistor
     
      //initialize synch constants
      LineCount = 1;
      syncON = 0b00000000;
      syncOFF = 0b00100000; 
     
      //Print "CORNELL"
      video_puts(13,3,cu1);
     
      //side lines
      #define width 126
      video_line(0,0,0,99,1);
      video_line(width,0,width,99,1);
     
      //top line & bottom lines
      video_line(0,0,width,0,1);
      video_line(0,99,width,99,1);
      video_line(0,11,width,11,1);
      video_line(0,89,width,89,1);
       
      //init software timer
      t=0;
      time=0; 
     
      //init animation
      x = 64;
      y=50;
      vx=1;
      vy=1;
      video_pt(x,y,1);   
     
      //init musical scale
      note = 0;
      musicT = 0;
      //use OC0 (pin B.3) for music 
      DDRB.3 = 1 ;     
           
      //enable sleep mode
      MCUCR = 0b10000000;
      #asm ("sei");
     
      //The following loop executes once/video line during lines
      //1-230, then does all of the frame-end processing
      while(1)
      begin
     
        //stall here until next line starts
        //sleep enable; mode=idle 
        //use sleep to make entry into sync ISR uniform time 
         
        #asm ("sleep");
       
        //The following code executes during the vertical blanking
        //Code here can be as long as 
        //a total of 60 lines x 63.5 uSec/line x 8 cycles/uSec
       
        if (LineCount==231)
        begin
           
            //Play a note
           //TCCR0 bits:
           //bit 7 no force:
           //bit 3 CTC on:
           //bit 5,4 toggle OC0 pin   
           //bit 6 no PWM
           //bit 2-0 prescaler 256 so 1 tick is 16 microsec
           if((musicT++) > 15)        //each note 1/4 second
           begin
              musicT = 0;
              TCCR0 = 0;
              if (notes[note]>0) TCCR0 = 0b00011100 ;  //not a rest
              OCR0 = notes[note++] ;
              if (note>18) note = 0;        //test for end of scale
           end
              
            //internal reflector lines   
           video_line(10,30,90,30,1);
           video_line(10,31,90,31,1);
           video_line(10,60,60,60,1);   
           video_line(10,61,60,61,1);
           
            //update the second clock
            if (++t>59)
            begin
               t=0;
               time = time + 1;
               sprintf(ts,"%05d",time);
               video_putsmalls(90,93,ts);
            end
           
            //the animated point
            video_pt(x,y,0) ; //erase old one
            x = x + vx;
            y = y + vy;
            s = video_set(x,y);
            if (s>0) vy = -vy;    //if true, must be a line there
            if (x==124 || x==1) vx = -vx;
            if (y==88 || y==12) vy = -vy;
            video_pt(x,y,1) ;
                         
         end  //line 231
      end  //while
    end  //main

  • #37 30 Sie 2008 22:30
    Dr.Vee
    VIP Zasłużony dla elektroda

    Witam,

    Oczywiście - sądzę, że znajdzie się wielu chętnych do tłumaczenia 1825 linii kodu. :D

    A tak serio, z dobrego serca - radzę zająć się czymś prostszym, na miarę swoich możliwości - jak widać tak zaawansowany projekt kolegę przerasta. Jeśli AVR jest za trudny, to może najpierw pisanie prostej gry na PC?

    Poza tym nauka nie polega na prowadzeniu za rączkę przez kogoś bardziej doświaczonego, tylko na dużym wkładzie własnej pracy. A tutaj niestety tego wkładu (mimo chęci) nie widać...

    Pozdrawiam,
    Dr.Vee

  • #38 01 Wrz 2008 19:36
    tomek_programista
    Poziom 19  

    A do czego to służy?

    Code:

    //20
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,

  • #39 01 Wrz 2008 21:03
    speedy_94
    Poziom 15  

    Dr.Vee -> Tutaj ja zgadzam się z Tobą w zupełności :).

    Tomku -> To jest fragment tablicy znaków 5x7. Mam nadzieję, że pytasz o ten kod, po to, żeby go zrozumieć. To bardzo dobrze, ale zrozumienie takiego kodu trzeba zacząć od zrozumienia prostych rzeczy :). Ja poleciłbym Ci coś w stylu zegarka na ATmedze, dalej rzeczy coraz bardziej skomplikowane, aż w końcu będziesz mógł się zabrać do takiego kodu.
    Co do zaczęcia od PC: tutaj mam mieszane uczucia. Ja właśnie zaczynałem od komputerów, dawno zanim poznałem mikroprocesory. No i tutaj przejście do dość niskopoziomowego języka, jakim jest C dla AVR było dla mnie niejako kubłem zimnej wody. Teraz już się przyzwyczajam. Jednak w następnym życiu spróbuję zacząć od AVR, może nawet od assemblera dla nich, żeby spróbować, jak to idzie w drugą stronę ;).
    Natomiast zupełnie nietrafione było proszenie o wytłumaczenie całej biblioteki :|. Programiści to maszynki do pisania kodu, nie do jego interpretacji ;). Od interpretacji są kompilatory :).

  • #40 01 Wrz 2008 21:08
    Dr.Vee
    VIP Zasłużony dla elektroda

    Witam,

    To zapis liczby w formacie binarnym. Np: 0b00010001 = 2^4 + 2^0. Taki zapis nie jest zgodny z ANSI C, ale kompilator GCC go wspiera.

    Dwa ukośniki rozpoczynają komentarz ;) Też nie jest to zgodne z ANSI C (zostało "zapożyczone" z C++), ale nowszy standard C99 pozwala na użycie takich jednowierszowych komentarzy.

    Pozdrawiam,
    Dr.Vee

  • #41 02 Wrz 2008 15:57
    tomek_programista
    Poziom 19  

    A czy ktoś chciał by się przyłączyć do naszego zespołu?
    Na razie jestem ja i biohack.

  • Pomocny post
    #42 02 Wrz 2008 16:06
    biohack
    Poziom 16  

    No właśnie to jest jak porywanie sie z tyczką na słońce :) Liczą się też chęci z czasem wszystko przyjdzie, ale teraz ktoś musi nam pomóc

  • #43 02 Wrz 2008 19:23
    Dr.Vee
    VIP Zasłużony dla elektroda

    Witam,

    Do zespołu szuka się kogoś, jak się ma go czym zachęcić (np. czymś, co już działa :) ) A Wy szukacie po prostu kogoś, kto odwali za Was czarną robotę :D

    Radzę Wam zrobić tak - napiszcie tą gierkę na PC, ale podzielcie ją na co najmniej 2 części:
    1. logika gry
    2. procedury obsługujące rysowanie na ekranie, czytanie klawiatury itd.

    Zacznijcie od części 1, a jak będziecie chcieli zrobić "konsolę na AVR", to po prostu przepiszecie funkcje z części 2, a do tej pory ... będziecie się przynajmniej cieszyć, że macie działającą grę :)

    Pozdrawiam,
    Dr.Vee

  • #44 06 Wrz 2008 13:46
    tomek_programista
    Poziom 19  

    Witam zrezygnowałem z ropienia tego schematu. Znalazłem inną grę tv tylko ta z kolej nie ma schematu. jest tylko opis jak działa. Ale nie ma szczegółów. Czy ktoś mi by pomógł go narysować?
    Zamieszczam link do gry:
    Gra Telewizyjna (rozdzielczośc 240x256, 8 kolorów)

  • #45 10 Wrz 2008 18:19
    speedy_94
    Poziom 15  

    Kolego, skoro sam autor nie ma schematu, to skąd my mamy go mieć? Możliwe, że z posiadanych informacji dałoby się stworzyć schemat, ale nakład pracy byłby porównywalny z tworzeniem całego urządzenia od nowa.
    No, ale OK, zapytałeś, czy możemy Ci pomóc w rysowaniu schematu. W takim razie - co do tej chwili udało Ci się stworzyć? Bo jeśli nic, to chcesz, żebyśmy narysowali Ci ten schemat. A to już jest duża różnica.

  • #46 13 Wrz 2008 17:47
    tomek_programista
    Poziom 19  

    Na razie mam muzykę i pady. Nie wiem tylko jak podłączyć te bufory, kable rgb oraz atine.

  • #47 14 Wrz 2008 18:02
    speedy_94
    Poziom 15  

    A rozkodowałeś, jak podłączyć resztę mikrokontrolerów? Bo ATtiny jest tam jednym z 5 procesorów. Jeśli tak, to gra staje się warta świeczki, można by było zacząć dokładnie kod analizować i fotki oglądać.

  • #48 19 Wrz 2008 18:57
    tomek_programista
    Poziom 19  

    Mam już atine i rgb. Brakuje tylko buforów.
    Jak je podłączyć :?: :D

  • #49 21 Wrz 2008 18:57
    speedy_94
    Poziom 15  

    Liczyłem, że bufory zrobisz sam :D. Z drugiej strony, nie mam pojęcia, czy z tamtej plątaniny da się coś wyciągnąć, i nie wiem, czy nie będzie to syzyfowa praca. Może prościej będzie dla Ciebie zaprojektować to samemu, wykorzystując na przykład kawałki kodu z tego projektu?
    No, ale OK. Zaprezentuj schemat tych połączeń, które rozkodowałeś, bo jak na razie rozmowa ciągle jest raczej bezprzedmiotowa.

  • #50 22 Wrz 2008 16:55
    tomek_programista
    Poziom 19  

    Oto co do tej pory narysowałem:
    Prosta gierka TV- do sprawdzenia

  • #52 22 Wrz 2008 21:18
    Dr.Vee
    VIP Zasłużony dla elektroda

    No, no, no - gratuluję postępów. Na razie namalowałeś (bo inaczej tego się nie da nazwać) głównie połączenia GND i VCC.

    Jeśli o mnie chodzi, to głosuję za przeniesieniem do działu "na wesoło" ;)

    Pozdrawiam,
    Dr.Vee

  • #53 28 Wrz 2008 17:54
    speedy_94
    Poziom 15  

    Schemat układu to nie jest tylko podłączenie zasilania. Poza tym, niektóre połączenia nie mają sensu. Tutaj również w zupełności zgadzam się z Dr.Vee :).

    No i jeszcze jedna rada - Eagle nie boli. Naprawdę schemat z niego wygląda lepiej od tego z Painta.

    Pozdrawiam,
    speedy_94