Time manufacturers gave discs their due
I READ with no little sympathy the letter from Mr Palmer in
the January 1984 Micro User in which he complained about the problems
of transferring programs from tape to disc.
The simple fact is that software suppliers in this country themselves
are responsible for forcing users to resort to criminal extremes
to be able to use the software that they have purchased.
The software manufacturers are simply going to have to take
a more responsible attitude toward their customers if they hope
to survive in an increasingly competitive marketplace.
Consider this: In Cambridge where I live there are at least
half a dozen software retailers selling products for the BBC.
In the last two days I have conducted an unofficial survey and
I am sorry to have to report that, apart from a few Acornsoft
games (about half of their line), I was unable to find a single
disc copy of any game for the BBC for sale.
This is the situation that disc-users must face.
You cannot buy a disc copy of software for the BBC and if you
buy a cassette copy and upload it to disc (assuming that you are
clever enough to figure out how to do it in the first place),
you are threatened with prosecution.
It is unfair that Acornsoft have taken the brunt of the criticism
recently over this matter. At least they do manage to distribute
a few disc copies of some of their products, which is more than
any other software house can say.
Yes, I know that other software manufacturers advertise disc
copies, if you are willing to mail-order the product. In addition
to having to wait from between one and four weeks to get the disc
in the post, in some cases you have to pay an outrageous additional
charge of up to £4 for the disc.
An additional charge of £l-£2 is fair for the extra
handling and packaging necessary to insure the safety of the discs,
but £4 is immoral.
So what are the alternatives? In addition to learning how to
transfer most of the software himself, a disc user can buy special
products to upload programs for him.
I have a copy of the new and improved version of the most popular
of these items, but there are some games (and not only long adventure
games) that it still will not handle.
There is still the unresolved legal question of which the user
of these items must be aware. But this is not a long-term solution
to the problem.
In the end the only possible solution lies with the software
manufacturers, distributors, and retailers.
They are simply going to have to realise that cassette storage
is rapidly becoming an obsolete medium, even for the home user.
The change is going to be forced upon them in the next few years
whether they like it or not.
Hopefully the more responsible of them will take the initiative
by seeing that disc versions of their products are readily available
to the purchasers.
Only by doing that will the suppliers have a basis for distinguishing
the pirates from the legitimate users who simply want to enjoy
the software that they purchased.
In the meantime I have decided not to purchase software from
those houses that protect the material to such an extent that
it cannot be uploaded to disc without extreme effort.
It is not much, but it is all that I can legally do.
At the moment there are two software houses on my personal "blacklist"
and they can rest assured that they will be getting no more money
My only hope is that they go out of business as soon as possible.
- D.L. Adams, Cambridge.
How to save the Sphinx
REGARDING Alice's review of Sphinx Adventure (The Micro User,
January 1984, Page 40), it IS possible to save the game during
play, although Acornsoft does not tell you how to do it.
To save Sphinx Adventure:
When you are ready to save the game, press Escape.
Enter *SAVE"SPHINX" 0400 7C00 to save the first part.
Enter *SAVE"ZERO" 0 90 to save the second part. The
game is now saved on tape.
Enter *LOAD"SPHINX" to load the first part.
Enter *LOAD"ZERO" to load the second part.
Enter GOTO 236 to restart the program.
The micro will now display the last location you visited before
you saved the program, then it will wait for your next command.
It is important that the two parts should be reloaded as shown
above, otherwise certain variables will have the wrong values.
- R.W. Crisp, Leeds.
I HAVE a tip for all the BBC Micro owners who own the Cambridge
joystick - the non-self centering one.
The idea came to me while playing Rocket Raid, and I felt the
need for the joystick to go back to the middle after each movement.
All you do is put two thick elastic bands round the lever. Pull
one round the bottom and the other round the cable at the top.
This will affect the joystick so that after any movement it
will return to the centre. - Matthew Lemmings, Staines.
I WAS very interested to read the letter from David Bye in your
December 1983 issue.
If he feels like that about the use of the features of the BBC
machine why is he reading your magazine anyway?
He could have bought a cheaper machine which didn't allow him
to use procedures, functions and such.
It strikes me that he must not have used one of the machines
or he would not have written some of the things that he did.
He says, for instance, that the Acorn compilers were way-wardly
silly in using a value of -1 for TRUE and so denying him the facility
of writing "IF X and IF NOT X".
If he had tried this he would have found that it would work
exactly as it should.
It is true that IF X would be satisfied by any value other than
0, but none of these other values would satisfy the statement
IF X =TRUE.
A study of the way in which computers work would have shown
that -1 is the only value that could be used for TRUE and still
allow FALSE to be zero, as the value of NOT 0 is -1.
So far as procedures are concerned he says that "the only
advantage of PROCs lies in their control variable facility"
and that most people don't need this.
I am not sure what he means by this but I know that many people
are very glad of a facility which allows them to pass parameters
to a subroutine without altering the value of a variable in another
part of a program.
Even then I suspect that the major advantage of procedures and
functions is their use of LOCAL variables.
Because of this facility I am gradually building up a library
of functions and procedures which I can, after they have been
tested, store on disc and call in to any program without needing
to know which variable names have been used.
I also know that these procedures will work and that any error
must be because I have passed an incorrect value rather than an
unsuspected interaction with another part of the program.
An additional advantage of programming in this way is that,
if the program needs changing -and it almost certainly will if
it does anything useful - it is much easier to see where the changes
should be, and what their effect will be.
In 1970 and 1971 I was very much involved with the amendment
of computer programs to cope with decimalisation.
Anyone who has had that sort of experience will not need much
persuading of the virtues of the modular construction of programs.
All the programs worked but finding out how, so that they could
be modified, was a herculanean task.
I have not had my machine long enough to try all the features
of BBC Basic but it is my understanding that procedures are, in
fact, faster than GOSUBs in large programs as the system records
When I started programming some of the existing programmers
looked down on Cobol because "real programmers use assembly
It seems to me that some of this attitude still lingers and
it is very much on a par with "good drivers don't need seat
belts" and "I know when I have drunk too much to drive".
Mr Bye isn't forced to use the facilities he doesn't like, but
I hope that nothing of mine ever depends on one of his programs!
- David H. Wild, Hemel Hempstead.
MOST of us at times find trouble with cassette loading, and
I have had some success in overcoming the problem by resorting
to my audio equipment.
I have a BBC Model B (OS 1.2) and being very interested in graphics
had, among my Christmas presents, a copy of the Acornsoft "Creative
1 found that while side A of that cassette loaded without the
slightest trouble, side B just would not load at all and produced
nothing more interesting than a flood of "Rewind Tape",
It would seem the copying for side B had not been up to the
standard of side A -1 can think of no other cause.
So I resorted to my audio method of solving the difficulty as
I had successfully done so before, and indeed did on this occasion
solve the problem.
I simply place the offending cassette into a cassette recorder
and transfer the "sound" from it to a reel to reel machine
running at 7 1/2 ips (19cm), using manual control over recording
levels on the reel to reel machine, and so far as I can, ensuring
optimum modulation of the reel to reel track recording.
I then reverse the process and transfer the "sound"
from the reel to reel machine and re-record it on to a cassette
at normal cassette speed.
I do not usually transfer it back on to its original cassette
tape, preferring to retain that recording — warts and all — as
So I use a separate cassette to record the "copy"
track, and again I control recording levels manually.
I have usually found that this re-recorded cassette track will
load quite satisfactorily into the computer, as indeed it did
on this occasion.
So I now have a perfectly usable copy of side 2 of "Creative
Graphics" which works well on my computer without any loading
problems, and the original master cassette track works beautifully
as far as its side 1 is concerned.
Your readers may find this method a useful way out of trouble.
A reel to reel machine is not essential - the system works with
two cassette machines, but a transfer to reel to reel recording
at 7 1/2 ips is more satisfactory and reliable. - Norman Gill,
Hong Kong take away
A LETTER from Mr D.R. Stafford, Camberley House, Surrey was
published in your January 1984 issue. Mr Stafford's letter made
nonsense of my May 1983 letter to you (published in your August
1983 issue), whereby I was adamant in stating that all BBC Micros,
sold in the UK, are manufactured in the UK.
As I am sure you and your readers are aware, the demand level
for the BBC Micro continues to be extremely high. As an exceptional
action, to balance the demand, approximately 1,000 Hong Kong-assembled
machines were imported for sale in the UK. These machines were
Elsewhere in your January 1984 issue mention was made of the
fact that recently purchased machines had Basic I fitted. I hope
you can appreciate that the BBC Micro takes a varying amount of
time from the kit to the final product, so that at any time BBC
Micros offered for sale can represent a range of versions. - Colin
Malone, for Head of Merchandising, BBC Enterprises.
I FEEL compelled to "put my oar in" on the structured
v. unstructured debate.
While I do agree that GOTO is essentially a poor instruction,
especially it jumping forwards, why write code then slip over
This has to be silly and wasteful - I do not agree that GOSUB
should be considered in the same class.
Not so long ago I wrote a piece of quite involved code for simulation
purposes. During this, it was found that one piece of code would
suffice for several different operations provided different entry
points were used for each.
In Basic this was simple - a series of GOSUB calls all utilising
the same RETURN.
With PROCI cannot, yet, see an easy solution. It would be possible
to use a dummy variable to cause a jump over the (temporarily)
redundant code, but oops, that's GOTO isn't it?
Actually I do have another suggestion, whether it would work
I don't know:
10000 PROCA(. . .) 10400 GOTO 10600 10506 PROCB(. . .) 10600
But that wouldn't be popular with the "structuralists"
either, would it?
As a final comment, while I agree with Dr E.T. Freshwater of
Leeds, (Micro User February 1984), I think that the main thrust
of the structuralists is against the unconditional GOTO rather
than the conditional.
The latter would seem essential if branching in programs is
to occur at all! - J. Comerford, Leicester.
• Actually you can obtain this sort of an effect by having several
different procedure starts defined (that is, DEF PROCs) with only
one ENDPROC to finish. The following program should make the point.
60 PRINT "NOW IN PROCA"
80 PRINT "NOW IN PROCB"
100 PRINT "NOW IN PROCC"
110 PRINT "ENDING THIS CALL"
Lowdown on OSCLI
COULD you please explain OSCLI? The listing I enclose gives
my computer's full spec, then a disassembly of the OS routines,
which indicates that as per handbook OSCLI vectors through &208.
But the disassembly from &200 does not have a &208 in
it - why?
The memory dump of that area shows &208.
The other strange thing is that if I type as a direct command
OSWORD or any of the other routines I get "Mistake"
as a reply, but when I type in OSCLI I get "No such variable".
- G. Coventry, Chippenham, Wiltshire.
• &208 is an area of vector data. This part of the memory
contains numbers which point or vector to another part of the
computer where there is machine code.
The idea is that the bytes around &208 aren't machine code,
they just point to the start of something that is, so disassembling
them gives nonsense.
In your hex dump &208, contains &89, &209 contains
&DF. These locations store the address &DF89, backwards.
When the micro sees JMP(&208), it "decodes" this
address from where it is hidden at &208 and &209 and jumps
to that address, in this case &DF89.
You might ask why you go round the houses like this - it's usually
easier to jump directly to the address with JMP&DF89.
The point is that this way you can fiddle with the address at
&208, &209, since they are in RAM (unlike the JMPs at
This way you can make the micro jump to your own routine and
to what you want — in other words, you can tailor the machine
to your own specifications.
It also allows Acorn to modify things later. If they change
the address of a routine in ROM, all they have to do is alter
the vector table.
So long as you call through the jump table, as it is known (&FFCE
etc), you won't notice a thing.
This means your programs work on both "old" and "new"
As for OSWORD, it isn't a word that the computer recognises,
so it says "Mistake".
I know we talk about OSWORDs, but the computer doesn't know
it by this name -you have to CALL it through the jump table. You
can set it up as a variable by using OSWORD = &FFF1.
As for OSCLI, you must have Basic II. This has a word called
OSCLI, but it needs values or parameters to go with it.
If you just type OSCLI it looks for them and fails to find them,
so says "No such variable", a slightly confusing message.
On Basic I, OSCLI isn't recognised at all and you simply get
Capacitor can clear screen
WITH reference to the Micromail letter concerning "drifting
lines" that occur across the screen, I would like to say
that this is common not only to Sony TVs but to many others used
with certain BBC computers.
I have written to Acorn about the problem and according to them
it is a fault in the TV.
This is not so, and differing BBC computers suffer the problem
to greater or lesser extents - a few, not at all.
The problem is probably either due to beating between the chrominance
and luminance signals or between the chrominance and a subharmonic
of the CPU crystal oscillator.
Adjusting the trimmer will only offer temporary alleviation
and is no real solution.
I have found that for many TVs, Sony included, the set requires
only a very small chrominance signal to give good colour, so a
simple but effective long term solution is to solder a small 10
pF capacitor across the base of the chrominance output transistor
Q9 (across the resistor R133, 120k).
This is very simply done without removing the PCB and without
the need for a very steady hand, as shown in the diagram.
It may be easily removed at a later date if required, and will
cause no harm to the computer. - Andrew Mackay, Northwood,
IN answer to Mr Pentecost's query on tape handling (Micro User,
January 1984), if he uses *FX138,0,13 immediately before each
OPENOUT he will not need to type a Return at the keyboard. Details
of this call are given on Page 433 of the User Guide.
OPENOUT, OPEN IN, OPENUP, CLOSE all effectively call the OSFIND
routine at &FFCE. This is described on Page 451/2 of the User
Astute readers will notice that the value of A on entry produces
operations exactly equivalent to Basic II functions.
A=0, Y=? - CLOSE Y
A=&40 - OPENIN (not implemented in Basic I)
A=&80 - OPENOUT
A=&C0 - OPENUP (OPENIN Basic I)
So to OPENOUT a File called FRED in assembler use:
.openout LDA£138 / osbyte nuaber
LDX£0 / Buffer number (keyboard)
LDY£13 / Carriage Return
JSR &FFF4 / Call Osbyte
LDX£ FILENAME MOD 256
LDY£ FILENAME DIV 256 / get address of filename
JSR &FFCE /Call Osfind
OSBPUT ROUTINE TO FILE
RTS / Return to language (Basic)
- Geoff Cox, Gillingham, Kent.
Fault at line 50
WITH regard to the Beasty Competition (Micro User, February
1984) I have programmed line 30 according to the book, that is
30 PROCpic(0,0,l) but when I attempt to RUN the program the machine
indicates Arguments at line 30.
As I only had the system at Christmas I am afraid I do not understand
where I am going wrong. — Rodger Gregory, Nottingham.
• Thanks for your letter, especially for giving us the page
number and issue. If only everyone were so kind.
Line 30 CALLs a procedure, which is another part of the program.
You tell the computer what this part of the program does by defining
it - look at line 50.
Now when you call a procedure, you have to hand on values to
it - passing parameters. What you're handling on is in the brackets
of line 30, separated by commas. These are called arguments.
The computer needs something to receive what has been passed
to it. If you look at line 50, you can see three variables, X%,
Y%, S, ready to catch what line 30's procedure has passed to it.
The X% receives 0, the Y% gets 0 and S gets 1.
If the number of things your passing doesn't match up, or you
try to pass a string to a numeric variable, you get the arguments
message for the line you called the procedure from.
The point is, if you've made a mistake on line 50, perhaps missing
out a comma, the micro believes this line be the true definition
of procedure, so it decides that the line you call it from is
In this case it says line 30. However, the version you've got
in your letter looks correct. Therefore, we think you'll find
the fault is at line 50.
And finally, with tongue firmly in cheek . . .
TILTING AT WINDMILLS...
Sorry that I haven't written for so long, but I think I'm going
quietly and irrevocably mad. And it's all the fault of Micro User.
They asked me to try out a new game they were thinking of printing
called Lancelot and Guinevere. Well I've always fancied that I'd
make a good jouster, so I decided that I'd type it in.
As you know, and Andrea keeps telling me, I've been stupid since
the day I was born, but since I've had my micro I've been able
to prove it.
The first mistake I made (or second, if you count starting the
damn thing in the first place) was to turn over two pages at once
and start typing in the wrong listing halfway through.
When you think about it I should have realised sooner. After
all, it's unlikely that a listing with PROCchivalry and PROC-Merlin
and lines like IF virgin THEN PROCunicorn would contain a PROC-lightpen.
As it was, I typed in a whole page before I realised.
Mind you, it wasn't much better when I got back onto the right
listing. Do you know the Number of the Beast? Well it's not 666
as you might think, it's line 340. It took me 27 attempts to get
that one right, and even now I'm sure that Beeb only accepts it
out of sympathy.
Not that I got much from Andrea. Sympathy, I mean. She couldn
't see what all the fuss was about, but eventually, saying she
couldn't stand the screaming any longer, she decided to help.
And I accepted - my morale and judgement were that low!
A. said that she'd read the listing out to me while I typed
it in and it seemed like a good idea at the time. I wiped the
tears and sweat off the keyboard (the blood nearly came later)
and settled down for what would be positively my last attempt.
And it seemed to work. She dictated and I typed. Then came the
moment of truth. I entered RUN and pressed Return (as they say
in the beginner's books). I was so nervous that I closed my eyes
as the opening tune, "Colonel Bogey", played. I knew
disaster had struck when I heard A. ask:
"Should Lancelot be doing that with his lance?"
No he shouldn't. And I had grave doubts that Mark Smirky, the
guy who wrote the program, really meant the score table to be
round. Against my better judgement I listed the program. It was
"What have you done?" I screamed at A., my fingers
curling menacingly around the User Guide. "You were supposed
to be reading it all out".
"Well, I only corrected the punctuation", she screamed
as she beat a hasty retreat, leaving me with my loathsome listing
and a near coronary.
Still that wasn't the worst. The worst was my nasty nephew Nigel
who just "happened" to call round. I suspect A., but
can't prove it. The little horror has an Electron (which explains
the "If it doesn't use Mode 7, it isn't worth doing"
sticker on my Beeb).
Of course A. told him of my predicament and he offered to help.
In my less paranoid moments I've little doubt that it was all
done in a spirit of charity, but I did object to his groaning
and laughing as he sorted it out. I particularly objected to the
way he kept muttering "Dim, dim" under his breath.
Eventually the little horror had it working and he left, but
not before he'd had a word with A. I was listening from the top
of the stairs and distinctly heard the phrases "at his age"
And now I have a working version of Lancelot and Guinevere and
the challenge seems to have gone out of life. I haven't even bothered
to play the game.
Who was it said "it is better to travel than to arrive"?
He'd obviously typed in a few listings in his time.
Yours in adversity.