Jump to content

SpiceWare

+AtariAge Subscriber
  • Posts

    18,545
  • Joined

  • Last visited

  • Days Won

    11

Blog Comments posted by SpiceWare

  1. 13 hours ago, thanatos said:

    They have played at MGC the past 2 years, music is awesome and they also are super nice people.  Too bad their tour doesn't include it this year!

     

    I'd noticed them at the Houston Arcade Expo before, last year was the first time I watched them. During the performance the Harp Twins mentioned they were from northern Illinois, so MGC's not far from where they live.

     

    Looks like a scheduling conflict, they'll be in Texas the weekend of MGC at the San Antonio Highland Games & Celtic Music Festival.

     

    image.thumb.png.a4df739f229287a21053e1fee15c3da0.png

     

     

     

    Helotes is on the northwest side of the San Antonio metro, been there many times as it's on the way to Bandera where we have family.


  2. You're welcome @mario64!

     

    I don't recall on Defender.  I searched my hard drive and found those files in ~Projects/Atari/Helping Others/ScottWhite/

     

    The other directories I have under Helping Others are mostly AtariAge user names, so I checked AtariAge for a Defender related post by user ScottWhite, but that username does not exist. Usernames can be changed on AtariAge, so it's possible Scott's now using a different username.

     

    Anyway I've added the source to the blog entry.  It was created by Stella and my changes are:

     

     

    ; set to 1 for VSYNC fix, set to 0 for original
    VSYNCFIX    = 1
    
    VBLANKFIX  = 1
    
    ...
    
    ;---------------------------------------
     if VSYNCFIX = 1
        lda #$36
        ldy #$00
        ldx #$7f
        sta WSYNC
        sty VSYNC
        sta TIM64T
        sty PF0
    ;    stx VBLANK
     else
        sta     WSYNC                   ;3   =   3
    ;---------------------------------------
        lda     #$36                    ;2        
        sta     TIM64T                  ;4        
        ldy     #$00                    ;2        
        sty     PF0                     ;3        
        sty     VSYNC                   ;3        
        ldx     #$7f                    ;2        
        stx     VBLANK                  ;3
     endif
    
    ...
    
     if VBLANKFIX = 1
        lda     #$26                    ;2        
        sta     TIM64T                  ;4
    ;    sta WSYNC
        sta VBLANK
     else
        lda     #$26                    ;2        
        sta     TIM64T                  ;4
     endif    
    

     

  3. Looking at the statistics I realized that using the average speed in fps would be a good way to review the results:

     

    image.thumb.png.efb45967e14675ef9b8bd1546cff99ba.png

     

    Being able to run 4 concurrent conversions improved throughput by on the Mac Pro by 45% and 126% on the Mac Studio.

     

    I was surprised to see that the size of the resulting file was not consistent as every test run was done using episode 1 of season 7.  There must be some randomization in the compression process.

  4. For the Pro it was initially 58:27 to convert 1 video.   Briefly converted 1 again to get the CPU activity:

     

    ScreenShot2023-07-23at10_17_47AM.png.0ff22df0a3ee387f52b5c44be4efb39e.png

     

    So there is some unused capacity.  The Pro has a 6 core CPU with hyperthreading.  

     

    Cancelled the 1, then fired off 2 concurrent conversions which took 1:27:51

     

    ScreenShot2023-07-23at12_03_27PM.png.e0ee29b133780d5c22465fa348143334.png

     

    ScreenShot2023-07-23at12_03_23PM.png.8b174763601d11593b85d05f6b830d71.png

     

    CPU activity:

    ScreenShot2023-07-23at10_21_51AM.png.4c6af4f7306bc98be44d1b03968c90ed.png

     

    Test with 3 underway.

  5. Runtime increased to 28:00 for 4 at once.

     

    Screenshot2023-07-23at11_21_22AM.thumb.png.d756b873327850538f211b8c8a9209ad.png

     

    Screenshot2023-07-23at11_21_24AM.thumb.png.7f76de09b3b870a185262e89e64bdb23.png

     

    Screenshot2023-07-23at11_21_30AM.thumb.png.d9089287018aa522967fa337880ed708.png

     

    Screenshot2023-07-23at11_21_27AM.thumb.png.8c71bef21da55577b034b4b802e8440c.png

     

     

    All but 1 core was pegged:

     

    Screenshot2023-07-23at10_48_28AM.thumb.png.502d7b4b574d49fbeb14f113d09563ba.png

     

    So I can now convert 8+ episodes in the time I used to do 1.  

     

    Of course I never tried that setting on the Pro, so I currently have a test with 2 running on it right now. About 17 minutes remain.

  6. Just a few seconds faster this morning:

     

    image.thumb.png.29e17a4c26c45c5109f122bddf660375.png

     

    I did notice that not all cores are active:

     

    image.thumb.png.0d38069c2c1b581d36a41bae03fc345e.png

     

    So wondered if I could make Handbrake convert multiple videos at once. Found this setting, which can be increased to 2, 3, or 4:

     

    image.thumb.png.115fcdeea62847bc6b8d70cbe3a59c0f.png

     

    Have a test running with it set to 2.

     

  7. On 7/21/2023 at 11:09 PM, KainXavier said:

    Thank you for the tutorials!

     

    You're welcome!

     

    On 7/21/2023 at 11:09 PM, KainXavier said:

    You made a comment in your code about how the last six bytes / three words were reserved for the 6507 interrupt vectors, but what exactly are those?

     

    The documentation to look at for those 6 bytes is for the 6507 processor.  The 6507 is a member of the 6500 family of CPUs, so you can find that at 6502.org.

    1. Click on Documents in the top-right corner
    2. Click on Books
    3. Download mcs6500_family_hardware_manual.pd
    4. Download mcs6500_family_programming_manual.pdf

    The documentation is quite detailed, so I'll try to summarize it.

     

    If an external event occurs the CPU needs to be informed about it so the event can be handled. An example would be if you were calling a BBS with a modem.  The chip that talks to the modem, known as a UART, had limited resources so after it receives a byte of data it must hand it over to the CPU right away before the next byte comes in. It does this by flagging an interrupt to the CPU. Some chips in the system can have a timer, such as RIOT in the 2600.  When the timer runs out an interrupt will be flagged so the CPU knows about it.

     

    FFFA-FFFB = NMI vector

     

    These 2 bytes point to the routine that handles a Non-Maskable Interrupt. The CPU cannot ignore an NMI, you'd use this for the UART because if the CPU ignored the byte of data it could be lost by being overwritten by the next byte that's received. When an NMI occurs your program is temporarily halted while the CPU runs the NMI routine.

     

    FFFC-FFFD = RESET vector

     

    These 2 bytes point to the routine that handles a Reset. This occurs when the system is initially powered on because the state of the hardware will be unknown, such as the Accumulator in the CPU will contain a random value between 0-255. The reset routine is used to initialize everything to a known state. The reset can also be triggered on systems that have a dedicated reset button*

     

    FFFE-FFFF = IRQ vector

     

    These 2 bytes point to the routine that handles Interrupt ReQuest. The CPU can ignore an IRQ, you'd use this for things like the timer as it's not critical that the timer is handled right away because the CPU can check if the timer ran out at any time.  When an IRQ occurs your program is temporarily halted while the CPU runs the IRQ routine.  This can also be triggered by your program via a BRK instruction.

     

     

    The 6507 is a 6502 that's put into a reduced package, it only has 28 pins instead of 40. This reduces the cost of the CPU. Some of the missing pins include those needed to signal the NMI and the IRQ, so those cannot be triggered on the 2600 by external events.  The IRQ can still be triggered by a BRK instruction as that happens inside the CPU. I had that occur on accident in Medieval Mayhem.  BRK can be used as a space saving way to call subroutines, though this is an advanced technique. @Thomas Jentzsch explained this in the old Stella mailing list.

     

     

     

    the red button on my Mega-Cart is an example of a reset button.  After playing a game I can press that button to reset my VIC20. This lets me select a different game to play without having to power cycle my VIC-20.

    IMG_3688.thumb.jpeg.494e26b4a4c4986fd83848cadfe17219.jpeg

     

     

     

    • Like 1
    • Thanks 1
  8.  

    Draconian final ROM is in this blog post.

     

    By this:

     

    22 hours ago, johannesmutlu said:

    wooden stylish atari handheld

     

    I assume you mean the Flashback Portable? Draconian uses an ARM in the cartridge as a coprocessor, I don't think the Flashback supports that.

     

     

    The Harmony Cart has an ARM processor in it and supports running Draconian on a real Atari.  To see what version of the firmware you have hit FIRE on the line at the top with [.] 

    image.thumb.jpeg.f7f6f275c3b9bd7c51b287f500e51208.jpeg

     

    that'll take you to a credits screen which displays the firmware version at the top.  Mine is running v1.06:

     

    image.thumb.jpeg.64c0c88bbf5b7b0bfc66b17563793026.jpeg

     

    You need to have at least v1.05 for Draconian to work.  If your Harmony is lower then go here for the latest firmware and instructions.

    • Like 1
  9. On 9/4/2022 at 3:39 AM, Nathan Strum said:

    The time is apparently lost forever (which is annoying, since blogs are effectively snapshots of time, and I happen to like to know when I posted something originally).

    When I was adding categories I had some blog entries, that were originally posted on the same day, change order because of the time issue.  I took a break from doing that as I went out of town for a couple weeks (foreshadowing for the Tesla Club)

     

  10. 2 hours ago, JohnGri said:

    Can you elaborate on the .byte $24 trick that causes the inx to be skipped?

     

    I think I explained this trick in a comment in another part of the tutorial <searching>

     

    Looks like I explained it for .byte $2C which skips over 2 bytes. The concept is the same for .byte $24, except it just skips over 1 byte.

     

    • .byte $2C = BIT absolute address (a 16 bit address, which is 2 bytes)
    • .byte $24 = BIT zero page (an 8 bit address, which is 1 byte)
    • Like 1
  11. 3 hours ago, JohnGri said:

    That is amazing that you wrote this when you were 15

     

    Just to be clear, I didn't write the Collect tutorial when I was 15. I was writing machine language subroutines on my VIC 20, such as a screen scrolling routine for a Super Cobra type game that was written in BASIC. The scroller routine was in machine language because it was too slow in BASIC.

  12. On 8/28/2020 at 4:22 PM, Robson Zandoná said:

    Does it work on the Stella emulator?
    Because mine doesn't open.

     

    Sorry, I missed your question until just now.

     

    Yes it does, though you may need to update to a newer version of Stella.

     

    Draconian uses a new bank switching scheme called CDF, which was first added in version 5.0 in 2017. Stella's CDF support has seen a seen a number of updates since then, most recently for the latest revision of CDF called CDFJ+, which supports games up to 512K in size.

     

  13. 1 hour ago, Vectrexer said:

    I like version option nomenclature you have listed. 

     

    Suggest also checking with @Richard H. to see if another differences exist for ancient VecMulti versions.  Might as well try to cover them if there are more.

     

    Thanks!  Possible other versions of VecMulti was also part of the idea behind using radio buttons.

     

    16 minutes ago, NeonPeon said:

    Wow, it's so simple. Apologies for the mixup. I take it you don't need me to send the .rtf file then? I have no problem doing so if you do need it; just sounds like you've got it figured out already is all. ?

     

    No worries, by having the EXE I was able to confirm the ##.men ROM files followed the same convention in both versions of the VecMulti.

    • Like 1
  14. 4 hours ago, SpiceWare said:

    The older version has ^@9 for the same number of ROMs. 9 = $39, so its ROM count is $0039 or 57.  Actual file count is still 58, so the two VecMulti menu routines differ their count by 1.

     

    Turned out the last game in my Games directory was not showing up in the VecMulti menu, so this looks like it was an off-by-one bug in my port.  I don't know if that was a bug my original port, or just the recent re-port. I've fixed it and added the ability the quit the program using COMMAND-Q.

     

    I partially figured out the issue with com.company.MenuMaker.plist - in MenuMaker.app/Contents/Info.plist I found this:

      <key>CFBundleIdentifier</key>
      <string>com.company.MenuMaker</string>

     

    and if I change it to this

      <key>CFBundleIdentifier</key>
      <string>com.spiceware.MenuMaker</string>

     

    the Preferences now get saved in com.spiceware.MenuMaker.plist

     

    don't know where the initial company is coming from, but that works for now.

     

    I'm thinking about changing the checkbox to 2 radio buttons:

    • original VecMulti
    • 2019+ VecMulti

    I think that'll make usage a bit clearer.  Any feedback on this?

     

    Also has anybody confirmed it works correctly for the 2019 VecMulti?

    • Like 1
  15. @NeonPeon, @Nathan Strum here's a 0.4 beta version that hopefully correctly creates the menu for the new VecMulti cart.

     

    MenuMaker_04beta.app.zip

     

    By default it'll create a menu for the original VecMulti.  Check the new New VecMulti (2019) check box to create a menu for the new version.

     

    4092650_ScreenShot2022-01-09at3_50_40PM.thumb.png.a4583ad36685714e005db455ab868dd4.png

     

    I figured out how to get that checkbox saved in ~user/Library/Preferences/ so it'll remember it between runs, though for some reason the plist file it's using is com.company.MenuMaker.plist. I'm trying to find where "company" is coming from.

    • Like 1
×
×
  • Create New...