Disc Doctor interference

having trouble with an archived file? post in here!
Michael Brown
Posts: 2608
Joined: Sat Apr 03, 2010 1:54 pm
Location: Nottingham
Contact:

Disc Doctor interference

Post by Michael Brown »

Hi all,

There were some games I found that did not work correctly when I had the Disc Doctor chip fitted.
It seems this chip pokes &0D to &130 so anything stored there gets overwritten by the chip.
I have made a list of the games I found so far, but there may be more.
It may be possible to amend some of these to eliminate the issue, but some may prove impossible.
I have now put a warning message on Cyborg Warriors and White Light to make the user switch off Disc Doctor if it is detected.
I may add this routine to others unless a fix can be found for them.

Jet-Boot Jack from English Software. Cannot load the main game.
Atic Atac from Ultimate Play The Game. Causes graphics corruption in the main game.
Thunderstruck II from Audiogenic Software Ltd. Bottom half of screen is blank.
Spellbinder from Superior Software. Causes graphics corruption in the main game.
Omega Orb from Audiogenic Software Ltd. Causes graphics corruption in the main game.
By Fair Means Or Foul from Superior Software. Skips the loading screen. Game plays OK.
Spheroids from Alternative. Cannot load the main game.
Qwak! from Superior Software. Cannot load the main game.
Cyborg Warriors from Superior Software. Causes the title page to have text corruption.
Kastle from Tynesoft. Bottom part of screen is blank.
Thai Boxing from Anco Software. Cannot load the main game.
White Light from Retro Software. Main games crashes.

If anyone knows of anymore, then please let me know.
regards,
Mick.
Last edited by Michael Brown on Tue Jun 04, 2019 12:51 pm, edited 1 time in total.
User avatar
Pernod
Posts: 3439
Joined: Fri Jun 08, 2012 11:01 pm
Location: Croydon, UK
Contact:

Re: Disc Doctor interference

Post by Pernod »

Michael Brown wrote: Tue Jun 04, 2019 12:47 pm Jet-Boot Jack from English Software. Cannot load the main game.
Atic Atac from Ultimate Play The Game. Causes graphics corruption in the main game.
Thunderstruck II from Audiogenic Software Ltd. Bottom half of screen is blank.
Spellbinder from Superior Software. Causes graphics corruption in the main game.
Omega Orb from Audiogenic Software Ltd. Causes graphics corruption in the main game.
By Fair Means Or Foul from Superior Software. Skips the loading screen. Game plays OK.
Spheroids from Alternative. Cannot load the main game.
Qwak! from Superior Software. Cannot load the main game.
Cyborg Warriors from Superior Software. Causes the title page to have text corruption.
Kastle from Tynesoft. Bottom part of screen is blank.
Thai Boxing from Anco Software. Cannot load the main game.
White Light from Retro Software. Main games crashes.
I've always had Disc Doctor in my machine and had the majority of the above BITD, never noticed any issues. I use Disc Doctor 1.0A.
- Nigel

BBC Model B: ATPL Sidewise, Acorn Speech, 2xWatford Floppy Drives, AMX Mouse, Viglen case, BeebZIF, etc.
User avatar
CMcDougall
Posts: 7048
Joined: Wed Feb 02, 2005 3:13 pm
Location: Shadow in a Valley of Scotland
Contact:

Re: Disc Doctor interference

Post by CMcDougall »

*put disc doctor in bin
*insert Advanced Disc Toolkit =D>

think ADT poops just one game, can't mind what it was :?
ImageImageImage
User avatar
flaxcottage
Posts: 5717
Joined: Thu Dec 13, 2012 8:46 pm
Location: Derbyshire
Contact:

Re: Disc Doctor interference

Post by flaxcottage »

Best idea is to use SWR. If Disc Doctor is need one time then load that. If ADT is required then load that. It is what I always have done.

Mind you I never noticed the problem because I don't play very many games and the ones I do play work OK anyway.

Now Speech! is a very different kettle of fish! :lol:
- John

Check out the Educational Software Archive at www.flaxcottage.com
User avatar
billcarr2005
Posts: 1840
Joined: Fri Sep 09, 2005 4:01 pm
Location: UK
Contact:

Re: Disc Doctor interference

Post by billcarr2005 »

Since there are many different ROMs that can interfere with many different games, I found that the best practice on my disks BITD was to have a program running from !BOOT, before the menu of multiple games that *ROMOFF''d (from BROM) all of the unnecessary ROMs so that there was no problems with compatibility.
Later on there was another that did ?&2A1+ROM slot number = 0
No need to rewrite the games to fix the problem of the ROM when that's the problem! :roll:
User avatar
vanekp
Posts: 1412
Joined: Thu Nov 30, 2000 7:09 am
Location: The Netherlands
Contact:

Re: Disc Doctor interference

Post by vanekp »

Yes I have noticed that in the past that Disc Doctor causes issues with games I stopped using it or only loaded it into a ram bank when I needed to use it.
Regards Peter.
User avatar
daveejhitchins
Posts: 7875
Joined: Wed Jun 13, 2012 6:23 pm
Location: Newton Aycliffe, County Durham
Contact:

Re: Disc Doctor interference

Post by daveejhitchins »

One of the things I've (well - reliant on others: DaveB and JGH to name a few!) tried to do within the operation of the MGC is to UNPLUG all ROMs, that aren't needed, before loading/running games. Maybe we need a piece of code to do this reliably, that works on all platforms?

I'm hoping MGC MKII will do a better job than the original.

Dave H :D
Available: ARA II : ARA III-JR/PR : ABR : AP5 : AP6 : ABE : ATI : MGC : Plus 1 Support ROM : Plus 3 2nd DA : Prime's Plus 3 ROM/RAM : Pegasus 400 : Prime's MRB : ARCIN32 : Cross-32
Michael Brown
Posts: 2608
Joined: Sat Apr 03, 2010 1:54 pm
Location: Nottingham
Contact:

Re: Disc Doctor interference

Post by Michael Brown »

Is there a simple FOR/NEXT loop I can insert poking &2A1 to switch off the ROMS that can go at the start of a game?

Or is it not that simple?

Mick.
User avatar
billcarr2005
Posts: 1840
Joined: Fri Sep 09, 2005 4:01 pm
Location: UK
Contact:

Re: Disc Doctor interference

Post by billcarr2005 »

The following code *seems* to do the trick :)

Code: Select all

10 FOR rom = 0 TO 13
20 ?(&2A1+rom)=0
30 NEXT
Whether it's the proper / official / right way of going about things is another matter entirely :lol:

*ROMOFF required a ROM name, which must've been checked against the ROM header to decide which specific ROM to disable. BROM then had a mirror of &2A1 (somewhere, i remember disassembling the code sometime) which was checked when the machine was reset to keep the ROM switched off until the machine was switched off. I think another ROM had *KILL or something similar and as mentioned above *UNPLUG

Changed maximum to 13, otherwise DFS is disabled (although I suppose the DFS could be anywhere!)
Last edited by billcarr2005 on Wed Jun 05, 2019 9:37 am, edited 2 times in total.
User avatar
daveejhitchins
Posts: 7875
Joined: Wed Jun 13, 2012 6:23 pm
Location: Newton Aycliffe, County Durham
Contact:

Re: Disc Doctor interference

Post by daveejhitchins »

Michael Brown wrote: Wed Jun 05, 2019 8:49 am Is there a simple FOR/NEXT loop I can insert poking &2A1 to switch off the ROMS that can go at the start of a game?

Or is it not that simple?
I think it is, but . . . Obviously not removing BASIC and the OS. It would be a little more work to actually 'check' where BASIC and the OS ROMs were, in case they had been moved (Beeb?) - but a better option. Maybe knowing which machine you were operating from would help too, to build a truly generic piece of code? Thinking of the Elk that has different addressing for the ROM table etc.

The problem I have with the original MGC is the method of starting 99% of the cames - which is: CALL !-4 -- This, of course allows the OS to scan and reinsert the ROMs. If all users had a Plus 1 Support ROM fitted then a *UNPLUG could be used. The MGC MKII will start games in a similar manner to current MMB systems.

Waiting for JGH who has a better understanding of how to do this correctly (and I'm sure there are others!).

Dave H :D
Available: ARA II : ARA III-JR/PR : ABR : AP5 : AP6 : ABE : ATI : MGC : Plus 1 Support ROM : Plus 3 2nd DA : Prime's Plus 3 ROM/RAM : Pegasus 400 : Prime's MRB : ARCIN32 : Cross-32
Michael Brown
Posts: 2608
Joined: Sat Apr 03, 2010 1:54 pm
Location: Nottingham
Contact:

Re: Disc Doctor interference

Post by Michael Brown »

Fantastic!
Running this loop before Atic Atac cures the graphics corruption.
I see that pressing BREAK afterwards returns the ROMS to their places again.

It should be fairly easy to install this fix into the loaders of any games affected.
I see that 0 to 13 is assuming DFS and BASIC are at slots 14 and 15.
I can see that they are under BeebEm, but are they in a real BBC B?
I only ask because I want any fix I do to be universal and not just for emulators.

BTW is there a machine code version of the FOR/NEXT loop?

regards,
Mick.
User avatar
dv8
Posts: 397
Joined: Mon Jun 22, 2009 10:07 pm
Contact:

Re: Disc Doctor interference

Post by dv8 »

This assembly program will hide all the ROMs except BASIC and the current filing system, whichever slots they happen to be in:

Code: Select all

10 FOR I=0 TO 2 STEP 2
20 P%=&A00
30 [ OPT I
40 LDX #15
50 .loop
60 CPX &24B:BEQ next
70 CPX &DBC:BNE hide
80 LDA &212:CMP #&1B:BNE hide
90 LDA &213:CMP #&FF:BEQ next
100 .hide LDA #0:STA &2A1,X
110 .next DEX:BPL loop
120 RTS
130 ]
140 NEXT
150 CALL &A00
This code needs to run on the I/O processor but since the Tube needs to be turned off for most games anyway this shouldn't be an issue.

BTW, just turning off the ROMs isn't a guarantee of success. It's always possible that a ROM has changed some of the vectors at &200 to point to a routine in its private workspace or to an extended vector that jumps into the ROM itself. Ideally, the vector table would also be reset back to default values.
User avatar
billcarr2005
Posts: 1840
Joined: Fri Sep 09, 2005 4:01 pm
Location: UK
Contact:

Re: Disc Doctor interference

Post by billcarr2005 »

dv8 wrote: Wed Jun 05, 2019 2:30 pm This assembly program will hide all the ROMs except BASIC and the current filing system, whichever slots they happen to be in:
I'd disassembled BROM during my lunch and was going to write something whereby a BASIC program read the names of the ROMs which you'd want to be disabled then calls the appropriate code to check against the ROM headers, but the above does the job very elegantly! =D>

I've attached the prebuilt, runnable file on a disk image. It's good that it's relocatable too, since there are no absolute JSR/JMP and could be added to the end of a BASIC program and CALLed first thing. i suppose the FILEV check could be omitted to make the program a few bytes (14!) smaller...
Attachments
ROFF.zip
dv8's ROM disabling program
(233 Bytes) Downloaded 78 times
Last edited by billcarr2005 on Wed Jun 05, 2019 3:52 pm, edited 3 times in total.
User avatar
dv8
Posts: 397
Joined: Mon Jun 22, 2009 10:07 pm
Contact:

Re: Disc Doctor interference

Post by dv8 »

billcarr2005 wrote: Wed Jun 05, 2019 3:15 pm i suppose the FILEV check could be omitted to make the program a few bytes (14!) smaller...
Only if the current filing system is guaranteed to be in a sideways ROM. If a game was transferred to an RFS ROM for example, it would fail without the FILEV check.

Here is the simplified version of the routine:

Code: Select all

   10 FOR I=0 TO 2 STEP 2
   20 P%=&A00
   30 [ OPT I
   40 LDA #0:LDX #15
   50 .loop
   60 CPX &24B:BEQ next
   70 CPX &DBC:BEQ next
   80 .hide STA &2A1,X
   90 .next DEX:BPL loop
  100 RTS
  110 ]
  120 NEXT
  130 CALL &A00
Michael Brown
Posts: 2608
Joined: Sat Apr 03, 2010 1:54 pm
Location: Nottingham
Contact:

Re: Disc Doctor interference

Post by Michael Brown »

Excellent work.

I will have a quiet word with Lee about this.

thanks
Mick.
User avatar
SimonSideburns
Posts: 652
Joined: Mon Aug 26, 2013 9:09 pm
Location: Purbrook, Hampshire
Contact:

Re: Disc Doctor interference

Post by SimonSideburns »

CMcDougall wrote: Tue Jun 04, 2019 8:01 pm think ADT poops just one game, can't mind what it was :?
Pretty sure the game that gets messed up is Pipeline.

Glitching and graphical errors.
Just remember kids, Beeb spelled backwards is Beeb!
Michael Brown
Posts: 2608
Joined: Sat Apr 03, 2010 1:54 pm
Location: Nottingham
Contact:

Re: Disc Doctor interference

Post by Michael Brown »

Ref Pipeline.
I remember BITD that sometimes you would move next to a flame and it would get you and other times it was fine.
I did have Exmon II and Disc Doctor chips in my BBC BITD,
Michael Brown
Posts: 2608
Joined: Sat Apr 03, 2010 1:54 pm
Location: Nottingham
Contact:

Re: Disc Doctor interference

Post by Michael Brown »

Now been through my list again.

Removed Spheroids as this isn't affected by Disc Doctor as such.
For some reason, some games interfere with it and a reset is sometimes required as it crashes after loading the 2nd part.

All the other 11 games I mentioned now work as I have added either the ROM fix routine or amended the code at &130 that Disc Doctor corrupts.

I have sent all the new discs to Lee who I am sure will check on various machines.
I have checked them on BeebEm and they are OK, But I will wait for Lee to get back before reposting as I do not want the fixes for Disc Doctor to cause problems elsewhere.

ROM off routine used on Atic Atac, Thunderstruck II, Spellbinder, Omega Orb, Qwak and Cyborg Warriors.

Code amended at &130 on Jet Boot Jack, By Fair Means, Qwak, Kastle and Thai Boxing.

regards,
Mick.
Michael Brown
Posts: 2608
Joined: Sat Apr 03, 2010 1:54 pm
Location: Nottingham
Contact:

Re: Disc Doctor interference

Post by Michael Brown »

Early tests from Lee show that these games mainly crash or fail on a real BBC with Datacentre and Disc Doctor, so the fix isn't really viable and the "Remove Disc Doctor" message may be the best way to go where needed.

Thanks to everyone for their help but...
Having the games work on a real BBC (and also via a Datacentre) is more important than them working under emulation with Disc Doctor as this can be switched off or not loaded to start with.

regards,
Mick.
User avatar
billcarr2005
Posts: 1840
Joined: Fri Sep 09, 2005 4:01 pm
Location: UK
Contact:

Re: Disc Doctor interference

Post by billcarr2005 »

Michael Brown wrote: Fri Jun 07, 2019 11:18 am Early tests from Lee show that these games mainly crash or fail on a real BBC with Datacentre and Disc Doctor, so the fix isn't really viable and the "Remove Disc Doctor" message may be the best way to go where needed.
I don't think there's any reason that disabling of installed ROMs would be causing the games to crash... unless the code above is disabling other ROMs which are necessary... in which case a more concentrated approach of just disabling Disc Doctor would be more appropriate, rather than altering old code, which could cause issues further down the line... :?
Michael Brown
Posts: 2608
Joined: Sat Apr 03, 2010 1:54 pm
Location: Nottingham
Contact:

Re: Disc Doctor interference

Post by Michael Brown »

Hi Bill,
Yes I agree.

I have made a couple of test discs for Lee where it checks &130 for &0D and then prints the message "switch off Disc Doctor". This works for me under BeebEm, but I am just awaiting confirmation from Lee that it works on a real BBC especially one with a Datacentre fitted.

Just wondering if there was a way to detect if Disc Doctor is fitted by checking &8000 and above, but would that work for Sideways RAM or on a Datacentre?

Mick.
User avatar
Rich Talbot-Watkins
Posts: 2054
Joined: Thu Jan 13, 2005 5:20 pm
Location: Palma, Mallorca
Contact:

Re: Disc Doctor interference

Post by Rich Talbot-Watkins »

Why does Disc Doctor put &0D in &130? That is the more intriguing point for me.
User avatar
Rich Talbot-Watkins
Posts: 2054
Joined: Thu Jan 13, 2005 5:20 pm
Location: Palma, Mallorca
Contact:

Re: Disc Doctor interference

Post by Rich Talbot-Watkins »

Answered that easily for myself by disassembling the very beginning of it:

Code: Select all

8003 JMP &8065  ;service call

8065 PHP
8066 PHA
8067 TXA
8068 STX &0130    ; <--- oh
806B PHA
806C TYA
806D PHA
806E TSX
etc
So it just corrupts it every time a service call is issued. I've also seen code which corrupts &100, &101, &110, &118 and &119 (and probably others), so it doesn't look like something that's easily patched in the ROM. That's terribly written code :(
User avatar
billcarr2005
Posts: 1840
Joined: Fri Sep 09, 2005 4:01 pm
Location: UK
Contact:

Re: Disc Doctor interference

Post by billcarr2005 »

Cribbed from the BROM *ROMOFF command.
I've included the source, should it be helpful! :)
*DDOFF should just disable Disc Doctor (or any other ROM with the header of "DISC DOC"
Works in both BeebEM 4.14 and b-Em 2.2

As mentioned above, it would be possible to subsitute the string of "DISC DOC" and re-run the program to disable multiple "problem" ROMs from within a BASIC program :)

updated version with self contained addresses
updated further to only use relative addresses (apart from the "DISC DOC" search string which is the first thing set up)
Attachments
DDOFF.zip
(728 Bytes) Downloaded 71 times
Last edited by billcarr2005 on Fri Jun 07, 2019 5:52 pm, edited 5 times in total.
User avatar
dv8
Posts: 397
Joined: Mon Jun 22, 2009 10:07 pm
Contact:

Re: Disc Doctor interference

Post by dv8 »

Rich Talbot-Watkins wrote: Fri Jun 07, 2019 3:05 pm 8068 STX &0130 ; <--- oh
So it just corrupts it every time a service call is issued.
In that case, simply disabling the ROM should prevent it from receiving any service calls.

It also means that checking for &0D in &130 isn't reliable since it's assuming that Disc Doctor is in ROM 13.

I've just tested a few of the listed games on my DataCentre machine. With Disc Doctor installed they all fail as expected. After running the ROM disabler program they all worked again.
Michael Brown
Posts: 2608
Joined: Sat Apr 03, 2010 1:54 pm
Location: Nottingham
Contact:

Re: Disc Doctor interference

Post by Michael Brown »

What about if I changed the detection routine to something like IF ?&130 <>0 PRINT "SWITCH OFF DISC DOCTOR" as &130 should be 0 but may have a different variable depending on where Disc Doctor is stored.
I wonder if a Disc Doctor in a Datacentre BBC would be detected this way as well?

Mick.
Last edited by Michael Brown on Fri Jun 07, 2019 5:28 pm, edited 2 times in total.
User avatar
Rich Talbot-Watkins
Posts: 2054
Joined: Thu Jan 13, 2005 5:20 pm
Location: Palma, Mallorca
Contact:

Re: Disc Doctor interference

Post by Rich Talbot-Watkins »

I think Bill Carr's routine the best way to turn off the ROM before continuing to load the game, though it uses some funny memory addresses itself (why &655/&656?)!

There's no guarantee that ?&130 should be 0 (although it's the likeliest thing).
User avatar
billcarr2005
Posts: 1840
Joined: Fri Sep 09, 2005 4:01 pm
Location: UK
Contact:

Re: Disc Doctor interference

Post by billcarr2005 »

I've altered the memory addresses, which were the ones used in BROM, so that the routine is now self contained :)
Michael Brown
Posts: 2608
Joined: Sat Apr 03, 2010 1:54 pm
Location: Nottingham
Contact:

Re: Disc Doctor interference

Post by Michael Brown »

L.
10?&130=0
20*DIR $
30IF?&130<>0 THEN CLS:PRINT'SPC6"Please turn off DISC DOCTOR":A=GET:CALL!-4
>
This would set &130 to 0 then allow it to change to a higher value if Disc Doctor is fitted as the *DIR $ changes the value.

Mick.

Just had a bad feeling. What if Disc Doctor is in slot 0?
Last edited by Michael Brown on Sat Jun 08, 2019 10:39 am, edited 1 time in total.
User avatar
Rich Talbot-Watkins
Posts: 2054
Joined: Thu Jan 13, 2005 5:20 pm
Location: Palma, Mallorca
Contact:

Re: Disc Doctor interference

Post by Rich Talbot-Watkins »

Just use Bill Carr's program above! It disables Disc Doctor without requiring any intervention from the user at all!
Post Reply

Return to “archive issues”