AmigaPorts / ACE

Amiga C Engine
Mozilla Public License 2.0
155 stars 26 forks source link

Fix for Kickstart 1.3 and Loading from Disk #147

Closed Vairn closed 2 years ago

Vairn commented 2 years ago

Moved the WaitBlit, OwnBlit,and Disown Blit to the systemUse and systemUnuse.

tehKaiN commented 2 years ago

Hi, thanks for tackling this! Unfortunately it's not that easy. In not so distant future, disabling OS will be completely optional, so we need to avoid introducing further incompatibilities. In your version of ACE, consider doing something like this:

void myLoadingScreenProcess(void) {
  systemUse();
  loadFirstFile();
  drawProgressBarPercent(50); // needs blitter, OS is already enabled, so needs systemUnuse() for a while?
  loadAnotherFile();
  drawProgressBarPercent(100);
  systemUnuse();
}

I think the way to go is to introduce systemReleaseBlitter() and systemTakeoverBlitter() or something like this and add calling them to filesystem fns so that user doesn't need to micromanage it.

Also, I think that system fns for ownership/disownership/wait should be called when OS is still alive - in systemUnuse you've called them after swapping interrupt handlers and at this point OS is virtually dead. It probably works in most cases, but with recent ks3.2 etc. developments we shouldn't assume anything about those fns and their dependencies on remaining OS components.

What are your thoughts?