160. Killing ROMS ~~~~~~~~~~~~ I suppose that most Beeb users who have fitted extra ROMs have had problems with clashing "*" commands. When I first got my Beeb, I bought Computer Concepts Disc Doctor. I still have it fitted and it is arguably still the best standard utility ROM available for a Beeb that has an 8271 disc controller. One of its commands is *MENU, which presents a pleasant uncluttered menu screen, enabling both BASIC and Machine-Code programs to be run by pressing a single key. It will even automatically handle downloading of programs to a PAGE value of say, &E00. Since it was so easy to use, I built the *MENU command into the !BOOT file on many of my discs. You can imagine how annoyed I was when later having fitted another utility ROM, Enigma, I found that it clashed with the *MENU command in Disc Doctor. All my discs wouldn't boot up, despite the fact that Enigma didn't even have a *MENU command among its own list of routines! The time had come to temporarily immobilise the offending ROM. But how best? There is a command within Enigma that will turn off any ROM including itself, but when the key is pressed, as with to boot up a disc, the ROMs are reactivated. The switch-off command can be built into the !BOOT file on the disc, but you get a messy screen as the routine is implemented, and of course it only works if you happen to have Enigma. What is required is a simple method of switching off any offending ROM to allow the "*" Command to be acted upon by the required ROM. Now on start up, or , the OS copies the ROM type code for each of the ROMs that are fitted, down to page 2 for its own use. The table starts at &2A1; the 1st location corresponds to socket 0, the second to socket 1 etc.. If the value zero is placed in the table, then the OS will not recognise the ROM in the associated socket and will not offer it any "*" commands. Thus the solution is to 'poke' a zero into the correct address from the !BOOT file. The address in hex can be calculated by entering:- PRINT~&2A1+(n) , where (n) = the socket number. So to turn off any ROM, first find the socket number (n) of the ROM to be disabled, 2nd Calculate the address to be poked and then build up the !BOOT file. Since Enigma in my machine is in socket 7, the !BOOT file is built up as follows. *BUILD !BOOT 1 ?&2A8=0 2 *MENU 3 *OPT 4,3 Pressing should now boot up the disc with no problems. If you don't have a routine to find out which socket your ROMs are in, then the following program will show you what you have fitted and where. For a shortened printout which will fit across a Mode 7 screen, omit line 1020 and alter the MODE statement in line 100 from 3 to 7. Note that ROM images in SRAM will not be shown until initialised, ie . 10 REM ROM Identifier by R.Sterry 09.06.85 modified 14.09.87 20 : 100 MODE3:@%=&902:FORY%=0TO15:PRINTY%,~Y%" "FNrom:NEXT:@%=&90A:END 110 : 1000 DEFFNrom:LOCALstring$,off%,off1%,byte% 1010 off%=FNpeep(7):IFY%?&2A1=0ORoff%=&80THEN="EMPTY" 1020 REPEAT:off%=off%+1:byte%=FNpeep(off%):UNTILbyte%<32ORbyte%>126 1030 FORoff1%=9TOoff%-1:byte%=FNpeep(off1%):IFbyte%<32THENbyte%=32 1040 string$=string$+CHR$(byte%):NEXT 1050 =string$ 1060 : 2000 DEFFNpeep(mem%):!&F6=&8000+mem%:=USR(&FFB9)AND&FF