Jazzmarazz wrote:

Bump.
Its been ages since we last spoke about this, but I think I can set aside some testing time tomorrow. I got the day off and am waiting on some PCBs (unrelated) so I need to fill the time.

I'm still around, but have been too busy to think about this much.  I may have some free time in about a week, though, so hope to have another crack at things then.  One thing I think is worth looking into is SPI on the Teensy, ideally without Teensyduino.  So far, I haven't been able to get it to work at all (using the Kinetis headers), but I haven't looked into it much yet.  I also want to try out my parallel port idea (p. 13), but I want to be confident that I'm not going to damage any hardware (especially the on-board parallel port in my PC) in doing so.

JOBO wrote:

I don't want to start soldering and desoldering things before I know if its worth it.

The best way to tell whether it's worth it for you is to try it out.  It's really not a lot of soldering compared to other mods, and you can test it before drilling anything in your case (if you're careful to not short anything, of course).

35

(14 replies, posted in Nintendo Handhelds)

The patch I posted does work for me, and I've tried re-entering it, so I don't think I've left anything out.  Is it SAMP1 that the table seems to have no effect on?

ultrageranium wrote:

It's also very specific to the operating system that you are using. On FreeBSD I'd probably try to do it like this:  create a virtual cuse4bsd HID device, make sure the emu uses this device as main controller, change the controller state via simple shell commands (like usbhidctl I think) directly from Pd, with the [shell] object. Untested smile

You could also use xdotool to send keypresses to the emulator, and configure the emulator to use the keyboard as the controller.  This should also work on Linux.  I don't know what the latency would be like.

kitsch wrote:

and, yeah....  nanoloop is a bit easier to jump into, imo.  but less rewarding in the long term (again, imo).  learning curve is considerably easier though if you don't have a tracker background.  its a bit like playing a game.

I've always found LSDJ easier to use, as it is now one of my favorite programs in terms of interface design.  It is the first tracker-style program I have used.  With nanoloop I find things fiddly and have to keep consulting the manual.  Then again, I started using LSDJ first, so maybe that biased me.  But do try both and see which you like; each to their own I suppose.

38

(14 replies, posted in Nintendo Handhelds)

Here we go.  These aren't exact, but should give you something to work with.  I haven't done the second sample.  The fifth sample sounds more or less like the third, so I haven't put it in either.

PROJECT DRUMDEMO.1!

TEMPO 128


PHRASE 31

0 C 3 I01 -00
8 C 5 I03 -00
D C 3 I04 -00

INSTRUMENT 01

NAME SAMP1
TYPE NOISE

SHAPE E3

TABLE 02


TABLE 02

1 00 00SE0 -00
3 00 00SE0 -00
7 00 00K00 -00


INSTRUMENT 03

NAME SAMP3
TYPE NOISE

ENVELOPE C0
LENGTH 33
SHAPE BE

TABLE 00


TABLE 00

2 00 00E40 -00
8 00 00K00 -00


INSTRUMENT 04

NAME SAMP4
TYPE NOISE

ENVELOPE A7
LENGTH 1A
SHAPE EE

39

(4 replies, posted in Bugs and Requests)

I can confirm that the same thing happens when streaming with mplayer.  It is also somewhat sporadic.

Great track by the way.

El Huesudo II wrote:

I'll give you a hint: some types ignore everything in front of them, and only care about themselves.

You are indeed right.  It turns out I found them the hard(core) way.

egr wrote:



goto80 wrote:

bicep beat part1.mod
out2.mod
skreax4-to-mix.mod

how to access?  i am at loss?

It is possible. How big a hint do you want?

I'm looking forward to giving this a thorough listen...

The new download link works, thanks.

I was hoping for a more readability-focussed font, but I like this general aesthetic too.  It reminds me a lot of the classic artwiz-aleczapka fonts. I've had a look through, mostly concentrating on the glyph forms.  I don't see support for much of the Unicode range, only Basic Latin, Latin-1 Supplement and Latin Extended-A.  Is this all that's included, or is this an encoding issue (probably at my end)?  It's nice to see that those ranges are fully supported, though (except for a missing glyph at U+017F).  What follows are some notes I made looking through the glyphs.

Glyphs

U+0030 DIGIT ZERO is not distinguishable from U+004F LATIN CAPITAL LETTER O; perhaps dot the zero?
U+00BF INVERTED QUESTION MARK, your glyph is mirrored in the y axis from what it should be.
U+00AA FEMININE ORDINAL INDICATOR has an underbar, but U+00BA MASCULINE ORDINAL INDICATOR lacks one.
U+00F0 LATIN SMALL LETTER ETH shows a miniscule eth (with missing crossbar), but all your other SMALL letters show majuscule forms.
U+010B LATIN SMALL LETTER C WITH DOT ABOVE shows an acute, not a dot.
Your breves look like carons, but I'm being fussy here.
U+010F LATIN SMALL LETTER D WITH CARON shows an odd variant, not the same as the majuscule form.
U+0123 LATIN SMALL LETTER G WITH CEDILLA; as above.
U+0165 LATIN SMALL LETTER T WITH CARON; as above.
U+017F LATIN SMALL LETTER LONG S is missing, but Latin Extended-A is otherwise complete.

Cosmetics

U+003A COLON and U+003B SEMICOLON don't have the same dot-spacing.
U+00C6 LATIN CAPITAL LETTER AE has funny proportions.
U+0108 LATIN CAPITAL LETTER C WITH CIRCUMFLEX, the circumflex alignment looks slightly odd in running text.
U+0134 LATIN CAPITAL LETTER J WITH CIRCUMFLEX, the circumflex alignment looks odd in isolation, but alright in running text.
U+0162 LATIN CAPITAL LETTER T WITH CEDILLA, the cedilla doesn't match your other cedillas, which are otherwise consistent.

I've in fact been on the lookout for bitmap fonts which support BMP 0000-03FF, which I use quite often, so I was interested to try this out.  Unfortunately, your download link doesn't work.  Would you care to post a direct link to your font?

If you can't get LSDManager to work (it is often finicky) you can of course just write the sav file straight onto your EMS cart, assuming all the songs you want are in the same file.

Jazzmarazz wrote:

Still haven't had time to sit down with this myself, but I gotta thank you guys for introducing me to Dualport SRAM. I have another project and it may alone be my savior considering the limitations of 16MHz microcontrollers.

I'm now curious what your other project entails.

I feel this deserves some more recognition.  I have thoroughly enjoyed listening to it (a number of times) so far.

Jazzmarazz wrote:

Thanks so much. I'll have a look asap...

edit:

#Iterate over each pixel.
    for y in range(144):
        for x in range(160):

Did you mean to replace 144 and 160 with the height and width variables to keep thing consistent?

You're welcome.

The hardcoded values come from friendofmegaman's version, and the variables come from some Pygame code I had written which I adapted for this, hence the discrepancy.  You're entirely right that the variables should be used here.  I'm sure there is much other tidying up which could be done, too.

Jazzmarazz wrote:

Rvan! Can you comment your pygame code for me?

Here it is.

#!/usr/bin/python
#author: friendofmegaman, rvan
#Display captured frame data on the PC.  Expects a 0x1E00 header and four
#pixels per byte.  Uses pygame, which is faster than pylab's scatter.

import pygame
from pygame.locals import *

#Set upscale factor, so the image can be made larger on the PC.
#This is configurable.
upscale = 2

width = 160
height = 144

#Set default palette.  We use the same colors as BGB.
grey = []
grey.append((224,248,208))
grey.append((136,192,112))
grey.append((52, 104, 86))
grey.append((8, 24, 32))

#Load the captured binary file.
fd = open('/path/to/screen.bin', 'rb')
data = fd.read()
fd.close()

#Split the data into frames at the frame header.  This will need to be changed
#if using a headerless or 3 pixels per byte format.
frames = data.split('\x1E\x00')
print len(frames), 'frames'

class Pixel:
    """Self-incrementing pixel class. When called with a two-bit color value, an
    instance of this class will set the appropriate color at that pixel and
    then automatically increment the x and y values."""
    x = 0;
    y = 0;
    def __call__(self, col):
        #Iterate over the PC pixels which represent one GB pixel and set the
        #color for each.
        for upy in range(upscale):
            for upx in range(upscale):
                window.set_at(((self.x)*upscale+upx,
                               (self.y)*upscale+upy), grey[col])
    
        #Increment the x and y values as necessary.
        self.x +=1
        if self.x==160:
            self.x = 0
            self.y +=1

#Instantiate Pixel.
pixel = Pixel()

#Initialize the pygame window.
window = pygame.display.set_mode((width*upscale, height*upscale))

#(friendofmegaman wrote this loop.  These are rvan's comments and may not be
#entirely accurate.)
for frame in frames:
    #Find the first complete frame.
    if len(frame)!=5760:
        continue

    #Iterate over each pixel.
    for y in range(144):
        for x in range(160):
            """This section is what will need to be changed to accommodate a
            different pixel format.  The important part is the call to pixel(),
            which needs to simply be called once for each pixel, in order."""

            #Convert the two-dimensional pixel address into a one-dimensional
            #global (i.e., whole screen) bit address.
            bit_offset = y*320+x*2

            #Convert the global bit address into a byte address and a
            #within-byte bit address.
            array_offset = bit_offset/8
            byte_offset = bit_offset%8

            #Load the relevant byte from the array and the relevant two bits
            #into px.
            byte = ord(frame[array_offset])
            px = (byte>>byte_offset)&0b11

            #Set the color.  Remember that Pixel increments automatically.
            pixel(px)

#Update the display to show the pixels.
pygame.display.update()

#Leave the display up until the window is closed or escape is pressed.
quit = False
while not quit:
    event = pygame.event.wait()
    if event.type == pygame.QUIT or event.type == KEYDOWN and \
    event.key == K_ESCAPE:
        quit = True