diff --git a/blog/2015/06/01/README.md b/_posts/2015-06-01-debugging-the-ibm-vga-rom.md similarity index 89% rename from blog/2015/06/01/README.md rename to _posts/2015-06-01-debugging-the-ibm-vga-rom.md index 7664c3553..64b04b463 100644 --- a/blog/2015/06/01/README.md +++ b/_posts/2015-06-01-debugging-the-ibm-vga-rom.md @@ -1,4 +1,9 @@ -Debugging the IBM VGA ROM +--- +layout: post +title: Debugging the IBM VGA ROM +date: 2015-06-01 11:00:00 +categories: video +permalink: /blog/2015/06/01/ --- The IBM VGA ("Video Graphics Array") standard was introduced as part of the IBM PS/2 line of computers; @@ -66,16 +71,16 @@ never completed, and this is another related issue that will have to be resolved While debugging and fixing assorted IBM VGA issues, I made a table of all the register values for the video modes commonly used on the IBM VGA. Here's that table: - INT 0x10 Mode Requested: 0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x0D 0x0E 0x10 0x12 0x13 + INT 0x10 Mode Requested: 0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x0D 0x0E 0x10 0x12 0x13 BIOSMODE: 0x01 0x01 0x03 0x03 0x04 0x04 0x06 0x0D 0x0E 0x10 0x12 0x13 - CRTC[0x00]: HTOTAL 0x2D 0x2D 0x5F 0x5F 0x2D 0x2D 0x5F 0x2D 0x5F 0x5F 0x5F 0x5F - CRTC[0x01]: HDISP_END 0x27 0x27 0x4F 0x4F 0x27 0x27 0x4F 0x27 0x4F 0x4F 0x4F 0x4F - CRTC[0x02]: HBLANK_START 0x28 0x28 0x50 0x50 0x28 0x28 0x50 0x28 0x50 0x50 0x50 0x50 - CRTC[0x03]: HBLANK_END 0x90 0x90 0x82 0x82 0x90 0x90 0x82 0x90 0x82 0x82 0x82 0x82 - CRTC[0x04]: HRETRACE_START 0x2B 0x2B 0x55 0x55 0x2B 0x2B 0x54 0x2B 0x54 0x54 0x54 0x54 - CRTC[0x05]: HRETRACE_END 0xA0 0xA0 0x81 0x81 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 - CRTC[0x06]: VTOTAL 0xBF 0xBF 0xBF 0xBF 0xBF 0xBF 0xBF 0xBF 0xBF 0xBF 0x0B 0xBF + CRTC[0x00]: HTOTAL 0x2D 0x2D 0x5F 0x5F 0x2D 0x2D 0x5F 0x2D 0x5F 0x5F 0x5F 0x5F + CRTC[0x01]: HDISP_END 0x27 0x27 0x4F 0x4F 0x27 0x27 0x4F 0x27 0x4F 0x4F 0x4F 0x4F + CRTC[0x02]: HBLANK_START 0x28 0x28 0x50 0x50 0x28 0x28 0x50 0x28 0x50 0x50 0x50 0x50 + CRTC[0x03]: HBLANK_END 0x90 0x90 0x82 0x82 0x90 0x90 0x82 0x90 0x82 0x82 0x82 0x82 + CRTC[0x04]: HRETRACE_START 0x2B 0x2B 0x55 0x55 0x2B 0x2B 0x54 0x2B 0x54 0x54 0x54 0x54 + CRTC[0x05]: HRETRACE_END 0xA0 0xA0 0x81 0x81 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 + CRTC[0x06]: VTOTAL 0xBF 0xBF 0xBF 0xBF 0xBF 0xBF 0xBF 0xBF 0xBF 0xBF 0x0B 0xBF CRTC[0x07]: OVERFLOW 0x1F 0x1F 0x1F 0x1F 0x1F 0x1F 0x1F 0x1F 0x1F 0x1F 0x3E 0x1F CRTC[0x08]: PRESET_ROW 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 CRTC[0x09]: MAX_SCAN 0x4F 0x4F 0x4F 0x4F 0xC1 0xC1 0xC1 0xC0 0xC0 0x40 0x40 0x41 @@ -85,13 +90,13 @@ modes commonly used on the IBM VGA. Here's that table: CRTC[0x0D]: START_ADDR_LO 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 CRTC[0x0E]: CURSOR_ADDR_HI 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x00 CRTC[0x0F]: CURSOR_ADDR_LO 0x19 0x19 0x41 0x41 0x19 0x19 0x41 0x19 0x41 0x41 0xE1 0xA2 - CRTC[0x10]: VRETRACE_START 0x9C 0x9C 0x9C 0x9C 0x9C 0x9C 0x9C 0x9C 0x9C 0x83 0xEA 0x9C - CRTC[0x11]: VRETRACE_END 0x8E 0x8E 0x8E 0x8E 0x8E 0x8E 0x8E 0x8E 0x8E 0x85 0x8C 0x8E - CRTC[0x12]: VDISP_END 0x8F 0x8F 0x8F 0x8F 0x8F 0x8F 0x8F 0x8F 0x8F 0x5D 0xDF 0x8F + CRTC[0x10]: VRETRACE_START 0x9C 0x9C 0x9C 0x9C 0x9C 0x9C 0x9C 0x9C 0x9C 0x83 0xEA 0x9C + CRTC[0x11]: VRETRACE_END 0x8E 0x8E 0x8E 0x8E 0x8E 0x8E 0x8E 0x8E 0x8E 0x85 0x8C 0x8E + CRTC[0x12]: VDISP_END 0x8F 0x8F 0x8F 0x8F 0x8F 0x8F 0x8F 0x8F 0x8F 0x5D 0xDF 0x8F CRTC[0x13]: OFFSET 0x14 0x14 0x28 0x28 0x14 0x14 0x28 0x14 0x28 0x28 0x28 0x28 CRTC[0x14]: UNDERLINE 0x1F 0x1F 0x1F 0x1F 0x00 0x00 0x00 0x00 0x00 0x0F 0x00 0x40 - CRTC[0x15]: VBLANK_START 0x96 0x96 0x96 0x96 0x96 0x96 0x96 0x96 0x96 0x63 0xE7 0x96 - CRTC[0x16]: VBLANK_END 0xB9 0xB9 0xB9 0xB9 0xB9 0xB9 0xB9 0xB9 0xB9 0xBA 0x04 0xB9 + CRTC[0x15]: VBLANK_START 0x96 0x96 0x96 0x96 0x96 0x96 0x96 0x96 0x96 0x63 0xE7 0x96 + CRTC[0x16]: VBLANK_END 0xB9 0xB9 0xB9 0xB9 0xB9 0xB9 0xB9 0xB9 0xB9 0xBA 0x04 0xB9 CRTC[0x17]: MODE_CTRL 0xA3 0xA3 0xA3 0xA3 0xA2 0xA2 0xC2 0xE3 0xE3 0xE3 0xE3 0xA3 CRTC[0x18]: LINE_COMPARE 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF GRC[0x00]: SRESET 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 @@ -127,7 +132,7 @@ modes commonly used on the IBM VGA. Here's that table: ATC[0x10]: MODE 0x0C 0x0C 0x0C 0x0C 0x01 0x01 0x01 0x01 0x01 0x01 0x01 0x41 ATC[0x11]: OVERSCAN 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 ATC[0x12]: PLANES 0x0F 0x0F 0x0F 0x0F 0x03 0x03 0x01 0x0F 0x0F 0x0F 0x0F 0x0F - ATC[0x13]: HPAN 0x08 0x08 0x08 0x08 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 + ATC[0x13]: HPAN 0x08 0x08 0x08 0x08 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 In addition, I've created a [VGA Tests](/tests/pc/vga/) directory to hold VGA test and sample code that PCjs can now successfully run (for the most part). See that directory for more details. diff --git a/blog/2015/06/05/README.md b/_posts/2015-06-05-the-strange-case-of-the-ega-graphics-scroll-bug.md similarity index 98% rename from blog/2015/06/05/README.md rename to _posts/2015-06-05-the-strange-case-of-the-ega-graphics-scroll-bug.md index 1dcacf0c9..e28a9ad03 100644 --- a/blog/2015/06/05/README.md +++ b/_posts/2015-06-05-the-strange-case-of-the-ega-graphics-scroll-bug.md @@ -1,4 +1,9 @@ -The Strange Case of the EGA Graphics Scroll Bug +--- +layout: post +title: The Strange Case of the EGA Graphics Scroll Bug +date: 2015-06-05 11:00:00 +categories: video +permalink: /blog/2015/06/05/ --- I was playing with different video modes using this [IBM PC AT w/EGA](/devices/pc/machine/5170/ega/640kb/rev1/), diff --git a/blog/2015/07/17/README.md b/_posts/2015-07-17-windows-95.md similarity index 98% rename from blog/2015/07/17/README.md rename to _posts/2015-07-17-windows-95.md index bc174e475..864a2d996 100644 --- a/blog/2015/07/17/README.md +++ b/_posts/2015-07-17-windows-95.md @@ -1,4 +1,9 @@ -Windows 95 +--- +layout: post +title: Windows 95 +date: 2015-07-17 11:00:00 +categories: windows-95 +permalink: /blog/2015/07/17/ --- This week (July 14, 2015) was the 20th anniversary of Windows 95 RTM ("Release To Manufacturing"). So I decided to diff --git a/blog/2015/09/21/README.md b/_posts/2015-09-21-windows-95-in-your-web-browser.md similarity index 81% rename from blog/2015/09/21/README.md rename to _posts/2015-09-21-windows-95-in-your-web-browser.md index 9358824fb..cb0f871e1 100644 --- a/blog/2015/09/21/README.md +++ b/_posts/2015-09-21-windows-95-in-your-web-browser.md @@ -1,4 +1,13 @@ -Windows 95 In Your Web Browser +--- +layout: post +title: Windows 95 In Your Web Browser +date: 2015-09-21 11:00:00 +categories: windows-95 80386 +permalink: /blog/2015/09/21/ +machines: + - type: pc-dbg + id: deskpro386 + config: /devices/pc/machine/compaq/deskpro386/vga/4096kb/machine.xml --- Today, the last serious bug preventing a successful boot of Windows 95 was fixed. I won't bore you with @@ -21,7 +30,7 @@ to be resolved, but booting has been achieved. The adventure continues. -[Embedded DeskPro 386](/devices/pc/machine/compaq/deskpro386/vga/4096kb/machine.xml "PCjs:deskpro386") +{% include machine.html id="deskpro386" %} *[@jeffpar](http://twitter.com/jeffpar)* *September 21, 2015* diff --git a/blog/2015/10/27/README.md b/_posts/2015-10-27-windows-95-and-early-80386-cpus.md similarity index 98% rename from blog/2015/10/27/README.md rename to _posts/2015-10-27-windows-95-and-early-80386-cpus.md index 0484ad59a..819729375 100644 --- a/blog/2015/10/27/README.md +++ b/_posts/2015-10-27-windows-95-and-early-80386-cpus.md @@ -1,4 +1,9 @@ -Windows 95 and Early 80386 CPUs +--- +layout: post +title: Windows 95 and Early 80386 CPUs +date: 2015-10-27 11:00:00 +categories: windows-95 80386 +permalink: /blog/2015/10/27/ --- Every time Windows 95 starts up, its real-mode loader performs the following CPU identification test: diff --git a/_posts/2015-12-07-welcome-to-jekyll.markdown b/_posts/2015-12-07-welcome-to-jekyll.markdown deleted file mode 100644 index e36591b4b..000000000 --- a/_posts/2015-12-07-welcome-to-jekyll.markdown +++ /dev/null @@ -1,25 +0,0 @@ ---- -layout: post -title: "Welcome to Jekyll!" -date: 2015-12-07 13:10:41 -categories: jekyll update ---- -You’ll find this post in your `_posts` directory. Go ahead and edit it and re-build the site to see your changes. You can rebuild the site in many different ways, but the most common way is to run `jekyll serve --watch`, which launches a web server and auto-regenerates your site when a file is updated. - -To add new posts, simply add a file in the `_posts` directory that follows the convention `YYYY-MM-DD-name-of-post.ext` and includes the necessary front matter. Take a look at the source for this post to get an idea about how it works. - -Jekyll also offers powerful support for code snippets: - -{% highlight ruby %} -def print_hi(name) - puts "Hi, #{name}" -end -print_hi('Tom') -#=> prints 'Hi, Tom' to STDOUT. -{% endhighlight %} - -Check out the [Jekyll docs][jekyll] for more info on how to get the most out of Jekyll. File all bugs/feature requests at [Jekyll’s GitHub repo][jekyll-gh]. If you have questions, you can ask them on [Jekyll’s dedicated Help repository][jekyll-help]. - -[jekyll]: http://jekyllrb.com -[jekyll-gh]: https://github.com/jekyll/jekyll -[jekyll-help]: https://github.com/jekyll/jekyll-help diff --git a/_posts/2015-12-10-rebuilding-the-pcjs-website.md b/_posts/2015-12-10-rebuilding-the-pcjs-website.md new file mode 100644 index 000000000..131479feb --- /dev/null +++ b/_posts/2015-12-10-rebuilding-the-pcjs-website.md @@ -0,0 +1,76 @@ +--- +layout: post +title: Rebuilding the PCjs Website +date: 2015-12-10 11:03:00 +categories: blog +--- + +It's been nice using Node.js to power the PCjs website, using Amazon's Elastic Beanstalk service, but that combination +has also been a source of some frustrations: + +* When someone posts an article or a tweet linking to a PCjs page, the website bogs down, and while Amazon's Elastic +Beanstalk service makes it easy to automatically scale up, each new instance automatically multiplies my expenses as well, +which hover around $34/month for a single instance. With assorted S3 and transfer charges, my average monthly bill is +over $55/month. That's a bit much for a site that generates zero revenue. + +* Once or twice a year, when I'm attempting to either update the server or upgrade my Node configuration, the update +or upgrade will fail, and Amazon's web console provides virtually no details about why it failed. Iget an error message +like "**ERROR: Failed to deploy application**" and that is it. Literally. + +Granted, there are some "simple" things I could do to improve performance, like adding an **nginx** proxy server to +the configuration, but that feels like a band-aid solution, and as a software developer, the time spent fiddling with +web server issues is time I'd much rather spend writing code. + +Since PCjs is designed to do all its work in the user's web browser, and since the website can be completely built out +as a set of static web pages, I've decided to stop using Node to power www.pcjs.org. I'm in the process of migrating +the website to [GitHub Pages](https://pages.github.com/), and using [Jekyll](https://help.github.com/articles/using-jekyll-with-pages/) +to convert all my existing Markdown files to static HTML pages. + +This new approach is *very* similar to what the PCjs custom Node modules did: every time time someone visited a folder +on the website that did not yet contain an "index.html", the PCjs Node server would create one, either by converting the +README.md file in that folder to HTML or generating a default HTML document. The PCjs Markdown-to-HTML converter also +contained some special logic that made it easy to embed PCjs machines on a page. + +Thanks to GitHub Pages, all of that now happens ahead of time: whenever I update the PCjs "gh-pages" branch on GitHub, +Jekyll automatically runs through the entire site and rebuilds a complete set of web pages. + +The Node web server would automatically embed PCjs machines on web pages by looking for special Markdown links, such as; + + [Embedded IBM PC](machine.xml "PCjs:ibm5150") + +After migrating to GitHub Pages and Jekyll, that markup must now be written as: + +{% raw %} + {% include machine.html id="ibm5150" %} +{% endraw %} + +and the following "Front Matter" (YAML) must appear at the top of the Markdown file: + + --- + ... + machines: + - type: pc + id: ibm5150 + --- + +Basically, the YAML at the top of the file lists all the machines that the page intends to use, and then +{% raw %}`{% include ... %}`{% endraw %} is inserted in the text at the point where a machine should be embedded. + +The `machine.html` include accepts only one parameter: the `id` of a machine listed at the top of the file. + +The `machines` element at the top of the file must specify a `type` and `id` at a minimum. `type` must be one of +the following values, depending on whether you want an IBM PC or Challenger 1P, with or without a debugger: + +- pc +- pc-dbg +- c1p +- c1p-dbg + +and `id` can be any identifier you want to use to embed the machine. You may also use `config` to specify a machine XML +configuration file if not using the default `machine.xml`, `template` to specify an alternate XSL template file if not +using the default `components.xsl` file, and `state` to specify a JSON-encoded machine state file if the machine +requires a predefined state. + +I will continue to include a Node web server with the PCjs project, but it remains to be seen whether I'll update the +Node components to parse the new Jekyll "Front Matter" that's been added to all the Markdown files, or whether I'll leave +leave the Node support as-is on the old "master" branch, and make the "gh-pages" the new default branch. diff --git a/tests/pc/vga/README.md b/tests/pc/vga/README.md index 964d94d7b..c3afe40c3 100644 --- a/tests/pc/vga/README.md +++ b/tests/pc/vga/README.md @@ -1,3 +1,9 @@ +--- +layout: page +title: VGA Tests +permalink: /tests/pc/vga/ +--- + VGA Tests ---