Jump to content

Omegamatrix

Members
  • Posts

    6,822
  • Joined

  • Last visited

  • Days Won

    2

Blog Comments posted by Omegamatrix

  1. I believe the entire problem related to Millipede, Star Wars, and SpaceMaster-X7 is interferance with the AtariVox being plugged into the right port. I read that you said you needed it get your Atari working, but that is causing the issues here.

     

    I have tried these roms on real hardware myself, and they were fine. Please note that with Millipede the speed is halfed for the Y-axis as the area is very narrow vertically.

  2. I am amazed how much rom was reclaimed by this. I am sorry the logo didn't pan out. It didn't display well on my TV as you know, but it still was a beautiful logo.

     

    If you needed a couple more pixels (to make a 50 pixel display) you could move M0 one pixel left and M1 one pixel right. The left and right edges have no GRPx masking so it's a freebie. You just have to move the Missiles back for the menu display after, but it still takes very few bytes to do this.

  3. I can help just a little bit with optimizing as I don't have too much time.

     

    I am curious if you can run these kernels in ram. I know you did that for the graphics in Space Rocks, but this would be the kernels instead. If the datastreams can fetch while running in ram then concievably you could load the kernels into ram at startup and change a few registers (i.e. RESPx, COLUPx). It could save a lot of rom.

  4. FastJump is awesome.

     

    There's 57 kernels, 55 reposition kernels (11 for each object), 1 non-reposition kernel, and the score/radar/lives/formation kernel.

     

    That's just 1 of the 4 instances of SLEEP 4 in the entire game. Instead of sleeping, most of the kernels jump to another one in order to save ROM:

    That's alot of kernels for sure. :) Very impressive. With the sleep, it doesn't have to just be SLEEP 4.

     

    Old:

    Resp0Strobe23:                  ;   20
            sta RESP0               ; 3 23
            SLEEP 3                 ; 3 26
            lda #DS_SIZE            ; 2 28
            sta NUSIZ0              ; 3 31  <- changes player size
    
    New (minor savings of 1 byte):

    Resp0Strobe23:                  ;   20
            sta RESP0               ; 3 23
            tsx                     ; 2 25  X=$FF
            lda #DS_SIZE            ; 2 27
            sta NUSIZ0-$FF,X        ; 4 31  <- changes player size
    

    I see some short ranges jumps in your code there. It's worth a check to see if you can set/clear the overflow flag ahead of time to do some unconditional branches with BVC/BVS. You could save some bytes there.

  5. I love FastJump. :) I've stuffed routines into zeropage before to have a variable jump with tight timing... but zeropage is very limited in space.

    Fastjump does free a lot of cycles in the kernel. How many kernels are you using? If you have alot of SLEEP 4 you could PLA to save a byte as long as you don't care where the SP is.

    Else, one of my favorite tricks is to use ZP,X addressing (with X set to a known value) to save a byte over using ZP ABSOLUTE (.w) to delay a cycle.

    i.e.:

    tsx ; X=$FF for example
    sta RESP0-$FF,X ; store to RESP0 in 4 cycles, but takes only 2 bytes.


    Where this gets powerful is doing it multiple times to eliminate NOP's. In CAA I often use this to eliminate NOP's.

    ;--------------------------------------- Lines 57-59
    ldx #LEFT_5 ;2 @2 X=$50
    lda splsh_ColBall_17-$50,X ;4 @6
    sta COLUP1-$50,X ;4 @10
    lda #MISSILE_4_CLKS | QUAD_SIZE ;2 @12 $27
    sta NUSIZ0-$50,X ;4 @16


    I realize that you are using X in your kernels, but you might be able to save 10-20 bytes by rearranging your kernels to have X loaded from TSX before using "ldx DS_MISSILE0".

  6. Now, that I'm more familiar with DASM, I would recode that as:

            align 256
    BlankGraphic:
            ds 50, $00
            ds 26, $ff
    FrostyMask:
            ds 50, $00 

     

    That is a handy tip as it makes the list file so much easier to read. I never liked how repeat-repend would spit out every instance in the list file making it very long. I used to get around that by not choosing not to use repeat-repend and manually putting in all the bytes, or using repeat-repend with LIST OFF and LIST ON. Great tip though with using designated space!

  7. I loved it, and after Empire is my favorite Star Wars movie. The visuals were outstanding, very beautiful landscapes. I came out with the overall impression JJ was trying to get the fans of the original movies and the kids who grew up with the prequels all in the same boat along with a new generation of viewers. To me the master plan was to use this movie as a way to introduce all of the elements (again) and maybe start diverging the story from the next movie on.

     

    + Loved the new characters (Rey, Finn, BB2, Poe), aside from Kylo Ren.

    + I felt the magic at a lot of moments, and got teary eyed when the music would play a familiar theme.

    - Hated all the CG characters in the film. To me JJ threw that in there to bring in the crowd that grew up with the prequels. It was a deterrent to me. Bring in an actor in a rubber suit and I would have been happy. I'm sure some shots were CG and I didn't realize, but some characters just look.... CG

    - Wished JJ had been a little more daring with a new storyline. Still the script lines were better then most of the other films. I laughed when I was supposed to laugh.

    - The obvious plot holes.

     

    Still... this a great start to the new series.

  8. I haven't seen this yet, but I am looking forward to it. There is a documentary on Alan Turing I saw earlier on Canadian Netflix called "Codebreaker", and it was quite good. I recommend it. He was really a genius ahead of everyone's time. Very sad what he went through, but it was really a different era.

     

     

    You can take a look and see if it is on American Netflix.

  9. Impressive! Medieval Mayhem uses a shorter range as well, 0-74

    That's a nice range to deal with. You have more options of when to read the paddles in the kernel. I can't even begin sampling the paddles until a few lines after the last balloon row.

     

     

    I was happy I found a solution that didn't use X and Y... partly because I needed it, but also because it was something different to what had been done before. I always like to do new stuff. :)

  10. It'll be a week or more before my next Frantic or Draconian update. I'm keeping my Sundays code-free to help stave off burn out. Tomorrow I plan to return to work on Stella and won't work on anything else until after my Cartridge RAM addition is finished and has been submitted to stephena.

    One change I've been craving for (with Stella, with DPC+) is to not see a value in the debugger disassembly listing when LDA #Immediate is being used.

     

    I would rather see LDA #$XX because you don't know what the value is going to be, and it becomes annoying trying to figure out if something is going to branch or not when you forget that.

  11. That logo is awesome!

     

     

    It would be even better if at power-on you make the logo expand out to its full size from a single line. I mean start by drawing the middle line only, and pull the top and bottom out from there. The "D" in particular would look sinister as it would appear to be a lengthening spike as it comes to a point. You could also animate the green (station?) in the middle to rotate around and such after the logo is at full size.

     

    While the logo is forming play some sinister, scary music. The example that immediately popped in my head was from here. Note that they grow the logo from bottom to top, but I think it would look better starting in the middle and then growing up and down at the same rate. But maybe certain letters should take longer. The "d" would look great if it was the last to stop moving (so that your eyes are fixed on the spike). I think effects like these add a lot of "life" to a titlescreen. I love seeing stuff move around on a title screen. :)

    • Like 1
  12. Looks great! I like the colors. :)

     

     

    Perhaps you could try and go for a fifth digit? I haven't looked at the timings... but you could shave 12 more cycles off what you have (for 13 total). It looks like this game won't require a lot of ram so:

     

     

    - Use TIM8T for a auto-decrementing loop counter and graphics index. Requires re-arranging of graphics, but saves 4 cycles.

    - Load the loop into zero page ram.

    - Change the load zeropage for colors to load immediate, save 4 cycles.

    - Change the indirect Y and indirect Y (lax) to lda absolute Y and ldx absolute Y, and save 4 cycles.

  13.  

    Draconian, incidentally, means "excessively harsh or severe".

    If anyone here has ever read some of the Dragonlance novels then they will have heard of 'Draconian' before. In the novels Draconians were a race created by the kidnapping of the good dragons eggs and twisting them with black magic as they hatched. This resulted in a humanoid type creature. They served as assualt soldiers for the evil army.

  14. I was thinking some more about this tonight, and if the user has Y register available then they can claw back 2 bytes and shave 2 cycles. This makes it the same amount of bytes as the original attempt, but also makes it the fastest routine yet (excluding a straight forward look-up table).

    ;Hex2Bcd (good 0-99)
    ;24 bytes, 28 cycles
        tay              ;2  @2
        lsr              ;2  @4
        lsr              ;2  @6
        lsr              ;2  @8
        lsr              ;2  @10
        tax              ;2  @12
        tya              ;2  @14
        and  #$0F        ;2  @16
        sed              ;2  @18
        clc              ;2  @20
        adc  #0          ;2  @22
        adc  BcdTab,X    ;4  @26
        cld              ;2  @28
    
    
    
    BcdTab:
      .byte $00,$16,$32,$48,$64,$80,$96
    
×
×
  • Create New...