Blog updates
This commit is contained in:
parent
312c41c68a
commit
abb77fe5c9
8 changed files with 131 additions and 45 deletions
|
|
@ -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.
|
||||
|
|
@ -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/),
|
||||
|
|
@ -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
|
||||
|
|
@ -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*
|
||||
|
|
@ -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:
|
||||
|
|
@ -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
|
||||
76
_posts/2015-12-10-rebuilding-the-pcjs-website.md
Normal file
76
_posts/2015-12-10-rebuilding-the-pcjs-website.md
Normal file
|
|
@ -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.
|
||||
|
|
@ -1,3 +1,9 @@
|
|||
---
|
||||
layout: page
|
||||
title: VGA Tests
|
||||
permalink: /tests/pc/vga/
|
||||
---
|
||||
|
||||
VGA Tests
|
||||
---
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue