Commit Graph

175 Commits

Author SHA1 Message Date
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
231d7d8768
lint 2020-11-15 18:20:58 -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
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
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
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
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
42b30141ad
Move //e specific out of apple2io.js (#28) 2020-08-06 06:31:27 -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
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
Will Scullin
3e6f1e586e
Clean up special RBG mode support. 2020-06-05 12:53:56 -07:00
Will Scullin
9f34078f30
Fix lint. 2020-04-23 19:50:19 -07:00
Will Scullin
87e8cde031
Style cleanup 2020-04-23 19:48:52 -07:00
Will Scullin
bb6e36f964
Various fixes (#23)
* Sort disks in category order

* Fix saving disk

* Fix keyboard not working after modal

* Make caps lock key on keyboard work, while keeping caps lock on virtual keyboard working too

* Fix delete local storage

* Fix minus key on Mac

* Remove backtick

* Credit.

Co-authored-by: Matthew Hebley <Matthew.Hebley@navico.com>
2020-04-23 19:47:44 -07:00
Will Scullin
8af8cdbbca
Clean up lint. 2020-03-26 20:01:24 -07:00
Will Scullin
ddcabc5683
Really brief delay for CFFA. 2020-01-12 13:06:40 -08:00
Will Scullin
91d1d753ad
Eat context menu events. Fixes #21 2020-01-12 11:43:16 -08:00
Will Scullin
ce0a1b59ce
Move most gfx into css. 2020-01-02 21:12:34 -08:00
Will Scullin
b647b3c2bb
CFFA (#20)
* CFFA

* CFFA multi-disk and write functionaliity.

* Clean up multi-devices/partition behavior.

* ProDOS WIP

* Update against refactored codebase.

* WIP

* Wait until disks load, show progress.

* Don't wait so long to boot floppies.

* Forgot to save :|.

* Credit.
2020-01-02 11:11:04 -08:00
Will Scullin
506dfc52de
Small cleanup and fixes. 2020-01-02 10:57:26 -08:00
Will Scullin
398ed17c79
Truer colors, fix dirty rect. 2020-01-01 12:33:24 -08:00
Will Scullin
eaef394eb1
Rework full page mode. 2019-12-30 11:40:28 -08:00
Will Scullin
d15979d67e
Better stats. 2019-12-30 11:13:35 -08:00
Will Scullin
f75a2fa962
Fix acceleration, normalize heavily used signatures. (#18) 2019-12-29 19:13:59 -08:00
Will Scullin
680de778ee
Reinstate vbl hack. 2019-12-29 13:35:00 -08:00
Will Scullin
deec11a2a3
Fix play/pause 2019-12-27 18:14:33 -08:00
Will Scullin
2c2a1832da
Fix alt char set. 2019-12-27 15:50:40 -08:00
Will Scullin
bcbe36db0c
Refactor main (#17)
* Refactor UI elements.

* Cleanup.

* Refactor core.

* Fix printer.

* Small fixes

* Fix frame counts
2019-12-27 15:04:07 -08:00
Will Scullin
409e627abc
Add quick and dirty Applesoft compiler. 2019-12-02 18:55:01 -08:00
Will Scullin
37e0c8a84c
Fix Thunderclock with more correct implementation. 2019-12-01 09:52:14 -08:00
Will Scullin
0059910122
Fix Disk II writing. 2019-12-01 06:43:42 -08:00
Will Scullin
5cbf6bd335
Fix parallel rom. 2019-11-24 20:47:10 -08:00
Will Scullin
69bdd3fde4
Move ROM data out of card sources. (#16) 2019-11-24 16:52:01 -08:00
Will Scullin
5e4aac70d2
Use bit math more places. (#15) 2019-11-23 19:05:52 -08:00
Will Scullin
37a6efc661
Better linting, tests, fix text buffer, ROR. 2019-10-16 20:20:38 -07:00
Will Scullin
e2c615f20b
Fix ROL. 2019-10-07 22:18:15 -07:00
Will Scullin
3b95726655
Crude native woz support. (#13)
Readonly for now.
2019-10-01 19:56:10 -07:00
Will Scullin
7d9090133b
No CPU cycle left behind. 2019-09-29 15:52:22 -07:00
Will Scullin
859bd1ff8f
Apply Sather to stack operations. 2019-09-22 20:04:47 -07:00
Will Scullin
6348d52cfe
Fix RDMIXED 2019-09-21 20:49:09 -07:00
Will Scullin
56e17f5b15
minor cleanup 2019-09-18 19:51:31 -07:00
Will Scullin
86602a4eb7
Try and emulate "false reads" 2019-09-18 19:46:15 -07:00
Will Scullin
8ee543619e
First pass it more accurate cycle counting. 2019-09-18 18:46:26 -07:00
Will Scullin
8e5a60b284
Fix high bit miscalculation, mouse offset calcuation. 2019-07-27 15:57:40 -07:00
Will Scullin
c5ca5ee132
Less ES6 2019-06-15 15:59:02 -07:00
Will Scullin
ea8766f370
Back out last change. 2019-06-15 09:38:38 -07:00
Will Scullin
dfe1b28476
Fix undefined toHex. 2019-06-15 09:36:17 -07:00
Will Scullin
024ca76800
Remove ES6 function declarations. 2019-06-15 09:16:11 -07:00
Will Scullin
81adfff2e4
Missed file. 2019-04-06 12:30:50 -07:00
Will Scullin
83d9fd8730
Fix tape loading. 2019-04-06 12:20:35 -07:00
Will Scullin
542786e87c
Export instead of attach to window, and make webpack like it. 2019-03-31 20:52:45 -07:00
Will Scullin
2963f116ce
Fix build, clean up lint comments. 2019-03-26 21:12:05 -07:00
Will Scullin
6a5fd9cf0c
Add a real test harness. 2019-03-26 21:02:27 -07:00
Will Scullin
82815e5b85
Fix hamfisted jquery -> html5 translation. 2019-03-21 20:39:48 -07:00
Will Scullin
ccc3a329f7
Fix capslock. 2019-03-13 20:00:37 -07:00
Will Scullin
127cee2dc0
Tweak a bunch of sizes. 2019-03-13 19:27:55 -07:00
Will Scullin
be715f3f63
Remove jQuery and jQuery UI dependencies. 2019-03-12 21:11:00 -07:00
Will Scullin
0f5c83d6ad
jQuery-less keyboard. Small fixes. 2019-03-08 11:17:18 -08:00
Will Scullin
4f092ed4f5
Fix special keys. 2019-03-07 15:03:13 -08:00
Will Scullin
ed63e0fe92
Fix 80 col. 2019-03-05 11:29:55 -08:00
Will Scullin
d5ab930935
Merge pull request #9 from whscullin/whscullin/webpack
Convert to webpack first pass.
2019-03-02 12:26:56 -08:00
Will Scullin
9bffd347cc
Wire up tests. 2019-03-01 20:38:04 -08:00
Will Scullin
58dbac1a78
Add missing roms. 2019-03-01 10:15:17 -08:00
Will Scullin
2b63a4b569
Fix reset. 2019-03-01 06:54:22 -08:00
Will Scullin
13446c0afa
Deal with some stray globals. 2019-03-01 06:48:50 -08:00
Will Scullin
9e706b5991
Merge pull request #8 from iflan/maximize-in-window
Allow Shift-F2 to maximize the Apple screen in the window
2019-02-28 21:24:09 -08:00
Will Scullin
573f36510d
Convert to webpack first pass. 2019-02-28 21:21:18 -08:00
Will Scullin
b8261252e3
True up with website.
* Drag and drop support.
* Re-enable audio in newer Chrome, Safari
* Minimal Printer
* Video dirty regions
2019-02-18 20:42:50 -08:00
Will Scullin
868923d550
Merge branch 'master' of github.com:whscullin/apple2js 2019-01-09 21:49:46 -08:00
Will Scullin
dad9e6f7a5
Merge pull request #7 from iflan/alt-location
Match the location of the Alt key to the activated Apple key
2019-01-09 00:55:55 -08:00
Will Scullin
5ebb5b0615
Merge branch 'master' of github.com:whscullin/apple2js 2019-01-09 00:52:21 -08:00
Will Scullin
77372d388b
Ditch makefiles, switch to eslint, fix linting. 2019-01-09 00:51:25 -08:00
Will Scullin
131db0340a
Refactor tape drive. 2019-01-09 00:27:31 -08:00
Ian Flanigan
ef74dddfae Match the location of the Alt key to the activated Apple key
Modern browsers set the 'location' property on keyboard events when
the key is located in several places. The ALT key, for example, can be
either on the left or the right side of the keyboard.

This change uses the location to determine which Apple key to
activate, if it is available, and defaults to the old behavior if not.
2019-01-04 00:52:56 +01:00
Ian Flanigan
397e7ecc11 Allow Shift-F2 to maximize the Apple screen in the window
Normally, F2 causes the browser to go full-screen, showing only the
Apple screen. However, in Chrome, the user can exit full-screen mode
by pressing ESC. Since ESC is used frequently on the Apple //e, this
limits the utility of full-screen mode.

To work around this problem, this change adds Shift-F2, which will
make the Apple fill the window without going full-screen. This allows
the user to go make the window full-screen in some other way, thus
enabling the use of the ESC key.

Note that the method used is almost entirely implemented in CSS, with
just a few lines of code to change the classes on some elements. This
may not be the best long-term way of implementing this feature.
2019-01-04 00:51:57 +01:00
Ian Flanigan
2d5972f7f5 Prevent launching help when F1 is pressed
In some browsers, in particular Chrome OS, pressing F1 opens a help
screen. This can be suppressed by calling preventDefault() on the
event.
2019-01-04 00:28:58 +01:00
Will Scullin
8ee8b01d0a Clean up disassembly. 2017-12-20 11:41:29 -08:00
Will Scullin
44557b90ad Update tests, fill out 65C02 opcodes. 2017-12-20 09:07:09 -08:00
Will Scullin
de4f1fc2d8 State save/restore work, updated audio class. 2017-12-02 20:45:02 -08:00
Will Scullin
bd173c47fe Fix blinking text for //e. 2017-10-01 11:19:04 -07:00
Will Scullin
6c92f33af3 Color fringed text in mixed mode. 2017-10-01 11:18:41 -07:00
Will Scullin
fa4f85d014 Reduce browser deprecation warnings. 2017-10-01 11:18:20 -07:00
Will Scullin
7fdaeb844b Improved keyboard behavior, including iOS fixes. 2017-10-01 11:17:30 -07:00