{ "version": "https://jsonfeed.org/version/1", "title": "Ted's Tidbits", "icon": "https://micro.blog/ted/avatar.jpg", "home_page_url": "https://tidbits.tedchoward.com/", "feed_url": "https://tidbits.tedchoward.com/feed.json", "items": [ { "id": "http://tedchoward.micro.blog/2023/11/02/dallas-morning-news.html", "content_html": "
Dallas Morning News front page today
\n\n", "date_published": "2023-11-02T15:46:22-05:00", "url": "https://tidbits.tedchoward.com/2023/11/02/dallas-morning-news.html" }, { "id": "http://tedchoward.micro.blog/2023/07/02/vga-followup.html", "title": "VGA Followup", "content_html": "I need to remember how valuable writing is as a thought tool. The other night I was truly\nstumped as to how to solve my VGA problem.
\nAs I was finishing writing my previous post, I began to get an idea of where to start\ndebugging my problem. I even said so in the post:
\n\n\nRemember, there’s a break at the end of every line. This means that I need to start\nloading the character data for the start of the next line at the end of this blank\nperiod. There’s also a longer break at the end of each screen. This means that I need to\nload the data for the first character of the screen at the end of this blank period.
\n
\n\nI think this is where the bug is. All the characters in the first column are one\nhalf-line (at 320x240) lower than the rest of the screen. My best guess is that I need\nto start the data load a little sooner during the blank period.
\n
So, I looked for the code that calculates which row of pixels to load, and I found this:
\nwire [11:0] rom_adr = { pattern_num, vga_vpos[3:1] };\n
This line says, “the location in ROM is composed of the pattern_num
(i.e. the ASCII\ncharacter) and bits 3, 2, and 1 of the current line”. Apologies to anyone still\nreading this that isn’t familiar with binary numbers, but those details don’t really\nmatter. What matters is what I put in bold above. We are using the value of the\ncurrent line to calculate the value of the next character. This works for every character\nin a row, except for the first character.
When we read the font data for the first character in a row, we are using a value based on\nthe previous row. We need a special case for when we read the first character.
\nThis is what I ended up with
\nwire [10:0] rom_adr = { pattern_num, (display_on ? vga_vpos[3:1] : next_rom_row) };\n
Basically this says that if the display is on, use the current line position. If the\ndisplay is off, (i.e. the blank period at the end of the line) use the next line position.
\nThere was some other work I had to to do calculate that value properly, but it works now!
\n\n", "date_published": "2023-07-02T16:58:39-05:00", "url": "https://tidbits.tedchoward.com/2023/07/02/vga-followup.html" }, { "id": "http://tedchoward.micro.blog/2023/07/02/debugging-a-vga.html", "title": "Debugging a VGA Issue", "content_html": "I’m building an 8-bit computer. I should probably write an overview of the project, why I decided to do it, how I got started, etc, but today I have a problem to solve.
\nTake a look at the following image:
\n\nThis shows a VGA monitor displaying text at a resolution of 40 columns x 30 rows. Each character is an 8x8 block, giving an overall screen resolution of 320x240 pixels.
\nNow, what’s the problem?
\nLook closely at the first column. Does it look a little off to you? It did do me, which caused me to zoom in.
\n\nThe first column is one half-line lower than all the following columns.
\nHow can this be?
\nIt’s time to talk about how this is supposed to work.
\nI have an FPGA that is acting as a video processor (like the VIC II in the Commodore or the ANTIC/GTIA combo in the Atari). I have a character font stored in ROM. There’s also a section of RAM that stores the ASCII values of the characters to display on the screen in order. The first byte in this section of RAM controls the character in the top-left corner of the screen. The last byte controls the character displayed in the bottom-right corner of the screen.
\nIn order to control a VGA monitor, the video processor sends the pixel data (either on or off in my case) for each pixel on the display starting at the top-left, one line at a time, moving left-to-right. This happens at a constant rate, with a fixed-length break at the end of each line, and a slightly longer break at the end of each screen. This process happens 60 times every second.1
\nIn order to display the expected values on the screen, the video processor must do the following:
\nAs you can imagine, the timing of these operations is critical. We need to load the next character from RAM and the font data from ROM while we are in the process of sending the pixel data to the monitor for the last character.
\nOh yeah, one other thing. VGA doesn’t technically support a screen resolution of 320x240, but it does support 640x480. So I’m drawing every pixel twice per line, and drawing every line twice.2
\nWhen the processor is outputting the 5th pixel for a character, it starts loading the data for the next character. This seems to work just fine for almost the entire screen, except for the first column.
\nRemember, there’s a break at the end of every line. This means that I need to start loading the character data for the start of the next line at the end of this blank period. There’s also a longer break at the end of each screen. This means that I need to load the data for the first character of the screen at the end of this blank period.
\nI think this is where the bug is. All the characters in the first column are one half-line (at 320x240) lower than the rest of the screen. My best guess is that I need to start the data load a little sooner during the blank period.
\n\n\n", "date_published": "2023-04-14T13:55:16-05:00", "url": "https://tidbits.tedchoward.com/2023/04/14/layoffs-will-continue.html" }, { "id": "http://tedchoward.micro.blog/2023/04/11/five-dallas-council.html", "title": "Five Dallas Council Members Call for Independent Study of I-345 Removal", "content_html": "\nThe tech worker layoffs are best understood as an all-out war on tech worker morale, because that morale is the source of tech workers' confidence and thus their demands for a larger share of the value generated by their labor. The current tech layoff template is very different from previous tech layoffs: today’s layoffs are taking place over a period of months, long after they are announced, and laid off tech worker is likely to be offered a months of paid post-layoff work, rather than severance. This means that tech workplaces are now haunted by the walking dead, workers who have been laid off but need to come into the office for months, even as the threat of layoffs looms over the heads of the workers who remain. As an old friend, recently laid off from Microsoft after decades of service, wrote to me, this is “a new arrow in the quiver of bringing tech workers to heel and ensuring that we’re properly thankful for the jobs we have (had?).”
\n
\n\n", "date_published": "2023-04-11T09:10:09-05:00", "url": "https://tidbits.tedchoward.com/2023/04/11/five-dallas-council.html", "tags": ["Dallas"] }, { "id": "http://tedchoward.micro.blog/2023/04/05/this-just-came.html", "content_html": "That’s the difficulty in this debate. It’s about the city’s future, a generational chance to trade eight elevated lanes of highway for an eventual new neighborhood. The members who added their names to the memo have expressed more interest in analyzing the opportunities removal could present; after all, traffic data cannot account for changes in technology and behavior, both of which inform how frequently people drive. As Councilwoman Willis asked last year, what happens if the city’s economic development plan creates jobs in southern Dallas so residents there no longer have to drive as far to get to work?
\n
This just came in the mail. It’s about time I started trying to understand computers! 😜 📚
\n\n", "date_published": "2023-04-05T11:44:52-05:00", "url": "https://tidbits.tedchoward.com/2023/04/05/this-just-came.html" }, { "id": "http://tedchoward.micro.blog/2023/04/01/im-finally-learning.html", "content_html": "I’m finally learning how to solder. I think I’m doing pretty good.
\n\n", "date_published": "2023-04-01T17:00:56-05:00", "url": "https://tidbits.tedchoward.com/2023/04/01/im-finally-learning.html" }, { "id": "http://tedchoward.micro.blog/2023/03/28/i-just-started.html", "content_html": "I just started reading: The Apple II Age by Laine Nooney. This is going to be an interesting read.📚
\n", "date_published": "2023-03-28T21:21:06-05:00", "url": "https://tidbits.tedchoward.com/2023/03/28/i-just-started.html" }, { "id": "http://tedchoward.micro.blog/2022/12/06/i-really-enjoyed.html", "content_html": "I really enjoyed reading this interview with Cory Doctorow.
\n", "date_published": "2022-12-06T12:43:09-05:00", "url": "https://tidbits.tedchoward.com/2022/12/06/i-really-enjoyed.html" }, { "id": "http://tedchoward.micro.blog/2022/12/04/have-you-ever.html", "content_html": "Have you ever wanted to start composting, but have been too lazy? Do you have gutters? Are you equally as lazy about cleaning your gutters? I may have some good news for you.
\n", "date_published": "2022-12-04T16:07:26-05:00", "url": "https://tidbits.tedchoward.com/2022/12/04/have-you-ever.html" }, { "id": "http://tedchoward.micro.blog/2022/12/04/things-they-dont.html", "content_html": "Things they don’t tell you about owning a home: you will periodically need to sweep your roof.
\n", "date_published": "2022-12-04T15:51:07-05:00", "url": "https://tidbits.tedchoward.com/2022/12/04/things-they-dont.html" }, { "id": "http://tedchoward.micro.blog/2022/11/17/in-the-early.html", "content_html": "In the early days of Twitter, all people posted about was Twitter. We have now come full-circle.
\n", "date_published": "2022-11-18T00:16:44-05:00", "url": "https://tidbits.tedchoward.com/2022/11/17/in-the-early.html" }, { "id": "http://tedchoward.micro.blog/2022/11/14/i-just-got.html", "content_html": "I just got A Women’s Lectionary for the Whole Church: Year A by Wilda C. Gafney. I’m looking forward to using this to plan our Advent lessons. 📚
\n", "date_published": "2022-11-14T19:14:40-05:00", "url": "https://tidbits.tedchoward.com/2022/11/14/i-just-got.html" }, { "id": "http://tedchoward.micro.blog/2022/11/14/i-havent-given.html", "content_html": "I haven’t given up on Twitter yet, but I’ve noticed several people I follow have started using Mastodon. My blog speaks Mastodon, so you can follow me at ted@tidbits.tedchoward.com
\n", "date_published": "2022-11-14T17:31:41-05:00", "url": "https://tidbits.tedchoward.com/2022/11/14/i-havent-given.html" }, { "id": "http://tedchoward.micro.blog/2022/10/10/robin-rendle-doesnt.html", "content_html": "Robin Rendle doesn’t believe in sprints. I find myself agreeing with this position more and more over time. www.robinrendle.com/notes/i-d…
\n", "date_published": "2022-10-10T11:14:34-05:00", "url": "https://tidbits.tedchoward.com/2022/10/10/robin-rendle-doesnt.html" }, { "id": "http://tedchoward.micro.blog/2022/10/10/i-want-one.html", "content_html": "I want one of these! www.retrokits.de/index.php…
\n", "date_published": "2022-10-10T10:35:18-05:00", "url": "https://tidbits.tedchoward.com/2022/10/10/i-want-one.html" }, { "id": "http://tedchoward.micro.blog/2021/08/10/global-temperature-over.html", "content_html": "Global Temperature Over My Lifetime
\n", "date_published": "2021-08-10T09:54:15-05:00", "url": "https://tidbits.tedchoward.com/2021/08/10/global-temperature-over.html" }, { "id": "http://tedchoward.micro.blog/2021/07/28/how-traffic-studies.html", "content_html": "How Traffic Studies Perpetuate a Traffic Congestion Obsession
\n", "date_published": "2021-07-28T11:49:53-05:00", "url": "https://tidbits.tedchoward.com/2021/07/28/how-traffic-studies.html" }, { "id": "http://tedchoward.micro.blog/2021/07/20/txdot-intends-to.html", "content_html": "TXDOT intends to spend $25 billion widening highways in cities. What if we tore then down instead?
\n", "date_published": "2021-07-20T09:41:19-05:00", "url": "https://tidbits.tedchoward.com/2021/07/20/txdot-intends-to.html" }, { "id": "http://tedchoward.micro.blog/2021/07/15/three-cheers-for.html", "content_html": "Three Cheers for Socialism: Christian Love and Political Practice
\n", "date_published": "2021-07-15T17:01:35-05:00", "url": "https://tidbits.tedchoward.com/2021/07/15/three-cheers-for.html" }, { "id": "http://tedchoward.micro.blog/2021/06/17/the-spaghetti-warehouse.html", "content_html": "\n", "date_published": "2021-06-17T11:21:24-05:00", "url": "https://tidbits.tedchoward.com/2021/06/17/the-spaghetti-warehouse.html" }, { "id": "http://tedchoward.micro.blog/2021/06/15/what-we-really.html", "content_html": "What We Really Lose When Highways Destroy Historic Neighborhoods - D Magazine
\n", "date_published": "2021-06-15T17:31:55-05:00", "url": "https://tidbits.tedchoward.com/2021/06/15/what-we-really.html" }, { "id": "http://tedchoward.micro.blog/2021/06/08/why-we-should.html", "content_html": "Why We Should Pay Dallas City Council Members More www.dmagazine.com/frontburn…
\n", "date_published": "2021-06-08T16:36:47-05:00", "url": "https://tidbits.tedchoward.com/2021/06/08/why-we-should.html" }, { "id": "http://tedchoward.micro.blog/2021/05/16/i-built-a.html", "title": "I built a computer on a breadboard!", "content_html": "\n", "date_published": "2021-05-16T22:13:00-05:00", "url": "https://tidbits.tedchoward.com/2021/05/16/i-built-a.html" }, { "id": "http://tedchoward.micro.blog/2021/05/13/with-current-technology.html", "content_html": "\n", "date_published": "2021-05-13T11:24:34-05:00", "url": "https://tidbits.tedchoward.com/2021/05/13/with-current-technology.html" } ] }