Roy
-
Content Count
59 -
Joined
-
Last visited
Posts posted by Roy
-
-
Hard to say.
What are the starting display list list addresses? Maybe there is a terminating $00 $00 before address $2342? Does anything change if you zero out $2342 - $2345?
-
Great stuff! Always been a fan of your music.
-
Got mine! Thanks Tep and Cpu!
-
Cool! I want one as well.
-
For anyone looking for something other than photoshop or gimp, I have started using Aseprite to make my spritesheets.
Works great with Bob's program when you specify Aseprite to use its indexed color mode and use a canvas size of either 128 * 64 or 128 * 128 depending on 8 or sixteen high zones. Export as a bmp and feed it to BMP7800.
Late to the party here, but thanks for the program bob!

-
1
-
-
I'm not hiding, I swear! Here's the scoop:
I found myself swamped with various projects in various states of completion. I have a really bad habit of losing interest in one thing and going to something else. I'm currently working on a car so I have something to drive before my daily driver gives up the ghost.
On the topic of Bullet Festival (name pending) I will need to rewrite huge chunks of code. While working on a second 7800 program, and with the help of various members here, I managed to write a display kernel thats much faster than the one in Bullet Festival. I also have a properly working pokey sound engine that I'll add to it was well; hopefully not sounding like trash this time.
Things will be very slow, but I have not abandoned it. I'll open source all my spaghetti code before that happens! Though that'll happen regardless. As I work on more assembly projects (6502 and MIPS) and gain more experience I typically go back and change old programs. In time, you guys can !
Thanks for still being interested though! I really wish there were 10 of me hanging around to get everything finished.

-
1
-
-
Good to hear, thanks!
-
Just a quick question regarding illegal opcodes. Have there ever been any cases where such opcodes work on one machine but act erratically on another? Not sure if there are different revisions of 6502s in different 7800s or not.
I'm not going crazy with them so far, and have found LAX #$00 ( #$A7 #$00 ) to be handy in a few places, but I'd like a bit of peace of mind they'll work across the board. Thanks in advance!
-
Found a unit with a smashed shell. Had a hole for the expansion, but it was not soldered in.
A1 77 5942454
-
-
There's also a pretty handy wiki full of information here: http://7800.8bitdev.org/
Also contains the document tdididit posted. I find myself constantly referring to it.
-
2
-
-
I find my method more efficient:
;=========================================================
;==== 7800 Expansion Module BIOS
;=========================================================
-
Heh, that would make sense! Unless that segment of rom were all graphics, bank swapping $4000 - $7FFF sounds like it will give me more headache than anything.
I may just bite the bullet and sacrifice some rom for more graphics and make some cuts here and there. Thanks for your help, guys.
-
Well, I did have XM in mind with this project. Thing is I have so many sprites, plus needed background graphics, that I don't think I can fit everything if I did both a left and right. I also want to stick to a normal 48K rom size.
I did get a routine working that can properly flip the graphics, but I can't find much documentation for accessing the XM features. No clue how to write to external ram! I found something for the xboard, but initial tests crashed the program the second I wrote to $0470 to enable ram.At it's core, without looping through the entire graphics, this is one byte being flipped for 160A mode:lda oldByte and #%00000011 ror ror sta var1 lda oldByte and #%00001100 rol rol sta var2 lda oldByte and #%00110000 ror ror sta var3 lda oldByte and #%11000000 rol rol sta var4 lda newByte clc adc var1 sta newByte lda newByte clc adc var2 sta newByte lda newByte clc adc var3 sta newByte lda newByte clc adc var4 sta newByte
I figure something like this, plus additional looping, can be run before the game even starts as to not get in the way. I guess the idea is to sacrifice ram for more rom. (levels!)
-
One more question! Is it possible to flip sprites vertically? Or will I need to have both a left and a right graphic set for every single sprite in my game? If that's the case, I'm not sure I can fit all my graphics into the game.
Edit: Doing a bit of digging, it seems the 7800 can't flip sprites. But I wonder, via XM, if it's possible to copy and mirror the the sprites in ROM to XMRAM? Anyone thought of doing anything like this?
-
Thanks for the help guys. I'll see what I can put together! TBH this is something I probably should have nailed down from the beginning.
-
I have been looking at my program structure, and it seems with how I am currently doing things, I guess I'm running out of cycles? The time it takes the engine to calculate changes, setup the DLLs, and play music, seems to spill into drawing time creating difficult to debug glitches. (And God knows what else my buggy engine is creating
)I'm starting on a smaller project from scratch, this time taking care of when I begin to calculate changes. Hopefully by doing this, I can make my SHMUP better/actually work. Before, I would wait for MSTAT at the beginning and end of my infinite loop with all changes being calculated between those two points. The article HERE brings up a really good point that a NMI should be triggered after visible display. This sounds good, so do you guys think the best way to get the most out of the 7800 is to wait for this Display List Interrupt, calculate game changes immediately, then process the DLLs, then finally wait for the start of visible display? I'm assuming without the wait at the end of the program, everything would run too fast? Also the wiki states game logic should be separate from display logic. Does display logic constitute only building the DLLs?
Here's a stripped snippet of my main loop:
;End of setting up DL, clearing ram, etc... ;==================================================================================================== ;MAIN LOOP loop: ;Before, I had almost all of my changes happening here. Everything except some background drawing logic... ;How should I use this section if the game logic is calculated at the end of ;visible display? What should go here? jmp loop ;==================================================================================================== NMI: ;This section is triggered by the DLI at the end of visible display. rtiFrame timing and sound are my two weakest areas, so I'm hoping the vets here could show me the best way to get the most cycles out of the console and how I should wait for the next frame... Thanks for your time!

-
There is an old program HERE that I used for my wip game. Maybe it can export in a format you can use? I had to manually enter my graphic information into a binary and include it into the assembly due to using a different assembler...
-
You specify where Maria looks for it by writing to the appropriate register.
Maria equates
BACKGRND = $20 ;Background Color
P0C1 = $21 ;Palette 0 - Color 1
P0C2 = $22 ;Palette 0 - Color 2
P0C3 = $23 ;Palette 0 - Color 3
WSYNC = $24 ;Wait For Sync
P1C1 = $25 ;Palette 1 - Color 1
P1C2 = $26 ;Palette 1 - Color 2
P1C3 = $27 ;Palette 1 - Color 3
MSTAT = $28 ;Maria Status
P2C1 = $29 ;Palette 2 - Color 1
P2C2 = $2A ;Palette 2 - Color 2
P2C3 = $2B ;Palette 2 - Color 3
DPPH = $2C ;Display List List Pointer High
P3C1 = $2D ;Palette 3 - Color 1
P3C2 = $2E ;Palette 3 - Color 2
P3C3 = $2F ;Palette 3 - Color 3
DPPL = $30 ;Display List List Pointer Low
P4C1 = $31 ;Palette 4 - Color 1
P4C2 = $32 ;Palette 4 - Color 2
P4C3 = $33 ;Palette 4 - Color 3
CHARBASE = $34 ;Character Base Address
P5C1 = $35 ;Palette 5 - Color 1
P5C2 = $36 ;Palette 5 - Color 2
P5C3 = $37 ;Palette 5 - Color 3
OFFSET = $38 ;Unused - Store zero here
P6C1 = $39 ;Palette 6 - Color 1
P6C2 = $3A ;Palette 6 - Color 2
P6C3 = $3B ;Palette 6 - Color 3
CTRL = $3C ;Maria Control Register
P7C1 = $3D ;Palette 7 - Color 1
P7C2 = $3E ;Palette 7 - Color 2
P7C3 = $3F ;Palette 7 - Color 3
DPPH & DPPL.
-
1
-
-
Just for giggles, try this at the bottom of the assembly:
.byte $FF ;Region verification
.byte $47 ;ROM start $4000
.word NMI
.word START
.word IRQWhere the NMI, START, and IRQ point to addresses with the same name. I'm not sure if the emulators require it, but you need to also initialize the 7800 at the START label. As you may know, the 6502 on startup looks for these vectors at the bottom of ROM.
ex:
START:
sei ;Disable interrupts
cld ;Clear decimal mode
;Atari recommended start-up procedure
lda #$07
sta INPTCTRL ;Lock into 7800 mode
lda #$7F
sta CTRL ;Disable DMA
lda #$00
sta OFFSET
sta INPTCTRL
ldx #$FF ;Reset stack pointer
txs
;INSERT CLEAR RAM CODE HERE
loop:
jmp loop
NMI:
RTI
IRQ:
RTIExcluding code to clear ram, this may be all you need plus the header. Hope this helps some, I'm by no means an expert.
Oh, and be sure to also have the hardware addresses defined:
INPTCTRL = $01 ;Input control
AUDC0 = $15 ;Audio Control Channel 0
AUDC1 = $16 ;Audio Control Channel 1
AUDF0 = $17 ;Audio Fr=ency Channel 0
AUDF1 = $18 ;Audio Fr=ency Channel 1
AUDV0 = $19 ;Audio Volume Channel 0
AUDV1 = $1A ;Audio Volume Channel 1
INPT0 = $08 ;Paddle Control Input 0
INPT1 = $09 ;Paddle Control Input 1
INPT2 = $0A ;Paddle Control Input 2
INPT3 = $0B ;Paddle Control Input 3
INPT4 = $0C ;Player 0 Fire Button Input
INPT5 = $0D ;Player 1 Fire Button Input;Maria equatesBACKGRND = $20 ;Background Color
P0C1 = $21 ;Palette 0 - Color 1
P0C2 = $22 ;Palette 0 - Color 2
P0C3 = $23 ;Palette 0 - Color 3
WSYNC = $24 ;Wait For Sync
P1C1 = $25 ;Palette 1 - Color 1
P1C2 = $26 ;Palette 1 - Color 2
P1C3 = $27 ;Palette 1 - Color 3
MSTAT = $28 ;Maria Status
P2C1 = $29 ;Palette 2 - Color 1
P2C2 = $2A ;Palette 2 - Color 2
P2C3 = $2B ;Palette 2 - Color 3
DPPH = $2C ;Display List List Pointer High
P3C1 = $2D ;Palette 3 - Color 1
P3C2 = $2E ;Palette 3 - Color 2
P3C3 = $2F ;Palette 3 - Color 3
DPPL = $30 ;Display List List Pointer Low
P4C1 = $31 ;Palette 4 - Color 1
P4C2 = $32 ;Palette 4 - Color 2
P4C3 = $33 ;Palette 4 - Color 3
CHARBASE = $34 ;Character Base Address
P5C1 = $35 ;Palette 5 - Color 1
P5C2 = $36 ;Palette 5 - Color 2
P5C3 = $37 ;Palette 5 - Color 3
OFFSET = $38 ;Unused - Store zero here
P6C1 = $39 ;Palette 6 - Color 1
P6C2 = $3A ;Palette 6 - Color 2
P6C3 = $3B ;Palette 6 - Color 3
CTRL = $3C ;Maria Control Register
P7C1 = $3D ;Palette 7 - Color 1
P7C2 = $3E ;Palette 7 - Color 2
P7C3 = $3F ;Palette 7 - Color 3;Console EquatesSWCHA = $280 ;P0, P1 Joystick Directional Input
SWCHB = $282 ;Console Switches
CTLSWA = $281 ;I/O Control for SCHWA
CTLSWB = $283 ;I/O Control for SCHWB
(sorry, not sure how to use spoilers.)
-
1
-
-
Hey, I was about to start a thread!

Heh, just kiddin', thanks everyone! Things are coming along nicely since the last time I made an update, though I have to apologize for my slow pace. Been tackling my weakest area in programming here lately: sound engines. I have one working and in place now, but ironing out the kinks. I hope to make one light weight enough that it wont interfere with drawing to the screen, but offer just enough for some neat effects.
Other than tweaking some graphics and getting the sound working, the last few things that need addressed are collisions and a scoring system. After that simply adding content and features until code runs out of the seams. Everything else is in place though.

-
3
-
-
Yeah, progress is still slow. Lately I have been trying to fix a bug that scrambles my screen once and a while. Like I said previously, my timeframe is getting pushed back due to current issues at home and school. I'm also in the middle of learning C programming, since knowing only assembly sort of limits what I can work with!
You guys will see this completed, don't worry!
Ninja edit:
OK, lemme catch you guys up real quick. Recently I fixed all my graphics issues, everything displays as it should. I also have the menu in place, but only start game works properly. I have also added a introduction cutscene thing showing the ship launching. For now, I have completely stripped out the collision since it was not working as it should. This Sunday after I tweak a few routines, I'll post another ROM. You won't see too much more compared to last time, since most changes are under the hood. More to come later!Second ninja edit:
Ok, the ROM is attached. Tested and works on real hardware and MESS. Again, not bumping due to lack of content. I'm having issues with writing to the pokey chip in my sound engine that I'm working on, so that's ripped out along with a broken collision routine.
In this, you can see that I'm playing with the idea of background pieces moving when you bank left and right. Biggest addition is the intro sequence. The final version will be extended and sped up(and slightly changed to remove flickering in the center background piece) and I'll draw some more text. (Probably like GET READY! or something.) Last thing changed is the title. In the end, I want this to be a more light-hearted shooter with a festival-like theme. Still undecided on the title though. If you see this before my next thread bump, thanks for the interest! I hope to have this done as soon as possible.-
4
-
-
Neat! I'll be sure to play around with that code, see what happens.

Edit because I don't want to bump this thread yet:
I have taken some time from this project to learn some modern programming. (C#, etc...) Once I do this, I'll be able to make myself some better tools and have a stronger grasp at programming in general. I still frequent this site and have every intention to finish it! This may push back my timeframe I wanted, but I really need to do this and go to school while I'm at it. I'll keep checking in and provide any updates I make!
-
OK, I'll take a look later tonight. Maybe I somehow wrote to the wrong register.

Idea for homebrew title that 7800-homebrew dev. may consider to produce: Pac Land 1984
in Atari 7800
Posted
You could take it a step further and make both the eyes and hat separate sprites to mimic what is displayed in the arcade game. The eyes would be drawn last to overlay any foreground graphics.