Jump to content


  • Posts

  • Joined

  • Last visited

  • Days Won


Elektron72 last won the day on July 31 2021

Elektron72 had the most liked content!

Recent Profile Visitors

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

Elektron72's Achievements


Newbie (1/14)

Week One Done One Month Later One Year In

Recent Badges




Community Answers

  1. I believe you could also set the resolution to 160x120 to achieve the same effect while using less VRAM.
  2. There's currently an open issue on GitHub that recommends adding a cursor control feature from the C128: https://github.com/commanderx16/x16-rom/issues/162
  3. Personally, I believe that most puzzle-style programming activities (e.g. Hour of Code) are not effective ways to teach programming. While they may allow students to learn programming concepts (loops, if statements, functions, etc.), they are usually ineffective at demonstrating how these concepts have real-world applications. A student who can clearly see that what they are learning could be used to write a game will be much more interested than a student who is struggling to see the point in telling a character to move forward, turn left, and move forward again. Given that you'll be using Python, it's likely that you'll avoid most of these issues. I think the best way to avoid "magical incantations" is to use libraries that provide very general functionality, requiring students to implement more specific functionality using programming concepts.
  4. Found the source here: https://github.com/lriecken/Vera-Graphics-Converter
  5. DT1 uses sign-magnitude representation to allow for both positive and negative detunes. Values 1-3 are positive detunes, while 5-7 are negative. Setting one operator's DT1 to 3 and the other to 7 will produce a more powerful effect.
  6. $9F21 accepts 8 address bits; ANDing the MSB with 0x0f would discard bits 12-15 of the address.
  7. Unless cc65 is smart enough to optimize out the bit shifts and AND operations (which is unlikely), an assembly version of this function would be much faster, as the MSB and LSB of the address could easily be accessed separately. I don't understand why the code is masking off the upper bits of the MSB, as VERA addresses are 17 bits (8 bit LSB + 8 bit MSB + 1 bit bank selection).
  8. The VERA will interpret positions beyond the right/bottom edge as two's complement signed numbers, allowing sprites to start beyond the left/top edge of the screen.
  9. Given that the creation of a symbol file is performed by the linker, I'd assume the issue is that only exported symbols are listed. Try adding a .export for each symbol that you need the location of.
  10. Both the SNES and Sega Genesis had sound coprocessors (the SPC700 and Z80, respectively). These were typically used to run music playback routines independently from the main processor. Additionally, several SNES games included the SA1, a secondary processor based on the 65C816.
  11. This is describing the YM2151's Low Frequency Oscillator (LFO). Rather than directly producing sound, the LFO uses these waveforms to change the frequency and volume of the audible channels. This can be used to produce vibrato, tremolo, and other effects without requiring extra writes to the chip. There is only one LFO in the YM2151.
  12. I believe you have interpreted the documentation correctly, as VOPM allows these values to be controlled separately. Strangely, DefleMask does not allow these values to be controlled at all.
  13. If you're using an editor with a hexadecimal color entry box, an easy way to ensure that a particular color will display properly on the X16 is to look at the contents of this box. If each pair of hexadecimal digits is the same (e.g. 00dd55), the color can be represented in 12-bit RGB.
  14. When the VSYNC interrupt occurs, the system jumps through the vector located at $0314, which points to the kernal interrupt handler (unless the vector has been modified). This routine performs several functions (polling the keyboard, updating the system timer, etc.). Before returning, the routine clears the interrupt status in ISR to prevent the interrupt from immediately triggering again. To properly wait for VSYNC, you will need to modify the vector at $0314 to point to your own interrupt handler. A custom handler will likely set a value somewhere in memory indicating that an interrupt has occured, and then jump to the original handler.
  15. I believe this kind of effect is done by changing the vertical scroll register on each scanline, rather than vertical scaling.
  • Create New...

Important Information

Please review our Terms of Use