Ready to release v1.15.5 (I think)

This commit is contained in:
Jeff Parsons 2014-10-17 12:30:26 -07:00 committed by jeffpar
commit 3fc4a221c9

49
blog/2014/10/17/README.md Normal file
View file

@ -0,0 +1,49 @@
Release of PCjs v1.15.5
---
The [IBM PC AT "Rev 3"](/configs/pc/machines/5170/ega/1152kb/rev3/) machine configuration boots in
v1.15.5 of PCjs now, which includes the following fixes:
+ The BIOS expects memory refresh to occur roughly every 16us, which I've resolved by tying the state
of the refresh bit in port 0x61 to bit 6 of the CPU cycle count (see *in8042RWReg()* in [chipset.js](/my_modules/pcjs-client/lib/chipset.js));
the original AT BIOS was satisfied with a refresh bit that merely alternated, whereas the new AT BIOS
is much more particular about the rate at which that bit changes, since many hard-coded delay-loops have
now been replaced with code that waits for a specific number of refresh cycles.
+ The 8042 Keyboard Controller emulation needed a few more tweaks, mainly with respect to what happens
when the keyboard's "clock" line is toggled (see *set8042CmdData()* in [chipset.js](/my_modules/pcjs-client/lib/chipset.js)).
+ The Floppy Disk Controller needed to add support for the "READ ID" command, in order for the BIOS
"double-stepping" test to work (double-stepping is required on an 80-track drive when attempting to read
a 40-track diskette).
+ The BIOS Diskette Reset function does something odd after resetting the Floppy Disk Controller: it
issues not one but *four* "SENSE INTERRUPT STATUS" commands to the FDC, and expects each response to
return an incrementally larger drive number. I found this a bit mystifying, considering that the IBM's
own FDC/HDC "combo card" supports a maximum of *two* diskette drives. But, there's no point in arguing
with a BIOS that's almost 30 years old.
+ The BIOS attempts to detect what its authors must have considered a common problem: failure to run SETUP
after installing a second hard drive. So, when the CMOS reports only one hard drive installed, the BIOS
probes for a second hard drive anyway, and it does so by simply writing the drive number to the ATC's "DRVHD"
register and then immediately reading the "STATUS" register, without issuing any intervening command.
It was an easy fix to *outATCDrvHd()* in [hdc.js](/my_modules/pcjs-client/lib/hdc.js), but I was surprised
to discover that the ATC had this behavior, and now I'm wondering how many other I/O operations require
immediate "STATUS" register updates.
This PCjs release also fixes a problem reported by a user: if you disable **localStorage** support in your
browser, previous versions would fault. I knew that every browser that supports PCjs also supports
**localStorage**, but I didn't consider what might happen if a user had decided to turn it off.
The only downside to turning off **localStorage** is that none of your PCjs machines will be able save/restore
their state when you leave/return to the page, so they will always reboot.
Browser's don't always refer to the **localStorage** feature by its actual name, either. For example, in
Chrome, the setting that enables/disables **localStorage** is hidden under "Advanced Settings" => "Privacy" =>
"Content Settings" => "Cookies" => "Allow local data to be set (recommended)". Which is a little misleading
and annoying, because **localStorage** != **cookie**.
PCjs *never* sets any cookies. Cookies are bits of data that your browser saves and then automatically sends
off to the server every time you make a request. **localStorage** is nothing more than local storage. Granted,
a JavaScript application could certainly abuse it and send it around like a cookie, but PCjs doesn't do that.
The only exception is when PCjs detects a problem, and even then, you must first agree to submit your machine's
state as part of the bug report.
*[@jeffpar](http://twitter.com/jeffpar)*
*October 17, 2014*