Commit Graph

257 Commits

Author SHA1 Message Date
Will Scullin
3f966ad608
Basic binary file support. (#56) 2021-02-07 21:58:19 -08:00
Will Scullin
8ddb17202b
fix test typing 2021-02-07 21:54:11 -08:00
Ian Flanigan
279f770e28
Update Typescript and Jest dependencies (#55)
This is a mechanical update to Typescript and Jest dependencies, but
since I also upgraded `npm` to 7.5.2, the `package-lock.json` file has
a lot of churn.
2021-02-07 20:52:16 -08:00
Ian Flanigan
910238bf63
Convert cards/disk2.js to Typescript (#54)
* Convert `cards/disk2.js` to Typescript

This is mostly a straightforward conversion of `cards/disk2.js` to
Typescript, with the following exceptions:

*   `setState()` did not restore the drive light state correctly
    because the callback was called with the old `on` value.

*   `setPhase()` did not work for WOZ images.

*   `getBinary()` did not work for `nib` files.

*   `getBase64()` did not work for `nib` files and maybe didn't work
    right at all.

Even with these fixes, local storage still doesn't work correctly.

I have also added several TODOs where methods don't support WOZ disks.

* Convert most uses of `memory` to `Uint8Array`

There are many places in the existing code where we use `Uint8Array`
directly. This change merely makes the `memory` type equivalent to
`Uint8Array`.

This change also changes most ROM data to be read-only in Typescript
to ensure that it is not modified by mistake. This can't be done just
by applying `as const` to the declaration because `Uint8Array`s are
can not be expressed as literals. Instead, we create a new type,
`ReadonlyUint8Array` that drops the mutation methods and makes indexed
access read-only.

See
https://www.growingwiththeweb.com/2020/10/typescript-readonly-typed-arrays.html
for details.

* Tighten types and document `disk2.ts`

While trying to understand the Disk ][ emulation, I tighted the types
and documented the parts that I could, including references to other
sources, like _Understanding the Apple //e_ by Jim Sather.

The one functional change is the addition of the P6 ROM of DOS 3.2 and
earlier. This is automatically selected if the card is initialized for
13 sector disks.
2021-02-07 20:50:50 -08:00
Ian Flanigan
dc13b6a59a
DOS 13-sector tests and fixes (#53)
Like the DOS 3.3 and ProDOS sector order issues, this change fixes the
physical order of the sectors on 13-sector disks when nibblized.

This change also adds tests for the 13-sector format to verify the
sector order.

One of the crazy things is that _Beneath Apple DOS_ failed me in this
instance because it doesn't discuss what happens to the last byte in
"5 and 3" encoding anywhere (AFAICT). I went back to the DOS 3.1
source released by the Computer History Museum here:

    https://computerhistory.org/blog/apple-ii-dos-source-code/

The code is in `appdos31.lst` in the `POSTNIB` routine on line 4777.
2021-01-03 15:01:30 -08:00
Ian Flanigan
ab748b3aa6
Add JS typing to remaining disk types (#52) 2021-01-03 15:00:40 -08:00
Ian Flanigan
715ea6ffaa
ProDOS image format tests and fixes (#51)
Like the DOS 3.3 sector order issues in #49, this change fixes the
order of the physical sectors on the ProDOS disk when nibblized.

This change also adds tests similar to the DOS 3.3 tests to verify the
sector order.

Because the DOS 3.3 and ProDOS tests are so similar, the utility
methods have been refactored into their own file.
2021-01-03 14:59:42 -08:00
Ian Flanigan
565da09575
Minor type improvements (#50)
* Improve typing for `base64_encode`

* Better typing for `BRA` and `is65C02`
2020-12-29 06:40:58 -08:00
Ian Flanigan
72ecce113a
DOS 3.3 image format tests and fixes (#49)
* Adds an initial test for DOS format (.do) files

* Fix physical sector order when nibblizing DOS 3.3 ordered images

Before, when `.dsk` or `.do` images were nibblized, the resulting
track had the sectors in the wrong physical layout.

Now the nibblized track has the correct physical layout (all sectors
in order) which results in the correct DOS 3.3 layout as well.

There is also a test that verifies the order.

* Add another test for a non-zero sector

The new test checks that the values in physical sector 1 are those for
DOS sector 7.

* Add test for all physical sectors on all tracks

This change also removes a few stray console.log calls in the test.
2020-12-29 06:40:40 -08:00
dependabot[bot]
2f388aab7c
Bump ini from 1.3.5 to 1.3.7 (#48)
Bumps [ini](https://github.com/isaacs/ini) from 1.3.5 to 1.3.7.
- [Release notes](https://github.com/isaacs/ini/releases)
- [Commits](https://github.com/isaacs/ini/compare/v1.3.5...v1.3.7)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-12-10 18:54:52 -08:00
Will Scullin
1aaa94a8ed
enforce indent case like vscode prefers 2020-11-25 17:28:37 -08:00
Will Scullin
1e58e2c1b8
lint 2020-11-24 08:53:43 -08:00
Ian Flanigan
b80436d99c
More typescript conversion (#46)
* Convert js/ram to a class

* Convert js/mmu to Typescript

* Convert js/apple2io to Typescript

* Convert js/canvas to Typescript

* Use new types in js/mmu

* Rename js/symbols.js to js/symbols.ts

* Remove the difference between readPages and writePages

As @whscullin said in PR #38, there's no need to have both readable
and writable pages since all implementations are currently both. This
change combines them into `Page`. Likewise, `PageHandler` now extends
`Page`.

`Apple2IO` now implements `PageHandler`. This caught a bug where `end`
had been renamed `endend` by mistake.

There are a few other formatting changes as well.

* Convert js/apple2 to Typescript

* Convert js/prefs to Typescript

* Convert all of the ROMs in js/roms to Typescript

Now all of the ROMs are classes that extend the ROM class. There is
some rudamentary checking to make sure that the length of the ROM
matches the declared start and end pages. (This caught what looks to
be an error in roms/apple2e, but it's hard for me to tell.)

The typing also caught an error where the character ROM was being
used for the main ROM for the apple2j version.

* Convert js/roms/cards/* to Typescript

* Convert js/formats/format_utils to Typescript

This change also seems to fix a bug with `.po` image files that
weren't being read correctly.
2020-11-24 08:48:14 -08:00
Will Scullin
e1b807ba9e
minor cleanup 2020-11-15 18:51:05 -08:00
Will Scullin
14b8e13f79
fix test 2020-11-15 18:27:35 -08:00
Will Scullin
231d7d8768
lint 2020-11-15 18:20:58 -08:00
Ian Flanigan
d4478873dd
Make Typescript a bit more strict (#45) 2020-11-15 17:54:37 -08:00
Ian Flanigan
f1b6c51ce7
Fix a "wrong this" bug in cpu6502 (#44) 2020-11-15 17:54:27 -08:00
Ian Flanigan
1e4e8381ec
Fix calls to cpu.cycles() and cpu.sync() (#43)
Apparently, I broke everything when I removed the underscores from the
field names and added them to the method names. The fix is just to
rename the methods `getCycles` and `getSync` and call it a day.
2020-11-15 17:54:13 -08:00
Will Scullin
c3befc896a
fix typo 2020-11-08 12:26:12 -08:00
Will Scullin
f600f7c6b4
typescript linting 2020-11-07 16:46:27 -08:00
Will Scullin
b3cb64357f
Use class fields instead of binding (#40)
* Use class fields instead of binding
* classy tests
* Fix typing
2020-11-07 08:54:49 -08:00
Ian Flanigan
c4df78cf06
Typescript conversion of several files, including js/cpu6502 (#38)
* Convert `js/util.js` to Typescript and add tests

Besides converting `js/util.js` to Typescript, this change also adds
`js/types.ts` that defines common types used in apple2js. Some of
these types, like `byte` and `word` are for information only.

* Convert `js/base64.js` to Typescript

This also adds a new type, `memory`, that is either an array of
numbers, or a Uint8Array.

* Convert `js/ram.js` to Typescript

This change does not convert `RAM` to a class; it just introduces types.

* Basic typing of cpu6502

This is a really rough first pass. There are some problems that can't
be fixed until this is turned into a real class, but at least all of
the function arguments are now typed. This caught a few cases where
extra arguments were being passed in.

* Convert `js/cpu6502` to a class

In theory, idiomatic classes should be better than the previous
closure-based classes. However, this conversion shows that the
instruction table does not fit well with idiomatic classes as method
referenced in the table need to be called with the correct `this`
everywhere.

This should, at best, be considered a first attempt.
2020-11-01 08:43:48 -08:00
Ian Flanigan
e8cd85f54a
Add configuration and dependencies to support Typescript (#37)
This change adds basic, non-optimal support for Typescript with
webpack. It functions well in development mode and deployment boots
ProDOS. There are probably many ways this configuration can be sped
up, but I haven't investigated that yet.

Note that no Typescript files are added in this change; it is merely a
configuration change.
2020-10-17 16:53:33 -07:00
Ian Flanigan
f5ad2cca16
Track raw parallel port output and allow it to be downloaded (#36)
This change adds a download link to the printer dialog. The contents
of the download will be the raw bytes written to the parallel
interface. Note that often these bytes will have the high-bit set
causing the contents to look like gibberish.

However, this is extremely handy because it allows one to turn the
printer output into a PDF:

1.  In Appleworks (for example) configure an Apple ImageWriter in slot
    1 and print a file.
2.  Download the printer output.
3.  Download the header file from https://github.com/AppleWin/AppleWin/files/1168047/ImageWriterEmulator-NoLF.ps.txt
4.  In Linux, run:
    ```shell
    $ cat ImageWriterEmulator-NoLF.ps.txt raw_printer_output.bin | ps2pdf - printer_output.pdf
    ```

Note that the parallel port emulation in apple2js does not yet support
Print Shop, so I haven't been able to test that out.
2020-10-17 16:53:13 -07:00
Ian Flanigan
ccad317f63
Fix bug where the alert dialog would not close (#32)
Micromodal maintains a reference to the current open dialog in
this.modal. If one dialog is open while opening another, Micromodal
can get confused and maintain a reference to the wrong one.

One of the problems is that the close action is not instantaneous, so
even closing one dialog and opening another immediately after can
cause the problem.

This change adds a small delay before opening the alert dialog to work
around the problem.
2020-10-11 08:53:33 -07:00
Ian Flanigan
a200d6de83
Fix a problem where sometimes the emulator would run too fast (#34)
Before, when using `requestAnimationFrame`, the emulator did not save
the id returned by the browser. This broke the invariant of `run`,
namely that on exit either `runAnimationFrame` or `runTimer` would be
set. This meant that sometimes when the emulator restarted, there
would be two callbacks to `requetsAnimationFrame` run on every frame.

Now the id is saved correctly and the invariant of `run` is maintained.
2020-10-11 08:50:20 -07:00
Ian Flanigan
94d146203a
Bump dependency on selfsigned (#33) 2020-10-11 08:49:05 -07:00
Ian Flanigan
f991833d68
Add a "Clear" button to clear the printer paper (#35)
Before, the printer "paper" would just keep accumulating changes. Now
the `printer-modal` dialog has a "clear" button that will the paper.
2020-10-11 08:48:16 -07:00
Will Scullin
fb1320b9de
dependabot node-forge 2020-09-20 06:42:29 -07:00
Will Scullin
8d74ccaa13
typo 2020-09-20 06:37:26 -07:00
Will Scullin
ab05e99d81
Simple Smartport (#31)
* Simple Smartport

* Block device support

* turn off verbose debugging

* rom cleanup

* Turn off debugging, again

* Turn off debugging, again, again
2020-09-12 19:42:18 -07:00
Will Scullin
7f9ad9b9a1
Fix Firefox key borders 2020-09-07 16:55:10 -07:00
Will Scullin
eeca9c99a7
Resolve audit warnings 2020-09-07 12:49:06 -07:00
dependabot[bot]
de920f6afe
Bump http-proxy from 1.18.0 to 1.18.1 (#30)
Bumps [http-proxy](https://github.com/http-party/node-http-proxy) from 1.18.0 to 1.18.1.
- [Release notes](https://github.com/http-party/node-http-proxy/releases)
- [Changelog](https://github.com/http-party/node-http-proxy/blob/master/CHANGELOG.md)
- [Commits](https://github.com/http-party/node-http-proxy/compare/1.18.0...1.18.1)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-09-07 12:34:57 -07:00
Will Scullin
ffe8a76c86
Basic copy and paste. 2020-09-03 22:39:16 -07:00
Will Scullin
1e56b0af63
No Slot Clock 2020-09-03 20:39:35 -07:00
Will Scullin
05fcc60c2e
Show audio error when loading tape. 2020-08-23 06:36:59 -07:00
Will Scullin
8fc980c579
Better watch behavior. 2020-08-23 06:36:09 -07:00
Will Scullin
42b30141ad
Move //e specific out of apple2io.js (#28) 2020-08-06 06:31:27 -07:00
dependabot[bot]
a3d38a12b6
Bump elliptic from 6.5.2 to 6.5.3 (#27)
Bumps [elliptic](https://github.com/indutny/elliptic) from 6.5.2 to 6.5.3.
- [Release notes](https://github.com/indutny/elliptic/releases)
- [Commits](https://github.com/indutny/elliptic/compare/v6.5.2...v6.5.3)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-08-02 06:37:49 -07:00
Will Scullin
b2afdf7a36
New machine, new lint 2020-07-20 17:12:50 -07:00
Will Scullin
eb6b5620a5
Audio cleanup. 2020-07-20 17:04:55 -07:00
dependabot[bot]
e41e8d2bf2
Bump lodash from 4.17.15 to 4.17.19 (#26)
Bumps [lodash](https://github.com/lodash/lodash) from 4.17.15 to 4.17.19.
- [Release notes](https://github.com/lodash/lodash/releases)
- [Commits](https://github.com/lodash/lodash/compare/4.17.15...4.17.19)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-07-19 15:01:30 -07:00
Will Scullin
9824c51119
Add 13 sector ][+ option. 2020-07-19 14:53:01 -07:00
Will Scullin
4046a9dbce
Restore old //e key handling behavior. 2020-06-21 15:52:39 -07:00
Will Scullin
fe2b85f6e3
e e e 2020-06-18 02:34:31 -07:00
Will Scullin
cf16b9cf55
Minor optimization. 2020-06-17 22:20:11 -07:00
Will Scullin
7394900020
Don't clear flag if re-entering hires. 2020-06-17 20:31:17 -07:00
Will Scullin
00bc5b3c04
Support undocumented AppleColor RGB 160x192 mode. 2020-06-16 09:49:11 -07:00