Jump to content

Serguei2

Members
  • Content Count

    2,282
  • Joined

  • Last visited

Posts posted by Serguei2


  1. 46 minutes ago, zaphro72 said:

    3,075

     

    Glitch happened in my phoenix off SD card, on my Phoenix with AtariMax and on my ColecoVision with AtariMax all with the new rom all after the 2,000 Point mark

     

    got lucky on this highscore that I was always outside of blue band and managed to finish a level or two with the blue band on screen.

    C769C6F6-EB19-47BD-962C-0035CA29B19C.jpeg

    Thanks for the feedback. 

     

    At least, I see an improvement.

     

    I will take look of it if I can improve it.

    • Like 1

  2. coco_0000.png.7044b4452e79ee7a2261c2310359f53b.png

     

    Ok. It's not often I show my own codes but since it's my first release of a colecovision game, it's fine for me and it's the way to learn new things.

     

    Coco and the evil robots won't run well on real hardware or bluemsx (an emulator.)

     

    So here the source. It might need to clean up as well.

     

    coco.c

     

    Please add your comments so I know what is changed.

     

    Thanks in advance.

     


  3. CCI started acting funny after my computer crashed.

     

    Here the error:

    Quote

    sdcpp.exe: fatal error: when writing output to : Broken pipe
    C:\robin\ColecoVision\robin>sdcc -mz80 -c --std-c99 --oldralloc  sound2.c 
    sound2.c:23: syntax error: token -> 'snd_table' ; column 23

     

    And the source:

    Quote

    #include <coleco.h>
    #include <getput1.h>

    const byte sound1[] = {
     0x40,0xAB,0x01,0x08,0x42,0xAB,0x71,0x08,0x18,0x11,0x50,
    };
    const byte sound2[] = {
     0x80,0x5A,0x00,0x08,0x82,0x5A,0x70,0x08,0x18,0x11,0x90,
    };
    const byte sound3[] = {
     0xC0,0x20,0xF0,0x10,0xD0,0x00,0x00,0x03,0x08,0x02,0x73,0x08,0x18,0x11,0x10,
    };
    const byte sound0[]={
     0x02,0x33,0x0c,0x1c,0x11,0x10
    };
    const byte noise1[]={
     0x00,0x33,0x0c,0x1c,0x11,0x10
    };
    const byte sound4[]={
     0x00,0x39,0xF0,0x10,0xD0,0x00,0x00,0x07,0x08,0x02,0x77,0x08,0x18,0x11,0x10,
     0xC0,0x20,0xF0,0x10,0xD0,0x00,0x00,0x07,0x08,0x02,0x77,0x08,0x18,0x11,0x10,
    };
    const sound_t snd_table[] = {
      {sound1,SOUNDAREA1},
      {sound2,SOUNDAREA2},
      {sound3,SOUNDAREA6},
      {sound0,SOUNDAREA4},
      {sound4,SOUNDAREA6},
      {noise1,SOUNDAREA4},
    };

    const byte gtsNAME[] = {
      0xFE, 0x20, 0xFE, 0x20, 0xFE, 0x20, 0xFE, 0x20, 0xFE, 0x20, 0xFE, 0x20, 0x85, 0x20, 0xFF};

    const byte gtsPATTERN[] = {
      0xFE, 0x00, 0xFE, 0x00, 0x89, 0x00, 0x01, 0x1C, 0x38, 0x82, 0x18, 0x02, 0x00, 0x18, 0x18,
      0x82, 0x66, 0x85, 0x00, 0x21, 0x44, 0xFE, 0x44, 0x44, 0xFE, 0x44, 0x00, 0x18, 0x3E, 0x60, 0x3C,
      0x06, 0x7C, 0x18, 0x00, 0xFF, 0x81, 0xB9, 0xA5, 0xB9, 0xA5, 0x81, 0xFF, 0x3C, 0x66, 0x3C, 0x38,
      0x67, 0x66, 0x3F, 0x00, 0x06, 0x0C, 0x18, 0x84, 0x00, 0x01, 0x0C, 0x18, 0x82, 0x30, 0x04, 0x18,
      0x0C, 0x00, 0x30, 0x18, 0x82, 0x0C, 0x08, 0x18, 0x30, 0x00, 0x00, 0x66, 0x3C, 0xFF, 0x3C, 0x66,
      0x82, 0x00, 0x81, 0x18, 0x02, 0x7E, 0x18, 0x18, 0x86, 0x00, 0x81, 0x18, 0x00, 0x30, 0x82, 0x00,
      0x00, 0x7E, 0x88, 0x00, 0x81, 0x18, 0x81, 0x00, 0x10, 0x03, 0x06, 0x0C, 0x18, 0x30, 0x60, 0x00,
      0x3C, 0x66, 0xCE, 0xD6, 0xE6, 0xCC, 0x78, 0x00, 0x18, 0x38, 0x83, 0x18, 0x2C, 0x1C, 0x30, 0x0E,
      0x1E, 0x36, 0x06, 0xFC, 0xC0, 0xFE, 0x00, 0x0E, 0x1E, 0x36, 0x06, 0x3C, 0x86, 0xFE, 0x00, 0x0E,
      0x1E, 0x36, 0x66, 0xFE, 0x06, 0x06, 0x00, 0x1E, 0x3E, 0x70, 0xE0, 0xFC, 0x0E, 0xFE, 0x00, 0x0E,
      0x1E, 0x30, 0x60, 0xDE, 0xF2, 0xFE, 0x00, 0x7E, 0xC6, 0x0C, 0x82, 0x18, 0x18, 0x1C, 0x30, 0x1E,
      0x3E, 0x66, 0x66, 0xFC, 0xC6, 0xFE, 0x00, 0x3C, 0x66, 0xCE, 0xFE, 0x06, 0x0C, 0x38, 0x00, 0x00,
      0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x82, 0x00, 0x0C, 0x18, 0x00, 0x00, 0x18, 0x18, 0x30, 0x0E,
      0x18, 0x30, 0x60, 0x30, 0x18, 0x0E, 0x82, 0x00, 0x02, 0x7E, 0x00, 0x7E, 0x82, 0x00, 0x0F, 0x70,
      0x18, 0x0C, 0x06, 0x0C, 0x18, 0x70, 0x00, 0x1E, 0x3E, 0x66, 0x06, 0x18, 0x18, 0x00, 0x18, 0x87,
      0x00, 0x38, 0x0E, 0x1E, 0x36, 0x66, 0xFE, 0xC6, 0xC6, 0x00, 0x0E, 0x1E, 0x26, 0x66, 0xFC, 0xC6,
      0xFE, 0x00, 0x0E, 0x1E, 0x32, 0x60, 0xC0, 0xC2, 0xFE, 0x00, 0xE0, 0xF0, 0xD8, 0xCC, 0xC6, 0xCE,
      0xFC, 0x00, 0x0E, 0x1E, 0x30, 0x60, 0xFC, 0xC0, 0xFE, 0x00, 0x0E, 0x1E, 0x30, 0x60, 0xFC, 0xC0,
      0xC0, 0x00, 0x0E, 0x1E, 0x32, 0x60, 0xCE, 0xC2, 0xFE, 0x00, 0x26, 0x82, 0x66, 0x05, 0xFE, 0xC6,
      0xC6, 0x00, 0x1C, 0x78, 0x83, 0x18, 0x1D, 0x1C, 0x30, 0x0E, 0x1C, 0x0C, 0x0C, 0x4C, 0xCC, 0xFE,
      0x00, 0x26, 0x66, 0x6C, 0x78, 0xFC, 0xCE, 0xC6, 0x00, 0x70, 0xE0, 0x60, 0x60, 0x62, 0x66, 0xFE,
      0x00, 0x46, 0xEE, 0xFE, 0xD6, 0x82, 0xC6, 0x32, 0x00, 0x42, 0xC6, 0xE6, 0xF6, 0xDE, 0xCE, 0xC6,
      0x00, 0x1C, 0x3E, 0x66, 0xC6, 0xC6, 0xCC, 0x78, 0x00, 0x0E, 0x1E, 0x36, 0x66, 0xFC, 0xC0, 0xC0,
      0x00, 0x1C, 0x3E, 0x66, 0xC6, 0xD6, 0xDC, 0x77, 0x00, 0x0E, 0x1E, 0x36, 0x66, 0xF8, 0xCC, 0xC6,
      0x00, 0x0E, 0x1E, 0x32, 0x60, 0xFE, 0x06, 0xFE, 0x00, 0x7E, 0xFC, 0x83, 0x30, 0x02, 0x38, 0x60,
      0x26, 0x82, 0x66, 0x04, 0xE6, 0xC6, 0xFE, 0x00, 0x26, 0x82, 0x66, 0x22, 0xE6, 0x6C, 0x38, 0x00,
      0x62, 0xC6, 0xC6, 0xD6, 0xFE, 0xEE, 0xC4, 0x00, 0x26, 0x66, 0xEC, 0x38, 0x7C, 0xEE, 0xC6, 0x00,
      0x26, 0x66, 0xEC, 0x38, 0x18, 0x18, 0x1C, 0x30, 0x3E, 0x66, 0xCC, 0x18, 0x32, 0x66, 0xFE, 0xFE,
      0x00, 0xFE, 0x00, 0xFE, 0x00, 0xFE, 0x00, 0xFE, 0x00, 0xFE, 0x00, 0xFE, 0x00, 0xFE, 0x00, 0xFE,
      0x00, 0xFE, 0x00, 0xB2, 0x00, 0xFF};

    const byte gtsCOLOR[] = {
      0xFE, 0x41, 0xFE, 0x41, 0xFE, 0x41, 0xFE, 0x41, 0xFE, 0x41, 0xFE, 0x41, 0xFE, 0x41, 0xFE,
      0x41, 0xFE, 0x41, 0xFE, 0x41, 0xFE, 0x41, 0xFE, 0x41, 0xFE, 0x41, 0xFE, 0x41, 0xFE, 0x41, 0xFE,
      0x41, 0x8F, 0x41, 0xFF};

    void main(void)
    {
     set_snd_table(snd_table);
     screen_mode_2_text();
     paper(0xc);
     rle2vram (gtsPATTERN,0x0000);
     rle2vram (gtsCOLOR,0x2000);
     rle2vram (gtsNAME,0x1800);
     duplicate_pattern();
     cls();
     screen_on();
     print_at(1,1,"PRESS 1, 2, 3 OR 4");
     enable_nmi();
     loop:
      if(keypad_1==1){
       disable_nmi();
       print_at(1,2,"BOUTON 1");
       play_sound(1);
       enable_nmi();
      }
      if(keypad_1==2){
       disable_nmi();
       print_at(1,2,"BOUTON 2");
       play_sound(2);
       enable_nmi();
      }
      if(keypad_1==3){
       disable_nmi();
       print_at(1,2,"BOUTON 3");
       play_sound(3);
       play_sound(4);
       enable_nmi();
      }
      if(keypad_1==4){
       disable_nmi();
       print_at(1,2,"BOUTON 4");
       //play_sound(5);
       play_sound(6);
       enable_nmi();
      }
     delay(1);
     goto loop;
    }
    void nmi(void) {}

     

    These codes work before the crash.


  4. 1 hour ago, DuggerVideoGames said:

    2,600 pts.  I like this game!  I was surprised at how quickly the screen disappears after a game over, but it at least displays your high score when you play again (H).  I do have a question, however.  When you lose a life, you need to get all nine treasures again instead of just how few were remaining at the time you lost your life.  Was that deliberate on your part?  Not a complaint, just an observation.

     

     

     

    Coco Evil Robots 2,600 pts.jpg

    That's happened when you write your own games.

     

    Only put anything you like the most without any constrains. 

     

    Yeah. Once you lost a life, you need to take 9 treasures again.

     

    I take note any comments in case I would make a sequel.


  5. I ordered a gameboy advance supercard at May 7th 2020.

     

    After months, I got this from amazon.ca

     

    853680733_parcellost.png.30093357f1f540ec01b243a6fa96a387.png

     

    So my gba supercard is lost. :(

     

    Thanks to coronavirus.

     

    1499708869_supercardsd.png.5d2a8a8732759ed77faf04dbf59c32cf.png

     

    Super Card SD is a sd card adapter for gameboy advance, the only system I have.

     

    rette.png.056a1933f21a1d1ca637a8fed955340e.png

     

    Naturette was created by me using GBAGI, a tool to convert any Sierra AGI games to gameboy advance.

     

    rette1b.png.c723b9b0064f37647a2708879ad94c4c.png

     

    The gameplay is not the best on gba but at least, you don't need to learn C to make gba games.

     

    You need to use menus to make some action.

     

    Once I get supercard, I will start making gba games using C.


  6. Parker Brothers Popeye on Colecovision is the smallest Colecovision game released, only 8k.

     

    And it shows.

     

    1700966509_bandicam2020-06-2519-16-25-673.png.89f22476ae0fdf2084f31d096d3f88a9.png

    Here the menu, after Colecovision turned on. No title screen. 

     

    Other Parker Brothers games, we see a screen with menu.

    352288109_bandicam2020-06-2519-24-07-356.png.df0ddc924c42a942a6b15282feb5f5ff.png

    Popeye 

     

     

    383285381_bandicam2020-06-2519-16-33-119.png.915062b44a24e8d4d76bd949f2f336e7.png

    At least, an intermission is shown.

     

    1621867716_bandicam2020-06-2519-21-16-709.png.edaf3929b3f130079932550946b26394.png

    Here the game.

     

    The tiles seem to be complexe. 

     

    To squeeze from an arcade to 8k on Colecovision is remarkable.

     

    Maybe to same money since at this time, chips were expensive.

     

    I'm not sure if Coleco has released 8k games at this time.

     

    • Like 2

  7. My laptop crashed. After that, cci won't compile my games.

     

    cci.thumb.png.1ea47ef0e40583be782e0c265490f56b.png

     

    Any files I need are there. Both SDCC and CCI are installed long time ago.

    It just won't find them somehow.

     

    I released Coco and the evil robots with these tools. They should work.

     

    Long time ago, my computer was crashed, films & TV players stopped working.

    Another crash fix it.

     

     


  8. Ok. I give it another try today.

     

    main.c

    Spoiler

    // example 1 - a simple Hello World with banked data

    // bank switching helpers! To switch banks, we just read the magic address
    // bank0 (which is the fixed bank) can be selected with 0xffff
    // bank1 can be selected with 0xfffe
    // bank2 can be selected with 0xfffd
    // ... and so on!
    #define SWITCH_IN_BANK1    (*(volatile unsigned char*)0)=(*(volatile unsigned char*)0xfffe);
    #define SWITCH_IN_BANK2    (*(volatile unsigned char*)0)=(*(volatile unsigned char*)0xfffd);

    // sound access (for initialization)
    volatile __sfr __at 0xff SOUND;

    inline void MUTE_SOUND() { 
        SOUND=0x9f;        // mute chan 1 
        SOUND=0xbf;        // mute chan 2
        SOUND=0xdf;        // mute chan 3
        SOUND=0xff;        // mute noise 
    }

    // VDP access
    // Read Data
    volatile __sfr __at 0xbe VDPRD;
    // Read Status
    volatile __sfr __at 0xbf VDPST;
    // Write Address/Register
    volatile __sfr __at 0xbf VDPWA;
    // Write Data
    volatile __sfr __at 0xbe VDPWD;

    // helper for VDP delay between accesses
    inline void VDP_SAFE_DELAY() {    
    __asm
        nop
        nop
        nop
        nop
        nop
    __endasm;
    }

    // helper for register writes
    inline void VDP_SET_REGISTER(unsigned char r, unsigned char v) {
        VDPWA=(v); 
        VDP_SAFE_DELAY();
        VDPWA=(0x80|(r)); 
        VDP_SAFE_DELAY();
    }
    inline void VDP_SET_ADDRESS_WRITE(unsigned int x) {    
        VDPWA=((x)&0xff); 
        VDP_SAFE_DELAY();
        VDPWA=(((x)>>8)|0x40); 
        VDP_SAFE_DELAY();
    }

    // now that we are printing multiple strings, just a helper function for that
    void writeString(unsigned int adr, const char *p) {
        // Note: this example is not meant to teach Coleco programming, but
        // it is critical that an NMI does not access the VDP while a loop like
        // this executes. This sample is safe because the NMI function is a nop
        // which never clears the VDP status byte. As a result the interrupt
        // fires once and then never again, and even if it did, the NMI handler
        // doesn't touch the VDP, so this remains safe.
        VDP_SET_ADDRESS_WRITE(adr);
        while (*p) {
            VDPWD = *(p++);
            VDP_SAFE_DELAY();
        }
    }

    // references to the data (which is stored in separate banks!)
    extern const char * const strBank1;
    extern const char * const strBank2;

    // ** Main entry point **
    void main() {
        // on entry, the VDP is set up, the audio is muted, so all we need to do is
        // write our strings

        // since the data is in another switched bank, but we are in the fixed bank,
        // all we need to do is select the correct bank before we access the data
        SWITCH_IN_BANK1;
        writeString(0x1800+80+4, strBank1);

        // and same for the other string
        SWITCH_IN_BANK2;
        writeString(0x1800+120+4, strBank2);

        // loop forever, or till reset
        for (;;) { }
    }

    // the crt0 calls this function to initialize the VDP and sound
    // we use it to set up a simple 40 column text mode- setting match 
    // the BIOS setup so we don't need to load a character set - if 
    // you don't have a BIOS this example won't likely work.
    void vdpinit() {
        unsigned int idx;
        const char *p = (const char*)0x15A3;            // address of BIOS character set (assumed)

        // mute the sound chip
        MUTE_SOUND();

        // set up the VDP 
        VDP_SET_REGISTER(0x00, 0);
        VDP_SET_REGISTER(0x01, 0xf0);    // VDP_MODE1_16K | VDP_MODE1_UNBLANK | VDP_MODE1_TEXT | VDP_MODE1_INT
        VDP_SET_REGISTER(0x02, 0x06);    // screen image table at 0x1800
        VDP_SET_REGISTER(0x04, 0x00);    // pattern table at 0x0000
        VDP_SET_REGISTER(0x07, 0xf4);    // white text on dark blue

        // copy in the character set
        VDP_SET_ADDRESS_WRITE(0x0000+0x0100);        // the character set starts with space, 32 chars in
        for (idx = 0; idx < 96*8; idx++) {            // 96 characters to copy
            VDPWD = *(p++);
            VDP_SAFE_DELAY();
        }

        // clear the screen
        VDP_SET_ADDRESS_WRITE(0x1800);
        for (idx = 0; idx<960; idx++) {
            VDPWD = ' ';
            VDP_SAFE_DELAY();
        }
    }

     

    text1.c

    Spoiler

    // define a static string in ROM
    const char * const strBank1 = "Hello from Bank1";

     

    text2.c

    Spoiler

    const char * const strBank2 = "Hello from Bank2";

     

    The directory

    compile2.thumb.png.7802d0cfa76a73868dfd8f598bdb8b97.png

     

    Here the result

    compile1.thumb.png.3ea5dea08a37f3153d0ab4f99c1cc961.png

     

    After take a look, I noted crt0.lhx is missing.

     

    I tried with crtcv.lhx. It compiled but with a 32k rom instead.

     

    I checked the package but I can't find crt0.lhx either.


  9. On 6/8/2020 at 8:12 AM, johannesmutlu said:

    I wonder what would,ve happen if the colecovision was also released in japan, would it had influenced the sales of the famicom??? Remember when nintendo had to come with a call back order to fix certain bugs in the famicom , could coleco could,ve took advantage of this by selling more colecovision systems? Remember donkeykong did help selling the colecovision, 

    Am curious if the story would,ve been different now ,,or just not

    If Coleco was released Colecovision in Japan, it would be expensive and not profitable.

     

    Atari 2600 (2800 in Japan in 1986?) and Commodore 64 are released in Japan.

     

    Both were too expensive to buy.

×
×
  • Create New...