Ready to release v1.15.5 (I think)
This commit is contained in:
parent
0755fcc46d
commit
3fc4a221c9
1 changed files with 49 additions and 0 deletions
49
blog/2014/10/17/README.md
Normal file
49
blog/2014/10/17/README.md
Normal 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*
|
||||
Loading…
Reference in a new issue