Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Apple IIe - RAMWorks compatibility issue #6

Open
inexorabletash opened this issue Oct 21, 2024 · 1 comment
Open

Apple IIe - RAMWorks compatibility issue #6

inexorabletash opened this issue Oct 21, 2024 · 1 comment

Comments

@inexorabletash
Copy link

inexorabletash commented Oct 21, 2024

Try this on an Apple IIe with RAMWorks or compatible:

Boot to a BASIC prompt, then enter:

CALL -151
100: 20 00 C3 8D 00 C0 A9 32
108: 8D 00 04 A9 31 8D 05 C0
110: 8D 00 04 A9 01 8D 73 C0
118: A9 39 8D 00 04 4C 1D 01
100G
  • On the composite output, the upper right should display 12 (inverse)
  • On the VGA output, the upper right displays: 92 (inverse)

What's happening:

  • hit 80STOREOFF (so PAGE2 doesn't have special meaning)
  • write digit 2 to $400 main
  • hit WRCARDRAM
  • write digit 1 to $400 aux
  • write 1 to $C073 to select RAMWorks aux bank 1 instead of 0
  • write digit 9 to $400 aux

Analysis:

  • Writing to RAMWorks banks other than bank 0 should not affect the 80 column display. I didn't spot any code in the project to handle RAMWorks banks.
  • All of $C071, $C073, $C075 and $C077 should behave the same way. discussion
  • Perfect behavior will be a challenge:
    • On a system without RAMWorks memory, $C073 would be ignored. So a program that writes to $C073 followed by writes intended for the 80col display would not be seen. However, such a program would behave incorrectly on a system with RAMWorks, and be considered buggy.
    • On a system with RAMWorks memory, selecting a bank with $C073 that does not exist will cause writes to go to another bank. Sometimes this would update bank 0, depending on the aliasing. Predicting this behavior would be a challenge if not impossible. Again, this would only occur in a buggy program.

Hardware: Enhanced Apple IIe, w/ A2VidGA, RAMWorks compatible from GW

@inexorabletash
Copy link
Author

Here's a practical example, and how I noticed the problem in the first place:

  1. Boot a ProDOS disk with an appropriate RAMWorks disk driver on it, e.g. John Brook's RAMAUX.SYSTEM which creates /RAMA
  2. Without restarting ProDOS, launch Apple II DeskTop (from https://github.com/a2stuff/a2d/releases)
  3. If A2D doesn't start copying itself to RAMDisk, go to Apple > Control Panels > Options and enable the option, then File > Quit and restart

What I see via VGA:

IMG_4357

What I see via Composite:

IMG_4358

Note that in the VGA screenshot, in the even columns at the middle of the screen you can see the inverse ...@@@@@? - this is the ProDOS volume bitmap slowly being populated as the file copy proceeds. The bitmap is apparently in Bank 1 between $400 and $7FF, with inverse @ being $00 or %00000000 which represents 8 in-use blocks, and inverse ? is $3F or %00111111 which is 2 used blocks and 6 free blocks.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant