Ask anything your want about Megadrive/Genesis programming.
Moderator: BigEvilCorporation
-
Sik
- Very interested
- Posts: 939
- Joined: Thu Apr 10, 2008 3:03 pm
-
Contact:
Post
by Sik » Thu Oct 11, 2018 8:37 am
bioloid wrote: ↑Wed Oct 10, 2018 6:15 am
and this one doesnt save bytes, it looks like it's unrolled at build time
But that's precisely what you want (there are 64 vectors, two of those are reset and entry point, the rest are interrupts). But yeah, that's pretty much the same thing dcb would do.
Anyway, there's what Miquel said if you really want to save bytes, but honestly I wouldn't get too hung up over saving bytes in the 68000 vectors (especially if you intend to use the vblank or hblank interrupts later, as they end up in the middle of the vector table...) The last 16 vectors (64 bytes) are pretty much unused tho so feel free to put garbage there.
Sik is pronounced as "seek", not as "sick".
-
bioloid
- Very interested
- Posts: 179
- Joined: Fri May 18, 2012 8:22 pm
Post
by bioloid » Thu Oct 11, 2018 4:39 pm
Sik you are right, for a 4k I would need this blanks interrupts anyway, nevertheless I find what Miquel taught is awesome!
-
Miquel
- Very interested
- Posts: 514
- Joined: Sat Jul 30, 2016 12:33 am
Post
by Miquel » Sat Oct 20, 2018 9:01 pm
And to do the main loop in GCC, the one you should never exit, simply:
Code: Select all
mainLoop:
/* more code, like for example: */
bsr readInput
/* more code */
jra mainLoop
HELP. Spanish TVs are brain washing people to be hostile to me.
-
Chilly Willy
- Very interested
- Posts: 2984
- Joined: Fri Aug 17, 2007 9:33 pm
Post
by Chilly Willy » Tue Oct 23, 2018 8:03 pm
If the readInput routine reads the controllers directly, the main loop must have logic that prevents it from looping more often than once per vblank. Some controllers go crazy if they're read more often than 60 times per second. In fact, most people read the inputs as part of the vblank code, not the main loop.
-
Miquel
- Very interested
- Posts: 514
- Joined: Sat Jul 30, 2016 12:33 am
Post
by Miquel » Tue Oct 23, 2018 9:29 pm
readInput was just an example without real meaning, if I have understood it correctly what bioloid wants to do is set the screen to one color with the less possible file/rom size, were not talking about a typical MD program/game.
HELP. Spanish TVs are brain washing people to be hostile to me.
-
Miquel
- Very interested
- Posts: 514
- Joined: Sat Jul 30, 2016 12:33 am
Post
by Miquel » Sat Nov 03, 2018 4:15 am
You can avoid using vertical exceptions by checking the vertical bit on the vdp. Also there is the STOP instruction, but without exceptions I think it will not work.
Alternatively, you can use the same schema we used for the the ‘SEGA’ mark:
Code: Select all
/* code */
jra 1f
.org 0x78 /* check twice if it's really this number */
dc.l VerticalException
1:
/* code */
VerticalException:
/* VE code... */
I don't understand that 4kb rule, but if you are trying to do a 4kb ROM game you are going to suffer a lot of size pain, better compress the whole game and decompress it to RAM.
Instead if is a 4kb after compressing with zip/rar is more or less doable as long as graphics are plain and not compressed.
HELP. Spanish TVs are brain washing people to be hostile to me.
-
Chilly Willy
- Very interested
- Posts: 2984
- Joined: Fri Aug 17, 2007 9:33 pm
Post
by Chilly Willy » Sat Nov 03, 2018 11:59 am
Most tiny program contests I've seen allow compression and competitors make heavy use of that. If the one he's involved in does, the best thing would be to assemble the code to ram as well as data and compress that. The first two longs are the reset sp and reset vector, then you'd have the tiniest decompressor you can manage (with 0x100 being "SEGA" as usual), followed by the compressed block. The reset vector would point to the decompressor which would decompress the code/data block into ram and then jump to it.