Jump to content


  • Posts

  • Joined

  • Last visited

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

RaichuBender's Achievements


Newbie (1/14)



  1. Simply because I want to have precise control over my code, including when it should wait for a VSYNC, and when tearing and flickering might be ok for speed's sake. But I could probably move all the logic to the interrupt handler as you suggest, and keep the control by specifying when the routine should be skipped or not based on macros in my loops. I guess the best way to explain what I want to be able to achieve is screen fill/wipe animations like the fancy Pokémon battle start animations that fill the screen with tiles in a maze-like pattern for example. Having precise control of interrupts without having to retrofit everything in a large event is the best approach I find.
  2. Currently, I'm wrapping a check whether the VSYNC occurred around the interrupt handler, which in turn sets a `vsync` boolean to true if it has. Will append the code of my implementation when I'm home in a bit, so you can give your input if you want Also, I've always put the VSYNC delay at the end of any drawing loop. As there any benefit of putting it at the start? Most of my programming work so far has been in BASIC, so I might have been doing it in a not optimal way forever...
  3. Ah, that must be it. thank you! It seems I'm misunderstanding the workings of the ISR register then. UPDATE: I did it! Here's a video of it VSYNC-ing after every BG line drawn: (PETSCII characters are placeholders for now.) Can you guess where this placeholder BG is a reference to?
  4. Heya, I'm trying to wait for a VSYNC to occur, so the title screen of my game won't flicker. However, when setting the VSYNC bit of the EIN-register, it appears ISR is never set. Am I missing something? My code: #define EIN (*(u8*)0x9F26) #define ISR (*(u8*)0x9F27) #define VSYNC() \ { EIN |= 1;\ while( !(ISR & 1) ); } /* ... */ static void show_choices(TITLE *ttl) { u8 y,hand_pos; while (1) { SET_TILE_STR(12, 14, "+--------------+", TITLE_COL_MENU); SET_TILE_STR(12, 15, "| |", TITLE_COL_MENU); for (y = 0; y < ttl->num_options; y++) { SET_TILE_STR(12, y+16,"| - |", TITLE_COL_MENU); SET_TILE_STR(16, y+16,ttl->OPTIONS_STR[y], TITLE_COL_MENU); } SET_TILE_STR(12, y+16, "| |", TITLE_COL_MENU); SET_TILE_STR(12, y+17, "+--------------+", TITLE_COL_MENU); SET_TILE(13, hand_pos+16, '>', TITLE_COL_BG); hand_pos = (hand_pos + 1) & 3; VSYNC(); } } SET_TILE_STR and TILE_COL_*** are macros that deal with updating the tile maps, so they aren't important for this question. It's the VSYNC at the bottom that locks up the system... EDIT: I realize this function is within a while-loop that never get escaped out of. However, that is intentional, as I'm still working on the title screen. The problem is that the VSYNC never occurs as far as the game is concerned.
  5. Hey there everyone, I'm Thomas, but you can call me Raichu. Pleased to meat ya all! I'm a programmer, software (reverse) engineer and game-developer-to-be from the Netherlands. I'm currently interested in reverse engineering of game titles and have programmed a lot in SmileBASIC for the Nintendo 3DS and Switch, and learned a lot of C and assembly as well the past year. I have worked on a GameBoy emulator for SmileBASIC, so I know a fair bit about 8-bit hardware. I'm a big fan of the works of David, and his Planet X3 game is a huge inspiration for me. I'm also a big fan of Michael Steil. He helped me out a lot during the development of my GameBoy emulator, as his ccc conference was a huge help, and I couldn't do without it. I hope to become as experienced and a prodigy as he is. I'm excited to be part of this community and to see the Commander X16 become a reality. I plan to contribute by developing a Zelda 1-style action RPG for the CX16, and I hope I can share more details about it soon!
  • Create New...

Important Information

Please review our Terms of Use