Jump to content

Just Jeff

Members
  • Posts

    592
  • Joined

  • Last visited

Posts posted by Just Jeff

  1. Hmm I checked it all out..   I think you guys give me too much credit.  Do I need to know Python?

     

    I did think of something on the way to work the other day..  Using my graphics spreadsheet formula and just re-arranging it a little bit, I can paste the samples in columns B and C, then concatenate in column A, then copy/paste column A into my code. I would have to break up line 2 manually here to add my labels.  Is what your suggesting easier?

     

    image.png.c01927f5e5137d8c04c6294a90ea4d5f.png

     

    Thanks!

    -Jeff

     

  2. On 10/13/2023 at 2:45 PM, Bomberman94 said:

    Wow what a great game (played last build via PlusCart) and even though it is only NTSC version on my PAL Atari, it played just fine (just wrong colors). Only thing I would wish is a little animation when passenger moves - that all, everything’s else is superb! This one must have a cartridge release please and maybe you can say how many different levels you will include? You can easily increase variation with lesser fuel or others colors etc. With this version I heard the voice for the first time - it is a flashback to my C64 time many years ago 🥹

    Thanks!

     

    Yeah I'll be animating the passenger at some point.  I've always liked the C64 passenger's attitude when boarding and exiting.  I'll see if I can do that using only ten dots!  

     

    PAL- maybe.  But if I do, it would be after almost everything else.

     

    Everything for the cartridge has been arranged.  The rights have been squared away with the IP owner and with Albert's assistance who would, of course, be publishing it.

     

    I'm targeting 24 levels.  I don't think I'll need to reduce anything to do that.  And FYSA, I haven't made any effort on the background graphics yet really.  I just put some quick and dirty graphics in there so you can recognize which screen you're on, and so I can write the tables, etc that make the game work in general.  So, for example, Short and Sweet screen will have the candy cane, gumdrops (maybe Starburst Fruit Chews if I can't round them off), candy cane border, the lollypop's resolution will be doubled.  Taxi Pong will have a bouncing ball, net, more paddle detail, etc.  Taxi Trainer and Cactus aren't even close yet.  In fact, those are the pads for Teleports screen.  I just threw it in there so I could fill in tables and address them.   Its tempting to do the graphics stuff now, but... bigger, boring, universal stuff first.

     

    Yeah I'm doing the voice the hard way.  I don't like using modern hardware.  It's just not my thing.  I always have this "Could they have done this?" goal that guides me.

     

    Anyway, coincidentally..  I intend to work on the passenger kernel band today because the voice code doesn't fit in it and so contributes to the poor voice quality.  So maybe while I'm in there, I'll look into animation.

     

    Finally..  I've been training for a marathon and it's prevented me from working on this for the most part.  But the peak training is done and the marathon is two weeks from today, after which I should have a lot more time for development!

     

    -Jeff

    • Like 2
    • Thanks 1
  3. Good Morning,

     

    Does anyone know of a tool that will take two blocks of data and combine them in an interlaced manner?

     

    I have some voice samples for a 2600 game I'm writing that will run faster if two samples are stored together- a byte from one, then a byte from the other, and so on like this:

    image.png.ee258d6e247cff7808443bd8252ab799.png1st byte is from "Hey Taxi", 2nd is from "Thanks", 3rd is from "Hey Taxi", 4th from "Thanks", and so on.

    Thanks!

     

  4. On 10/11/2023 at 9:36 AM, -^CrossBow^- said:

    I was trying this newest .bin last night on my 7800 and wasn't able to get it working for me properly. 

     

    What was happening was similar to what we saw when Jame's was getting some odd graphical glitching that was causing the taxi to immediately register a collision detect and crashing it. But I didn't see any graphical issues taking place in my case. Here are some more details...

     

    I'm playing on an A1 model 7800 using my Uno cart with the UCA FW load on it. 

     

    At first it was playing fine but then after I got the third person to their platform and then tried to pick up the 4th, as soon as I landed on the platform, the game reset itself back to the title screen? I then tried to play again and it started to do the crash reset back to title screen as soon as I would try and descend to the first platform to pick up the first passenger? Just did that over and over. I then found out while this was going on, that if I placed my difficulty swiches from Right (Where they were sitting at the time) to the Left, that I was able to now get past the 1st screen and could pick up the passenger and go up. But then as soon as I got to about 1/3 of the way down from the top on the second screen, it reset again back to title and kept doing this over and over.

     

    Power cycling my 7800 did NOT correct this issue and it continued to behave this way from then on. So yeah... I'm basically not able to get any further than maybe a few passengers (at first) before it starts to crash and reset itself back to the title screen.

     

    My UNO is the only cartridge I have that I think can play this game. I have an older Harmony and it just gives a file load error when trying to run the .bin and the BBPro 7800 adapter doesn't seem to support this file size or banking system yet either as it just gives a scrambled screen when trying to load.

     

     

    So I had a similar conversation with James @ZeroPage Homebrew just prior to the show.  I believe I might have fixed it in the attached .bin but I don't have any way to test because I use Plus and Harmony on a 2600.  Please give it a shot and let me know.  I also did a quick and dirty test of a voice volume fix.  Please let me know if its louder now.

     

    Thanks!

    -Jeff

     

    SpaceTaxi.asm.bin

    • Like 2
    • Thanks 2
  5. On 10/7/2023 at 3:21 PM, Dionoid said:

    Wow, very impressive!!!!

    Also that full-with title screen is amazing. 

     

    Atari 2600 title screen:

    image.png.a48bac39fc8262016a1ae44eb875336b.png

    Original Commodore 64 title screen:

    Space Taxi C64 Longplay [123] Full Playthrough / Walkthrough (no  commentary) #c64 #retrogaming - YouTube

     

    That shows some amazing TIA black-belt skills.

     

     

    Thanks!  I did it a few years ago when I was still learning 6502 and Stella.  The effort to make that friggin' bottom thruster look PETSCII..:

     

    image.thumb.png.81a9c8b93413314e9c0d738aa4acbf40.png 

     

     

     

     

     

     

    • Like 4
  6. I thought about something like that but I'd have to put it in all the banks where all the data is.  Additionally, I'm not only flipping one byte, There are two bytes involved where they are flipped and switched out with the other byte- so it gets me almost nowhere..  I tried using a 16 byte table to at least flip the right nybble to the left nybble of the other byte but it didn't really help me.

     

    Thanks!

  7. Thanks!

     

    It will save 2 cycles with direct replacement.  It does require using a byte of temp RAM but fortunately, that made me realize I could use that elsewhere for another 7 cycles saved.  I could save another two cycles by introducing a 2nd temp byte to replace RAM1,x on the 3rd and 7th lines if I choose.  Any other ideas anyone?

     

    
    RAM1        ;Swap space, no permanent game data
    RAM2        ;Game data
    
    .loop
        lda #$F0    ;2 2 Load a mask
        and RAM2,x  ;4 5 Take the left nybble of the game data
        sta RAM1,x  ;4 9 and store it in the swap space
    
        lda (ROM),y ;5+ 14 Load the right nybble of the sound data
        and #$0F    ;2 16 apply mask
        sta Temp    ;3 19
        ora RAM1,x  ;4 23 Add it to the left nybble of game data
        sta RAM1,x  ;4 27 This byte is done.  Game data in left nybble, sound in right.
    
        ;lda (ROM),y ;5+ removed
        ;and #$0F    ;2 removed
        ;sta Temp    ;3 removed
        lda RAM2,x  ;4 31
        and #$F0    ;2 33
        ora Temp    ;3 36
        asl         ;2 38
        adc #$80    ;2 40
        rol         ;2 42
        asl         ;2 44
        adc #$80    ;2 46
        rol         ;2 48
        sta RAM2,x  ;4 52
                    ;left nybble of sound data is in right.
        dex         ;2 54
        dex         ;2 56
        dey         ;2 58
        bpl .loop   ;2/3 60/61

     

  8. Good Morning,

      I need to swap nybbles between two different bytes and have been trying to figure out some clever way to do it.  Everything I try seems awkward.  Does anyone have something slicker?

     So: 

     

    These for two bytes
    .byte $AB    ;Two sound bytes. Left ($A) cannot play, so it needs to move.
    .byte $CD    ;Game data

     

    needs to be something like:

    .byte $CB
    .byte $DA    ;So that B plays, then A plays.  C and D can be any arrangement (re-assembled before use)

     

    Here's what I've come up with:

    RAM1        ;Swap space, no permanent game data
    RAM2        ;Game data
    
    .loop
        lda #$F0    ;2 2 Load a mask
        and RAM2,x  ;4 5 Take the left nybble of the game data
        sta RAM1,x  ;4 9 and store it in the swap space
    
        lda #$0F    ;2 11 Load a mask
        and (ROM),y ;5+ 16 Take the right nybble of the sound data
        ora RAM1,x  ;4 20 Add it to the left nybble of game data
        sta RAM1,x  ;4 24 This byte is done.  Game data in left nybble, sound in right.
    
        lda (ROM),y ;5+ 29 Load sound data
        asl         ;2 31 Move D7 into carry
        rol RAM2,x  ;6 37 and then into D0 or game data
        asl         ;2 39 and repeat...
        rol RAM2,x  ;6 45
        asl         ;2 47
        rol RAM2,x  ;6 53
        asl         ;2 55
        rol RAM2,x  ;6 61 Now the right nybble of game data is in left nybble and 
                    ;left nybble of sound data is in right.
        dex         ;2 63
        dex         ;2 65
        dey         ;2 67
        bpl .loop   ;2/3 69/70

     

     

    Additionally, it doesn't matter if C and D swap positions, or if their bits are reversed. They will be re-assembled before use.

    Also, the sound data ($AB) originates in ROM, so it cannot be manipulated until loaded. 
    The Game data is only in RAM

     

     

     

     

     

     

  9. Good Morning,

     

    I have an issue in Stella where the break command fails to break at the spot in the code.  Stella seems to be confused by the bank switching.  For example it thinks this label is in bank one but its really in bank four:

     

    image.png.c357cc9c5847f2f82d99407fce059112.png

    But its in 4

     

    image.png.0a7bd513e453370541c4e5771838c582.png

     

    I've verified that it is running through the PackRAM routine.. Does anyone know how to fix this?  Thanks!

     

     

  10. Hello!!  Sorry its been a while..   Had to focus on training for some races, a car accident, and work..

     

    Just wondering if anyone has any better ideas for playing digital voice nybbles inside the kernel.  I have few methods here and I suppose all could be used. 

     

    Assume that enough sound nybbles (~50) have all been set up in RAM prior to the start of the kernel and that a new nybble will have to be stored in AUDV1 about every 4 lines, but misses and variations probably wouldn't be too noticeable if they happen.

     

    Straight forward player: 

    BasicNybblePlayer:	;Uses 15 cycles and A and X registers
          tya         ;2 2	Use scan line index to drive the player
          lsr         ;2 4	Multiply by 4 so new nybble is loaded every 4 lines
          lsr         ;2 6
          tax         ;2 8
          lda RAM,x   ;4 12	Load the new (or existing)
          sta AUDV1   ;3 15 Even though this may get stored every line, it will only change every 4 lines

     

    Hijack the DoDraw:

    ;Saves 8 cycles over separate player/DoDraw routines. Doesn't update nybble if taxi is present on line.  Probably not very noticeable
    ;Taxi graphics must be padded with an additional zero line to clear GRP0 since zero is no longer loaded in A.
    
    SilentDoDraw:
          lda #Player0_HEIGHT-1   ;2 2
          dcp Player0Draw         ;5 7
          tya                     ;2 9 Use scan line index. Moved here to balance cycles.  Does not affect carry flag
          bcc .Playnibble         ;2/3 11/12
    .DoDrawGrp0c                  ;0 11
          lda (Player0Ptr),y      ;5 16
          sta GRP0                ;3 19
          SLEEP 3                 ;3 22
          jmp .SkipNybble          ;3 25
    .Playnibble ;12
          ;tya         ;Moved up to balance cycles
          lsr         ;2 4	Multiply by 4 so new nybble is loaded every 4 lines
          lsr         ;2 6
          tax         ;2 8
          lda RAM,x   ;4 12	Load the new (or existing)
          sta AUDV1   ;3 15 Even though this may get stored every line, it will only change every 4 lines
    .SkipNybble

     

    Taxi disappears during speech (saves one more cycle (9) and sound isn't interrupted on those lines.  One additional byte of RAM needed.

    CheckSpeechDoDraw:
          lda RAMPlayer0_HEIGHT-1 ;3 3  Either has the true height of the taxi, or a negative number indicating speech is playing
          bmi Speak               ;2/3 5/6
          dcp Player0Draw         ;5 10
          bcs .DoDrawGrp0c        ;2/3 12/13
          lda #0
          .byte $2C 
    .DoDrawGrp0c                  ;0 13
          lda (Player0Ptr),y      ;5 18
          sta GRP0                ;3 21
          jmp DoneSpeak           ;3 24
    
    Speak:
          tya         ;2 2	Use scan line index to drive the player
          lsr         ;2 4	Multiply by 4 so new nybble is loaded every 4 lines
          lsr         ;2 6
          tax         ;2 8
          lda RAM,x   ;4 12	Load the new (or existing)
          sta AUDV1   ;3 15 Even though this may get stored every line, it will only change every 4 lines
          SLEEP 3     ;3 24
    DoneSpeak

     

     

    Thanks!

    -Jeff

     

     

     

    • Thanks 1
  11. On 4/9/2023 at 3:56 PM, Bomberman94 said:

    As I’m a big fan of Space Taxi: any chance for a PAL release in parallel to the NTSC version? Thanks you so much 🥹

    Well I just don't know..  Its the kind of thing I'll just have to put off thinking about until things are more complete.  Its a really big project!

    • Like 1
  12. OK Here's the latest .bin..  I've split out the passenger bands from the pad bands so I'm not rewriting them every time.  Made an off-center rhombus and a cloud.  I also created some more pad bands from the "Teleports" screen.  These pads are really straight-forward so I'm going to use them as placeholders to build remaining screens' logic (but not graphics.)  Also notice I'm planning on building "The Beach" in reverse due to early HMOVE limitations.

     

    image.thumb.png.8e80ab791d1cbe4aa15953d5c364fa11.png  image.thumb.png.bc1a7b4d6988f4a2ad2b6fe75b722656.png

    SpaceTaxi.asm.bin

    • Like 8
    • Thanks 1
  13. OK Thanks Darrell!..  The unrolled kernel seems to be key.  I think maybe I can use that with no RAM maybe.

     

    I pushed the dashboard aside for a bit while I figured some other stuff out.  I decided to add a center pad on the screen, knowing it would force me to think through a lot of other things- which it did.  I had taken some shortcuts which at this point were roadblocks.

     

    So at this point:

    The passenger knows where the taxi is when on the pad and walks to or from it instead of wandering.

    The first 3 screen layouts vary in design, and the number of trips varies as well, and the tables are there to change all the screens eventually.

    Screen 1 has a decorative feature and a name!

     

    Note: on the attached .bin, screen 2 has 2 pad #1s.  So if the passenger calls for pad #3, its the pad at the bottom of the screen. Also, I made the game unwinnable just for fun- temporarily.

     

    image.thumb.png.72996fb71a14840509f3b31055a139ac.png

     

    That's all for now

    SpaceTaxi.asm.bin

    • Like 6
  14. Thanks!  That certainly works and I'd love to add all those cycles too.  I have the RAM and ROM, but there is another timing issue.  Prepping the 30 bytes makes the dashboard fat.  It looks like this adds 210 cycles- right? A short while back I put some effort into doing the opposite- undid pre-merging RAM and adding those ORAs in the score area.  So, I need to revisit that and see where I can gain those cycles or accept the thicker dashboard.  Maybe a combo of the two like you said.  Maybe convert the loop to 5 separate lines, ldy immediate load on each line for the index. I might be able to get away with pre-merging only one of the characters.

     

    I also wonder what I would put in that right space..

     

    Thanks again!

    -Jeff

    • Like 1
×
×
  • Create New...