Micromail

Volume 2

Number 1

March 1984

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 from me.

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.

To Reload:

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.

Improved joystick

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.

Cherished facility

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 their position.

When I started programming some of the existing programmers looked down on Cobol because "real programmers use assembly languages".

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.

Recorded delivery

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 Graphics" cassette.

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", "Data", etc.

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 a master.

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, Wakefield.

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 the exception.

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.

Unconditional surrender

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 it?

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.

10 PROCA
20 PROCB
30 PROCC
40 END
50 DEFPROCA
60 PRINT "NOW IN PROCA"
70 DEFPROCB
80 PRINT "NOW IN PROCB"
90 DEFPROCC
100 PRINT "NOW IN PROCC"
110 PRINT "ENDING THIS CALL"
120 ENDPROC

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". Why?

- 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 &FFCE onwards).

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" machines.

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 "Mistake".

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, Middlesex.

Tape handling

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 Guide.

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
LDA£&80 /openout
JSR &FFCE /Call Osfind
OSBPUT ROUTINE TO FILE
RTS / Return to language (Basic)
.FILENAME
EQUS"FRED"+CHR$13

- 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 at fault.

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...

Dear Trev,

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 rubbish.

"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 "ZX81".

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.

Bob