Development Kits [Rev 1]

I think we’d need a secondary Sprites class, probably called SpritesFX.

It should be able to provide all the same functions as Sprites API but the arguments would probably be different.
For one thing, it’s not going to be possible to get pointers to FX chip memory.
Addressing a byte of FX chip memory takes 24 bits, and AVR’s pointers are 16 bits.

However, I know enough magic to make a ‘pretend pointer’ that would behave in pretty much the same way, so we could do that if it seems useful.

(I have actually written ‘pretend pointers’ for progmem and EEPROM too, I just never got round to publishing them. Operator overloading is a wonderful thing.)

That one’s going to be a bit awkward.
Not awkward in the sense that it’s not doable, but so far all the print functions are actually inherited from Arduino’s Print class, so it might confuse a few beginners later down the line.

To be honest, if reading from the FX chip is as simple as I’m hoping, or we can at least get FX::readByte sorted then I think the rest might simply be a matter of replacing pgm_read_byte with FX::readByte and creating a fake pointer class.

The biggest problem is actually locating the data on the FX chip.
With progmem you get a nice variable name you can easily refer to, whereas you won’t get that with the FX chip.

It’s probably going to be more like reading data out of a file, or having to hardcode addresses.

2 Likes

I agree with this too, I think that the best way to implement this would be to add an additional layer of abstraction where you instance your variables against a class which the library then binds to a specific spot in memory and handles the rest.

I would really hope we might be able to get closer to just defining a variable with like PROGMEMFX or something like that and the library does the heavy lifting for us.

I’m not quite sure that is possible though as such. Actually… I’m not sure how to do it with defines, but if you could implement each spritefx as a function that otherwise returns the same bit format as the progmem?

1 Like

Many posts to catch up too. Haven’t read them all yet though. My appologies for the slow progress on the library. With the lower pace of development I also spent time on other projects. There is a simple library that reads from flash. But more useful functions need to be added ofcourse.
I’ll focus on this next as I’ve finished updating the writer tool and modified the library for easier development as discussed before. In a nutshell:

  • upload your binary resource file with flash-writer tool using -d switch
  • flash-writer tool poops out a page number for development
  • the page number is passed on using cartInit() function so your program knows where find your data during development.
    During ‘normal play mode’ it’s the PC writer/builder tool that takes care of that.

The flash example is a simple test that makes use of this. There are still many things to do and it’s all about deciding the right priorities. If anyone needs some specific help I’m ready to help out. In the mean time I’ll be working on sprite support. But I’m happy to start working on ATMlibFX is someone has a masterpiece ready to test.
I’d like to make a (huge)tilemap with big sprites as example/tech demo. @2bitcrook got any big cool sprites?

It would be nice to have a wiki though where information could be added and browsed. Information is hard to find back after a while on the forum.

Your help is always appreciated

I haven’t given text a thought yet. But if the texts aren’t excessive a sprite of the text could be considered since there is enough space (and saving print on code)

Good to know that.

addressing will be uint16_t page, uint8_t offset. a uint16_t poiter can be used like:
uint16_t resourceStartPpage;
uint16_t offset;
resourceStartPpage + offset >> 8, (uint8_t)offset

and your magic is highly appreciated too :slight_smile:

The new changes makes that easy. After setting address with cartSeekData(page,offset); you could do something like

x=cartTransfer();
y = cartTransfer();
page = cartTransfer() + cartTransfer() * 256; //or maybe add cartTransferWord() ?
offset cartTransfer();

I’m planning to write a script that converts a text file into a binary data file and a .h header file. To help with that.
With fixed sizes though some simple math will be enough.

I haven’t worked through all the messages. I hope nobody feels ignored. For those who lost motivation for now I hope new progress will get you motivated again.

2 Likes

Sure will send one over. I think the overworld for Tacklebox should do the job.

2 Likes

just replying cos my name was mentioned :slight_smile:

I’m still very interested by an expansions/sequel for Dark and Under… While I’d love a devKit for “collectible” sake, the reality is that it’s an effort that would be quite wasted on me: I had nothing to do with the code of D&U (only the prototype, and it wasn’t Arduboy compatible, I wrote it in Java - I don’t know C++)

So really, put my last on your list: when @filmote decide he is ready to start working on it, we’ll discuss the constraints, and I’ll start mapping/arting/etc… for that I can use an emulator for a long time, before I ultimately need to test “on device” .

Again, not saying no, but recognizing that many people will be more instrumental pushing that product forward than me, particularly at that stage of the campaign :slight_smile: … now, if you have plenty to spare, that’s another story :slight_smile:

1 Like

PROGMEM is actually __attribute__((progmem)).
Basically it’s a way of signalling the compiler (GCC) to allocate the variable’s memory in a different memory section.

If pointers were 32 bit then I’d be inclined to think it might be possible, albeit a lot of effort (putting the variables in a particular section, have a script to extract that section from the .elf and put it onto the FX chip), but given that the FX chip needs 24-bit addresses I’m doubtful AVR’s 16-bit pointers would alllow something like this.

There are two options I can think of for that.

Option 1:
Use the Discourse wiki plugin to turn a thread into a Wiki.

Option 2:
Form a GitHub organisation, have a secret repo, either use that repo for documentation or have a GitHub wiki on that repo.
(And later on we can un-secret the repo so the general public can benefit from it when the FX is officially announced/released.)

I’m not sure what resourceStartPpage + offset >> 8, (uint8_t)offset is supposed to be representing.
Is that comma the comma operator?
And I’m pretty sure page + offset >> 8 would just discard the last 8 bits of the result (+ has higher precedence than >>).

Either way, that means it’s possible to use a pointer to store an offset within a page, but not a full 24-bit page and offset.

I think the first thing we need is simply a list of all these functions with documentation explaining what they do.
Once we’ve got the core functions documented we can discuss any concerns/changes and then divide up the work of writing helper libraries between us.
(To clarify: by ‘we’ and ‘us’ I mean ‘anyone who wants to contribute to library development’.)

All I’m getting from this example is that presumably cartSeekData is like std::fseek and cartTransfer is like std::fread.

I think either the functions should be static functions in a class or free functions in a namespace.
Then it’s possible to just do Cart::seek(page, offset) and Cart::readByte().

In fact, probably static functions in a class would be better because I know a lot of beginners have a hard time with using :: and feel the need to create a variable, so they could write cart.seek(page, offset) and cart.readByte().
(And of course that makes it possible to create a type alias for the class.)

1 Like

Tomorrow I’ll go through and do some orginization and add some wiki post for the library.

I think what would be nice is if maybe we approach it from two directions. One is what we “want to have” as far as best case scenario, or at least as close to feasible as we can get.

The other direction is the bare metal side of it, the actual writing and reading of the memory, how to dynamically allocate the ram for incoming assets, etc.

So I guess it would be basically like a list of requests for how the library should/could and then building behind it.

5 Likes

This is largely the stance @2bitcrook and I are taking. Things feel up in the air right now. We want to continue when things are more settled.

The reason I posted saying don’t send me a dev kit, is even with a dev kit in hand I’m not sure what I’d do with it. I’d rather wait for when more established guidelines have been set.

I think what I said was taken very personally. I’m not trying to derail or attack the project in any way. I’m also not sulking in the corner, mad that I’m “being ignored”. I merely pointed out then when we asked questions about how things are going and general timeline, we received no answer.

@2bitcrook and I needed to weigh the pros and cons of everything and find something that makes the most sense for us. We also have to consider that we have enlisted the help of 2bit’s musician friend. He has graciously given us some great music for the game. I worry about the risk of 2bit’s art and this music going unused, as that’d be a real bummer.

We decided, and honestly mostly I decided, a slightly less risky approach makes sense for us. Maybe I don’t have the stomach to be an early adopter.

And if we’re being honest here, I feel the project seems to move its target around a bit. Sometimes @bateske you are considering selling dev kits, scrapping the kickstarter, doing a patreon, etc. Many details are still being discussed and fleshed out. These are possibly signs that 3rd party people may have gotten involved too early. Or at least some 3rd party people such as myself (let’s be honest, I’m not as integral part of the community as others around here). I totally get it’s a side project. I have no problem with that. But I think once people get pulled it, it’s in everyone’s interest to find a good roadmap to guide everyone with. I don’t think FX has that yet.

3 Likes

I guess I pulled in game developers when I needed stack developers first. I’m not really experienced in managing a team of software and hardware developers this is kind of my first try so it has extra punch when I realize that being open and fluid with my ideas instead of more stoic and organized is the reason for such dissonance.

So far I’ve sent kits to:
@crait
@Pharap
@FManga
@Vampirics
@veritazz
@filmote
@city41

and obviously @Mr.Blinky has his.

If everyone wants to chime in and let me know they got theirs then I’ll close this cluster of a thread and organize the rest of this section with updates timelines and all of that other project management type stuff that has been lacking due to getting these out to everyone. Sorry it took 2 months extra.

2 Likes

Got mine! Already been working on Slayer Quest!! :man_dancing:

2 Likes

By the way it’s totally fine if you want to announce publicly you are working on games that take advantage of the flash mod just please don’t mention that it’s going to be in production yet.

3 Likes

I think I will hold off on that part… Just want to announce it sometime soonish, in general, and skip over that part, because there is more to the story… I think it may also surprise you a bit, too. :kissing_heart:

Part of the reason for sending the devkits now is so that everyone has one ready for when the library is being developed.

If we waited until the library was finished then we’d be at a point where all the tools are ready but nobody can use them.
But if we have them as the library is being developed then people can give feedback about the API and help to discover bugs.

Admitedly it seems like it’s been a while because we’ve had some delays,
but @Mr.Blinky has been doing a bit of work on the tools/library.
Although I admit that work hasn’t been very visible, which I think is part of the problem,
though I appreciate that it can be hard to keep your work visible if you’re used to working on your own or in a small group.

This is one of the reasons why a fair few of us haven’t really attempted to start on our games.

That’s partly why we’re all here - to contribute our thoughts on what the best way forward is.

The destination is known but the map is still being written and we’re all contributing cartographers.

Perhaps so, but it doesn’t make your thoughts or contributions any less valid.


Anyway, I think the crux of the matter is simply that you’ve sort of dived into working on your game expecting things to move a lot faster than they have done.
(Perhaps that’s partly our fault for not having noticed that and warned you against doing so.)

Ultimately this is all going to take quite a bit of time.
I suspect it will probably be at least Christmas by the point the FX units are available for sale, if not next January.

Until everyone gets their devkits this is mostly going to be a waiting game,
so getting on with other projects is probably the best thing to do for now.

That’s not necessarily a bad thing though.


I think this is a fair assessment.
(Though I think library/API developers is probably a better term,
‘stack’ development is webdev terminology.)

The library is probably the bottleneck at the moment,
which is why we really need some documentation.

I think it’s more the lack of organisation/structure than a lack of stoicism.
It’s no big deal though, mistakes are just another way of learning.

I’ve got an easy solution for keeping track.
I’ve been meaning to do this for a few days but just didn’t get round to it:

I’ll be keeping mine a secret from everyone but Team Falcon and one programmer I know personally.
I don’t like announcing things until they’re near completion.

Sorry for neglecting this conversation until now!

I feel overwhelmed with a devkit and on the same side with @city41.
As I’m not an experienced dev and I have no idea how to help developing a library/api for this system.

I was super overwhelmed by this pointer discussion later this week and I thought that a devkit would just be wasted on me if you send one.

Until now.

Sir @Pharap, you just again opened my eyes and I couldn’t agree more!

SEND ONE OVER! :grinning:

2 Likes

To get as far as you did/have with Arduwars I think it’s safe to say you certainly have a notable amount of talent.

The royal mail must have misplaced the letter notifying me about my knighthood. :P

2 Likes

Do not be so modest, we saw it on the news.

460x300_knighting

4 Likes

And to be honest I don’t really see myself being involved in that. I’m just not as invested in the hardware/library side as most here. I’d prefer to just focus on a game. So I think I my expectations and Kevin/the community’s expectations just didn’t line up. Not a big deal. I think we’re all on the same page now.

1 Like

That’s great to hear. Does it require ATMlib or other library?

One of the reasons of that is that no dev kits where out yet and it was sugested to wait until dev kits are out. It Also allows me to focus on coding instead of answering questions that may answer them self or are easier to understand with a dev kit at hand.

2 Likes

I have started work with Slayer Quest and working on a wrapper for the PSP/PSVita and BittBoy. With @2bitcrook’s permission, I am going to wrap and release Slayer Quest from those systems, as well, ensuring that the graphics and code don’t go to waste. I already have the wrapper mostly done for the PSP, as shown off with Midnight Wild.

“wrapper”?

(The 20 character limit is silly.)