April 1988 Vol 1-3
TS:2068 UP°:DATE the user’s NEWS
New Sections **k#* COMPUTING WITH LARKEN DISK ***** *kk**k THE DISK DRIVE ORPHANAGE ***#**
The Millenia K The TOS DISK
FO IG OI III IG IGG ICIGIGI III GIO IG ICI III IIE
**k*** Major Softwares This Issue *****
** Feature Program: "BUDGET" by: Bob Mitchell | ** Five New Disk Managers by: Bob Hartung FORO IR IORI IO GIG OI ITO II RIOR IRR RAK KR *eeE PLUS RE
Umteen articles on programming.
TS-2068 UP-DATE 1317 Stratford Ave, Panama City, FL 32404 904 871 4513
SoUIYDMYA SOUISAG [EVO
wa
“ve ayy soarasoud (iaidepe
suru ayi 40) son1andea jenads epakunyo
ag 01 paou sauoNeg ay) Uaya puy “ssuaneg S.98Z, 94) WOd Jomod
nutunu Buuaeap “ant skeas WY UL Pep pe :AgpuRIs oT 88. atp sind sjo Rurying “apo Agpueas uo grag ® 30 “Bunndutos axnoe yo smoy
punoge apisoad yoy “saumiea VY at UOUMUOD AMO} UO SUN B87 aU Ajddns samog
ange
“sda tayo pur ggz ayy uaaaviag sayy map Jo d!aoaL a ayory ody
puoduiy ay) 40 pow oHRyAWD ZSLA P Bush panaiyor am pyiom 3 OF SuONRaTUNUAO) “sa]qUU>sse YIM JISVE
DIAS! a¥onsiy) unenunsoad naoprsrgy
ad Ai suo uPyy sow FuIsH 94,nok JL suoRNUYOp Jouuid a40ys 02 pur “simuuid yo ours apim ypreat 07 Sapo yz ountyUCD 07 NOK smOLTE Joupa iiund y “Wae]Y pur mpudys “yoo sornnay29 Myramod Y apnjaUt sumopdog
SURI 19s pur sorep PUL OF YO}9 pur ARPUDTRA s,887 ay2 YTTAL posh uayar jajasn <pemnonaed sy] “hrowiaw Z, dup} Jo SUMS ISUOD aU UIT ‘9s0YD nox Aw KUL UT PauNSiUo.aq UND IW) FO} uUO}-Dayy eS AIMMYOS AALIP B87 DULL cami.
“souanbos dase ou! paendiunw aq “ajduiexa 10) “ued 11 919A {JD UMOU LUT P]ay st [Paras
4918] 40] pasois Buiag erep os - 1aayspraids se a}dioutad aures ay uo S409 Si aspqning
ye poawun Asta pur Syyainb aq 01 siaFprg pue moyyses sso} pu odd smo|Te 1 ‘uoNeindiuew
20] Sa|qeuA froudUMU Jo SoLas t 1]Ua
‘01 Udy) pur (Jaw UUINJOD F pu MOI RP B19q) S{]99 UIA arINUIIO] Jo SoLIe6 b oUyap
01 20K smojqe uoraydde siya “SuiMUE|d UeUT] 403 aIqenyeaul Taayspoauds
“1x01 ayn Jo mnoxe] ayy smoys yoy dew aded &
Aq paiuasaudas st uauinsop ap Jo fed yorg a8ed paund ayn uo rwodde Koy se syeoiq a8ed snueudp pur Supauso ‘Ruruysopun “sate *pjog Suimoys “(19D NOK IYAA ST
39g NOA UM) OAMISAM Aling st Aeidsip dYL “‘Inode] UUN]oD-NIAW puE ‘BuIoe|dox pur Suryoseos uswosou pue Sure YPO|g apnjour sanmoRy Sunssavo1g P4om,
“suonouny aseqeiep pure eoysprads
“Butssoo1d-p1oms sarmyeay yoryas ‘wuvaapadig sapnpout azemajos suonvandde ut-ayng
“shay Jo ajdnoo v Surssaid
jo soneu @ rsnf s.r “ggz 941 LAA “AZoulau s.s9mndutos tp out a7eayos poseq-ysip areredas Surpeo] jo Aejap ay inoyrim.
~ suoneoydde yaayspeaids pur Surssas01d piom ‘ajdurexa Joy ‘usaantag Yoms
01 NOK smopfe “ZO ‘a1MMIJos Suesado 941,
-osn 01 Asna Sowanxa 194 ‘aqudeo Ayreuondaoxa st yoyas ‘ouemyos suonvardde Jo auins UrajINg & YIM Sew09 BB7 2UL, aaeMYOS
“UA LAdINOO TWNOSWHd AO
*(yiBuons K1ajjeq se Yons) snIeIs §,88Z
dt) UO VORRUTIOJUE NOK SAI Yorym sep. wiaysfs Sunjezado pur ‘speyap Aoj9as1p
pur Sumy tarep Asetp ‘(o8ed arajdusos
B-UO ale NOK D1dyM NOK SMOYS YT)
dew aed onbnn v :(spuruuio s,ggz ay 112 Surpnyour) sprerap nuaw pjoy yoy suonsas Jo SIsisuOd var UdaIDs sy} Jo JopurPWel ay,
“POx8 30 vase Burysom ofp] sapinoad pur “ssajoerey> 901 x SUI] g SI WIOy s,u99108 ay, “INo-pLal divys ‘avajo e Suypisoad - 2/fur Surmain
pur ons Istqu0o YyiOog Ut SKedsIp jeULIOU UO qwawosordus! aaissen e saptaoad ystyas G1] asimpiodns }J2-o4p-Jo-ayeIs v SI UDDIDS OY
“areMyos Ul-I]ING powonsiydos ay punoxe Ae a19q) puy Spjoinb 0} siasn a9140U 104 Ase AyJeuoNdaoxa ay APU YT ONG Pur XFCNI
“(9° se yons ‘shay uonouny jeroads sopnjour i] “SXay [exrzy-l0Ys *yualts Ayenysta aim progsay ALYAMO TIM P SPY SBZ AU Aejdsip pur paeoqéay
auradsayeyg Jo sys0m
a}ajdwod aip poy 01 yBNova ~ ajquytear 2q ia SarkqIal ¢ JO WW [P01 “syoed o14qyn | past9]21-94-01-W0Os JO UOHNPONU! 9y} WIA (12409 98g 998) syped JH TeUOHIPPR Bumojs Ajdunis q ygTp 1 aqepuedxa Atista St SIL 1X01 JO spiom QQ0'Z NOgr 40} ysnous — a]qujmar st Yqz punose yorysn Jo ‘ULIING WWM JO NZE IM samo ggz au, Aa0urayy
S6°6LPS — oud e [jeuIs Os 12 puy
-oByoud e [fous os ut ‘ysnut Os S1ajyo saynduroa feuossad ajqeya0d sayy0 On ‘39ND ,3y SJuo saansvau pur ‘q]zZ UeYZ ssa] sydiam ‘ped py ue ues sa]]eUEs St gg7 AUT,
CHauad MAN V GNIAAE SLOVA FALL ‘88Z
Editorial April 1988
The Changing Complexion of TIMEX-SINCLAIR Computing
Seen at the Orlando 1988 Winter Fest
This Issue of Up-Date was delayed a week to report upon the Orlando 1988 Winter Fest, There were quite a few subscribers to UP-DATE In attendance and several attendees became new subscribers. From my standpoint the Fest was a success. The display room was filled most of the time, Most area user groups were represented, The C.A.T.S, group was busy taking orders for their TS-2068 public domain software assemblage on tape. ($9.00 to C.A.T.S., PO Box 467 Fairfax, VA 22039). Representing the Western USA was Tim and Stephanie Woods (Time Designs Magazine), and the Central USA was represented by the staff of SyncWare News and attendees from the Michigan user group.
The rains came but the spirit of the fest was not dampened. Then Sunday afternoon the Sun came out for those who wanted to visit Disney World and the other attractions, A lot of merchandise was sold by the vendors, A+ Computers came prepared to sell out thelr stock of QL's and began selling the QL for $75.00 (including software!). Then by Saturday afternoon the price went up to $89,00 in order to keep from belng sold out too early. Sharps Inc. had the table next to A+ and was doing a land office business In QL accessories and books, The strangest phenonemon was to see a person buy a QL for $75,00 and ‘then turn to Sharps to buy a Trump Card for $300.00! It just "sounds" strange as the Trump contains more than the equilivant of $800.00 of IBM XT enhancements, Including up-grade to 896K of memory.
The 15-2068 tables were also doing brisk business and almost everything sold out, Displays were set up to demonstrate all of the TS-2068 Disk Drive systems and Larken's new 256K Ram Disk Cartridge, Eric Johnson sold a bunch of new TS-2068 computers obtained from the Timex repair faclllity. He also sold quite a few that had faults of one kind or another. All of the TS-2068's did not sell out,
so If you need one, contact Eric at the address given later In this article. Avai lable are TS-2068's that have been checked out good and some
| believe that the prices are about O.K. ones and $35.00 for the ones
that have bugs. $75.00 for the that have flaws.
Bill Pederson showed his (prototype) 20 Mbt EXTRA MEMORY Bank Switching RAM for the TS-2068 (thats 20 mega bytes!). Hopefully sufficient interest will develop that Bill will develop the system and offer It to the users, (William Pederson, 1120 Merrifield S,., Grand Rapids, MI 49507).
TIMEX SINCLAIR GROUP EXPANDING! The complexion
of the Timex SInclalr user group has changed during the past year. We have had an influx of 58000 new Stnclalr QL users, while keeping constant numbers of TS-2068 users. Of course the TS-1000 and 1500 users are a solid group who mostly have complete software Libraries. Interest remalns strong in the TS-2068 due largely to the availability of three new disk drive systems for the TS-2068 and some new and more capable software, (See reviews of three TS-2068 Disk Drive systems In the January 88 Issue of TS-2068 UP-DATE Magazine).
THE SINCLAIR Z88: Hold your hats! Here comes the neatest IIttie PORTABLE computer that the world One was available at the Time Designs table to stroke and examine, Forget any comparison with other Sinclalr products, This Is New Concepts. The Z88 is a TRUE PORTABLE requiring no extra devices or dangling wires, It operates for 35 hours on enclosed AA Cell Batteries, holds memory data non volatile practically forever, has a pop up LED display, and Built In software. When the switch Is turned on a pop-up Menu appears for the built in software ensemble, The 288 has a bulit in EPROM programmer and one can pop In a small cartridge to
has seen!
down load the existing program to EPROM, Then the EPROM cartridge can later be plugged In and operated.
The Sinclalr Z88 Is a business person's delight
and a sales person's dream. Also, | belleve that many personal users will want this neat littie computer. The dealerships in the USA are being
organized anda few dealers have the Z88. Once the Z88 hits the USA market in full force, | believe it will capture a large chunk of the market for PORTABLE Lap Top computers, The Sinclair 288 will fly! The price of the Z88 is about $479.00. It's nearest competitor runs about twice that. My opinion Is that we will see the 288 price lowered to just under $400.00 as the year progresses, which will cause intolerable pain to competing Portables and lap tops, which are grossly overpriced, There Is room In the USA market for the Sinclair 288.
With 58000 new QL users, the continuing TS-2068 "die hard" users who are now upgrading to Disk Drive, and the (just now) release of the Sinclair Z88, the Timex Sinclalr user group is actually expanding. The convertabi lity of syntax between the TS-2068 and the older TS-1000's helps to the durability of the TS-1000 group, While have abandoned the Timex Sinclair users others have increased their stock and intensified their efforts. As new Z88 and QL dealers come In the support picture should improve.
sustaln some suppliers
The TS-2068 users continue to have excellent cottage Industry support and new software Is constantly being produced, The clubs are busy in the conversion of public domain software to disk drive application and expanding the software functions of these abbreviated programs. Interestingly, about 1/4 of the "die hard" TS-2068 users also have a QL. Some have sald that they are bullding their QL system In affordable stages while keeping the TS$-2068 as thelr primary system,
"THE NORTH AMER | CAN TIMEX SINCLAIR ASSOCIATION": The Florida User Groups, who
organized Winter Fest, came to Orlando with a plan to organize a National Timex Sinclair Association. Quickly MNational® changed +o "North American" a more appropriate name which includes the Canadian user groups. In particular the Ontario and Vancouver user groups are very active and strong. A North American Association will continue (in name) the friendly, cooperative, and common interest "existing situation", The Idea of a North American Association imediately took hold, A working group was established, Both Time Designs Magazine and TS-2068 UP-DATE Magazine volenteered to support the association with editorlals and page space for commun! cations.
The success of the North American Association is almost guaranteed from the start. Eventually as the Association is formed a new Association publication Is likely to be started, The names of the other coordinating officials will be announced. But as of now, Ertc and Mary Lynn Johnson, 249 Ny Harden Ave., Orange City, FL 32763, are the key persons, The two had major parts in organizing the Orlando Winter Fest, TS-2068 UP-DATE Magazine hi ghty recommends that ALL Timex Sinclalr users joln the new North American Timex Sinclalr Assocation and participate In this venture that will serve to promote the interests of the users, the Clubs, the supptiers, and provide Information exchanges
Eric Johnson Is the SYSOP of the BBS which was set up as the communications center for the Fest. This BBS will be continued and will become the communications center for Information, suggestions, and volenteers for work in the organization of the North American Timex Sinclalr Association, The BBS telephone number ts: 904 775 0093 (300 baud, 8, 1, none). Lately thls BBS has been sabotaged by a pestering hacker, but wItl be back on line WHQ (when he quits). Keep on trying. Whether you can reach the BBS or not, your Interest cards to the persons given will be a help.
IN SUMMARY: The Orlando Winter Fest was a SUCCESS. Timex Sinclair Computing, Instead of waning, Is actually on a sharp up-swing, There are several thousand new QL users and another Sinclalr 288 user group Is about to come Into the fold. The
Editorial April 1988
Z88 group has the prospect of becomming a huge user group. New disk drive hardware and software for the TS=2068 are now available, which adds to the “staylng power" of this viable and enthusiastic group. The new Assoclation will bring more communications between Clubs, the users at large, and the supporting Industries, With the enthusiasm being exhibited for the QL by the users, Amstrad may be enticed to resume production of the Sinclair QL. They will miss a great opportunity if they dont.
System Variables and Number Storage
Appendix D of ‘the TS+2068 user manual gives four pages of "System Variables", which most users kinda ignore. These variables are used by the TS-2068 operating system to control things, and we users can use the vars to advantage, The most confusing thing about the tables Is the "two byte numbers", which leaves us out in the cold climate of mis-comprehension, So, let us learn how to store a number greater than 255, A "8 bit" computer places a Umit upon “how large a number" It can manage "in just one byte (memory address)" In memory, You can "LET a=999999" and the six digit number will STORE in the variable area, But, internally In the computer, that takes several bytes of memory, The minimum amount of memory required to store a number larger than 255 Is two bytes, and is stored by POKE(ing) a smaller number to two consecutive addresses. EXAMPLE: POKE 60000,1 and POKE 60001,1, Now let us see what that means, In so far as "what number LARGER than 255" has been stored, The computer formula for finding out would be, PRINT PEEK 60000 + 256 * PEEK 60001, Try it. After some practice POKING ‘two consecutive MEMORY ADDRESSES, and then PEEKING them back with the formula, you will find that resultant of each increase In a number poked to the HIGH address will be 256 digits higher, and the resultant of each Increase In a number poked to the LOW address will be ONE digit higher.
The actual reason that a 8 bit computer can only STORE a number SMALLER than 256 In ONE memory address is that there are only 16 "address | ines" to the Central Processing Unit (CPU), What Is the MAXIMUM factor of 16? You are correct if you sald "256", "But, you sald that the computer Is limited to the maximum number 255 in one memory address"?? That is correct, because 255 actually represents 256 digits, INCLUDING ZERO, Count on your pinkies, One finger Is 1, but a closed fist Is 0. In computing, zero has as much significance as 1000, Elementary, eh Watson? Now what is the HIGHEST number that can be stored in TWO memory addresses? Find out by POKING 255 to two addresses and using the formula, Never did get to them SYSTEM VARIABLES, did we! We will deal with them In the programming section,
Whither Goest, TS-2068 UP~DATE?
This April issue of UP-DATE marks the third of a four issue year, and a time for a decision for the second year. I am having fun publishing UP-DATE and learning a bit with each issue. But it is a lot of work! I hope that you like what is being done because it has cost me about $160.00 more per issue than gross income. The fun part isn't quite worth the $53.00 per month loss which could be buying a new Z88. So, I'll have to quit (nasty word) or increase the price of UP-DATE subscription to about $15.00 per year to break even. I thought about cutting the page count to about 16 pages,
but T dont like little newsletter size publications. Do you? I had much rather INCREASE page count than to decrease the content. By the way, I just subscribed to Quantum Levels, a smaller magazine witha
higher subscription cost. It will be worth it.
So, UP-DATE will continue with a increase in subscription price to $15.00. I hope that you dont begrudge me a break even. I'll try to add enough improvements to make up for the extra three bucks. UP=DATE will concentrate upon broadening the coverage of these topics: Public domain software- I have begun to assemble a library of PD programs and will cull out the dogs and publish only the programs that have been checked out, with edited changes for disk syntax (lotsa work!). We need to have more information about ROM ROUTINES that can be "called from BASIC". ROM BUGS in the bank switching functions must be explored. Telecomputing needs further detail. I am looking for a program to use “between persons" so that you can call someone else and the two of you begin exchange of data and programs without having to go through a BBS.
Other topics to explore are: Building projects. Right now we need a BUSS extension that has a 5V power supply to power external devices, Many of us are loading down the 5V
supply with too many add-ons. Other building projects are needed. broad subject that has not been the subject of much writing. How about the idea of using your old TS~1000's as slave devices to do processing while you are doing something else with the TS-2068? More information needs to be published about how to program EPROMS to use in Dock Bank cartridges. And, of course, we must continue to cover all of our disk systems and bring on more DISK software. Patching up old cassette programs is like bear hunting with a BB gun. UP-DATE invites writers to assist in these areas,
QL Support
An analysis of TS-2068 users reveal that about 1/4 already own a Sinclair QL, and more will purchase the OL if the supply lasts. UP-DATE will not dilute the support of TS-2068 users at all, but will begin to cover the OL in the October 88 issue. Actually more than 1/4 of the subscribers have both TS-2068 and OL computers and are using the more familiar
TS-2068 as their primary system as their QL learning curve progresses and as they build up their QL systems. Coverage of the QL will be
secondary and may either stay that way or inerease as the subscriber base demands. While no date is set, sometime in the future UP-DATE will look at the numbers and perhaps begin covering the Sinclair 288. If the 288 is as
4
| i | i
Then "interfacing" is a -
; will be interested in such articles.
“the
Editorial
April 1988 hot as I think it may be, and the price comes down under $400.00, many of us will be getting
one and will want publication support.
Even before starting UP-DATE I was always interested in reading about the Spectrum and the QL, though I did not own either. Now I want to know more about the 788 and how it is accepted. I believe that most UP-DATE readers Who knows when the Zapper will get your TS-2068 and force you to change? We wont quit (nasty word) then, will we? Anticipating such time your scribe bought a QL at the Orlando Fest. My wife
thinks I'm crazy, and with good reason as I have 4 TS-1000's, 3 TS-2068's, a TS-1500, a C=128 (ugh), and an old Heath. Maybe it's my
background from an oid manufacturing family
that made machine screws for over a century. There were always too many loose screws and a few nuts in the family. Just imagine someone
trying to settle the estate of a machine screw
and orphan computer collector! Speaking of the QL,
Parkwood Drive &, Orange Park,
Bill Fisher, 419 FL 32073 is
about to start a new QL publication called "QL USA". So, UP-DATE's coverage of the QL will be laid back, serious stuff and tips for
programming from our experienced QL users. Programs for the QL on disk will be offered from time to time (Issue Disks), which brings up a point. TS-2068 issue disks have been selling pretty good, but to the same group. It seems that once a person buys one he is hooked and wants the next disk. Each disk contains at least one long program and several utilities. Normally the one long program would sell for about $19.95. For $16.00 the issue disk is a bargain. AND, if anyone isn't satisfied-- money back! "Mail Merge” (Oct Issue Disk) is the best program of it's type that I've used. "DOSDEX" (Jan issue) is even better.
FD-68 and LARKEN SUPPORT
I apoligize to the FD-68 and Larken Disk
users for being broken down in support. My TS-2068 + FD-68 + LKDOS Cartridge, ALL zapped together! Dan Elliott fixed the 68, but the
other peices took a slow boat to China and haven't been returned. I WILL get back into FD-68 and Larken disk support even if I have to buy mew controllers. Now WHY did all of that break at the same time? Dan Elliott said that
the voltage reg fried, placing 6+ volts throghout the Vcc line. Several memory chips fried. This makes me believe that there was
too much tagged on to the external bus. In addition, I had the Parallel printer intfc, and ZSI/O RS-232 interface on there. From now on I will try to keep only the essential items on the rear deck port. Dan's address is: Dan Elliott, RT-1, Box 117, Cabool, MO 65689. $15.00 plus parts for TS-2068.
Help me Format this Magazine!
Now it is YOUR decision time. Iam fiddling with the print format of UP-DATE to try to find a more readable arrangement.
Please compare the first type font and size with this page. The older presentation was 15 point type font with compressed spacing between
_ characters, 52 characters per line and 56 lines
per page. A page provided 5824 characters. This format is about 16 point type, 47 characters per line, 78 lines per page, with normal spacing between characters and between
lines, but with smaller type. This combination
produces 7332 characters per page, 1508 more than the other format, or a 26% increase in page data. I'll mix up the format of this
issue to let you decide between the styles.
I just got my glasses up-dated and I like this style better because the characters in the words are better spaced. But some of you may be straining to focus in the smaller print. If UP-DATE is printed in this style, 30 pages will contain about the amount of data in 38 pages of the other style. If we go to this style, listings will be in larger print and 32 chr lines. The way this new style is achieved is; I use 10 pt Pica on a legal size page and then reduce it to 76% for the masters. What I'm trying to do is to increase the content of UP-DATE and stay within 30 pages, and improve
readability at the same time. You are invited to drop’ Up-Date a card and give your preference, Elaborate if you wish,or just say
"New Style or OLD Style". Keeping UP with Sir Cleave
Sir Cleave, that intrepreneur designer of computers, wrist watch TV's, steam powered aircraft, and hair growing lotion, recently spent five hours in a hospital in Spain where he personally directed the world's first implant of supplementary memory into a human brain, his own. He directed the precise operation while viewing the area of surgery via prisms and mirrors. 256 gbts (giga bytes) of non volatile protein memory cells were implanted along with a enzyme that he invented for bonding artificial protein cells to the natural cells of the brain. Departing from his normal habits, Sir Cleave's new system does not require additions to its I/O port to operate. Upon emerging from surgery, Sir Cleave struck up a conversation in Cantonese with a visiting intern from China.
Later Sir Cleave said World's languages and pre-programmed before implant. But he admitted to having tongue flutter when practicing changing from the dialect of the New Guinea natives to that of one Eskimo tribe of northern Manitoba. He said that this particular Eskimo dialect, to be spoken correctly, requires the speaker to be on the verge of shivvering, and the tempertures in Spain is not that cold, Never the less, it appears that periphreal devices will be needed after all to correct some ROM bugs already found. The trouble is, Sir Cleave has locked himself into a strange situation (for him). He cannot easily abandon this project. (April Fool!)
that all of the dialects were
TS-2068 Publication Support
There are some excellent small publications that are worthy of a look. Send $2.00 to any of these to get a sample issue. Then you can decide whether or not to subscribe. QZX Magazine is oriented toward Amateur radio operators who use Sinclair
computers (2025 O'Donnell Drive, Las Cruces, NM 88001). CATS Newsletter, published by the CATS group, is a good club newsletter (PO Box 467, Fairfax Station, VA 22039). QL USA is a new QL Newsletter (419 Parkwood Dr. E., Orange Park, FL 32073). D-FW Data Expansion is a good newsletter published by the Dallas / Fort Worth user group (4424 Geddes Ave, Fort Worth, TX 76107). 2X Appeal, a newsletter published by
the Vancouver Club (2006 Highview Place, Port Moody, BC, Canada V3H 1N5). SINCUS NEWS, published by the New York
group (1229 Rhodes Rd., Johnson City, NY 13790). DATSN is a newsletter published by the Detroit user group (PO Box 614, Warren MI 48090). The Plotter, is published by the
CCAT/S group in Oregon (1419 1/2 Street, Oregon City, OR 97045). TIMELINEZ, by the San Francisco area group (6615 Clifford Drive, Cupertino, CA 95014). SMUG BYTES is by the Milwaukee group (SMUG, PO Box 101, Butler, WI 53004). LISTing is the Long Island New York group newsletter (5 Peri Lane, Valley Stream, NY 11581). FDD Newsletter, 43307 Chambers Road, Horseheads, NY 14845, is Aerco FD-68 and CP/M orientatd, by Ron Havlen. SINC LINK is a good newsletter by the Ontario User Group, PO Box 7274, Stn. A, Toronto, Canada M5W 1X9.
TS-2068 Cottage Software Support
Faircware, Jack Dohany, 390 Rutherford
Redwood City, CA 94061. Jack isa subscriber. Jack's cottage software business, has a catalog of various useful software titles. To get the catalog send $1.00 to Jack. Now WAIT! Should a catalog be free? It costs to answer correspondance and send free stuffin
Aves,
and our suppliers are operating on a low budget. You'll save the buck on your first order. Other software suppliers are: Chia- Chi Chao, 73 Sullivan Drive, Morago, CA 94556:
RNG Enterpizes, 1419 1/2 7th St., Oregon City, OR 97045: S & K Enterprizes, 2107 SE 155th, Portland, OR 97223.
Some larger Cottage industries supporting the TS-2068 are: Lempke Software 2144 White Oak, Wichita, KS 67207: BYTE POWER, 1748 Meadowview Ave, Pickering, Ontario LI1V 3G8: John Mathewson, 1852 Appleford St., Gloucester, Ontario K1J-6T8. One last mention for this issues Grey & Clifford, PO Box 2186, Inglewood, CA 90305 kinda specializes in Telecom hardware and software. I killed my wallet with them, buying a Modem, Specterm 64, ZSI/O, and I'm just now getting well. UP-DATE endorses all of these suppliers as honest
dealers who stand behind everything they sell. All of the larger dealers will keep you on their mailing list if you order something each
year. But you will be glad if you try the smaller ones also,
I had an interesting talk at the Fest with Bill Pederson, the engineer who designed the
electronics flight control system for the F4 Phantom aircraft. Bill probably has the most knowledge of any person about the SYSCON
Managemnt area of the TS-2068, which is the Memory Bank Switching routines. I have invited Bill to do a complete series of articles for UP=DATE about using extra memory, and to include some building projects. One of his prototype boards contains the extra 5V power
supply (mentioned earlier) to power external devices. And he has external devices! How about 20 megabytes of extra RAM, anda re-designed control system for the extra memory! I'd settle for less, but better management without ROM bugs. See you in the pages.
BUDGET BY: Bob Mitchel!, Willodale, Ontarlo Provided to TS-2068 UP-DATE Magazine (Revision dated 880229)
Editor's Note: Bob Mitchell is retired from two professions, a career in the Canadian Armed Forces, and a subsequent career in Geodetic Survey, Presently Bob lives In beautiful Ontario Canada and "Snow Birds It" to Florida during the Winter months. Bob has worked on and purifled this major software over a perlod of about six years, and now gives us this outstanding software which represents countless hundreds of hours of work, It Isa masterpiece.
| never anticipated publishing such a long key In project in the pages of UP-DATE, and | would not except for these strong factors: 1, Though many, the program lines are short and easy to key In, 2, "Budget" rates a 10 in the category of usefulness. 3, Budget rates another 10 for educational value In two areas: a, Basic Programming techniques. b. It Is a excellent tool for learning to compile basic programs. Finally, 4, Budget Is easily used with all disk drives systems, as well as cassette. The program itself has great possibilities for re-dedication to other applications besides Its purpose as a Budget software, The spreadsheat data Is presented in excellent format and the subject categorles can be changed to track other topic areas, This BUDGET software Is a real barn burner worth the hours It will take to key In the progam lines. And there are great follow-on things to come.
Because the program IIsting Is long, UP-DATE provides a short appendix at the end of the text to help with the key-in project. Take your time and do the key In over a time perlod of at least a week, saving the partially completed program often. It will be fun and relaxing that way. While keying In, ponder the program syntax and try using direct commands to see what the syntax actually does, UP-DATE wil! take questions and publish explanations in the issues to come, \f the key In seems tedious, just remeber, Bob has worked on this sofware off and on for six years, and we get it all Ina neatly packaged gift. Now I'll turn you over to Bob to get you golng.
Programming April 1988
BUDGET: Purpose and Scope
This BUDGET program Is in three parts. First the long program in BASIC Is given. When the listing Its keyed In the program will work right away by RUN, BUDGET is really a Spread Sheet software that has the purpose of planning a annual household budget and then tracking the expenditures, providing various comparisons, and displaying or printing the data. The information products may be printed out with the TS-2040 printer. Follow on parts of the program will be given to allow print out of the data products with Centronics printers.
The second part of the BUDGET program, to be given In the July Issue of UP-DATE, Is a customized Disk Drive "Loader/Manager", This loader program is not essential for operating the Basic program given in this Issue and thus will be given in a follow on article, The loader program customizes the Complled Basic program to operate with disk drive, There will be versions for Oliger Disk, Larken Disk, and syntax changes for Aerco FD-68, RAMEX, and TOS Disk. One more program addition will be given to provide the spreadsheet print out with wide carrlage printers. The Basic program given In this Issue prints a 32 column product with the TS-2040 printer and with Oliger disk via the LET/p=o feature.
This Issue deals with the maln software titled: "budget.8J", which Is programmed entirely In BASIC. But, there Is a unique feature. The program 1s set up for COMPILING into Machine code by use of the Comp! ler program "Timechi ne", So, you will see the strange syntax "REM !" Installed Just after the line number of some program lines, This Is the syntax needed by Timechine for transforming the Basic Program Into a Compiled Machine Code program, If you've never done this, dont worry about it because the programwill run without complling It, Just slower, Then after you have the program running will be the time to begin the adventure of Compl ling the Basic Program. So, go ahead and type In the long listing. Save the program often to either Cassette or disk. When finished, then pick up the operational procedures given next.
15
PROGRAM OPERATIONS
When the BUDGET menu appears In a sort of pull-down menu
1, Type RUN to begin operations.
format, follow the instructions on the screen and SET DATE (In International format: YYMMDD) and then SET BUDGET YEAR (just YY).
2. Try entering some amounts into the program, Move the cursor to "ENTER PLANNED" and press ENTER, Follow the prompts on the screen
and enter some dummy planned data (1e, how much you plan to spend during the 12 months for each of 18 categories. When you complete this dummy run of the annual budget, it will be time to see the results in various formats,
3. In sequence, press: DISPLAY SUB MENU > PLANNED > JANUARY, = (In. this. tutorial, sequential key presses are separated by a ">",) Prompts at the bottom of the PLANNED BUDGET FOR
JAN-APR gives three choices: a. Continue with Display Mode, b. GO TO the Main Menu,
ce Copy the Spreadsheet to the 2040 printer. If your printer is not on the program will detect this and tell you to turn it on, then the COPY routine will work.
4, Try a few commands then go to the Main
If there is an error, such as "number too (you wont see this report in the compl led program); you will be back in the loader. (Note: Since we do not yet have the LOADER
program, type GOTO i470 when any stoppage occurs).
Menu. big"
Main Program Features
5, Let's go over some of the main features of this program, First, the line of BASIC that you will want to customize is 590, Edit this IIne down to the bottom of the screen and change it manually according to the folowing criterla.
6 There are 18 categories and you should set the names carefully to meet your needs over several years. (There Is space for up to 10 letters in each of the category names.) If you change the category names from year to year, you will find it difficult If not impossible to make meantngful comparisons for budget planning.
1 Try expenditures. dealing with foreign currency. proper rate. Enter "I" for Press JANUARY > GROCERIES and appears to allow you to enter all of your bills. You can concatenate several entries In each category by entering them at the same time (eg, 134.35 + 27,09 + 48,76), Press "Y" for more
entering some "actuals", ie, Set the exchange rate If you are Just enter the local currency. a "worksheet"
entries until you have all of your bills for JANUARY entered and then press "NM, The totaling then takes place and is slow in
compartson with the comp! led version.
8. Now Inspect what you have done via the DISPLAY MENU, Notice that all data are right justified and all are rounded to the nearest whole number, no room for pennies! (The right Justification routine slows the BASIC version down and is one reason for providing the set up for compilings). | Your data will be stored In decimal (Floating Point) notation even though It is rounded to the nearest whole number for screen display and for printing with the TS-2040 printer. Storage in floating polnt is essential so that the calculations performed by the program will produce accurate results, totals, etc. Rounded whole numbers are acceptable for budget display, planning, and tracking.
9. The ADD-ON programs will be given In the UP-DATE, One additlon will retrieve the real values and print themon a wide printer In full decimal format. Another wIl! be the Loader which Is the Disk Manager. II} also provide a more detailed explanation of the BASIC program with emphasis on the parts with useful sub routines. Also there will be a HELP routine which you can put on disk and call up from an expanded loader: this "HELP" wIil give suggestions on allocating different types of expenditures to the 18 categories.
July Issue of
10. Try COMPOSITE for January Actuals. You get a YEAR-TO-DATE (YTD) comparison with planned Year-End Totals. The
will variances and
varlances show the differences between the corresponding planned and actual values, If you have spent more than your budgeted amount, the varlances will be negative values, and these will be shown In flashing figures (in RED on a colour screen).
11, Take @ look at CATEGORIES, Then try GRAPHS > BAR GRAPH > ACTUALS > JANUARY >. Try the table option and you will get a YTD percent table showing the percentage for each category against the total. The percentage total will seldom add up to exactly 100% (due to rounding).
12. Get back to GRAPHICS via the MENU and try the ple chart, Sometimes, depending upon how close the ple segments are, the category codes (A-R) will overwrite one another on the ple chart, | left this that way so that | could keep the ple chart as large as possible. Another view of the data is shown when you call for BAR charts.
13, Now BREAK and make a direct SAVE of the BASIC program to Disk or Cassette, SAVE with a The program, when re-loaded will present the malin menu and the previously constructed data will be Intact for either review or for entry of new data to continue planning and tracking of the annual budget.
Coming Additional Features of BUDGET
Next issue will bring the ancillary programs previously mentioned, plus the procedure for COMPILING the Basic program using the TIMECHINE | Comp! ler program, This application of Timechine represents a case of putting the compller through Its paces. If you dont yet have’ «the ~"Up-Dated version of TIMECHINE, It Is aval lable from several sources Inctuding: NOVELSOFT, 106 Seventh St., Toronto, Ontario, Canada M8V 384 ($19.95 US plus $3.00 S&H).. Be sure to specify "The AMENDED VERSION that handles D and E routines", This excellent comptler allows you to compile almost any slower Basic program Into complied machine code to greatly Improve operating speed.
Editors Note: To get the advantage of having a faster operating program that has been compiled with Timechine, you have two options: 1. Buy the TimechIne software and use it to compile this program, This is the "educational way", 2, The April UP-DATE Issue Disk wit! contain ALL programs mentioned (The BASIC un-compl led program, plus the compiled program, plus the additions, “Loader and Centronics Printer annex't, See the yellow pages for
orderings
Bob Mitchell, Willodale, Ontario
UP-DATE Appendix to BUDGET
There are several program lines that start with < REM |! >, This Is the syntax for the Timechine Compiler program which does not interfere when you run the program in its BASIC form, 09 enter these codes whether you Intend to compile the program or not. This Is so that the TYPE IN CHECK POINTS given next will be correct. To enter the REM ! syntax, “tIrst omit the REM I" and type the rest of the line of programming. Then back up the cursor to the line number and type REM 1.
KEY IN Accuracy Check
Accuracy check points are given as follows: After keyIng In the IInes given In the left column, type CLEAR, then PRINT FREE, If your typing Is correct the figure in the right column will be presented on screen. If the screen figure and the number given In the column do not match, then there are type in errors,
LINE FREE LINE FREE LINE FREE LINE FREE 100-38385 1500-33346 2900-29260 4300-2560! 200-38163 1600-32926 3000-29081 4400-25305 300-37896 1700-32621 3100-28820 4500-25025 400-37601 1800-32353 3200-28612 4600-24434 500-37328 1900-32145 3300-28415 4700-24150 600-36641 2000-31840 3400-38086 4800-23616 70035988 2100-31620 3500-27836 4900-23152 800-35362 2200-31316 3600-27460 5000-22820 900~34823 2300-31133 3700-27264 += 5100-22327
1000-34580 2400-30672 3800-27039 5200-21854
1100-34622 2500-30369 3900-26723 5300-21343
1200-34041 2600-30 124 4000-26322 5400-21143
1300-33821 2700-29793 4100-26051
1400-33625 2800-29574 4200-25773
Last | Ine~5420=21093
17,
“budget.BJ" Bob Mitchel!
10 REM **Change DATA Iine 590 --Category Names~- to sult your own needs** 20 30 REM !USR 32000 40 REM LINT +9,cf,cf2,gf,sf,d, n,l,lo,p,cr,c,st,x1,y1,r1,at.ge, JsPerpy,Pxyk,0,0,01,1) 50 REM ! LIST 60 REM | LPRINT 70 REM !LEN $<=15 80 REM | OPEN # 90 DIM c$(32) 100 GO TO 420 110 IF s$(1)="." THEN LET s$="0 "ts $ 120 FOR j=1 TO LEN s$ 130 IF s$(j)="." THEN GO TO 160 140 NEXT Jj 150 LET s$=s$+"," 160 IF s$(LEN s$-1)=",." OR s$(L EN s$)="," THEN LET s$=s$+"0" 170 IF s$(LEN s$-1)="," THEN LE T s$=s$+"0" 180 RETURN 190 STOP 200 LET o=1: LET of=0 210 PLOT px*8-o, 176-((py+1)*8) 220 DRAW 0,-pe%8-o 230 DRAW pw*8to*2,0 240 DRAW 0, pe*8+o*2 250 DRAW =pw*8-0%2,0 260 DRAW 0,-o 270 |F o1 THEN RETURN 280 LET o=3: LET ol=1: GO TO 21
290 STOP 300 READ pe,py,px,k
310 LET pw=0: FOR I=1 TO pe: RE AD eS: LET @=LEN e$: IF pw<e THE N LET pw=LEN ef
320 PRINT AT py+l,px;e$: NEXT i 330 PRINT AT py+1,px; PAPER 2; OVER 1;c$( TO pw)
340 PRINT AT k,px; OVER 1; PAPE R 4; INK 7;c$¢ TO pw)
350 GO SUB 200
360 LET k$=INKEY$
370 IF k$=CHR$ 10 THEN GO SUB 6 50
380 IF k$=CHR$ 11 THEN GO SUB 7 00
390 IF KS=CHR§ 13 THEN RETURN 400 PAUSE 30: GO TO 360
410 STOP
420 DIM y(18, 12): DIM a( 18,12): DIM +(18, 12): DIM m(18,12): DIM e(18,12): DIM u( 18,12)
430 LET exch=1: LET sf=0
440 DIM m$(12,3)
450 DIM b$(18, 10)
460 DIM +$(3,11)
470 LET +$(1)="PLANNED"
480 LET +$(2)="ACTUALS"
490 LET +$(3)="COMPOS ITE"
500 LET n$="BUDGET"
510 LET x$="": LET y$=" " 520 LET +3=0
530 LET m$(1)="JAN": LET m$(2)= "FEBM: LET m$(3)="MAR": LET m$(4 )S"APRI
540 LET m$(5)="MAY": LET m$(6)= JUN": LET m$(7)="JUL": LET m$(8 )="aue"
550 LET m$(9)="SEP": LET m$(10) SMOCTH: LET m$(11)="NOV": LET m$ (12)="DEC"
560 RESTORE 590: FOR 1=1 TO 18: READ o$: LET b$(1)=o0$: NEXT I
570 GO TO 1470 580 DATA INT 20,0,7,3,"CATEGOR! esujn
590 DATA "CAPITAL", "CLOTHING", " DENTAL" , "ELECTRIC", "GAS" , "GIFTS" » "GROCERIES" MHOUS ING", INSURANC: EM, "LEISURE", "LIQUOR", "MEDICAL", "MISC, "", "PERSONAL" ,"PHONE" , "PROP = TAXES", "TRANSPORT" , "VACAT 1 ON
600 RETURN
610 DATA INT 14,3,9,6,"MONTHS", tt JANUARY" , UF EBRUARY" , "MARCHE SMAPRILM "MAY" , MJUNEM, MJULY , MAU GUST" , "SEPTEMBER" , "OCTOBER", "NOV EMBER”, "DECEMBER"
620 RETURN
630 DATA INT 8,5,7,8,"BUDSET MA IN MENU", " ", "ENTER ACTUALS", "EN TER PLANNED","SET DATE", "DISPLAY
SUB-MENU" ,"SET BUDGET YEAR", "QU ite
640 STOP
650 LET k=k+1: IF k<=pytpe THEN
PRINT AT k,px; PAPER 4; INK 75 OVER 1;c$( TO pw)
660 PRINT AT k-1,px; PAPER 0; | NK 7; OVER 13c$¢ TO pw)
670 IF k=py+pe+1 THEN LET k1=k:
LET k=py#3: PRINT AT k1,px3 PAP ER 0; INK 7; OVER 1;c$( TO pw)
680>PRINT AT k,px; OVER 1; PAPE R43 INK 7;c$( TO pw)
690 RETURN
700 LET k=k-1: IF k>=py+3 THEN PRINT AT k,px; PAPER 4; INK 7; 0 VER 1;c$( TO pw)
710 PRINT AT k+1,px; PAPER 0; | NK 7; OVER 1;c$( TO pw)
720 (F k=py+2 THEN LET ki=k: LE T k=pytpe: PRINT AT k1,px; PAPER 0; INK 7; OVER 1;c$( TO pw)
730 PRINT AT k,px; OVER 1; PAPE R 4; INK 7;c$( TO pw)
740 RETURN
750 FOR 1=1 TO 12: LET s=0: FOR d=1 TO 18: LET s=sta(d,!): LET m(d,|)=s: NEXT dz: NEXT 1: RETURN
760 FOR d=1 TO 18: LET s=0: FOR t=1 TO 12: LET s=sta(d,1): LET t(d,l)=s: NEXT I: NEXT d: RETURN
770 LET s=0: FOR |=1 TO 12: LET s=sta(d,1): LET m(d,1)=s: NEXT 1: RETURN
780 LET s=0: FOR i=1 TO 12: LET s=sta(d,l): LET t(d,l)=s: NEXT 1
790 LET s=0: FOR |=1 TO 18: LET s=stt(1,12): LET sf=s: NEXT I: RETURN
800 FOR I=1 TO 12: LET s=0: FOR d=1 TO 18: LET s=ste(d,1 y(d,l)=s: NEXT dz NEXT |: RETURN
810 LET FOR 1=1 TO 12: LET sste(d,1): LET y(d,})=s: NEXT I: RETURN
820 LET s=0: FOR [=1 TO 12: LET
s=ste(d,1): LET u(d,1)=s: NEXT tz RETURN
830 FOR d=1 TO 18: LET s=0: FOR 1=1 TO 12: LET s=s+e(d,1): LET wud, 1)=s: NEXT I: NEXT d: RETURN
840 LET s=0: FOR 1=1 TO n: LET
s=stm(18,1): LET sb=s: NEXT 1: L ET s$=STR$ sb: RETURN
850 LET s=0: FOR I=1 TO nz LET
s=s+y(18,1): LET sa=s: NEXT ts L ET s$=STR$ sa: RETURN
860 LET s=0: FOR |=1 TO n: LET
s*sty(18,1): LET sa2=s: NEXT I:
RETURN
870 LET s=0: FOR I=1 TO nz: LET
s=stm( 18,1): LET sa3=s: NEXT I:
880 GO TO 1470
890 RETURN
900 DIM k(18): FOR f=1 TO 18: L ET KCH)=tC1,m)/t3: NEXT 1: RETUR N
910 DIM k(18): FOR i=1 TO 18: L ET k(1)=u(h,n)/t3; NEXT 1: RETUR
920 LET s$=STR$ ss: RETURN
950 LET s$=STR$ sss: RETURN
940 LET s$=STR$ pe: RETURN
950 IF gf THEN RETURN
960 LET cr=cr+1
6 THEN GO SUB 1300 THEN GO SUB 1140 THEN GO SUB 1160 1000 IF st=4 THEN GO SUB 1180 1010 IF st=6 THEN GO SUB 1200 1020 IF st=8 THEN GO SUB 1220 1030 IF st=10 THEN GO SUB 1240 1040 IF st=12 THEN GO SUB 1260 1050 IF st=14 THEN GO SUB 1280 1060 IF ss<O THEN PRINT TAB (o-L EN s$+1); FLASH 1; PAPER 2;s$; 1070 IF ss>=0 THEN PRINT TAB (c= LEN s$+1);5$;
1080 IF lo THEN RETURN
1090 LET c=ct5
1100 IF st=4 OR st=10 OR st=12 0 R st=14 THEN RETURN
1110 LET n=n+1
1120 IF cr=4 THEN LET n=p: RETUR N
1130 GO TO 950
1140 LET ss=INT (a(d,n)+.5)
1150 GO SUB 920: RETURN
1160 LET ss=INT (m(18,n)+.5) 1170 GO SUB 920: RETURN
1180 LET ss=INT (+(d,n)+.5)
1190 GO SUB 920: RETURN
1200 LET ss=INT (e(d,n)+.5)
1210 GO SUB 920: RETURN
1220 LET ss=INT (y(18,n)+.5) 1230 GO SUB 920: RETURN
1240 LET ss=INT (u(d,n)+.5)
1250 GO SUB 920: RETURN
1260 LET ss=INT (t(d,n)-u(d,n)t. 5)
1270 GO SUB 920: RETURN
1280 LET ss=INT (t(d,12)+.5) 1290 GO SUB 920: RETURN
1300 RETURN
1310 GO TO 1470
1320 LET cf2=1
1330 RESTORE 580
1340 GO SUB 300
1350 GO SUB 580
1360 LET d=k-2
1370 CLS : GO SUB 300
1380 GO SUB 610
1390 LET n=k-5
1400 INPUT ("enter value for ";B
$(D) "For ";m$(n)) ,a(d,n)
1410 INPUT "another change ? y/n ™; LINE q$
1420 IF q$<>"Y" AND q$<>"N" THEN GO TO 1410
1430 IF q$="Y" THEN GO SUB 1770:
GO TO 1320
1440 IF q$="N" THEN GO SUB 1770: GO SUB 1850: GO TO 1470
1450 STOP
1460 REM ! OPEN #
1470 CLS
1480 BORDER 0: PAPER 0: INK 7: B
RIGHT 0: CLS
1490 POKE 23658,8
1500 LET cf=0: LET cf2=0: LET gf
=0
1510 PRINT AT 2,0; INVERSE 1; IN
K 2; PAPER 7;"DATE: ";x$;" BUD
GET YEAR: 19";Y$(2 TO 3)
1520 PRINT AT 16,0; INVERSE 1; |
NK 3; PAPER 7;"USE PULL DOWN MEN
US AS FOLLOWS: MOVE BAR CURSOR U
P AND DOWN USING CS 6/7 KEYS THEN [ENTER]. " 1530 LET pw=0
1540 RESTORE 630 1550 GO SUB 300
1560 LET k=k-7
1570 IF k=4 THEN GO TO 1920
1580 IF k=2 THEN GO TO 1640
1590 IF k=1 THEN GO TO 5370
1600 IF k=3 THEN GO TO 3630
1610 IF k=6 THEN STOP
1620 IF k=5 THEN GO TO 1880
1630 IF k=0 THEN GO TO 1470
1640 CLS
1650 RESTORE 1660
1660 DATA INT 4,16,6,19,"PLANNED DATA ENTRY", ","Whole year", "C hange one entry"
1670 GO SUB 300
1680 LET k=k-18
1690 IF k=1 THEN CLS : GO 10 171 to}
1700 IF k=2 THEN CLS : GO TO 132 0
1710 FOR d=1 TO 18
1720 FOR n=1 TO 12
1730 PRINT AT 20,0;"ENTER ";b$(d ),"Planned Budget FOR "ym$(n)
10
1740 INPUT a(d,n) 1750 CLS
1760 NEXT n
1770 PRINT FLASH 1; "Totaling 1780 GO SUB 770: GO SUB 780 1790 PRINT AT 20,0;b$(d)'+$(1) 5" for ;y$5" Is "sM2$m;t(d, 12) 1800 IF cf2 THEN PAUSE 100: CLS + RETURN
1810 PAUSE 100
1820 CLS
1830 IF d=19 THEN GO TO 1710 1840 NEXT d
1850 PRINT FLASH 1;"Grand Totall ng": GO SUB 750: GO SUB 790
1860 IF cf2 THEN PAUSE 100: CLS + RETURN
1870 GO TO 1470
1880 CLS
1890 INPUT "ENTER Budget Year (Y Y)") LINE y$
1900 LET yS=" "+y$em
1910 GO TO 1470
1920 CLS
1930 BORDER 0: PAPER O: BRIGHT 0 : INK 7: CLS
1940 LET cf=0
1950 RESTORE 1970
1960 GO SUB 300
1970 DATA INT 8,5,7,8,"DI SPLAY M ENU',” "MAIN MENU", "PLANNED® , 1
ACTUALS" , "COMPOS ITEM, "CATEGORIES
1" "GRAPHS"
1980 LET k=k-7
1990 IF k=1 THEN GO TO 1470
2000 IF k=2 THEN GO TO 2050
2010 IF k=3 THEN GO TO 2740
2020 IF k=6 THEN GO TO 3800
2030 IF k=5 THEN GO TO 3010
2040 IF k=4 THEN GO TO 2410
2050 CLS
2060 PAPER O: BORDER 0: INK 7: C
Ls
2070 RESTORE 610
2080 GO SUB 300
2090 LET n=k-5
2100 IF n>9 THEN LET n=9
2110 LET 1o=0 2120 CLS 2130 LET p=n
2140 PRINT AT 0,0;c$
2150 PRINT AT 0,0; INVERSE 1;y$; 4901); INVERSE 1; TAB 13;m$(n) TA B 18;m$(n+1) ;TAB 23;m$(n+2) ;TAB 28;m$(n+3)
2160 FOR d=1 TO 18
2170 LET or=0
19
2180 PRINT TAB 0; INVERSE 15" "5
2190 PRINT TAB 2;b$(d);
2200 LET c=15
2210 LET st=0
2220 GO SUB 950
2230 IF d=19 THEN GO TO 2160
2240 NEXT d
2250 PRINT AT 19,03;"TOTALS ";
2260 LET er=0
2270 LET st=2
2280 LET c=15
2290 INVERSE 1
2300 GO SUB 950
2310 INVERSE 0
2320 PRINT #1;AT 0,0; PAPER 2;"E
NTER>"; PAPER O;" 1=CONT = 2=ME
NU 3=COPY"
2330 LET k=CODE INKEY$-48
2340 IF k=1 AND NOT cf THEN GO T
0 1920
2350 IF k=1 AND cf=1 THEN GO TO 1470
2360 IF k=1 AND cf=3 THEN GO TO
3400
2370 IF k=2 THEN GO TO 1470
2380 IF k=3 AND IN 251<>126 THEN INPUT #1: PAUSE 30: COPY : GO T
0 2320
2390 IF k=3 AND IN 251=126 THEN
PRINT #1;AT 0,0;"TURN ON PRINTER
; BEEP .2,30: PAUSE 30: GO TO 2
380
2400 GO To 2320
2410 CLS
2420 PAPER 0: BORDER O: INK 7: C Ls
2430 LET 1o=0
2440 RESTORE 610
2450 GO SUB 300
2460 LET n=k-5
2470 CLS
2480 PRINT AT 0,0;m$(n);
2490 PRINT AT 0,13;"PLAN";TAB 18 "ACT" ;TAB 23; "VAR"; TAB 28; "PLAN "
2500 PRINT +$(3);TAB 13;"YTD";TA B 18;"YTD"; TAB 23;" $ ";TAB 28; INVERSE 1; y$
2510 FOR d=1 TO 18
2520 LET or=0
2530 LET c=16
2540 PRINT TAB 0; INVERSE 13" "; 2550 PRINT TAB 2;b$(d);
2560 LET st=4: GO SUB 950: LET s t=10: GO SUB 950: LET st=12: GO SUB 950
2570 LET st=14: GO SUB 950
2580 NEXT d
2590 GO SUB 840
2600 PRINT TAB 0;
2610 LET s$=STR$ INT (sb+.5) 2620 PRINT TAB O;"TOTALS";TAB (1 6-LEN s$+1)35$;
2630 GO SUB 850
2640 LET s$=STR$ INT (sat+,5) 2650 PRINT TAB (21-LEN s$+1); IN VERSE 135$;
2660 LET ss=(sb-sa)
2670 LET ss=INT (ss+.5): GO SUB 920
2680 IF ss>=0 THEN PRINT TAB (26 “LEN s$+1)35$;
2690 IF ss<O THEN PRINT TAB (25- LEN s$+1); FLASH 1; PAPER 2;s$; 2700 LET ss=sf
2710 LET ss=INT (ss+,5): GO SUB 920
2720 PRINT TAB (31-LEN s$+1); IN VERSE 1;s$
2730 GO TO 2320
2740 CLS
2750 PAPER O: BORDER 0: INK 7: C us
2760 LET lo=0
2770 RESTORE 610
2780 GO SUB 300
2790 LET n=k-5
2800 IF n>9 THEN LET n=9
2810 CLS
2820 LET p=n
2830 PRINT AT 0,0;c$;AT 0,0; INY ERSE 1;y$;t$(2); INVERSE 1;TAB 1 3ym$(n) TAB 18:m$(n+1) sTAB 23;m$ (n+2);TAB 28;m$(n+3)
2840 FOR d=1 TO 18
2850 LET or=0
2860 PRINT TAB 0; INVERSE 1; "; 2870 PRINT TAB 2;b$(d);
2880 LET st=6
2890 LET c=15
2900 GO SUB 950
2910 IF d=19 THEN GO TO 2840 2920 NEXT d
2930 PRINT AT 19,0;"TOTALS "; 2940 LET cr=0
2950 LET c=15
2960 LET st=8
2970 INVERSE 1
2980 GO SUB 950
2990 INVERSE 0
ll
3000 GO TO 2320
3010 BORDER O: PAPER O: INK 7: C Ls
3020 LET st=16
3030 RESTORE 580
3040 GO SUB 300
3050 LET d=k-2
3060 LET cr=1
3070 CLS
3080 PRINT "CATEGORY DATA"; INVE RSE 1;y$; INVERSE 0,,,
3090 PRINT INVERSE 1;b$(d);TAB 1 2;"PLAN";TAB 17;"ACT" ;TAB 22; "VA RW
3100 FOR m=1 TO 12
3110 PRINT TAB O;m$(m);
3120 LET lo=1
3130 LET s$=STR$ INT (a(d,m)+.5) 3140 LET c=14
3150 GO SUB 950
3160 LET s$=STR$ INT (e(d,m)+.5) 3170 LET c=19
3180 GO SUB 950
3190 LET s$=STR$ INT ((a(d,m)-eC dym))+.5)
3200 LET c=24
3210 GO SUB 950
3220 NEXT m
3230 LET lo=1
3240 PRINT 'TAB 0;"TOTALS";
3250 INVERSE 1
3260 LET s$=STR$ INT (t(d,12)4+.5 )
3270 LET c=14
3280 GO SUB 950
3290 LET s$=STR$ INT (u(d,12)+.5 )
3300 LET c=19
3310 GO SUB 950
3320 LET s$=STR$ INT ((t(d,12)-u (d,12))+.5)
3330 LET c=24
3340 GO SUB 950
3350 INVERSE 0
3360 GO TO 2320
3370 BORDER 0: PAPER 0: INK 7: C us
3380 PRINT AT 18,0; PAPER 2;" Cu rrency conversion factor "? PAPE RO;"'1! for local."'"Exchange R ate for other."
3390 INPUT "(ENTER conversion fa ctor ]",exch
3400 LET cf=3
20
3410 BORDER 2: PAPER 0: INK 7: C us
3420 RESTORE 610
3430 GO SUB 300
3440 LET n=k-5
3450 RESTORE 580
3460 CLS : GO SUB 300
3470 LET d=k-2
3480 LET ss=INT (e(d,n)¥100)/100 3490 CLS : PRINT AT 3, 1;b$(d) 5"
for ";m$(n);" = "355 3500 INPUT "ENTER new expense. "! exp
3510 LET exp=exp*exch 3520 LET ss=INT (exp*100)/100 3530 PRINT AT 5,1;"New expense= "385
3540 LET bal=o(d,n)+exp
3550 LET e(d,n)=bal
3560 LET ss=INT (bal*100)/100 3570 PRINT AT 7,1;"Total . "588
3580 PRINT #1;AT 1,0;"More entri es? Y/N"
3590 LET z$=INKEY$: IF z$="" THE N GO TO 3590
3600 IF z$="N" THEN CLS : PRINT AT 10,10; FLASH 1;"Totaling™: GO SUB 800: GO SUB 830: GO TO 1470 3610 1F z$="Y" THEN PAUSE 30: CL S$ : GO TO 3450
3620 GO TO 3580
3630 CLS
3640 INPUT "ENTER Date (YYMMDD)" » LINE x$
3650 GO TO 1470
3660 CLS
3670 PRINT "ENTER Month #1
3680 INPUT n
3690 IF n<1 OR n>12 THEN CLS : G 0 SUB 890: GO TO 3670
3700 CLS
3710 FOR d=1 TO 18
3720 CLS
3730 PRINT AT 6,0;"ENTER ";b$(d) s"Actuals for ";m$(n)'"
3740 INPUT e(d,n)
3750 PRINT e(d,n)
3760 PAUSE 20
3770 NEXT d
3780 CLS : PRINT FLASH 1;"Totall ng": GO SUB 800: GO SUB 830 3790 GO TO 1470
3800 POKE 23658,0
3810 LET x1=64: LET y1=88: LET r 1564
3820>CLS
3830 RESTORE 3860
3840 GO SUB 300
3850 LET gt=k-18
3860 DATA INT 4, 16,6, 19, "GRAPH T YPE MENU", ","PJE CHART", "BAR G RAPH"
3870 RESTORE 3900
3880 CLS : GO SUB 300
3890 LET go=k-18
3900 DATA INT 4, 16,6, 19, "DI SPLAY MENU", "" ", "PLANNED" , "ACTUALS" 3910 RESTORE 610
3920 CLS : GO SUB 300
3940 IF gc=1 THEN GO SUB 870: LE
T t3=sa3: LET g$=1$(1)
3950 IF gc=2 THEN GO SUB 860: LE
T t3=sa2: LET g$=1$(2)
3960 IF gt=! THEN GO TO 3980 3970 \F gt=2 THEN GO TO 4970 3980 POKE 25658,0: BORDER 0: PAP ER O: BRIGHT 0: INK 7: CLS
3990 CIRCLE x1,yi,rt
4000 IF t3=0 THEN PRINT AT 10,5; No data aval lable";AT 12,5;"Pre ss ENTER for menu": PAUSE 0: GO TO 1470
4010 LET ml=r1/8
4020 GO SUB 900: DIM 2(18)
4030 IF gc=1 THEN FOR 1=1 TO 18: LET k(1)=t(i,n)/t3: NEXT
4040 IF gc=2 THEN FOR i=1 TO 18: LET k(1)=u(i,n)/t3: NEXT 1
4050 PLOT xt,y1
4060 DRAW 0,r1
4070 FOR f=1 TO 18
4080 LET z(1)=k(1)*360%,017453 4090 NEXT 1
4100 DIM w(18)
4110 LET w(1)=z(1)
4120 FOR [=2 TO 18
4130 LET w(i)=z(1)4w(1-1)
4140 NEXT i
4150 GO TO 4620
4160 FOR i=1 TO 17
4170 [IF w(1)>=0 AND w(1)<=,5*PI THEN GO TO 4320
4180 1F w(i)<=P! AND w(1)>,5*PI THEN GO TO 4280
4190 1F w(1)>PI AND w(1)<=1, 5*PI THEN GO TO 4240
4200 LET w(1)=2*PI-w(1)
4210 PLOT xi,y1
4220 DRAW ~SIN w(1)*r1,COS w(t )* rl
12
4230>G0 TO 4340 4240 LET w(1)=w(1)-PI 4250 PLOT x1,y1 4260 DRAW -SIN w(1)*r1,-COS w(1) *r1 4270 GO TO 4340 4280 LET w(1)=Pl-w(i) 4290 PLOT xt,y1 4300 DRAW SIN w(1)*r1,=COS w(I)* rt 4310 GO TO 4340 4320 PLOT x1,y1 4330 DRAW SIN w(1)*r1,COS w(1)¥r 1 4340 NEXT 1 4350 LET y2=21-y1/8: LET x2=x1/8 4360 FOR i=1 TO 18 4370 [F gc=1 AND +(1,n)=0 THEN G 0 To 4520 4380 IF gc=2 AND u(i,n)=0 THEN G © To 4520 4390 IF 0(1)>=0 AND o(1)<=,5*PI THEN GO TO 4510 4400 IF 0(1)>.5*PI AND of 1)<=PI THEN GO To 4480 4410 [F o(1)>PI AND of 1)<=1, 5*PI THEN GO TO 4450 4420 LET 0(1)=2*PI-o0(1) 4430 PRINT AT y2=COS (1 )%m1,x2— SIN o(1)*m1;CHRS (i+64) 4440 GO TO 4520 4450 LET o(1)=0(1)-PI 4460 PRINT AT y2+C0S o(1)*m1,x2— SIN of 1)%m1;CHRS (1464) 4470 GO TO 4520 4480 LET 0(1)=PI-o(1) 4490 PRINT AT y2+C0S o(1 )¥m1,x2+ SIN o(1)*m1;CHRS (1464) 4500 GO To 4520 4510 PRINT AT y2-COS o(1)¥m1,x2+ SIN o(1)¥m1;CHRS (1464) 4520 NEXT | 4530 1F gc=1 THEN FOR I=1 TO 18: PRINT AT 141,173; INVERSE 1;CHRS (1464) INVERSE 0;b$(1); 4540 IF gc=1 THEN LET s$=STR$ IN T t(i,n): PRINT TAB (3I-LEN s$#1 )3s$: NEXT I 4550 IF gc=2 THEN FOR i=1 TO 18: PRINT AT 141,17; INVERSE 1;CHRS (1464); INVERSE 0;b$(1 4560 IF gc=2 THEN LET s$=STR$ IN T u(1,n): PRINT TAB (31-LEN s$+1 )3s$: NEXT 7 4570 LET s$=STR$ INT +3: PRINT A T 20,173 INVERSE 1;"Total™; INVE RSE 0;TAB (31-LEN s$+1); INVERSE 138$; INVERSE 0 2 1
4580>PRINT AT 0,17; INVERSE 1;1 YTD ";m$(n) sy$
4590 PRINT AT 1,17; INVERSE 1;c$ («TO 15)
4600 PRINT AT 1,19;g$
4610 GO TO 4680
4620 DIM 0(18)
4630 LET 0(1)=z(1)/2
4640 FOR 1=2 T0 18
4650 LET o( 1 )=z(1)/2tw (1-1)
4660 NEXT I
4670 GO TO 4160
4680 PRINT #1;AT 0,0; PAPER 2;"E
NTER>"; PAPER 0;" [=MENU = 2=TAB LE 3=COPY"
4690 LET z=CODE INKEY$~48
4700 IF z=1 THEN GO TO 1470 4710 IF z=2 AND gc=1 THEN GO SUB 900: GO TO 4760
4720 1F z=2 AND gc=2 THEN GO SUB 910: GO TO 4760
4730 IF z=3 AND IN 251<>126 THEN INPUT #1: PAUSE 30: COPY : GO T
0 4680
4740 IF z=3 AND IN 251=126 THEN PRINT #1;AT 0,0;"TURN PRINTER ON "; BEEP .2,30: PAUSE 30:: GO TO 4730
4750 GO TO 4680
4760 CLS : PRINT AT 0,0; INVERSE Jye$;AT 0,0;y$;t$(go); INVERSE 1;TAB 15;"Amount";TAB 23;"Percen
+"
4770 LET tp=0
4780 FOR 1=1 TO 18
4790 LET po=INT (k(1)*10000)/100
4800 LET ss=INT (+(1,n)*100)/100
4810 LET sss=INT (u(i,n)*100)/10
0)
4820 LET tp=tptpe
4830 IF gco=1 THEN PRINT INVERSE 1;CHR$ (1464); INVERSE O;b$(i);
4840 IF gc=1 THEN LET s$=STR$ ss : GO SUB 110: PRINT TAB (20-LEN
s$t+1) 558;
4850 IF gc=1 THEN LET s$=STR$ pc : GO SUB 110: PRINT TAB (28-LEN s$+1) 353;
4860 IF gc=t THEN PRINT TAB 315" "
4870 IF gc=2 THEN PRINT INVERSE 1;CHRS (1464); INVERSE O;b$(1); 4880 IF gc=2 THEN LET s$=STR$ ss st GO SUB 110: PRINT TAB (20-LEN s$+1);s$;
4890 IF gc=2 THEN LET s$=STR$ pc : GO SUB 110: PRINT TAB (28-LEN s$+1) 583;
49
4900 IF gc=2 THEN PRINT TAB 31;" "
4910 NEXT I
4920 LET st3=INT (+3*100)/100 4930 PRINT INVERSE 1;TAB 0;"Tota Is =>";m$(n);
4940 LET s$=STR$ st3: GO SUB 110 : PRINT INVERSE 1;TAB (20-LEN s$ +1)38$;
4950 LET s$=STR$ tp: PRINT INVER SE 1;TAB (28-LEN s$+1);tp;TAB 32 4960 GO TO 4680
4970 CLS
4980 DIM q(18)
4990 LET gmax=-10000: LET min=10 000
5000 IF gc=1 THEN GO SUB 5310 5010 |F gc=2 THEN GO SUB 5360 5020 LET loc=58
5030 LET sca=0: IF (gmax-mln)<>0 THEN LET sca=(80~12)/(gmax-min) 5040 PRINT AT 21,7;"ABCDEFGHI JKL MNOPQR""
5050 FOR 1=0 TO 8 STEP 4: LET zz =INT (, 54min+( (gmax-min)/8)*(8=1 ))s PRINT AT 1141,5-LEN STR$ zz; zz: NEXT |
5060 FOR 1=8 TO 8+8*10 STEP 4: P LOT 57,1: DRAW 255-112,0: NEXT | 5070 FOR t=1 TO 18
5080 FOR 1=0 TO 4
5090 IF NOT q(1) THEN LET loc=lo ctl: GO TO 5130
5100 PLOT loc,8: DRAW 0,12
5110 LET loc=toc+t
5120 DRAW 0,(q(1)-min)*sca
5130 NEXT |
5140 LET loc=loctS
5150 NEXT I
5160 (F gc=1 THEN FOR I=1 TO 9: PRINT AT 1,0; INVERSE 1;CHRS (i+ 64); INVERSE O;b$(1);
5170 IF go=1 THEN LET s$=STR$ IN T+(i,n): PRINT TAB (14-LEN s$+1 )5s$: NEXT f
5180 IF gc=2 THEN FOR [=1 TO 9: PRINT AT 1,0; INVERSE 1;CHRS (1+ 64); INVERSE 0;b$(1);
5190 IF gc=2 THEN LET s$=STR$ IN Tu(i,n): PRINT TAB (14-LEN s$+1 )38$: NEXT |
5200 IF gc=1 THEN FOR 1=10 TO 18 : PRINT AT 1-9,16; INVERSE 1;CHR $ (1464); INVERSE O;b$(1);
5210 IF gc=1 THEN LET s$=STR$ IN T+t(i,n): PRINT AT 1-9,(30-LEN s $+1) 5885
5220>1F go=1 THEN PRINT AT 1 -9,3 13" "2 NEXT [
5230 IF gc=2 THEN FOR 1=10 TO 18 : PRINT AT 1-9, 16; INVERSE 1;CHR $ (1464); INVERSE 0;b$(1);
5240 IF gc=2 THEN LET s$=STR$ IN T u(t,n): PRINT AT 1-9, (30-LEN 5 $+1) 588;
5250 IF gc=2 THEN PRINT AT 1-9,3 13" "2 NEXT {
5260 PRINT AT 10,0; INVERSE 1;c$ AT 10,9;"Total: ";INT 13
5270 PRINT AT 0,0; INVERSE 15c$
5280 PRINT AT 0,6; INVERSE 15"YT D";m(n);" "sy$;t "5 INVERSE 0; gs
5290 GO TO 4680
5300 RETURN
5310 FOR j=1 TO 18
5320 LET q(j)=t(j.n): IF a(j)>gm ax THEN LET gmax=q(j)
5330 IF q(j)<min THEN LET min=q( Ab)
5340 NEXT J
5350 RETURN
5360 FOR J=1 TO 18
5370 LET q(J)=u(j,n): IF q(j)>gm ax THEN LET gmax=q(j)
5380 IF q(j)<min THEN LET min=q( Jj)
5390 NEXT Jj
5400 RETURN
5410 REM ! CLOSE #
5420 CLEAR : RANDOMIZE USR 100:
SAVE "budget.Bu" LINE 10
22
SDOS AUTO_DEX, MARK_MOVE, AND VE RI_DISK
Bob Hartung, 2416N. Co. Line, Huntertown, IN 46748
In the January issue of SDU I gave the listing for a routine able to store and access from a single disk an index of more file titles than most of us will ever get around to using (no. tracks/disk X no. files/disk). This DOSDEX routine is based on an adapation of the versatile S008 menu-loader created by Roelot Mulder with several Modifications by John Oliger.
The machine code for DOSDEX and other utilities listed below is that used in the menu-loader except that if it is poked into a 39~-byte first-line REM the Sth byte must be an @ instead of the 14 in the original listing which utilizes a fast FOR/NEXT definition. For those who have the menu-loader routine with the code source ina line 10 Q$ definition, after creating a 39-byte line 1 REY the code may be moved from q$ to the REM by using LISTING 1. If starting from scratch the code may be put into a DATA line and READ used for the pokes.
Rather than “let your fingers do the walking" through the pages of DOSDEX, the AUTO-DEX in LISTINGs 2 and 3 (SEARCH and FILE.DEX) provides an automatic search for a given title anong all those saved on a disk as c$ arrays. It provides the option of a full-title search when the search word is padded out to a length of 10 by characters or spaces, or a wild-card search can be made for any set of 1-9 consecutive characters found in a title. If the wild-card search word is to be found at the very beginning of the file title, entering one leading space before the 1-9 character search word will allow a auch faster search to be made as is also done for a full-title search.
‘The main drawback to using a full-title search is that the search-word must be entered exactly as the title you want to find, You could turn your printer on and Key <LET /P=0) to print out a hard copy of the titles as the data disk is nade up--just in case your menory fails. But then that defeats the purpose of an automatic search if you have to eyeball your way all through the printout or else use DOSDEX to find how to enter the title!
Anyway, here’s how it works, if you’re interested. The AUTOLDEX search routine is saved to file 0 by «RUN 9999) and FILEDEX is saved to file 1, also by <RUN 9999). Hf you want a full display of individual files in FILEDEX save mode, start with the listing as given for DOSDEX in the January SDU, and change line 526 to correspond with LISTING 3 which displays only the disk number, format title, and prompts. Lines 600-650 can be omitted in either case, The mod for line 524 is to to save as DATA cé<) the catalog info from each file disk in a numbered sequence.
After these programs have been saved to your AUTOLDEX disk, label your file disks numerically if you have not
14
already done so for DOSDEX and Key <LOAD) with the AUTOLDEX disk in the drive, At the prompt, key (4) to load FILE.DEX. Insert file disk 1 in the drive and Key an upper-case <C) for CAT. Return the AUTOLDEX disk to the drive and Key upper-case (S) to save the directory data, and so on. As for DOSDEX, you could easily adapt the routine to use one drive for the index disk and the second drive to catalog your file disks.
To make an auto-search, Key «LOAD) with the AUTO_DEX disk in place and any Key except (4). At the search-word prompt, if an exact-title search is to be made, make your entry, then add spaces to pad out its length to 10. Tf you hold down the space-bar for an auto-repeat, any extra spaces added to the title will be truncated to the correct Tength. Precede any wild-card set of 1-9 characters with one space if that character set occurs at the very begin~ ning of the targeted file title. If the set occurs else- where in the file title the leading space is omitted. Then enter a null-string <ENTER) if it is a Basic listing, or <token-word) plus <n) or <$> to denote the type of file.
When a match is found with the search-string title, the file number and the formatted title of the required disk is displayed. When that disk is inserted the file may be loaded from it. In a search for a full-title or a leading character-set the drive will seldom stop running from one index file to the next but a random wild-card search will take a little longer. The string-sticing will not allow TINACHINE to compile the wild-card search, but those who are into machine code and want the ultimate in speed could adapt Tom Woods’ Profile search routine to do it.
Roelof has also written another very useful utility he calls Extractor that among other things moves selected files from one disk to another. This method is a auch safer way of recovering unused disk space even when an erase-and-recover routine is available. When one sector is being re-copied to another on the same disk there is always the risk of a glitch corrupting part if not all of the disk data. While not nearly as elegant as Roelot’s Extractor, the MARK-NOVE routine (LISTING 4) adapted from his SD0S menu-loader provides the essentials to format a target disk and nove to it the files selected from a source disk. Keying (SPACE) will mark a file for moving, a zero will unmark it, any other character will advance the cursor, and <ENTER> will commence the moves.
LISTING 5 is yet another adaptation of the SD0S menu- loader which uses the VERIFY function to check the integ- rity of each file on a disk. It might be in order here to discuss some DOS facts of life that, human nature being as it is, probably all of us are aware of but have neglected at times. To be on the safe side--and we’re talking about all magnetic media data storage now--it is recommended practice to use a three-tiered approach. This calls for
23
at least two back-up copies, either disk and disk, or disk and tape, for any files that we don’t want to lose. The original is then used only when an update is added or when both the working and backup files become corrupted or lost. It is also good practice to periodically check these files, especially if loading errors are encountered on any disks done at about the same time or after the backups.
By their very nature, all magnetic recording media (including audio and VCR as well as DOS) begin losing some of their playback signal strength, particularly in the higher frequencies, from the instant any recording is made spon them. This occurs at a diminishing rate somewhat like an inverse logarithmic progression or "half-life" process. As this ‘clipping™ approaches the level expressed in percentage on all labelled name-brand disks, it happens nore slowly but, unfortunately, never quite stops at zero,
Of course, many other factors could cause loss of data. These include possible instantaneous damage by magnetic fields such as a speaker or nearby AC cord, or static voltage potentials such as those on the face of a TV or nonitor CRT or even on your fingertips if you have walked across the room or shuffled your feet on a carpet in low- humidity conditions. Creasing or folding a disk, dropping something upon it or writing on the sleeve with too much pressure, or touching the exposed surface can ruin it. There is also the possibility of dirt on the drive-heads or dust, heat and hunidity hastening a disk’s demise. Tobacco smoke is dangerous to the health of data as it is to the user’s. Because of greater data-density per unit of media area, quad density systems are more sensitive to all these factors than double density systems, particular- ly when the less-costly 00 disks are used with a OD system, which most of us do at times.
As John Oliger noted in the first issue of SDU, S005 users have an advantage over users of some systems because we get an audible warning whenever a disk sector fails to save/verify or load and must be re-tried. However, even with SDOS an infrequently-used file or backup disk might drop below a critical clipping level without our being aware of it, If ever a data failure is encountered on a disk that previously showed no problems, unless you have done so periodically it is time to check all disks formatted at or before the tine when that one was done.
Unless you are turned on by such things as watching paint dry or keying in VERIFY /*name" file-type for every file on every disk, aroutine like VERI-DISK will take some of the tedium out of doing this. After loading VERI- DISK, insert a file disk and then press any Key to CAT it and start the verifying sequence. Any failed files will be displayed by name and number in the order they are stored on the disk.
Since the VERIFY function tries only one time before returning an error report when even one item of data
fails, if it is done in time it is usually possible to re-save or move a file that doesn’t verify because of clipping. Because after extended non-use all magnetic media also loses coercivity, i.e., it takes a ‘set* and becomes less responsive to recorded signals impressed upon it, it is good practice to move the entire contents to another freshly-formatted disk. AFTER MAKING SURE ALL FILES HAVE BEEN MOVED SUCCESSFULLY this can become your new backup or work-disk, or else the original disk may then be re-formatted and the files moved back to it from the intermediate storage disk.
When the clipping level has become critical, data may still load OK on the drive used to save it but not on another, so it is a good idea to note the drive number on each disk label. If a disk will not load at all, John Oliger’s routine for restoring directory files (SDU issue 1) may work to salvage some if not all the files in instances where track 0 has become corrupted.
LISTING 1
1 REM 123 ¥39-byte MC is poked here* 23456789
5 LET a=VAL "PEEK 23635+PEEK 23636825615"
10 LET q$="(Load original menu-loader listing that has a qs definition. Delete all lines except this one. Replace first + CHRS VAL "14" with + CHRS VAL "8" in the definition. Add the lines for this routine and <RUN).)*
20 LET d=
30 FOR n=a TO a+38
40 POKE n, CODE q$(d): REM To use a DATA line, READ ps POKE np
SO LET ded+i
60 NEXT nh
100 DATA 205,10,0,42,75,92,17,8, etc. + REM Not needed to transfer from q$
LISTING 2 (SEARCH)
1 CLEAR : LET n=!
5 PRINT 48;"Key 4 10 SAVE DATA index files OR any othe p Key for AUTO_DEX": PAUSE @: IF INKEY$="4" THEN LOAD /*F1 LE_DEX*
18 LET d=1
20 DIN $4178, 20)
38 LOAD /"1" DATA c#<)
108 INPUT "Search-word: 1-9 CHR$ wild-card (plus 1 leadin g space if start of title) OR pad to t arrow if full tit le-"354/"*"** DATA n DATA $ CODE ABS VAL ?*, t#: IF LEN 5%) 18 THEN LET s$=s$( TO 18)
110 LET t=@: LET f=8: LET f=(1 AND t$=" DATA n")4(2 AND t $=" DATA $*)+(3 AND t$="CODE ")+(4 AND t#="ABS ")4(5 AND t $="VAL ")
115 IF s$(1)=" * THEN LET s#=s$(2 TO ): LET s=LEN s$: LET tel: GO TD 140 120 LET s=LEN st 138 IF 5<18 THEN GO 10 188 140 FOR /178
24
{58 IF c#(n,1=* RESTORE * THEN GO TO 486
168 IF c#(n, TO s)=s$ AND CODE (c$(n,11))=4 THEN LET ken: 60 TO 608
178 NEXT
175 GO TO 486
180 LET pl
196 FOR kei 10 178
195 IF c$(k,t)=* RESTORE * THEN GO TO 408
206 PRINT HO;AT 8,8;
205 FOR /18-s
210 IF c4(Kyn TO nts-1)=s$ AND CODE (e$(k 11) )=4 THEN 60 10 488
238 NEXT
240 NEXT k
480 LET d=d#1: ON ERR GO TO 1886: LOAD /STRS d DATA c$(): ON ERR RESET : GO TO 148%(s=10 OR t)+188%(s<18 AND NOT t) 600 PRINT s#jTAB 11;4$}* = search$"//c$(k, TO 18);" "58; * is file A*sk,"on disk H"3d5" ~~ *yc$(178, TO 16): PRINT W3;"Insert disk & Key ENTER TO LOAD or any other key TO RE PEAT®: PAUSE @: IF CODE INKEY$<)13 THEN GO TO 18
685 LET a=CODE c#(K,11)s LET dé=c$(K, 10 18) IF NOT a TH EN LOAD /d$
$10 IF a=SGN PI THEN LOAD /d$ DATA ni)
628 IF a=VAL "2° THEN LOAD /d$ DATA n$()
630 IF a=INT PI THEN LOAD /d$CODE
648 IF a=VAL "4" THEN LOAD /dSABS
656 IF a=VAL "5" THEN LOAD /d$VAL
1988 ON ERR RESET : PRINT s$;" "3%; FLASH 1;" NOT FOUND * : G0 TO 18 2008 STOP
9999 CLEAR : SAVE /6
LISTING 3 (FILE_DEX)
1 REM 1234567890123454 MC goes here 123456789
2 CLEAR : DIM c#(VAL °178",VAL "28"): LET s=SGN PI: LET oPNOT PI: LET d=s
5 LET a-VAL "PEEK 23635+PEEK 23636%256+5": LET c=INT (a AVAL '256"): POKE VAL '23549*,VAL "195": POKE VAL "23558", a-(cHAL "256"): POKE VAL "23551" ,c: LET #i=USR VAL *23549 *: LET n$=c$(VAL £78", TO VAL “16") 308 CLS : JF n$(LEN n$)=" " THEN LET n$=n$¢ TD LEN n$-s): 60 TO VAL "308" 328 PRINT AT 0,03" Disk#*jd-s3": "jn$;#os"Key: NEXT CAT S AVE #830 510 LET a$=INKEY$: IF a$="* THEN GO TO VAL "518" 522 1F a$="C* THEN OPEN 82,"P": CAT : CLOSE #2: GO 10 INT PI 526 IF a%=*S* THEN LET d=dts: SAVE /STR$ (d-s) DATA c$()+ 60 TO INT PI 528 JF at="N* THEN INPUT * INPUT NEXT #"3d: GO TO INT PI 538 GO TO VAL "510" 9999 CLEAR : SAVE /*FILEDEX" LINE 2
LISTING 4 (MARK_MOVE)
1 REM 1234567898123456 MC goes here 1234567878
2 CLEAR : DIM c$(VAL "178" ,VAL "28"): LET s=SGN Pl: DIM m$(VAL "177" 5) LET 4=VAL "4": LET t=VAL "10": LET o=NOT Pl: INK VAL "7": PAPER o: BORDER o: CLS
18 DIM f$(VAL "6",545): LET #$(¢s¢s)=" DATA ns LET 4$(IN T PI=" DATA $": LET #$(VAL “4")="CODE ": LET f$(VAL “S")= "ABS *: LET f$(VAL "6")="VAL *
20 PRINT AT 0,t;‘FILE-MOVER" ;#o;"Place source disk in DR IWE @& target disk in DRIVE 1 Key any CHR$ TO C AT source disk or key ENTER TO NOT CAT "s PAUSE o: IF CODE
INKEY$<VAL "13" THEN OPEN H2,"P": CAT : CLOSE #2
30 INPUT **: PRINT #0;* TO FORMAT target disk? y/n‘: PAU SE o: IF INKEY$="y" THEN INPUT " INPUT FORMAT tf title to
arrow" ;a$: LET /d=1: FORMAT /a¢: LET /d=@: OPEN #2,'P*: C AT : CLOSE #2
40 CLS : PRINT #o;*Key:SPACE to mark CHR to review8 to revise ENTER 10 START MOVE*
18@ LET a$="*: DRAW INK s;VAL "255",o: DRAW INK 5;0,VAL * 175": DRAW INK s;VAL "=255",o: DRAW INK 530,VAL "175"
206 LET a=VAL "PEEK 23635+PEEK 23636#256+5": LET c=INT (a AOL "256"): POKE VAL "23549" ,VAL "195": POKE VAL "23590", a-(c#VAL "256"): POKE VAL "2355!",c: LET fisUSR VAL ‘23549 ": LET rowssts: LET col=VAL °9*: LET n$=c$(VAL "178", TOV AL "16")
306 IF n$(LEN n$)=" " THEN LET n$=n$¢ 10 LEN n$-s): 60 T0 VAL "388"
328 PRINT AT 0,VAL "14"~(LEN n$/VAL "2"); OVER s; INK VAL
"S" yn$;AT o,VAL "8"; OVER 5;* _—___—"! PAPER 0
405 LET Leo: LET f=: LET c=INT (i/VAL ‘18"): LET dif=IN T (CHIAVAL "18%~c) VAL *18"4VAL 14"): LET loop=VAL "17"
410 LET gf="p": LET it=s: IF loop)=ti THEN LET loop=fi: 6 0 70 VAL “425°
415 FOR i=s TO c: FOR m=o TO loop: PRINT AT rowtm, t-f 5a; AT rowtm,t-LEN STRS itsitgmB(itdscd(it, TO ty" ";48(CODE c$Cit VAL "11")41): LET itsit+s: NEXT m: GO SUB VAL “S88": NEXT i: FOR i=sts TO VAL "19": PRINT AT i,t-f;a$: NEXT i:
IF NOT dif THEN GO TO VAL "416"
425 IF THEN FOR m=o TO dif-ss PRINT AT row+m,t-f;a$;AT rowtm,t-LEN STR ityitym$cit) scScit, TO t);" ";4S(CODE c$¢ it,VAL "11")41): LET it=ites: NEXT m: IF loop)=i THEN LET
0 427 IF NOT + THEN LET it=fits
430 GO SUB VAL "508": GO 10 VAL "418"
588 FOR L=o TD m-s: PRINT AT rowtL,col; INVERSE 5;")": IF
q$4)"* THEN FOR a=s TO PI{PI: NEXT a: LET q$="*
518 LET as=INKEY$: IF a$="" THEN LET q#="p": GO 70 VAL ‘5 19"
512 IF ad="0" THEN LET m(it-mL)=* ": PRINT AT rowtl ,col +96N PI;" *
515 IF ag=" * THEN LET m$(it-m+L)=‘m": PRINT AT rowth col +50N P1;"a"
520 IF ad=CHR$ VAL "13" THEN GD TO VAL "686°
530 PRINT AT rowtL,col-s-sj" ": NEXT Ls LET ag="
"RETURN
680 BORDER VAL "7": PAPER VAL "7": INK o: CLS : INPUT “So urce & object disks in drives?key ENTER TO START MOVE *;a% : CLS : PRINT FLASH 53" MOVING! DO NOT STOP till end *
601 FOR Mes TO VAL "177"
682 IF c$(M,s)=" RESTORE * THEN GO TO VAL "760°
605 PRINT AT t,t;"File: “ym
$10 LET ds=c$(M, TO t): LET a=CODE c$(M,VAL "11"): IF NOT
a AND m3(M)="m" THEN MOVE /d$
615 IF a=s AND m$(M)="m" THEN MOVE /d DATA
2.9
16
620 IF a=VAL "2" AND m$(H)="w" THEN MOVE /d$ DATA $
630 IF a=INT PI AND n$(M)="m" THEN MOVE /dSCODE
648. 1F a=VAL "4" AND m$(M)="mF THEN NOVE /d$ABS
650 IF a=VAL "5" AND m$(M)="m" THEN MOVE /dSVAL
668: NEXT
708 PRINT AT 0,0, ,AT t,t; FLASH 1;" MOVE (VER ": INPUT "K ey ENTER FOR NEW CAT "’" Any CHRS STOP "ja$: IF a3=*" T HEN RUN
718 STOP
9999 CLEAR : SAVE /*MARKMOVE" LINE 2
LISTING 5 <VERI_DISK)
1 REM 1234567896123456 MC goes here 123436787
2 CLEAR : DIM c$<VAL "178",VAL 20"): LET s=S6N Pls LET 2VAL "4": LET t=VAL "10": LET o=NOT PI
18 DIM f$(VAL "6" sts): LET #$(sts)=" DATA n"s LET $(IN T PIs" DATA $*: LET f$(VAL "4")="CODE ": LET $(VAL "S")= "ABS ": LET #4¢VAL "6")="VAL *
20 PRINT AT 0, t;"VERI_DISK";#o;"Place NEXT disk in DRIVE » then any Key TO VERIFY 's PAUSE o: OPEN 42,"P*: CAT : C LOSE 42 208 LET a=VAL "PEEK 23635+PEEK 23434#256+5": LET c=INT (a AVAL "256"): POKE VAL "23549" VAL "195": POKE VAL "23558", a-(cHVAL "256"): POKE VAL '23551",c: LET 4i=USR VAL "23549 ": LET n$=c$(VAL "178", TO VAL “16") 218 ON ERR GO TO 888 238 FOR nes 10 VAL *177" 248 IF c$(m,s)=" RESTORE * THEN GO TO VAL *780" 258 PRINT Ho;AT 0,0j*File: “ym 6868 LET d$=c8(m, TO t): LET a=CODE c$(m,VAL "11%): IF NOT a THEN VERIFY /d$ 618 IF a=s THEN VERIFY /d3 DATA $20 IF a=VAL "2" THEN VERIFY /d$ DATA $ 630 IF a=INT PI THEN VERIFY /d$CODE 648 IF a=f THEN VERIFY /d9ABS 65@ IF a=VAL "S* THEN VERIFY /d$VAL 668 NEXT M 788 ON ERR RESET : FOR m=s TO f: BEEP .2,RND¥35: BEEP .1, RND#15s NEXT m 718 PRINT #0;AT 0,03n$; FLASH 1;" VERIFY OVER °; FLASH 8, "Note failures--any Key FOR NEXT “: PAUSE o: RUN 728 STOP 800 PRINT “Failed at a" mj" "scd<m, TO t);" "j4SCCODE c$¢ mVAL "11")41): NEXT m 9999 CLEAR : SAVE /"VERI_DISK" LINE 2
ADDENDUM: Since sending the above mss. to Bill, response to the DOSDEX article indicates some were confused by the instructions. Sorry about that! If the 8th byte in your NC listing or the 8th definition in q$ is already an 8, don’t change any of the code to POKE it into the line 1 REM for DOSDEX or the above routines. Please note that in listings 3, 4, and 5, as well as DOSDEX, the respective values in lines 5 and 200 must be as given above for these listings, NOT as they are in the menu-loader. The original menu- loader values were set up to point to the VARS location of qs in RAM, and so must be re-calculated if this 9$ location is to be used for the code instead of the REM.
The Issue Disk
ISSUE DISK is a valuable tool to And you have all of
The UPDATE verify all of your key-in work, the programs and utilities to use while you wait for the time needed to devote to key-In projects (maybe next month), | Maybe you wont have the time, ever. It usually takes me about two weeks of work to put together the Issue disk and to verify all of the programs and utilities. Then It is time to start work on the next magazine Issue, UP-DATE has become
a full time job and | hope that you can see the effort expended in a gradual improvement in the contents. As the October Issue begins to support
the QL users | will try to hold TS-2068 coverage down to 30 pages, although that Is difficult to do when the "IN BASKET" contains such outstanding articles as those submitted by the authors for the April 88 issue.
The LARKEN DISK Section
"BUDGET", by Bob Mitchell, came In to UP=DATE as a Larken Disk software, 1 kinda switched it toa ‘universal software", by nothing more than writing syntax. Part 2 of this software will be given In the July Issue of UP-DATE and will give the "Loader Disk Manager" for LARKEN, OLIGER, and AERCO disk systems. UP-DATE has a treasure trove of excellent Larken Disk articles to present, They had to be placed in Back Log because of a equipment break-down (1 couldn't verlfy the programs.), These articles and programs will be presented in the July Issue and will take up about 8 pages.
TS-2068 DISK DRIVE SUPPORT
We TS-2068 users are currently supported by two dedicated Disk Drive Hardware engineers. John Oliger (The Oliger Co.) and Larry Kenny (Larken Electroncis) form the nucleus of our disk drive system support. Aerco seems to have developed other Interests which has slowed further development of the Aerco FD-68 00S, Maybe Aerco will see fit to finish the D0S? The Larken SKDOS Cartridge can give FD-68 users a finished 00S for use with the FD-68. In the meantime, both Larry Kenny and John Oliger are continually busy up-dating thelr disk drive systems and providing new hardware, UP-DATE salutes
these two dedicated supporters. Both deserve our busI ness, And, both Individuals are eager to support their customers and the TS-2068 "user family", with detalled information in the pages of UP-DATE. Larken Electronics and The Oliger Co,, together, are the BEEF of our TS-2068 Hardware support. Trust them, and look for their products.
26
DENSE PACK BASIC A Method to Conserve Memory and Speed Up Basic
Most Computers use variations of the Dartmouth BASIC Language as thelr operating systems, The assembly language routines In ROM are designed to facIilitate the Basic language as used by the operator and the Basic Editors of the computers are designed to process the particular variation of syntax used. Generally, the differences In syntax are easily learned by a user who has some experience operating any computer. So, once one learns the syntax one can begin to program the computer. This Is quite an advancement over the way programming was done In the 60's, when a computer was programmed by punching holes In a card to be fed through a card reader.
So, things are now neatly arranged, We have the BASIC language to use and the computer Is programmed to accept Key Words that the operator Inputs from a keyboard and then Branch to a fixed ROM routine to execute the operator's desires, The operating system Is FIXED in ROM, The BASIC language 1s just "semt-fixed" and has some flexibility. One of the flexible features has to do with mathematics expressions. The Central Processing Unit (CPU) of the computer has an Annex called "The Arithmetic Logic Unit" (ALU) which processes mathematics expressions and provides a Resultant. When a math expression Is Included in Basic Programming, the ALU solves the expression and the CPU stores the resultant.
lf, within a program line, the expression "LET a=20*40" is used, the ALU solves "20*40" to allow the variable a to be assigned as 800, Almost all commonly used math expressions can be sent "IN BASIC" +o the CPU, "LET c=2*P1*r™ is acceptable as syntax to the basic intrepeter, and the CPU calls upon It's ALU to solve the math before I+ assigns a value to var c. Then if we use other math equations most will be acceptable, How about Boolean Logic expressions? Why not? Boolean Logic Is the basis for the logic of most of the IC chips In the computer (AND Gates, OR Gates, NOT Gates, etc.). The CPU itself is largely a Boolean Logic device.
What is BOOLEAN anyway? Well, most of our younger set belleve that computers sprang up as a new Invention during the 70's, Actually most of the principles of computing extends back more than a hundred years. What sprang up was new manufacturing
techniques of packaging electronics components, George Boole (1815-1867) gave us the logic used in computers. Mr. Boole spent a lifetime Integrating
18
two separate sclences, LOGIC and Mathematics. Then Mr. Einstein made great use of Mr. Boole's works and added to It. Before, Logic was considered to be literal, and mathematics was I!mited to the factoring of numbers. Boolean logic uses such expressions as AND, NOT, in both a math and relational Logic sense,
R,
Boolean logic can greatly shorten the way we express ourselves BasIc programming. Boolean logic can also speed up the execution of Basic programming. When Boolean expressions shorten the literal expressions not require as much memory for College courses In Boolean because It
In
In Basic, the programming does storage. Most Computer Programing ignore is really an advanced Math discipline, and to Introduce It in a programing class would require more semester time. Yet, It does not require extensive study to use simple Boolean expressions to great advantage.
Dense Pack Basic employs Memory and Time Saving techniques Integrated with Basic Programming. Dense Pack is not a new language, but is a "method of programming", using math as logic, and existing memory saving techniques. It reasonable to conclude that If a line of Basic programming can be reduced in Byte length by as much as 70%, the programming In the line will execute faster. Supporting this thesis is the fact that arithmetic functions executed by the ALU are the fastest operations performed by the computer.
is
The October issue of UP-DATE discussed "Pseudo
a table of variables that substitutes for numbers. Most programmers use the principle, but in a un-organized manner. The pseudo hex table was designed to assist In remembering the variables used to represent numbers 1 through 20. These are the most used numbers In computer programs, To review, Pseudo Hex uses a double character variable "o",
Hex",
where Moasl, ob=2, oc=3, to ou=20", A person tends to quickly learn that "oe=5", In the learning phase, one can count on fingers, using the alphabet to Intrepet the variables, The use of sucha varlable system quickly becomes habit to programmers.
The Pseudo Hex table Is constructed in program lines, Then GO TO the first line Initializes the varlables to memory. A good technique to use with disk drive systems !s to then SAVE the Variables to disk where the vars table can be re-loaded toa CLEARED Basic program. When that is done, the program lines may be deleted. The memory cost of initializing the pseudo hex varlables Is usually recouped within the first 20 lines of a basic
27,
program, A basic program of 20K in length Is typically reduced to about 16K In length by using the variables table,
Now wewlll get into the meat of Dense Pack as it employs Boolean Logic and math operators In Basic Programming. The best way to start is with an example. It] give a typical conventional program lIne after a MENU which has 9 optional electives. Normally the menu electives will be IIlsted 1 through 9 and the operator touches a number key to make a selection. Ordinarily, a I!NKEY$ prompt would be used to assign the key touched to a numbered varlable such nz", The typical program | ines after would be: 100 IF z=1 THEN GO TO 500 - 102 IF 2=2 THEN GO TO 600 - 104 IF z=3 THEN GO TO 700 ~ etc, etc, unti| "9 IF THEN LOGIC lines are programmed", Then there would be a "Key Lock" line as: 118 IF z<1 OR z>9 THEN GO TO 90 (the menu).
as
The dense pack presentation would be only ONE lfne of programing Instead of 10 lines, VYars would be used for each of the small numbers, The result would be a reduction of 9 lines of programming and 75% of memory required to store the programming. The equilivant programming In Dense Pack would be: 102 GO TO (z=0a)* 500 +(z=ob)* 600 +(z=0c)* 700 +(z=0d)* 800) +(z=0e)* 900 +(z=of)* 1000 +(z=0g)* 1100 +(z=oh)* 1200) +(z=01)* 1300 +(z<oa OR z>01)* 90.
The example dense pack (single) I ine requires
only 25% of the memory needed to store the conventional 10 lines of the first example, and 9 fewer program lines, | will break down one of the
IF THEN conditionals. "GO TO (z=oa)* 500", The operator Is "GO TO" and is used only once for the 10 evaluations. "IF and THEN" are implied for each of
the 10 conditions that are Inclosed in (brackets). The term means: IF z=1 THEN GO TO 100, When the program line is processed ALL 10 of the conditions
are evaluated as a single expression, where with conventional IF THEN conditions each program line Is evaluated and a false condition would be Ignored. The dense pack line operates faster and conserves 75% of program memory.
Now we will explore some more Dense Pack examples, I'll set up a program line with a pair of prompts. One will opt to solve the Circumference of a circle, and 2 will opt to solve the Area of a circle, 10 LET r=9: INPUT "<1> Circumference or <2> Area" ;, LET y= (2*P1*r AND a=!) + (2*P1*r 2 AND 2=2). That little routine lacks a trap for wrong key hit. Conventional IF THEN statements may be mixed with Dense Pack logic expressions, as: 100 IF
a<10 THEN PRINT ("yes AND a<6) + ("no" AND a>5): IF @<3. THEN GO TO (a<t)* 50 +(a=1)* 100 +(a=2)* 200), In that example IF a is smaller than 10 the print
statement will execute and print "yes" smaller than 6 or "no" if als greater than 5.
the
ifats Then last GO TO will execute only if a Is smaller
than 3, Here Is an actual dense pack | Ine used in one of my programs, vars Ix=maximum printer line,
qq=center of page, tb=tab, ps=print style elected,
xo=existing max printer line, lo=existing line length, and Il=line length elected, A matching line "ma" is computed: 8022 LET Ix=(80 AND ps<3) + (96
AND ps=3) + (136 AND ps>3): LET qq= INT (Ix/2+ .05): LET ma= iNT (,5+ix*io/xo): GO SUB 8088: LET tb=iNT C(lx=11)/24.5 = 8088 PRINT AT 10,2;"Key In fine fength"''TAB 2;1x;"=Max "3mas"Match": INPUT 11: CLS RETURN, | left out the pseudo hex vars for easier follow through, These two lines are not intended to dazzle, but to Illustrate how many IF THEN conditionals, plus computations, GO SUBS, and LET statements can be Integrated into one dense pack line. Dense pack | ines are "program packages".
As one gets Into Dense Pack, the program I Ines become easier because they are Independant "whole functions", Fewer GO TOs and GO SUBS are used to pick up other sub-routines, and "fall throughs" to next program lines are greatly reduced. Sometimes one tends to get too engrossed and does a blunder like my printing a listing of the "J-vars utility package" in the October 87 issue. Looking back, It is a most difficult tisting for one to key In, To give you a better feel for the usefulness of Dense Pack, one of my programs was reduced from 28K of program length to about 12K, Then more functions could be added. Al! of the Key Words of any computer can be used as operators for Dense Pack programming.
RULES. 1, A Key Word can only operate on one variable within a set of brackets, <GO TO (a=1)* 100 +(b=1)* 200> would not work, because two evaluators are used "a and b". 2, ALL conditions should be accounted for, LET a= (10 AND b=2) +(30 AND b=4), In this example, the conditions of b<2, b=3, and b>4 are not accounted for, As a line Is evaluated, and an un-accounted for condition Is present, the CPU takes off hunting. Often this will result In the execution of an un-Intended line near the end of the program. Use limiters such as "<r and ">" to account for all possible conditions, 3, Some mixes of AND and OR within the same brackets will not be Intrepeted in the BOOLEAN sense, but in the literal. Only experimenting will proof the programming. Have fun with Dense Pack!
28 19
A Practical Study of SYSTEM VARIABLES Put Them to Use with BASIC
Appendix D of the user manual list the memory addresses of RAM where most of the TS-2068 System Variables are stored, The left column "notes" tells whothor the variable number Is targer or smaller than 255, The significance of this Is that system varlable numbers larger than 255 require two memory addresses for storage. If the variable Is stored in two addresses, the formula: PRINT PEEK (low adr) + 256 * PEEK (high address) returns the actual system varlable number, We stared this discussion In the editorial section, Now let us examine some of the system variables.
PEEK K STATE and LAST K: These two system vars are used together by the TS-2068 ROM to read the keyboard, Then WHY are the vars In RAM? Well, the codes stored in ROM cannot be changed and a Keyboard
READ requires ‘the ability to store changing codes. Then how can we use these two system variables? There are two ways. One Is to construct a little
Machine Code loop routine to use the system vars to read the keyboard, The other way is to do it witha BASIC loop. Why do this when the INKEY$ function Is already aval [abl e? The answer ts the INKEY$ function does not employ the Debounce and Error Detection routines In ROM, while K State does.
The following BASIC programming will read the keyboard and assign the "key struck" to mag". 150 LET a$="; POKE 23611,220 - 151 IF PEEK 23611<220 THEN GO TO 151 - 152 LET c= PEEK 23560 - 153 IF c<32
THEN GO TO 160 ~ 154 LET a$=a$+ CHR$ c - 155 POKE 23611,220 - 156 GO TO 151 - 160 STOP, Explanation: At line 150 we start by initializing a$, then
RESETING the system var FLAGS, This places the
systen Ina walt state. Next at line 151 we forma loop to loop as long as FLAG remains In a walt state,
When a key Is struck, the error detection and debounce routine in ROM processes the key value and if no error exists, the code of the key Is placed at
address 23560. In tine 152 we pick up the code number of the key struck and assign It to var "c", Then at [ine 153 we have a ESCAPE so that any non
such as ENTER, will escape the loop At Line 154 the character key struck Is assigned to a$, Line 155 resets FLAGS, and then fine 156 loops back to another keyboard scan at line 151, Two more variations of this PEEK K STATE routine, for PROMPTS In basic are given In the October Issue of UP-DATE.
printable key, to process the results.
20
The above programming can be reduced to about total lines by using chained commands. vartation, using the OLIGER SAFE FOR/ 150 POKE 23611,220: FOR /65535: IF PEEK 23611<221 THEN NEXT - 152 LET c= PEEK 23560: POKE 23611,220: IF c<32 THEN GO TO 160 - 153 LET af$=a$+ CHR$ c: NEXT - 160 STOP,
three Another counter Is:
REPDEL and REPPER: Want to perk up your keyboard and make It frisky? Page 262 of the user manual gives these two "single byte” system vars. Play around with POKES to the two addresses to get variations of the speed of REPEAT KEYS, and the DELAY between repeat key actions, How about making the keys Chirp? Do that by POKE to sys var PIP (23609), Try about 10, Then the sys var DF SZ lets you enlarge the prompt area at the bottom of the screen, For kicks, put on a whole screen and then BREAK and POKE 23659,15, Wow: now the promt area Is 15 [Ines which leaves only 9 lines at top!
OTHER SYSTEM VARS: We will skip some of the more obvious SYSVARS and deal with some more useful two byte vars. For these It will help to refer to page 254 of the user manual to visualize the TS-2068 memory map. On page 254, note that PROG Is a line drawn without a specific address. This Is because the BASIC PROGRAM, which normally begins at address 26710, may be Intentionally changed. The System Var PROG is contained in two addresses, 23635 and 23636, Try PRINT PEEK 23635 + 256 * PEEK 23636, You should get 23710,
in memory to stash a Basic program UP In anywhere in RAM, but place, Look on page top of the page Is a are Important places
We will now find a nook tiny MC UtIIIty to shift the RAM, The MC utt lity can go lets put it In a most unltkely 255 of the user manual, At the group of blocks. All of these where "functions" are stored. But one can be used for multi purpose functions, The "printer buffer" Is used only for holding data for printing something to paper with the TS-2040 printer, and is a Ideal place to stash Machine code when the TS-2040 printer is not to be used,
So, we will do some slick shenanigans, A basic utility will be constructed that contains a tiny Machine Code routine. The utility will put it's own MC routine into the Print Buff area, and then Execute it. The result will be a "selective starting address" of any Basic program to which the utll{ty 1s appended, In stmplese, the utility will
move a basic program UP in memory and also move PROG so that the CPU will know where to go to operate the Baslc program
29
A Utility that uses System Varlables
The following utility really should be In the EXTRA MEMORY section, because It is so useful be able to MOVE a BASIC program to a specific STARTING MEMORY ADDRESS, It Is a take off from the "MOVE" utilities given In the January Issue of UP-DATE. But, we are discussing the use of SYSTEM VARIABLES, and this utility does a good job of demonstrating the use of system variables PROG, and VARS, PROG, of course, is the starting address of the first byte of the first line of the BASIC PROGRAM, VARS Is the starting address of the fIrst byte of the variables area. To get a good mind's picture of these two system variables, refer to page 254, left block, The Basic program normally |s arranged so that it's first byte starts at address 26710, Then PROG is 26710, The Variables area (VARS) Is ever moving as the basic program Is added to by IIne numbers or changes of programming within the I Ines.
So, the system variable VARS Is a very Important tool, We can use It to find out the "LAST BYTE" of a BASIC PROGRAM, Since VARS begins with the "next byte after" the basic program ends, then all we have to do fs to subtract "1" from VARS (when we find VARS), Now look at page 263 and about 1/3 down we see that VARS is given as address 23627, and it Is a 2 byte variable, So <PRINT PEEK 23627 + 256 * PEEK 23628> will return the memory address where the variables area starts, Then subtract 1 and that will be the TOP address of the BASIC program, Next, we look on page 263 and find that PROG Is given as a 2 byte varlable starting at Address 23635, Then <PRINT PEEK 236354256 * PEEK 23636> will return the address of the STARTING byte of the Basic program, Subtract the product of the two formulas and you have the TOTAL Number of BYTES of the Basic Program.
It Is useful to be able to re-arrange the Memory Map of the computer when you want to, One need is to place a Basic program at the "starting address of a Chunk of memory” when we want to MOVE the program Into the dock bank. A good discussion on this subject Is In the EXTRA MEMORY section of the January Issue, Another useful purpose Is to place the Basic program UP in memory to make space for machine code utilities “under the basic program, This would be useful If operating a program In the dock bank, because there would be about 4K of wasted space down there when PROG is moved to Chunk 3, But sometimes the rationale Is more complex than the act of doing It, so let us get to the action, Since the program Itself Is a shortle, I'll doubte-space-the-Hsting-end make notes at the side, I'll call the program
"mov" in a REM I Ine so you'l! know what I'm referring to.
Works AS 1S with AIl Disk and Cassette Systems ry Management Line 10 PEEKS SYS VAR PROG and assigns the address to var a.
10 INK 7: BORDER 1: PAPER 1: c Line 20 PEEKS the SYS VAR VARS and subtracts 1 to get the last byte address
LEAR : LET a=PEEK 23635+256*PEEK of the basic progran. 23636: PRINT "This Basic Progra Line 30 assigns the address of the last byte of ram to var c,
m begins at theMemory adr of: ; LIne 40 waits for your decision. . Line 50 will be explatned by steps. First an Input is requested for the
20 LET b=PEEK 23627+256*PEEK 2 START Address where you want to move the prgram., Your Input address Is assigned to the var pg.
5 REM "mov" Basic & Vars Memo
3628: PRINT "The last byte of t his Program Isat adr: "3b Next, var a3 Is assigned "pg-a" which Is the total bytes of the move- UP In
30 LET c=b-a: PRINT "The prog memory. The number assigned to a3 will next be broken Into the two numbers ram length Is: "0 to use as POKE addresses for a "two byte” number storage.
40 PRINT 'To Move the Progran Next var a2 will be the "poke number for the high address", Var al will be UP in MenoryType CONT ENTER": $ the number to poke to the low address, TOP Next is the RESTORE to Initialize the DATA group later In the same I ine.
50 INK 7: BORDER 1: PAPER 1: ¢ Next Is a counter to place a MC routine In the Print Buffer area, Note LS : INPUT "Input PROG ADR?";pg: that vars al (low adr poke) and a2 (high address poke) are placed In the LET a3=pg-a: LET a2=INT (23/256 ¢@t@ group. This MC program MOVES PROG up In memory to the address that ): LET at=a3-(a2#256)+ RESTORE 5 Was INPUT at the beginning of line 50. 0: FOR x=23296 TO 23304: READ y: The MC program Is a variation of "MOVE PROG" given in the January Issue, POKE x,y: NEXT x: RANDOMIZE uSR tT can be used repeatedly to step 2 program up In the memory maps Try 25296: DATA 33,85, 104,1,01,02,1 Inputs of 30000 first, then 35000, 40000, etc, SAVE It to auto run at line
95, 187,18 t 10. 60 CLEAR Note WA
3.0
Screen Files In Strings — By: Bob HAaTung —
In danvary SDU Bil] discussed the use of SCREENS files as a means of conserving RAM in programs such as SMART TEXT. Each SCREENS, of course, takes 6912 bytes in disk file space or two cylinders in SDOS. The following deno listing shows how up to the maximum of 704 characters in a 32-column text screen such as a menu may be stored in a string, then printed back on-screen either from RAY storage or after retrieval from disk or tape files.
No graphics or UDGs are recognized by the SCREENS (x,y) function but this can be used to advantage by having a subroutine to set up screen borders, etc. then retrieving screen files and using PRINT OVER 1; a$ as many times a5 you wish to change the text. PRINT AT x,yj a%(a TO b) could also be used to alter specific parts of a text display. It does take awhile to chew avay at a screen initially and put each character in the string, but once this is done and the file is saved as DATA a$() the access time is for only one cylinder of disk space. Because only about 1/10 the access time is required as compared to a SCREENS it would even be feasible to sequentially access a series of such files with tape data storage if RAY capacity was running short in a lengthy program. Use your imagination for other applications.
SCREEN STRING DEMO
1 LET Pal 5 DIM AS(784) 18 FOR Nel TO 784 26 PRINT CHRS (RND#74+48) ; 38 NEXT N 35 PRINT #8;"Original display transfer to As* 40 FOR V=O TO 21 5@ FOR H@ TO 31 68 LET A$(P)=SCREENS (V,H) 65 LET P=P+t 78 NEXT H 80 NEXT V 98 CLS 188 PRINT A$;#6;"A$ printed from VARS file” 105 PAUSE 188 118 SAVE /"SCREEN* DATA A$() 115 CLEAR 120 PRINT #8;"Re-loading data just saved"
125 LOAD /*SCREEN* DATA AS() 430 LET a$¢ TO 17)5" ": REM Demo of how b
lank spaces in screen data will not overprint graphics o t UDGs in border when OVER 1 is used
135 PRINT" BORDER HERE *
140 INPUT **s PRINT OVER 1;AT 6,6;A8;H0;"AS from disk fil e to VARS prtout®
158 PAUSE 300
168 STOP
‘208 REM GO TO 120 to repeat disk file display
9999 SAVE /"SCREEN" LINE 1
The Mysterious "DEF FN and FN" Functions
One Monday morning at the Timex Literature Department Mary was given a task that would normally been assigned to Gus, the Mathematician, Gus had his usual Monday morning problem, Now Mary majored in Greek Literature, not Greek Mathematics symbols. But, never the fess, Mary was given the task of writing the part of Appendix A of the TS-2068 User Manual to explain such functions as ABS, ACS, ATN, "DEF FN", and "FN", Thus explains the reason why many TS=2068 users have not ever used the DEF FN and FN functions, The User Manual has good prose, but tacks some in detall,
The two functions DEF FN and FN are used together \Ike bread and butter to store MATH FORMULAS in memory and then SOLVE the problems by INPUT of the missing factor, Take for example the
formula C=PI*D for solving the circumference of a circle when d (diameter) is known, To set the formula Into memory, a line of programing would define the formula as, DEF FN c(m=PI*d, Or, to convert METERS to INCHES, the formula 1=39,37*M would be defined In a program tine as, DEF FN 1 (m)=39.37%m. The formula Is In the DEF FN structure, and the SOLUTION is achieved by using the FN function, as PRINT FN i(m), or LET a= FN I(m), to assign to @ varlable.
The following {tittle program demonstrates one way of using the DEF FN and FN functions,
1 REM ** Using DEF FN and FN **
10 PRINT "Convert Meters to Inches" 20 DEF FN I (m)=39,37*m
30 INPUT "Diameter In Meters? ";m 40 PRINT FN I (m)
60 LET d= FN I (m)
70 PRINT "Compute Circumference" 70 DEF FN c(m)= PI *d
80 PRINT FN c(m)
SYNTAX: DEF FN Is followed by a Identifier,
the first case, and "c" in the second case. Then the designator letter is Inclosed (m), This also can be any letter, On the right side of "=" comes the formula to be solved. The un-known factor In the formula, "mt In the first case, and "d" in the second case, are fed Into the formula by INPUT Line 40 gets the value computed with the
i(m", Line 50 demonstrates that the FN may be directly assigned to a variable, is used In the second formula to
"ithn
prompt. "PRINT FN solution This value of d compute the circumference of a circle.
The DEF FN formulas may be placed In a line of
31
22
programming to be Initialized as one Initializes a Jack In the Redwoods Heard From
varlables table (with GO SUB IIne #), The DEF FN
formulas need not be repeated once they are Hello Jack! This SYNX critter Is one thing
Intti lized. Yar lable Not Found report will result we've been a ‘lookin fer! Away to sneak by the
if there are Insufficient Inputs tor the formula to | syntax checker. Now we can put forelgn disk syntax
be solved. Bae Into a program line, save to cassette and send to a friend who dont know how to be a dunin It.
Or, how bout changing the syntax In a TS~2068 program to QL Basic, then shipping it out as a ASCII file to the QL sitting over on the next table? Heck, some of us may be writing |8M programs on the 2068, Thanks Jack, we'll find a use for It, Now why did ya disguise It by sayin Its fer AERCO Disk users? Some of us are but others aint and it appears that It dont make no difference nohow which kind of disk we're using. And while gotcha, why dint you mention that you have a lot of good software for the TS-2068, and anybody can get yore catalog for a Buck, which wil! be recouped on the first order?
Jack Dohany $90 Rutherford Ave Redwood City, CA 74061 (415) 367-7781 FER. 22, 1988 #HE SYNX HH
SYNX is a 4é-byte relocatable MC routine for AERCU DISC users- SYNX is shert for SYNTAX CHECKER SWITCH. SYNX is given into the public domain.
SYNX allows you to turn aff the BASIC syntax checker when writing or editing BASIC lines... and to turn it back an. Syntax checking during pregram execution remains in effect.
Why? Perhaps you want te write a BASIC program that can be used on a non-AERCO disc system... perhaps on ALL disc systems. You may want to write a line like this:
S@O0 SAVE *"TEST": REM for Zebra disc
Well, you CAN'T write it because it will fail syntax checking. But with the syntax checker turned OFF, you CAN write at.
SYNX works by changing some locations in the BASIC operating system... normally in ROM, but in RAM with AERCO NISC. A more detailed explanation is beyond the scope of this document.
Assuming you have the cade on disc or tape as a ~BIN or CODE file, it can be loaded wherever there’s no conflict with other software. Let us say you want ta load it at Loc 64000;
CAT "SYNX.bin",64@00 or LOAD "SYNX" CODE 64000 will do it.
To SAVE the code MOVE "“SYNX.bin",64900,46 or SAVE "SYNX" CODE 64000 ,46
+e HOW TO USE IT ##* .
Assuming the code is at 64800:
RANDOMIZE USR 64008 turns syntax checker OFF. RANDOMIZE USR 64002 turns syntax checker back ON.
Here is the SYNX code as a decimal listing, ready to be poked into memory however you wish:
64900 24 64018 255, 64020 24 64038 255 64040 a
64001 27 64011 8 64021 221 6403t 1 64041 2435
64002 24 64012 a 64022 197 640352 4 64042 237
64003 18 64013 205 64023 225 64033 a 64043 176
64004 8 64014 13 64024 1 64034 «9 64044 251
64005 @ 64015 13 64025 11 64935 17 64945 201
64006 8 64016 253 64026 «8 64036 76
64007 253 64017 54 64027 24 64037 14
eqwes 54 64gig = @ eap28 SS 64038 i
64029 64019 255 64029 197 64057?
Of course, if you get a single number wrong, the silly computer
is likely to crash when you attempt to use SYNX. So... SAVE : before testing. ‘ Je
END 23
A REVIEW OF a Aorco FO-68 Utilities Program Disk By: Syd Wyncoop
This is a nifty set of disk utilities for the
Aerco FO-68, by Chia-Chi Chao, The program "Disk
File Manager will be This program
allows individual files to be copied, singlely or in
reviewed,
groups, instead of the entire disk, as in the familiar Aerco command, <MOVE ™ ">, Other functions: .. normal disk catalog: ..detailed disk catalog, which shows track and sector information:
eelisting of tracks on the disk: sechecking disk for bad sectors,
Having the ability to copy individual files is obviously handy and has several side benefits, These additional benefits could all be grouped as one, more efficient disk operation, As you use a disk, after many read/write operations, there are lots of 'reclaimed' sectors lurking about and ‘holes! in the directory tracks. When you copy individual files onto a freshly formatted disk, the files are placed on the disk in consecutive sectors and the directory does not contain any erased entries. This greatly speeds disk loading, particularly as file size increases. The Aerco disk copy function does just that, it copies all disk information to the new disk, This is very
tor debugging and/or recovery of a ‘trashed!
occup led
very less obvious
access and
useful
Jisk, You should always attempt direct disk writes, such as recovery, from a copy, NOT the original disk.
The detailed disk directory function provides you with the information contained in the directory which is usually not available to you. This is autostart line numbers, starting addresses, as well as track and sector information, This is similiar to reading a tape header. You can use the track/sector information to see how disorganized the disk Is, Listing the occupied tracks also gives some indication of disk disorganization and how full the disk is, Also, as above, this information is useful for debugging and recovery purposes, Best of all, this information can be redirected to a printer, either the TS2040 or an 80 column printer! From my perspective, the check disk option has one serious drawbeck, it should test. As it stands, you must test all disks prior to use, as all data will be destroyed by the disk check, This Is because the disk check effectively re-formats the disk, | should clarify, the disk check works fine, However, since | have encountered only about 6 bad disks In a library of over 700, | see little need to check them. Therefore, | usually vait until a problem occurs, at which time | want a non-destructive disk check, This is not bright on my
have been a non-destructive
24
Articles and Reviews] 6 April 1988
part (and frustrating when a problem does develope) but it is easier and has proven to be effective, As a bonus, the disk contained a nice Boot,Bas
file loader program, You use the (mouse?) arrow keys to point to the file you wish to load, Autorun Basic programs may be loaded with or without autorunning them, Disk File Manager should be
considered a very useful addition to your library of Aerco utilities, It is easy to use and it works!
Ed note: Disk File Manager ($13.00) is available from CHAI-CHI CHAO, 73 Sullivan Drive, Moraga, CA 94556-1209, Chai-Chi has several other Aerco FD-68 utilities, all Inexpensively priced. Send SASE for product list.
A Universal Treatment for Bugs in the Program Area
1 want to call your attention to John Oliger's article (see "Problems In using the new V2.4 MERGE Command"), because it has universal application. The scenario ts, a Basic program picks up garbage that is stuck within the program space that it occuples In memory (PROG to VARS), It's kinda like one walking through the woods and not realizing that chiggers are finding a warm bod to invade, Junk stuck In the program area Is Just as hard to get rid of as them pesky chiggers. You can't see um and they're stuck I1ke they're a plece of ya.
When you SAVE a Basic program that contains junk (chiggers) the junk SAVES right along with the program (at least chiggers eventually die). How does Junk invade a Basic program? Hell, one way Is via a "bad load", where a loading error occurs after some, or all of a program has loaded. You've seen this In program loads that aborted, and when you try LISTing the program, it scrolls and scrolls with a
screen full of "2" question marks, Thats junk (chiggers), pardner, and the whole mess Is In the program area of memory. The computer is trying to
list the program but the last program tine contains Junk that extends all the way up to the end of memory and the systems vars VARS has not been set. Of course such a gross invasion of the program area by bugs #™ cannot easily be recovered from.
What John Is talking about In his article Is a "lesser invasion", kinda like intestinal parasites, The program lives and the patient might not even know that they're in there. Funny how a program can live a normal Ilfe while hosting such parasites indefinitely. But eventually there comes a time when the buggers are detected. In this case they were discovered when someone tried to MERGE to the space where the critters had set up housekeeping.
John gives us a very useful procedure to rid a program of bugs that have invaded the program area. ltm highlighting It here because It has universal
usage, Now there are many different kinds of bugs. Sometimes you can get rid of um with RAID and other times you have to take somethin fer It, In this case John shows us how to cut um out. Disgusting,
them parasites, eh?
Book Review: Dick F. Wagner Title: Epson, Epson, Read All About It! Author Julie Knott & Dave Prochnow
Price: $14.95
I.D. ISBN 0-201-11640-5
Publisher: Addison-Wesley Publishing Co. Inc. Pages: 275 Date: 1985
The authors have developed a guide for Epson and Epson work-alike (compatable) dot matrix printers that provides the user with more information on printer applications than most manuals give. Where printer manuals often devote a part page on each printer cade and sometimes a program to explain its operation, these authors provide uses and application programs.
This book explains such mundain things as the proper way ta load in the paper, discusses interfaces, explains what happens on printer initialization, how to program for different computers, and many other pertinent subjects. Within each chapter a table of new function codes used in that chapter is presented. This table shows the CHR$ codes and the ASCII codes corresponding te each action. LPRINT and CHR codes are used in all examples
The book is divides into 4 parts and 11 chapters as follows: -
Chapter 1: Printing with dots Part Selecting printers and connecting to computers Viewing the printer field Joining of computer and printer Part 2: Epson printer capabilities Character pitch Character sets Downloadable & custom characters Part 3: Epson dot graphics Plot & graphics Printhead placement Programmable Graphics Part 4: Patching software and hardware to Epson Installing software Joining hardware Appendicies: Function codes ASCII codes Dip switch summary Character style chart Epson work-alike conversion chart
Some interesting programs given include a printer test, typewriter(print as you type), print out the International character sets, print double height characters, design print fonts, design custom graphics, setting margins, horizontal and verticle tabs, graphic line designs, circles, pie chart, and a program (GMAKER) to create graphics in any of seven graphic modes. There are various short demonstration programs for specific control codes. Progragms are in MBASIC and duplicated in Applesoft BASIC but are easy to convert to Sinclair BASIC. Screen dumps are not covered.
One subject not not discussed but important to some computers is how to cancel an unwanted line feed caused by the computer cable connection and software. The secret is to disconnect the printer pin 14 cable which eliminates the AFXT low signal. In some cases the dip switch does not seem to control the line feed.
About 70 pages are devoted to various appendicies. An interesting table covers the function codes used by Epson and compares codes for C. Itoh S510BP and S510SCP, Olivetti PR2300, and Star Micronics Gemini 10X printers. Character shapes used by these printers plus Epson FX, L@, RX, and MX models are given.
While Part 4 would be the least useful part of the book, it does give some interesting details on specific products not useful to TS users. The reader can compare word processors available to TS users with a few used with other computers. Ours seem to be very comparable to the big name pragrams. About 70 pages are devoted to this subject.
Soft back and ample margins make this book easy to use at the computer. This is the only reference book I have seen devoted to Epson and work alike printers.
25:
17
Oliger Disk Section April 1988 k
PROBLEMS IN USING THE NEW V2.4 "MERGE" COMMAND
It has come to my attention that several JLO SAFE users have been having some -rouble using the new SAFE "MERGE" command under certain conditions. This note will detail the results of my investigation into this problem, as requested by several Oliger Disk System owners.
I have had reports from a few users that indicated a problem may exist in SAFE causing the MERGE command to sometimes not work. The users reported that SAFE would act like it had MERGED the Basic code, return with an "OK" report, but when they would LIST to look at the additional code it would simply not be there. Repeated attempts to MERGE the BASIC into the same program would give the same result. However, when asked for a sample disk that contained the programs that resisted MERGE, nobody could provide me with the sample for one reason or another. Repeated attempts to cause the problem myself would always fail. I couldn't get it NOT to work!
Finally one customer called with a report of the problem, and he had it doing it right then, before our very eyes (and ears)! He told me he would make a copy of the disk having the problem and get it off to me to work with.
I recieved the disk and quickly went to work. The main program on the disk contained Bill Jone's (are you listening Bill?) "SMART DAISY" Basic program, and the Basic code to MERGE was a ten line or so eprom programming subroutine that started at line 9980. The last line in SMART DAISY was line 9520. I loaded the main program and then tried to merge the programming subroutine. As reported, the drive and SAFE ACTED like it had been merged but I sure couldn't see it there!
Further investigation found that I could not get a good merge after Smart Daisy was loaded even after the CLEAR command was used and even when Smart Daisy itself was removed using the DELETE , command!!! I found that <PRINT FREE> would return only 38289 bytes free after SMART DAISY had been loaded and then removed with CLEAR and DELETE , but on power up before any loads the computer had 38652 bytes free. I had somehow LOST 363 bytes of memory by loading SMART DAISY and then getting rid of it!
After running HOT Z AROS to find out just what was going on, I found that the pointers to the variables area and program area were not the same as they are when the computer is first powered up. Looking at where the computer thought the program was showed a lot of gibberish and portions of one of the screen copy routines used on the cassette supplied with the Oliger Printer Interface.
I checked out several copies of Bill Jone's SMART TEXT and found that EVERY ONE of them from the very first was missing those same 363 bytes. They ALL had the same gibberish where there should have been program lines at the end of the basic.
Evidently somewhere along the line (very early) Bill's program had been corrupted, either through glich, cassette data error, stray POKE(s), or whatever. The MERGED code is actually there, but Basic can't find it to LIST or RUN because the gibberish before it in memory confuses it.
Although all of Bill's Smart Text series programs seem to have this same corruption, there are likely to be other programs found that are also like this. Because of the way Basic programs are stored, saved, and loaded on the 2068, once something like this occurs and the program re~saved (using either cassette or disk), it will forever exist because as far as the computer is concerned it IS a part of the Basic program, even though it can't use it or LIST it.
26
“aD
I hope I haven't bored everyone to sleep by now. I've attempted to go through the entire process of how I try to resolve a problem like this reported to me. Sometimes I beat my head against the wall all day long and never get a problem solved. If you have a real strange problem with a certain command or function in SAFE just some of the time, PLEASE put it on disk as a sample and send it with your letter. It can REALLY be a big help!
So, how do you know if a program has this problem? If you cannot use the SAFE MERGE command with it then it is very likely. But the REAL test is to use the command <PRINT FREE> immediately after power up and again after the program is loaded and the removed using <CLEAR :DELETE ,>. If the numbers don't match you can be fairly certain that the program does contain corruption (unless it had self-run and used the CLEAR N command). I will now detail step by step how to fix this:
1) FIND AMOUNT OF PROGRAM MEMORY CORRUPTED:
A) Write down result of the statement <PRINT FREE> immediately after computer power-up. (38652 on standard 2068 w/o any cartridges installed)
B) Load corrupted program. Save variables to disk with the command <SAVE /"vars" VAL>. Clear both program and variables from the computer with the command line <CLEAR :DELETE ,>. Now write down result of the statement <PRINT FREE>. (38289 for Smart Text)
C) Subtract the number written down in 1B above from the number written down in 1A. Write this number down. (363 for Smart Text) This is the amount of memory corrupted.
2) FIND CORRECTED BASIC VARIABLES POINTER:
A) Re-load corrupted program and remove the variables again with the <CLEAR> command.
B) Enter the command <PRINT PEEK 23627+ PEEK 23628*256>. Write down this number.
¢) Subtract the number obtained in 1¢ from the number you just wrote down in 2B. Write down the result.
3) FIND NEW VALUES TO POKE:
A) Divide the number obtained in 2C by 256. Round down to the next whole number and write this down. (MSB)
B) Multiply thé number just written down in 3A by 256. Subtract this product from the number obtained in 2C. Write down the result. (LSB)
4) SET THE VARIABLES POINTER CORECTLY AND CLEAR THE CORRUPTION:
A) Set the variables pointer with the command <POKE 23627,LSB: POKE 23628,MSB> with "LSB" and "MSB" replaced by the numbers written down in 2B and 2A respectively.
B) Clear the corrupted memory by using the <CLEAR> command again.
5) GET IT ALL BACK ON DISK: A) Reload back in the old variables with the command <LOAD /"vars" VAL>. B) Re-save the repaired file with the regular <SAVE /"Filename"> command. The "cleaned-up" program should now allow MERGE to operate and be shorter to
boot!
John L. Oliger 2/88
27
6 SAFE QUESTIONS AND ANSWERS ~
This column wilh answer questions of general interest about the Oliger 2068 Disk I/F and JLO SAFE DOS. 1% you have questions you feel other users of this system would Like to see answered, send them to me at: 11601 Whidbey Dn. Cumberfand, IN 46229. Because my schedule can at times be simply too demanding to akways find the time, I cannot promise to ALWAYS have this coLumn ready for each new issue of Safe Disk Up-date. I wikl only do the best I can...
U7. Lge
What is the latest version of SAFE and what new features does it provide?
The current version of SAFE as of today (1/25/88) is V2.41. The last commands added to SAFE were the MERGE command, the SAVE //"Filename" command, and the NMI “N"EW key function. The MERGE command is a simplified but very fast merge that appends additional Basic code and variables onto an existing Basic program. The SAVE //"filename" command is an alternate method of saving to disk that by-passes the "FILE EXISTS!! 5 SECONDS TO ABORT" warning message. It is intended for use where a file overwrite is expected and the delays caused by the warning message are not desired. The NMI "N" key function allows a complete reset of the computer very easily w/o having to turn off your computer. It is like adding a reset switch without physically installing the hardware.
How much does it cost to update my SAFE V2 eprom?
I charge $5.00 if you return a SAFE eprom to be recycled or $10.00 if you do not. This is for all lawful owners of SAFE V2. SAFE V1 owners can upgrade to the latest SAFE V2 by sending $10.00 in addition to the above. This is a one time payment for the V2 software. I feel the $5.00 or $10.00 is about the cost for post/pack/handling and possibly the cost of another eprom. Thus, once you have SAFE V2, you are NOT charged for it again. All prices listed above include postage. If you wish defaults of other than 40 track, double sided, 6ms head step, ASCII COPY /, then you need to specify when ordering.
I own the Oliger 2068 Disk Interface W/JLO SAFE and use an AERCO printer interface with the Olivetti PR2300 ink jet printer. I have tried to use the built in SAFE printer driver and screen copy routines with my set-up without success. Can you help?
The Olivetti PR2300 printer and Aerco printer interface, used together, are NOT directly compatible with the printer driver and screen copy routines built into SAFE. The Oliger 2068 Printer I/F and Olivetti or most other combinations of Aerco I/F and printer work without a hitch. The trouble with the Olivetti/Aerco/Oliger Printer driver combination is caused by the way the Aerco I/F itself requires the software to finish toggling the printer's STROBE NOT line by reading the port again immediately after writing something to it, which the Oliger software does not do. The Oliger I/F does not require the software STROBE NOT read toggle. The fix for this is a simple modification to the Aerco I/F board itself, which will make it self-toggle and as such cause it to work with any combination of driver/printer you may have.
To perform this modification to your Aerco Printer I/F:
28
7,
1)Cut the pce board trace going to pin 11 of the 74LS10 chip, right by pin 11. 2)Install a jumper wire from the 74LS10 pin 11 to the 74LS02 pin 5.
I have the latest version of SAFE (V2.41) and find that sometimes the new "N"ew NMI reset function does not work, but other times it does. It seems it usually won't work after it has previously been used. Is something wrong with my board or new SAFE eprom?
There is nothing at all wrong with your hardware or firmware. This is just a peculiarity in using this function in the way the hardware is designed. It is caused by holding the NMI button down too long when pressing it for the new reset. The correct procedure for using the new reset function is to hold down the "N" key and then to give the NMI button a short press (just a tap) to cause the reset. If the NMI button is held too long, the reset function will simply not work the next time it is tried, unless an error or anything that activates SAFE happens before then. When "locked-out" like this, no harm other than it not working again will occur.
After a <BREAK> key press during disk operations, I find the only way to get back to default settings is to turn both the 2068 and disk drive off then back on again. We need a way to clear SAFE and anything the 1770 is doing without losing everything. Any ideas?
You're assuming incorrectly here. If you BREAK during a disk operation and a return to Basic is made, SAFE has already taken care of all this as much as it can! SAFE is in good shape to do whatever you want, and has sent. a command to the 1770 disk controller to abort whatever it is doing. What you are seing happen is that the 1770 chip itself HAS stopped everything it was doing, EXCEPT that it will keep the drive motor turned on until it sees several rotations of the disk. If the drive selected does not contain a disk or has its door open, the 1770 will leave the motor on forever because it hasn't seen the disk turn its allotted number of times. All you need to do is insert ANY disk into the drive or use the <LET /D=n> command to select a drive that IS on-line with a disk installed. Then the 1770 will see the disk turn a few times and stop the motor. Any write operations you might have started and broke into WILL NOT OCCUR because SAFE aborted them and told the 1770 to abort too. ALL disk systems that use the motor control function of the 1770 have this same quirk, because this is how the 1770 itself does it. There is NO software command to stop the motor, just let it see the disk turn and it will stop itself!
I get occasional "TOOTS" when using the MOVE/ command within a Basic program, but I don't seem to when I use it in direct mode. It appears to toot when the source light is on, as if SAFE is trying to read before the head has fully settled. What's wrong?
Your disk set up is marginal if you get these warning toots, period. Try relocating your drives and/or rerouting the disk controller cable. If you tried the slowest head step speed and it STILL does this, then the problem is NOT in SAFE trying before it should. Most problems of this sort are found to be caused by interference and are usually cured by rearranging the drive and cable's placement. The problem occurring within a program rather than in immediate mode is coincidental. SAFE has no idea if the statement is immediate or within a
29
program and the exact same code is executed either way. More likely you do the move more often using the program you mention so the odds of the error occuring is greater.
You say SAFE will allow from 10 to 255 tracks per side of the disk? What kind of drive, if any, allows more than 82 tracks per side?
None of them do, at least right now. But if tomorrow the drive manufacturers doubled the amount of tracks allowed per side from 80 to 160, SAFE would be able to use the extra space inmediately! It happened before when they went from 40 track to 80 track drives. It is VERY possible it will happen again in the future as drive manufacturers become better at making the disk stepper motors and heads. As far as I know, SAFE is the ONLY DOS around that is flexible enough to allow this. Most others would require substantial revisions if it would be possible at all!
I see no real benefit in having the variables load in along with the MERGEG program, and I think it would be better if the LOAD /“name" VAL command cleared out the old variables before loading in the new. Any comments on this?
Because of the way MERGE was added to the SAFE code in the eprom, and because a regular Basic program DOES contain variables in a normal SAVE on the 2068, it used MUCH less eprom code space to have MERGE load in the variables too, rather than just the program. Any subroutine saved to disk to later be merged into a master program should have its variables removed by using the CLEAR command before saving to disk, unless these variables will be needed by the main program. The reason LOAD /"name“ VAL doesn't erase existing variables is to make the command more flexible. Use can always CLEAR and the load a VAL type file to get only the new variables the way it was implemented. If it always cleared the old variables you would HAVE NO CHOICE and flags used by a running program that might be needed would be lost.
SAFE supports several different printers with its COPY/ command. I feel that we don't need several different copy routines, but only one. Why don't you remove these routines to open up more code space to implement new commands?
Most users of this disk interface feel that only one or maybe two of the several copy routines are needed in SAFE. Only trouble is, each feels that the one that supports his printer is the one that's needed, not the other. The next guy thinks it should be a different one. It would be much too complex to install a different copy routine in each different SAFE eprom I program. ‘This would waste more time than if I devoted the same energy to making portions of the code more efficient and opened up a little room this way. The simple fact is that most people LIKE the ease of using the COPY / command or the NMI copy function. I do myself! If I took it out, I feel there would be a definite loss
What is the purpose of the slide switch (sW1) right next to the NI button on Disk Board B? Only reference I have come across is step 5 on page 4 of the Oliger Disk I/F User's Manual.
This switch is only on the "REV A" disk board B. It was intended to be used to switch between the two 8K "halfs" of a 27128 eprom. The idea was to have my own SLO SAFE DOS on one half (active when switched in the right "SA" position) of a 27128 eprom and Ray Kingsley's OXDOS (active when switched to the left "OK" position) in the other half. If switched into SAFE from OKDOS, you were to use the RESTORE /S command to initialise SAFE without a reset. Ray was going to have a similar command to initialise OKDOS when going from SAFE. Only trouble with all this is that Ray never did finish his OXDOS, and its been a year and a half since I've heard from Ray at all. I am sure now we will NEVER get a complete OKDOS fron RAY, which is really a shame because he had most of the core of the DOS complete, needing only to tie in the DOS to Basic. Oh well, we all go on. I pelieve Ray didn't think he would get back financially what he would have needed to put into the DOS in his time, to make it worthwhile. He may NOT have..-
30
SAFE BUGS that are not BUGS- ed
Seems that 1 have a blank page to fill, so will give this gem to the SAFE SD0S section, Ole John must dread getting letters from my house, but he's right prompt on answering them, | Some of the questions that he has answered In this section came from you know who. And you know what? John does have answers! The rest of this will outline a problem that 80 track disk user may have encountered as | did. What happend was, | got a Diské back that had several files glitched up. Checking the balance of my pre-recorded disks, | found all of the 40 track disks were OK, but ALL of the 80 track disks had the same glitched files, Now that aint good for me reputation! Thankfully only one of them 80 track
buggers had been sent out, This sneaky bug only occurs when the 8 track disk "is more than half filled",
1 got my Master 80 track disk out and began to copy It. Now my drive set up Is Three 80 Track disks as drive 0, 1, and 2, with a 40 track as drive 3. So It Is easy to use drive 0 and 1 for copying with the MOVE/ function, How do | copy 40 track disks? Well | just remove the DATA cable from the SAFE controller, and plug on the data cable of another drive system that has 4 40 track drives and use MOVE/,
But, using the Master 80 track disk, the first MOVE/ resulted in the same files being g!itched, Funny thing, when 1! LOADED a program from the Master disk and did this number: LET/d=1: SAVE/"title", the warning toot would sound, then the program would SAVE A-OK, So, your scribe did MANUAL transfers of programs to about 10 disks, Ah Ha! | figgers, | got ole John now! So | packed up a copy of the master and a glitched up disk and sent them off to him, John's reply came bouncing back. Now I'Il quote:
1. The trouble you are having with MOVE/ is caused by how this command Itself works, MOVE/ is a carry over from SAFE V1. I+ depends upon the Number of Tracks to be MOVED and the Number of Sides to be MOVED "as set with the LET/t=n and LET/s=n commands", The MOVE/ is using the DEFAULT vaiue of
40 as Is set in the SAFE EPROM. So, It is moving only the first 40 tracks to the destination drive. But, the entire Catalog, and the Pointers are belng
moved "because they are stored on track zero", But the DATA that Is being pointed to will not be there after track 40.
2. The cure Is easy. Just preceed your MOVE/ command with LET/t=80 when MOVING/ between your 80 track drives. You can think of the MOVE/ command as being dumb because you have to tell it to disregard the default parameters (40 track and 2 sides), while MOVE/"file name" is smart and can figure this out. | need to explain this better when I revise the
» 9%.
manual, END QUOTE.
Ourn! | thought | had him! But aln't John nice? He could have just told me | was dumb Instead of saying his MOVE/ was dumb, Oh well! Funny thing
Is, 1 had made a DISK COPY program that repeatedly uses MOVE/ to copy disks between any track combination of drives AND | INCLUDED the LET/t= and LET/s= conmands, Then when dolng the MOVE/ in the
direct mode the LET/ was left out. | didn't think | needed the LET when operating with two drives having te same number of tracks.
i have some more space to fiii so will do it with programming. Here Is a way of using the disk catalog as a MENU to select a program to load. <100 CAT/: INPUT "Key in TITLE of Basic Program" ;a$: LOAD/a$ >. You can embellish this with optional selection of a different drive, as: 100 INPUT "Enter drive number";a: LET/d=a: CAT : INPUT "<1> Basic or <2> Code Program?";b: INPUT "Enter Title only";a$: lf b=1 THEN LOAD/a$ > <110 IF b=2 THEN LOAD/a$ CODE: GO TO menu >. In both examples, a INPUT prompt Is printed to the Catalog Screen at the bottom area and you are using the catalog data for Information.
Here's another bug that ain't a bug. Quite often I'{] FORMAT a 40 track disk to 41 tracks In order to cram more programs or data Into the disk, Once | tried MOVE/ to copy such a disk, and It didn't work. The reason was that the destination disk was formatted to 40 track, Thats like trying to walk on two straight tines at the same time. Incidentally, you CAN FORMAT a 40 track disk to more than 42 tracks, say 50, The disk directory will show the DISK FREE space as If you have 50 tracks, but the figure will be erroneous, All that | have ever been able to stuff Into a 40 track disk is the contents of 42 tracks, The diskette manufacturers only guarantee the space for 40 tracks. On 80 track disks one can usually format 82 tracks (80 guaranteed). The practice of formatting extra tracks Isn't advised because the read - write head Is extending beyond the disk drive mechanical range as well. 41 and 82 might be safe enough, but beyond thet Is pushing I+ for a little bIt+ more data space, Why not walt until one of them new 250 track disks comes out, Then we can use the range of SAFE that John provided, though the disk capability did not exist.
w tot
*x*ke ~=TS-2068 COMPUTING WITH LARKEN DISK *****
BY LARRY
32
**
*k
**
*k
ak
KENNY
LKDOS Language Discussions
Questions and Answers
Machine Code Routines
Ram Disk
Integrating Disk Drive Systems
The LARKEN DISK Section
Mr. Larry Kenny, RR-2, Navan, Ontario, Canada K4B 1H9, is the owner of LARKEN ELECTRONICS. Larry is an Engineer and has developed the Larken Disk Drive System for the TS-2068. Other significant developments by Larken is the abbreviated Disk Driver Cartridge which interfaces to other Disk drive system. This is called "The LKDOS Cartridge" and it provides a "Dual DOS" when used with either the Oliger SAFE or the Aerco FD-68 disk drive controllers. One more significant development by Larry is the Larken RAM DISK, an extra memory device which "acts as a disk drive" for storage of data.
Larken Electonics is one of our most valuable Cottage Industry supporters of the TS-2068 and we need Larry to continue to develop the hardware additions that only an engineer who knows the TS-2068 can provide. This section in UP-DATE is devoted to providing information about the Larken Disk System(s) in the same manner as we provide the section titled "Computing with SDOS, by John Oliger. These two Cottage Industries, The Oliger Co., and Larken Electronics, form the nucleus of our TS-2068 Disk Systems support because of their continuing up-dates of their systems and their constant quest to produce new and inovative hardware systems.
This section is provided as a forum to support all aspects of the Larken Electronics system users. Larry has promised his inputs, and already UP-DATE has had outstanding article support by two avid Larken Disk users, George Chambers and Bob Mitchell. The more who joins in, the better the support. The Larken Disk systems began late, after two others had quit, leaving the users without support (see orphans). Just now, the TS-2068 users are finding out about what Larken Disk has to offer, to both the first time disk user and to users of other disk systems who want a inexpensive "second pos".
33
Accessing LEDOS from Machine Code by L
The dos is easy to access from machine code u ing the internal jump table starting at address 120 in the cartridge.
The jump table is a list of 20 or so entry points to the most
often used sub-routines in the dos.
Any changes or different versions of the dos in the future, do not affect these addresses, so utility programs dont need to be modified incase a different version of Lkdos is ever used.
Any machine code program (or Basic program) written for Lkdos is compatible with any Lkdos cartridge useing a different disk interface, (Aerco, Ramex or Oliger).
The routines can be used to load or save complete files or just load or save 1 block etc.
A complete list of all the Subroutines and variables in the Lkdos is supplied with the Disk Editor package. C#10.00)
Note - all numbers in the programs below are in decimal
arry any
xeeeEHERE Two Small Ubility Programs for LEDOS #x«xeHHHEH —- Addresses and dos routines used by FREEBL and MOVCAT -~ data EGU 8328 - Address of data in the disk buffer curtrk EGU B221 ~ block number for TRACK to seek
-- Commonly used subroutines in the Lkdos jump table -~
SAVEBRF EGU 120 -~ Save the buffer to current block LOADBF EQU Las ~ Load the buffer from the cur block TRACK EGU 126 - Restore to track O the seek (curtirk)
FREE BLOCKS This routine allows you to find the number of free blocks with out displaying the catalog. It will return the number of free blocks in the BC register, so it can be accessed from basic with PRINT USR FREEBL. or LET »=USR FREEBL .
FREEBL DI
CALL 98 - turn an the Lkdas cartridge LD A,O LD (curtrk),A -~ move the disk drive to CALL TRACK ~ block O (side O track 9) CALL LOADBF ~ load disk to buffer LD C,o ~ set counter ta Go LD HL,data cd t HL ta start of track-map USED INC HL ~ first block always used anyway LD A, CHL) CP 355 ~ B35 marker means ‘end of track-map JR Z,EXIT ~ if so then exit CF 245 ~ 249 marker means ‘block used‘ JR Z,USED ~ if used then move on to next one INC Cc - must be a free block,update count JR USED ~ continue searching for free blocks LD B,O LD A, (78) ~ turn cartridge off
OOLIO EL aog200 RET
MOVE CATALOG te
Th routine loads the catalag from the disk, and then moves it from the dos ram to address 50000 where you can search ar examine it from basic.
O0O10 MOVCAT DI
oo020 CALL 98 ~ turn on cartridge LD A,O ~ move the drive head to LD (curtrk),A - black oO CALL. TRAC QO0GO CALL LOAD ~ load disk to buffer Qoo7O LD HL,data - mave the catalog LD DE, So0o00o ~ up to high memary LD BC, S090 LDIR LD A, (98) - turn off the cartridge EL
Oo.s0 RET
***** THE DISK DRIVE ORPHANAGE ****
FEATURING
THE RAMEX MILLENIA K AND TIMEX OF PORTUGAL
DISK DRIVE SYSTEMS
"Let us feed the good Orphans"
36
The Hungry Orphans
There are two TS-2068 Disk Drive Systems that are still in use despite the fact the their manufacturers have discontinued support of the’ systems. These are The RAMEX MILLENIA K, and the TIMEX of PORTUGUAL Disk drive systems. Information sources for these disk drive systems are scarce and are drying up as time goes by.
UP-DATE will publish every bit of information about these "orphan" disk drive systems that we can lay our hands on, because few articles can be found in other publications to support the users. To make space for supporting these systems we will go to a small print that may not be comfortable reading. We want INFORMATION VOLUME about these systems. The users will appreciate that more than they will “scarcity but larger print". Take a tip- each of the pages will "blow up" to exactly four pages of letter size paper that can be cut for a notebook. Any copy shop can do that for you for about a dime a page.
As is the case in this issue, much of the programming given in "Disk Specific" articles consists of useful routines that are adaptable to all other disk systems and cassette use, when one sifts out the disk syntax. So, all other TS-2068 users BE ALERT and dig out your binoculars to catch the universally usable programming.
UP-DATE invites all inputs to the "Orphanage Disk" section by clubs and individuals who want to help keep these systems alive. In particular, the users need information about REPAIR SOURCES. They also need EXCHANGE of PROGRAMS. ALL useful information received will be published (albiet, small type). Input articles should be on letter size pages and typed in ordinary PICA 10 CPI type, which will be reduced to what you see in the next pages. The goal is MAXIMUM INFORMATION!
This issue of UP-DATE presents a good source for RAMEX
(SPDOS) information in Munson Cookayne. Munson is also a source for software. So you can think of the package of articles by Munson as being dual purpose, FREE information and Source information. Viva la RAMEX Users!! Viva la TOS Disk Users!! Both groups contribute to Viva la TS-2068 Users!!
‘A LITTLE ABOUT ME by: Munson H. Cockayne, Jr. BSCS
Hell you know my name but can you pronounce it? The last ane is pronounced Like “ocoaine”, It seems that in middie English “coc” was pronounced “cos” (long 0) as is witnessed by the liqueur known as "Coo’s” that is still popular in England Enough about that.
I am a native Floridian, second generation. I have written joveral articler and letters for TDM, SPDOS SURF, and now TS 2088 UPDATE. Among my credentiala is a BS in Computer Science ‘and I an working on my MS et present. You may or may not have heerd of the University of Central Fiorida (a etate university) but that is where I go to school and offers one of the two PHD programs in Computer Science in the Southeast. Being a graduate of this program is my long term goal.
My first computer ie @ ZX81 kit that I got by mail order. Putting that one together and seeing it work really got me started on anew career. I never thought that I would become a computer scientist simply because of project kit!
Sone of you have bought software and hardwere from the small company my brother, Robert, and [ run. It is called K-1.5.8./computers. There are three (even smalier) divisions
1) K.1.8.8./aoftetuf? (software). 2) K.1.8.S./hardstuff (hardware). 3) K.18.5. eb (from wheace the hardware
Most of the money earned goes to the third department to keep the TS line alive and thereby keep our business going. It makea sense to us and is a great source of fun. fos, some people derive fun from painstaking work. We seek to fill the niches too small for the "big guys” to get into (not enough profit)
Computers are a big part of my life but my mainstay in life is my family. My wife, Chee, is everything I always thought wife would be and then some. Our three children (Tina, Sandi and Trey) delight us vith their company.
My philosophy is simply, “Life is an adverture. Make it the best sort for yourself and any you meat along the way." I am sure thet there are many of you with essentially the same philosophy. My favorite catch phrase is ‘Keep It Simple Stupid!
I hope that was brief enough to keep you from going to sleep, Bill promised that he would edit it for me.
THE HISTORY OF THE RAMEX MILLENIA K by Muason H. Cockayne, Jr. 3SCS
There once was a little orphan computer named TS 2068 Like all orphans, it was not responsible for being an orphan Tn fact, it was’ well designed and a pretty little thing. However, its parent, Timex, decided that raising the infant through’ proper marketing and support would not be a financially rewarding experience. So it was abandoned before its first birthday, Timex is alive and marginally sound but I for one have not been able to use their watches since that fateful day.
Along came the carpet baggers. Ranox was Just one of many of this specie. They sought to exploit the poor orphan by making grandeous additions. When the orphan vas unable to support their stendard of living, they abandoned their addition.
None of these wonderful people ever nade an effort to simply expand their arena of endeavor the vay so many other computer oriented companies were doing. No, if they couldn’t have all their eggs in one basket, they would put them all in another basket end too bad about the old basket.
Maybe this is a little cynical but that is the way I see ‘too much money from too few. Wall We can end will keep the orphan until there are no more parts to fix them. Maybe by then wo will know enough to be able to design replacement parts ourselves. Companies are proving every day that chips can be reverse engineered without breaking any patente. As long as wo support each other and don’t get greedy, we can and will keep this computer alive!"
38
SHELL by: Munson H, Cockayne, Jr. BSCS
I am gure that some of you read my article on this subject in TDM but Iam algo eure that you will find thie expansion of the concept a useful one. The listing in this article is a "abell!,| Je allows you to OOPY or ERASE any or ell of the files on a disk
Let ne pause to define the term ‘shell’. A shell is a wrap around the Disk Operating System, DOS, just like a olam’s shell wraps around it. Only, in this cage, the shell not only hides the contents, but it also makes the contents simpler to use.
Now for the program, the first pert asks you what you want todo in a series of questions. You never even have to hit enter.
‘The second part of the program creates a sequential file using the screen channel. This redirects the screen output to a sequential disk file. While this part runs, only disk activity will be noted until the end vhere the filenames are read back into a string array. Hore you will hear repid keystrokes an the input comes from the disk file.
The next part lists the filenames to the screen. As you mark files for action, they are converted to inverse video. When you are done, the requested action is taken on the files you indicated.
In operation, the number keys, 5 to 8, are used to control the cursor. The direction corresponds to the arrows above the keys. The "M" key marks a filename for action. The “U" key unmarks a file, The "N" key causes the next page (if all the files won't fit on one page) to be displayed. The “D" key tells the program thet you are through marking files. A safety is inatelled before an ERASE conmand is followed. Just indicate your decision by pressing “Y" or “N’
This operation is very simple. After all, the operation of a shell should be simple or it isn’t easier to use than DOS. It should accent the power of the DOS not take away.
Lines 1 and 2 are for those of you who have SPDOS V1.1 and ish to make this an AUTO exeoute file, All others may omit ese Liner
© REM errereeterrtrrre iret sc ooerirg * * * SHELL * * COPYRIGHT @ 1987 *
* Munson H. Cockayne, Jr. BSCS * * +
emenrenerrntereerent i ciao ining
1 ON ERR GO_TO 1: INPUT “Press ENTER" joS 2 ON ERR RESET 10 PRINT #1; "1) BRASE"'"2) MOVE"
20 PAUSE 0: LET c#= INKEYS: PRINT #1; "The files are on drive?”: PAUSE 0: LET
30. INPUT. r= INKEY$ : LET di= CODE r$-46: IF did OR d1<i THEN GO TO 920 ‘40 IF c$ ="2" THEN INPUT ;: PRINT #1;"To drive?”: PAUSE 0: LET $= INKEY $ : LET d2= CODE r$-48: IF d2<1 OR d2>4 THEN GO TO 540 50 INPUT; 100 DIM t3(149, 12) “110 CLS, 120 PRINT #4: OPEN #2," CAT “: PRINT di
130 PRINT #4: CAT *",: PRINT di 140 PRINT # 4: CLOSE’ #2
150 PRINT #4: OPEN # 5," CAT ": PRINT di 180 LET cnt=0
470 FOR ist TO 10: INPUT #5;f$: NEAT 4
180 INPUT #5; 3
190 IF £$(2)=" CAT " THEN GO TO 220
200 LET cnt=ont+1
210 LET t8(ont)=£3(2 TO )
220 INPUT #5;f$: IF LEN £$=0 THEN GO TO 250 230 INPUT #5; £3.
240 Go TO 180
250 PRINT 24: CLOSE #5
260 PRINT #4: ERASE “ CAT “,: PRINT di
00 PORE 29050, 0: REM Shift to all capa mode 1000 FOR p=i TO cnt STEP 40
1005 FOR i=0 TO 19
1010 IF p+l <= ont THEN PRINT t9(pti)
1020 IF p#i+20 <= ont THEN PRINT TAB 16;t9(p+i+20) 5 1030 PRINT 1035 NEXT i
1040 GO SUB 2000
1050 CLS 1080 NEXT 1100 FOR i=1 TO ont 1120 IF CODE t8(i)=20 THEN IF o$="i" THEN GO SUB 3000
1120 IF CODE ¢3(i)=20 THEN IF o$="2" THEN PRINT #4: MOVE t$(i,3 TO ),"": PRINT di, d2
1140'NEXT i
1090 POKE 29650, 0: REM Shift to nor 1900 IF c$="2" THEN PRINT #4: CAT ““,: PRINT d2 4910 IF cg="1" THEN PRINT #4: CAT "",: PRINT di
{990 GO TO 10000: REM Just stops without stop error report 2000 LET column=0
2010 LET row=0
2020 GO SUB 5000
2030 PAUSE 0: LET r= INKEYS
2038 LET index=p+(column=16)#20+row
2040 IF r$2"7" THEN IF row THEN GO SUB 5100: L&T rowsrow-i
Cont rep het 3
1 mode
Shet!
2080 IF r$="6" THEN IF index+i <= ont THEN IF row<19 THEN GO SUB 5100: LET row=rovet
2080 IF r$="8" THEN IF index+20 <= ent THEN GO SUB 5100: LET column=16
2070 If r$="" THEN GO SUB 5100: LET column=0
2030 IF r$="N" THEN RETURN
2090 IF rg="D" THEN LET p=143: RETURN
2100 IF rs="N" THEN IF CODS tS(index) <> 20 THEN LET t $(index)= CHRS 20+ CHRS 1+t$( index)
2110 IF r$="U" THEN IF t$(index,1)= CHRS 20 THEN LET t$(index)= t8(index,3 TO +" *
2120 GO SUB 5100 2130 GO TO 2020
3000 PRINT #1; "ERASE:
“;t(i,9 TO );"P": PAUSE O: LET r= INKEYS
2 INPUT ; 3010 IF r@="Y" THEN PRINT #4: ERASE t$(i,3 TO ), -3020 RETURN “
5000 PRINT AT rov,column; OVER 1; FLASH 1; ‘BOLO RETURN 5100 PRINT A T row, column; t$(p+(column=16)*20trow)
5110 RETURN
‘There ere a few notable limitations to this little shell. Line 100 DiNensions t$ to 143 strings. Even though there are i44 filenames possible with SPDOS, our little CAT file will use one of these. It is skipped by line 190 since it will not exist by the time we start marking files
it cannot MOVE BASIC program is I still find several for
is that thie on its own. I want to move
oft
Another less obvious limitation files thet really crowd memory beoaue so tieing up a fair amount of menor: it to be a great littie utility when files. The memory problem just doesn’t crop up that me.
If there are any questions/problems, write tot 342 Trotter Court Sanford, FL 32773
FRACTIONS: HARD FOR YOUNGSTERS ‘AND A PROBLEM FOR PROGAMMING by: Munson H. Cockeyne, Jr. BECS
Those of you who have had to help your children with fractions in arithematio have probaby wished you had a driller for them. The following program can provide that driller and ite ‘two major subroutines can be used as a basis for your own Program.
The Greatest Common Multiplier (GCM) routine uses an old trick to quickly find the GCM to enable finding the reduced form of @ product and to enable adding end subtracting. It only uses tvo compound lines, 100 and 110, to eocomplish this feat.
‘The program is self explenitory when RUN and I have placed comments where I thought pointer might help. In line 9, CONSTANT ig assigned a value of 10 but it can be changed as needed for your youngster. It sets the upper value limit for the numerator and denominator. In line 1900, the problem loop is set to 25 iterations end this oan be changed as you see fit.
The scores are saved in @ sequential file for your viewing This file hac to be started with the command line:
LOSE
PRINT #5; "SCORES": PRINT #4:
This will initialize the file to contain the word ‘SCORES’. The econd program will read this file to the screen or to a printer when you want to see it.
1 BEM @1086 K. 1.8.5. /softetutt Munson E. Cockayne, Jr. BSCS
2 ON ERR GO TO 7: PRINT #4: OPEN # 5, "score: 3 PRINT #4: OPEN # 6, “temp”
5 PRINT $6508
8 GO TO 4
7 ON ERR RESET : PRINT #4: scores”,
9 LET CONSTANT=10: REM THIS COMPONENTS
10 GO TO 1500
99 REM
THIS ROUTINE (LINES 100 TO 110) RBTURNS THE GREATEST COMMON
DIVISOR THAT EXISTS FOR THE PAIR OF INTROERS IN M AND K.
CLOSE # Br: ERASE
SETS UPPER LIMIT OF FRACTION
PRINT 4:
100 TF NOT INT n THEN LET god= ABS m: RETURN M10 LET t= INT (m-nx INT (m/n)+. 008): LET msn: LET
ConT_>
Go TO 1
00 199 REM
=
39
THIS ROUTINE PRODUCES THO DISSIMILAR INTEGERS FOR MAKING A FRACTION 200 LET N= INT ( BND *CONSTANT)+1 210 LET D= INT ( END *CONSTANT) +1 220 IF NeD THEN GO TO 200 230 RETURN
209 REM THIS ROUTINE PRINTS A FRACTION AT THE COORDINATE X.Y (UPPER
RIGHT BAND CORNER] USING NUMINATOR AND DENOMBRATOR. )*( LEN STRS NUMERA
300 PRINT AT X,Y#2%( LEN STR NUMBRATOI ‘TOR=2) ; NUMERATOR
910 REM PLOT 112,88: DRAW 24,0
311 PLOT Y#8,175~(X+1)*8+1: DRAW 24,0 320 PRINT AT X+i,Y+2%( LEN STRS DENONINATOR=1)+( LEN STRS DE
NOMINATOR=2) ; DENOMINATOR 330 RETURN 1498 REM ‘THIS ROUTINE 1S THE MAIN BODY FOR THE FRACTION ARITHEMATIC PRACTICE. 4800 CLS
1505 POKE 23692, 255
4510 PRINT. AT 21,0; "YOU ARE TO PERFORM DESIGNATED OPERATIONS ON THE FOLLOWING | FRACTIONS. ADDITION, SUBTRACTION » MULTIPLICATION, AND DIVISION WILL ALL BE PRESENTED R ARDOMLY. ”
1520 PRINT ‘’ "PRESS A KEY TO CONTINUE” 1530 PAUSE 0
1540 CLS
1550 RANDOMIZE
1570 LET RIGHT=0
1990 FOR I=i TO 25: REM THIS IS PROBLEM LOOP (25 ITERATIONS) 2000 DRAW 255,0: DRAW 0,175: DRAW ~256,0: DRAW 0, ~175
2001 BORDER 4: INPUT ;
2002 BEEP .1,20: BEEP .2,10
2010 PRINT AT 1,13; "FRACTIONS"; AT 2,6;°A PRACTICE SESSION” 2020 PLOT 0,141: DRAW 285,0 i
2100 GO SUB’ 200.
2110 LET X=10: LET Y=14: LET NUMERATOR=N: LET DENOMINATOR=D: GO SUB 300
2140 LET NisN: LET D1=D
2150 GO SUB 200
2460 LET X=13: LET NUMERATOR=N: LET DENOMINATOR=D: 2170 LET N2=N: LET D2=D
2190 PLOT 112,52: DRAW 24,0
2191 PLOT 112,51: DRAW 24,0
2200 LET FUNCTION= INT ( RND *4)41
2201 IF FUNCTION=1 THEN GO SUB 3000 . 2202 IF FUNCTION=2 THEN GO SUB 3100
2203 IF FUNCTION=3 THEN GO SUB 3200
2204 IF FUNCTION=4 THEN GO SUB 3300
2210 INPUT AT 1,0; "ENTER NUMERATOR’
2220 INPUT AT 1,0;"ENTER DENOMINATO!
4
2228 IF ((FUNCTION=2) AND (N1/D1<N2/D2)) THEN LET AR=~AN
2230 IF (NUM=AN AND DENOM=AD) OR (NUM=AN/GCD AND DENOM=AD/GCD) T HEN GO TO 5000
2240 GO TO 6000
2800 PRIN? #1;"PRESS A KEY TO CONTINUE"
2810 PAUSE 0
2820 CLS.
2990 NEXT 1
2003 PRINT #6;RIGHT
2992 PRINT #4: CLOSE # 6
2993 PRINT #4: MOVE “temp”, "soor: 2904 STOP
3000 PRINT AT 8, 15; “ADD”
3010 LET N=D1: LET M=D2: GO SUB 100 3015,
3020 3025 3030 3040 3050 GO SUB 100
3060 RETURN
3100 PRINT AT 8, 12; “SUBTRACT”
3110 : LET K=b2: GO SUB 100 3115
3120 9125 LET AN= ABS (M-N): LET aD=Diap2 3130 GO TO 3030
3200 PRINT AT 8, 12; "MULTIPLY"
3210
3220 3230 GO TO 3030 3300 PRINT AT 8, 1: 3310 LET AN=Ni*D2. 3920 LET AD=DisNz 3330 GO TO 3030 5000 LRT RIGHT=RIGHT+1
5010 LET X=17: LET DRNOMINATOR=DENOM: LET NUMERATOR=NUM: GO SUB
GO SUB 300
AT 0,0;8U4 AT'O, 0;DENOM
5020 LET N=NUM: LET M=DENOM: GO SUB 100 5030 IF GCD <> 1 THEN LET DBXOMINATOR=DENON/GCD: LET NUMERATOR= LET Y=20: PRINT AT 17, 18; GO SUB 300
5040 GO TO 2800
8000 BEEP .b,-10
6010 PRINT AT 20,13; BRIGHT 1; “WRONG*
6015 “PRESS A KEY FOR RIGHT ANSWER": PAUSE 0: INPUT ; 6020 LET DENOMINATOR=AD: LET NUMERATOR=AN: GO SUB 300
6030 PRINT AT 17,8; FLASH 1; "RIGHT => 6040 LET NeaN: GO SUB 100
6050 1 THEN LET DENOMINATOR=AD/GCD: LET NUMERATOR=AN/ cep: 0: PRINT AT 17,16; GO SUB 300
6080 GO TO 5040.
CHECKER” A SHORT LESSON ON SPDOS by: Munson H, Cockayne, Jr.
se witohig,shoct Leason 20 SPDOS, 1¢ many ways, that SPDOS oan be ut bly, programmers. thie Ia not to imply that if you sembly proaranner, you cannot uss this article or the program berein contained: To the contrary, you may find it very useful.
BSCS
Tam going to reveal one of
The SPDOS system oall is one that checks for a fill a existance on 8 dink. If you try to load a file that” (snot ot your disk, SPDOS will create an error that cannot be trepped by the usual’ ON BRR GOTO. Try it! It can leave you vith a locked up computer, forever trying to GOTO and always ERRing.
The only satisfactory solution to this situation is mbiy. There is a hook code cail that can be made to SPDOS. Some of you may be familiar with some of the book routines if you are assembly programmers end were once SURFers. But let's Bet on with the program,
According to the SPDOS Newsletter #2, there ig a section of nanory sat agide by SPDOS to hold headers for files much the seme vay BASIC uses the DE and IX register pairs to hold the of a file header and ite length. The address of this bender ares ie fixed at £420 hex or 86400, The map of thle aren is ap follows:
sine Eilewyee tone byte) lename (ten bytes) Baza gad eaar Zeros (18 byti The start bytes are the starting address of a tyte file, the Tiree lie to sxecute fora BASIC program, or seror for any other type of file. The filetype cen be 0 for BASIC or 3 for
tyte file. (I vill leave the other types for another article or for you to figure out.)
The hook doesn’t work unless you tell it what you want to do. For the function in which we're interested, the B register communicates the function desired. The hook we will une is
This checke for the file oa the disi
B= 13
With theso prerequisites met, we wake the call to E490
(58612), That is where tae hock code is. Now we go for tho program.
ADDR CODE MIEMONTC —— CONMENTS
F400 2ASD5C MAIN LD HL, (chad) get BASIC pointer
F409 7B. FIND LD A, (HL) Bet the character there F404 FB24 cP 24 is it “s°?
F406 2817 JR Z,VSTR yes, jump to $var evaluator F4og FE22 cp 22 ie it "7
FAOA 23 TkC BL point to next char
F408 2076 JRNZ,FIND oot **", loop
F40D BS Pose itu nave pointer
R4OE O1FFOA LD BC,OAFF set counters
Fail 78 GETC LD A, (HL) get ohar of string
Faiz o¢ Te ¢ Angrament count
F413 23 TNC tt point to next char
Fai4 Peg? cp 22 is this one “""?
F416 2802 JR Z,DOLN yea, jump to length evaluator F418 10F7 DJNZ,GBTC 0, loop to max of ten cher F414 0600 DOLN LD _B, 00 eloar counter
Faic #1 Por iL get start of string
FA1D 185F ‘JR DOHD jump todo header
Fair 23 STR DEC BL. point back one char
F420 TE LDA, (HL) get var namo
F421 EeDF aD DF convert it to upper case F423 FS PUSH AF gave it on stack
F424 2A4BoC LD BL, get start of vars area F427 EDBBS95C LOOP LD DE, get end of vars area
Fazb iB Dac DE point back one
F42c FL POP AF estore converted cher Fa2D BS PUSH HL save current pointer
FaZe AT AND A clear carry flag
F42F EDS2 SBC HL,DE check for end of vars
F431 EL POP fil restore current painter F4aaz 2874 OR 2,ERR2 and of vara, quit to ERRZ F434 BE ia this the string we need? F438 FS stack the converted char F496 2831 yer, we got it sc go do it F438 7E, not right so lets check for type ago CB7F is bit 7 set?
F49B 2012 yes, test more
Fa3D CBGF is bit 5 set?
FagF 2808
7441 110600 VAR LD DE,0006 this is Simpl
Fada 19 ‘ADD HL, DE so point past it and ¥4a5 1860 SR F427 loop beck
Fad? 23 ARAY INC AL point to next byte
Fado 4B LDC, (HL) get the
F449 23 INC i, ‘byte count,
Fada 46 LD B, (HL) into BC
FaaB 23 Nc HL point past byte count
F44c 08 ADD HL,BC point past var
F4ap 1808 JR_LOOP loop back
FAaF CB77 «BITS BIT 6,4 je bit 6 sot?
F451 2006 OR NZ/MORE no, test sone more
7453 CREF BIT 5,4 is bit 5 set?
F455 20F0 JR Z,ARAY no, test more
F487 23 NAME INC HL point past this byte
-~”
40
jot byte is bit seven sot? yee, go inoreaent past value
78 LD, (HL)
18F8 SR NAME 1o0R
CBSF «MORE BIT 5,4 is bit 5 set?
2era JR 2, ARAY no, then it is an array
011300 Lo BC,0019 increment
08 ADD Hi, BC ‘by 19 bytes:
1981 JR LOOP and isop
23 port INC HL. get byte
4g LD ¢, (HL? count for this
23 iso 6L variabl
48 LD B, (BL) into registers
23 INC fil, point past this count
Fi POP AF fentore char
8 PUSH BC ‘copy count to
DL POP DE second register pair
ES PUSH HL stack pointor
210400 LD HL,000A set to max length
ay AND A clear carry
‘eps SBC HL,DE teat length
EL POP BL’ restore pointer
3003 YENC,DOHD if not too long then do header
010400 LD BC,O00A else, set length to ten
11214 DOHD LD DE,E42i point to disk header area £0 a,c save count
move string put count in register set Limit get ounber of spaces needed skip if none needed transfor count again put space in accumulator add it to end of string Jnerament string pointer repeat till count expire clear accumulator ‘eransfer pointer
‘to HL point to byte past pointer elear tho first byte (prime pump set counter aero fill set request to check for file check for file pet retum to true value ‘and return if file found set to false
#2 report HOOK is 8512 in memory, A REH
Thia utility must exist somevhere
stabenent: of 170 free bytes at the beginning of a BASIC program Sill"ao aioely but ie oan be pub anywhere you want a8 it is relooatal
This utility can handle simple string variable references or constants only. Idid not intend to include 18 function Qispatchor in thie dirouawian and, instead. I made the little Jeokup routine. It does not handle string array references!
Here in an example of a use for this routine.
10 REM "CHECK" 1S A VARIABLE CONTAINING THE ADDRESS OF THE FIRST BYTE OF THE PROGRAM ABOVE 1000 IF USR CHECK THEN PRINT #4: LOAD “YOUR PROG”
1010 IF NOT USR CHECK THEN PRINT “YOUR PROG’; " NOT ON THIS PAUSE 0: GO
DISKt?'*"PUT RIGHT DISK IN DRIVE AND PRESS ENTER’ TO 1000 Or try this
10 REM "CHECK" 15 AS ABOVE 1000 INPUT “ENTER TITLE OF FILE YOU DESIRE: “jLINE TS
4010 IF USR CHECK THEN PRINT #4: LOAD TS
1020 IF NOT UGR CHECK THEN PRINT Ts:" NOT ON THIS DISK!"*' “POT RIGAT DISK IN DRIVE AND PRESS ENTER": PAUSE 0: GO TO 1000
the first string reference efter the call to
Remember, line:
CHECK must be the filename that you ere seeking as in 1000 end 1010 in first program fragment 1010 and 1020 in second program fragaent
Here is a little program in BASIC to loed the code.
10 LET START = 62464: REM START can be any convenient addr: 82464 ie the atart of a 1k buffer in SPDOS.
1000 FOR A = START TO START + 169: READ X: POKE A,X: NEXT & 9000 DATA 42, 93, 92, 126, 254, 36, 40, 23, 254, 34, 35, 32, 248, 229, 1, 265, 10, 126, 12, '98, 254, 34, 40, 2. 16, 247, ©, 228, 24, 85, 43, 126, 290, 223, 245, 42, 75, 92, 237, 1, 92, 27, 241, 229, 187, 297, 82, 225, 40, 116, 190, 245, 40, 325, 203, 127, 32, 10, 203, 111, 40, 6, 17, 6, 0, 25, 24, 224, 38, 78, 38, 70, 38, 8, 24, 216, 203, 119, 32, 12, 203, 111, 40, 240, 35, 126, 203, 127, 32, 228, 24, 248, 202, 111, 40, 228, 1, 19, 0, 8, 24, 180, 98,'70, 39, 70, 9b, 241, 187, 209, 220, 93, 10; 0, 167, 297, 62, 225, 48,3, 1, 10, 0, 17, 33, 228, 121,
237, 176, 103, 62, 10, 148, 40, 7, 71, 62, 32, 18, 18, 16, 252, 62, 0, 98, 107, 19, 118, 1, 17) 0, 237, 176, ©, 1% 205, 144, 226, 1, 1, 0, 216, 14, 0, 201, 207, 1
fave fun with this end send your comments/questions to! 42 Trotter Court. FL 92773
SPOS SUPPORT
CUusToOM SOFTWARE
. K.1.8.8. /computers
presents
SPDOS UTILITIES V1.1
New Command Function
PRINT #4’ Hake, # Makes a REM statement with # bytes of free space.
PRINT #4°X Eliminates every line that begins with a REM statement.
PRINT #4’Names Reveals the names and types of all variables in the VARS ere
PRINT #4’ Dump Dumps all the information in the VARS area including location and contents.
PRINT #4’ VERIFY Ie en IF .., THEN construct that tests for a filename on the disk.
PRINT #4*Renum Is a line renumbering routine that allows
you to select increment, block of lines to be renumbered, end starting line number.
NONE OF THE ABOVE ROUTINES USE ANY EXTRA MEMORY BEYOND THAT USED BY SPDOS. The SPDOS buffer holds these routines when called s0 ‘they are compatible with all your existing programs!
Also included:
TRACKER, a full function sector editor and, CHECKER, a memory resident routine that checks for a filename on the disk.
$11.00 pp on § 1/4 inch DS/QD or SS/QD disk. Also available on cassette for transfer to your disk at $12.00 Pp. (Specify media pleese) Full documentation on disk/cessette. MONEY BACK IF NOT SATISFIED!
Ava: | Able sossveSo0n Wout
FoA. Ie the disk filename organiser thet puts your file: Borh im elphanuseric order (not case sensitive).
\ ‘Ie a disk to tape file MOVEr. _? Yano $1.00 To Your OAdler, Aad Manion AP-OATE
PRIC
1 REX @1906 K.1.8.8. /eoftetutt Munson H. Cockayne, Jr. BSCS 10 CLs 20 PRINT #4: OPEN #5, “scores” 30 PRINT ¥#1;"1) To soreen”’"2) To printer": PAUSE 0: LET rt= INKEYS ji IF £8 <> "1" AND r$ <> "2" THEN GO TO 30 40 IF r$="1" THEN OPEN ¢ 2, "5"
50 IF r$="2" THEN OPEN # 2,"p” 60 ON ERR GO TO 120
70 INPUT #5508
80 PRINT as
80 INPUT 85508
100 PRINT , a8
110 GO TO 80)
120 ON ERR RESET
190 PRINT 4: CLOSE 85
140 CLOSE #2
Well, that’s it for now. Questions to: ‘342 Trotter Court, Sanford, FL 32773.
Te
Tea hae
vs
ibn robe SAT bs be
fy
41
LARKEN Introduces soe
256K for your TS-2068
yeenauoes HEW LARKEN RAMDISK © exxexexee = Now you can expand yu" 2068 to up to 256K of nonvolatile Ram with the Nev Larken Ramdisk system. The Randisk systen consists of the Larken LKDOS Ex-Basic cartridge and a rear sounted nonvolatile nenory board. The LKDOS operating systea uses all the standard Basic commands to operate the Randisk such as LOAD SAVE CAT MERGE FORMAT ERASE etc, so its as cay to use as a cassette or Floppy disk.
The Randisk peony, board uses the new 32K x 8 static ram chips (62256-LP) and cones with 64K of Rag. You can add sore chips for oP to 256K . Battery Backed up. Very Fast and reliable. Its fully Spectrua and OS-64 and floppy disk compatable Larken, Ramex or biger), Tape backup program included. ~- PRICE : RamDisk with 64K, and LRDOS Ex-basic Cartridge ssseeeeereees ve $129.95
seepenee 400K 2068/Spectrum floppy disk Interface ¥x#KxX The disk interface can support up to 4 ~ 3” to §.25” SS DS or Quad (800K) drives. An NMI Snap-shot push button and KEMPSTON Joystick port are on the disk Interface. It can
load 32K in less than 4 seconds . Add $8 for cable. ~~ PRICE: 400K Disk Interface and LKDOS cartrid,
== Complete Systen: Randisk (64K), 400K Floppy
eenpouee — AERCO RAMEX or OLIGER disk users #4444444" You can nov have LKDOS for your disk IF for Spectrum, OS-64 and Larken disk coapatability and also RamDisk Capability, An NMI button can be added for Snapshot menory saves. ‘Aso use of ali LKDOS Ex-basic conaands including LOAD, SAVE,CAT,FORMAT,MERGE ERASE, FILL,WINDOWS, etc. Send for info. -~ PRICE: LKDOS (Aerco Ramex or Oliger) sees $6 . 5
-- Spectrua Eaulator added to any product above $20.00 See Review in Jan. 88 UP-DATE
‘enepnenane, LKDOS SOPTHARE xxxxxxx ( all software will run on any Lkdos based floppy disk or randisk or combination. Supplied on 48 tpi 5.25" disk,or on cassette .)
SEQUENTIAL FILE SUPPORT PACKAGE - This ram based Lkdos extension allows gggugntia! files to be Opened, closed, written to or read from using the Basic commands OPEN, CLOSE, PRINT#, INPUTH, INKEYS# etc. ... $10.00
= XMODEN to LKDOS MOBEM PACKAGE - Lets you up or down load 2650 modem files directly to disk with out any buffer size limitations. Transmit or recieve files a3 large as 100K. Lkdoa users can send entire NMI eaves over the modem. Mini
terminal mode. oe $10.00 ~ LKDOS Disk EDITOR ~'This program lets you modify any block on the disk, map out bad blocks , reformat single tracks and more. Complete documentation on Lkdos operation and accessing the dos from machine code is included. ... #10
PRICES ARE $US ADD $5 S&H FOR HARDWARE ADD $2 S&H FOR SOFTHARE . ARKEN ELECTRONICS © RRA2 NAVAN, ONTARIO, CANADA, K4B-1H9, (613)-835-2680
See Review in Jan.88 UP-DATE
128010000 gO GOD AE * TS-2068 PROGRAMS *® 1100090100000 000 OOO Diamond Mike I] and Great Game & Graphics Show: Two great programs for only $10.
Honey Machine iI: The Ultinate Word Game ig sir bud eso DRGERITERMBR aces based on a popular TV game show. $11. eae =e nee meee ;
Pixel Print PLUS! PAS raneures Pound Yn Y's 3t
Word Twister: Customize your own word~ The Bes Te ts, 250%, sompacd ple, yi ep
search puzzle. Vocabuilder: Easy-to-use Pee padvages, FORTS of) 02-55, 99
educational programs. Both for only #10. What's the PLUS? ana" your Pixel Print Filesti il th is 10 functi
rovgsCak obo au nina baclapes BD meronoce! BR | eB eae
Checkout these SPECS! BowerfulSeasy to use progran.
1) HYSINYG (Hhat You See Is Hhat You Geel? i
Following programs are for Aerco FD-68 oe tS re eee
only. Available on 5 1/4" disk or tape. sangen. (9s [easy as typing! Hew rOReTT OR “Loan icon
Disk File Manager: Copy individual files, (position curser, Cad. LOAD)
even on single drive system. Detailed 2) AUTOMATIC and MANUAL line and
Qhiradeer 2djusemencs. catalog, and many other functions. $13. peameceay oe 3) RESTORE FONT (afrer using the
BOLo-HODERN/ ITALIC’ nodif fers:
OuniDisk: Convert Omnicalc 11 to disk. 4) KEEP/UNDO/SAVE/L0AD/L0AD_ ICON
Customize many options. 99. ERD SCREEN Sage SCREENS Dae, WIDE/HIGH/CLS/SCROLL SPEED
5) QUFR/INUERSE/Cars Lock Prices include postage. Please send QUFR, HIVERSE (Cars Lact 22-cent stamp for complete catalog or Crone package In develop. ? check/aoney order to! Chia-Chi Chao 6) COPY/ERASE/INSERT/DELETE/NEM 73 Suilivan Drive, Moraga, CA 94556-1209 2) taeecoesnaNzacsieei
42
The ISSUE DISK Program
The issue diskette is a integral part of TS-2068 UP-DATE. The proceeds of sales are divided to pay token renumeration to the authors of the programs presented in the magazine for key-in projects. UP-DATE takes $8.00 for expenses and divides the balance between authors. Although there has been no disbursements at this writing, a ledger is kept for each author and checks will be mailed as funds accrue.
Generally, the feature programs included in the issue diskette are original programs never before offered to the TS-2068 user group and not for sale from other sources. Most of the utilities included are also new, but similiar utility programs may have appeared in other magazines. Public Domain progrms may be added from time to time, in order to increase the value of the diskette. Such public domain programs will be carefully checked out for value and to insure that they operate without flaw.
UP-DATE tries to make the issue disk a $50.00 value in comparison with programs offered commerically for other computers. Sometimes, as in this April issue, the Larken users cannot use the 5 DOSDEX programs. In such cases fill in programs will be added to the Larken issue disk to make up the
difference. The same applies to other system formats. Such fill in programs may be accompanied by documentation if needed, Whatever, UP-DATE guarantees "satisfaction or money
back" on all issue diskettes. The old American custom "the baker's dozen" applies. Extras may be thrown in to make sure that you get more than you pay for.
FIO III IGG III IG IAI IIR IO IE II IOI II ICICI I ICICI K The April 1988 Issue Disk
The April Issue diskette will be ready O/A May lst and will include the Feature Software "Budget", plus the compiled program, plus the printer annex, plus the customized "Loader Manager" for either Oliger Safe, or lLarken LKDOS system. Later when the Aerco Disk capability is re-gained, that format will also be available. Aerco Disk users may order the issue disk, but please DO NOT inclose payment. The disk will be mailed when ready and an invoice enclosed.
Other programs and utilities included in the April issue disk are: Five DOSDEX Manager programs (OLIGER FORMAT ONLY), MAIL MERGE (LARKEN FORMAT ONLY), the MOV utility (all formats), and the Screen String Demo program (all formats). The Mail Merge program for Larken Format is the same program given in the January issue, but converted to Larken format.
The issue disk is priced at $16.00 and is sent postpaid. Send orders to UP-DATE, address given on cover.
Continued from preceeding page
Ro—External collector resistance
rcp(sat)—Collector-to-emitter satura- tion resistance
ra—Damping resistance
Re—External emitter resistance
Rep—Emitter-base junction resistance (assume 4 ohms average)
Teter—Small-signal emitter-emitter on- state resistance (double emitter tran- sistors)
r—Dynamic resistance at inflection point
Ry—Load resistance
R,—Thermal resistance
Reca—Thermal resistance, case-to-ambi- ent
Ra,—Thermal resistance, junction-to- ambient
Ry ,—Thermal resistance, junction-to- case
rr—Slope resistance
Si—Silicon
T—Temperature
‘T,—Ambient temperature
Tc—Case temperature
ty—Delay time
te-Fall time
te—Forward recovery time
T;—Junction temperature
tog—Turn-off time
to-—Turn-on time
‘Teye—Operating temperature
t,—Pulse time
t-—Rise time
ty—Reverse recovery time
t,—Storage time
‘TSS—Tangential signal sensitivity
Tae—Storage temperature
t,—Pulse average time
Vp—Base voltage (de) 2
Vas—Base supply voltage (de) 2
Vac—Base-to-collector voltage (de)
Vs-—Base-to-collector voltage (rms)
Vie —Base-to-collector voltage (instanta- neous)
Var—Base-to-emitter voltage (de)
Varai-—Saturation voltage, base to emitter
V,.—Base-to-emitter voltage (rms)
vee—Base-to-emitter voltage (instanta- neous)
vgo—Breakover voltage (instantaneous)
Viemcao—Breakdown voltage, collector- to-base, emitter open
Veeniczo—Breakdown voltage, collector- to-emitter, base open
Visaxcen—Breakdown voltage, collector- to-emitter, with specified resistance between base and emitter
Viorxces—Breakdown voltage, collector- to-emitter, with base short-circuited to emitter
Vionxcer—Breakdown voltage, collector- to-emitter, voltage between base and emitter
Viencex—Breakdown voltage, collector- to-emitter, circuit between base and emitter
Visneso—Breakdown voltage, emitter- to-base, collector open
Vianyeco—Breakdown voltage, emitter- to-collector, base open (formerly BVeco)
Visnveirr—Breakdown voltage, emitter- to-emitter (double-emitter transistor)
Visnxcss—Breakdown voltage, gate to source, drain short-circuited to source
Vianicsar—Breakdown voltage, forward voltage applied to gate-source, drain short-circuited to source
Veanscesn——Breakdown voltage, reverse voltage to gate-source, drain short- circuited to source
Viewa—Reverse breakdown voltage
Yasmi—Bias de voltage between base 2 and base 1 (double-base transistor)
Ve—Collector voltage (de)
Vea—Collector-to-base voltage (dc)
Veaiay—De open-circuit voltage, floating potential, collector-to-base
Va—Collector-to-base voltage (rms)
Vey-—Collector-to-base voltage (instanta- neous)
Vepo—Collector-to-base voltage (de), with emitter open :
Vec—Collector supply voltage (dc)
Vce—Collector-to-emitter voltage (de)
Y.,—Collector-to-emitter voltage (rms)
Vexa—De open-circuit voltage, floating potential, collector-to-emitter
Vepo—Collector-to-emitter voltage (de), with base open
Veer—Collector-to-emitter voltage (dc), with specified resistance between base and emitter
Vcxs—Collector-to-emitter voltage (de), ‘with base short-circuited to emitter
YVersut—Saturation voltage, collector to emitter
Vesy—Collector-to-emitter voltage (de), ‘with voltage between base and emitter
Veex—Collector-to-emitter voltage (de), with cireuit between base and emitter
Yp—Off-state voltage (direct)
Yoo—Drain supply voltage (de)
Vog—Drain-to-gate voltage (de)
Yow—Peak off-state voltage
Voru—Peak off-state voltage repetitive
Ype—Drain-to-source voltage (dc)
Vosn—Peak off-state voltage, nonrepet- itive
Vpu—Drain-to-substrate voltage (de)
Vown—Peak off-state voltage, working
V_—Emitter voltage (de)
Ves—Emitter-to-base voltage (de)
Vesiay—De open-circuit voltage, floating
potential, emitter-to-base Veso—Emitter-to-base voltage (dc), with collector open
Vec—Emitter-to-collector voltage (de)
Veciny—De open-circuit voltage, floating potential, emitter-to-collector Vex—Emitter supply voltage (de) Vp—Forward voltage (de) V,;—Alternating component of forward voltage (rms value) vp—Forward voltage (instantaneous) Vro—Forward gate voltage (direct) Vron—Peak forward gate voltage Vin—Forward voltage, peak total value YVeusy—Forward voltage, total rms value Vep—Gate nontrigger (direct) voltage Vcq—Gate supply voltage (de) Yeq—Gate turn-off voltage (direct) ‘Vos—Gate-to-source voltage (de) Vesem—Gate-to-source cutoff voltage Vescenr—Gate-to-source theshold voltage Vcar—Forward gate-to-source voltage (de), of such polarity that an increase in its magnitude causes the channel re- sistance to decrease Vesr—Reverse gate-to-source voltage (de), of such polarity that an increasein its magnitude causes the channel re- sistance to increase Vor—Gate trigger voltage (direct) Vornnm—Minimum gate trigger voltage Voy—Gate-to-substrate voltage (de) ‘V,—Inflection-point voltage Vp—Peak-point voltage (double-base transistor) Vpp—Projected peak-point voltage Ver—Punch-through voltage ‘Va—Reverse voltage (de) V,—Alternating component of reverse voltage (rms value) va—Reverse voltage (instantaneous) Vacensy—Reverse voltage, total rms value Varu—Reverse voltage, maximum re- current: Vasu—Reverse voltage, peak transient Ver—Reverse collector-to-base voltage, reach-through voltage Yawn—Reverse voltage, (peak) working ‘Vas—Source-substrate voltage ‘Ves—Source supply voltage (de) Veu-—Source-to-substrate voltage (de) Vr—On-state voltage, direct Vrum—Minimum on-state voltage Vro—Threshold voltage Vy—Valley-point voltage (double-base transistor) Vz—Regulator voltage, reference volt- age (de working voltage)
Van—Regulator voltage, reference volt- age (de at maximum rated current) Yo—Small-signal, short-circuit forward transfer admittance, common base Yu-—Small-signal, short-circuit forward
transfer admittance, common emitter Yu—Small-signal, short-circuit forward transfer admittance, common source
Continued on next page.
gonTinued
Yu—Smail-signal, short-circuit input ad- mittance, common base
Machine Screw Tap and Clearance Drill Sizes
Tee a alenst input ad- Type | Tap Drill | Clearance Drilt | Type Tap Drill | Clearance Drill Y1e—Smnall-signal, short-circuit input ad- 0-80 | 3/64 50 10-24 25 13/64 mittance, common emitter 164 53 47 10-32 21 13/64 Yey—Small-signal, short-circuit output 1-72 53 47 12-24 16 7132 admittance, common base 2-56 50 42 12-28 .| 14 7132 Yoe—Small-signal, short-circuit output 2-64 50 42 114-20 7 17164 admittance, common collector 3-48 47 36 114-28 3 17/64 Yoe—Small-signal, short-circuit output 3-56 45 36 5/16-18 F 2164 admittance, common emitter 4.40 | 43 31 5/16-24 1 2164 Ya—Small-signal, short-circuit reverse 4-48 | 42 31 3/8-16 5/16 25/64 transfer admittance, common bases. 5-40 | 38 29 3/8-24 Q 25/64 y..—Small-signal, short-circuit reverse 5-44 37 29 76-14 u 29/64 transfer admittance, common collector 6-32} 36 25 76-20 25/64 29/64 Yn—Small-signal, short-circuit reverse 6-40 33 25 2-12 27164 33/64 transfer admittance, common emitter 8-32 29 16 2-13 27164 33/64 Zm—Impedance, modulator freq. load 8-36 29 16 2-20 29/64 33/64
z,,—Impedance, radio frequency
Zauy—Transient thermal impedance
Zesauy—Transient thermal impedance, junction-to-ambient
Zaeuy—Transient thermal impedance, junction-to-case
z,—Video impedance
z,—Reguiator impedance, reference im- pedance (small-signal at k)
tzx—Regulator impedance, reference
impedance (small-signal at lx)
CODE FOR FILM AND MICA CAPACITOR
First digit of capacitor’ value.
Second digit of Capacitor’ value.
‘Multiplier: Mulitply the first & second digits by the proper value from the Multiplier Chart.
Volume ‘Measure 1000 cubic millimeters =1 cubic centimeter 1000 cubic centimeters =1 cubic decimeter
1000 cubic decimeters =1 cubic meter To find the tolerence of
‘the capacitor, look up this
Liquid Measure letter in the Tolerence columns.
10 milliliters =1 centiliter
10 centiliters =1 deciliter 10 deciliters =1 liter MULTIPLIER Weight Measure ee er al 10 milligrams = 1 centigram 10 centigrams =1 decigram 10 decigrams =1 gram 10 grams = 1 dekagram 10 dekagrams = 1 hectogram 10 hectograms =1 kilogram
1000 kilograms =1 metric ton
TANTALUM CAPACITORS (CAPACITANCE GEN TMF) Ist RATED Int Sigutezot Figue 20 Significant Fque | COLOR | SIEIFICANT 0 FIGURE youTace Black at) Brome es Orante Yellow 63 rT 2 5 ra + : ; 3 Capacitor Color Codes—
Continued on next page.
S.N. U. G. Sinclair Northamerica Users Group
During one of the organizational meetings of the recent Sunstate Timex/Sinclair Winterfest °86, the idea of a National organization For the advancement of Sinclair computing came up. It was decided that since we had developed a "core group" that was dedicated to promoting Sinclair computing, We would attempt to lay the groundwork for such an organization. It was also mentioned that the greater the amount of time From the departure of Timex From the computer industry, the less of an active market would result. Since we would have users from across the nation at the fest, it would be an ideal time to make our plans known. So, the Sinclair Northamerica Users Group, or SNUG Ca name submitted to us by John Cushran, and later modified by Bill Jones) was starting to come closer to reality.
Het IT 18
The intent of SNUG is to provide a forum for exchange of ideas. It would be a source of information, such as a listing of active members, active Users Groups, Sinclair specific Bulletin Boards, an active library of Public Domain software, and a listing of available sharewere and freeware. Later on we hope to propose an industry wide standard of hardware and software compatability.So as to not to have to reinvent the wheel, and to do this in the shortest amount of time, we going to try and use an already established National group, such as CORSA ¢ Corvair Qwners Assn.) as a model to base our group on. SNUG would act as an umbrella Organization, with Regions being developed to tie in with established groups in those areas.
WHAT IT ISN’T
It is the intent of the organizers NOT to infringe or supercede any already established User Group or Vendor.It is intended to show some strength to the industry that Sinclair is not dead, and the mere fact that we can get this Organization together will prove that we can stick together and grow and prosper. We look at this as an enhancement to activities that have been planned on. Hopefully a Northamerican Calendar of events could be established to help co-ordinate any Future plans and events. It is not designed to take anything away from anyone.
WHAT TO DO
We need the support of EVERY SINGLE SINCLAIR USER | Whether you reside in Canada, the U.S., or Mexico, or for that matter anywhere, we need to know how you feel and what you want in this Organization. This is your opportunity to be heard ... your comments, critisms, complaints, or praises. What we have here is nothing more than an idea. Nothing at this time is set in concrete. We are more than open to suggestions. To make it work, these ideas of yours have to be Forwarded immediately. We are putting on a time limit until June 30,1988. If there is no support, then we will not proceed further. If there is imput, we will update on a monthly basis to whoever will put the information in print. So, lets hear from you soon! !
TEMPORARY CONTACT FOR INFORMATION :
MEL NATHANSON oe 0 OHNSO? 7515 ARBORDALE DRIVE mara LYON wen nee — PORT RICHEY, FLORIDA 34668 Mo HICKORY WOODS CT (813) 863 - S552 is % 32765 DecTowa , 7 (305) 860- 2465
** SUPPORTING PUBLICATIONS ** Time Designs, Syncware News, Ks TS-2068 UP-DATE, Quantum Levels. Please show your support with INTEREST CARD for Mail List.
io 2008 UP-DA'ILE the user's NEWS
«87 Bos" SemareoRD AVE. PANAMA G1tY, FL S2404
/ Shapes fe 44 Ter eee oe
IDE apy Tops Pesetriud rae Meed asthe Shape \ ta p
Bow has s Dent
q 56 alk
hers ae Shave ‘onay em Shite AAS (Bee ft