Jump to content

Roy

Members
  • Content Count

    59
  • Joined

  • Last visited

Posts posted by Roy


  1. 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! :thumbsup:

    • Like 1

  2. 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. :lol:

    • Like 1

  3. 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!


  4. I find my method more efficient:

     

    ;=========================================================

    ;==== 7800 Expansion Module BIOS

    ;=========================================================


  5. 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.


  6. 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!)


  7. 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?


  8. 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.
    	rti 

    Frame 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! :thumbsup:


  9. 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.

    • Like 1

  10. 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 IRQ

     

     

    Where 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:
    RTI

     

    Excluding code to clear ram, this may be all you need plus the header. Hope this helps some, I'm by no means an expert. :D 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 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
    ;Console Equates
    SWCHA = $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.)

     

    • Like 1

  11. Hey, I was about to start a thread! :mad:

     

    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. :-D

    • Like 3

  12. 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. :P 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.

    Bullet Festival.a78

    • Like 4

  13. Neat! I'll be sure to play around with that code, see what happens. :P

     

    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!

×
×
  • Create New...