[HN Gopher] Show HN: ZX Spectrum SCR to PNG Converter
       ___________________________________________________________________
        
       Show HN: ZX Spectrum SCR to PNG Converter
        
       Scratching my own itch. I had to do this for showing information on
       ZX Spectrum games. So thought I'd turn it into a useful tool for
       other people to use.
        
       Author : iamflimflam1
       Score  : 16 points
       Date   : 2025-01-17 11:20 UTC (1 days ago)
        
 (HTM) web link (www.esp32rainbow.com)
 (TXT) w3m dump (www.esp32rainbow.com)
        
       | kstrauser wrote:
       | Why's the Spectrum's screen layout different from, say, a C64?
       | The explanation on the page sounds a lot like the 64's.
       | 
       | (Not trying to sound snarky, but curious. Hope I can learn
       | something cool this morning!)
        
         | peterfirefly wrote:
         | You want something that is easy to use for a Z80 (and not to
         | hard to do with the custom logic chip, the "ULA").
         | 
         | Making each line (row) 256 bytes apart makes it fairly easy to
         | draw characters: copy a byte over from the ROM, increase the
         | ROM address by 1, increase the high byte of the screen address
         | by 1, continue.
        
         | Marazan wrote:
         | "Each block row subdivided into top, middle, and bottom parts
         | Memory stores all top rows first, then middle rows, then bottom
         | rows"
         | 
         | Is the key bit. If you are at mem location z which represent a
         | point on row y and you want to read the same x position 17 rows
         | down you can't do it by just multiplying a constant by 17 and
         | adding it to your current z.
        
         | cyberax wrote:
         | > Why's the Spectrum's screen layout different from, say, a
         | C64? The explanation on the page sounds a lot like the 64's.
         | 
         | This was done for some deep hardware reasons. The DRAM in ZX
         | Spectrum was addressable in pages of 128 bytes (7 bits). So to
         | select the address, the controller had to first select the page
         | and then read the byte.
         | 
         | But due to the screen organization, the address of a pixel and
         | the address of its attribute shared the same low 7 bits of the
         | address (out of 14 in total) so that the CPU could address both
         | without having to switch the page.
        
       | vitaliyf wrote:
       | Ahh, the Spectrum screen pixel math, oh the memories.
       | 
       | Once upon a time a much younger myself obtained a dot-matrix
       | printer that I managed to wire up to my computer. Sadly, it was
       | meant to only print text, and having a fancy typewriter
       | definitely wasn't very much fun to me. Somehow, I figured out
       | that the printer actually supported defining custom fonts! After
       | some reverse-engineering of the format I ended up with a program
       | to slice the screen into rectangles matching printer's letter
       | sizes (which were not 8x8 pixels, to make it extra fun) and
       | sending them as custom font definition for each symbol of the
       | alphabet, then printing "ABCD..."
       | 
       | Getting a paper printout of loading screens or in-game screenshot
       | art was mind-blowing.
        
       ___________________________________________________________________
       (page generated 2025-01-18 23:01 UTC)