Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • World
  • Users
  • Groups
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (Cyborg)
  • No Skin
Collapse
Brand Logo

CIRCLE WITH A DOT

  1. Home
  2. Uncategorized
  3. Let's make a Pi Pico 2 powered video card.

Let's make a Pi Pico 2 powered video card.

Scheduled Pinned Locked Moved Uncategorized
retrocomputing
144 Posts 30 Posters 0 Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • gloriouscow@oldbytes.spaceG gloriouscow@oldbytes.space

    There sure is a lot of 320x200 pornography.

    gloriouscow@oldbytes.spaceG This user is from outside of this forum
    gloriouscow@oldbytes.spaceG This user is from outside of this forum
    gloriouscow@oldbytes.space
    wrote last edited by
    #49

    I'm gonna use the title screen from 1990's VAXINE by The Assembly Line, published by US Gold.

    I don't remember anything about this game, but the title graphics are bangin'

    Link Preview Image
    gloriouscow@oldbytes.spaceG 1 Reply Last reply
    0
    • gloriouscow@oldbytes.spaceG gloriouscow@oldbytes.space
      • I've written a cycle accurate CGA emulation
      • I've made a working simulation of the CGA in a digital logic simulator
      • I've reproduced 80% of the original CGA PCB in KiCad (I really need to finish that)
      • I've captured digital logic traces from the CGA running demanding demoscene productions
      • I am intimately familiar with the ISA bus and bus timings
      • I've designed several PCBs in KiCad already and some of them even worked

      ...so why not?

      jrsharp@mastodon.sdf.orgJ This user is from outside of this forum
      jrsharp@mastodon.sdf.orgJ This user is from outside of this forum
      jrsharp@mastodon.sdf.org
      wrote last edited by
      #50

      @gloriouscow #doit

      1 Reply Last reply
      0
      • gloriouscow@oldbytes.spaceG gloriouscow@oldbytes.space

        I'm gonna use the title screen from 1990's VAXINE by The Assembly Line, published by US Gold.

        I don't remember anything about this game, but the title graphics are bangin'

        Link Preview Image
        gloriouscow@oldbytes.spaceG This user is from outside of this forum
        gloriouscow@oldbytes.spaceG This user is from outside of this forum
        gloriouscow@oldbytes.space
        wrote last edited by
        #51

        this is our final 912x262 video signal bitmap. The graphics don't actually need to be centered, since we're not trying to sync to VSYNC - we're producing VSYNC, so it can happen whenever. In this case its easier to translate CRTC parameters keeping the active display area origin at 0,0.

        Now we just need to save it as a raw binary.

        Link Preview Image
        gloriouscow@oldbytes.spaceG 1 Reply Last reply
        0
        • gloriouscow@oldbytes.spaceG gloriouscow@oldbytes.space

          this is our final 912x262 video signal bitmap. The graphics don't actually need to be centered, since we're not trying to sync to VSYNC - we're producing VSYNC, so it can happen whenever. In this case its easier to translate CRTC parameters keeping the active display area origin at 0,0.

          Now we just need to save it as a raw binary.

          Link Preview Image
          gloriouscow@oldbytes.spaceG This user is from outside of this forum
          gloriouscow@oldbytes.spaceG This user is from outside of this forum
          gloriouscow@oldbytes.space
          wrote last edited by
          #52

          "RAW binary" isn't one of Aseprite's export options, unfortunately, but we have BMP. The resulting BMP file is 240,022 bytes. That's an additional 1,078 bytes. That just so happens to be:

          BMP file header:      14 bytes
          DIB header: 40 bytes
          palette: 1024 bytes (256 entries × 4 bytes)
          ------------------------------
          final data offset: 1078 bytes
          gloriouscow@oldbytes.spaceG 1 Reply Last reply
          0
          • gloriouscow@oldbytes.spaceG gloriouscow@oldbytes.space

            This wasn't just a spur of the moment decision. I think ultimately, GlyphBlaster just makes more sense as an ISA card rather than being limited to living in the font ROM socket, and I've always wanted to make my own ISA card.

            Designs for ISA cards in KiCad can be found all over the place, but they usually have other people's projects on them.

            One thing I worked on previously is making a clean ISA card template in KiCad that you could start a new ISA card project with.

            Credit to @tubetime as I basically took his EGA card project and scraped everything off of it, keeping the edge connector, and IO plate engineering drawings.

            Link Preview Image
            tubetime@mastodon.socialT This user is from outside of this forum
            tubetime@mastodon.socialT This user is from outside of this forum
            tubetime@mastodon.social
            wrote last edited by
            #53

            @gloriouscow keep in mind the descender behind the edge fingers will prevent this card from fitting in a 16-bit slot. you might want to pull that back.

            gloriouscow@oldbytes.spaceG 1 Reply Last reply
            0
            • tubetime@mastodon.socialT tubetime@mastodon.social

              @gloriouscow keep in mind the descender behind the edge fingers will prevent this card from fitting in a 16-bit slot. you might want to pull that back.

              gloriouscow@oldbytes.spaceG This user is from outside of this forum
              gloriouscow@oldbytes.spaceG This user is from outside of this forum
              gloriouscow@oldbytes.space
              wrote last edited by
              #54

              @tubetime I mentioned that later!

              1 Reply Last reply
              0
              • gloriouscow@oldbytes.spaceG gloriouscow@oldbytes.space

                @Kroc Oh, believe me, I know all those guys (hi @polpo) and they've been a huge help already in making GlyphBlaster so far.

                polpo@chaos.socialP This user is from outside of this forum
                polpo@chaos.socialP This user is from outside of this forum
                polpo@chaos.social
                wrote last edited by
                #55

                @gloriouscow @Kroc 👋

                1 Reply Last reply
                0
                • gloriouscow@oldbytes.spaceG gloriouscow@oldbytes.space

                  I own a lot of ISA cards and I took measurements from several video cards, and there's no real standard - things vary a lot. You'll notice on this particular layout, the board edge dips down to give the most usable real estate after the end of the 8-bit ISA edge connector.

                  Unfortunately this means you can't plug an an original IBM CGA into your AT. We'll probably want to avoid that limitation. With a Pico replacing most of the logic on the board I don't really think we're going to need a full-length card in the first place.

                  polpo@chaos.socialP This user is from outside of this forum
                  polpo@chaos.socialP This user is from outside of this forum
                  polpo@chaos.social
                  wrote last edited by
                  #56

                  @gloriouscow I’ve found the drawings in the EISA spec (https://picogus.com/docs/isa/EISA_Specification-v3.1.pdf) to be the closest thing to actual cards I’ve seen BTW

                  1 Reply Last reply
                  0
                  • gloriouscow@oldbytes.spaceG gloriouscow@oldbytes.space

                    With a full board though, we could have a separate microcontroller that just handles the Wi-Fi. Maybe another RP2350? Maybe an ESP32? STM32 lol? I don't know. Worry about that later.

                    polpo@chaos.socialP This user is from outside of this forum
                    polpo@chaos.socialP This user is from outside of this forum
                    polpo@chaos.social
                    wrote last edited by
                    #57

                    @gloriouscow I’m pretty happy with my decision to use an ESP32 on PicoIDE. It’s a little awkward dealing with a different SDK and toolchain but kind of fun?

                    1 Reply Last reply
                    0
                    • gloriouscow@oldbytes.spaceG gloriouscow@oldbytes.space

                      Let's make a Pi Pico 2 powered video card.

                      This is going to be a long thread that either ends in glorious triumph or hilarious failure.

                      #retrocomputing

                      mirabilos@toot.mirbsd.orgM This user is from outside of this forum
                      mirabilos@toot.mirbsd.orgM This user is from outside of this forum
                      mirabilos@toot.mirbsd.org
                      wrote last edited by
                      #58

                      @gloriouscow let’s rather not buy stuff off the “surveillance cop, proud of it and silencing questioning voices” organisation

                      gloriouscow@oldbytes.spaceG 1 Reply Last reply
                      0
                      • gloriouscow@oldbytes.spaceG gloriouscow@oldbytes.space

                        "RAW binary" isn't one of Aseprite's export options, unfortunately, but we have BMP. The resulting BMP file is 240,022 bytes. That's an additional 1,078 bytes. That just so happens to be:

                        BMP file header:      14 bytes
                        DIB header: 40 bytes
                        palette: 1024 bytes (256 entries × 4 bytes)
                        ------------------------------
                        final data offset: 1078 bytes
                        gloriouscow@oldbytes.spaceG This user is from outside of this forum
                        gloriouscow@oldbytes.spaceG This user is from outside of this forum
                        gloriouscow@oldbytes.space
                        wrote last edited by
                        #59

                        one thing i've been struggling with all evening is how to restart the DMA buffer without inducing some sort of sync-killing delay or jitter

                        zachr@infosec.exchangeZ gloriouscow@oldbytes.spaceG 2 Replies Last reply
                        0
                        • mirabilos@toot.mirbsd.orgM mirabilos@toot.mirbsd.org

                          @gloriouscow let’s rather not buy stuff off the “surveillance cop, proud of it and silencing questioning voices” organisation

                          gloriouscow@oldbytes.spaceG This user is from outside of this forum
                          gloriouscow@oldbytes.spaceG This user is from outside of this forum
                          gloriouscow@oldbytes.space
                          wrote last edited by
                          #60

                          @mirabilos do you know how little that narrows it down

                          mirabilos@toot.mirbsd.orgM 1 Reply Last reply
                          0
                          • gloriouscow@oldbytes.spaceG gloriouscow@oldbytes.space

                            @mirabilos do you know how little that narrows it down

                            mirabilos@toot.mirbsd.orgM This user is from outside of this forum
                            mirabilos@toot.mirbsd.orgM This user is from outside of this forum
                            mirabilos@toot.mirbsd.org
                            wrote last edited by
                            #61

                            @gloriouscow the raspberry pi foundation, in this case (I have more grievances than just that one, too)

                            gloriouscow@oldbytes.spaceG 1 Reply Last reply
                            0
                            • mirabilos@toot.mirbsd.orgM mirabilos@toot.mirbsd.org

                              @gloriouscow the raspberry pi foundation, in this case (I have more grievances than just that one, too)

                              gloriouscow@oldbytes.spaceG This user is from outside of this forum
                              gloriouscow@oldbytes.spaceG This user is from outside of this forum
                              gloriouscow@oldbytes.space
                              wrote last edited by
                              #62

                              @mirabilos Cool! Why don't you go share those grievances in your own thread!

                              mirabilos@toot.mirbsd.orgM 1 Reply Last reply
                              0
                              • gloriouscow@oldbytes.spaceG gloriouscow@oldbytes.space

                                @mirabilos Cool! Why don't you go share those grievances in your own thread!

                                mirabilos@toot.mirbsd.orgM This user is from outside of this forum
                                mirabilos@toot.mirbsd.orgM This user is from outside of this forum
                                mirabilos@toot.mirbsd.org
                                wrote last edited by
                                #63

                                @gloriouscow already did

                                1 Reply Last reply
                                0
                                • gloriouscow@oldbytes.spaceG gloriouscow@oldbytes.space

                                  one thing i've been struggling with all evening is how to restart the DMA buffer without inducing some sort of sync-killing delay or jitter

                                  zachr@infosec.exchangeZ This user is from outside of this forum
                                  zachr@infosec.exchangeZ This user is from outside of this forum
                                  zachr@infosec.exchange
                                  wrote last edited by
                                  #64

                                  @gloriouscow that was kind of a pain when I was doing a similar thing, are you chaining two dma channels? Iirc that's fast but I couldn't make it wait for the frame buffer to be ready so there was some tearing. I also didn't have a lookup table so that would complicate matters

                                  Here is a writeup (not mine) of some PIO/DMA graphics gymnastics that does involve a lookup table, maybe some of the tricks will be useful: https://dmitry.gr/?r=06.%20Thoughts&proj=09.ComplexPioMachines

                                  Good luck and I look forward to seeing the updates!

                                  1 Reply Last reply
                                  0
                                  • gloriouscow@oldbytes.spaceG gloriouscow@oldbytes.space

                                    To simulate the OSC pin, I will program another Pico to just generate a 14.3181818 clock.

                                    "What's my purpose?"

                                    "You generate a clock."

                                    bytex64@awesome.gardenB This user is from outside of this forum
                                    bytex64@awesome.gardenB This user is from outside of this forum
                                    bytex64@awesome.garden
                                    wrote last edited by
                                    #65

                                    @gloriouscow I’ve done the exact same thing for a VGA 25.175MHz clock. 🙂

                                    gloriouscow@oldbytes.spaceG 1 Reply Last reply
                                    0
                                    • gloriouscow@oldbytes.spaceG gloriouscow@oldbytes.space

                                      one thing i've been struggling with all evening is how to restart the DMA buffer without inducing some sort of sync-killing delay or jitter

                                      gloriouscow@oldbytes.spaceG This user is from outside of this forum
                                      gloriouscow@oldbytes.spaceG This user is from outside of this forum
                                      gloriouscow@oldbytes.space
                                      wrote last edited by
                                      #66

                                      We have a picture. It isn't perfect - there's some flickery bits - I don't know if dot crawl is the right word. Not sure what's going on there.

                                      Driving sync signals with a single image buffer was untenable - it's really difficult to have seamless, continuous DMA on the Pico. Every time you restart DMA there's a discontinuity, and if the thing you're DMA'ing represents every single clock cycle in a video field, inserting extra time messes up your picture.

                                      So separate PIO programs generate hsync and vsync, and we restart our now image-only DMA in vsync, just like the OG Glyphblaster does, which we already know works.

                                      I think the crawling may be that the color output is not perfectly aligned with the dot clock.

                                      gloriouscow@oldbytes.spaceG 1 Reply Last reply
                                      0
                                      • bytex64@awesome.gardenB bytex64@awesome.garden

                                        @gloriouscow I’ve done the exact same thing for a VGA 25.175MHz clock. 🙂

                                        gloriouscow@oldbytes.spaceG This user is from outside of this forum
                                        gloriouscow@oldbytes.spaceG This user is from outside of this forum
                                        gloriouscow@oldbytes.space
                                        wrote last edited by
                                        #67

                                        @bytex64 just out of curiosity what's the derivation of that how how did you drive it with a pico?

                                        bytex64@awesome.gardenB 1 Reply Last reply
                                        0
                                        • gloriouscow@oldbytes.spaceG gloriouscow@oldbytes.space

                                          We have a picture. It isn't perfect - there's some flickery bits - I don't know if dot crawl is the right word. Not sure what's going on there.

                                          Driving sync signals with a single image buffer was untenable - it's really difficult to have seamless, continuous DMA on the Pico. Every time you restart DMA there's a discontinuity, and if the thing you're DMA'ing represents every single clock cycle in a video field, inserting extra time messes up your picture.

                                          So separate PIO programs generate hsync and vsync, and we restart our now image-only DMA in vsync, just like the OG Glyphblaster does, which we already know works.

                                          I think the crawling may be that the color output is not perfectly aligned with the dot clock.

                                          gloriouscow@oldbytes.spaceG This user is from outside of this forum
                                          gloriouscow@oldbytes.spaceG This user is from outside of this forum
                                          gloriouscow@oldbytes.space
                                          wrote last edited by
                                          #68

                                          I'm starting to think a pico is not the appropriate thing to build a video card with.

                                          all my fun ideas always end up with me concluding i should use an FPGA.

                                          FPGAs are like the crabs of electronics projects. everything wants to turn into an FPGA if you give it enough time.

                                          ldcd@social.treehouse.systemsL gloriouscow@oldbytes.spaceG fraggle@social.coopF jordan@sometimes.socialJ arclight@oldbytes.spaceA 6 Replies Last reply
                                          0
                                          Reply
                                          • Reply as topic
                                          Log in to reply
                                          • Oldest to Newest
                                          • Newest to Oldest
                                          • Most Votes


                                          • Login

                                          • Login or register to search.
                                          • First post
                                            Last post
                                          0
                                          • Categories
                                          • Recent
                                          • Tags
                                          • Popular
                                          • World
                                          • Users
                                          • Groups