FacebookTwitterGoogle Bookmarks

 The Amiga 500 by John Foust A look al the new low priced Amiga An Analyela of the New Amiga PCa by John Foust Speculalion on the New Amigas Gemini Part D by Jim Meadows The concluding article on two-player games SUbecrlpta and Superacrlpta In AmlgaBASIC by Ivan C. Smhh The Winter Consumer Electronics Show by John Foust ArnlgaTrhl by Warren Block Those little shortcuts that make using the Amiga easier lntul11on Gadgets by Harriet Maybeck Tolly A journey through gadget-land using C Shanghai reviewed by Keith M. Conforti Cheeamaater 2000 & Cheeamate reviewedby Edwin V. Apel, Jr. Zing! from Merfcllan Software reviewed by Ed BlllCO'litz Forth! by Jon Bryan Get stareo sound into your Forth programs. Assembly Language on the Amiga by Chris Martin Roomera by theBandlto Genlocks are fmally shPJing, and MOREiii AmlgaNotea by Richard Rae Hum Busters "No stereo? Y not? .The AMICUS Networti by John Foust "CES, user group issues and Artiga Expo" Volume 2 Number 4 1987 Arrwlng Interviews Jim Sacha by Steve Hull Amiga Artist extrodinaire The Mouae That Got Restored by Jerry Hull and Bob Rhode Mouse repair Sluethlng Public Domain Dleka with CU by John Foust using CLI on PDS HlghUghta from the San Francisco Commodore Show by Steve Hull Speaker Seealona at the San Francisco Commodore Show by Harriet Tolly The Household lnvemory System In AmlgaBASIC by Bryan Calley Secrets of Screen Dumps by Nalkun Okun Using Function Keya with MlcroErnaca by Greg Douglas Arnlga1rlx II by Warren Block More shortcuts to make the Amiga work easier

Click image to download PDF

Document sans nom - w re Amiga™ S Volume2 Numbers
U. S.A. S3.50 Canada $ 4.50 Amiga™ DIGITIZED SOUND jpeform
mmmsmmmmamsmmmmmmmmmrnmmmmm ’ Wiln JiWl W
.in ....
v. ,:-. i-: , •••• . ,¦ " U • ~~~1 TTWW
iss®ws®Bwi8S( s8flwi8ewii eiewwf Unbeatable SCSI Flexibility:
No other Amiga hard drive can offer you: Capacities from 20MB
to 760MB...plug-in compatibility with optical (WORM) drives,
removable cartridge drives & CD ROMs...optional networking
capability...dual drive compatibility with ST506 and add-ons,
allowing use of up to 14 hard drives with your Amiga!
A REAL Track Record: C Ltd has been shipping Amiga hard drives since November, 1986. With thousands of units in use, you can count on C Ltd’s proven hardware & software reliability.
Extraordinary Support: Call our technical support line, and you talk to the people who actually build the C Ltd products. Each drive is supplied with a complete technical manual. Each drive is fully formatted, with 10 MB of useful public domain software and commercial demo programs.
Cheaper By The. Megabyte... The more megabytes you buy, the less each magabyte costs you!
22MB S 999.95 33MB 1249.95 44MB 1499.95 50MB 1599.95 60MB 1999.95 80MB 2499.95 150MB_3299.95 additional sizes up to 750MB available upon request.
The Industry’s Longest Warranty One-year parts & labor warranty.
Programmers cast their vote!
“Open the pod bay doors, HAL...” Right now, leading software developers are hard at work on the next generation of Amiga® products. To add the spectacular sound effects we've all come to expect from Amiga software, they are overwhelmingly choosing one sound recording package... FutureSound. As one developer put it, "FutureSound should be standard equipment for the Amiga."
FutureSound the clear winner... Why has FutureSound become the clear choice for digital sound sampling on the Amiga? The reason is obvious: a hardware design that has left nothing out. FutureSound includes two input sources, each with its own amplifier, one for a microphone and one for direct recording; input volume control; high speed 8-bit parallel interface, complete with an additional printer port; extra filters that take care of everything from background hiss to interference from the monitor; and of course, a microphone so that you can begin recording immediately.
What about software?
FutureSound transforms your Amiga into a powerful, multi-track recording studio. Of course, this innovative software package provides you with all the basic recording features you expect.
But with FutureSound, this is just the beginning. A forty-page manual will guide you through such features as variable sampling rates, visual editing, mixing, special effects generation, and more. A major software publisher is soon to release a simulation with an engine roar that will rattle your teeth.
This incredible reverberation effect was designed with FutureSound's software.
"APPLIED ¥®QMS Question: What can a 300 pound space creature do with these sounds?
Answer: Anything he wants.
Since FutureSound is IFF compatible (actually three separate formats are supported) your sounds can be used by most Amiga sound applications. With FutureSound and Deluxe Video Construction Set from Electronic Arts, your video creations can use the voice of Mr. Spock, your mother-in-law, or a disturbed super computer.
Programming support is also provided.
Whether you're a "C" programming wiz or a Sunday afternoon BASIC hacker, all the routines you need are on the non-copy protected diskette.
Your Amiga dealer should have FutureSound in stock. If not, just give us a call and for $ 175 (VISA, MasterCard or COD) we'll send one right out to you. Ahead warp factor one!
Applied Visions, Inc., Suite 2200, One Kendall Square Cambridge, MA 02139 (617)494-5417 Amiga Is a registered trademark of Commodore-Amlga. Inc. Deluxe Video Construction Set is a trademark ol Electronic Arts, Inc. The Mirror Copier Can Now Back Up A Disk Almost As Fast As Marauder II, And It Only Costs About 25% More!
Mirror 1 Minute 48 Sec.
Marauder n is the most powerful copier ever produced for Amiga. It will automatically copy ALL software released to date , and it requires no hardware modification of any kind.
It produces completely unprotected copies of most Amiga software faster and better than any other copier.
No other copier can copy as much software as Marauder II.
Marauder II also has the most advanced user interface your money can buy, If you have an Amiga you already know how to use Marauder N. You never have to reboot your machine to use Marauder II, it is completely compatible with Marauder n has been designed with your future needs in mind. As protection schemes change you can update the program yourself with our unique “Strategy Files.’’ The Strategy Flies are developed as new software is released so that you can get them quickly and easily when you need them.
Compare the features of Marauder II to our competition and you’ll see that Marauder n is quite simply the best copier you can get, at any price! And for only $ 39.95 you can rest assured that your software Investment is safely protected against damage, loss or theft.
Don’t wait, order now!
The Amiga's multitasking operating system.
Upgradable With Strategy Files YES NO Mouse Driven User Interface YES NO Exit Without Restarting Amiga YES NO Runs From Workbench or CLI YES NO Makes Multiple Simultaneous Copies From One Original YES NO Copies Itself YES NO Copies The Mirror YES NO Price $ 39.95 $ 49.95 Duplication Speed S3 Sec.
With Key Genie One Key Launches 1000 Strokes!
This amazing keyboard macro processor is just what you need to give your fingers a rest. The Genie is always at work to save you time and keystrokes.
Complicated or repitious keyboard sequences are easily assigned to a key you choose through the Genie’s Pop-Up Macro Definition Window. You can also load and save your With GRABBIT you can capture exactly what you see on your screen in an instant, regardless of what programs you’re running. GRABBIT works with all video modes, including “Hold and Modify.’1 What’s more, GRABBIT runs completely in the background, transparent to your other software.
GRABBIT is always ready for you to use, even when you’re in the middle of another program. As if that is not enough, GRABBIT requires only about 10K RAM to operate, and It supports dozens of printers.
GRABBIT is truly a productivity power tool for your AMIGA!
Favorite macro sequences on disk.
Once saved, the macros can be automatically installed at startup to save time. In addition to the Genie’s powers, Discovery Software has added a bonus program "Turbo-Shell”. The Shell is an AmigaDOS performance enhancer that you shouldn’t be without! The Shell gives you the capability to recall previous CLI GRABBIT is far superior to other screen-printing “programs" because of its small size and quick performance. No complicated setup is required, just install and go! Also, GRABBIT doesn't require the screen to remain visible during printing or saving, and stopping the print operation is as
easy as starting it.
GRABBIT supports all standard Amiga printer drivers. GRABBIT also supports full color printing.
In addition to GRABBIT's printing capabilities, the package also includes a powerful utility program “ANYTIME.” The ANYTIME bonus commands with the arrow keys so that mistyped commands can be quickly corrected, and frequently used commands can be easily repeated. Fast AmigaDOS command replacements give you UNIX-style performance from your Amiga.
What other software does so much for you at such a low price. Only £49.95 +- $ 5 shipping and handling.
Program is a “Preferences" style palette requester that allows you to change any colors of any screen, anytime! With ANYTIME, you are NOW capable of customizing all colors to match your printer's hardcopy to the screen’s colors.
Once you start using GRABBIT and the bonus program ANYTIME you will want it on every disk. You get all the power of this sizzling new software for an unbelievably low $ 89.95 + S5 shipping and handling.
When ordering from oversea: add an additional $ 5.00 shipping fo first class airmai DISCOVERY903 E. Willow Grove Ave., Wvndmoor, PA 19118 (215) 242-4666 iSOFTWARE I INTERNATIONAL AmlgaTM is a registered trademark of Commodore-Amlga Inc. UNIX is a registered trademark of Bell Labor&tor Amazing Dealers The following are Amazing Dealers, dedicated to supporting the Commodore-Amiga™.
They carry Amazing Computing™, your resource for information on the Amiga™.
If you are not an Amazing Dealer, but would like to become one, contact: PiM Publications, Inc.
P. O.Box 869 Fall River, MA. 02722 Alnhnmn Etoctonlcs Boutique
Mam) 1-617-678-4200 LCAVtdcoA Computer Ct. SynblreTradlng New
York Computer Rovelalons Houston Alabama Book Store Tuscaloosa
Etectontcs Boutque Ortando Memory LocaSon Wolstey Tadlren New
York Computer Time Ina Marshall Abax 0ata9ysteffls Humsvfie
Family Computers Seresota OmdTek Computers Tewksbury Tedrow
Business Products Rochester DsaPro WichltaFdb Command
Computers Blrm Ingham Florida Bock Store Gdnsvllta Ptonoer
Valley Dab Equlpmem Amherst The Computar Cellar Albany
FNSComputerServtoes Texartana Etoctartca Boulque Hoover Games
Vgadgete Orange Park Tho Bit Bucket West Newton The Working
Computer Stormy Brook Met opoxtan Computer Rchardson Madison
Books & Computers Madison Games Vgadgete JacksonWto The
Software Haus Quincy tedeo Computer Bln Brooklyn Mcro Search
Houston Mall Tel CommunlcBtlans Mobile Games Vgadgete
TaXahassee Tycom Ina Plttelekf Wdeo Computer Center Rome
Regency Educational 8ystems Dallas MeCs Photo A Computer Shop
Montgomery Games Vgadges Ctoarwater Mato Vdeo Conned on
Schenectady 8o(tex Watauga Urtrersd Computer System Mobile
Gulf Coast Computer Exchange Panama City ComputsrBam
Oamariscotta Vlage Computer Ina New York Software Arvwx
Houston Arkansas SIS Inc. ML Home Heart and Computers KAL
Computers Mulberry
E. Pabtka Michigan Basic Business Control Sys.
Traverse City Vtorid Computers Ina Ffidtivlta Software Ubrary Software Terminal WtrttaFals FertWbrte The Mcro Shop UfttoRock Mogaport Computer Center Scute Venico Basle Computer Center Grand Rapids Ogltz Raleigh The Computer Experience San Antonio Arizona Micro Computer Center Largo Bla-Bytes-Nbbles Petowskey Games Vgadgete Raleigh Tho Computer Stop Amene Computer library. Inc. Tempo Micro* Etc. Altamonte brings Camon Computer Canton Software City Raleigh Utah Computer West Phoenix Now Ago Electonics St Petersburg CompuSolt Kalamazoo Software aty Charlotte Computers Plua Mwray Computer Works
Gtondate Random Aooess Computers Inc. Ft Walton Beach Direct Access Lansing TDS Computers Durham Vamiont CopperstsB Business Systems Phoenix Softer sis Computer Center Inc KoXyHW Edmunton Computer Center Pontiac TDS Computers Durham Ray Supply Ina Souti Burlington Copperstate Computers Tucson 8urmy1 at Sunset Inc 8unrtse Galaxy Computers Alton Park Triad Computers Greensboro VtrrtNe Haeto* Tempo The Opan Door Cocoa Gtobel Computer Center Deartnm ItarteDflkote Colony Ltd.
Hampton North American Ogltd Tucson The PC Collection Coral Gables lOSefterare RM Computer Assodates .
Fargo Dtokovery Fals Church CflSfamlB Ami Link San Rebel QggjgJa Etoctonlcs Boutique Alans McNganSofterara Mdand ComputerShop Novi Mdand
G. F. Computers The Computer Store Grand Forka Mnot Femly
Computer Canter GamesVGadgete Fairfax ttampton Augnet Freemont
Etoctonlcs Boutique Alama Cental Park Computers Okamos Chin
Games Vgadgete Migirta Beach Ba&oaOffioe Supply San Diego
Etoctonlcs Boutique Kortnesaw Programs UnOmfted Grand Raptdi
Computer Nb torork Newark GamesVGadgete Mi rta Beach Bits n
Pisces Comp Prod.
Anahlen Future System Augusta Roserile Computer 8tore Warren Computer Ste Cleveland Software Cental Norktik Brown Knows Computing Redlands Games Vgadgete Alarm SopDlsk Madison Helghti Computers Plus of Ohto Upper Sandusky Software City Rchmond Byte Factory Computers Sollngs Games Vgadges Alama Software Plus Grand Rapids Eartvtoe Mao Systems Columbus Virginia Mere Systems Wbodbrldga CP.T. Cldramont MchadDonnelan Decotor Sped aSste Computer Lhromb Bectortcs Boutique Columbus Centiry Computer Systems La Habra Software Soute Inc Savannah State Street Computers Arm Arbor Fairborn Home Computer
Fairborn apSleSoop Ran ton Circus of Books II LosAngetes The 64 Store Alama TJ. Enterprises cnmon Games Vgadgete North Randdl Apple Vdley Computers
E. Wenatchee Commotech NaSondChy Hawaii The Software House
Kdamazao Lafcss Consumer Etectortcs Akron Bun Dog News Sastle
Compare Inc Rsdgocrost Astro Computers A Etoctonlcs Alela Ye
Okte Computer Shoppe YpsDam ItafnOflflB Supply Coshocton Byte
World Kent Computer Attic Palo Alte Computer House Inc HonobJu
Jflgggjgjg Mere Center Columbus Com-Scft Computers Everett
Computer Uterecy Bookshop Sunnyvale JACRopa* Aba
Eagan Mcrowsve Magic Fdrtetd Computar 6 Movie Magic YfeWma Computer Nook, Inc SanEtemadlno Mrtw Computer Outftters Rossvlto Norti Coast Programming Wltoughby Computers+lna Tacoma Computer Oulet San Diego ABA Computer A Video Botea Computer Ptace Mnneapols Itortond Computer Co.
Youngstown Famly Computers ComputerOulflt SanMareus ABI Computer A Video Nampa JMH Software Mapie Grove Fyogram Store Cdbmbus Kitsap ArrtgaOperators Balvtew ComputerTime CftusHts ]]]Qg|g MCOofKGbbinglnc.
Hbfaing Qralfty Computer AppQanoes Toledo More Age Computer 8tere BaXvtew ComputerLand Freemont Freemom Abncketer Rockbrd Midwest Computer Services Ctoarwater Oidtty Computer Appflanoes Toledo Mere Space Ina Spokane ComputerLand of Stockton Stodoon Compuertand Ohare Park Ridge OnUne Computers Mnrtatertka Saxten Computer Cemar 8ondusky NfcbtoSto Tocoma Dafflphlte Waaomdte ComputerLand of Ntes Met 8peddteaN Hopkins Softwafre Cense Irmmalond North Olmsted OmnHntemetiand Seatee De Lauer* News Agency Oakland DlgftelWorid Addton Vaismine.
88) water Software and Mora CbebnaO PCTeeh Kirkland Etocwnlcs
Boulque West Los Angeleo
I. C.V. Date Center Inc M ndetoln Mississippi Software Clly
Centsrvlto Programs Plua Saetle Empire Computers Sente Rosa
Him Microcomputers Inc Napervtle Boctronles Boulque Ridgeiand
Software Connection MayWd Hto.
Tda-A-Syte Kanrewlcfc Hard ng Way Nows Homo Compulng Center Stodrtan Concwd Interstate ComputerServtos Kroch* A Brentano* LeMom ChlcogD Enterprises UrX Iml tod Nalanal Computer Center Ooean Springs Oklahoma Andromeda LaGrande WastVlrfltnla Layhll Newstand Chartesten Home Compulng Center Home Compulng Center Mix Valley San Leandro MicroAge Software Or Systems Oaksawm FdrvtewHa.
Assodated Computer Sendees SprtngfteW Colonial Video a Computer Mcro Unk ComputerStore Barttesvtto Tulsa Wisconsin Cdorten Computers Radna Home Compulng Center San Bruno Software Plus Whaolrtg Brands Mart Computers Kansas City PCTeeh Tulsa Computer Software Center Mwautoo FfTBocrorica Surmyvate Tho Memory Expansion Normal Daa Byte Computer Co.
SL Louis Second Hand Software Oklahoma City Fox Vdtoy Ftertond Computer Gbhtosh KJ Computers Grenada Hlls Unique Computer Bering Instant Replay Ltd ChesterMd Vdeo-Complna Lawton Mom* Computers Stevens Point Levity Micro Right Niwli Holywoad San Jacinto Iggjggg Burfcat Computer Ct. SouteBend Systems Plus ofBl Louis 81 Louis Onyan Andromeda LaGrande Software Stappe TMWSoftwere Fond Du Lac Qeenbey Nonagon Software Bcerrtte Bytrex Computer Ft Wayne Appeigren Computer Systems Great Fals BTE Telephone a Computer Klamath Fdls TMW Software Ina Wausau Op Amp Tech Books World Book A News LosAngetes
lloolywood Bytrex of Angola Computer Corner Angola Marion BuftLSEYE Uncdn Oadtamas Computers Oacfcamas Computers Beaverton Clackamas Byte Emporium Laramto RAR Software Chula Vista Computer Corner FortWayna My Com Ina Plattemouti Computron BudnessSystami Portland QsQfidg RAR Software San Diego Computer People Inc McrtganClty Double E Etoctonlcs Omdta B Computers Portland Compute arPtay Aberta Ridgecrest Computer Ctr. Inc Rkfgeaest Greg Chaney Greonflotd Nflvartn Software Express Eugene Computerworia Aborts
S. QS. Computers LosAngetes Mcro Computer Centers Inc
Indianapolis Ccntory23tnc.
Las Vegas Pennsylvania ComputerShop Aberta Software First SenteRosa Spectra Computer Sys. Inc EvansVie Computer Wb rid Las Vegas Alpha Omega EBE Warren Date Pm Aberta Software Cental Pasadena Vons Computers VtteitLabyette ComputerLand of Canon Carson Ciftr Basic Computer Systems Hermitage Computer Shop of Calgary Aberta Software Plus CitusHteghte Iowa Tower Records Las Vegas Orcle Computer Ephreta Tho Software House Aberta Tower Books CWCO Century Systems DesMolna New Hampshire Computers and Garros Reading Hlndsln Computing Aberta Tower Books Citus high® Grona: Computers Dos Mol no Computer
Mart of New Hampshire Nashua DetaSoltque Computenware Pltteburg Rod Deer Micro Systems Aberta Tower Books Concord Micro Computer Appficolons LTD Marshalltown Dlversiflod Computers Keene Dowrtngton Computer Center Dowrtngton Memory Land Aberta Tower Books Mountain Vtew QgggOI Electronics Boutquo Nashua East Coast Software Harshoy Computer King frltish Columbia Tower Books Sacremena JALEIectanlcs Liberal NewJeraev Bectortcs Boutique North Wates Cord Bltish Columbia Tower Books San Mateo Md Kansas Computers Newten EtoeDonlcs Boulque Voohrees Bectortcs Beutiqua Langehorne Nutec British Columbia
The ComputerRoom Scots Vdley MdwostComputers Manhattan Etectortcs Boulque Wayne Bectortcs Boutique Elton Sprite British Columbia Wrmer*CWa Berkley Thorobred Computers Topeka Electonics Boulque Rodtaway Bectortcs Bouttqua Norristown Stktor Efrffish Columbia Citadel Computers Colorado Springs Kentucky Computer Dimensions Inc. Lexington Electronics Boulque Etoctonlcs Boulque Cherry «] Woodbrtdge Bectortcs Boutiquo Bectortcs Boutique Pittsburgh King of Prussia Super Software Canadian Computer Era British Columbia Marttoba Computer Discount Denver MicroAge ComputerStore Lexington Femly Computer
Centres Fairfield Bectortcs Boutique Whitehall Mtoromart Marttobe ComputerRoom Aurora Reality World Computers Lexington Famly Computer Centres South Orange Games Vgadgete Lancaster ComputerWbrld Marttebe Ebert Personal Computers Aurora The Software Source LouisvSto Famly Compulng Cental Ridgewood Games Vgadgete King of Prussia AW. Alton Marttoba Mcro Computer World Fort CoSta Loulsfana Games Vgadgete Burlngten Games Vgadgete Modta Kobotsk Marttebe Mcro World Lakewood Computer Time Shreveport Games Vgadgete Llringsttn Gsmes Vgadgete WtostMflln Mnlcomp Marttoba Sun County Computers Colorado
Springs Etoctonlcs Boutique Kenner Morris County Salonen Chester Garni* Books King of Prussia Alton Ontario Aurora Newsstand Aurora Etoctonlcs Boutique Monroe Norte Cental 0 01 Systems Danrile Chaam Computer Ontario Whole UteDstSutors Englewood Etectortcs Boutique LaurenceWte Academy Computers Albuquerque Rtteburgh ComputerStore Pltteburgh Computerised Ontario Whole Life Ofsttbutors Englewood Modern Business Medtlnes Metairie CVMSystms SantaTeresa The Electronic Boulque Norristown Comspee Ontario Cormnrtlart Software Center Inter not one) Meblrto New Horizon Computer System Alamogordo Triangle
Computers Indbna Etoctonlcs 2081 Ontario AMIGA Business Computer Norwalk Software SokJlons Baton Rouge Page One Newstand Albuquerque ffwtolstnnri Hastings Date Ontario Computer Oulet PlaVemon Software Source Labyatte Technological Conceptt LasCruoes Mere Limits SmlthMd The Computer ft You Ontario Boetartca Boulque Danbury Tho Computer Clnie Lafayette New York Inernalord Computer Sendees Johnston ThomN) Ontario Friendly Computers PtamsvSle Maryland Amuse New York Mere Unite Wawldt Software Ca Qjabec Mnemonics Inc Nonwak Burled Treasure Rockrile Arrtaa-Hudson Valey WapplngersFals DeftrerteSdere
Qjebec Personal Computer center Nondch Computer Crafters Wheaton AMIGA Business Computer Norte Port Avcom tntemstiond Ina WestCdUmda Marodsta Qahflf Software City Orange Compulsion Vision Center Cotamda Byte Shop Mart* Bectortcs Boutique Greenrile InbMareter Quebec Software Kingdom EastWlndsor Ooctonlca Boutiquo Bafttnore CIA Software Center Rushing Horizon Gmonrita Lavd Micro Qrohflft Spectrum Computers Now Haven Boct odes Boutique BalOmare Corrtpurtte Center White Plains Mcro Computer Depot Sumter Vision Tronlque rVtfawnra Etoctonlcs Boutique Anno Arundel County ComputorOulat Jamestown
Software 8oluloni WanwoodPtoza DtstlbulonVtJpro Oretwe Caste Video Newark Etoctonlcs Boutique OwlngsMIs Computers Ete.
Syracuse Wbteon*Jowtory Chesteriteld Bartda A A Computers Jackssnvde Games Vgadgete Games V Gamete Bsfttmore Baltimore Cromland ftna Etoctonlcs Boulque Brooklyn Lake Grave &»uto Datum Computer Business Center Rapid City Avlta Software Distbutors CempdhDtotibuters Concord, Ontario Emtish Columbia Boeklfenla Otando Games Vgadgete Cotonda Bectonies Boulque Hwtengton Staten Tnnnmisnn Phase 4DlsL Ina Cdgary. Aberta Commodore ComputerShop Ocala LayftllNswBsfind Kensington Etoctonlcs Boulque Albany ComputerLab of Memphis Memphis AngpfiVnn Computer Bar Pennsaoob Micro Computer Center Befdmore
Etoctonlcs Boulque Vtf toy Swam Games Vgadgete Memphis Logic Computer BwnosWres ComputerBaso Brandon Software Advantage Rockrile Games Vgadgete Nanuet Software Rrst Nashrile Austrdto Computer Im ago Miami Software N Things CoftogePark Games Vgadgete Garden City Htoh Techndaev CamDufir SuDoOei Computer Terminal Inc Computers 4 Rent Sebring
W. Palm Beach Waldorf Computer Massachusetts Waldorf Leigh*
Computers Mnemonics New York A a Computer Byte Shop Round Rock
Austin Maxwel Ofloo Equlpmem frlghtoaMdborn Abbote(ard,Me!bum
Computers Plus South Dayfina Club Computer Cambridge Software
Centre Internal oral Forest Hiti CEJA Corporal on Brazoria
JgggQ Cotonics Inc Stewart
E. UWVrtItzerCa Boston Software A Sudi Scotia Colonial Video
Houston Pineapple 6502 Tokyo, 111 Education Computers Efc
Tdahasse Etectontcs Boutique Holyoke Software aty Forest Hils
ComputerAge Houston SnudtaArnhla Etectortcs Boulque Boynton
Beach General Computer Sore Framingham Software Supermarket
Kenmore ComputerAge .
Dallas AbdutbFauadftSons Daman Etoctonlcs Boulquo Tallahassee HCS Computer Center Marsftltold Bter Tech Systems Maseru Computer Ifegto Austin SwttzertHnri Amazing Computing™ is Software Land AG Zuorich also available in most B. Dalton Booksellers stores, B. Dalton Software stores, and Software Etc. locations.
Volume 2 Number 5 The Mimetics ProMIDI Studio by Jeffery Sullivan 11 ...a POWERFUL music editor player The Perfect Sound Sound Digitizer by Ron Battle ...and you thought full-featured digitizers weren't affordable The FutureSound Sound Digitizer by Warren Block ...everything you need to start digitizing right away ...also see AmigaNotes and More AmigaNotes for more reviews.
AmigaNotes by Richard Rae 57 ...the Mimetics SoundScape Sound Sampler More AmigaNotes by Richard Rae 57 ...the PerfectSound Sound Digitizer The Amicus Network™ by John Foust 83 ...there is a sense of anticipation in the air these days among Amiga owners.
Roomers by The Bandlto 68 Inside developer information says that.. Forth! By Jon Bryan 78 ...there are some fundamental differences between Jforth and Multi-Forth Programming in 68000 Assembly Language by Chris Martin 82 More Counters and Addressing Modes Contents Volume 2 Number 5 Writing A SoundScape Module in C by Todor Fay Author of SoundScape 27 41 21 69 61 Programming with MIDI, the Amiga, and SoundScape Waveform Workshop in AmigaBASIC™ by Jim Shields Edit and save waveform for use in other AmigaBASIC programs Using FutureSound with AmigaBASIC™ by Jim Meadows "Spice Up" your AmigaBASIC
programs with real, digitized sound effects in stereo.
Intuition Gadgets Part II by Harriet Maybeck Tolly ...Boolean gadgets provide an on off interface to the user Basic Input by Bryan Catley Build a fully featured input routine to use in all of your AmigaBASIC programs Amazing Mail 6 Public Domain Software Catalog 90 Index of Advertisers 96 Tour Resource to the Commodore Amiga™* MetaScope: MetaScope, givesyoWeverythlnCf • you've always wanted in an .
Explication program debugger: Memory Windows - Move through memory, display data * or disassembled code live, freeze to * * ‘
* a * ' ft program th&tletiyou access PdDOS»lX)S? 8tettes on T
year Amiga. Useittolist tile ifi information and CopyfUes ty
between the PC-0©S MS-DdS Dc; afford to be without them.
$ 95.00 MetaScribe $ 85.00 MetdTodls Metadigm products are desired .
Fa tally utilize thecapabUities of Jj®w the Amiga™ in helping you WM5 develop your programs. If you're ~ Dealer Iuquides Welcome | , __ _ . ?Auugd.you can t -flgiyi, n mnges arcw jfeiiifetinjiiB. • and breakpoint windows list current definitions.
E Execution Control , Breakpoints withrepetition counts and conditional expressions; trace : for all instruction or subroutine level, both single-step and continuous execution.
• i Full SymbalicCapabiiity *' Bead symbols from files define new
ones, use anywhere.
Restoration. • k .. * i’*? ¦ _ - and command menus, loo file for Status windows show register "• "¦ " and commandine , contents and ptegfrathsf e with . V: . kSUSSBSSi freeze cmd restore; symbol, hunk, moatty search 1 MS-DOS le a trademark afMlcroaoft. Incorporated Amazing Computing™ (ISSN 0886-9480) is published by PiM Publications, Inc.
P. O. Box 869, Fall River, MA. 02722.
Subscriptions: in the U.S. 12 Issues for $ 24.00; Canada and Mexico, $ 30.00; Overseas, $ 35.00. Printed in the U.S.A. Copyright© 1986 by PiM Publications, Inc. All rights reserved.
First Class or Air Mail rates available upon request.
PiM Publications, Inc. maintains the right to refuse any advertising.
PiM Publications Inc. is not obligated to return unsolicited materials. All materials requesting return must be received with a Self Addressed Stamped Mailer.
Publisher: Joyce Hicks Circulation Manager: Doris Gamble Assistant to the Publisher: Robert James Hicks Traffic Manager: Robert Gamble Managing Editor: Don Hicks Assistant Editor: Ernest P. Viveiros Jr.
Hardware Editor: Ernest P. Viveiros Amicus & Technical Editor: John Foust Music Editor: Richard Rae Art Director: Keith Conforti Assistant Advertising Manager: John David Fastino Production Manager: Mark Thibault Assistant PM: Keven Desmarais Copy Editor: Michael Cabral EmouiipafiaooDj Your Resource to the Commodore Amiga™ Please advise PiM Publications Inc. at least four weeks before you move so your magazines will be delivered to your new address.
OtasEOmg] Advertising Sales & Editorial 1-617-678-4200 m Software designed for AMIGA.
Lattice® C Compiler $ 225.00 New version 3.1 of the AMIGA DOS C Compiler replaces version
3. 03. Major enhancements include the addition of: TMU, an
assembler, a faster linker and version 3 MS-DOS.
With more than 30,000 users worldwide, Lattice C Compilers set the industry standard for MS-DOS software development.
Lattice C gives you all you need for development of programs on the AMIGA. Lattice C is a full implementation of Kernighan and Ritchie with the ANSI C extensions and many additional features.
Professional Latticed C Compiler $ 375.00 A new product called the Professional Lattice C Compiler is now available It includes the C Compiler package (complete with TMU), plus LMK, LSE and the Metascope Debugger.
AMIGA® C Cross Compiler $ 500.00 Allows AMIGA development on your MS-DOS system. Price includes the Professional Lattice C Compiler described above.
Lattice Screen Editor (LSE™) $ 100.00 Designed as a programmer’s editor, Lattice Screen Editor (LSE) is fast, flexible and easy to learn. LSE's multi-window environment provides all the editor functions you need including block moves, pattern searches and “cut and paste.” In addition, LSE offers special features for programmers such as an error tracking mode and three Assembly Language input modes. You can also create macros or customize keystrokes, menus, and prompts to your style and preferences.
Lattice dBC IIIm Library $ 150.00 The dBC HI library lets you create, access and update files that are compatible with Ashton-Tate’s dBASE system. DBC Ill's C functions let you extend existing dBASE applications or allow your users to process their data using dBC III or dBASE III.
Lattice Text Utilities (TMU™) $ 75.00 Lattice Text Utilities consists of eight software tools to help you manage your text files. GREP searches files for the specified pattern. DIFF compares two files and lists their differences.
EXTRACT creates a list of file names to be extracted from the current directory. BUILD creates batch files from a previously generated file name list. WC displays the number of characters and optionally the checksum of a specified file. ED is a line editor which can utilize output from other TMU software in an automated batch mode. SPLAT searches files for a specified character string and replaces every occurrence with a specified string. And FILES lists, copies, erases or removes files or entire directory structures which meet the specified conditions.
Lattice Unicalc® Spreadsheet $ 79.95 Unicalc is a simple-to-operate program that turns your AMIGA computer into an electronic spreadsheet. Using Unicalc you can easily create sales reports, expense accounts, balance sheets, or any other reports you had to do manually.
Unicalc offers the versatility you’ve come to expect from business software, plus the speed and processing power of the AMIGA.
• 8192 row by 256 column processing area • Comprehensive context-
sensitive help screens • Cells can contain numeric; algebraic
formulas and titles • Foreign language customization for all
prompts and messages • Complete library of algebraic and
conditional functions
• Dual window capabilities • Floating point and scientific
notation available • Complete load, save and print capabilities
• Unique customization capability for your every application •
Full compatibility with other leading spreadsheets • Full menu
and mouse support.
Lattice MacLibrary™ $ 100.00 The Lattice MacLibrary ™ is a collection of more than sixty C functions which allow you to quickly and efficiently take advantage of the powerful capabilities of the AMIGA.
Even if your knowledge of the AMIGA is limited, MacLibrary can ease your job of implementing screens, windows and gadgets by utilizing the functions, examples and sample programs included with the package.
Other MacLibrary routines are functionally compatible with the most widely used Apple® Macintosh™ Quickdraw Routines™, Standard File Package and Toolbox Utility Routines enabling you to rapidly convert your Macintosh programs to run on the AMIGA.
Panel™ $ 195.00 Panel will help you write your screen programs and layer your screen designs with up to ten overlapping images. Panel's screen layouts can be assigned to individual windows and may be dynAMIGAlly loaded from files or compiled into a program. Panel will output C source for including in your applications. A monitor and keyboard utility is also included to allow you to customize your applications for other systems.
With Lattice products you get Lattice Service including telephone support, notice of new products and enhancements and a 30-day money- back guarantee. Corporate license agreements available.
Lattice, Incorporated Post Office Box 3072 Glen Ellyn, Illinois 60138
(800) 533-3577 In Illinois (312) 858-7950 TELEX 532253 FAX (312)
858-8473 Lattice INTERNATIONAL SALES OFFICES: Benelux:
Ines Datacom (32)2-720-51-61 Japan: Lifeboat, Inc.
(03)293-4711 England: Roundhill (0672)54675 France:
Echosoft (1)4824.54.04 Germany: Pfotenhaur (49)7841 5058
Hong Kong: Prima 85258442525 A.I. Soft Korea, Inc.
(02)7836372 Amazing Mail: Greetings from Ireland, I would
like to say that each edition of your excellent publication
is more interesting than the one before and I hope that
this will continue.
I have taken this opportunity to include some information about INFORMATIQUE, an AMIGA based online information service, and maybe if you have space you might mention INFORMATIQUE in a future edition, you might also mention that I would like to contact others operating Amiga-based Bulliton Boards.
As I am using SIDECAR since Christmas I was suprised to get the impression from reading the most recent edition of AMAZING that SIDECAR is not readily available in the USA. I am fairly pleased with SIDECAR but getting answers to technical questions is like pulling teeth (painful).
In the manual supplied with SIDECAR an internal AMIGA RAM expansion is mentioned (0.5 MEG or 1 MEG) as being available but no one within Commodore, at least on this side of the Atlantic, seems to know where I can get suitable expansion units for the SIDECAR (it is interesting to note that various newsletters issued to developers mentioned RAM expansion of as much as 2 MEG). On page 13 of your most recent issue edition( Vol 2, 3) I noticed the following:" This is the same memory upgrade card that fits into sidecar” so I would like to ask this question.... Has anyone ever seen this board and is
it available to end users?
My second problem is that I was led to believe that file transfer facilities between AMIGADOS and MS-DOS would be supplied with SIDECAR... this facility is very important for the operation of my BBS but on getting my unit I discovered that this was not possible and at a later date discovered that the required software was not available and up until this Friday Commodore (UK) had no idea as to when it might be available and yet it would appear that GAIL WELLINGTON could impress the Press at CES by transferring text between MS-DOS and AMIGADOS windows.... this sort of thing really does annoy me
and it is holding back my expansion plans, I am afraid to purchase a Hard Disk in case I discover that suitable software is not really available outside Trade Shows. If you can obtain answers regarding the above please let me know.... I wrote to Germany and they did not reply and Commodore in the UK seems to know less than I do about the subject.
Before I say goodbye it should be mentioned that I am a dedicated Commodore user and as I am convinced that they do make the best equipment (maybe by accident) it is my intention to continue using their products.
Regards William John Murphy Ireland In the US introduction oftheAmigaA500 and Amiga A2000presentation given at the Boston Computer Society3 25 87, references were made to both the Ram expansion and the file transferabilities (beyond those available through 1.2) for theA2000. The agreement was that both would be ready by the time the A2000 is available in the US in May 1987 (V- Dear Amazing, Well, here I am again in the Commodore Underground. I feel I ought to be wearing a beret and smoking short yellow cigarettes. I had a C64 when they first came out, back when the only software was what you
wrote. Of course, now the C64 market is wide open. Now I've jumped into an Amiga at the same bleak stage.
Nothing erodes a new user's confidence in a computer more quickly than the impression that he's bought an orphan.
Despite an avalanche of assurances that Amiga software and support is under intense development, it's still very hard to find in the Las Vegas area, and from the letters I read in your magazine and others, the situation is not much better elsewhere. The only stores that deal with the Amiga are chiefly dealers for other systems who have taken on the Amiga as a sideline. Therefore I think you may appreciate the following: In your Amazing Dealers page of your .
V2.2 issue, I noticed a listing for Ridgecrest Computer Center in Ridgecrest, CA. Since I was about to take a trip to that area, I called them from Vegas to see if they had a modem in stock. They did, and assured me that they would hold it for me to pick up the next day. I asked for terminal software and they had none, but said they would check for public domain software with the local Amiga Users Group. Fifteen minutes later they called me back, LONG DISTANCE, to tell me the AUG president would drop off Communications 1.33 for me, not to worry!
When I got to the store, I noticed their main product line is Atari, and they told me they were just taking the Amiga line on board. Their service was as good as their word, and everyone who worked there was friendly and helpful, and knew what they were talking about. A refreshing change from the local dealer who told me that as far as he knew, only the Amiga Modem would work with the Amiga, and he didn't have one in stock.
The bottom line is product support.
Dealers who follow that line will get my business and my recommendation to other users. Since I know too well that Commodore's history of support for their own products is • Well, erractic at best, I fully appreciate dealers like this who take that "extra step" in their stride.
Maybe "Big" dealers can't afford to do it....so I'll keep dealing with the people who can.
Thanks for your time, and thanks for a fine magazine • if it weren't for your articles and columns, I'd still be wallowing around trying to figure out how to talk to the Amiga
P. S. Lead on Borland for AmigaTurbo, will you? Mod-2 is all very
well, but I really don't need to learn yet another language.
Alan W. Thompson 442 Burton St. Henderson, NV 89015 We hope that both our Amazing Dealers and Advertisers will maintain a high level of service. However, if you do have a problem, please send AC a written complaint and we will forward your concerns._*AC* _ AVAILABLE NOW!
StaiBoaid2 If you've owned your Amiga® for a while now, you know you definitely need more than 512k of memory.
You probably need at least double that amount...but you might need as much as an additional two megabytes... We want to urge you to use StarBoard2 as the solution to your memory expansion problem -and to some of your other Amiga-expansion needs as well!
Ifs small, but ifs BIG- Since most of you want to expand your Amiga's memory without having to also expand your computer table, we designed StarBoard2 and its two optional "daughterboards" to fit into a sleek, unobtrusive Amiga-styled case that snugly fastens to your computer with two precision- machined jackscrews.
The sculpted steel case of StarBoard2 measures only 1.6" wide by 4.3" high by
10. 2'Tong. You can access the inside of the case by removing
just two small screws on the bottom and pulling it apart. We
make StarBoard2 easy to get into so that you or your dealer
can expand it by installing up to one megabyte of RAM on the
standard StarBoard2 or up to two megabytes by adding in an
Upper Deck.
This card has decks!
The basic StarBoard2 starts out as a one megabyte memory space with Ok, 512k, or one megabyte installed. If you add in an optional Upper Deck (which plugs onto the Main Board inside the case) you bring StarBoard2 up to its full two megabyte potential. You can buy your StarBoard2 with the Upper Deck (populated or unpopulated) or buy the Upper Deck later as your need for memory grows.
And you can add other functions to StarBoard2 by plugging in its second optional deck -the Multifunction Module!
StarBoard2: functions f ive!
If we count Fast Memory as one function, the addition of the MultiFunction Module brings the total up to five!
THE CLOCK FUNCTION: Whenever you boot your Amiga you have to tell it what time it is! Add a MultiFunction Module to your StarBoard2 and you can hand that tedious task to the battery-backed, MicroBotics. Inc. AMIGA is a registered trademark of Commodore-Amiga 811 Alpha Drive, Suite 335, Richardson, Texas 75081 (214) 437-5330 Auto-Configuring Fast RAM Zero Wait Slates User Expandable from512kto 2 Megabytes Bus Pass-Through MultiFunction Option: battery clock, FPU, parity, Sticky-Disk real-time clock calendar. A small piece of MicroBotics software in your WorkBench Startup-Sequence reads the
clock and automatically sets the time and date in your Amiga. And the battery is included (we designed it to use an inexpensive, standard AAA battery which will last at least two years before needing replacement).
THE FLOATING POINT FUNCTION: If any one aspect most characterizes the Amiga it's art graphics! Most graphic routines make heavy use of the Amiga Floating Point Library. Replacing this library with the one we give you with your MultiFunction Module and installing a separately purchased Motorola 68881 FPU chip in the socket provided by the Module will speed up these math operations from 5 to 40 times! And if you write your own software, you can directly address this chip for increased speed in integer arithmetic operations in addition to floating point math.
THE PARITY CHECKING FUNCTION: If you install an additional ninth RAM chip for every eight in your StarBoard2, then you can enable parity checking. Parity checking will alert you (with a bus-error message) in the event of any data corruption in StarBoard2's memory space. So what good is it to know that your data's messed up if the hardware can't fix it for you? It will warn you against saving that data to disk and possibly destroying your database or your massive spreadsheet. The more memory you have in your system the more likely it is, statistically, that random errors will occur.
Parity checking gives you some protection from this threat to your data residing in Fast RAM. Note that the Amiga's "chip" RAM cannot be parity checked.
THE IMMORTAL MEMORY DISK FUNCTION (STICKY-DISK): When you've got a lot of RAM, you can make nice big RAM-Disks and speed up your Amiga's operations a lot! But there's one bad thing about RAM-Disks: they go away when you re-boot your machine. Sticky-Disk solves that problem for you. It turns all of the memory space inside a single StarBoard2 into a Memory Disk that will survive a warm-reboot! When your Amiga attempts to grab a StarBoard2 in Sticky-Disk mode, a hardware signal prevents the system from acquiring the StarBoard2 as FastRAM (and thereby erasing your files) -instead it is re
recognized as a Memory Disk and its contents are preserved intact. If you want to work rapidly with large files of data that are being constantly updated (such as when developing software) you can appreciate the Sticky-Disk!
Fast RAM -no waiting!
StarBoard2 is a totally engineered product. It is a ZERO WAIT-STATE design, auto-configuring under AmigaDOS 1.2 as Fast RAM. Since AmigaDOS 1.1 doesn't support autoconfiguration, we also give you the software to configure memory in 1.1. Any applications software which "looks" for Fast RAM will "find" StarBoard2. And you'll find that your applications run more efficiently due to StarBoard2 on the bus.
A passing bus? Indeed I What good is an Expansion Bus if it hits a dead end, as with some memory cards? Not much, we think -that's why we carefully and compatibly passed through the bus so you could attach other devices onto your Amiga (including another StarBoard2, of course!).
The sum of the parts... A really nice feature of the StarBoard2 system is that you can buy exactly what you need now without closing off your options for future exapansion. You can even buy a Ok StarBoard2 (with a one megabyte capacity) and populate it with your own RAM (commonly available 256k by 1 by 150ns memory chips). When you add StarBoard2 to your Amiga you have a powerful hardware combination, superior to any single-user micro on the market. See your Authorized Amiga Dealer today and ask for StarBoard2 SUGGESTED RETAIL PRICING: StarBoard2, Ok (1 meg space): $ 349 StarBoard2, Ok (2 meg
space): $ 395 StarBoard2, 512k (1 meg space): $ 495 StarBoard2,1 meg (1 meg space) $ 595 StarBoard2, 2 megs installed: $ 879 StarBoard2, 2 megs & MultiFunction: $ 959 Upper Deck, Ok (1 meg space): $ 99 MultiFunction Module: $ 99 also available: Standard 256k memory card: $ 129 MAS-Drive20, 20 meg harddisk: $ 1495 MouseTime, mouseport clock: $ 50 Special Introductry Price Complete Communications Package promise Prom-is. 'pram.M „ (me promis.ltXptonussnm.ft. 1: a powerful program that checks and corrects spelling, it w 2: features a fast and easy word look-up dictionary
* promise will also check for punctuation errors and very
powerful with a dictionary of over95f)00yfatd 300 1200 1 Year
warranty $ 109.00 (Modem, Cable & Software) 11 v ; ' 1
300 1200 Fully Hayes compatible Modem - 2 Year warranty PROMISE
checks: BBBBBBBBBBHHI ! £12Q AA Textcraft files (all versions)
Notepad files (all versions) f"| OO iHMIIMB I (Modem, Cable & Scribble files HIHb4V~W HI i Software) ASCII files ASCII files (with printer codes) Introducing promise At last, the introduction of a new generation of SPELL CHECKING PROGRAMS. Promise contains many features to meet the expectations of demanding users.
• A 95,000 word dictionary that resides in memory and uses
advanced indexing methods.
• A spell checking rate of 18 words per second! (1080 words per
• PROMISE features a SPELL HELP that actually helps you spell any
word correctly.
SPELL HELP will operate with virtually any word processor.
• SPELL HELP takes full advantage of the Amiga’s multi-tasking
capabilities, allowing the spell help feature to be used with
most word processors.
• The ability to create custom dictionaries at the mere click of
the mouse button.
• Total mouse and gadget control, giving an ease of use never
before available in spell checking programs.
• PROMISE will check for rudimentary punctuation errors.
Promise makes word processing faster and easier. Promise is a must for any serious writer, student, or business person.
Amiga is a trademark of Commodore Amiga Requires 512K Amiga.
55 N. Main Suite 301D Logan, Utah 84321 THE OTHER GUYS ¦ ¦ (800) 948-9409 II The Other Guys ¦ Power t Play for'the AMIGA.
Pro 'MIDI Studio Sound Digitizer * MIDI Interface Available From Your AMIGA Dealer.
SoundScape Fro MIDI Studio AMIGA MIDI Interface The most powerful performance and recording software on any computer. The recording studio-like environment provides complete facilities for routing, recording, editing, transposition and playback of any musical performance. As new modules are introduced, you can “install" them at any time. Music can be performed by the internal sampled sound synthesizer, or with any external MIDI equipment. Record from the QWERTY keyboard or any external MIDI source, including keyboards, guitar and pitch followers. Synchronize with, or provide MIDI clock
information, including MIDI Song Pointers. The complete flexibility of the system makes your imagination the only limit to its power.
• Number of notes and tracks determined by available memory
• MIDI patch panel links program modules
• Install new modules at any time
• Up to 16 internal instruments at one time
• Complete sample system with editing, looping, ADSR envelopes,
velocity sensitivity, and pitchbend.
• Up to 160 sampled sounds at one time i • Save and load IFF note
and sample files
• Quantize to any multiple of MIDI clock beats
• "Match” mode eases learning of a song
• Complete MIDI sequence and song editing
• Route, merge, split, or bounce any track to any other.
• Completely compatible with the standard Amiga MIDI interface
• MIDI In, Out, and Thru connectors
• Plugs into the serial port
• High quality
• Highest possible fidelity from the Amiga
• Stereo or mono
• Variable sample rates
• Mike and line inputs
• Digitally controlled volume on each channel
• IFF Sample File compatible
• Software included for sampling, editing, and MIDI performance
functions With the SoundScape Sound Digitizer, any sound may be
sampled and modified by the Amiga, including voice. IFF File
compatibility enables these samples to be used as musical
instruments, sound effects, or speech with any IFF compatible
music or animation system.
$ 149.00 $ 49.00 SoundScape Audio Digitizer $ 99.00 Amiga is a trade mark of Commodore Business Machines Prices and availability subject to change without notice nnieiicj ...the professional software source!!
P. O. Box 60238 Sta. A, Palo Alto, CA 94306 (408) 741-0117
SoundScape Ipf© MBS Mads© A powerful music editor player
Reviewed by Jeffrey Sullivan When Mimetics released their
SoundScape Pro MIDI Studio, the champions of the Amiga as the"
ultimate music machine" breathed a heavy sigh of relief. At
last, a program for the serious musician. On the other hand,
there is the new breed of software for the Amiga and its
sister 68000 machines which is supposed to allow the user to
interface with the computer with a minimum of technical fuss.
At which end of the spectrum does this program lie?
As you may have guessed from the buildup, SoundScape falls about in the middle of the range. It is both fairly powerful and fairly easy to use. Mimetics has put together a useful package for both the experienced musician and the musical novice.
SoundScape is touted as "the most powerful performance and recording software on any computer". This is a very powerful claim, but one which Mimetics has made a credible attempt at fulfilling. SoundScape is not actually a program, but rather a collection of modules tied together with the SoundScape Music Operating System. This operating system is a full multitasking environment, transparent to the user, which allows for the transfer of musical data between the different modules of the system. Although Mimetics claims that SoundScape will run concurrently with other programs, this assurance
must be taken with a grain of salt.
While it is true that you can run other software with SoundScape given sufficient memory, 512K is not enough for you to do so. I tried to run SoundScape along with Scribble! While I was writing this review. Every time I tried, I got a meeting with the guru. However, if you have extra ram or are running small programs, SoundScape does support multitasking.
Booting up SoundScape will bring up a window called the Patch Panel. This window is analogous to the patch panels used by musicians to connect all their equipment. On the left side of the window are the possible input modules: the MIDI mixer, console keyboard, MIDI In, and clock modules.
On the right side of the window are the output modules: the sampled sound player, MIDI mixer, player piano, tape deck, MIDI Out, and clock modules. Some modules appear on both continued... sides of the Patch Panel because they can serve both as input and output modules. For example, the MIDI mixer can supply output to the tape deck, and in turn, receive input from the MIDI In module.
To connect any of the input modules to the output modules, you simply click on the icon for the input module, then click on the icon for the output module. A given input module may be connected to many output modules and vice versa.
When you connect two modules, a window may or may not open up which contains controls for that function or more information about it. A quick overview of each module will help to explain its purpose within the program. Basically, each module serves to receive input from some source and to transform it in some way before shipping it to another module.
The input sources in SoundScape are the MIDI mixer, console keyboard, MIDI In, and clock modules.
WHI©©MIE f© ©&mm
• Software Publishers .
• Peripheral Manufacturers
• Hardware Developers Be Represented by Canada's Premier
Distributor of Amiga support products PHASE 4 Distributors 7144
Fisher Street S.E. Calgary, AB, Canada Head Office
mixer simply accepts input on any of the 16 MIDI channels,
mixes the data together and sends the input out on the given
tracks. This process allows you to combine, say, input from a
MIDI synthesizer and input from the console keyboard and then
send the information to the tape deck on a single channel.
The console keyboard allows the user to enter musical notes into the system by playing the top row of the Amiga keyboard (QWERTYUIOP }, with number keys used for flats and sharps) as if it were a musical keyboard. The console keyboard can also send some MIDI timing information for use with certain recording modes. The console keyboard window is a section of a piano-type keyboard with the appropriate letters beneath each key. Each key flashes when depressed.
The MIDI In module allows the user to connect any MIDI equipped device (e.g., synthesizers, drum machines, etc.) through a MIDI interface and send musical notes from the MIDI device.
The clock sends timing signals to the other modules and MIDI devices connected to the system. The timing signals are needed to coordinate the recording and playback functions of SoundScape. The clock window'? Controls are much like a cassette deck's controls (stop, play, play from beginning, fast forward, reverse). There are also some less familiar functions (clock lock, and clock on with go). There are also two auto-locate registers which allow you to save the counter value at a particular place in a song, simply by clicking on a button. This option is very handy when you are tweaking a piece
of music into shape. The clock's counter will increment by MIDI clocksallower second or by beats per minute, depending on user preference. The clock module also has a slider to let you to adjust the tempo of the piece.
The output modules in SoundScape are the sampled sound player, MIDI mixer, player piano, tape deck, MIDI Out, and clock modules.
The sampled sound player plays back musical scores through the Amiga's four sound channels using a variety of sampled instrument sounds. Instruments are loaded into any one of 16 slots. Each slot corresponds to a MIDI channel and any output sent to that channel will be played by that particular instrument. If youownaMimeticsSound Sampler (or equivalent sounds sampler), the sampled sound player also allows you to create your own sampled instruments. The sampling window allows you to translate octaves of the instrument, set the instrument's responsivity to velocity and pitch modulation, tune the
instrument and set a transpose value to replay the notes up to a full octave in half-step increments.
You can load and save instruments individually or in sets, called instrument banks. This feature is useful if you have finished a score and know exactly which instrument you want for each part. With instrument banks, you Can load them all with one command.
The player piano is a window containing a four-octave keyboard which can show the notes played from any two MIDI channels. One channel's notes are played in red, the other channel's in grey.
The tape deck is the workhorse of SoundScape. The tape deck both records and plays back musical information on any number of tracks. For those familiar with such terms, the tape deck is a MIDI sequencer. The deck is modeled after a multi-track tape deck, like those used in recording studios for ease of use. Each track in the tape deck can be given a different input and output for maximum flexibility and power. The tape deck has controls similar to those on the clock, plus an additional set of commands to load, save, create, edit, and manipulate tracks.
The MIDI Out module sends the musical data out through the MIDI interface to a MIDI equipped device such as a synthesizer or drum machine for performance.
Playing Songs SoundScape allows you a number of playback options. The two most common options are experimenting with the console keyboard, and playing back scores with the tape deck.
Whichever method you use, you can send your music to the sampled sound player, the MIDI Out module, or both. I commonly experiment using the sampled sound player and then send the final pieces to my synthesizer.
To experiment with the console keyboard, simply connect it to the sampled sound player and load in the instruments you want to work with. You can play only one instrument at a time, since the console keyboard only sends data on one channel. You can, though, tell the keyboard which MIDI channel to send on to choose your instrument. The notes you play will flash in the console keyboard window and the music will come out of your Amiga's sound port (if you want to really enjoy it, hook up to a stereo- the sound difference is amazing!).
To play back completed songs, hook up the tape deck to the output module of your choice and bad in a score. By the way, all of the load requesters in SoundScape load the directory once and keep it in memory to minimize the time spent waiting for the them to come up. If you change directories or save something to the directory, simply select the directory gadget and either change it to the directory you want, or just hit return to re-read the current directory. This feature is very much appreciated if you've ever spent a lot of time in Dpaint bading and unloading pictures.
Once a score is baded, you can use either the clock controls or a similar set of controls on the tape deck to play, stop, fast forward or rewind your song. You set the output module for each track of your score with iconic gadgets in the tape deck. Each track can be given a different output destination if so desired. Perhaps you would send the first four channels to the sampled sound player and the other channels (up to 16) through the MIDI Out module to your synthesizer (if it is multi-timbral).
Recording Scores While playing back is the ultimate goal of composing music, recording is the intermediate step. SoundScape gives you excellent tools for use in perfecting your score. You can record your performance in real-time (live) or you can use step- time recording to record single notes.
Recording in real time simply causes SoundScape to record all of the notes whbh you play, their durations, and other musical data if your input device can send it (such as key velocity and pitch bend).
In step- time recording, you press the key of the note you want to enter, then use the Amiga function keys to send a certain number of MIDI cbcks to the tape deck(sequencer).
This process tells the tape deck how long the note is supposed to be. This mode is great for those of us who are not great musbians, or those great musbians who want to record impossible riffs.
SoundScape also supports a punch in punch out recording mode. This mode allows you to play back your song to a point where you want to change it, then record new information over the part you want to change. The tape deck uses a MOUSEWASH IS A SPECIALLY DESIGNED BALL WHICH:
L Gallery Vol. 1 $ 19.95 OVER 85 IMAGES FOR DELUXE PRINT™ T
IT READS MOST STANDARD TEXT FILES ALOUDj MOUSEWASH $ 7.95-SAYIT $ 14.95 $ 2.00 SHIPPING $ 3.00 FOR C.O.D. T & L PRODUCTS 2645 Wilson Street Carlsbad, CA 92008 (619) 729-4020 ™ of Electronic Arts punch in and a punch out register to accomplish this task. It plays your song back until the counter reaches the value in the punch in register, then records until the counter reaches the value in the punch out register. This is extremely handy for repairing parts of your score without having to edit every note individually.
The tape deck lets you filter MIDI events as well, such as pitch bend, key velocity, aftertouch pressure, etc. These events can take up much memory; a few seconds of pitch wheel use can generate hundreds of MIDI events! Also, people without these capabilities in their synthesizers would want to filter this information out.
The capacity of the tape deck's sequencer is theoretically infinite infinite in the sense that you are limited only by the amount of memory available. The amount of free memory you have available depends on what instruments you have baded in the sampled sound player (the piano samples are 98K), and whether you are running any other programs simultaneously.
Whenever you are either playing or recording, it is possible to save every setting and parameter as an Environment.
This environment is all the patch panel settings, all loaded instruments, and scores. It is ideal to be able to save everything as an environment and call it up with a single command.
Continued... Editing Scores Once you have entered your score, you will surely want to edit it. SoundScape has a MIDI editor which allows you to edit any MIDI event and change any of its parameters. You can change the duration of a note, change which key was pressed, etc. You can also use an area called the list store to hold segments of musical data which you may want to use in other tracks or in other parts of the current track. The editor allows you to splice and loop notes and sequences, as well as quantize sequences to any multiple of MIDI clocks.
In addition to the MIDI editor, there is a song editor which works on the larger picture, combining sequences to form songs. You can splice sequences and transpose them to a different key up to a full octave in half-step increments.
Both editors are full implementations and give you total control over your music. They are well documented and very easy to use.
Special Modes In addition to the standard recording and playback modes, SoundScape includes a few special modes which allow some pretty neat things to be done.
Echo mode waits for the user to press a key. The tape deck then plays back a pre-recorded sequence, but transposes it by the amount of difference between the key and middle C. This feature allows you to play back a repetitive riff, but to vary its pitch.
Trigger mode is similar to echo mode in that it waits for the user to press a key, then plays back a pre-recorded sequence. The difference is that in trigger mode, the key pressed is a 'trigger' for a specific sequence. No transposition takes place and many different sequences may be set up, each triggered by a different key. This mode is tremendously useful. A performer could record a number of different parts, setting each to be triggered by a specific key. When the performer wants to play that specific sequence, he simply hits the appropriate key and SoundScape plays back the error-free
Match mode is another useful mode. In match mode, the tape deck plays a note in a sequence, then waits for that note to be entered on the keyboard. The deck then plays the next note and waits, and so on. This feature is a good way to learn a certain piece; just enter the piece into the tape deck (using step time recording if need be), and then set the tape deck to match mode. The tape deck will wait for you to correctly echo the given note before playing the next note.
Gripes While SoundScape is an excellent music program, it is not without its problems. First and foremost, you may say to yourself "Sure, this system is great if you have a synthesizer, but I just have my Amiga” This is a legitimate point. SoundScape is definitely better if you have a synthesizer. However,SoundScape is also useful with just your Amiga. The sampled sound player is an excellent source of high quality instrumental sounds and should not to be sold short. It is possible to do some things with SoundScape that cannot be done with any other music package. Of course, SoundScape also
has a utility for transferring music between Mimetics and IFF formats.
Additionally, a decent synthesizer need not be expensive; take for example the Casio CZ series which has units as inexpensive as $ 250, or the Yamaha DZ-100, which is another excellent bargain. If you are at all serious about computer music, I strongly recommend that you consider purchasing a synthesizer.
The second major problem with the Soiindscape system is that it has no way of displaying music in standard notation (notes on a staff). Musical notation is in MIDI events such as Note On, Control Change, Pitch Wheel, and Patch Change. I spoke to Mimetics about this problem, and they informed me that they already had a standard notation module completed, but were waiting to see what other developers were bringing out.
So one way or the other, probably by the time you read this, there will be standard notation available for SoundScape.
Also, you could transfer the score to IFF format and view it in any program with standard notation that can read IFF files.
Another liability of SoundScape is a result of its fantastic power. SoundScape is not as easy to use as some other music programs. Such difficulty is to be expected in a program of this sophistication. However, SoundScape is still fairly easy to use, and given its complexity, the credit goes to programmer Todor Fay and the folks at Mimetics who have made it this easy to use.
As with any new skill, it is good to have a lot of examples to consult when you are trying to figure something out, or to demonstrate some neat ways to exploit the power of the system. SoundScape was a bit remiss in this area; the package comes with only four scores and a metronome.
This lack of scores can be mediated by the use of the IFF conversion utility. It is obvious why so few examples were included. The SoundScape disk is almost totally filled by the syst,em itself, leaving little room for demos. Still, I think that they could have included a second disk of scores, considering the price of the package.
The documentation is generally very good, but there are certain deficiencies which bear mentioning. The score conversion program was not noted at all in the manual. The only way to determine this program's use was to run the module by double-clicking on it (it does not seem to be directly callable from SoundScape). This deficiency may be a result of the recent release of the product, however.
SoundScape also lacks instrument sounds. The people at Mimetics have informed me that they will be marketing a disk of presampled sounds soon (probably available by the time you read this). Any standard IFF sampled sound file will work, but unless you own another music program or can download sample files (and they're BIG I) you may have trouble. Mimetics does sell a sampler which you can use to make your own sounds as well.
Expand the right way.. .simple, internal plug-in mounting leaves your side expansion port free to add other peripherals. Also, the internal Time Calendar does not use a joystick port.
Plug-In L pgracfe from
1. 0 to 2.0 MB Total* EXPANSION Plus TIME CALENDAR Memory
Expansion Features:
* Zero Wait-State
* No Cuts or Soldering Required
* Full Auto-Configuration
* Lithium Battery Back-Up for Time Calendar ORDERING INFORMATION:
DRAM Memory with Time Calendar: ST-05 0.5 MB $ 349.50 List
ST-10 1.0 MB $ 499.50 List ST-15 1.5 MB $ 599.50 List
* Memory expansion from 1.0 to 2.0 MB includes AMIGA 1000 512K
AMIGA is a trademark of Commodore-Amiga, Inc. Time CMhlWp ST-TC Time Cafendiffcluding Battery Back-Up $ 59.50 List ASK ABOUT increased speed with the new 68010 Processor VISA and Mastercard Welcome CALL TOLL FREE: 1-800-433-7572 Factory direct: 1-801-485-4233 DEALER INQUIRIES INVITED SPIRIT TECHNOLOGY 220 West 2950 South • Salt Lake City, Utah 84115 There is also a bit of a problem with the manner in which SoundScape searches for a given file type (score, instrument, etc.). The load requesters are fast and easy to use, but they search the disk for files using a certain naming convention. For a
sampled sound, the file name must end in '.samples' or SoundScape will not recognize it and will, therefore, not include it in the load requester. I have transferred all of my Instant Music samples to a SoundScape workdisk, but I was forced to rename every one of the files to end in '.samples' which was annoying. I would be nice if you could specify the search pattern in the requesters, so that it would not be necessary to rename files just to read them.
Also, some of the windows in SoundScape can not be open simultaneously. I don't know why this is, but it must have involved some poor planning by Mimetics. For example, the console keyboard control window and the sampled sound player window cannot be open at the same time. This means that if you are searching for a certain sound or just playing with the sounds, you have to load all of the sounds you want and write their channel numbers down. Otherwise, you have to switch back and forth between the two windows, closing one and opening the other each time you want to change the sound you are
playing. This quickly gets tiring.
• AC* Summary To summaize, SoundScape by Mimetics is an excellent
music editor player for the serious music enthusiast. It has a
few flaws, but overall makes a recording software on any
computer.'' Mimetics has also informed me that they are
developing additional modules that will interface with
SoundScape. Some possible topics to be covered are standard
musical notation and keyboard tutorial instruction.
A developer's tool kit is also available to those people interested in writing their own SoundScape modules and utilities.
SoundScape Pro MIDI Studio $ 149.00 Mimetics Corporation PO Box 60238 Sta. A Palo Alto, CA 94306
(408) 741-0117 THE KICKWORK AMIGA Business Computers z
(516) 757-7334 Northport, New York The AMIGA Plus A1000 CPU
Enhancements 11MB Internal RAM with battery backed clock
installed - $ 399 20MB SCSI Hard Drive installed with your
expansion module - $ 1099 I ALL enhancements come with
limited 6 month guarantee on parts and labor Send your
A1000 and or expansion module to be installed, in its
original carton to AMIGA Business Computers. AMIGA does it
AMIGA is a registered trademark of Commodore-Amiga, Inc. KickWork and AMIGA are trademarks of AMIGA Business Computers One Disk System The KickWork Gives your Amiga auto-boot capabilities common on many other personal computers. This is required for: On-Line Bulletin Board Systems Security Control Systems Unattended Monitoring Systems Home Appliance Control Systems The KickWork includes Versio 1.2 of KickStart and Workbench, the Amiga's operating system on one disk. Therefore, booting the system requires only one disk and that disk contains the WorkBench and all your startup commands.
Since KickWork does not require write access it may be used to cold start hard disk systems. In addition, a different WorkBench Ver. 1.2 may be warm started.
The KickWork is available NOW from AMIGA BUSINESS COMPUTERS either as a backup disk to your current WorkBench disk or as part of the Amiga Enhancer package purchased from AMIGA BUSINESS COMPUTERS.
KickWork with Amiga Enhancer (AmigaDOS Ver. 1.2) is only $ 39.95. KickWork is available by return mail for only $ 29.95 for those who send in their KickStart and WorkBench Ver. 1.2 Disks.
By Ron Battle The PERFECT SOUND Digitizer When you purchased your Amiga, you probably thought about buying some interesting hardware a digitizer, perhaps. For some time now, a wide array of sound digitizers has been available for the Amiga. Unfortunately, the inexpensive models had limited capabilities and the full featured digitizers weren't affordable I Until now. Enterthe PERFECT SOUND digitizer from SunRize Industries, a full- featured stereo digitizer that retails for only $ 79.95. HARDWARE FEATURES... The Perfect Sound digitizer connects onto the back parallel printer port. Extending
from the front of the digitizer are two knobs which control the input amplifier gain for the left and right channels. Unlike other digitizers, PERFECT SOUND will record in true stereo or separate left and right channels. You cannot hook a microphone directly to the RCA phono plugs because there is no pre-amplifier. The built in 8 bit A D converter can sample at a variable rate, from 5,000 to 25,000 times per second. If you compare other digitizers to PERFECT SOUND, you will note that many have a fixed sampling rate and or cannot sample in STEREO. There are no hardware provisions to change the
input volume under software control; this must be done manually by twisting the knobs.
You also have access to numerous digitized sounds including a bouncing ball, crowd sounds, helicopter, and more. There is even a file with documentation on the IFF format. The manual is 19 pages long, short and concise, but doesn't fully explain how to create new instruments for INSTANT MUSIC.
SOFTWARE FEATURES... The sound editor included in the price of the digitizer is actually a public domain program and includes the full source code in CI The program is intuition- based with pull down menus for editing and special features such as graphing waveforms, digitizing sounds, and filing. The slider gadgets are used for extracting portions of a waveform to be deleted, inserted in other sounds, or filed as a new sound. You have full control of the recording period, playback period, which channels) to digitize. You can also flip a sound "backwards" and and monitor sound levels of input
signals. You can save and load your sound files three ways: IFFformat, a DUMP format that saves only digitized info, or COMP format that uses Fibonacci Delta Compression techniques to cut your file size in half, with a degradation of sound quality. Also on this disk is a program to monitor sounds using interrupts.
HOW TO CREATE NEW INSTRUMENTS FOR INSTANT MUSIC... I will create a new instrument called LA which will actually be my voice saying "la". First of all, my hardware setup includes a microphone hooked to my cassette tape recorder. I then have a cord connecting the OUT port of the tape recorder to the LEFT (bottom) RCA port on the sound digitizer. Now, when I want to record my voice, I start the tape recorder, and while in the Perfect Sound Editor, I select the RECORD A SAMPLE and LEFT channel from the menu.
The program then waits for me to press the LEFT mouse button. I press the button and say "la" into the microphone and then press the LEFT mouse button again to stop digitizing. Now, my voice is captured for posterity! I can then use the editor to graph out my voice and cut away noise from the beginning and end of the sound. This editing is continued... accomplished by moving the START and END sliders on the screen until I get clean sound. I then COPY RANGE TO NEW SLOT and name this sound "LA". Be sure click on the old sound and DELETE it before proceeding to make a new instrumentl Now select
FREQ=FREQ 2 from theSPECIAL menu to make a new "LA" sound that is half the frequency of the orginal.
You can also click the pointer on the original "LA" sound and then select FREQ= FREQ*2 to make a new "LA" sound that is twice the original frequency. You will now have three sounds on the screen: the original "LA", half this frequency, and twice the original frequency. Now, click the pointer on the original sound, move the START slider all the way to the right (since there is no repeating part to your new instrument) and select CREATE INSTRUMENT from the SPECIAL menu. You now have a three octave instrument based on your own voice! Save this instrument as LA to your RAM: device.
The tricky part now is to get this creation onto the INSTANT MUSIC disk) Unfortunately, the original INSTANT MUSIC disk does not have any room for new instruments. Thus, you must make a copy of the original and delete some instruments from this copy. This process is a little bit tricky because the directories of instruments have a SPACE in their names such as LIBRARY 1, LIBRARY 2, LIBRARY 3. If your copy of Instant Music is in DF1:, try the following: DELETE "DF1 :instruments library 1 sax". You MUST use the quotes because of that space in the directory name. It took me a while to figure tha
one out!! Now, type COPY RAM:LA "DF1 :instruments library 1". You have now copied your new instrument LA to the directory INSTRUMENTS, subdirectory LIBRARY 1. When you boot up the Instant Music disk copy, you now have LA as a new instrumentl I have assumed throughout this discussion that you are familiar with the command line interface (CLI) and other AmigaDOS commands. It is much easier to get new sounds into DELUXE VIDEO. If your new sound is called MYSOUND and located in the RAM: device, and your copy of DELUXE VIDEO (Maker disk) is in device DF1:, then type: COPY RAM:MYSOUND DF1 :SOUNDS .
That’s it! You can also include INSTANT MUSIC songs that use your new instruments, in videos made with DELUXE VIDEO. You just have to be sure to use the Options menu in Deluxe Video and set up the data drawers to point to your new instruments. In this example, if a song used LA, you would set up the instruments drawer as DF1 :instruments library 1. Make sure the rest of your instruments are in that drawer! Both of the Electronic Arts programs, DELUXE VIDEO and INSTANT MUSIC, seem to work best when your sounds or new instruments are less than 24K bytes long.
Demos (or I haven't figured it out yet!). If you change your disk so that the demos don’t load, you then get 185,848 bytes of RAM to play with! Since SunRize Industries is constantly updating their software, I would guess that this problem may be already solved by the time you read this) In terms of hardware, it would be nice to have a pre-amplifier port on board with low-pass filter built in, so a microphone could be directly hooked to the digitizer. Another feature on my wish list would be the ability to change the input volume under software control while recording sounds and the option to
change the volume under software control during playback. These features would be helpful when doing a technique called companding; a sneaky way to get 12 bit resolution on an 8 bit digitizer!
WHAT I LIKE... This digitizer is fun and quite addictive! I really like having the source code, so I can figure out how things were done and so I can modify the program to fit my needs. When you consider the hardware and software features of this sound digitizer, the price is very reasonable; I highly recommend the PERFECT SOUND digitizer!
WHERE TO GET ONE... SunRize Industries
P. O. Box 1453 College Station, Texas 77841
(409) 846-1311 The digitizer comes with a 90- day warranty and
there is also a technical support phone number you can call
if you have any questions. The retail price is $ 79.95.
ADDENDUM... SunRize has just released version 2.1 of
Psound. In this version the original bugs have been fixed
with memory allocation and the general performance has been
SunRize has also released Studio Magic, an advanced editor capable of doing echoes, frequency enhancements, FFTs, and more! List price is $ 69.95.
• AC* WHAT IDONT LIKE... I have an old version of the
PerfectSound editor (v1.93) that gives me 216,800 bytes of RAM
to record on.
Unfortunately, with the latest version (v2.0), there are only 72,592 bytes of RAM to record sounds after all the demos are loaded! You don't get any more space by deleting the Sound Digitizer By Warren Block The Amiga's technique for making sound is relatively simple.
A sound is digitally recorded or sampled, to be played back later at different pitches and rates. This approach has the advantage of creating high-quality, realistic sounds, but requires a combination of specialized hardware and software to record the sound in the first place. FutureSound provides a comprehensive solution to this bulky problem.
Hardware FutureSound's hardware consists of a small (5 x 5.25 x 1.5- inch) box with a cable which plugs into the Amiga's parallel printer port. After connecting the cable to the computer, the printer cable then plugs into a duplicate parallel connector on the back of the box. A button on the front of the unit switches between the digitizer and the printer, making manual cable swaps unnecessary. Also on the front of the box are connectors for a microphone, a line-level audio input, and a recording volume control. An inexpensive microphone completes the package.
Connection to a sound source is simple. Most component stereo devices, like tape recorders and compact disk players, will just plug into the line-level input jack on the digitizer. You will need a Y-adapter however to record both right and left channels. The package includes an inexpensive microphone, but any microphone with a 3.5-mm plug can be used. The microphone can be connected at the same time as a line-level device, allowing mixing between the two sources. Of course, the microphone can be used by itself, too.
Software FutureSound's software package is quite complete. The recording program has four tracks into which sounds may be recorded; a section of the display is dedicated to showing a graph of the sound in the current track. A peak-holding recording level meter shows signal strength and indicates when clipping is occurring; adjusting of the recording level simple.
This program is an example of an application in which the icon-style user interface excels: the main program controls look like the buttons on a tape recorder, including RECORD, PLAY, STOP, REWIND and FF (fast forward). Any, or all of the tracks can be played at one time.
Playback can be one-time or repeating; sampling rate, playback speed, and volume are adjustable for each track.
Sounds may have their overall amplitude (volume) scaled up or down, and can be reversed. The option to mix and copy sounds between tracks is also available. All these choices will work on an entire track, or a user-selected portion of it, making it possible to create extremely complex sounds from relatively plain samples.
The sampling program is mouse and menu-based, with control key alternatives for most selections. Numeric selections, like sampling rate and playback speed, are modified by clicking the mouse on V andgadgets. If you hold down the mouse button, the number changes at a faster rate. It can still take a while, though to make major changes.
Being able to enter numbers directly, in addition to the continued... gadgets, would improve speed of operation. On the whole, though, this program is extremely well-planned and executed, making references to the manual unnecessary.
Also on the disk are source code files for use in user programs, in both C and BASIC. (Incidentally, the BASIC files were written by Amazing's own John Foust.) These files make use of custom sounds simple, with such self- explanatory routines as LoadSound and PlaySound. In addition, the disk includes complete example programs in both languages.
Bass and treble sections, should result in even better quality. In addition, the software will allow recording at rates all the way from 1 Khz to 28 Khz, the Amiga's maximum rate.
I was surprised by the quality of the recordings made with the package's microphone. Despite its rather cheap appearance, it performed quite well.
Complaints FutureSound's only real problem is with the printer digitizer selector button on the digitizer box. This button has a small red light which lights up when the digitizer is on. Simple, right? But, when the computer is first turned on, the button is dark, even though the digitizer is actually enabled.
Pressing the button once disables the digitizer, and selects the printer at the same time. After that, the light works correctly. Using a simple toggle switch, instead of the lighted button, would give a correct visual feedback of the status of the device. Still, it is not a difficult problem to live with, and it beats switching cables repeatedly. I simply press the button a couple of times when I turn the computer on.
It would also be nice if the recording software allowed the user to edit the sound sample by "drawing" in its graphic representation with the mouse. There are other commercial packages available for this purpose, though.
Documentation The instructions consist of a 38-page manual which is surprisingly informative and complete. The text is clear and concise, starting with a section on hardware installation and ending with a technical section which explains details and provides a phone number for technical information and assistance. I had a question that was not answered in the manual, so I tried calling this number. I was told that the person that I needed to speak to was out, and would call me back. Rather than getting the expected runaround, I got a call back, only half an hour later. After a short
explanation of my problem, he offered to send me a disk containing the necessary routines to solve it! I was pleasantly pleased, to say the least.
• AO Using The Package After setup, recording sounds is as easy
as clicking the mouse on the RECORD button and saying a few
words into the microphone. Recording time depends on both the
sampling rate and the amount of memory allotted for a track.
Using the defaults provided by the program results in ten seconds of sound recorded at a 10 Khz (kilohertz, or thousands of cycles per second) sampling rate. Sound quality is somewhat dependent on the sampling rate: faster rates provide higher quality sound, but use more memory. I found that sampling from my Akai component stereo tape deck at the 10 Khz default rate resulted in good quality sound, at a reasonable rate of memory usage. Using a graphic equalizer to "pre-equalize" sounds, amplifying both Conclusion FutureSound solves the problem of digitizing sounds on the Amiga in style.
FutureSound has a complete and readable manual and comes with everything you need to start using it right away. Applied Visions’ customer support is good, too.
Developers, musicians, and anyone who wants to use the Amiga's sound capability will not go wrong by purchasing FutureSound.
FutureSound Sound Digitizer Package List Price: $ 175 Applied visions Suita 2200 One Kendall Square Cambridge, MA 02139 by Jim Meadows IfflEAl Stereo Sound Effects Using FutureSound™ with AmigaBASIC™ CompuServe: 75046,2012 People Link: OPS321 If you want to "spice up" your base programs with real, digitized sound effects in stereo, FutureSound may be for you. In this article I describe using FutureSound with Basic and techniques for producing stereo sound effects. I developed the accompanying sample program, STEREO, to give you an example to work with.
Set-up To hear the stereo effects you must have your Amiga connected to a stereo amplifier with two speakers. You bse the left right distinction in sound if the left and right phono outputs of your Amiga are combined and connected to an Amiga monitor; but you can still produce very realistic sound effects.
The FutureSound digitizer plugs into the parallel printer port (and your printer then plugs into the digitizer). The red button on the front of the sound digitizer should be lit while digitizing sounds (Press it once if it is off to turn it on - pressing the button alternates between the printer and the digitizer).
To use the Basic routines provided with FutureSound, you must first copy the Future.Library from the FutureSound disk to the LIBS directory on your Workbench disk. One way to do this from the CLIis: COPY FutureSound:BasicFiles Future.Library to Ram: COPY Ram:Future.Library to Workbench:Libs Next, copy the Bmaps from the FutureSound disk onto your disk that has AmigaBasic and your basic programs on it.
Assuming your basic disk is called Extras, you can do this from the CLI as follows: COPY FutureSound:BasicFiles ?.Bmap to Ram: COPY Ram: ?.Bmap to Extras: DELETE Ram: ?
Continued... Before saving a sound, you must set up a sound directory on the disk you wish to save it on. Insert your FutureSound disk and dick its disk icon and then click the Future program icon. Once the program is started, you can remove the FutureSound disk and insert your disk with AmigaBasic and your programs on it. If you have your basic disk in an external drive, first select "Change Data Drive" from the disk menu and indicate the drive to use (the default is DFO:).
Now, select "Make Data Disk" from the Disk Menu and click on the FORMAT requestor that appears. You only do this once for your disk that has your programs on it (don't worry, it won't wipe out your Basic disk; it just adds a directory called SoundFiles to save the digitized sound in.)
Digitizing Sounds You are now ready to develop your digitized sounds. Select one of the 4 tracks to record in, point and click on RECORD.
FutureSound begins recording from the microphone if it is plugged in, or from the phono input if something is plugged in there. The length of the recording, as well as the sampling rate, may be changed at the bottom of the screen. The recording volume can be adjusted using the knob on the front of the FutureSound digitizer.
Once a sound has been recorded, its digitized waveform is shown at the top of the screen. By pointing and clicking at PLAY you can hear how it sounds. Using the editing commands, you can select just a portion of the sound recorded and save it, combine it with other sounds, scale it, reverse it, etc. By using the magnify bar, you can zoom in on a portion of the waveform and mark the exact points for the beginning and end of the section of the recording you wish to save. The FutureSound manual describes these procedures in detail. Note: When you save a track or a portion of a track you just
recorded, the title of the track remains "Untitled". Later, if you load the sound from disk into a track, THEN its file name appears above the track as its title.
ONE MEG MEMORY & CLOCK CARO Introducing the "INSIDER", a One-Megabyte RAM upgrade that comes complete with a Real Time Clock and plugs "Inside" the Amiga CPU.
Simply unplug the 68000 Microprocessor and plug the INSIDER into the 68000 socket, then plug the 68000 back on top of the INSIDER. It's that simple to add an ADDITIONAL One-Megabyte.
Complete with ADD MEM software for Versions 1.1 and 1.2 of the AMIGA operating system. Completely transparent to the operating system if a program such as DPAINT can't run in a Computer with more than 512K!
• AUTO CONFIG’s under 1.2
• No Forced Wait States
• Transparent Refresh
• Fully tested and burned in
• ADDMEM program included
• Exhaustive Memory test included
• Fast Memory that’s TRULY FASTI
• Only 600ma Power Draw (typical)
• Real Time CLOCK with built in 10 year battery!
• One Year Warranty All this for only $ 349.95 plus shipping. No
soldering or trace cutting. Dealer installation is recommended.
?????????????[ OD Order today by calling: 00 00 oD I Michigan Software 43345 Grand River Novi, Ml 48050 313-348-4477 313-348-4478 § VISA MASTERCARD AMEX Using Digitized sound In Basic To use the sample program listed with this article you need to record 5 sounds called "Explosion", "Engine", "Siren", "Shoot", and "Ready". You should record sounds that resemble these names. Just say READY for the "Ready" file.
The Engine file should contain a continuous sound, with no silent portions. Before recording each sound, point and click on the Time"-" indicator at the bottom right of the screen and reduce the time to 1 second. This procedure will conserve memory, since it takes 10,000 bytes for 1 second at the standard 10K sampling rate. (You get longer recording times with less memory if you use a slower sampling rate, but the quality begins to degenerate.)
If you don't have a VCR tape with the appropriate sounds on it, you can improvise with your own built-in sound effects generator. (Caution: Do this atone to avoid getting strange looks while you sit in front of your computer holding a microphone saying "Bpkrrrrghhhhhh").
After recording and saving the 5 files onto your Basic disk, close the FutureSound windows and start up AmigaBasic.
Now, how do you get these sounds off disk into memory and use them from Basic? John Foust developed some nice routines that are on the FutureSound Disk to accomplish this task. I condensed and modified them to produce the stereo sound effects routines shown at the end of the sample program. You will probably want to took at John Foust's listing and read his comments to get a better understanding of the FutureSound functions.
Sample STEREO Program Now let's look at the STEREO sample program listing. The program begins by setting NumSnds to the number of digitized sounds that are going to be used (5, in this case).
Next, the appropriate functions, libraries, and arrays are initialized by the routine SetUp (you only want to do this once in a program). To toad a sound from disk into memory, you set SoundName$ to the file name, SndNum to the sound reference number, and call LoadSound. The routine InitSounds does this for all 5 sounds. When a sound is loaded, its memory pointer, length, and pitch is saved to later activate the sound. In the sample program, these facts are saved in the arrays SndMem&(N), SndLength&(N), and SndPitch&(N) where N is the reference number for each sound. (1 for Explosion, 2 for
Engine, etc.). Note: Sounds must be loaded into the tower 512K chip memory for them to work properly. For the basic routines supplied with FutureSound to work properly on systems having more than 512K, you must change the value MemTypeS is set to.
Insead of MemType&=65537& use MemType&=65538&.
Now for the fun part. To play one of the digitized sounds, you set SndNum to the reference number of the sound you wish to play (e.g. Set it to 3 to play the sound Shoot). Set ChanNum to the channel you want to use (LeftA, RightA, LeftB, or RightB where A denotes primary channels 0 & 1 and B indicates secondary channels 2 & 3). Then, set Vol& to the volume desired (0-64) and call PlaySound to make a real digitized sound emerge from your Amiga! The sound will play once and stop, unless you change Reps& to a value other than 1. A value of 0 for Reps& will cause the sound to repeat until another
sound is played forthat channel. A value greater than 1 repeats the sound that many times. Just set these parameters and call PlaySound - that's all there is to it! As you took through the listing, you will see that the program consists primarily of determining the values of the parameters needed to produce the various stereo effects.
Now run the STEREO sample program. The program first plays sound 5 (Ready) out of both speakers. After a pause, sound 3 (Siren) is repeated 10 times, varying in volume from left to right (it sounds like it passes by you!). Next, all 4 channels are used together. The Engine sound is started up in both the left and right primary channels. Pressing the up arrow key increases the sound pitch, while pressing the down arrow decreases it. The left arrow key increases the left channel sound volume while decreasing the right. The right arrow key will have the opposite effect. Pressing the space bar
will cause the Shoot sound to come from the secondary left channel and, after a moment, the Explosion will sound from the secondary right channel. The Engine sound will continue playing uninterrupted, since it is playing on the primary channels. If you press the wrong key, you will be "told" of your error through the AmigaBasic Say command. You exit from this mode by pressing the Esc key.
The program then says "Good bye”, frees up the memory that was reserved for the digitized sounds, closes the libraries and ends.
How it works The PlaySound routine takes the sound number passed to it and sets the memory pointer, length, pitch, and identifier for the selected sound. Then, PlaySound calls the FutureSound routine FSStopSound&, followed by FSPIaySound&, using the Reps&, Pitch&, and Vol& parameters. You may wonder why you need to use FSStopSound& before FSPIaySound&.
FSPIaySound& plays a digitized sound in the next available channel. For stereo sound effects, you need to control which channel the sound will come from. The C routines could be modified to accomplish this control, but since I did not have a C compiler for the Amiga, I developed my own technique using the existing routines.
If you look back at the routine InitSounds, you will find that after loading the 5 sounds, I started up a sound in each of the four channels, using a volume of 0. Knowing the sequence the sounds are initially assigned in (Left, Left, m Right, Right) allows the sound identifier, returned by FSPIaySound&, to then be associated with a specific channel. The PlaySound routine first stops the sound associated with the channel you wish to use. This is done so that when you call FSPIaySound&, it will use that channel, since it is the only one available.
This same technique is used by the SayPhrase to use the AmigaBasic Say command. Since all 4 channels are always occupied by a digitized sound, the Say command would not have any channel to use. Therefore, SayPhrase first stops the sound associated with the channel you wish to use.
SayPhrase then uses the Say command with a channel parameter set to use any available single Channel (How%(6)si 1) to produce the phrase passed to the routine.
After the phrase has been spoken, a digitized sound with 0 volume is reassigned back to that channel.
PRODUCTIVITY SOFTWARE For Amiga*, MS-DOS* and Commodore* Computers QUIZ MASTER
• Allows teachers (o create llieir own lessons in am subieel, n
edit and personalize MUSIGSTUDKXT I and II.
• Available lor Arnica and MS-DOS. (MS-DOS ro(|iiircs 2 drives
and graphics hoard.)
• Permits 8 levels (240 |ncslions). Up to 40 questions per
lesson. I 'p to 9000 questions all on one disk.
E Any question format: T K, multiple choice, fill in the blank, and answer the question.
E Supports sound, music and graphics.
• Only $ 79.95 MUSIC STUDENT I
• Music theory concepts.
• ITS lessons on one disk.
• Intervals, triads, scales, terms, symbols and more
• S levels • beginning through intermediate.
• Only $ 59.95. GRADE MANAGER
• Comprehensive electronic gradebook.
• Up to I00 students with I00 grades each.
• 1 landles extra credit and incoinpletes.
• Automatic conversion to 100J* point scale.
• Prints rosters, gradebook sheets, grade lists, progress reports
and more.
• ft weighting categories.
• Only $ 89.95 (Amiga) $ 69.95 (Commodore).
Other techniques Another technique I used in the game Gemini-2, not shown in the sample program, is combines all the digitized sounds into a single file using the FutureSound edit functions. As I built the file, I noted the offset of each sound from the beginning of the buffer, as well as its length. I put these values in the program as a data array and use them to compute the memory pointer and length, based on the sound number.
This process makes changing the sounds more difficult, but allows a single load to load all the sounds at once. It also allowes you to combine adjacent sounds in the buffer into one long sound, by varying the length parameter. Playing sounds back at pitches considerably different from how they were originally recorded also allows you to get multiple uses out of the same sound.
• Television station weather broadcast system.
• Easy to use “storyboard" for creating broadcasts.
• Uses high resolution (672x444), double buffered animation for
super smooth movements.
• All backgrounds and maps conform to the Amiga I I'M'' standard,
allowing editing in any Amiga hi-ros drawing package.
• Very flexible and sophisticated color cycling functions.
• Over 40 different wipes, dozens of backgrounds, hundreds of
• Fully mouse driven.
• Map customization services available.
• Weat her graphics deluxe only $ 995.00. Includes Deluxe Paint
II*. Custom maps, and remote control.
• Weather Graphics only $ 595.00. BRUSH WORKS Volume I
• Business presentation graphics clipart.
• Over 100 unique symbols and images.
• No conversion necessary all brushes have been drawn in high,
medium and low resolution modes.
• Amiga IFF compatible use with any Amiga graphics package.
• Also available ••• Brush Works Volume II 6; III, desk lop
publishing lonls and clipart.
• Onlv $ 29.95. Conclusion I hope the STEREO sample program
accomplishes "one example is worth a thousand words." If you
didnt understand some of the whys in this article, don't worry
about it. Just set the parameters discussed and call the
routines as shown in the sample program and you can add great
stereo sound effects to your Basic programs using digitized
Continued... ORDER TODAY!
ORDERS ONLY: 1-800-538-1032 Ext. 7373 IN MISSOURI: 1-800-492-5067 Ext. 7373 INQUIRIES: 1-417-887-7373 ASSOCIATED COMPUTER SERVICES 1306 E, SUNSHINE SPRINGFIELD, MISSOURI 65804
• These are trademarks of Commodore, Amiga, Microsoft, Commodore
And Electronic Arts.
' STEREO - A sample program for using ' FutureSound Digitized sound effects ' in Stereo with AmigaBasic ¦ ' by Jim Meadows 2 19 87 ' First Specify the number of sounds NumSnds=5 ' Then Setup Library Functions PRINTrPRINT “Setting up Functions GOSUB SetUp ' Now Initialize the Sounds PRINT:PRINT "Loading Sounds GOSUB InitSounds PRINTrPRINT “Press left mouse button" Pause: IF MOUSE(0)=0 THEN GOTO Pause ' Play READY in both speakers PRINTrPRINT “Ready":PRINT SndNum=5:Vol&=64 ChanNum=LeftA:GOSUB PlaySound ChanNum=RightA:GOSUB PlaySound FOR I - 1 TO 8000:NEXT
• Play SIREN from left to right CLS SndNum=3: L=64: Reps&=0: R=4
FOR S = 1 TO 10 LOCATE 10,1:PRINT SPACES(S*7)+"siren"
Vol&=L:ChanNum=LeftA GOSUB PlaySound Vol&=R:ChanNum=RightA
GOSUB PlaySound L=L-6:R=R+6 FOR 1=1 TO 3000:NEXT NEXT FOR I = 1
TO 3000:NEXT CLS ' Now start ENGINE in primary channels
SndNum=2:Vol&=32:Reps&=0 ChanNum=LeftA:GOSUB PlaySound
ChanNum=RightA:GOSUB PlaySound L=32:R=32 ' Vary Pitch and
Volume 1 and Shoot using keypresses ' Say Wrong Key if
necessary CLS:LOCATE 10,1 PRINT “Press Arrow Keys or Space Bar"
PRINT “for Stereo Sound Effects" PRINT “Press Esc to Quit"
CkKey: K$ =INKEY$ :IF K$ =“" THEN GOTO CkKey IF K$ =CHR$ (27) THEN
Right IF K$ =CHR$ (29) THEN GOTO Down IF K$ =CHR$ (31) THEN GOTO
Left IF K$ “" " THEN GOTO Shoot Phrase$ =TRANSLATE$ ("Wrong, Key")
ChanNum=RightB:GOSUB SayPhrase GOTO CkKey Up:
SndPitchfi(2)=SndPitch&(2)-20 GOTO ChangeEngine Down:
SndPitchs(2)“SndPitchfi(2)+20 GOTO ChangeEngine Left: L=L+5:IF
L 64 THEN L=64 R=R-5:IF R 0 THEN R=0 GOTO ChangeEngine Right:
R=R+5:IF R 64 THEN R=64 L°L-5:IF L 0 THEN L»0 GOTO ChangeEngine
ChangeEngine: SndNum=2:Reps&=0 Vol4=L:ChanNum=LeftA GOSUB
PlaySound Vol&=R:ChanNum=RightA GOSUB PlaySound GOTO CkKey
Shoot: Vol&=64:Reps&=l SndNum=4:ChanNum=LeftB GOSUB PlaySound
FOR 1=1 TO 6000:NEXT SndNum=l:ChanNum=RightB GOSUB PlaySound
FOR 1=1 TO 3000:NEXT GOTO CkKey Esc: PRINTrPRINT "Good Bye"
Phrase$ =TRANSLATE$ ("Good Bye") ChanNum=LeftB:GOSUB SayPhrase
GOSUB StopSounds GOSUB Cleanup END:1 End of Program InitSounds:
SndNum=l:SoundName$ °"Explosion" GOSUB Loadsound PRINT
"Explosion Loaded" SndNum=2:SoundName$ ="Engine" GOSUB Loadsound
PRINT "Engine Loaded" SndNum»3:SoundName$ ="Siren" GOSUB
Loadsound PRINT "Siren Loaded" SndNura=4:SoundName$ ="Shoot"
GOSUB Loadsound PRINT "Shoot Loaded"
SndNum=5:SoundName$ ="Ready" GOSUB Loadsound PRINT "Ready
Loaded" GOSUB AssignChan ‘RETURN 1 Stereo Sound Effects
Routines ' The following routines can be added to ' a Basic
program to play digitized ' sound effects in Stereo. These
routines 1 use FutureSound Functions.
Setup: ' This routine should be called 1 time ' Initialize library functions DECLARE FUNCTION FSGetSizefi LIBRARY DECLARE FUNCTION FSLoadSoundfi LIBRARY DECLARE FUNCTION FSPlaySoundS LIBRARY DECLARE FUNCTION FSStopSound& LIBRARY DECLARE FUNCTION AllocMemfi LIBRARY LIBRARY "future.library" LIBRARY "exec.library" ' Define arrays for sound parameters 1 (Set size to number of sounds used) continued.. lit volume well lied isf$ 24.95. 7Can YorKe d®y“Mind“ ™ ... rM.;T .... CLASSICAL Port I. ______fj $ r Vol 27 (19 Pieces 4a Min) Prelude l, Moonlight"S$ Sata 1st and-2lidr Movement,
'"'"'I .
CLASSIC Vol M 115 Pieces RICHARD RODGERS ONGBOOK - a, Vol 18 (19 Pieces40 Min) J ) I i !
I ClimfeEvery afiuain DO':fcfill, TheSoundOf GOLD & PLATINUM HITS Vol 45?(19 Pieces 6 Min) Sgirls.
'SYMPHONY SONGS gives yoa fffrary of nearly 1,000 nStisic masterpieces. All bOTgs ririfF’f6fmat so'ffily may be printed, transposed, and modified in any way you like using your favorite composition program. Included is a free program to convert the IFF files to MUSIC STUDIO™ format.
R 0 t i - p~~ ™ r-v.
Lulaford and RandrSpectbr and take advantage of capability of thf Sdhataln C Major Jesus JdyLOIMi CLASSICAL Part3 Vol 31(18 Pieces 35 Min) 1st Piano CrflKcrtoj. Polonyy Etude 3Si | CLASSICAL Part 4 (Bach) Vol 35 (22 pieces 30 Min) .
Two Part Invention ;L Three Part Invention 6, Pr ud and gue, 1, WatklA:- .. £SS2,C.a,-,mI Misbehavin’.On From The 2 t»aet??r: bJLEY JOEL GREATEST HITS The Goodshif lfellipo| BEETHOVEN, BROADWAY, & BLUES Vol 43 (17 Pieces 65 Min) _ CHRISTMA ’ Piano Man. Say Goodbye To Hollywood. Only The- VrXs ifti«iafc g$ ggg 0 Min) ¦1. * 4 j 2 B---- POLKA PARtY----J~- - '
• •j--------------------- H-Ode-To gilty-JoeJM and
BobbyMctpee,C uhtr J4eee$ 40~Mjn) ‘ j$ c- f____ “7 Roads, w
” * &r ..... I I iJ 5 i Ika,.....Pizzacato Polka, Betty
Polka,, I : fj , i i* Vol 38 (15 Pieces 40 f in) sMinuetIn
GoodJJjg ung . ..... i O ffl w Bethleheirl. IJfltlSS G Fuer
Elise,s, C&UMTRYX'CLfsSIC P$ t you toifsten to ihern for
ificatkn il. 5S 1 The picturejs ilffmu sic are all in standard
IFF format so you m&y*flSe songs and pictures included, or
uselhoS eveloped with your music program (i.e. DMCS), or your
paint program (i.e. Deluxe Paint). Included are Christmas music
and pictures. $ 24.95 Sfy ping and GQD charge . . ~. . I. . . T
. . . 1 , 1. Jtt-jjL-ILJ: Illinois residents adcj 6'A% sales t;
___________ BATAVIA, HNOIS 60510 (3 2)819-6811 Haven’t You
Set Your AMIGA’S Time And Date Once Too Often?
Introducing A'TIME A clock calendar card with battery back-up, so you will never have to set the time and date in your AMIGA, EVER AGAIN!
• Plugs into the parallel port.
• A completely transparent printer port is provided, with total
compatibility to all I O operations.
• Battery back-up keeps the clock calendar date valid on power
• Custom case with a footprint of only 21U” x Vn* x VU" (W x D x
H) in standard AMIGA color.
• Leap year capability.
• A - T I M E package contaias: 1-A - T I M E dock calendar
module 1-3.5" DS Utilities Disk Operating instructions PRICE
P. 0. BOX 6408 (409) 888-2686 BEAUMONT, TEXAS 77705 include *3.50
for shipping and handling For MCA ISA orders call (409)
833-2686 AMIGA is a trademark of Commodore - Amiga inc.
NoSound: PRINT SoundName$ ” not loaded."
GOSUB Cleanup END:' End Program AssignChan: 1 Assign channel ID's by starting ' a sound with 0 volume in each channel LeftA=0:RightA=l:LeftB=3:RightB=2 Repss=l:Vols=0 MemS=SndMems(1) Lengths=SndLengths(1) Pitchs=SndPitchs (1) FOR I * 1 TO 4 IDS=FSPlaySounds(Mems,Lengths,Repss,Pitchs,Vols) IF 1=1 THEN SndlDS(LeftA)=IDS IF 1=2 THEN SndlDfi(LeftB)=ID& IF 1=3 THEN SndlDfi(RightA)=ID& IF 1=4 THEN SndlDfi(RightB)=ID& NEXT RETURN PlaySound: ' Play Sound indicated by SndNum 1 in channel indicated by ChanNum Mem&=SndMem&(SndNum) Length&=SndLength&(SndNum) P it ch&=SndP it ch&(SndNum)
ID&=SndID&(ChanNum) Halt&=FSStopSound&(ID&) ID&=FSPlaySound&(Mem&,Lengths,Repss,Pitchfi,Vols) SndlDS(ChanNum)=ID& RETURN SayPhrase: ' Say Phrase$ in channel indicated ' by ChanNum ID&=SndID6(ChanNum) Halt&=FSStopSoundS(IDS) SAY PhraseS,How% VolS=0 ID&=FSPlaySound&(Mem&,Lengths,Repss,Pitch&,VolS) SndlDS(ChanNum)=IDS RETURN StopSounds: 1 Stop all sounds FOR I = 0 TO 3 IDS=SndIDS(I) HaltS=FSStopSoundS(IDS) NEXT RETURN GleanUp:
• Free up sound memory and Close library FOR 1=1 TO NumSnds
Mems=SndMems(I) Lengths=SndLengths(I) IF MemsoO THEN CALL
• AC* With MIDI and SoundScape, you can write programs that
manipulate musical information. In this article, I'll explain
what MIDI and SoundScape are, then give two example programs
that manipulate music from within the SoundScape environment.
Programming with MIDI, the Amiga, and SoundScape ByTodorFay Author of SoundScape An Introduction to MIDI The last five years have seen a revolution in the music studio. This revolution is MIDI.
In today's music studio, many devices are connected with MIDI (Musical Instrument Digital Interface) cables.
Keyboards, rack mount synthesizers, drum machines, sequencers, effects boxes, even automated mixers, are strung together by MIDI.
MIDI provides a method of communication between these devices. It enables a keyboard to tell a rack mount synthesizer when a key has been hit so it can play it. MIDI enables a drum machine to synchronize with a sequencer by having the drum machine tell the sequencer when to start, and how fast to play.
MIDI is organized as a one way message service. A source sends MIDI events to one or more receivers. The receivers do not reply; they simply read the events and process them if appropriate.
MIDI events are usually three or fewer bytes in length. The first byte is called the Status byte. The Status defines the type of event. It is followed by the number of data bytes necessary to convey this data (sometimes none.) The data bytes always have their MSB cleared. This clearing gives only seven bits for the data, but it identifies that this is a data byte, not status. Status always has the MSB set.
One example would be a note on event. There are three bytes in such an event. The first byte, the status, has the Note On code. The second holds the value of the note, a number between 0 and 127. The third holds the velocity of the note, a number between 1 and 127. The higher the velocity number, the faster the key was struck. This usually translates into a higher volume.
Some MIDI event types have a destination id built into the event. This id allows several different devices to be received from the same source, but each can be designated to listen to different events by assigning different ids to the receivers. The id is a four bit number in the lower four bits of the status byte. This gives us sixteen ids, from 0 to 15.
Each MIDI receiver can be set to listen only to events which are intended for one particular id. So, with sixteen ids available, one source can send to sixteen receivers and each of them will play different notes. Of course, it is also perfectly legal to have two receivers listen for the same id; they'll just both play the same notes.
In MIDI terminology, these ids are called 'channels'.
Events that carry channel information are all the events that are used to transmit a musical performance. For each of these events, the upper four bits of the status byte actually define the command, while the lower four bits define which channel the event is intended for.
Here's a run down of these events: NOTEON: NOTEON is sent whenever a note is to be played. There are three bytes. As with all events, the first byte carries the status. Since this is a channelized event, the channel id is stored in the lower four bits of the status, while the upper four bits carry the NOTEON status. The second byte carries the note value. The third byte holds the velocity. If the velocity is 0, this note is actually a note off event, the note should stop being played.
NOTEOFF: NOTEOFF is the same as NOTEON, except it is a command to stop playing the specified note. This command also has a velocity byte which notes how fast the finger lifted up when the key was released. Many manufacturers use the NOTEON event and a velocity of zero for note off, so be prepared to handle it.
Continued.., POLYPRESSURE: Some keyboards are capable of measuring how hard each individual key is being pressed. POLYPRESSURE is used to transmit that information. There are three bytes, including status. The second holds the value of the note, just as with NOTEON. The third byte holds the pressure, a number between 0 and 127.
AFTERTOUCH: AFTERTOUCH is the same as POLYPRESSURE, except it is mono; it refers to all the keys at once. So, there are only two bytes - the status and the overall pressure.
PITCHWHEEL: Every time the pitchbend wheel on a synthesizer is moved, this event is sent. Including the status, there are three bytes. The absolute position of the wheel is broken into two seven-bit segments. The least significant bits are in the second byte, the most significant in the third.
CONTROLCHANGE: In addition to pitch bend and after touch, there are lots of other performance parameters which can be sent. One example is a modulation wheel. This is a catch-all event that can be used for sending all types of data. There are three bytes. The second is the control change number - a value between 0 and 123. This event specifies the type of event.
The third byte is the actual data.
PROGRAMCHANGE: Most synthesizers have a bank of preset sounds which the musician can instantly switch between. This event has two bytes - the status and the number of a preset.
The remaining MIDI events are not channelized. All devices respond to these events, if they can. For example, there are several timing commands which control devices such as sequencers and drum machines which need timing information in order to run. We'll talk about those later on.
Although MIDI is intended primarily as a method for transmitting performance information between a music source and performers, it also provides a great opportunity to process musical information in real time. In other words, there's nothing to stop you from intercepting the MIDI events with a black box that does something weird and wonderful with them, then passes them on.
For example, there are products you can buy in music stores that will translate one type of event into another.
PITCHWHEEL becomes fast note arpeggios. There are echo devices that work by simply storing an event and sending multiple delayed copies of it.
There are products that perform along with MIDI in unanticipated ways. Lighting controllers that switch lights on PROGRAMCHANGE events. Automated mixing consoles that can have volume levels, effects, and even equalization controlled by CONTROLCHANGE events. Devices that can be controlled by MIDI have a wonderful advantage. Not only can they be remotely controlled, but this can be done as part of a musical performance.
Just think what could be done with an Amiga!
SoundScape and MIDI SoundScape provides an environment that is similar to a MIDI studio. Taking advantage of the Amiga's multitasking ability, SoundScape lets any number of programs behave as if they were MIDI devices, each capable of sending and receiving MIDI events. Each of these MIDI devices, or modules, is represented by an icon in the primary SoundScape window - the Patch Panel.
In the Patch Panel, modules which create MIDI events are displayed on the left. Modules that receive MIDI events are displayed on the right. The user makes MIDI "patches" by clicking on a left icon, then a right icon. A line is drawn between the two modules, indicating that the patch has been made. One module can send to multiple receivers, and multiple modules can send to one receiver.
Once these connections have been made, any MIDI event generated by a module on the left will be sent to all modules that receive from it on the right.
To handle moving these MIDI events from left to right, SoundScape provides its own message-passing service.
Unlike the Amiga's message passing, this is a datagram service, i.e. there is no replying, no handshaking. This is so because MIDI is a datagram service, and with good reason: the nature of real time music information places much more emphasis on throughput and response time, than on accuracy and synchronization. This service also makes it very easy for one source to send to multiple receivers.
Each module that is represented in the patch panel has a 'port' for sending and receiving MIDI events. Some ports can only send, some can only receive, and some can do both. Each port has a unique identifier, a number between 1 and 255.
It la possible tor an outside program to Install Itself as a port In the Patch Panel and become part of the SoundScape environment.
In other words, you can write your own MIDI software and integrate it with the SoundScape system.
How Is this done?
SoundScape exists on the Amiga as a library. So, SoundScape is invoked by one or more programs calling OpenLibrary ("soundscape.library",0). As a library, SoundScape allows multiple programs to interface with it through library function calls. These calls include routines that a module uses to install itself in the Patch Panel, and routines to create, send and receive MIDI events.
Here's a run down on the tools you will use to write your own MIDI device: Data Structures LET YOUR WORK LOOK ITS BEST!
Just about everything in SoundScape is done with linked lists. MIDI note packets are queued by the router in linked lists. The Tape Deck keeps a linked list of tracks, each pointing to a linked list of notes - the sequence. The memory allocator keeps linked lists of freed list nodes, so that nodes can be allocated very quickly without resorting off the heap.
Each list node type starts with the same generic header: struct Link struct Link *next; * Next node in the linked list. * unsigned char type; * Type of this node. * unsigned char mark; unsigned short data; }; All of the fields in the Link structure should be left alone.
Here is the Note structure: struct Note struct Link link; unsigned short duration; *Clock beats the note is on.* unsigned short wait; * Clock beats till next note. * unsigned char status; * Midi status. * unsigned char value; * First byte. * unsigned char velocity; * Second byte. * }; Note nodes are actually the same as MIDI packet nodes.
They carry MIDI status, note value and note velocity (bytes one and two of the standard MIDI packet.) For sequencing, two fields, duration and wait, are also included. These features specify how long the note is played and how long to wait before playing the next one.
Allocating and Sending MIDI Events Because the SoundScape MIDI event routing system is a one way datagram service, there needs to be some method for allocating and returning these MIDI events. With the Amiga's Exec message passing system, this process is handled by having the receiver of the message always reply.
This way, the message is returned to the message originator which can reuse it or deallocate it.
But with MIDI events in SoundScape, the event is sent to possibly multiple (or no) receivers, and each may deal with it differently. Some may actually store the event for later use (which is what a sequencer, like the Tape Deck, would do.). Others may alter the event and send it on to yet other modules.
Two routines, AllocNode() and FreeNode(), let you allocate MIDI events from the central allocator and return them when finished.
Professional 35mm Slides TRU- ItflAEE 3 Now you can have reproduction and presentation quality slides of your work S Distortion-free fills in raster lines crisp bright colors, converts all IFF files ? Photographic prints in various formats also available Call (212) 777-7609 FOR DETAILS Ask for llcnc or write TRU-IMAGE
P. O. Box 660, Cooper Station New Yoik, N.Y. 102 0 Amiga It «
trademark ol Commodore-Amlga.
When a module is ready to send a MIDI event, it calls AllocNode(NOTE) to get that event. AllocNode can actually allocate one of three different kinds of structures: NOTE, SEQUENCE, and TRACK. The SEQUENCE and TRACK structures are useful only to the Tape Deck. The NOTE structure is also designed for use in the Tape Deck, which is why two of its fields, 'duration' and Yrait' are not part of a normal MIDI event. But, since it is these MIDI events that end up being tied together into a sequence by the Tape Deck, it is easiest to use the same structure for both.
Here's the code to allocate a MIDI event struct Note *midievent; midievent = (struct Note *) AllocNode(NOTE); If AllocNode returns NULL, there's not enough memory left in the system. You should always be prepared for this problem.
Stuff the status code and appropriate data into the Note structure, then send it with the Send command: if (midievent) midievent- status = NOTEON; midievent- value = 90; midievent- velocity « 64; Send(thisport,midievent); 1 continued., ALDHAFDNT5 ?pipeggpp-. As. ?K pi$ r. yi,?m VOLUME 1 CONTAINS 32 point HEADLINE FONTS SPECIALTY FONTS Pictures ft 0 ttiwti & Backgrounds m sis m nn Borders cd vyy vu % m and STENCIL ?Hiant Shadow DESIGNED ESPECIALLY TO BE USED HITH GOLD DISH'S PACESETTER™ AND ELECTONIC ARTS' DELUXE PAINT?* AND LOTS MORE!
Over 20 total fonts 11!
ONLY $ 19.95 Includes 56H to Plamms
DEALER INQUIRIES HELCOHEt For this example, we sent a note on event. The first data byte, the note value, was 90 (octave 7, F ). The second data byte, the velocity, was 64. Thisport' is the id of the port for this module. The Send command instructs SoundScape to take 'midievent' and send copies of it to all ports that are set up to receive from thisport'.
The Send command places 'midievent* in a queue of MIDI events. This queue is processed by a task that runs at a slightly high priority. This task, the MIDI event router, takes each event, makes copies of it, and passes each copy to a port that is supposed to receive the event. Send passes the copy to each port by calling a routine which the port provides, and passing the event as a parameter.
Receiving H BDI Events So, each port must provide a routine for handling MIDI events sent to it. Here's an example of such a routine: outcode(midievent) struct Note *midievent; ( FreeNode(midievent); ) This sample does absolutely nothing with the event. It just returns it to the central allocator.
Open, Close, and Edit routines In addition to the output routine, there are three other routines which each port provides. There is a routine for opening the port, a routine for closing it, and a routine that lets the user or other software edit its parameters.
The open routine is called whenever someone wants to activate the port. For example, the first time the user connects this port to another port on the patch panel, this routine is called. Often, this routine does nothing; it depends on the module. For example, when the Console Keyboard module is opened, the open routine creates a task. This task puts up a window that displays a keyboard and then waits for keys to be hit. When keys are hit, this task will allocate MIDI events and send them.
On the other hand, the MIDI mixer does nothing in its open routine.
The only thing an open routine must do is return 1 if successful, 0 if unsuccessful. So, if the console keyboard can't create the task which opens the window, it returns 0.
A port can be opened for input and output separately. So, the open routine is passed one parameter, a flag that is set for opening for MIDI event sending (icon on left side of Patch Panel) and cleared for opening for MIDI event receiving (the right side.)
Here's an example open routine for a port which only wants to receive MIDI events: opencode(direction) unsigned char direction; if (direction) return(0); else return (1); } The dose routine is very similar to the open routine, only it is used to deactivate the port for one particular direction. For .example, the Console Keyboard will shut down the window and delete the task when its dose routine is called.
A close routine that works with the above open routine example would be: closecode(direction) unsigned char direction; return(1); } Like the open routine, the close routine should return 1 if successful, 0 if unsuccessful. The close routine will only be called if the port has been opened in that particular diredion.
So, the above example doesn't bother worrying about the diredion and always returns 1.
For now we will ignore the edit routine. J p These days an Amiga with only 512K memory is operating at a fraction of its’ potential.
Why Should Your Amiga?
Fortunately we’re here to change all that.
We’re Expansion Technologies, and we’ve developed the best RAM expansion board available for your Amiga 1000.
Ttie Escort 2.
It’s a 2 megabyte, auto-configuring card that meets all the known standards and then some.
It’s also a uniquely designed two-slot card cage that offers incredible flexibility.
Like the ability to upgrade to a whopping 4 megabytes of memory. Or if you prefer you can add a hard disk controller card, or an 86-pin buss return or...weIl, you get the idea.
And it’s fast.
We’ve utilized a no wait-state design so it keeps perfect pace with your Amiga.
All this for less than $ 650.
We’re even readying products for the new 500 and 2000 series Amigas. Among them hard drives, controller cards and memory expansion.
All of this from Expansion Technologies. A company whose people have been making Commodore products for years, not weeks.
So if your Amiga’s a bit lightheaded give us a call at 415 656-2890. Or write us at 46127 Landing Parkway, Fremont, CA 94538.
Dealer Inquiries Invited.
Installing Your Module To install the port, call: AddMidiPort (opencode, closecode, editcode, outcode, inimage, outimage, port, name).
Opencode, closecode, editcode, and outcode are the four routines. You can supply 0 for editcode and outcode, if you'd like. You also pass pointers to two Intuition style Image structures. These are the icons for the sending and receiving port icons. They can be the same icon, which is usually the case. If you intend only to send or only to receive, you provide only one image and 0 for the other. You need also to give AddMidiPort the name of your module, and the port id that you wish. If the port cant use that id, it will use an available one. The id it allocates (hopefully the one you asked
for) is returned.
The Module Program Having defined the images and special routines for the module, we still need to discuss the main program. This opens SoundScape and calls AddMidiPort to install the module.
The main program is very simple. Open the SoundScape library. Like opening Intuition or Graphics, this gives you the base of the SoundScape library calls. Immediately follow by closing SoundScape. This may seem strange, but it is neccessary since this is actually a module in SoundScape. If it keeps SoundScape open, then SoundScape can never be closed, because there's no way of telling it to do so later on. Closing the library at this point does no harm because the SoundScape library should already have been opened by the program called SoundScape (which does absolutely nothing, except opening
a window, opening SoundScape, waiting for you to close the window, and closing SoundScape).
Next, call AddMidiPort to install this module as a port. Now all this program can do is wait to be shut down. The open, close, and output routines are all called by other tasks. We can't exit though because AmigaDOS will pull that code from memory. So, wait for SoundScape to shut down and then remove this port. Set the task priority low and wait for this port to disappear. MidiPort(thisport) is a function that returns a number if the port exists, 0 if it doesn't exist.
Main() SoundScapeBase = OpenLibrary("soundscape.library",0); if (SoundScapeBase) CloseLibrary(SoundScapeBase); thisport = AddMidiPort(opencode,closecode,0,outcode,!
Nimage,outimage,moduleid,"modulename"); SetTaskPri(FindTask(0),-20); while (MidiPort(thisport)) Delay(100); } ) Let's write an example module. This module takes notes and turns them into chords. Whenever a note MIDI event comes in, the module sends the same event out, with copies of the event transposed up a third and a fifth.
(see listing for chord.c) Here's the with file to link this example with: FROM * Lib:Astartup.obj, * sslink.obj,* chord.o,* .
Morelib.obj TO * ChordMaker LIBRARY * Lib:amiga.lib,* Librlc.lib To run this file, first get SoundScape running. Then, since you probably haven't made an icon for this program, type "run ChordMaker from the CLI. A new icon will appear in both the left and right hand columns. To test the icon, connect the Console keyboard to the right hand icon and the Player Piano or Sampler to the left hand icon. Play notes.
Notice how they get converted into chords.
Now that you have the tools to receive, manipulate, and send MIDI events, take some time off and experiment Here are fust afew ideas:
* A module that inverts notes. Notes coming in are subtracted
from128 and sent back out Left-handed people might be amused by
this one,
* A display program that puts different IFF pictures at the front
screen,triggered by PROGRAMCHANGE events.
* A module that takes PITCHWHEEL events and changes them into
* A module that randomizes the velocity of notes passing through
for interesting dynamics*
* A keyboard splitter. This splitter sends all notes, above a
cutoff point, on one channel, while sending the notes below on
* The possibilities are endteae.
After playing around a bit, get back to this article and we'll continue.
Now that you're familiar with the simplest level of SoundScape programming, we'll dig into it a little deeper.
We'll discuss MIDI real time events and write an application - a MIDI echo device - that uses these events. We'll also get into edit routines and state structures: the mechanisms for allowing the user and other programs to access your module and change parameters.
MIDI Timing Events Along with communicating note and performance information, some MIDI devices need to synchronize in time.
For example, one piece of music could be performed by a sequencer and drum machine, in tandem. The two machines must start at the same time, then stay in step. In addition, it would be nice to stop at some point, move to another, and pick up from there, with both machines still in sync.
There are MIDI events that support such timing. Either of the machines, the sequencer or the drum machine, acts as a master. As the master runs, it sends these MIDI timing events to the other, the slave.
These timing events are: START Commands the device to start playing from the beginning.
1 FULL interface to ROM Kernel, Intuition, Workbench and AmigaDos 1 Smart linker for greatly reduced code size 1 True native code implementation (Not UCSD p-Code or M-code) 1 Sophisticated multi-pass compiler allows forward references and code optimization 1 Real InOut, LonglnOut, InOut, Strings. Storage. Terminal 1 Streams, MathLibO and all standard modules 88S1 1 Works with single floppy 512K RAM ¦ Supports real numbers and transcendental functions ie. Sin, cos, tan, arctan, exp. In, log, power, sqrt ¦ 3d graphics and multi-tasking demos ¦ CODE statement for assembly code ¦ Error lister will
locate and identify all errors in source code ¦ Single character I O supported ¦ No royalties or copy protection ¦ Phone and network customer support provided ¦ 350-page manual STOP Commands the device to stop playing.
Pascal and Modula-2 source code are nearly identical. Modula-2 should be thought of as an enhanced superset of Pascal. Professor Niklaus Wirth (the creator of Pascal) designed Modula-2 to replace Pascal.
CONTINUE Commands the device to start playing from the current position.
CLOCK Commands the device to increment its clock. This is the most critical part because it is the actual timing. The faster the CLOCK events are sent, the faster the music is played.
The master keeps the slave in sync by sending CLOCK events at the rate being played.
Added features of Mod ¦ CASE has an ELSE and may contain subranges ¦ Programs may be broken up into Modules for separate compilation ¦ Machine level interface Bit-wise operators Direct port and Memory access Absolute addressing Interrupt structure Ramdisk Benchmarks (secs) Compile Link Sieve of Eratosthenes: Float Calc Null program i-2 not found In Pascal ¦ Dynamic strings that may be any size ¦ Multi-tasking is supported ¦ Procedure variables 1 Module version control ¦ Programmer definable scope of objects ¦ Open array parameters (VAR r: ARRAY OF REALS;) ¦ Elegant type transfer functions
Optomized Size Execute
4. 2 1257 bytes
8. 6 3944 bytes
3. 6 1736 bytes 1100 bytes SONG POSITION Commands the device to
set its clock to a particular time. If a CONTINUE command is
sent next, it should start playing from there.
A good example of devices in SoundScape which produce and use MIDI timing events are the Clock and the Tape Deck (a sequencer). When the Start button is hit on the Clock module, it sends a START event, followed by a stream of CLOCK events, at some set rate. When the Tape Deck receives a START event, it rewinds to zero and enters the playback mode. From this point on, each time the Tape Deck receives a CLOCK event, it increments its internal clock counter and sends any notes that should be played.
Product History The TDI Modula-2 compiler has been running on the Pinnacle supermicro (Aug.
’84), Atari ST (Aug. ’85) and will soon appear on the Macintosh and UNIX in the 4th Qtr. '86.
The Clock module is a time base. With most sequencers, this feature is built in. Because of SoundScape's modularity, the two can be kept seperate. So, if a different time base, (such as a SMPTE reader or external MIDI) is desired, it can be connected and the Clock module can be disconnected, without the Tape Deck module needing to know about it.
Regular Version $ 89.95 Developer’s Version $ 149.95 Commercial Version $ 299.95 The regular version contains all the features listed above. The developer’s version contains additional Amiga modules, macros and demonstration programs - a symbol file decoder - link and load file disassemblers - a source file cross referencer
- the kermit file transfer utility - a Modula-2 CLI - modules for
IFF and ILBM. The commercial version contains all of the Amiga
module source files.
Other Modula-2 Products Kermit - Contains full source plus $ 15 connect time to CompuServe.
Examples - Many of the C programs from ROM Kernel and Intuition translated into Modula-2.
GRID - Sophisticated multi-key file access method with over 30 procedures to access variable length records.
With the Clock (or some future time base module) as our source, we can create modules that manipulate musical information, in sync with other modules that are also connected to the Clock.
MODULE Sieve; CONST Size = 8190; TYPE FlagRange = [O..Size]; FlagSet = SET OF FlagRange; VAR Flags; FlagSet; i: FlagRange; Prime, k, Count, Iter: CARDINAL; BEGIN (*$ S-,$ R-,$ A+ *) FOR lter:= 1 TO 10 DO Count:= 0; Flags: = FlagSet(); (‘ empty set') FOR i:= 0 TO Size DO IF (i IN Flags) THEN Primes (i * 2) + 3; k:= i + Prime: WHILE k = Size DO INCL (Flags, k); k:= k + Prime; END; Count:= Count + 1: END; END; END; END Sieve.
$ 29.95 $ 24.95 $ 49.95 MODULE Float; FROM MathLibO IMPORT sin, In, exp, sqrt, arctan; VAR x.y: REAL; i: CARDINAL; BEGIN CST-.SA-.SS--) x:= 1.0; FOR i:= 1 TO 1000 DO y:= sin (x); y:= In (x); y:= exp (x); y:= sqrt (x); y;= arctan (x); x:= x + 0.01; END; END float.
MODULE calc; VAR a.b.c; REAL; n. i: CARDINAL; BEGIN (*$ T-,$ A-,$ S-‘) n:= 5000; a:= 2.71828; b:= 3.14159; c:= 1.0; FOR i:= I TO n DO c:= c*a; c:= c*b; c:= c a; c:= c b; END; END calc.
Continued.. rr.r MIDI Echo Module A simple, but very useful module which needs timing information in order to process MIDI events is an Echo device.
To create an echo effect, take each note event that comes in and store it. After a set amount of time, send a copy of the note out, with the velocity damped a little. Wait the same amount of time and send another copy, with the velocity even lower. Repeat this process a set number of times, and you are done echoing this note.
In order to work, this module needs some timing reference.
It could use the Amiga's Timer device as a source. The user would specify delay time in seconds. However, for most applications, it would be nice if the delay time were tied to the speed of the rest of the performance. The user could think in musical terms and set a quarter note as the delay time.
So, we use MIDI timing events for synchonization. This means that all the information we need to run (notes and timing) arrives as MIDI events, which streamlines things dramatically. We need to write one routine that processes the two different event types and install this routine as the 'outcode' (the routine each module provides which handles MIDI events sent to it.). Here'sa sketch of how this routine processes MIDI events: We need four data Hems:
• A list of all the notes that are currently being echoed-
? A number that says how many MIDI docks for the echo delay ~ 'delaytime'.
? A number that says how many times a note should echo 'delaycount',
• A flag that says whether we are running - 'running'.
Here's how we process different events.
NOTEON, NOTEOFF: If 'running' is true, and 'delaycount' is nonzero, store this event in 'notelist'. Since MIDI events are stored in the SoundScape Note data structure, we have two unused fields available: wait and duration. Store ’delaytime' in the duration field and 'delaycount' in the wait field. If 'running' is false, or there is no 'delaycount', simply return this event to the system.
START, CONTINUE: Set'running'to true.
STOP: Clear 'running' and send all the events in 'notelist*. This is important so that notes which were on, will be turned off.
CLOCK: If 'running' is true, go through 'notelist', decrementing the duration fields. For each event that has its duration (delaytime) at zero, do the following: Allocate a note event and copy this event into it. Set the velocity field of the copy to the original velocity * wait 'delaycount'. This setting says that the velocity gets smaller for each successive echo. Send the copy. Set the duration field of the event in 'notelist' to 'delaytime'. Decrement the wait field (number of times left to echo.) If the number is zero, remove the event from 'notelist' and throw it away.
All other events.
Return them to the SoundScape packet allocator.
Before we get to writing the code for this module, there is one issue that awaits us. We have two variables, 'delaycount' and 'delaytime', which we would like the user to be able to change. In addition, it would be nice if these could be loaded and saved as part of SoundScape environment load and save commands.
State Structures and Edit Routines It would be nice if other modules could also edit, or at least access, certain parameters within your module. To do this, you def ine a data structure which has all the data about the state of your port. The first field is a long integer, specifying the length in bytes, of what follows. By noting the length, we make it possible for outsiders, that don’t know anything about this module, to move the proper amount of data. This routine comes in handy for environment loads and saves.
The remaining fields are whatever parameters you'd like to share with the world.
So, the appropriate state structure for the echo module would be: struct EchoState long length; long delaytime; long delaycount; }; Then, to let the user and other programs access your variables, you must provide an edit routine of the form: editcode(direction,command,state) In this routine, 'direction' specifies input or output, 'command' indicates what type of edit operation, and 'state' is a data structure which you have defined.
The commands are: USEREDIT: This command is called when the user double clicks on one of the port icons, 'direction' specifies whether the clicked-on port was the input or output port. You should provide a user friendly edit routine. This means putting up a window with lots of Intuition gadgets to edit whatever parameters the user might need to get at. In some cases, you will need separate edit routines for the input and output ports. For example, though the Console Keyboard and Player Piano are the same port, they have separate edit windows. If your input and output are more tightly tied
together, (which is most often the case), one window will do.
You lock your car.
You lock your door.
Do you lock your data?
MagiCode is an encryption system MagiJCode protects: Software files Picture files Executable Datafiles Source code Textfiles Send check or money order for $ 30.00 to: Magic Circle Software 37 Raldne Road Hyde Park, MA 02136 Specify Kkkstnrt VI.1 arV1.2 512K recommended.
MA residents add 696 tax Mease allow 3-6 weeks for delivery Dealer biqutries welcomed.
GETSTATE: This commands you to copy your state structure into the buffer, including the length, if the caller doesn't know your state structure size, it will provide a buffer of 4096 bytes.
SETSTATE: The opposite of GETSTATE, this command allows someone else to change your parameters. Copy the buffer into your state structure.
LOADSTATE: This command is identical to SETSTATE, with one addition: After copying the buffer into your state, if your module stores something in files on disk (like samples), retrieve it. This is intended primarily for the load environment command. If you do file io, a file name probably should be part of your state structure. So, the LOADSTATE command ends up giving you the name of a file to load, which you copy into your state structure. Then load the file.
SAVESTATE: This command instructs your port to save all files (if appropriate). Next, copy your state structure into the buffer.
This is intended primarily for the save environment command; it will save your state structure. Later, when loading an environment, you can get that state structure back with a LOADSTATE command.
If you don't do file io, simply treat SAVESTATE as a GETSTATE command.
You may or may not have already run into one particular unpleasantry with AmigaDOS: Tasks can not do disk io.
Well, you will run into that problem now, because your edit routine might often be called from a task. Doing disk io could be a problem.
SoundScape provides a way around this difficulty with a special function call that passes the address of your function and all the parameters to a process that (toes the io for you.
Return = FunctionCall(yourfunction,parameter!,parameter2) i You are allowed up to seven parameters.
However, for our echo program, we don't do file io. So, the SAVESTATE and GETSTATE commands simply copy the EchoState into the supplied buffer, while the LOADSTATE and SETSTATE commands do the opposite.
We're ready to write our program.
(see listing for echo.c) Here's the with file to link it: FROM * Lib:Astartup.obj, * sslink.obj,* echo.o,* morelib.obj TO * EchoEcho LIBRARY * Lib:amiga.lib,* Librlc.lib Compile and run this program. Hook it up just as you did the chord program. Also, connect the clock to the echo module and start it running. Play notes. They should echo. Open the edit window by clicking twice on either icon. Change the parameters while playing notes. Do an environment save.
Change the parameters again, then reload the environment.
They should go back to the previous values.
With these two modules behind you, the possibilities are endless.
• How about a module that takes notes and turns them into jumping
• Or your own sequencer.
• Ora module that computes harmonies to incoming notes.
Have fun!
[Ed Note: Link files will be available through People Link and the Amicus disks.] continued... Listing for SoundScape.h ? SoundScape.H
(c) 1986 Todor Fay Definitions and structure declarations for
? struct Link struct Link ?next; ? Next node in the linked list. ? unsigned char type; ? Type of this node. ? unsigned char mark; unsigned short data; }; struct Note struct Link link; unsigned short duration; ? Clock beats the note is on. ? unsigned short wait; ? Clock beats till next note. ? unsigned char status; ? Midi status. ? unsigned char value; ? Note value. ? unsigned char velocity; ? Node types. ? define NOTE 1 ? Midi Commands ? fdefine NOTEOFF define NOTEON define POLYPRESSURE fdefine CONTROLCHANGE fdefine PROGRAMCHANGE fdefine AFTERTOUCH fdefine PITCHWHEEL
fdefine SYSTEMX fdefine SONGPOSITION fdefine SONGSELECT fdefine TUNE fdefine EOX fdefine CLOCK fdefine PUNCHIN fdefine START fdefine CONTINUE fdefine STOP fdefine PUNCHOUT fdefine ACTIVESENSE 0x80 0x90 OxAO OxBO OxCO OxDO OxEO OxFO 0xF2 0xF3 0xF6 0xF7 0xF8 0xF9 OxFA OxFB OxFC OxFD OxFE ? Edit commands ? fdefine USEREDIT 1 fdefine GETSTATE 2 fdefine SETSTATE 3 fdefine LOADSTATE 4 fdefine SAVESTATE 5 Lisingfor Chordx finclude Mexec types.h" finclude "exec exec.h" finclude "intuition intuition.h" finclude "soundscape.h" ?First, the data for the icon in the Patch Panel ? UWORD chorddata[] =
0,0, 0,0, 0,0, 0,0, 0,0, 6,0,
1. 32768, 255,57344,
1. 32768, 6,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,96, 0,96,
3072. 96,
3072. 992,
3072. 992, 3072, 96,
3072. 96, 31744.992, 31744.992, 0,96, 0,96, 0,992, 0,992, 0,0,
0,0, 0,0, Instruct Image chordimage =
0,0,32,16,2,chorddata,3,0,0 }; ?This module has a port id.
? unsigned short thisport; opencode(direction) ?Always
happy to open. ? unsigned char direction; ( return(1); }
closecode(direction) unsigned char direction; return(1);
) outcode(event) ?Strip the channel information from the
status byte. If this is a NOTEON or NOTEOFF event, create
two new events, copy the status and velocity into them, add
constants to their note values, and ship off all three.
Otherwise, free this event.
? struct Note ?event; struct Note ?secondevent; unsigned char status ° event- status & OxFO; if ((status == NOTEON) || (status NOTEOFF)) secondevent = (struct Note ?) AllocNode(NOTE); if (secondevent) secondevent- status = event- status?
Secondevent- velocity ** event- velocity; secondevent- value = event- value +4; Send(thisport,secondevent); ) secondevent * (struct Note *) AllocNode(NOTE); if (secondevent) secondevent- status ¦ event- status; secondevent- velocity = event- velocity?
Secondevent- value = event- value +7; Send(thisport,secondevent); } Send(thisport,event); } else FreeNode(event); 0,0,0, 0,0,0,
6144. 768.49200,
6144. 768.49200,
6144. 768.49200,
6144. 768.49200,
6144. 768.49200, 63488.7943.49648, 63488.7943.49648, 0,0,0,
0,0,0, Instruct Image echoimage -
0,0,44,10,2,echodata,3,0,0 }; ?Intuition gadgets for
letting the user select delaycount and delaytime. These
were generated with Power Windows: * long SoundScapeBase;
main() ( SoundScapeBase = OpenLibrary("soundscape.library",
If (SoundScapeBase) ( CloseLibrary(SoundScapeBase); thisport = AddMidiPort(opencode,closecode,0,outcode,&chordimage, &chordimage,-1,“chord maker"); SetTaskPri(FindTask(0),-20)?
While (MidiPort(thisport)) Delay(100); } } Lisingfor Echo.c include "exec types.h" ?include “exec exec.h“ ?include "intuition intuition.h" ?include "soundscape.h" ?This is the state structure for this module. It has two variables, delaytime and delaycount, that other modules can access. The length field is always set to 8. This indicates that 8 bytes follow, so environment loads and saves, which know nothing of this structure, can still move the proper amount of data.
* struct EchoState long length; long delaytime; long
delaycount; }; ?Initialise the delay time to 24 clocks (a
quarter note) and the delay count to 4 echoes.
* struct EchoState echostate = sizeof(echostate) - 4,24,4 };
struct Note *notelist = 0?
Unsigned short thisport; UWORD echodata[] = * 44 x 10 * 0,0,0, 0,0,0,
24. 0.0,
6. 0.0,
255. 32768.0,
6. 0.0, 24,0,0, 0,0,0, 0,0,0, UBYTE SIBuffer6[16] = "24"; struct
Stringlnfo GadgetSI6 = SIBuffer6, NULL, 0, 16, 0, 0,0,0,0,0,
0, 24, NULL }; USHORT BorderVectorsl[] «
(0,0,111,0,111,9,0,9,0,Obstruct Border Borderl «
- 2,-1,
1. 0,JAM1, 5 BorderVectorsl, NULL Instruct IntuiText Itextl «

2. 0, JAM2,
- 109,0, NULL, “Delay Time", NULL Instruct Gadget timegadget °
NULL, 141,17, 108,8, GADGHCOMP,
NULL, &ITextl, 0, (APTR)&GadgetSI6, 6, NULL ); UBYTE
SIBuffer5[16] = "4"; struct Stringlnfo GadgetSI5 = SIBuffer5,
NULL, 0, 16, 0, continued... 0,0,0,0,0, 0, 4, NULL ); USHORT
BorderVectors2[] = (0,0,111,0,111,9,0,9,0,0); struct Border
Border2 =
- 2,-1,
1. 0,JAM1, 5, BorderVectors2, NULL Instruct IntuiText Itext2 =

2. 0,JAM2,
- 109,0, NULL, "Delay Count", NULL Instruct Gadget countgadget
= Stimegadget, 141,32, 108,8, GADGHCOMP,
NULL, &IText2, 0, (APTR)&GadgetSI5, 5, NULL Instruct
NewWlndow NewWindowStructure = 131,34, 286,51, 0,1, GADGETU
NULL, "Echo Parameters", NULL, NULL, 5,5, 640,200, WBENCHSCREEN
}; opencode(direction) ?Always happy to open. ? unsigned char
return(1); } closecode(direction) ?When closing down, throw out notelist. ? unsigned char direction; ( struct Note ?next?
For (;notelist;notelist = next) next = (struct Note ?) Notelist- link.next?
Notelist- velocity = 0; ? Force to off event. ? Send(thisport,notelist); } return(1)?
} outcode(event) struct Note ?event; ( static char running = 0?
Struct Note ?last, ?note, ?copy, ?next; unsigned short velocity?
Switch (event- status) case START : case CONTINUE : running =1; break; case STOP : running =0; for (?notelist;notelist = next) next = (struct Note ?) Notelist- link.next?
Notelist- velocity = 0?
} break; case CLOCK : if (!running) break; last = 0; for (note «= notelist;note;note = next) note- duration ; next = (struct Note ?) Note- link.next; if (!note- duration) copy = (struct Note ?) AllocNode(NOTE)?
Copy- status = note- status; copy- value = note- value; velocity « (note- velocity ? Note- wait) echostate.delaycount; copy- velocity = velocity; Send(thisport,copy); note- duration = echostate.delaytime; note- wait ; if (!note- wait) ( if (last) last- link.next = note- link.next; else notelist = (struct Note ?) Note- link.next; FreeNode(note); } else last « note; } else last » note; ) break; ) if (running && echostate.delaycount && (((event- status & OxFO) == NOTEON) || ((event- status & OxFO) == NOTEOFF))) ( event- link.next = (struct Link ?) Notelist; notelist = event; event- duration =
echostate.delaytime; event- wait = echostate.delaycount; ) else FreeNode(event); useredit() ?Open a window with two string gadgets. Wait for intuition messages. If CLOSEWINDOW, close down and return. If RAWKEY, send the keycode to OutConsole. This is a SoundScape routine that will pass the key value to the Console Keyboard, so it can be played from this window. If GADGETUP, read the appropriate string gadget.
? struct IntuiMessage ?message; short code, class; struct Gadget *gadget; struct Window ?window; GadgetSI5.LongInt = echostate.delaycount; GadgetSI6.LongInt = echostate.delaytime; window = (struct Window ?)
OpenWindow(SNewWindowStructure); for (;;) ( while (!(message = GetMsg(window-MJserPort))) WaitPort(window- UserPort); class = message- Class; code = message- Code; gadget = (struct Gadget *) message- IAddress; ReplyMsg(message) ; if (class == CLOSEWINDOW) break; if (class == RAWKEY) OutConsole(code); if (class GADGETUP) switch (gadget- GadgetID) case 5 : echostate.delaycount = GadgetSI5.LongInt; break; case 6 : echostate.delaytime = GadgetSI6.LongInt; break; } 1 ) CloseWindow(window); I editcode(direction,command,copystate) ?This is the edit routine. If the command is USEREDIT, call the
routine useredit which puts up a window and gadgets and lets the user edit the two variables. The variable notediting is used to avoid begin invoked multiple times. If GETSTATE or SAVESTATE, copy the echostate into the supplied buffer, copystate. For SETSTATE and LOADSTATE, do the reverse.
? char direction, command; struct Echostate ?copystate; ( static char notediting «= 1; echostate.length = sizeof(echostate) - 4; switch (command) case USEREDIT : if (notediting) notediting = 0; useredit(); notediting = 1; } break; case GETSTATE : case SAVESTATE : movmem(fiechostate,copystate,sizeof(echostate)); break; case SETSTATE : case LOADSTATE : movmem(copystate,&echostate,sizeof(echostate)) ; break; ) ) long SoundScapeBase; long IntuitionBase; main() SoundScapeBase = OpenLibrary("soundscape.library", 0); if (SoundScapeBase) IntuitionBase = OpenLibrary("intuition.library",0);
CloseLibrary(SoundScapeBase); thisport = AddMidiPort(opencode,closecode,editcode,outcode,fiechoimage, fiechoimage,-1,"echo"); SetTaskPri(FindTask (0),-20); while (MidiPort(thisport)) Delay(100); CloseLibrary(IntuitionBase); } , *AC* Conjp-U-Save 414 MAPLE AVENUE, WESTBURY, NEW YORK 11590 In NY State-(5 16) 997-6707 Outside NY State-(800) 356-9997 DEALERS ONLY!
Some of our lines: ITC, Progressive Peripherals, Avatex, Pico Surge Protectors, SKC, C. Itoh, Pengo, B.E.S.T., Phoenix, Suntron, Mousetrak, ACI, Techni-Soft & Others!
Call for Prices that will Knock Your Socks Off!
Below is a Sample of Some of Our Products ? SKC DISKS ?
100% Full Surface Certified
15. 25" DS DD 10 Pack ...
5. 25" DS HDtOPack ...
3. 5" DS DD 10 Pack ...
5. 25" DS DD Colors WI Library Case 10 Pk.
5. 25" DS DD W *Farsight(S 30 Pack .....
* $ 99 Value - War ( processor & Spreadsheet
......5.25" DS DD 10 PACK
C. ITOH 3.5" DS DD 10 PACK
KODAK .5.25" DS DD BULK ..
INNOVATIVE TECHNOLOGIES The Pocket Pak .holds up to 10
3.5" ... The Easel ......holds up to 20
3.5" ... The Pyramid ....holds up to 24
5.25" .. The Disc Directory holds up to 30+
3.5" . The Library .....holds up to 80
3.5" ...• The Speed Pad (Teflon) mouse
pad ... The Night Rider .portable Mac
cover ... The Propeller Bag nylon
briefcase .. DISKBANKS
SS-40 ..holds up to 50 3.5" disks .....
SS-50 ..holds up to 80 3.5" disks .....
F-100 ..holds up to 100 5.25" disks ...
3. 5" Head cleaner wet
5. 25" Head cleaner wet ... Copy
holder (metal, adjustable arm) Dust
Covers for all computers and printers ..
Computer Hand (copy holder) .....
Touch-it (static strip) .
Thomson Monitors ...
Mousepads ...
COMPUTERS Commodore, Amigia, IBM, Blue Chip, Fountain 40 MEG
ONE UNIT) Amazing Computing m©J987 39 JMT- ORGANIZE! DATABASE
MANAGER, VERSION 1.0 Mailing lists! Club memberships! Patient
records! Client files! Video tape libraries! Phone call logs!
Nearly anything that needs to be filed, sorted or calculated
is a candidate for Organize!
Easily design input forms and output reports with the mouse and pull-down menus. Just as simply - store, sort, review and print. The file size is limited only by disk space and the format is compatible with the industry standard dBASE format.
End your paper shuffle! Get Organize! Today.
Only $ 99.” In seconds, Organize! Can scan your files, locate information, and display or print in the format you want. Use it to print form letters with the Mailmerge function of Scribble!. Or calculate fields and do statistical analyses of your files with many of the same built-in math functions from Analyze!.
• Pulldown menu interface (mouse- driven).
• Large spreadsheets with efficient memory usage.
• Dedicated function keys for common commands.
• Business Graphics; print bar, stacked bar, pie graphs in 2 or
3-D; line, X-Y, area graphs; all in 4 or 8 colors; data from
spreadsheets; IFF format; view up to 4 graphs at same time;
instantly redraw graphs when data changes; ranges, labels,
titles, legends, rotation, scaling; fast and effective!
• Command Macros; save keystrokes; create templates.
• Sorting; rearrange row or column data quickly.
• File Icons; access spreadsheets via icons or names.
• Pulldown menu interface (mouse-driven)
• Multiple windows; edit cut & paste 4 documents on screen.
• Preview; see final form on screen before printing.
• Spellcheck; expandable 40,000 word dictionary; check word, all
words on screen, or entire document; alternative spellings
• Expanded Memory Support; for larger documents.
• More Amiga Keys; menu commands from keyboard or mouse.
• Mailmerge; print form letters, mailing • More Flexibility;
Wordstar™ commands; labels; create data file with Scribble! Or
scrolling while cut paste; improved file Organize! Operations.
• File Icons; access documents via icons or names; copy documents
by pulling icons across workbench.
Still only $ 99.95 See your local dealer or call: Brown-Wagh Publishing 1-800-451-0900 1-408-395-3838 (in California) 16J9S Lark Ave., Suite 210, Los Gatos, CA 95030 MICROSYSTEMS SOFTWARE, INC. 4301-18 OAK CIRCLE, BOCA RATON, FL 33431 IN FL. CALL (305)391-5077 VISA, MASTERCARD For Nearest Dealer Call 1-800-327-8724 Wordstar is a trademark of Micropro International. Amiga is a registered trademark of Commodore-Amiga, Inc. Waveform Workshop in AmigaBASIC™ “A utility program for any AmigaBasic programmer who wishes to use the sound facilities of the Amiga. “ by James Shields Waveform Workshop is a
utility program for any AmigaBASIC™programmer who wishes to use the sound facilities of the Amiga™. With Waveform Workshop, you can design, test, and save different waveforms, for use in other AmigaBasic programs.
I wrote Waveform Workshop because I needed to produce different sounding music in an AmigaBasic program.
Consulting the available literature, I found that the prevailing opinion was that AmigaBasic programmers were limited to three basic sounds, and that only assembler or C programmers had access to the advanced music features.
This didn't sound right to me. It had always been my impression that if you could change the wave shape, you could change the tone qualities of the note. I did some experimenting, and found that AmigaBasic could indeed produce many different types of sounds.
Sound is transmitted by pressure waves flowing through a medium, usually air. These alternating waves of high and low pressure move tiny membranes in your ears, which (by way of a few other bones and nerves) translate the pressure waves into the sensation of sound. Sound waves are usually periodic; that is, they repeat a particular pattern over and over. These patterns are called waveforms. Different musical instruments each produce unique waveforms. If you could save the waveform in the computer and play it back, the computer would sound like that instrument. The Amiga has the ability to
recall and use a particular waveform in AmigaBasic. Thus the programmer can make the computer sound like any instrument he wishes.
So, what was needed was a way of editing and saving these different wave shapes for use in other programs. Given the way AmigaBasic produces sound (explained below), I designed Waveform Workshop to accomplish that task. I was so pleased with the results that I decided to share the program with others.
Sound and AmigaBasic There are two fundamental AmigaBasic commands which affect the production of sound, WAVE and SOUND. The WAVE command is used to set the waveform pattern to be contimed... used by a particular voice of the Amiga. The SOUND command is used to tell the computer how and when to produce a note.
The format of the WAVE command is: WAVE channel , wave array The channel number, a number from 0-3, tells which of the four sound channels is to have the new waveform. The wave array is an array of integers which defines the shape of the waveform. The wave array must have at least 256 elements.
Possible values for individual elements in the wave array range from -128 to 127. If you graphed the values in the array, with the array index on the x axis and the values of the elements on the y axis, the resulting graph would show the shape of the wave.
Once the waveform has been described, the SOUND command is used to actually cause sounds to be made.
There are three variants on the SOUND command. The most used variant is: SOUND frequency , duration , volume , volce Where volume and voke are optional.
Frequency is measured in Hertz and defines the note to be played. A higher value will result in a higher note being played. The range of values for frequency is 20 to 15000.
Values outside this range will not result in an error, rather the computer will pick the closest valid note and use it instead.
Duration ranges from 0 to 77. A value of 18.2 is equivalent to a one second note.
Values for the volume parameter lie between 0 and 255. If this parameter is not specified, a value of 127 will be used. A value of 0 will produce no sound, whereas a value of 255 will result in an ear-splitting scream (well, as much as the Amiga is capable of...). Too much total volume (the sum of the volumes of all four channels) may result in sounding overtones -- excercise caution here.
The voice parameter is a value between 0 and 3, designating which channel is to play the note. If the channel is already playing a note, that note will be played out and the new note will be put on hold. Thus, a whole run of notes can be stored.
One note of caution, however - if too many notes are stored, AmigaBasic will run out of memory, and a nasty Guru Meditation will result. The actual number of notes that can be stored up depends on the size of your machine's memory, the size of your program, and several other factors. Thus I cant tell you how many can be stored. When I'm playing with this kind of thing, I try to be sure to save my program before I run it.
Other variations on the SOUND command include SOUND WAIT and SOUND RESUME. These commands stop and restart the production of sounds and are used to synchronize chords between multiple channels. The save memory caveat applies here. Be careful how many notes you play between a SOUND WAIT and a SOUND RESUME command, or you may find yourself out of memory, staring at a flashing orange box.
The Waveform Workshop Listing 1 is the source listing for Waveform Workshop. I have tried to comment the code fairly well, so you know what is going on in a particular segment. Type teh codt in (with or without comments) and SAVE IT before you use it. RUN the program as usual. The screen will clear and the main display will appear.
Here is a list of the various functions and what they do: Exit Terminates the program and returns you to the AmigaBasic environment. If you fail to save your waveform, you will still have a chance to do so here.
Play Plays a scale and some chords to demonstrate what the waveform sounds like.. New Deletes the current waveform and puts in the default value (a square wave).
Edit Allows you to change the current waveform. If you select this option, the bottom part of the screen will clear, and two new options will appear, "Compile wave" and "Exit edit". Now, just draw the shape of yourwaveform with the mouse, Presstheleft button to draw, and release it when you want to stop drawing. Go ahead and play with the wave until you like the shape.
Display Draws out a series of waveforms at the bottom of the screen to show you what continuous stream would look like. Use this option to check how the ends of yourwaveform match up.
Name Allows you to give your waveform a name.
Save Allows you to save your waveform to disk. I usually usethesavenameas in the "Name" option. If you try to save a wave that is already on disk, the program will ask you if you really want to save it.
Load Allows you to toad a previously saved waveform for further editing.
Noise Allows you to add a random "noise" element to your waveform. This will usually give your waveform more harmonics, resulting in a fuller sounding tone. You will be prompted for a percentage of noise, and the computer will generate a new waveform, based on the one you have designed. You will then hear a demonstration of the new wave, and you may accept or reject the noisy waveform.
Waveforms which have been saved by Waveform Workshop may be used in other AmigaBasic programs. Listing two is a sample routine for reading in a waveform file. You may read in as many waveforms as memory will permit, and you may use as many as four of them at any one time.
People who want to do complex music in AmigaBasic will find Waveform Workshop to be a valuable time-saving tool.
Others will simply find the program fun to play around with!
In any case, I feel the program will be a worthwile addition to your AmigaBasic library.
Listing One ???A**************************************************** WAVEFORM WORKSHOP By James Shields Waveform Workshop allows the user to see and build waveforms and save them as BASIC readable files, for use in other programs.
If you decide you don't want to hear the wave, select "Exit edit" and you are through editing, tf you do want to hear what the waveform sounds like, select "Compile wave". The computerwill now digitize what you have drawn, and load it into memory, Youthenexit edit mode and you may ptaythe demonstration. If you want to edit the wave again, select "Edit" and the whole process Will begin again.
Main: GOSUB constants 'Set up the constants and arrays GOSUB mainscreen 'Set up the main screen GOSUB waveedit 'Edit waves CLOSE 'clean up WINDOW CLOSE 1 WINDOW 1,,,,-1 END constants: 'set up program constants and arrays OPTION BASE 0 DIM wav%(256),pat%(1) DIM savewave%(256),demo!(13) ' calculate note data for sound demo FOR i=0 TO 12 demo!(i+1) = INT(263* ((2A (i 12)))) NEXT i wavename$ ="Noname" filename$ ="No file" pat% (0)=255 pat% (1)=255 FOR i%=l TO 128 wav%(i%-l)=127 wav%(256-1%)=-127 NEXT i% 'Name the wave 'Tell where it came from 'Set up pattern fill data 'Set up initial wave data WAVE
0,wav% WAVE 1,wav% WAVE 2,wav% true% = (1=1) false% = (1=0) notsaved% = false% fi rstwave%=true% 'Symbolic boolean constants are 'used throughout.
• First time through RETURN '* Begin Subroutine *' ma inscreen:
'main wave editing screen SCREEN 1,640,200,3,2 WINDOW
1,"Waveform Workshop",,0,1 WINDOW OUTPUT 1 5 Reasons Why You’re
Ready For MacroModem
1. You love telecom, but not memorization. MacroModem’s user-
written macro libraries and companion help screens (36 macros
per file) store log on procedures, remote system menus and
2. You’ve always wanted to use the mouse after you’re connected,
too. Write macros that mimic remote system commands and menus
then execute them with the mouse or keyboard.
3. You like automation, but not script languages. Our macros use
normal commands from MacroModem. Remote systems, and AmigaDOS,
as well as text and control codes. A multi-windowed
MacroEditor is included. No new programming language to learn.
4. You want to do other things while downloading a file.
MacroModem is truly multi-tasking, with a NewCLI available anytime, even during file transfers. And MacroModem’s error checking won’t stop downloads unless you tell it to.
5. Of course MacroModem includes standard telecom software
features, too. Teach MacroModem what you want, and it will
remember for you.
MacroModem - the better way to do telecommunications. $ 69.95 Kent Engineering & Design
P. O. Box 178, Mottville, NY 13119
(315) 685-8237 PALETTE 1,.6,.6,.6 PALETTE 0,0,0,0 PALETTE
2,1,.9,0 PALETTE 3,.1,1,.3 PALETTE 1,1,1,1 PALETTE
5,1,.1,.1 PALETTE 6,.8,.13,.83 PALETTE 7,.27,.47,1 'define
Aquarium black = 0 grey = 1 yellow = 2 green = 3 white = 4
red = 5 purple = 6 blue = 7 'Use symbolic names for colors
'rather than color numbers.
'Saves wear and tear on programmers' 'brains.
CLS 'Set the colors in use.
GOSUB mousereset RETURN '* Begin Subroutine *' mousereset: 'wait until the mouse button is released WHILE MOUSE (0) 0 WEND RETURN '* Begin Subroutine *' waveedit: 'Set up the screen to edit CLS terminate% = false% GOSUB wavescreen 'We don't want to stop.
'Display the screen.
• View functions as 3-D wire frames or as beautiful color
• Analyze function outputs the actual numerical values of x,y,z
coordinates for any point
• Control color values viewpoint, scale and sampling rate.
Someday the Math Aquarium will be a familiar category for computer programs. Put an equation into your Math Aquarium and watch it grow into a dazzling art-like image.
A spectacular introduction to the world of mathematics, DMA is also an amazing window thru which to observe the secrets of "deep- fringe" recursive phenomena $ 79.95 at your dealer or order direct SEVEN SEAS SOFTWARE
P. O. Box 41 1 Port Townsend, WA 98368 WHILE NOT terra!nate%
LOCATE 1,1 PRINT SPACE$ (65); 'Print the wave name and origin.
LOCATE 1,3 COLOR purple,black PRINT "Waveform: ";wavename$ ;TAB(40); PRINT "Filename: filenames COLOR blue,black waitformousel: 'get a command.
IF MOUSE(0)«0 THEN waitformousel x=MOUSE(1) y=MOUSE(2) IF (x 532) OR (x 545) THEN 'if there's an error PALETTE 0,1,1,1 'flash the screen FOR i=l TO 50 NEXT i PALETTE 0,0,0,0 WHILE MOUSE(0) 0 WEND GOTO waitformousel END IF 'Process the function selected.
Playwave% = ((y 15) AND (y 23)) newwave% - ((y 31) AND (y 39)) editwave% ((y 47) AND (y 55)) displaywave% ex ((y 63) AND (y 71)) namewave% ((y 79) AND (y 87)) savewave% ((y 95) AND (y 103)) loadwave% = ((y lll) AND (y 119)) noise% o ((y 127) AND (y 135)) exitwave% ea ((y l) AND (y 9)) IF playwave% THEN GOSUB playwave IF newwave% THEN GOSUB newwave IF editwave% THEN GOSUB editwave IF displaywave% THEN GOSUB displaywave IF namewave% THEN GOSUB namewave IF savewave% THEN GOSUB savewave IF loadwave% THEN GOSUB loadwave IF noise% THEN GOSUB noise IF exitwave% THEN GOSUB exitwave GOSUB mousereset
WEND firstwave%»false% RETURN '* Begin Subroutine *' wavescreen: 'Print the main editing screen.
CLS CALL box(533!,1!,544!,6!,grey) LOCATE 1,70 COLOR blue,black PRINT "Exit" CALL box(9!,9!,523!,138!,yellow) LINE (10,74)-(522,74),yellow LOCATE 3,70 COLOR blue,black PRINT "Play" LOCATE 5,70 CALL box(533!,16!,544!,22!,grey) PRINT "New " CALL box(533!,32!,544!,38!,grey) LOCATE 7,70 PRINT "Edit" CALL box(533!,48!,544!,54!,grey) LOCATE 9,70 PRINT "Display" CALL box(533!,64!,544!,70!,grey) LOCATE 11,70 PRINT "Name" CALL box(533!,80!,544!,86!,grey) LOCATE 13,70 PRINT "Save" CALL box(533!,96!,544!,102!,grey) LOCATE 15,70 CALL box(533!,112!,544!,118!,grey) PRINT "Load" CALL
box(533!,128!,544!,134!,grey) LOCATE 17,70 PRINT "Noise" RETURN '* Begin Subroutine *' playwave: 'Demonstrate the sound GOSUB chords playvave%=false% RETURN '* Begin Subroutine *' chords: 'Play a scale and chords to demonstrate SOUND RESUME 'the waveform sound.
SOUND demo!(1) 2,3 'c SOUND demo!(3) 2,3 *d SOUND demo!(5) 2,3 'e SOUND demo! (6) 2,3 'f SOUND demo!(8) 2,3 *g SOUND demo!(10) 2,3 'a SOUND demo! (12) 2,3 'b SOUND demo!(1),3 'c SOUND demo!(3),3 'd SOUND demo!(5),3 'e SOUND demo!(6),3 'f SOUND demo!(8),3 'g SOUND demo!(10),3 'a SOUND demo!(12),3 'b SOUND demo!(1)*2,3 'c SOUND demo!(3)*2,3 'd SOUND demo!(5)*2,3 'e SOUND demo!(6)*2,3 *f SOUND demo!(8)*2,3 'g SOUND demo!(10)*2,3 'a SOUND demo!(12)*2,3 'b SOUND demo!(13)*2,3 'cl SOUND WAIT 'Syncronize the first chord.
• C SOUND demo!(1)*2,20,140,0 'c SOUND demo!(8),20,140,1 'g SOUND
demo!(1),20,140,2 'c SOUND RESUME 'F SOUND demo!(10),20,140,0
'a SOUND demo!(6),20,140,1 'f SOUND demo!(1),20,140,2 'c 'G
SOUND demo!(3),20,140,0 'd SOUND demo!(8),20,140,1 'g SOUND
demo!(12),20,140,2 'b 'C SOUND demo!(1)*2,20,140,0 'c SOUND
demo!(8),20,140,1 'g SOUND demo!(1),20,140,2 'c RETURN '* Begin
Subroutine *' newwave: 'Clear the old wave out IF notsaved THEN
GOSUB saveerror GOSUB cleargraph FOR i%=l TO 128 wav%(i%-l)=127
wav%(256-i%)=-127 NEXT i% wavename$ ="Noname" filename$ ="No
file" notsaved = false% newwave%=false% RETURN '* Begin
Subroutine *' 'Actually edit the wave 'Clear the dialogue
window editwave: GOSUB clearbottom COLOR yellow,black LOCATE
23,5 PRINT "Compile wave"; CALL box(8!,176!,20!,182!,grey)
LOCATE 22,5 PRINT "Exit edit" CALL box(8!,166!,20!,172!,grey)
GOSUB mousereset mouseloop: 'Draw what is pointed to.
If user released mouse button Keep from drawing a bogus segment IF MOUSE(0)=0 THEN lastx=0 lasty=0 GOTO mouseloop END IF x=MOUSE(1) y=MOUSE(2) 'Check to see if a command was selected, commandrange = ((x 7) AND (x 21)) IF (commandrange AND (y 165) AND (y 173)) THEN exitedit IF (commandrange AND (y 175) AND (y 183)) THEN compilewave 'Check to see if the mouse is out of bounds.
IF (x 10) OR (x 522) OR (y 10) OR (y 137) THEN mouseloop 'If all is well, draw the segment of the wave.
IF lastx =0 THEN lastx=x lasty=y END IF 'erase any segments in the same X plane as the new segment IF lastx =x THEN s=l ELSE s= (-1) COLOR black,black AREA(lastx, 10) AREA STEP(ABS(lastx-x)*s, 0) AREA STEP(0,127) AREA STEP(-(ABS(lastx-x))*s,0) AREAFILL LINE (lastx,74)-(x,74),yellow LINE(lastx,lasty)-(x,y),red 'Draw the new segment, lastx = x lasty = y GOTO mouseloop 'Wave editor commands: compilewave: GOSUB recalcarray notsaved%=true% RETURN exitedit: editwave%=false% GOSUB clearbottom COLOR blue,black RETURN '* Begin Subroutine *' recalcarray: 'read the screen data GOSUB clearbottom COLOR
red,black LOCATE 23,3 lastpoint =10 wavedirection =1 'is the wave rising or falling?
FOR i=0 TO 255 j = lastpoint pointsscanned = 0 scan: p=POINT(i*2+ll,j) IF p=red THEN IF (jclastpoint) THEN wavedirection=(-1) IF (j lastpoint) THEN wavedirection=l ' and if its neither leave it alone, lastpoint = j wav%(i)=127-(2*(j-9)) 'bounds check IF wav%(i) 127 THEN wav%(i)=127 IF wav% (i) -128 THEN wav%(i)=-128 LINE(i*2+ll,j)-(i*2+ll,j), blue GOTO nextpoint END IF j=j+ (wavedirection) pointsscanned = pointsscanned+1 IF (j 10) OR (j 139) THEN wavedirection = wavedirection * (-1) j = lastpoint continued... 35mm Slides From Your mmL Art Now have high quality Mamni slides made from any IFF
file, and
H. A.iM. images, too. Any resolution, including interlace, can be
turned into a slide that can he printed or projected to any
size. A must for graphic artists or anyone else who would like
to show off their Amiga artwork. Price for 1 or 2 images is
$ 10 each. For orders of 3 or more, price is $ 8 each. Write or
call for price list on custom Cibachrome photographic prints
up to 16"x20" from any of your slides.
Your Own Artwork From flat artwork or 35mm slides, your own images can be digitized for use in any IFF paint program. For $ 24,6 pictures will be digitized in either lo-res, interlace or hi-res mode. You will choose the number of colors, up to 32 in lo-res and interlace (320x400) or 16 in hi-res.
Additional images, $ 3 each.
Photographic Clip Art Vol. 1 Clip Art Sampler Disk includes landscapes, flowers, cities, celestial objects and more. $ 25 Vol. 2 Western Landscapes includes deserts, forests, mountains. $ 35 Vol. 3 Flowers and Plants Just what the name implies. Some screens made up of flowers isolated against single color background for easy use as a brush. $ 35 Vol. 4 Clip Art Demo Disk Samples of clip art in use and suggestions on being creative with digitized pictures. $ 25 All Images Digitized From Professional Quality 35mm Slides ¦¦¦¦¦¦I 800 Heinz Street Berkeley, CA 94710
(415) 644-0614 All orders please add $ 2 shipping.
Calif, residents please add state tax.
DIGI PIX ¦ ¦ IT END IF IF pointsscanned 127 THEN GOTO scan
• in case there is a blank space nextpoint: NEXT i GOSUB
redrawwave 'reset the waveforms for the demo WAVE 0,wav% WAVE
1,wav% WAVE 2,wav% 'clean up and exit notsaved% = true% GOSUB
clearbottom COLOR blue,black RETURN '* Begin Subroutine *'
cleargraph: 'Clear the waveform graph PATTERN ,pat% AREA
(10,10) AREA STEP (512,0) AREA STEP (0,128) AREA STEP (-512,0)
COLOR black,black AREAFILL CALL box(9!,9!,523!,139!,yellow)
LINE(10,74)-(522,74),yellow COLOR blue,black RETURN
displaywave: 'Display multiple waveforms 'at the bottom 'of the
GOSUB clearbottom LINE(1,158)-(639,158),yellow FOR 1=1 TO 256 STEP 2 'Write out the smaller waveforms 5 times (for speed's sake) LINE(1 2+1,159-wav%(i) 8)-(1 2+1,159-wav%(1) 8),red LINE(1 2+129,159-wav%(1) 8)-(1 2+129,159-wav%(1) 8),red LINE(1 2+257,159-wav%(1) 8)-(1 2+257,159-wav%(i) 8),red LINE(1 2+385,159-wav%(1) 8)-(1 2+385,159-wav%(1) 8),red LINE (1 2+513,159-wav%(i) 8)- (1 2+513,159-wav%(1) 8),red NEXT 1 COLOR blue,black displaywave% = false% RETURN '* Begin Subroutine *' redrawwave: 'Draw the wave in wav%() GOSUB cleargraph lasty=wav%(0) FOR 1=1 TO 256
LINE((1-1)*2+11,74-lasty 2)-(1*2+11,74-wav%(1-1) 2),red lasty=wav%(1-1) NEXT 1 RETURN '* Begin Subroutine *' clearbottom: 'Clear the dialogue window.
COLOR black,black AREA (1,142) AREA STEP (630,0) AREA STEP(0,44) AREA STEP(-630,0) AREAFILL RETURN '* Begin Subroutine *' namewave: 'Give the waveform a name.
GOSUB clearbottom COLOR blue,black LOCATE 22,3 INPUT "New name of wave";wavenameS namewave%=false% GOSUB clearbottom COLOR blue,black RETURN '* Begin Subroutine *' savewave: 'Save the wave.
CLOSE 1 'Just in case GOSUB clearbottom COLOR green,black LOCATE 22,3 INPUT "Filename (10 characters or less, EXIT to quit)";filenames IF filename$ ="EXIT" THEN exitsave IF LEN(filenames) 10 THEN filename$ =LEFT$ (filenames,10)+".Wave" ELSE filename$ =filename$ +".Wave" END IF ON ERROR GOTO newfile 'An error should occur if the file is not there. If it is, 'then we go on and try to save. Actually, an error here 'indicates that things are ok, and no error indicates things 'need to be checked out the wave already exists.
OPEN filename$ FOR INPUT AS 1 GOSUB clearbottom COLOR red,black LOCATE 22,3 PRINT "File exists; erase it? "; GOSUB getyn IF (answer$ ="n") OR (answer$ ="N") THEN savewave newfile: CLOSE 1 'Just in case it was open OPEN filename$ FOR OUTPUT AS 1 FOR i=l TO 256 WRITE l,wav%(i) LOCATE 23,3 PRINT "Saving point ";i; NEXT i CLOSE 1 exitsave: savewave%=false% notsaved%=false% GOSUB clearbottom COLOR blue,black RETURN '* Begin Subroutine *' loadwave: 'Load in a previously saved waveform.
Loadwave%=false% GOSUB clearbottom COLOR blue,black LOCATE 22,3 INPUT "Filename ";filename$ IF RIGHT$ (filenames,5) ".Wave" THEN filename$ =filename$ +".Wave" END IF CLOSE 1 'Just in case ON ERROR GOTO baddata 'Here, an error is really an error.
OPEN filenames FOR INPUT AS 1 FOR i=0 TO 255 INPUT 1,wav% (i) LOCATE 23,3 PRINT "Reading point ";i; NEXT i CLOSE 1 wavename$ =LEFT$ (filenames,LEN(filenames)-5) GOTO endload baddata: GOSUB clearbottom COLOR red,black LOCATE 22,3 PRINT "Unable to load file filenames;". "; IF ERR=53 THEN PRINT "File not found."
ELSE PRINT "File error."
END IF PRINT " Try again? "; GOSUB getyn IF answer$ ="y" OR answer$ ="Y" THEN GOTO loadwave endload: notsaved% «= false% GOSUB clearbottom DIGITIZED INSTRUMENTS FOR INSTANT MUSIC OWNERS Here is what you have been waiting for!
This disk is full of digital samples of real instruments that can be played by your instant music® program at HI FI quality.
• Write & play songs that sound real
• Use in existing songs or use to write your own
• I.F.F. compatible
• Over 30 instruments
• Classical, Contemporary & Rock instruments
• Can be used by 1 drive systems
• Instruments can be copied to other song disks
• Includes guitars (4 types), drums, organs, trumpets, flute,
violin, etc.
• Compatible with Deluxe Music rt $ 20 POSTPAID A A (Connecticut
Residents Add $ 1.50 Sales Tax) Actionware 1039 Farmington Ave.
West Hartford, CT 06107
(203) 233-0151 Instant Music and Deluxe Music are a trademark of
Electronic Arts COLOR blue,black GOSUB redrawwave RETURN '*
Begin Subroutine *' noise: 'Add noise to the waveform.
Noise%=false% checkloop: GOSUB clearbottom COLOR blue,black LOCATE 22,3 INPUT "Percentage of noise";noiseamount IF noiseamount 100 THEN GOTO checkloop FOR i«l TO 256 savewave%(i)=wav%(i) 'Temporarily save the old wave.
IF (RND*100) noiseamount THEN wav% (i)»127-INT(RND*256) NEXT i GOSUB redrawwave 'Show the noisy wave.
WAVE 0,wav% WAVE 1,wav% WAVE 2,wav% GOSUB chords 'See what it sounds like.
GOSUB clearbottom
C. OLOR blue, black LOCATE 23,3 PRINT "Use this wave? "; GOSUB
getyn continued... You have a computer that operates in a
limited mode with most of the paint programs that are
presently available. With PRISM you can operate in true HAM
mode of 4096 colors. No longer are you limitied to 32 colors
to paint with, now you have the full Amiga™ color pallete.
Prism is designed to use the entire keyboard as well as the mouse to make painting and editing your artwork a real pleasure. Filp images, use a real lasso for grabbing objects and you can use any file that is IFF standard. Get the full power of your computer with PRISM see what you have been missing !!!
$ 69.95 only Here is the 4096 pallete screen.
To pick your colors all you have to do is move your mouse and click that's all there is to using the power of the full 4096 pallete.
Don't delay, because now there are no limits on your creative talents.
Go with your IMPULSE and get your copy of PRISM™ today.
TO ORDER CALL THE IMPULSE HOTLINE 1-800-328-0184 IMPULSE, INC. lid till Too Is •* ¦¦ n R&ii J ?
9 & IH ± P T 1 Ctesr 6860 Shingle Creek Parkway 110 Minneapolis, MN 55430_
o With The IMPULSE op DeskTop Publishing Sales Reports Greeting
Cards Computer Video Animation Artwork for Now with PROCLIP you
can produce documents that deliver your message!
PP@©UP MSK: ) Over 200 images per disk!
Sp©©(§ Sp® ® ?oriiQnii®p®orfi©i®[ra Any one of these disks Only $ 29.95 Each TO ORDER CALL THE IMPULSE HOTLINE 1-800-328-0184 IMPULSE, INC.6860ShingleCreekParkway 110Mpls,MN55430 AMIGA HARD DISK BACKUP HARDHAT Full lncremental Directory Single File backup to microdisks.
Option list allows skipping of files by name with wildcards.
Catalog file provides display of backed up files by name with size, location and datestamp. Double data compression reduced disk space. Printer interface. Uses CLI or Workbench.
Multitasking provides background operation. $ 69.95 AMIGA DISK FILE ORGANIZER ADFO Having trouble finding that file somewhere in your stack of floppys? Can’t find all the copies of a particular file? ADFO maintains a database of directories and filenames from your collection of disks. Fast response inquiries return location and last update information. Printer interface. Uses CLI or Workbench. 512K ram and 2 drives recommended $ 59.95. AMIGA SPELLING CHECKER SPEL-IT Uses 40,000 word primary dictionary and optional second dictionary. Add Delete words to both dictionaries. Includes
plurals. Text wordcount totals. Uses CLI or Workbench, Mouse or keyboard. $ 49.95 Include $ 3.50 S&H Mastercard Visa Accepted Calif. Residents Add 61 2% Sales Tax Toeafowt *)ttcUt4tnie4 3386 Floyd Los Angeles, CA 90068 (213) 851-4868 Order phone 1 800 621-0849 Ext. 494 '* Begin Subroutine *' initwaves: 'Zero the waveform arrays.
FOR i =0 TO 255 wav%(i)=0 NEXT i RETURN '* Begin Subroutine *' saveerror: 'Check to be sure the user 'wants to abandon the wave.
GOSUB clearbottom 'Clear the dialogue window.
LOCATE 22,3 PRINT "Changes made since last save. Do you want to save?"; GOSUB getyn IF (answer$ ="y") OR (answer$ ="Y") THEN GOSUB savewave RETURN '* Begin Subroutine *' getyn: 'Get a yes or no reply, ynloop: answer$ =INKEY$ IF answer$ ="" THEN ynloop IF (answer$ "Y") AND (answer$ o"N") AND (answer$ o"y") AND (answer$ o"n") THEN ynloop RETURN SUB box (xl,yl,x2,y2,coir) STATIC 'Draw a box.
'Note that the numbers in the call must be long integers, 'constants must have a ! Behind them, as in 511!.
LINE (xl,yl)-(xl,y2),coir LINE (xl,yl)-(x2,yl),coir LINE (x2,yl)-(x2,y2),coir LINE (x2,y2)-(xl,y2),coir END SUB IF (answer$ ="Y") OR (answer$ ="y") THEN exitnoisel FOR i=l TO 256 wav%(i)=savewave% (i) 'Restore the old wave NEXT i GOSUB clearbottom GOSUB redrawwave COLOR blue,black LOCATE 23,3 PRINT "Try again?
GOSUB getyn IF (answer$ ="n") OR (answer$ ="N") THEN exitnoise GOTO loop3 exitnoisel: notsaved% = true% exitnoise: GOSUB clearbottom COLOR blue,black RETURN Listing Two ' demonstration routine for loading waveforms ' use the name of your file in filenames DIM wav% 256) 'integer array.
ON ERROR GOTO badfile 'if there's an error CLOSE 1 'just in case.
OPEN filenames FOR INPUT AS 1 FOR i=l TO 256 'get 256 elements.
INPUT l,x wav%(i)=x NEXT X badfile: 'You can insert any error handlers here CLOSE 1 IF ERRO0 THEN PRINT "Error ";ERR;" in waveform read."
'* Begin Subroutine *' exitwave: 'Finish up.
LOCATE 1,1 PRINT SPACES(80); LOCATE 1,2 COLOR red,black PRINT "Exit wave selected."
IF notsaved% THEN GOSUB saveerror terminate%=true% exitwave%=false% RETURN Mimetics SoundScape Sound Sampler by Richard Rae CIS 76703,4253 The SoundScape audio digitizer is the smallest unit currently available. It is housed in a black metal box which plugs into the second mouse port. Near the bottom of the unit are two RCA jacks for line level inputs, and a miniature jack for microphone level signals. The unit is shipped with a 28 page manual, disk, and warranty card, all (except the sampler) enclosed in a very nice vinyl slipcover. The warranty period is 90 days.
The sampler disk can be used from either WorkBench or CLI, and is not copy-protected. Interestingly, although the software is on a bootable disk, there are no provisions for loading WorkBench. If you wish to use the icon driven environment, you must either boot from another disk or copy LoadWB to the SoundScape disk.
There are several files on the disk; the main program is called Sampler. Running this program brings up two windows: a tiny Console Keyboard window and the main window. The Console Keyboard is a visual aid which shows you which keys on the keyboard corresponds to the keys on a musical keyboard. If the window is active, it will also show which of these keys are depressed. By using the console keyboard you can play up to four notes simultaneously, making this the only sampling package which is a complete, stand-alone musical instrument. In addition, the SoundScape system responds to MIDI input
on channel 1 as a velocity sensitive four voice instrument.
Within the main window there are conceptually three groups of controls. The right half of the screen is devoted to the envelope and looping of the sample. To the left, is the "performance” group: sliders and gadgets which control how the samples react to the controlling device. Above the performance group, in the upper left hand corner, are gadgets used to manage samples. Let's take a look at each of these.
A sample may be either a one shot affair such as a marimba or snare drum, or continuous, like an organ. Ratherthan wasting memory by recording long continuous samples, we can instead loop a shorter sample to stretch it out in time.
The SoundScape package provides sliders for setting the start of the sample, the start of the loop, and the end of the loop. The sliders on the main screen are remnants of an earlier version, and provide coarse adjustments. These sliders are useful for making quick experimental changes.
Continued... For more precise work, you should use the sliders in the Sample Capture and Edit window.
The envelope controls allow you to set the amplitude contour of the sample. In other words, you can define how the volume of each note changes over time. Four rate and three level sliders are supported, providing somewhat more control than a traditional ADSR envelope generator. Note that standard IFF format does not have provisions for envelope parameters of this complexity; you must save samples in Mimetics' own format to preserve this data.
The "performance" group is comprised of controls which alter the sample's response during playback. A High Low gadget above the performance sliders allows you to either raise or lower the sample's frequency by one octave; the direction in which you can change the pitch depends on the setting of this gadget when the sample was recorded. The Tune slider allows you to detune the sample from its recorded pitch for use with a recording or other instrument. This tuning is done with one cent resolution (one cent is 1 100th of a semitone).
Although both the manual and screen indicate that the tuning range is plus or minus 100 cents, the actual range is somewhat less than this.
The Transpose and Octave sliders allow you to alter the key of the recorded sample. Using the Transpose slider, you may raise the pitch in half-step increments up to 11 steps.
Similarly, the Octave slider will raise or lower the playback range by up to four octaves. Unlike the Tune slider and High Low gadget, which actually change the pitch of the sample, these controls simply slide the sample up and down on the keyboard. For example, if you have a flute sample whose bwest note is A, and you transpose it down three semitones, you will hear the A when you play a C, but the keys below the C will be inactive.
The V Sensitivity slider controls the response of the system to velocity information. This data reveals exactly how quickly (and, indirectly, how hard) you hit each key, and is transmitted by some MIDI instruments. In the SoundScape system, this velocity data is used to control the volume of the sample.
The Pitch Bend slider, like V Sensitivity, is used only with external MIDI input; It determines the sensitivity to the controlling instrument's pitchbend wheel. This slider spans a range of 0 to 12 semitones, so the Amiga can be set to ignore the pitchbend wheel or bend up to plus or minus one octave.
The section I refer to as "sample management" includes gadgets to load and save samples, which bring up standard directory and file name requestors. When saving a sample, you have the option of using standard IFF format or Mimetics' private format. The latter will take more disk space but will save all sample information, including envelopes and performance settings. The Clear gadget erases the current sample from memory, freeing up space for further work.
Finally, the Sample gadget brings up the Sample Capture and Edit window. And thereby hangs a tale... I received one of the first SoundScape samplers quite some time ago, and have been holding on to it with the intention of doing this series of reviews. A few months ago, I received a software update which has changed my opinion of this package from "not ready" to "very nice". The new version appears to be nearly identical to the earlier release, until you open the sample window. Just a brief period spent working with the updated version will convince you that Mimetics has a very usable system.
SAMPLE CAPTURE AND EDIT Mimetics provides three sliders to control the sampling procedure. The Threshold slider sets the level at which recording will automatically begin. By setting this slider to zero, you can manually start capturing the sample. At higher levels, the software will wait for the input to exceed the preset level. The former mode can be used for clipping a sample out of a prerecorded song, whereas the latter mode is handy for recording a natural sound such as breaking glass.
The Length slider determines how much memory is to be used for the sample. This slider can be set from zero (in which case recording is disabled) to 65534 bytes, which results in the maximum 4.66 second sample time. In the previous version, the limit was 32766 bytes (yes, really!), which means your samples can now be twice as long. Be aware, however, that some programs will have problems with IFF samples longer than about 32K. Longer samples are most useful in Mimetics'format.
The default sample rate of 15KHz is probably the best compromise for sampling instruments: raising the sample rate won't do much for you in terms of sound quality because of the Amiga's output filters, and lowering the rate too much is going to allow aliasing noise into the samples. Still, for games and video presentations which need sound effects, there will be times when programmers will want to trade sound quality for less memory usage and faster loading of samples. The new version of the software gives us that capability. The High Low gadget in the main window originally controlled
playback rate only. Now it also controls the record sampling rate. The gadget defaults to High, but by clicking it to Low before opening the sample window you can record at a 7.5KHz rate. This change provides up to
9. 32 seconds of recording time in the same 64K of memory, at the
expense of sound quality.
Perhaps the most important change for many of us is the addition of the Volume slider. Since there is no level controls on the sampler itself, users of the first release were at the mercy of whatever signal they happened to feed the hardware. A signal which was too low in volume resulted in a poor signal-to-noise ratio, while too high a level resulted in very obnoxious distortion from clipping. With the new Volume slider, the user can now set the gain of the sampler to match the signal source.
The ability to change gain with software is a byproduct of the sampling method used, which differs from that used by other Amiga samplers. This particular approach to sampling also allows Mimetics to include a compression gadget which, when engaged, attempts to maintain a high overall level during recording. The effect of this compression can range from insignificant to remarkable, depending on the sample in question.
To support the Volume slider, the sampling operation itself was also changed. Previously, clicking on the Microphone icon froze the cursor and waited for the input signal to exceed the value set by the Threshold slider. At that time, the screen went blank (to the background color) while the recording occured.
All that has changed. Now, as soon as the Microphone icon is clicked, the screen goes solid red ("Wait") and the audio being fed to the sampler is routed, in real time, to the Amiga's audio outputs. Now you can hear what you are sampling.
During the red screen (which lasts less than a second), the software adjusts the gain of the sampler to match the setting of the volume slider. Once this is done, the screen goes solid yellow ("Ready"). At this time, the software is waiting for your signal to go ahead with the acquisition process.
Clicking the left mouse button once, while the yellow screen is up, will cause the software to watch for a value exceeding the Threshold setting, just as in the previous version. When that signal is detected, the screen goes green ("Recording’’) and storage begins. As soon as the buffer set by the Length slider is filled, the normal screen returns.
Another change in software operation is an "escape hatch".
Previously, if you set the threshold too high for your input signal, there was no graceful way to exit the "wart" condition.
With the current software, you need only click the left mouse button a second time on the yellow screen and recording will start immediately.
SoundScape provides ten octave gadgets in which you may store samples. You can sample directly into any of the ten by clicking on the appropriate gadget before beginning your recording. (A temporary work area is also provided for sample shuffling.) Once a sample is in place, you can copy it directly to another octave for manipulation, or you can actually raise or lower it to match the target octave during the move. The latter operation is performed by either clipping out or doubling points in the sample. Some caution is required when attempting to fill a large number of octaves with one
sample. Each time you lower the octave you double the storage required for the new sample, and you can quickly find yourself running out of workspace. If you are sampling an instrument, it is much better to actually sample each octave separately, rather than attempting to shift one octave in this manner. (This is true for a number of other reasons as well.)
Actually, the term "octave" is somewhat misleading, as the various workspaces do not have to be octaves of the same instrument. There is nothing to prevent the user from multisampling; That is placing a different instrument or sound in each workspace. The drum kit used by Instant Music is an excellent example of what can be done in this manner.
Perhaps the most exciting change since the last release is the addition of Visual Editing, allowing the user to directly view and manipulate the waveform as it is stored in memory.
The right half of the sample window is occupied by a waveform display area and associated sliders. When a sample is loaded into the system, the actual waveform is drawn into this area. The Scale slider beneath the display allows you to determine how much of the sample you will see, and at what resolution. With this slider all the way to the right, you see the sample in its entirety; fully to the left you can see each individual point of a very tiny slice. Above the Scale slider is a positioning slider, which allows you to move the waveform around in the display area so you can see any portion,
at any magnification. Above the display window are three sliders which represent the start, loop start, and loop end points. Their positions accurately reflect these points in the waveform.
All this is nothing new; other Amiga samplers do the same thing. The difference here is that you can change the sample. With the Scale slider nearthe left end, you can actually use the mouse to draw waveforms into the display A-TALIT Communication and Terminal Program KERMIT - XMODEM - XMODEM CRC - ASCII DIAL-A-TALK • Script language. 20 function keys.
FULL VT100 VT52 H19 ANSI TTY emulations.
Concurrent printing and capture. Voice option. CB mode.
A-TALK IPILHJS Tektronix 4010 4014 Graphics Emulation
• ALPHA GRAPH GIN standard modes, plus enhanced graphics POINT
• All vector line formats. Screen size up to 700 by 440.
• Four character sizes. Printer support. Store screens in IFF or
Aegis Draw format. All A-TALK features supported.
A-TALK lists for $ 49.95. A-TALK PLUS lists for $ 99.95. $ 2.00 shipping; CA residents add 6.5% sales tax.
Felsina Software 3175 South Hoover Street, 275 Los Angeles, CA 90007
(213) 747-8498 area. This is an incredibly handy tool that "real"
sampling systems have had for a while, and I'm delighted to
see appear on the Amiga so soon.
What can you do with this ability? Well, if you want to just tinker, you can try drawing waveforms into the display area freehand to see what they sound like. In fact, you can do this in real-time by using a little trick. Start by moving the Scale gadget all the way to the left. Next, set the loop sliders to either end of the display area. Now, depress the ”Y" or any other active key and, while holding it down, move the mouse into the display area and push the left mouse button. Then, release the key while continuing to hold the mouse button. Because of the way the software is written, the
program will not see the release of the key because it is watching the mouse button. As far as the program is concerned, you are still holding down the key, which means the note will play continuously. Now, you can tinker with waveforms as long as you like, with instant gratification.
When you find something you like, just touch and release the same key again to turn off the sound.
Freehand drawing is interesting, but there are other applications •• not the least of which is repairing a damaged waveform. Suppose you have sampled a one time event -
- an absolutely wonderful cat yowl, for example - and it is
perfect except for the volume being a bit high, resulting in
distortion at one point. With practice, it is possible to
continued... 1 MEGABYTE - $ 119.95 SQUEEZE-RAM is a 1 Megabyte
internal RAM board for your Amiga. Because it goes inside, it
leaves your expansion port free for Sidecar or an external
Zorro box. It auto-configures under AmigaDOS 1.2, and there is
a memory disable switch option. It is compatible with external
memory boards, so you can add up to 8M more.
There is no modification of your Amiga necessary for installation. We sell it in kit form to save you money... assembly and installation only takes an evening. Kits include high-quality PC board, all parts including sockets for all IC's, utilities disk and manual.
SQUEEZE RAM Kit w o RAM Chips: $ 119.95 Requires 32 4464-150 ns RAM Chips Call us for RAM Chip sources and prices Please add $ 3.50 for UPS Ground shipping Calif, residents please add 6 1 2% sales tax Aminetics
P. O. Box 982-205 Whittier, CA 90608
(213) 698-6170 actually remove this distortion from the sample!
It isn't easy, since it takes practice and a steady hand.
You'd best save a copy before you start editing... once
youVe made a change, it is forever. But, with care and
patience you can repair a bt of problems. I've also had
great success removing a "pop" from a sample taken from a
OTHER GOODIES As mentioned, Sampler is the main driver program. Also included is RAMSample, a demonstration program which can use all available memory for a single sample. RAMSample is keyboard driven and allows you to record into memory with or without monitoring the signal at the Amiga's output. This sample can then be played back once or continuously.
Provisions are also made for saving to and loading from disk.
The folks at Mimetics included an extra program on my disk: a little demo routine called Stereocompr. When the SoundScape digitizer was first released, many owners complained that, although it was advertised as capable of stereo, the digitizer it actually wasnt. In fad it simply summed both channels together and recorded in mono. This is not the case now. The hardware is indeed capable of stereo, and it is the software whbh is doing the summing.
Stereocompr is a stereo in, stereo out audio compressor which pipes audio through the SoundScape digitizer and my Amiga. Although useless except as a demonstration program, Stereocompr does prove conclusively that the hardware is capable of stereo input. This program is a hint of good things to come, and Mimetics maintains that even the software shipping now only makes use of a fradion of the sampler's capabilities. They also indicate that owners who have sent in their warranty cards will automatically receive updates as new versbns are released.
The digitizer disk also includes 14 instrument samples and one RAM sample. Those of you with the old dealer Instruments demo will find these somewhat familiar.
IRRITATIONS Yep. You know by now that it wouldn't be a true AmigaNotes review if I couldn't find something I didn't like.
The lack of a feedthrough port is going to be a problem for many of us. I know people who have joysticks, TIC real-time clocks, and copy protection dongles, all of which have to be plugged into the second mouse port. Couple this difficulty with the manual's instrudions to turn the Amiga off before inserting or removing the sampler, and you have a rather inconvenient situatbn.
The input jacks on the sampler are down near the bottom of the box, whereas it plugs into the mouse port near the top.
What this means is that plugging or unplugging an audio cable tends to lever the sampler right out of the mouse port.
To avoid this, you must support the sampler with your other hand somewhat awkwardly.
I wish Mimetics had implemented the volume control exadly opposite from the way they did. When you click the microphone icon and the screen goes red, the sampler comes up at full gain and is turned down by the software to match the level set with the Volume slider. Unfortunately, this usually means you are treated to a blast of loud, distorted sound from the Amiga's outputs until the software gets everything set up properly. Had they instead, started at minimum gain and ramped up, this would have been avoided.
Another problem with the Volume slider is the gyrations you must go through to properly set it. Ideally, you should be able to monitor the audio at the Amiga's outputs while adjusting the Volume slider for maximum level without clipping. But you cant. The best you can do is set the Length slider to a very small value, guess at a Volume slider setting, click the microphone icon, wait for the yellow screen to listen to the results, double click the mouse to go through a dummy recording cycle and return to the sample screen, and try another Volume slider setting.
The only real bug I found is related to the envelope controls.
When the L3 slider (which controls the sustain level of the note) is set to maximum, the R4 slider (which controls the final release rate) becomes inactive. When a key is released, the note stops abruptly, regardless of the setting of R4. This can be circumvented by pulling L3 back slightly.
AmiEXPO, the Amiga™ specific conference and exhibition, applauds all those who in the past two years had the foresight and knowledge to purchase Amiga computers.
Con gr atul ati ons!
From In recognition, we extend a special invitation to join a dynamic new event; AmiEXPO.
Where & Wkp.n Fall Sheraton Centre Hotel October 10-12,1987 New York, New York Winter Airport Hilton Hotel January 22-24,1988 Los Angeles, California Spring Hyatt Regency Hotel July 22-24,1988 Chicago, Illinois AmiEXPO will feature a full range of exhibitions, conferences and seminars, all designed to meet the challenges of the Amiga community. By combining all of these forces, AmiEXPO will provide a unique forum for discussion and trade, in a conducive environment.
If you would like to register or exhibit, call 800-32-AMIGA (in New York State call 212-867-4663) or complete the form below and return it to: AmiEXPO Headquarters.
R n I YES, send me more info on AmiEXPO! I I I | Name: J ! Company: _ J j Address: ._ j I .. * I Telephone: | I | Return form to: I AmiEXPO Headquarters i 211 East 43rd Street, Suite 301 ¦ New York, New York 10017 !
J Amiga™ is a registered trademark of Commodorc-Amiga,Inc.
ONLY WHAT WORKS , SATI8PACTION GUARANTEED In addition to this bug, I found a few of what I would consider "bugettes"... not true bugs, but quirks that certainly shouldn't be there. For example, when the sample window is on screen, you cannot access the main window, even if that window is shown as active. You can click in the main window and the sample window will ghost. You can even grab sliders in the main window and slide them back and forth. But the values will not change unless you close the sample window and THEN change the sliders. This is inconvenient, since the Octave slider needed to
access various samples is on the main screen.
Some operations do not properly refresh the screen. For example, the default Octave slider setting is 0. If you set the slider to -1 and then load a Mimetics format sample which was saved at octave 0, the 0 overwrites the minus sign, and you are left with "01", which is easily misinterpreted.
If you click the Load icon after saving new samples to a disk, and had previously loaded from that disk, SoundScape will present you with the old listing of samples. You will not see the new samples until you change disks or at least put the cursor on the drive specifier and hit return.
IN CONCLUSION All things considered, the SoundScape digitizer is a good value. It appears to be geared primarily towards creating sampled instruments, and therefore, leaves out features like continuously variable sample rate and extremely long samples. These features would be handy for recordings intended for use in other programs. On the other hand, SoundScape is the only sampler which gives you everything you need to play sampled instruments directly from your computer keyboard OR a MIDI instrument. The SoundScape digitizer software also plugs into the Pro MIDI Studio as a module, minimizing
the hassle involved with getting samples into a Pro MIDI score... nice.
That's it for now.
Nybbles, Rick
• AC* SoundScape Digitizer $ 99.00 No Copyprotection Requires
Amiga with 512K, one drive, KS1.1 or up.
Mimetics Corporation PO BOX 60238, Station A Palo Alto, CA 94306 408-741-0117 by Richard Rae SunRize Industries' Perfect Sound Audio Digitizer "....the only sampler which is capable of stereo sampling, right out of the box."
SunRize has chosen an interesting route for marketing their Perfect Sound digitizer. The sound editor software has been declared copyrighted shareware and distributed to bulletin boards and commercial networks across the country. The shareware package is completely usable without the hardware, and even comes with demo samples. A person with a different brand of sampler, or no sampler at all, can still use the Perfect Sound editor to modify their samples. A contribution of $ 20 is requested if you find the software useful, or you can buy the complete sampler package, in which case the software
is included. This approach allows you to "try before you buy", at least as far as the software is concerned, plus gives people who already own a sampler another type of editor to work with.
The Perfect Sound digitizer is a thin, cream colored box which plugs into the parallel printer port and projects up over the back of the Amiga. Two RCA jacks are provided on the right side for line level inputs (you'll have to preamplify microphone level signals), and two forward facing controls adjust input gain. Along with the digitizer, you'll also receive a 20 page manual, disk, registration card, and a couple of disk labels, all shrink wrapped into a tidy little package. The warranty period is 90 days.
SunRize is another company which appears to be willing to improve their products whenever they can. The first Perfect Sound digitizer I received was epoxied between sheets of gray plastic. There was no case per se; you could look in the end and see the components. The digitizer plugged into the parallel port horizontally, meaning you had to pull your Amiga about five inches away from the wall to accomodate it. And, instead of real controls, it had two tiny trimmer potentiometers mounted on the back side, which turned in opposite directions relative to each other! The digitizer currently
shipping is a vast improvement over their first model, and I compliment them on the changes they have made.
This digitizer still seems to lack some of the "flash" of the others available; it's simply not as "dean" looking. And the manual is fairly superficial, providing little in the way of examples. On the other hand, this is the least expensive of the three units currently shipping, and it is the only sampler which is capable of stereo sampling, right out of the box. For those advantages a bt of us might choose to give up a little glamour!
THE SOUND EDITOR The main sound editor program is called Psound, and can be called up either from WorkBench or the CLI. If started via its icon, or from the CLI when logged into its directory, Psound will present an opening screen and brief demonstration before dropping into the editor. You can avoid this, and go directly to the editor, by using CLI from another directory.
The Perfed Sound editor divides the screen horizontally into two sections. The larger upper section is devoted to "slots" for the various samples you will be working with. The editor can deal with up to 14 samples simultaneously, and you select the active sample by clicking its name once with the mouse; this highlights the name. Clicking on a selected sample will play it in its entirety.
The bottom third of the screen contains two pushbutton gadgets, three sliders, and a status display area. The "Play Sample" gadget performs the same job as clicking the name of the selected sample. "Play Range” plays the portion of the sample between the Start and End sliders. The third slider, Position, is used to indicate the insertbn point for a sample; I'll touch on this a bit later.
The status area constantly displays the amount of memoiy remaining for samples, the length of the selected sample, the start and end locations, its record and playback rates, and a status line for editor messages.
Continued.. Century Systems has the best prices and service in the USA on the incredible AMIGA Computer.
Many Amiga's and Amiga expansion products available.
Prices too low to print. And service too good to ignore.
Century Systems 8033 University Ave.
Des Moines, IA 50311 SALES 1-800-223-8088
* 24 HR. SERVICE 1-515-223-8088 There are five menus accessable
via the menu bar: Edit, Special, Digitize, File, and the
traditional "About". Let’s take a look at each in turn.
The Edit menu highlights the fact that this package is intended for building specialized samples, rather than simply recording sounds and creating instruments. There are quite a few unique functions here which could come in handy when building a complex composite sample from individual snippets.
Generally, the way you would approach making a sample is to start recording a bit early, stop a tad late, and then carefully snip off the excess from each end to leave exactly what you want. "Delete Marked Range" allows you to do this, and more: the marked range could also be in the middle of the sample. Lots of interesting uses come to mind for this one... for example, assume you are writing a game which includes a jury trial, and you have a sample of a juror saying "Your honor, we find the defendant not guilty". By snipping out the word "not", you can completely reverse the jury's decision.
Depending on the background noise and inflection of the speaker, it is possible to do this so cleanly that it can't be detected.
"Copy Range To New Slot" allows you to pick out a piece of a sample using the Start and End sliders, and then copy this segment to a new slot. In addition to providing a simple method for extracting a sound from a longer sample, it is a safer method of trimming than deleting part of a sample: the original sound remains intact in case you make a mistake.
"Append Slot To Slot" tacks one sample onto the end of another sample. This is the most straightforward way to build a composite sample: clip out the individual sounds you need, placing one in each slot, then append the sounds together, in order, to create the final sample.
"Insert Marked Range" is another approach to building complex samples. With this option, you can actually mark a portion of a sample using the Start and End sliders, then "plug it into" another sample. The Position slider is used to indicate where you wish to insert the addition.
"Create Stereo" is one way to build a stereo sample: it combines the two samples you indicate into a new sample, with one selection on each output channel. This could be handy for layering gunshots on top of squealing tires! Be careful with this one, though... rather than building a third sample from the original two, it combines both into one new stereo sample under the name of the first sample. If you need to keep the original samples, you'll have to make copies first.
"Break Up Stereo" is the inverse of "Create Stereo": it breaks a stereo sample into left and right components. You'll use this more than you might expect, because several operations will not accept stereo samples.
"Change Playback Period" brings up a requester with a slider for setting the playback rate. The range is from 124 to 700, with the selected rate shown in a small box below the slider.
By clicking in this box, you can enter any value directly, although the Amiga will not use a playback period smaller than 124. Be advised: don't try ridiculously large numbers or zero, unless you are willing to wait a very long time (or reboot).
"Discard Sample" deletes the selected sample from memory, opening that workspace for a newer project.
The Special menu contains a variety of interesting commands. "Flip" actually reverses a sample's direction, causing ft to play backwards. "Freq=Freq*2" raises a sample's frequency an octave by snipping out every other point in the sample. Similarly, "Freq=Freq 2" drops a sample an octave by doubling every point.
"Graph Marked Range" uses a narrow strip across the center of the screen to draw the sample between the Start and End positions. When this menu item is selected, the status line will show the value of the first and last points. This is handy for butting samples together to make composites, or for creating instruments, since any sudden change in the waveform will result in a click. Other than for this and checking recording levels, I didn't find the graphing function terribly useful. It does look impressive, though!
"Auto Graph" redraws the graph every time any change is made to the sample, which includes any movement of the Start and End sliders. Since it takes over two seconds to redraw the graph, this option tends to slow down the work quite a bit, and should be used judiciously.
"Create Instrument" is used when you wish to create a standard IFF instrument rather than a specialized sound effect. Although it's nice that SunRize provided this capability, it can be somewhat difficult to use. You must clear out all samples except the ones to be used to make the instrument, and you must be sure to arrange them in descending octave order (unless you are building a multisampled drum kit, for example). The editor will warn you if any of your octaves are not exact multiples, or if your repeat length is uneven, or if a sample does not begin on a word boundry, but it does not
assist you in correcting these conditions. Once you have created an instrument, you can listen to one note from each octave by using the function keys, but it is not possible to hear any other notes from the scale.
The Digitize menu contains all the options related to recording a sample. "View Signal Levels" calls forth a continuous display of minimum, maximum, and current levels for both the left and right channels, as well as the difference between them. This display remains active until the left mouse button is clicked inside the window.
"Alter Record Speed" works in the same way as "Change Playback Period", and controls the sampling rate during actual recording. The slider range is from 124 to 999, which is roughly a range of 28,800 to 3583 samples per second. (If you've always wondered how these sampling periods relate to the real world, you divide 3579545 - the color burst frequency - by the sampling period to get samples per second.)
"Monitor Digitizer" takes over the computer and pipes the input from the digitizer to the audio outputs of the Amiga in real time. You can monitor either channel, or both together in stereo. This is an excellent way to set digitizer gain, since you can hear any distortion. Unfortunately, the monitoring occurs at a fixed sample rate. Had it been tied to the selected record speed, it would have also been useful as a preview of exactly how the final sample would sound.
"Record Sample" allows you to capture a sample from either input, or in stereo. The system enters "Monitor Digitizer" mode and waits for you to click the left mouse button, at which point the monitoring ceases and recording begins.
Recording will continue until you click the left button again or you run out of sample memory. When sampling is completed, you are asked for a name for the sample, and it is added to the editor's list as the currently selected sample.
The File menu allows you to load or save a sample in any one of three formats: IFF, DUMP, and COMP. IFF is the standard interchange format among Amiga music and sound programs. DUMP is a raw dump of the sample. It will save a few bytes and will bad a bit faster than IFF, but is not usable by all music programs. (This option is useful if you are writing Introducing Robot Readers a powerful new way for your child to learn to read Even if your child isn't a reader yet he can read these classic stories at his own speed through interactive speech. And he can play a game that builds vocabulary and
reading ability. These beautifully illustrated stories are designed to be used by children with little or no help. More stories will soon be available. To introduce the series and help build a library for your children we make this LIMITED TIME OFFER: Buy one, get one free ?CHICKEN LITTLE $ 29.95 each ?LITTLE RED HEN for the Amiga 612k ?AESOP'S FABLES 0811 or w”1® ?THREE LITTLE PIGS (specify titles) HILTON ANDROID CORPORATION PO Box 7437 • Huntington Beach, CA 92615-7437
(714) 960-3984 a program which needs sound, but you dont care
about or need IFF routines.) COMP is a variant of IFF which
greatly reduces the size of the sample file, but it can
have a significant impact on sound quality.
The "About" menu selection brings up a window which explains that the Perfect Sound editor is copyrighted shareware, for which SunRize asks a donation of $ 20. A brief advertisement for the Perfect Sound package is also included. This notice is included for those people who have obtained the editor from a BBS or one of the commercial networks.
OTHER RESOURCES Perfect Sound is very much a "hacker's package", and appears to be aimed squarely at people who want to add sampled sound to their own programs. The sound editor, as mentioned, includes several operations which are very useful for building composite sound effects. In addition to this, complete source code in C, and support routines in assembler, are provided for the editor. This is a useful addition for anyone interested in writing their own code, because they can use this material as a reference. And of course, if you don't like something about the sound editor you can change
it, or add features you need.
SunRize has also included the file FormatJFF, which is the early 1985 specification document for IFF from Electronic Arts. This file is especially helpful for anyone who does not yet have the Exec manual, which includes a later IFF specification.
The disk also includes two dozen samples, most of which are simple demonstration sound effects.
ON THE OTHER HAND Once again, it's time for me to list ail the things I'd rather see done differently.
As far as the hardware is concerned, the lack of a feedthrough port is going to be an inconvenience for many.
Lots of folks have parallel printers connected, and that means cable swapping when it's time to do a little sampling.
Plus it eliminates the possibility of simply pushing the sampler window into the background and printing a file or two.
If you have your external drive on top of your computer to the right of the monitor, you'll find reaching the gain controls on the digitizer a bit awkward. And, because of the length of the box, it’s fairly easy to wiggle the digitizer right out of the parallel port while trying'to adjust the gain controls or change audio connections; best support it with one hand to be safe.
When changing the record sample rate, the system changes the playback sample rate accordingly. Problem is, it doesn't do a very good job of it. The default record period of 352 (fust over 10 Khz) and default playback rate of 293 faithfully reproduces the recorded sample. Change the record rate to 127 and the playback rate changes to 105, which is way out in left field: the correct playback rate is closer to 200. If you intend to record at anything other than the default rate, you'll have to tweek the playback speed to get everything to come out right.
There doesn't appear to be any way to abort a playback.
This can be inconvenient if you have a very long sample in memory, or have accidently set a playback rate which is far too slow: you have to wait out the complete playback before continuing.
Confirmation of certain operations would have been a nice touch. For example, selecting "Discard This Sample" will do just that... without consulting you. It's pretty easy to accidently select this choice when going for the ones above or below it if you are working quickly, or to mistakenly delete the wrong sample. (Or, at least it was for this "all thumbs” reviewer!) Still, using care and thinking ahead can avoid any problems. The program apparently doesn't check to see what font is being used, because booting with a stock WorkBench disk (using the 60 column font) does strange things to the
drag bar and the two Play buttons. This is not terribly important, since most people use the 80 column font.
Perfect Sound is not very stable under 1.2. Digitizing a sample after startup and then immediately attempting to clip the front end from it invariably crashed my system. Thinking it might be interference from one of the background tasks I always have running, I tried booting from a stock 1.2 WorkBench disk. I got farther, but the program still crashed.
On one occasion, the program itself reported "Bug... Code 02"; in all other cases I got a consistent Guru Meditation number which indicated problems with the Exec Library.
Under 1.1 the program was very solid.
What was more fascinating to me was that I couldn't coax the program into sampling with 512K. I have an Insider 1 Meg RAM RTC board from Michigan Software, but a supplied program allows me to toggle this extra RAM off, making it unavailable to the system. In this state the program would load and run, but would refuse to sample, insisting that it was "Out of Memory". Again, under 1.1 the program worked as it should, with or without the added memory. Never, ever swap disks while monitoring or recording a signal. The system gets confused, and the guru will insist your disk has been corrupted.
INCLOSING The Perfect Sound digitizer is a fairly nice package, and is a viable choice if you want to add sounds to your own programs. It's not very good at making instruments, and there is no convenient way to play back any instruments you make. Where this package excels, instead, is in it's ability to make special purpose sound effect and music samples.
The fact that this is the least expensive digitizer of the bunch and is the only one which records in stereo right out of the box is squarely in its favor.
Even if you already have another sampler, it would be to your advantage to pick up a copy of the Perfect Sound editor from a network or bulletin board and send SunRize the $ 20 shareware payment; this will give you another flavor of editor with some capabilities the others don't have.
Nybbles, Rick
• AC* Summary... This package works veiy welt, although it is
farf rom stable under 1.2. It is perhaps best suited to
recording background music and sound effects for games and
simulations, although it does have limited capabilities for
making IFF instruments. The software portion of the package is
available as shareware, and should be considered as a possible
addition to your sampler tool kit.
Perfect Sound Digitizer $ 89.95 . (Software only, $ 20 shareware) COPY PROTECTION: None REQUIREMENTS: Amiga with 512K, one drive, KS 1.1 (Marginal under 1.2). SunRize Industries PO Box 1453 College Station, TX 77841 409*846-1311 Traditionally, when a Basic program requires some input from the user, it uses one of the INPUT, LINE INPUT, or INPUT$ statements. While these statements work well and do what they are supposed to, they do have some serious disadvantages. When INPUT is used, the user MUST supply the exact number of required pieces of information, in the required sequence, in the correct
format, and separated by commas. No leeway is given for errors. Should the user make an error (as they we are prone to do), a rather cryptic error message is automatically generated which is unfriendly and which will destroy a neatly formatted screen. To avoid these problems, most people revert to LINE INPUT which accepts whatever characters the user enters. However, it now becomes necessary to edit the input and, if appropriate, to convert the input string to a numeric format.
By Bryan Catley Build a fully featured input routine which you may use in almost any situation, from almost any AmigaBasic program.
An alternative is to use "string$ =INPUT$ (n)" where the user enters "n" number of characters and all entries, including control characters such as RETURN, BACKSPACE, etc., are returned in "string!" Automatically. Now the program has to both edit the data and concern itself with handling the control characters correctly!
Besides all this, these three statements have one other serious disadvantage when used with the Amiga -• they lock out the mousel A mouse click is remembered, but is not given to the program until the INPUT statement has completed! Try the following short program: ON MOUSE GOSUB ClickRtn:MOUSE ON LINE INPUT "Enter something: ";x$ PRINT “You entered: ";x$ MOUSE OFF END ClickRtn: PRINT "Button Clicked!"
RETURN When you run this program, press the left mouse button after receiving the "Enter something:" prompt, but before you press the RETURN key. Note that nothing happens. Now press the RETURN key, and the "Button Clicked I" message will be displayed! The LINE INPUT effectively also becomes a MOUSE STOP statement, while pressing the RETURN key causes an effective MOUSE ON! This "feature” is particularly annoying if you have a requester routine where the user should have the option of entering some information or clicking on a gadget.
The "Getlp" Subprogram All of these problems (except the trivial data conversion) are solved by the "Getlp" subprogram described in this article.
"Getlp" will provide its users with the following capabilities:
* an initial data string may optionally be presented for editing
* inputed data is automatically edited for character, real
(numeric with decimals), or integer (numeric without decimal),
as requested » (eft and right cursor keys are fully supported
* inputed data is insetted at the position of the cursor
* BACKSPACE wifi delete the character to the left of the cursor »
DEL will delete the character under the cursor « ESC will clear
the string to null
* automatic termination when the left mouse button is clicked;
(provided the appropriate shared variable has been set by an
external mouse event routine) "Getlp" may be invoked in either
of two ways: CALL Getlp (Text$ ,datatype!,maxlen%) or Getlp
Text$ ,datatype!,maxlen% where: Text! Is a string variable
containing a null value, or a string to be edited.
Datatype! Is one of "CHAR", "REAL", or "INT" specified as a literal or as a string variable. This parameter determines the type of editing that will be performed. Any other value will effectively turn input editing off altogether, allowing such keys as the function keys to be used.
Continued... maxlen% is the maximum length that Text$ may assume, specified as an integer variable or literal.
Beside using the three given parameters, "Getlp" also assumes the user has:
• LOCATEd to the first position of the text area, whether or not
any text is present
• set the shared variable "TxtCol" to the desired palette number
for the text color
• set the shared variable "NewCur" to a non-zero value when it is
desired to change the color of the cursor Once set, the shared
variables "TxtCol" and "NewCur" will, in most cases, not
require being set again (which is why they are not parameters).
However, it will occasionally be appropriate to change the
cursor color, especially if the text or background colors
The cursor is originally drawn with the LINE statement, using the palette which is one less than the "TxtCol" palette (or one more if TxtCol=0). From then on it is drawn using PUT with the XOR (exclusive OR) option. This method allows the character which is being covered by the cursor to "show through", and also allows the cursor to be erased simply by redrawing it in the same location. This provides all the requirements we need for editing but, because of the way XOR works, the actual colors which appear on the screen may be other than those expected. This is because the colors displayed
depends on the original color specified for the cursor, and the colors of the character and background being drawn over! In addition to this, if the text or background color should end up the same color as that of the cursor, the cursor will become invisible!
Now, because of this, it is appropriate to have a method of redrawing the cursor even though it probably won't be necessary very often. As a general rule of thumb, if you change "TxtCol”, you should probably also change the cursor color. As a matter of fact, "Getlp" could very easily be modified to do this automatically, but it is shown in the form which provides the most flexibility.
A First Example Before we examine how "Getlp” works, let's see it in action with an example. First type in Listing 1 (the "Getlp" subprogram) and save it with the ",A" option. That is, when you have entered Listing 1, use an immediate command of the form SAVE "Getlp",A. This causes it to be saved in an ASCII format, which in turn, allows it to be MERGEd with other programs at a later time. (The menu save does not support the "A” option).
Note... As shown, "Getlp" contains a lot of comments and blank lines which have been included for documentation and readability purposes. While you may, or may not, choose to enter all these extras, I would strongly recommend that you remove them from your final working version. Comments take up valuable memory space (yes, you should still be concerned about wasting memory), and sbwdown execution. Since "Getlp" is involved with keyboard input, the latter is not too important, but the former certainly is.
Next, enter Listing 2 (the first example program), and then merge "Getlp" with it. You do this by clicking in the Basic Output window, and then entering the immediate command: MERGE "Getlp". "Getlp" is now read into memory and appended to the program already there. If you get an error message in response to the MERGE command you probably forgot to save it with the "A" option. No problem; just save Listing 2, load "Getlp” and re-save it with the "A" option, then load Listing 2, and repeat the MERGE command! Now save the combined programs before attempting to execute them; (you don't need the
"A" option now).
Time to try it out! Select the RUN menu item, or enter the immediate command: RUN. Assuming you have no typos, you will receive a series of four prompts for input, and as each prompt is responded to, the program will print the data it actually receives, and go on to the next prompt. The first prompt is for character data; the second is also for character data, but an initial string is provided for editing; the third is for a real number; and the fourth is for an integer number.
Check out the features! Enter valid and invalid characters; try a function key when CHAR is requested; or an alphabetic when either REAL or INT is requested; or a period when INT is requested; etc. Cursor back and forth across the string; use the BACKSPACE key to delete the character to the left of the cursor and use the DEL key to delete the character under the cursor. Type a character to insert it at the cursor position; or press the ESC key to completely clear the string you are working with! Finally, note the various color combinations. Each example uses a different combination of the four
Workbench colors as set in Preferences.
How "Getlp" Works "Getlp" is really very straightforward, and I suspect you obtained a reasonable idea of how it worked when you entered it. However, the following may help to clear up any questbns you may still have.
First of all, the three shared variables are set up. "TxtCol" and "NewCur" have already been discussed, but "Mouselnd" is the variable that must be set to a non-zero value (by an external mouse event routine) in order for "Getlp" to terminate when the left mouse button is pressed. Following this, some of the variables which are "local” to "Getlp are initialized: "start" is set to the starting column number, "cur" (the relative position of the cursor over the text string) is set to zero, the foreground color is set to "TxtCol", and the pixel coordinates of the upper left-hand corner of the
first character position are cabulated (to be used to initially draw the cursor).
The very first time "Getlp" is used, "NewCur" is set to 1 to insure the cursor is initially drawn, and an array in which the cursor will be stored after it has been drawn is dimensioned.
The size shown should be large enough to hold the cursor, regardless of the depth of the screen; (the higher the depth, the larger an array must be to hold the cursor). Next, and if a new cursor has been requested, it is drawn using the LINE statement, and saved in the previously dimensioned array with the GET statement. This will cause a momentary flicker of the cursor which you will probably not notice unless you are specifically looking for it.
We are now in the main processing part of the subprogram, and it starts by displaying the contents of the given text string, padded on the right with sufficient number of spaces to make the length of the string equal the given maximum length. Immediately following this, the cursor is PUT at the appropriate position using the XOR option. Once this has been done, we immediately LOCATE back to the start of the string, and calculate the pixel location of the cursor.
Now we wait for "Mouselnd" to become non-zero, or for the user to press a key. When either occurs, a check is made to see exactly what happened. If "Mouselnd" became nonzero, we go to the exit right away. However, if a key was pressed, we check to see if it was one of the control keys we are supporting. If it was, we branch to the appropriate routine; if not, we assume it to be a data character.
Data characters are then edited based on the datatype provided by the user. Errors are indicated by a BEEP and a return is made to wait for another character. Valid characters are then inserted in the string provided the string is not yet at its maximum length. The insertion is effected by splitting the string immediately to the left of the cursor, and then by concatenating the left part, the character entered, and the right part. The relative cursor position is also incremented by one. A return is then made to display the new string with the cursor at its new position.
The remaining routines simply support the various editing functions. "CurRight" and "CurLeft" simply increment or decrement the relative cursor position by one respectively and then return to display the string. "DelLeft" (for the BACKSPACE key) splits the string one position to the left of and at the cursor, then rejoins the two pieces dropping the character that was to the immediate left of the cursor, and decrements the relative cursor position by one. "DelRight” (for the DEL key) splits the string on either side of the cursor and then rejoins the two pieces dropping the character which was
under the cursor; the relative cursor position remains unchanged. (Note, in all of the above routines, if the cursor is at the first or last position of the string, a special case is presented). The "ClrTxt" routine simply prints spaces over the existing display and then blanks and zeros all the appropriate variables.
Just before "Getlp" is exited, the cursor is removed from the display by PUTting it on top of itself. (Another advantage of XOR is that if a shape is PUT, it appears; if it is PUT again on top of itself, it disappears! Note that this only works with the XOR mode though). This particular function is not always necessary, but is appropriate if the requester has several items to be input, and "Getlp" is used for each one individually. After all, it would look very messy to leave the cursor on item 1 while requesting item 2!
Now we have a better understanding of how "Getlp" works, let's look at another example.
A More Practical Example Listing 3 is a short program which displays a requester in the upper left-hand corner of the screen. To enter or edit text in the text-box, first click in it (the cursor will appear), and then enter and or edit the text as necessary. When done, you may press the RETURN key or click in the OK gadget to accept the text, or click in the Cancel gadget to abort the whole thing. Note that you have the option of either pressing the RETURN key or clicking the OK gadget to accept the text.
Enter Listing 3 and MERGE "Getlp” with it just as you did with Listing 2. Remember to save a copy before you try running the program.
Aside... Listing 3 makes use of the three gadget subprograms (BldGadgets, DrawGadgets, and GetGadget) which I described in another article (Basic Gadgets) in Amazing Computing. Should you already have entered these subprograms, there is no need to do it again. Just MERGE in the ones you have! If you don't already have them then you'll need to type them in; and if you're interested in finding out more about them, then you'll need to refer to the other article.
The "DoRequester" subprogram is pretty simple but it might very well form the basis for your own, somewhat more flexible, requester subprogram. The only things worth commenting on are the list of SHARED variables (it shares some with the gadget subprograms and some with "Getlp”), and the fact that the mouse event subroutine is in the main program, even though it is only required in this subprogram.
It appears that event routines are not supported in subprograms, (although I have not done an exhaustive test on this), and must be placed in the main program. Anyway, you now have a fully featured input routine which you may use in almost any situation, from almost any AmigaBasic program.
Some Final Comments If you have been following along for the last few months you have started to build a collection of subprograms which provide the basis for making truly professional looking programs. You have subprograms to display a title screen giving your programs a distinctive look, to use gadgets exactly as desired, and now you have an input routine which does everything you need and a simple requester subprogram. I think you'll find yourself using these subprograms in almost every program you write!
Volume 1 Number 1 Premiere February 1986 If you are reading Amazing Computing™ for the first time, you have not seen Amazing Computing™.
Look what you have missed!
Super Spheres By Kelly Kauffman An Abasic Graphics program Date Virus By John Foust There is a disease that may attack your Amiga EZ-Tenm by Kelly Kauffman An Abasic Terminal program Miga Mania by Perry Kivolowitz Programming fixes and mouse care Inside CU by George Musser a guided insight into the AmigaDos™ CU Summary by George Musser Jr. A removable list of CLI commands AmigaFoium byBelaLubkin A quick trip through CompuServe's Amiga SIG Commodore Amiga Development Program by Don Hicks Amiga Products A listing of present and expected products.
Volume 1 Number 2 March 1986 Electronic Arts Comes Through A look at the new software from EA Inside CU: part two by George Musser George continues his investigation of CLI and ED A Summary of ED Commands Uvel by Rich Miner A review of the Beta version of the Livel frame grabber Online and the CTS Fabite 2424 ADH Modem reviewed by John Foust Superterm V 1.0 By Kelly Kauffman A terminal program written in Amiga Basic A Workbench "More" Program by Rick Wirch Amiga BBS numbers Volume 1 Number 3 April 1988 Analyze! A review by Ernest Viverios Reviews of Racter, Barataccas and Mlndshadow Forth! The
first of our on going tutorial Deluxe Drawl! By Rich Wirch An Amiga Basic program for the artist in us all.
Amiga Basic, A beginners tutorial Inside CU: part 3 by George Musser George gives us PIPE Volume 1 Number 4 May 1986 SkyFox and Articfox Reviewed Build your own 51 4 Drive Connector By Ernest Viveiros Amiga Baaic Tips by Rich Wirch Scrimper Part One by Perry Kivolowitz A C program to print your Amiga screen Microsoft CD ROM Conference by Jim Okeane Amiga BBS Numbers Volume 1 Nuntoer 5 1986 The HSI to RGB Conversion Tool by Steve Pietrowicz Color manipulation in BASIC AmigaNotee by Rick Rae The first of the Amiga music columns Sidecar A First Look by John Foust A first "under the hood" look
John Foust Talks with a J. Mlcal at COMDEX1* How does Sidecar affect the Transformer an interview with Douglas Wyman of Simile The Commodore Layoffs by John Foust John looks at the "cuts" at Commodore Scrimper Part Two by Perry Kivolowitz Marauder reviewed by Rick Wirch Building Tools by Daniel Kary Volume 1 Number 61986 Temple of Apshai Triology reviewd by Stephen Pietrowicz The Hailey Project: A Mission in our Solar System reviewed by Stephen Pietrowicz Row: reviewed by Erv Bobo Textcraft Pius a Rret Look by Joe Lowery How to start your own Amiga User Group by William Simpson Amiga User
Groups Mailing Uat by Kelly Kauffman a basic mail list program Pointer Image Editor by Stephen Pietrowicz Scrimper: part three by Perry Kivolowitz Fun Whh the Amiga Disk Controller by Thom Sterling Optimize Your AmigaBasic Programs for Speed by Stephen Pietrowicz Volume 1 Number 71986 Aegis Draw: CAD comes to the Amiga by Kelly Adams Try 3D by Jim Meadows an introduction to 3D graphics Aegis Images Animator: a review by Erv Bobo Deluxe Video Construction Set reviewed by Joe Lowery Window requesters ft Amiga Bask by Steve Michel ROT by Colin French a 3D graphics editor "I C What I Think" Ron
Peterson with a few C graphic programs Your Menu Sirl by Bryan D. Catley programming menues in Amiga Basic IFF Brush to AmigaBasic 'BOB' Basic editor by Michael Swinger Unking C Programs with Assembler Routines on the Amiga by Gerald Hull Volume 1 Number 8 1986 The University Amiga By Geoff Garrble Amiga’s inroads at Washington State University Micro Ed a look at a one man army for the Amiga MicroEd, The Lewis and Clark Expedition reviewed by Robert Frizeile Scribble Version 2.0 a review Computers in the Classroom by Robert Frizeile Two for Study by Robert Frizeile a review of Discovery and
The Talking Coloring Book True Basic reviewed by Brad Grier Using your printer with the Amiga Marble Madness reviewed by Stephen Pietrowicz Using Fonts from AmigaBasic by Tim Jones Screen SaVer by Perry Kivolowitz A monitor protection program in C Lattice MAKE Utility reviewed by Scott P. Evernden A Tale of Three EMACS by Steve Poling .bmap Hie Reader in Amiga Basic by Tim Jones A look into the .bmap files Volume 1 Number 9 1986 Instant Music Reviewed by Steve Pietrowicz Mindwaiker Reviewed by Richard Knepper The Alegra Memory Board Reviewed by Rich Wirch TxEd Reviewed by Jan and Cliff Kent
Amazing Directory A guide to the sources and resources Amiga Developers A listing of Suppliers and Developers Public Domain Catalog A condensed listing of Amicus and Fred Fish PDS Disks Dos 2 Dos review by Richard Knepper Transfer files from PC MS-DOS and AmigaBasic MaxiPlan review by Richard Knepper The Amiga version of Lotus 1 -2-3 Gizmoz by reviewed by Peter Wayner A collection of Amiga extras!
The Loan Information Program by Brian Catley basic prog, to for your financial options Starting Your Own Amiga Related Business by William Simpson Keep Track of Your Business Usage for Taxes by James Kummer The Absoft Amiga Fortran Compiler reviewed by Richard A. Reale Using Fonts from AmigaBasic, Part Two by Tim Jones 68000 Macros on the Amiga by Gerald Hull Advance your prograrrfs ability.
TDI Modla-2 Amiga Compiler by Steve Faiwiszewski Looking at an alternative to C Volume 2 Number 11987 What Digi-View Is.. Or, What Genlock Should Bel by John Foust AmigaBasic Default Colors by Bryan Catley AmigaBasic Titles by Bryan Catley A Public Domain Modula-2 System reviewed by Warren Block One Drive Compile by Douglas Lovell using Lattice C with a single drive system A Megabyte Without Megabucks by Chris Inring An Internal Megabyte upgrade Digi-Vlew reviewed by Ed Jakober Defender of the Crown reviewed by Keith Conforti Leader Board reviewed by Chuck Raudonis RoundhiH Computer System's
PANEL reviewed by Ray Lance Digi-Paint«i y New Tek previewed by John Foust Deluxe Paint II ...from Electronic Arts previewed by John Foust Volume 2 Number 21967 The Modem by Josph L. Rothman efforts of a BBS Sysop MacroModem reviewed by Stephen R. Pietrowicz GEMINI or 'It takes two to Tango" by Jim Meadows Gameing between machines BBS-PC! Reviewed by Stephen R. Pietrowicz The Trouble with Xmodem by Joseph L Rothman The ACO Project-Graphic Teleconferencing on the Amiga by S. R. Pietrowicz Right Simulator IL..A Cros Country Tutorial by John Rafferty A Disk Librarian in AmigaBASIC by John Kennan
Creating and Using Amiga Workbench Icons by Celeste Hansel AmigaDOS version 1.2 by Clifford Kent Amiganotes...The Amazing MDI Interface build your own by Richard Rae AmigaDOS Operating System Calls and Disk Hie Management by D. Haynie Working with the Workbench by Louis A. Mamakos Programming in C Volume 2 Number 3 The Amiga 2000™ by John Foust A First look at the new high end of the Amiga™ line.
The Amiga 500™ by John Foust A look at the new low prioed Amiga An Analysis of the New Amiga Pcs by John Foust Speculation on the New Amigas Gemini Part II by Jim Meadows The concluding article on two-player games Subscripts and Superscripts in AntigaBASIC by Ivan C. Smith The Winter Consumer Electronics Show by John Foust AmigaTrix by Warren Block Those little shortcuts that make using the Amiga™ easier Intuition Gadgets by Harriet Maybeck Tolly A journey through gadget-land using C Shanghai reviewed by Keith M. Conforti Chessmaster 2000 & Chessmate reviewedby Edwin V. Apel, Jr.
Zing! From Meridian Software reviewed by Ed BercovHz Forth! By Jon Bryan Get stereo sound into your Forth programs.
Assembly Language on the Amiga™ by Chris Martin Roomers by theBandito Genlocks are finally shipping, and MOREIII AmlgaNotea by Richard Rae Hum Busters... "No stereo? Y not?..." The AMICUS Network by John Foust "CES, user group issues and Amiga Expo" Volume 2 Number 4 1987 Amazing Interviews Jim Sachs by Steve Hull Amiga Artist extrodinaire The Mouse That Got Restored by Jerry Hull and Bob Rhode Mouse repair Sluething Public Domain Disks with CU by John Foust using CLI on PDS Highlights from the San Francisco Commodore Show by Steve Hull Speaker Sessions at the San Francisco Commodore Show by
Harriet Tolly The Household Inventory System in AmigaBASlC™ by Bryan Catley Secrets of Screen Dumps by Natkun Okun Using Function Keys with MicroEmacs by Greg Douglas Amigatrix II by Warren Block More shortcuts to make the Amiga work easier Basic Gadgets by Brian Catley Create your own gadget functions Gridiron reviewed by Keith Conforti Real Tackle football for the Amiga Star Fleet I Version 2.1 reviewed by John Tracy Space in the Amiga The TIC reviewed by John Foust A tiny battery powered Clock Calendar Metascope reviewed by Harriet Tolly An easy-to-use debugger by Metadigm To Be Continued..
Amazing Computing™ Your Resource to the Commodore Amiga™ Amazing Computing™ has been offering the Amiga community the best in technical knowledge and reviews for the Commodore-Amiga™ since our first issue in Febuary 1986.
We were the first magazine to document CLI We were the first to show Sidecar™ from COMDEX™ in full detail.
We were the first to document a 5 1 4 drive connector We were the first with a 1 Meg Amiga upgrade hardware project!
We were the first magazine to offer serious programming examples and help.
We were the first magazine to offer Public Domain Software at reasonable prices.
We were the first magazine with the user in mind!
However, Amazing Computing™ will not rest on past achievements. The Commodore-Amiga™ has more surprises for you and we are ready to cover diem. We even have a few tricks that will "Amaze" you.
To subscribe to Amazing Computing™ or to purchase Public Domain Software, please fill out the form below and send with a Check or money order to: PiM Publications Inc.
P. OJBox 869 Fall River, MA 02722.
Back issues are still available at $ 4.00 each (Foreign orders, please add $ 1.00 U.S. per issue for P. & H).
All payments must be made by check or money order in U.S. funds drawn on a U.S. Bank.
Yes! Amaze Me!
Please start my subscription to Amazing Computing™ with the next available issue. I have enclosed $ 24.00 for 12 issues in the U.S. ($ 30.00 Canada and Mexico, $ 35.00 overseas). All funds must be in U.S. Currency drawn on a U.S. Bank.
Please circle your selection: Subscription PDS (as noted) Back Issues Sub Renewal Name_ Street City_ Amount enclosed Mass. Residents, please add 5% sales tax on PDS orders AC5S7 Public Domain Software: $ 6.00 each for subscribers (yes, even new ones!)
$ 7.00 each for non subscribers.
AMICUS: A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 A11 A12 A13 A14 A15 A16 A17 FredFish: FF1 FF2 FF3 FF4 FF5 FF6 FF7 FF8 FF9 FF10 FF11 FF12 FF13 FF14 FF15 FF16 FF17 FF18 FF19 FF20 FF21 FF22 FF23 FF24 FF25 FF26 FF27 FF28 FF29 FF30 FF31 FF32 FF33 F34 FF35 FF36 FF37 FF38 FF39 FF40 FF41 FF42 FF43 FF44 FF45 FF46 FF47 FF48 FF49 FF50 FF51 FF52 FF53FF54 FF55 FF56 FF57 FF58 BACK ISSUES: $ 4.00 each (foreign orders add $ 1.00 each for Postage and Handeting VOL1S1 VOLKS VOL183 V0L1 4 VOLKS VOLKS V0L187 VOLKS VOLKS VOL291 VOL242 VOL293 VOL2S4 St. ZIP Now remember, these subprograms are not cast in concrete.
They don't have to be used exactly as is in every program.
In many cases it will make a lot of sense to make some changes to customize them to the specific needs of the programs using them; after they have been MERGEd with them of course! For example, with "Getlp" it may be desirable to force the cursorto be drawn in a specific color, in order to obtain the best color combinations between text and cursor.
Listing One
* Listing 1 "Getlp" •
• "Getlp" is a keyboard input routine that works in conjunction
with ' the mouse. The using program must set the shared
variable ' "Mouselnd" to a non-zero value (via an external
mouse event ' routine) for "Getlp" is terminate automatically.
I ' The three parameters are: ' -a string containing the text to edited or null ' -a data type indicator; "CHAR", "REAL", or "INT" ' -the maximum length of the string as an integer ¦ ' "Getlp" also expects2the user:
• -to have LOCATEd to start of text area; even if text exists '
-to have set "TxtCol" to PALETTE number for text color
• -to have set "NewCur" to a non-zero value if it is desired ' to
redraw the cursor ?
I ' Bryan D. Catley ' October 1986 i SUB Getlp (Text$ ,DataTypeS,maxlen%) STATIC SHARED TxtCol,NewCur,Mouselnd start=POS(0):cur=0:COLOR TxtCol xpix-(start-1)*8:ypix=(CSRLIN-1)*8 IF FirstTime=0 THEN FirstTime»l:NewCur=l:DIM Ipcursor%(46) IF NewCur=l THEN NewCur=0 CurCol=TxtCol-l: IF CurCoKO THEN CurCol=TxtCol+l LINE(xpix,ypix)-STEP(7,7),CurCol,bf GET(xpix,ypix)-STEP(7,7),IPcursor% END IF ShoText: GOSUB DisplayText Nxtchar: x$ ="":MouseInd«0:LeftPart$ ="":RightPart$ ="" WHILE x$ ="" AND Mouselnd=0:x$ =INKEY$ :WEND IF MouselndoO THEN GetDone ' Mouse was clicked IF x$ =CHR$ (30) THEN CurRight '
Right-cursor IF x$ =CHR$ (31) THEN CurLeft ' Left-cursor IF x$ =CHR$ (8) THEN DelLeft ' Back-space key IF x$ =CHR$ (127) THEN DelRight ' Delete key IF x$ =CHR$ (27) THEN ClrText • Escape key IF x$ =CHR$ (13) THEN GetDone ' Return key IF X$ CHR$ (48) OR x$ CHR$ (57) THEN BEEP:GOTO NxtChar END IF END IF ' We must insert character at cursor position InsertChar: IF LEN (Text$ ) «=maxlen% THEN BEEP:GOTO NxtChar IF cur 0 THEN LeftPart$ =MID$ (TextS,1,cur) IF LEN(TextS) 0 THEN RightPart$ =MID$ (TextS,cur+1,LEN(TextS)- LEN (LeftPartS)) Text$ =LeftPart$ +x$ +RightPart$ :cur=cur+l GOTO ShoText ' Move cursor right one
position CurRight: IF cur=LEN(TextS) THEN NxtChar cur=cur+l:GOTO ShoText ' Move cursor left one position CurLeft: IF cur=0 THEN NxtChar cur=cur-l:GOTO ShoText ' Delete one character to left of cursor; (BACK SPACE) DelLeft: IF LEN(TextS)=0 OR cur=0 THEN BEEP:GOTO NxtChar IF cur l THEN LeftPart$ =MID$ (TextS,1,cur-1) IF LEN(TextS) cur THEN RightPart$ =MID$ (TextS,cur+1,LEN(TextS)-cur) Text$ =LeftPart$ +RightPartS cur=cur-l:GOTO ShoText ' Delete character cursor is covering; (DELETE) DelRight: IF LEN (TextS) =0 OR cur=LEN (TextS) THEN BEEP ".GOTO NxtChar IF cur 0 THEN LeftPart$ =MID$ (TextS,1,cur) IF
cur+l LEN(TextS) THEN RightPart$ “MID$ (TextS,cur+2,LEN(TextS)-cur+1) Text$ =LeftPart$ +RightPart$ GOTO ShoText ' Clear text and start over ClrText: PRINT SPACES(maxlen%+l);:LOCATE ,start cur=0:Text$ ="":GOTO ShoText ' Display text as it exists DisplayText: PRINT TextS+SPACES(maxlen%+l-LEN(TextS));:LOCATE ,start xpix=(start+cur-l)*8:PUT(xpix,ypix),IPcursor% RETURN 1 Return was pressed GetDone: PUT(xpix,ypix),IPcursor% END SUB Listing Two
• Listing 2 "Getlp" Demo
• Bryan D. Catley ' October 1986 r
MouseInd=0;NewCur=0:PRINT"Start Getlp Demo" Wot$ ="":LOCATE
3,5:PRINT"CHAR:"; LOCATE ,10:TxtCol=3:GetIp WotS,"CHAR",10
COLOR 1,0:LOCATE 4,1:PRINT"Received3" ;Wot$ Wot$ “"ABCD" :LOCATE
6, 5".PRINT"CHAR:"; LOCATE ,10:TxtCol=3:COLOR TxtCol,1 PRINT
SPACES(16);:LOCATE ,10 Getlp Wot$ ,"CHAR",15 COLOR 1,0:LOCATE
7,l:PRINT"Received=";Wot$ WotLOCATE 9,5:PRINT"REAL:"; LOCATE
,10:TxtCol=2:COLOR TxtCol,3:NewCur=l PRINT SPACE$ (11);:LOCATE
,10 GetIp Wot $ ,"REAL",10:n=VAL(Wot $ ) COLOR 1,0:LOCATE
10,1:PRIN?"Received=";n WotLOCATE 12,5:PRINT" INT:"; LOCATE
,10:TxtCol=0:COLOR TxtCol,2:NewCur=l PRINT SPACES(6);:LOCATE
,10 Getlp Wot$ ,"INT",5:n=VAL(Wot$ ) COLOR 1,0:LOCATE
13,1:PRINT"Received=";n LOCATE 15,l:PRINT"End Getlp Demo" END
Listing Three ' Listing 3 i ' Demonstration of USING the
"Gadget" AND "Getlp" subprograms
• in a simple program requester situation.
' Bryan D. Catley ' October 1986 • NumGdgts=3:ReqRslt%=0:TxtString$ ="" DIM bx(NumGdgts,7),bxtxt$ (NumGdgts) BldGadgets NumGdgts,bx(),bxtxt$ () DATA 14, 31,176, 9,1,0,-2,"" DATA 20, 52, 24,16,1,0, 2,"Ok" DATA 124, 52, 56,16,1,0, 2,"Cancel" i ' Program does its thing until it needs a requester TxtString$ ="Unimaginatlve Name"
* TxtString$ =,,M Promptl$ ="Enter desired value..." Prompt2$ ="then
CR or click OK" DoRequester
TxtStringS,Prompt1$ ,Prompt2$ ,ReqRslt% ON ReqRslt% GOTO
DoOk,DoCancel 'Handle results of Requester for our demo DoOk:
PRINT"You pressed RETURN, or clicked OK" PRINT"String received
was: ";TxtString$ GOTO Quit DoCancel: PRINT"You clicked
GOTO Quit ’ Mouse Event routine ReqMouse: GetGadget 0,2,bx(),bxtxt$ (),gdgt RETURN ' Remainder of program body and program termination • Quit: END ' Simple Requester Subprogram • SUB DoRequester (WkLine$ ,Promptl$ ,Prompt2$ ,Result%) STATIC SHARED bx(),bxtxt$ (),gdgt,TxtCol,NewCur,MouseInd WINDOW 9,"Program Request:",(0,0)-(200,80),16,-1 TxtCol=2:COLOR TxtCol,3-.CLS CharData$ ="CHAR":CharLen%=20 LOCATE 2,3:PRINT Promptl$ LOCATE 3,3:PRINT Prompt2$ DrawGadgets 0,2,bx(),bxtxt$ () LOCATE 5,3:COLOR TxtCol,1:PRINT WkLine$ ON MOUSE GOSUB ReqMouse:MOUSE ON Mouselnd=0:NewCur=0:gdgt=0:WHILE gdgt=0:SLEEP:WEND
ON gdgt GOTO DoInput,DidOK,DidCancel Dolnput: LOCATE 5,3:CALL Getlp (WkLine$ ,CharData$ ,CharLen%) IF Mouselnd=0 THEN DidCR ON gdgt GOTO Dolnput,DidOK,DidCancel DidCR: DidOK: Result%=l:GOTO DRExit DidCancel: Result%=2:G0T0 DRExit DRExit: MOUSE OFF:WINDOW CLOSE 9 END SUB ' Three Subprograms to provide easy use of Gadgets ' in Amiga Basic SUB BldGadgets (Num,Tl(),T2$ ()) STATIC FOR n=0 TO Num-1 FOR m=0 TO 6 READ Tl(n,m) NEXT m READ T2$ (n) NEXT n END SUB SUB DrawGadgets (Ga%,Gb%,Tl(),T2$ ()) STATIC FOR n=Ga% TO Gb% xl=Tl(n,0):yl=Tl(n,1):x2=xl+Tl(n,2):y2=yl+Tl(n,3) bg=Tl(n, 4):fg=Tl(n, 5):bo=Tl (n,6)
LINE(xl,yl)-(x2,y2),bg,bf:LINE(xl,yl)-(x2,y2),fg,b IF bo -l THEN LINE(xl+2,yl+2)-(x2-2,y2-2),fg,b LINE(x2+l,yl+l)-(x2+l,y2+l),bo LINE(x2+l,y2+l)-(xl+l,y2+l),bo COLOR fg,bg:row%=INT(yl 8+2):col%=INT(xl 8+2) LOCATE row%,col%:PRINT T2$ (n) END IF NEXT n END SUB SUB GetGadget (Ga%,Gb%,T1(),T2$ (),type) STATIC SHARED MouseX%,MouseY%,MouseInd WHILE MOUSE(0)=0:WEND r%=CSRLIN:c%=POS(0) mx=MOUSE(1):my=MOUSE(2) MouseX%=mx:MouseY%=my:MouseInd=0 FOR n=Ga% TO Gb% IF mx Tl(n,0) AND mx Tl(n,0)+T1(n,2) THEN IF my Tl(n,1) AND my Tl (n,l)+Tl(n,3) THEN bg=Tl (n, 4): fg-Tl (n, 5) :bo=Tl (n, 6) IF bo -l THEN
xl=Tl(n,0)+2:yl=Tl(n,1)+2 x2=xl+Tl(n,2)-4:y2=yl+Tl(n,3)-4 LINE(xl,yl)-(x2,y2),fg,bf COLOR bg,fg:row%=INT(yl 8+2):col%=INT(xl 8+2) LOCATE row%,col%:PRINT T2$ (n) ELSE IF bo=-l THEN xl=»Tl (n, 0) :yl=Tl (n, 1) :x2=xl+Tl (n, 2) :y2=yl+Tl (n, 3) LINE(xl,yl)-(x2,y2),fg,bf:LINE(xl,yl)-(x2,y2),bg,b END IF END IF type=n-Ga%+l:n=Gb%:MouseInd=l IF bo -l THEN n%=type+Ga%-l END IF END IF NEXT n WHILE MOUSE(0) 0:WEND IF typeoO AND bo -l THEN DrawGadgets n%,n%,Tl () ,T2$ () LOCATE r%,c% END SUB
• AC* The Amiga 500 and 2000 continue to generate controversy and
rumors. At press time, a Commodore representative was in Hong
Kong, overseeing the first production run of the Amiga 2000. No
word on whether the 500 has begun production, so this rumor
might bode ill against early appearance of the 500. Some say
the high cost of the Sidecar - about $ 900 - is due to the
higher cost of manufacturing in Germany. There are more rumors
of FCC troubles, and others are blaming software delays for the
eternal lateness of the machine.
By the Bandito Inside developer information says that... According to one insider... There are more rumors of... The An]iga 500 may accept Amiga 1000 peripherals by using a small adapter that provides extra power and an extension to move the bus up and out away from the bottom of the 500 case. A similar set of extension cables could link the Amiga 500 to today's Amiga 1000 version of the Genlock. Another source said that the prospect is small for recognizing a Kickstart on power-up, and loading any other version of AmigaDOS into RAM space on the 500. The ROMs inside today's production units
will not have this ability; they are straight AmigaDOS 1.2. Inside developer information says that the Amiga 2000 does not run some off the shelf Amiga 1000 software. The early German production units use a slightly different keyboard controller. For programs and programmers that break all the rules of Amiga system programming and do not use the official AmigaDOS operating system calls, this spells trouble.
The Fat Agnes graphics chip used in the 500 and 2000 has a few extra pins, and some speculators think this might mean a direct-chip replacement upgrade to the higher resolution graphics chips in a future Amiga Other forward-looking Amiga owners want to upgrade their Amiga 1000, so it can have the same flashy expansion options as the Amiga 2000. Several manufacturers are planning expansion boxes forthe Amiga 1000 that give both Amiga 2000-style Zorro slots and the basic PC compatible bus and slots. Such expansion works towards effectively bringing the 1000 in line with the 2000. It will mean
another box on the side of your Amiga 1000, and you probably will not be allowed to place any peripherals between this box and the Amiga The Commodore Bridge card will drop into these boxes, bringing PC compatibility. However, these boxes will not allow the proposed 68020 upgrade card.
Modem junkies have been getting big laughs from the Laurel and Hardy antics Of Amiga developers on CompuServe. The mudslinging over hard disk and expansion bus specifications left a lot of dirty faces, and left many Amiga owners perplexed about what it all really meant.
Commodore is also working on a version of AmigaDOS that boots directly from hard disk. According to one insider, it takes less than fifteen seconds from power-on to hard disk activity. This version of AmigaDOS needs special V1.21 ROM chips.
The fast file system AmigaDOS customized for hard disks is on its way, too. Copies termed 'pre-alpha' are in the hands of hard disk manufacturers. According to one source who is using the new file system, Metacomco's Tim King is still working on it, tweaking hard disk performance by a minimum of three to fourtimes, up to a maximum of twenty times.
Current versions of the software have only optimized read access of the drives, and improved disk writes are in the works, but are not expected to gain much in performance, as compared to read access.
Modem prices are dropping, and according to one source, 2400 baud modems should be available for less than $ 200.
Prices for internal PC compatible 2400 baud modems have dropped to this range, so external modems are not far behind.
• AC* INTUITION GADGB Boolean Gadgets By Harriet Maybeck Tolly
Welcome back to the second installment of 'Intuition Gadgets'.
A quick refresher: Gadgets provide a user interface for your application. There are three types of Gadgets available:
1. String Gadgets (covered last month), which accept strings of
ASCII text.
A. Integer Gadgets, a type of String Gadgetthat accepts only
2. Boolean Gadgets, hit and toggle types. Boolean gadgets are the
topic of this article.
3. Proportional Gadgets, or sliders.
My intent with this series is not to regurgitate the manuals.
So, if you are serious about using Gadgets, you will want the Intuition manual or a reasonable substitute. Unless you program using Intuition everyday, it would help to review the structures associated with Gadgets.
I will be covering areas which can be confusing, have changed in V1.2, or that still contain bugs. As I stated last month, this is only a small part of Intuition. Gadgets in general are easy to program. The material I present to you here represents areas that may not be as straightforward as you would like.
So, let us look at Boolean Gadgets.
Boolean Gadgets are familiar to anyone who has clicked the OK or CANCEL box on a requester. Boolean Gadgets supply an on off interface to the user. A 'hit' type Boolean Gadget is selected as long as the user holds the select (left mouse) button down over it. It goes back to the unselected state as soon as the button is released. A toggle' Boolean Gadget toggles between the on and off state. It remains selected or unselected until the user clicks on it again. The imagery associated with Boolean Gadgets can range from a simple box, to now, in V1.2, a complicated masked shape.
MUTUAL EXCLUSION One of the most frequently heard complaints concerning Boolean Gadgets is the lack of implementation of Mutual Exclusion. The desired effect would be that if two Gadgets were Mutually Exclusive, clicking one on would automatically turn the other off and vice versa. For example, the male and female Gadgets in the famous SpeechToy demo simulate Mutual Exclusion very well. The voice is either male or female. It cannot be both. It cannot be neither.
It is true that this omission is frustrating, since Intuition seems to bend over backwards to provide mechinisms to do just about everything else. It is, however, very simple to implement on your own.
The Enhancer manual gives the official method for doing this. It asks that you follow some strict guidelines, and for good reasons, as we shall see later.
Gadgets can have various Activation Flags set. Among them are the following: GADGIMMEDIATE If this flag is set, you will get GADGETDOWN messages as soon as the user clicks the select (left mouse) button.
RELVERIFY If this flag is set, you will get GADGETUP messages when the select button is released, provided it is still over the Gadget.
TOGGLESELECT If this flag is set, Intuition toggles the selected state of the Gadget each time the user clicks on it When implementing Mutual Exclude, the Gadgets involved should have Activation set to GADGIMMEDIATE, and NOT TOGGLESELECT nor RELVERIFY.
Many of you may have seen examples of Mutual Exclusion using TOGGLESELECT Gadgets, a la SpeechToy. I have not had a problem with this, but Jim Mackraz, author of the V1.2 changes, gives a good argument for avoiding it and only using GADGIMMEDIATE Gadgets. If you use TOGGLESELECT Gadgets, you will be manipulating some of continued... EPSON EX-800 IFOR YOUR AMIGA'!
GOg EX-800 Presenting Epson* EX-800 Dot-Matrix Printer
• Prints 300 characters per second printhead speed in draft mode
(Elite 12 CPI).
• 60 characters per second printhead speed in Near Letter Quality
• New push-button SelecType II front control panel lets you
choose from a combination of eight different typestyles.
• Automatic Sheet Load easily and quickly inserts single sheets
of paper.
• 8K internal buffer stores up to four pages of data at a time.
• User-Installable color option kit adds color to text and
• Bidirectional printing provides maximum throughput performance
for both text and graphics.
• Built-in Push Tractor Feed assures convenient loading.
• One year warranty.
Uses JX-80 printer driver.
EX-800 $ 449.95 Plus S & H the Flags, while Intuition is manipulating others. Since this is a •fix’ to begin with, relinquishing partial control is not the best approach. If both Gadgets are GADGIMMEDIATE, you will have complete responsibility for all manipulation of Flags, and know their states at all times.
Your program should choose one of the Gadgets to start out selected, by setting the SELECTED Flag of that Gadget.
Reading the Intuition manual might give you the impression that the SELECTED Flag is meaningless in the case of a non- TOGGLESELECT Gadget. I have investigated this further, and my sources tell me that it is valid to manipulate the SELECTED Flag, even though we are using GADGIMMEDIATE (non-TOGGLESELECT) Gadgets.
When implementing Mutual Exclusion, the GadgetRender member of the Gadget structure should point to an Image; Pointing to a Border or to NULL will create problems. These problems are due to the simple refreshing method used by Intuition when an Image is absent from the Gadget. This is explained further in the next section.
Now, listen for IDCMP messages of type GADGETDOWN on the Gadgets. When the user clicks on the unselected Gadget, you will need to remove both Gadgets, set the SELECTED flag of the one they clicked, and clear the SELECTED Flag of the other Gadget. Conversely, if the user clicks on the selected Gadget, you will need to clear the SELECTED Flag of the Gadget the user clicked, and set the SELECTED Flag of the other Gadget. Now, add the Gadgets back in, and refresh them.
This can bo done in the following way:
1. Remove the Gadgets to be seleded un-selected.
2. Set or Clear the SELECTED Flag. In C, this would look like:
BoolGadget_one.Flags A= SELECTED; BoolGadgetJwo.Flags A=
SELECTED; This exclusive-OR will toggle the SELECTED states of
the Gadgets.
3. Add the Gadgets back into the list.
4. Refresh the Gadgets' images on the Window.
The example program below contains a pair of Mutually Exclusive Gadgets.
800-762-5645 Cardinal Software 14840 Build America Dr. Woodbridge, VA 22191 Info: (703) 491-6494 REFRESHING NON-IMAGE GADGETS As mentioned above, Mutual Exclude manipulation should only be performed on Gadgets with Images, highlighted by GADGHCOMP. This is a subset of an even bigger warning.
Any type of manipulation of the SELECTED Flag, followed by calls to RefreshGadgets(), is tricky at best with non-image Gadgets. If you try to manipulate the SELECTED Flag of a Gadget with a Border (or nothing), you will become quickly frustrated, as the colors of your Gadgets will appear to have a mind of their own. This is due to the VERY simple way that Intuition handles the complementing of Gadgets without Images.
For a Gadget without an Image, when you ask Intuition to do a RefreshGadgets(), it checks the SELECTED flag. If it is set, it determines that it must highlight the Gadget for you. It does this by complementing all the bits in the Gadget's select box. Now, if the Gadget was already in a SELECTED (highlighted) state when RefreshGadgets() was called, there is a problem. The bits get complemented back to the UNhighlighted state! Conversly, if you do a RefreshGadgets on a Gadget whose SELECTED Flag has been cleared, it will do nothing. In our above example of Mutual Exclude, assume we take the
selected Gadget, clear its SELECTED Flag and Refresh it. This will cause no change in the imagery of the Gadget. To me this is a bug; To Commodore it is a matter of documentation.
The problem is magnified even further when your Gadget has GadgetText associated with it. Depending upon the drawmode, some parts of the text also get incorrectly complemented. A program in the public domain called MxGads, on Fred Fish 52, tries to address this problem. As I stated above, the problem is that complementing is done when you might not want it, and is not done when you do want it. MxGads solves the problem by calling Ref reshGadgets() when it (seemingly) is not needed. Remember, if we call RefreshGadgets() first, while the Flag was still set, Intuition will complement it for us
back to the UN-highlighted state.
So now when we clear the Flag and call RefreshGadgets, even though this second call DOES NOT complement the bits, it has already been done by the first call! This seems to be the developers' work-around of choice, as I have also seen this suggested on BIX. I'm still not sure I'd want to support a product with this kind of logic. I think a better solution is to follow the Enhancer manual's advice, and only play with this flag on Gadgets with Images.
For those of you not trying to fiddle with the SELECTED Flag, and getting flakey results simply from calling RefreshGadgets() (this is how I stumbled over it), be sure to use RefreshGList(). This new V1.2 function allows you to specify a particular range of Gadgets to refresh. This will help you avoid refreshing a questionable Gadget by accident. If, however, you really do want to refresh a SELECTED (highlighted) Boolean Gadget with a Border, know what you are getting into.
GADGETTEXT Boolean Gadgets often have Intuitext strings rendered into them. Many file name requesters use Boolean Gadgets to display the choices of file names. Although the user cannot enter text into them, they can look much like a String Gadget. The point to remember here is that if you want to scroll a list of strings through a column of Boolean Gadgets, when the new string is written into the Gadget, the end of the old string may still be trailing off the end. One way to correct this is to write a string of blanks (length equal to the longest string) into the Gadget before you write the
new string. It is easy to forget this, since doing the same type of scrolling with String Gadgets clears any extra characters from the end for you.
Continued.. 'A AM
• Semi kit (no soldering)
• Add RAM chips for l 2 or a full megabyte
• Software configured for
1. 1 or 1.2
• For l 2 megabyte add 18 41256-15 chips, for 1 megabyte add 36
4125615 chips
• Enhances VIP Professional, Draw, Digi-View, Animator, Lattice
and many others
• Six month warranty JUMBO RAM Board $ 199.95 $ 3.50 S & H RAM
Chips available at prevailing price.
Amiga Schematics still available!
Order Toll Free!
800-762-5645 Cardinal Software 14840 Build America Dr. Woodbridge, VA 22191 Info; (703) 491-6494 In the example program below, I write the word YES into the first Gadget. When you click on the Gadget, the work NO is written into the Gadget. If we did not write blanks to cover the 'S' in YES, when we wrote NO, we would have ended up with NOS. Admittedly, this is just one simple way to blank out the extra characters. The point is, remember they are there, and get rid of them somehow.
A bug fix in V1.2 causes GadgetText to be redrawn after an alternate image is rendered. Previously, if your Gadget had an alternate image as the highlight mode (GADGH IMAGE), when this new image was drawn, the GadgetText was not redrawn over it. The text was therefore lost. In V1.2 this has been fixed and the text is redrawn.
Verlon 1.2 AmlaaDos Enhancements Masked Gadgets Up until V1.2, a Gadget with the GadgetType of BOOLGADGET, should have had its Speciallnfo member point to NULL. This field was ignored for Boolean Gadgets.
However, V1.2 has included the addition of masked Boolean Gadgets. Formerly, Boolean Gadgets could only be rectangles. Even if you specified an image to be rendered for the Gadget, the surrounding rectangle still defined the select box or area that caused Intuition to acknowledge that you clicked the Gadget. With the use of masked Gadgets, you can now specify a shape that redefines the select box of the Gadget.
This is a powerful enhancement that is only briefly touched upon in the 'Amiga Enhancer Software' manual.
The following steps are required to mask a Boolean Gadget.
1. Define the mask as a single bit-plane.
2. Define a Boollnfo structure, with its Mask member pointing to
this data.
3. Set the Speciallnfo member of the Gadget to point to the
Boollnfo structure.
4. Set the BOOLEXTEND flag for the Gadget. This tells Intuition
that Speciallnfo points to a Boollnfo structure.
The Boollnfo structure is defined as follows: struct Boollnfo USHORT Flags; * defined below * UWORD *Mask; * bit mask for highlighting & selecting
* mask must follow the same rules as an Image
* plane. It's width and height are determined
* by the width and height of the Gadget's
* select box. (i.e. Gadget.Width and .Height). * ULONG Reserved;
* set to 0 * }; * Set Boollnfo.Flags to this flag bit.
* Future, additional bits might mean more stuff hanging
* off of Boollnfo.Reserved. * fdefine BOOLMASK 0x0001 *
extension is for masked Gadget * Without a mask you can only
specify a height and width for your Gadget. Therefore, a
rectangle shape is the only option. If, however, we start with
a rectangle, then mask out parts of it, we can produce other
In the example program below I define an image for the Gadget. This is a sort of oval in color 2, with a smaller oval inside of it in color 3. The mask bit-plane is a copy of the small oval. The effect is the following: The oval-in-an-oval image is displayed as the Gadget.
Clicking anywhere outside of the inner oval is not recognized by Intuition. If the user clicks in the inner oval, Intuition will acknowledge it and send you a GADGETUP DOWN message if you have requested one. Also, only the inner oval will be highlighted if you have chosen the GADGHCOMP flag.
Although this is a very useful feature, beware of two problems. Neither the image nor the ghosting are rendered through the mask. Therefore, you cannot expect to be able to place two ovals right up against each other. You must remember that enough room must exist between them to accomodate the rectangles that contain them. Also, when ghosting is rendered, it is done overthe whole rectangle, not just the Image Mask. (This is a sort of pseudo-Fuzzy for those of you following along from last month).
The example at the end of the section on Intuition in the Enhancer manual gives a very simple implementation of masking. If you are going through the trouble of creating a Masked Gadget, you probably have an image of at least 2 bit- planes (4 colors). The example has you point the Mask member of Boollnfo to the array of data for the Image. This will make the Mask equal to whatever is in the first plane of your Image. This makes sense if your Image is only ONE bit- plane. Once you have multiple bit-planes in your Image, pointing Mask to the same data as your Image probably does not make sense.
The bits set in the planes that make up your Image, represent colors. The Mask, however, is a single plane of bits that are either on or off. If you have a multi-colored Image, you probably want to create a separate array of data for the Mask that sets a bit wherever ANY plane of the Image has a bit set Of course, this is the obvious solution. In reality you are not obligated to make your Image and Mask correspond at all.
The mask could be set to the outside of the oval, so the user would have to click in the space outside the oval to have Intuition acknowledge the click. In fact, the Masked Gadget is not required to even have an Image associated with it.
You can define a mask on a plain-old-rectangular Gadget.
Cancel Retry from the Keyboard The Cancel and Retry Boolean Gadgets of system requesters can now be answered by left Amiga-V and left Amiga-B. This is a great help for the user who does not want to be tied to the mouse. This is made possible by the addition of a new Flag for Requesters. The NOISYREQ Flag means that normal input, such as keystrokes, will not be filtered as it usually is when the Requester is active. This Flag is set on Requesters created by BuildSysRequest(). If you build a System Requester using BuildSysRequest(), you can listen for VANILLAKEY or RAWKEY, and associate keyboard
input with the Boolean Gadgets of the Requester.
If the user enters the appropriate keys, you can call FreeSysRequest() and remove the Requester without ever requiring mouse input from the user.
About the author Harriet Maybeck Tolly owns a software company in Wilmington, Massachusetts called TollySoft. She, her husband Bob, and Max the dog, are currently specializing in Amiga software. She can be reached at: PeopleLink: TollySoft BIX: rtolly Now for some general Gadget Goodies... Last time I mentioned that calling OnGadget() and OffGadget() can sometimes cause excessive flashing. This is because these routines call RefreshGadgets().
RefreshGadgets() refreshes all Gadgets in a list, allowing you to specify only the start of the list, not the end. This means that, assuming you do not do gymnastics to reorder your Gadgets each time you refresh, if you specify a Gadget near the start of your list, RefreshGadgets() re-renders most of the rest of your Gadgets even if they don't need it.
Furthermore, if the Gadget specified is a Requester Gadget, ALL Gadgets in the Requester are redrawn. Even with the new less -flicker damage control of V1.2, this can mean flickering.
Version 1.2 offers RefreshGList() as an alternative.
RefreshGList() lets you specify how many Gadgets to refresh (ie. The end of the list). This way you can refresh just the one Gadget that you modified. To go along with this idea AddGList() and RemoveGListO are also provided. These also let you specify the number of Gadgets to add remove.
Their parameters are shown below: AddGList( w ndow_ptr, gadget_ptr, position, number_ofjgadgets, requester_pti) RemoveGList( windowjotr, gadget_ptr, numberjofjgadgets) RefreshGList(gadgef_pfr, window_ptr, requester_ptr, numberjofjgadgets) Notice that AddGList() allows you to specify the requester to which the Gadget belongs. AddGadget() did not include this parameter. Therefore, when adding a Gadget to a requester, the new AddGListQ should be used.
Listing One is a sample C program that opens a window with 5 Boolean Gadgets on it.
1. A Hit Gadget with GadgetText.
2. A Toggle Gadget with an alternate Image and GadgetText.
3. A Masked Toggle Gadget with optional ghosting.
The ghosting is activated by a menu choice.
4-5. A Mutual Exclude pair. Each Gadget has an Image.!
Listing One ********************************************************* Example "C" program showing use of Boolean Gadgets.
This was compiled using Manx, Aztec "C“, AmigaDos VI.2 The code depends on VI.2 functions to operate correctly.
It is intended to be run from CLI.
Note: All Image data must reside in CHIP memory ( lower 512K). If using Lattice, run ATOM on the compiled output before linking. If using Manx, use the +cdb switch on the linker.
Copyright (C) 1987 H. Maybeck Tolly, TollySoft This program is in the public domain and may be distributed free of charge.
?include exec types.h ?include exec exec.h ?include intuition intuition.h ?include graphics gfxbase.h ?include functions.h struct IntuitionBase *IntuitionBase =0L; struct GfxBase *GfxBase « OL; struct Window *ControlWindow « NULL; struct IntuiMessage *MyIntuiMessage; ******************************************** * Border for toggle gadget (BoolGadget[1]) * A******************************************* WORD BoolVectors[] = 0, 0, 51, 0, 51, 41, 0, 41, 0,Obstruct Border BoolBorder °
- 1, -1, * initial offsets, gadget relative* 3, 2, JAM1, *
pens (fore, back) and drawmode * 5, * number of vectors *
(SHORT *)BoolVectors, * pointer to the actual array * * of
vectors * NULL * no next border * }; * All image data must
reside in CHIP memory. *
******************************************************* *
Two Images for hit Gadget with altername images * *
(BoolGadget[2]) *
******************************************************* *
Color 3 'X', 2 planes * UWORD imageone[] = OxFFFO, 0x0000,
0x0000, OxOFFF, OxOOOF, OxFFOO, OxOOFF, OxFOOO, continued...
0x0000, OxFFFO, OxOFFF, 0x0000, 0x0000, OxOOFF, OxFFOO, 0x0000,
0x0000, OxOOOF, OxFOOO, 0x0000, 0x0000, OxOOOF, OxFOOO, 0x0000,
0x0000, OxOOFF, OxFFOO, 0x0000, 0x0000, OxFFFO, OxOFFF, 0x0000,
OxOOOF, OxFFOO, OxOOFF, OxFOOO, OxFFFO, 0x0000, 0x0000, OxOFFF,
OxFFFO, 0x0000, 0x0000, OxOFFF, OxOOOF, OxFFOO, OxOOFF, OxFOOO,
0x0000, OxFFFO, OxOFFF, 0x0000, 0x0000, OxOOFF, OxFFOO, 0x0000,
0x0000, OxOOOF, OxFOOO, 0x0000, 0x0000, OxOOOF, OxFOOO, 0x0000,
0x0000, OxOOFF, OxFFOO, 0x0000, 0x0000, OxFFFO, OxOFFF, 0x0000,
OxOOOF, OxFFOO, OxOOFF, OxFOOO, OxFFFO, 0x0000, 0x0000, OxOFFF
}; UWORD imagetwo[] = * Color 2 '+ ', 2 planes * 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000*, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, OxOFFF, OxFFFO, 0x0000, 0x0000, OxOFFF, OxFFFO, 0x0000,
0x0000, OxOFFF, OxFFFO, 0x0000, OxFFFF, OxFFFF, OxFFFF, OxFFFF,
OxFFFF, OxFFFF, OxFFFF, OxFFFF, 0x0000, OxOFFF, OxFFFO, 0x0000,
0x0000, OxOFFF, OxFFFO, 0x0000, 0x0000, OxOFFF, OxFFFO, 0x0000
}; struct Image BoolImage = 0,0,64,10,2, imageone, 0x03, 0x0,
NULL }; struct Image BoolHImage = 0,0,64,10,2, imagetwo,
0x03, 0x0, NULL };
*******?************?********************** * Image for
masked gadget (BoolGadget[3]) *
********?***?****************************** USHORT
gadget_imageData [ ] = 0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000,0x0000,
0x0000,OxOOOF,OxFOOO, 0x0000, 0x0000,OxOOFF,OxFFOO,0x0000,
0x0000,OxOFFF,OxFFFO,0x0000, 0x0000,OxFFFF,OxFFFF, 0x0000,
0x0000,OxFFFF,OxFFFF,0x0000, 0x0000,OxOFFF,OxFFFO,0x0000,
0x0000,OxOOFF,OxFFOO,0x0000, 0x0000,OxOOOF,OxFOOO,0x0000,
0x0000,0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, 0x0000,
0x0000,0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000, 0x0000, 0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, 0x0000,
0x0000,0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000, 0x0000, 0x0000,OxOOOF,OxFOOO,0x0000,
0x0000,OxOOFF,OxFFOO,0x0000, 0x0000,OxOOFF,OxFFOO, 0x0000,
0x0000,OxOFFF,OxFFFO,0x0000, 0x0000,OxOFFF,OxFFFO,0x0000,
0x0000,OxOFFF,OxFFFO, 0x0000, 0x0000,OxOOFF,OxFFOO,0x0000,
0x0000,OxOOFF,OxFFOO, 0x0000, 0x0000,OxOOOF,OxFOOO,0x0000,
0x0000,0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, 0x0000,
0x0000,0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000, 0x0000,
0x0000,0x0000,0x0000, 0x0000 }; USHORT booljnask[] =
0x0000,0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000,0x0000
0x0000,0x0000,0x0000,0x0000 0x0000,0x0000,0x0000,0x0000
0x0000,OxOOOF,OxFOOO,0x0000 0x0000,OxOOFF,OxFFOO,0x0000
0x0000,OxOOFF,OxFFOO,0x0000 0x0000,OxOFFF,OxFFFO,0x0000
0x0000,OxOFFF,OxFFFO,0x0000 0x0000,OxOFFF,OxFFFO,0x0000
0x0000,OxOOFF,OxFFOO,0x0000 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 OxOOFF,
OxOOOF, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, OxFFOO, OxFOOO, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, struct Image
BoolMaskImage = 0,0, * LeftEdge, TopEdge * 64,30,2, *
Width, Height, Depth * &gadget_imageData[0], 0x03,0x00, *
PlanePick, PlaneOnOff * NULL, * Pointer to next Image * In
struct Boollnfo Boollnfo = BOOLMASK, * This is currently the
only * * flag for boolean gadgets * &bool_mask[0], *
Pointer to the mask * NULL Instruct IntuiText IntuiStr_blank
= 2,3,JAM2,5,5,NULL,(UBYTE *)" ",NULL); struct IntuiText
IntuiStr_yes = 2,3,JAM2,5,5,NULL,(UBYTE *)"YES",NULL}; struct
IntuiText IntuiStr_no = (2,3,JAM2,5,5,NULL,(UBYTE *)"NO",NULL};
******************************************************* *
Gadget structures for three example gadgets *
struct Gadget BoolGadget[5] = * Hit gadget with Border *
NULL, * pointer to Next Gadget * 10,20,50,40, * (Left Top
Width Height) Hit Box* GADGHCOMP , * Flags * GADGIMMEDIATE |
RELVERIFY , * Activation flags * BOOLGADGET, * Type *
(APTR)SBoolBorder, * pointer to Border Image * NULL, * no
pointer to SelectRender * &IntuiStr_yes, * pointer to
GadgetText * 0, * no MutualExclude * NULL, * pointer to
Speciallnfo * 0, * no ID * NULL * no pointer to special
data * * Alternate Image gadget *
UboolGadget[0],110,20,64,10,GADGHIMAGE | GADGIMAGE ,
0,NULL,0,NULL}, * This gadget has mask. It must have
Speciallnfo point * * to a Boollnfo, and have the BOOLEXTEND
flag set in * * its activation flags. *
UboolGadget[1],220,20,64,30,GADGHCOMP | GADGIMAGE ,
(APTR)SBoolInfo,0,NULL}, * Mutual Exclude pair * UboolGadget
[2], 10,120, 64,10,GADGHCOMP 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, };
GADGIMAGE | struct IntuiText ghost__text = * Frontpen,
Backpen, Draw Mode *
2. 1,JAM2, * Left and Top offsets, Font *
5. 1,NULL, * Text to display,next IntuiText * (UBYTE
*)"GHOST",NULL } ; struct Menultem ghost_item = * Next
item, left,top,width,height * NULL,0,5,140,10, .
HIGHCOMP | ITEMENABLED | ITEMTEXT | COMMSEQ, * MutualExclude, ItemFill (text) * NULL, (APTR) &ghost_text, * SelectFill, Command, Subitem * NULL, 'G', NULL } ; struct Menu gadget_menu = * Next menu, left,top,width,height * NULL, 0, 0, 60, 10, * Flags, text * MENUENABLED, "Gadgets", * Pointer to first menu item * &ghost_item } ; A*************************************************** * Main program * a*************************************************** main() struct Menultem *ItemAddress (); ULONG Signals, MIClass, MICode, itemnum; APTR MIAddress?
LONG gad_pos, realjpos; * Open libraries * if (!(IntuitionBase = (struct IntuitionBase *) OpenLibrary("intuition.library", (LONG)LIBRARY_VERSION))) printf("Can't open the intuition library n"); SELECTED,GADGIMMEDIATE, BOOLGADGET,(APTR)&BoolImage, NULL,NULL,0,NULL,0,NULL}, (&BoolGadget[3],110,120,64,10,GADGHCOMP | GADGIMAGE , GADGIMMEDIATE, BOOLGADGET , (APTR)&BoolHImage,NULL, NULL,0,NULL,0,NULL} }; .
Struct NewWindow NewControlWindow = 20, 20, * start LeftEdge, TopEdge * 320, 160, * start Width, Height * 2, 3, * DetailPen, BlockPen * * IDCMP FLAGS * GADGETUP | GADGETDOWN | CLOSEWINDOW | MENUPICK, * Flags * WINDOWDRAG | WINDOWDEPTH | WINDOWCLOSE | ACTIVATE, SboolGadget[4}, * Pointer to FirstGadget * NULL, * no pointer to first CheckMark* (UBYTE *)"Boolean Gadgets", * Title * NULL, * no Pointer to Screen * NULL, * no Pointer to BitMap * 20, 20, * Min size (no size allowed) * 320, 160, * Max size (no size allowed) * WBENCHSCREEN * Type of screen * * Menu
declarations continued... MyCleanupO ; exit (FALSE) ; * Get next Code if user extend-selected menu Items.
MICode « (ItemAddress(&gadgetjmenu,MIC
- NextSelect; if (!(GfxBase = (struct GfxBase *)
OpenLibrary("graphics.1ibrary", (LONG)LIBRARY VERSION))) } *
while * break; I case GADGETUP: printf("Can't open the
graphics library n") MyCleanupO; exit(FALSE); * Check for
GADGETUP on hit Gadget with IntulText. * If (MIAddress “ &Bool
Gadget[0]) * Open window in which to display Boolean
Gadgets. * * Write out a blank string to cover up old
characters. * if (!(ControlWindow ® (struct Window
*)OpenWindow(fiNewControlWindow))) I printf ("Couldn't open the
control window. n"); MyCleanupO; exit (FALSE); * Remove the
Gadget from Intuition's control * * before we change any
values. * gad_pos = RemoveGList(ControlWindow,
&BoolGadget[0],1L); BoolGadget[0].GadgetText = &IntuiStr blank;
1 * Return the Gadget to Intuition's control. * real jpos =
AddGLlst(ControlWindow, &BoolGadget[0], gad pos, 1L,
LONG)NULL); SetMenuStrip(ControlWindow, &gadget_menu); * Loop
forever until user clicks Close Gadget on window.* for (;;)
* wait for a signal and process it * * Refresh the display
of the Gadget. * RefreshGList (iBoolGadget[0], ControlWindow,
(LONG) NULL, 1L); Signals = Wait(lL «
ControlWindow- UserPort- mp_SigBit); * Process the Intuition
message. * while (MyIntuiMessage=(struct IntuiMessage *)
GetMsg(ControlWindow- UserPort)) * Now write out the new
string. * * Remove the Gadget from Intuition's control * *
before we change any values. * gadjpos =
RemoveGList(ControlWindow, &BoolGadget[0],1L); * Get all the
needed info and reply to message.
* MIClass » MyIntuiMessage- Class; MICode »
MyIntuiMessage- Code; MIAddress = MyIntuiMessage- IAddress;
ReplyMsg(MylntuiMessage); *' Determine what the message was.
* BoolGadget[0].GadgetText « &IntulStr no; * Return the
Gadget to Intuition's control. * real_j os « AddGLlst
(ControlWindow, &BoolGadget[0],gadjpos, 1L, (LONG)NULL); switch
(MICXass) case MENUPICK: * Refresh the display of the
Gadget. * RefreshGList(&BoolGadget[0], ControlWindow, (LONG)
NULL, 1L) ; } while (MICode ! = MENUNULL) itemnum «
ITEMNUM(MICode); switch(itemnum) * User chose to ghost
Masked Gadget. * case 0: break; case GADGETDOWN: * Check for
GADGETDOWN on Mutual Exclude Gadgets. * If (MIAddress » &Bool
Gadget[3] II MIAddress
* »“ & Bool Gadget [4]) * Remove the Gadget from Intuition's
control * * before we change any values. * gad_pos =
RemoveGList(ControlWindow, £BoolGadget[2],1L); f gadjpos =
RemoveGList(ControlWindow, &BoolGadget[4], 2L); *
Ghost Unghost the Masked Gadget. * BoolGadget[2].Flags A=
GADGDISABLED; BoolGadget [3] .Flags A = SELECTED; BoolGadget
[4J .Flags A«= SELECTED; * Return the Gadget to Intuition's
control. * real_pos ** AddGLlst (ControlWindow,
&BoolGadget[2], gad_pos, 1L, (LONG)NULL);
AddGLlst(ControlWindow, SboolGadget[4], gad__pos, 2L, NULL);
RefreshGList(ABoolGadget[4], ControlWindow, (LONG) NULL, 2L) ;
} * Refresh the display of the Gadget. *
RefreshGList(&BoolGadget[2], ControlWindow, (LONG)NULL,1L)7
break; User clicked close Gadget. * case CLOSEWINDOW: break; }
* switch * * Reply to any outstanding messages. * while
(MylntuiMessage =(struct IntuiMessage *)
GetMsg(ControlWindow- UserPort)) ReplyMsg(MylntuiMessage);
MyCleanupO ; exit(TRUE); break; ) * switch * } * while * }
* for * } * main * MyCleanupO if (ControlWindow)
CloseWindow (ControlWindow); if (GfxBase)
CloseLibrary(GfxBase); if (IntuitionBase)
CloseLibrary(IntuitionBase); }
• AC* FASTFONTS from the creators of Md.
? FASTTEXTroutines speed up text display works with your existing programs!
? ReplacetheSystemTOPAZFontswithoneoffourfontswesupply orwithoneof your own.
? FunKeys hotkey program lets you move windows, program macros, or create a CLI at any time with a single keystroke.
• k ScreenBlanker protects your display from damage.
? TxEdV1.3 is still available for only $ 39.95 Boulder Font: RBCOEFQHIJKLrHNOPQnSTUVUXyZ Gulch Font: ABCDEFGHIJKLMNOPQRSTUWXYZ HE5TERH FOHT: ABCBEFeHl JKUIHOPCjnSTIATiXYS Siesta Font: ABCDEFGHIJkLHHOPQRSTUVUXYZ FASTFONTS $ 49.95 Mail orders, add $ 3 P & H.
N. C., Mass. Residents add 5%.
P. O. Box 938, Chapel Hill, N.C. 27514 (919) 967-3336 _
BIX:cheath CompuServe: 74216,2117 VISA by Jon Bryan D ...there
are some fundamental differences between Multi-Forth
In my last column, I mentioned that I had received a copy of Jforth from Delta Research in Palo Alto. I am pleased to say that it has the makings of a good development system. I have already received an update, including the "real" manual which has been from preliminary version. Delta Research has been very helpful when I have called them with questions; from early indications, the support promises to be excellent.
While Delta Research has been preparing Jforth, Creative Solutions has been busy too, working on improvements to Multi-Forth. I received a preliminary version of an on-line "help" disk from them. A Programmer’s Toolbox is in the works, and the next revision (1.2) will probably be out by the time you read this article. Creative Solutions continues to improve an already robust product and provide outstanding support.
A CLASSIC COMPROMISE Perhaps, it's East Coast versus West Coast (I'm being facetious). In any case, there are some fundamental differences between Multi-Forth and Jforth. I would like to use this month's column to compare the two approaches, present a few benchmarks, and make some observations about the relative merits of each.
Foremost among the differences is the threading scheme each uses. Multi-Forth is a more traditional implementation of Forth, it is a "threaded interpretive" language, in the sense that it compiles data elements rather than machine instructions. In Multi-Forth's scheme, a word is compiled as a sixteen-bit "token" which represents an offset from a base register. On the other hand, Jforth comes closer to the traditional definition of a "compiled" language because it lays down 68000 machine code. It's still "threaded,” but by means of subroutine calls.
As a result, what you have is the classic trade-off between size and speed. Because each reference to a word only takes sixteen bits, Multi-Forth is quite small. I was able to squeeze the bouncing ball demo (presented a few issues back) down to about 34k. 25k might be attainable. Jforth weighs in at about twice the size of Multi-Forth in its minimum configuration, and grows much faster, but runs certain kinds of tasks two to five times faster than Multi-Forth. Because so much time is absorbed by Amiga ROM, calls the difference in speed should be less in "real" applications. I would still
expect Jforth to be faster by a significant margin.
RELATIVE MERITS I have always been impressed with the quality of Multi-Forth.
It is the product of Creative Solutions' years of experience working with every conceivable 68000 system. The Amiga provided the testbed for a completely new kernal which was subsequently ported to the Atari and Macintosh. The product does show a few rough edges because of the brand- new implementation. Most of the bugs seem to have been worked out, though,and the next update will incorporate local multi-tasking. CSI has reduced the price from $ 180 to $ 90, making an already excellent value even better.
Jforth is taking some getting used to. Its designers have taken an approach which differs considerably from Creative Solutions' approach. I've had to make a few mental adjustments in order to make the transition. Forth tends to amplify the differences as well. Everyone has his her own concept of the right way to do things, and Forth allows each to be pursued with equal ease.
I have to say that I'm tremendously impressed by the amount of effort which has gone into Jforth. Much of the kernal is included on disk in source form, allowing users to customize their own systems. Printing out all the source listings included on the two disks resulted in a two-inch-thick stack of paper! For $ 100, you get a lot for your money I Both Multi-Forth and Jforth are on the cutting edge of Forth technology. Multi-Forth uses what is perhaps the fastest, most compact form of token threading possible on the 68000 and local variables. The next revision should incorporate local
multi-tasking. Jforth uses subroutine threading for speed (with a heavy penalty in object code size), a different method of implementing local variables. Jforth should also have local multi-tasking soon.
A COMPARISON OF FEATURES Jforth is loaded with nice touches. One particularly useful feature is a Motorola syntax disassembler invoked by the word DEF. As an example of its use, consider the word 2*, a fast way of multiplying a number by two. The response to "DEF 2*" is: 8E2 ADD.L TOS,TOS DE87 ( 6: 6: 0) 8E4 RTS 4E75 (16: 22: 3) 2* is 4 bytes long (1 cells), defined as 'both', indicating that 2* simply adds the top stack value (TOS) to itself. The first column is the relative address of the word, which may be different for you. The second column is the disassembly of continued... the
instruction. The third column gives the hex values for the instruction and operand(s). The three values in parentheses indicate the number of CPU cycles used by the instruction, the running total of CPU cycles, and that total converted to microseconds. There is some guesswork involved, and occasionally, a question mark will be appended indicating that the disassembler couldn't give the exact number of cycles. This tip should be handy if you're a clock-watcher.
In the comment, a "cell" in Jforth is four bytes. "Defined as 'both'" indicates that the word will be compiled in-line or called, depending on the value of a variable, MAX-INLINE.
This option allows the user to have some control over the size of the object code. In fact, in a particularly time-critical application, MAX-INLINE could be set temporarily to a large value for a single definition and then reset back to the original value. The entire application doesn't have to suffer the size penalty if the extra time spent in branches and jumps can be tolerated. The word 2* can be used to define 4* like this: : 4* ( n --- 4n ) 2* 2* both ; Which when DEFed would appear as: 1AF38 ADD.L TOS,TOS DE87 ( 6: 6: 0) 1AF3A ADD.L TOS,TOS DE87 ( 6: 12: 1) 1AF3C RTS 4E75 (16: 22: 3) 4*
is 6 bytes long (1 cells), defined as both'. I find the use of "both" curious. It seems that it should be used like "immediate” and follow the semicolon, but it apparently has something to do with a test which checks to see if the word can safely be used in-line. If the compiler decides that the word can't be used, it issues a warning and flags the word as "called."
Another feature of Jforth is the mechanism used for calling libraries. Each library has a "formal definition" file which consists of entries for each function in the library. The entry for WritePixel in the graphics_lib.fd file is: WritePixel(rastPort,x,y)(A1,D0 D1) This entry indicates that the function expects a rastPort address and an x and y value and passes them in the A1, DO and D1 registers. The syntax for calling WritePixel is: call graphics__lib WritePixel This syntax must be used within a definition. Of course, the appropriate values must be on the stack. "Call" would search the
"graphics_lib.fd" file for the entry for WritePixel and then compile the instruction sequence to load to the function, the appropriate registers from the stack and jump to the function. Jforth library calls always return the DO register as well, so in the case of WritePixel, the call should properly be followed by "drop.” Ill give a real code example shortly.
Jforth, like Multi-Forth, includes words for defining the equivalent of'C'data structures. Considering the Amiga's reliance on C-style data structures, they had very little choice. They also provide a program which converts C include files to Jforth syntax, a utility which is sorely lacking in Multi-Forth. An example of a Jforth structure definition would be: :STRUCT Node APTR InJSucc APTR ln_Pred BYTE ln_Type BYTE ln_Pri APTR ln_Name ;STRUCT The fundamental difference between Jforth structures and Multi-Forth structures is that members of Jforth structures are typed, where those in
Multi-Forth are not. Special words named ..@ and..!, which automatically use the appropriate @ or I word, are provided for accessing members of a structure. In Jforth, LONG or APTR members will use @ and I, SHORT members W@ and Wl, and BYTE members C@ and Cl. An example of the syntax would be: NT_MSGPORT myNode ..! Ln_Type I think this syntax is awkward and confusing. The fact that .. I has to look ahead in the input stream is contrary to standard practice. A better syntax might have had the member leave a flag and name the operators ?@ and ?!
(don’t you love these cryptic Forth names?). The concept certainly has merit, though.
Local variables are a recent development in Forth. My first exposure to these variables was in Amiga Multi-Forth. I think it's a great concept I Delta Research must think so too, because they implemented them in Jforth. The only problem is that they implemented them differently. In Multi- Forth they are specified using the syntax: LOCALS I c b a | Whereas in Jforth the syntax is: a b c ) The Jforth syntax looks like a stack comment with braces substituted for parentheses. Multi-Forth locals are taken off the stack in the order in which they appear. Jforth locals are called out in stack
order, with the top stack item on the right. Multi-Forth allows any legal name to be used for a local, while Jforth disallows a leading minus sign. BUT... Jforth gives you the source code for their implementation, so that this quirk can (and probably will) be fixed.
Jforth locals include a few more bells and whistles as well.
The notation: ab|c ~ c ) This notation allocates an uninitialized entry named Von the stack and causes the value of c to be returned. A few other operators are included. An example from the Jforth manual reads: : EXAMPLE a b | c c ) ab+- c a c + - c ; The is equivalent to "to" in Multi-Forth, and the syntax: a b + - c The syntax stores the result of the addition of a and b into c. Locals in both languages are self-fetching, which is not always the way you want things to be. The address of a local is accessed in Multi-Forth with the word "addr.of". Jforth requires a different approach.
In Multi-Forth, "addr.of" works immediately at the time a word is executed. The decision has to be made at compile time in Jforth, using the directives "no@" and "yes@"to control how the local is handled.
Because I was expecting behavior similarto Multi-Forth, this one caught me the first time. Again, here is an example from the Jforth manual: : EXAMPLE a b c --- sum+1 } "sum+1" is a comment a b + c + - c no@ ( self-fetching off ) 1 c +!
Yes@ c ; The example which will be given shortly in a circle algorithm should help to make this more clear.
The last difference between Jforth and Multi-Forth local variables is that Jfortfi locals are left on the data stack, while Multi-Forth moves them to the return stack (the approach used by another company is to move them to a third stack!). Each approach has its own quirks. In Multi- Forth, you must be careful with words like R and R when you're using locals. In Jforth, you must watch what you're doing with the data stack. Both problems have bitten me. A completely separate stack has the fewest side-effeds, but it is also the slowest.
Only the parts that needed the extra speed. In most applications, that probably wouldn't even be necessary. As both a simple benchmark and an example of Jforth code, I have included a version of Bresenham's circle-drawing algorithm. This example illustrates some of the differences between the two implementations. Of particular interest is Jforth's handling of local variables and the mechanism for calling library routines. In timing comparisons, Jforth is approximately 35% faster than Multi-Forth on this particular algorithm. Each algorithm is presented in the form necessary to run from the
default configuration of each language. To try them out bring up the language, compile the code, and then execute "samplewindow" to open a window to draw into. When you finish, "closecurrentwindow" will clean things up. Enjoy.
SOURCE CODE First, the algorithm in Jforth: Bresenham Michener circle algorithm.
Written in Jforth by Delta Research From "Fundamentals of Interactive Computer Graphics" by Foley and Van Dam.
The biggest problem I see with Jforth is the size. It starts off big and gets much bigger in a hurry. The system comes up without any graphics support, and adding the support absorbs over 24k. In contrast, Multi-Forth comes up with mostly equivalent graphics support and is half the size of Jforth. By the time the demos are compiled on a 512k machine, there is only about 50k of memory left. There were times when I couldn't run Ed without shrinking some windows. If you're going to use Jforth as a development system, I would recommend adding at least another 512k of memory. A full megabyte would
be better, and you should pray that Delta Research gets their target compiler done soon.
If the target compiler works as promised by Delta Research, then a turnkey of a simple program like "Hello World" should compile to less than 1 k. Without that utility, I'm not sure whether you can develop viable applications for 512k machines. Multi-Forth doesn't have a target compiler either, but they have less need for one, since they have a very compact implementation to begin with.
It's debatable how much difference between the two you will see in terms of speed on equivalent applications. Jforth is faster, but it achieves that speed by making EVERYTHING fast and big. In Multi-Forth, you would typically optimize newwindow my-window samplewindow ( ) my-window newwindow.setup my-window gr.openwindow gr.set.curwindow ; : closecurrentwindow ( ) gr.closecurw gr.term ; variable xoffset variable yoffset : xyoffset ( x y xrelative yrelative ) swap xoffset 8 + swap yoffset @ + ; : dot ( x y plots a pixel ) xyoffset gr-currport @ rot rot call graphics_lib WritePixel drop
; : circle_points ( x y ) over negate over negate x y x- y- --- } remember, no preceding - x y dot y x dot x- y dot y x- dot x y- dot y- x dot x- y- dot y- x- dot ; decimal continued... : mich_circle ( xcenter ycenter radius ) 3 over 2* - 0 xcenter ycenter y d x --- ) xcenter and ycenter must be in the local list xcenter xoffset ! Ycenter yoffset !
BEGIN x y WHILE x y ci.rcle__poi.nts d 0 IF x 4* 6 + nog d +!
ELSE yes@ x y - 4* 10 + no© d +!
- 1 y +!
THEN 1 x +!
REPEAT yes© x y = IF x y circlejpoints THEN ; The equivalent in Muiti-Forth Bresenham Michener circle algorithm written in Multi-Forth by Creative Solutions Jon R. Bryan 3-22-87 : dot ( x y ) xyoffset Rport !al !dl !d0 graphics 54 ; : circlejpoints ( x y -- ) 8-way symmetry over negate over negate locals| -y -x y x I x y dot y x dot -x y dot y -x dot x -y dot -y x dot -x -y dot -y -x dot ; : mich_circle ( xcenter ycenter radius ) 3 over 2* - 0 locals| x d y | You can still access the data stack here xoffset ! Yoffset !
BEGIN x y WHILE x y circlejpoints d 0 IF x 4* 6+ addr.of d +!
ELSE x y - 4* io+ addr.of d +!
- 1 addr.of y +!
THEN 1 addr.of x +!
REPEAT x y - IF x y circle_points THEN ;
• AC* variable xoffset variable yoffset : xyoffset ( x y
xrelative yrelative ) swap xoffset 0 + swap yoffset 0 + ;
Multi-Forth...at a new low price... $ 89 Simply the best
programming environment for the Amiga Multi-Forth is a new
language designed to unleash the full power of the Amiga.
Multi-Forth provides complete access to all Amiga libraries
including Intuition. It compiles stand-alone applications in
seconds (other languages typically take several minutes).
There are no royalties, and no "levels." CSI provides the best
support of any computer language vendor, including CSI
technical hot line, our own CompuServe public forum at GO FORTH
with hundreds of public domain shareware programs, and a
comprehensive 350 page manual. Programming the amazing Amiga is
interactive and fun with Multi-Forth. S Contact us for a
technical data sheet with the complete list of features. JQF
4701 Randolph Rd. Suite 12 Rockville, MD 20852 Multi-Forth is a
registered trademark of Creative Solutions, Inc. 301-984-0262
in MD or Amiga is a trademark of Commodore Corporation.
1-800-FORTH-OK (367-8465) by Chris Martin Last month, we ended
with a discussion of registers and addresses. The 68000
microprocessor contains on-chip memory locations called
registers. There are two types of these 32-bit memory
locations: data registers and address registers. The data
registers are called DO, D1, D2,... D7 and they can be used to
store numbers up to 32-bits long (in decimal, up to
4,294,967,295). Address registers, although 32-bits long, can
hold only numbers up to 24-bits in length (the number
16,777,216). These registers are called AO, A1, A2,... A6 and
are used primarily to store addresses in the computer's memory,
much like street addresses in a telephone book.
Aside from data and address registers, the 68000 has some other registers.
Program Counter Assembly programs are stored sequentially in the computer's memory. The PC (program counter) register is a 32-bit register'; the first 24 bits contain the address of the program instruction that is currently being executed. The PC is automatically updated when the 68000 reaches the next instruction in the program or when it is told to branch to another part of the program, in a different section of the computer's memory.
Status Register The SR (status register) is a 16-bit register which holds a number of bit-sized "flags" which indicate the current status of the 68000. These flags tell whether a computed value is positive or negative, or whether a compared value is greater than, equal to, or less than another value. We'll talk more about this useful register next month.
Addressing Modes When writing a program in assembly language, there are several ways to access and move memory. These are called addressing modes. There are two main categories of addressing modes: memory addressing, in which memory is addressed; and register addressing, in which registers are addressed. During our discussion on addressing modes, we will use actual assembly instructions: MOVE, which is used to copy data from one place to another and ADD and SUB, which add and subtract.
Register Direct Addressing Register Direct addressing is used in operations involving registers (address or data). For example, the contents of two registers may be added or subtracted, or the contents of one register may be transferred to another. When moving, adding or subtracting, the programmer may specify (when using certain instructions) the size of data to be used: a byte, word, or long word (8,16, and 32 bits respectively).
Examine this visual example: a Regietex 03 I*** .* byte 4 byte 3 byte 2 byte 1 ] ‘4 1 lit 5Q 1 1 ' [ 1 '“i i 1 1 K * 1 1 1 Data Register D1 byte 4 byte 3 byte Z byte X 1 4......j.....I......" i ..... ..... .....L......i . .2.30 ..'I : Instruction: move.l d3,di Copy the long word (.L)contents of register D3 into D1.
Stack Pointer The SP (stack pointer) is address register A7, not mentioned above. A special area in memory, called the stack, is reserved for storing temporary data and variables. The SP points to the top of the stack - the point at which fresh data may be stored or old data removed. The stack can be very useful for storing numbers temporarily.
Notice that the contents of register D3 are copied to register D1. At the end of the MOVE command, we placed a .L suffix. This suffix indicated that the entire long word was to be copied. Likewise, a .B suffix indicates a byte and a .W indicates a word.
When dealing only with Register Direct Addressing, the destination register (where the data will be copied, added, or subtracted into) also must be taken into account. When the destination register is an address register (A0 to A6), you must add an "A" to the end of the instruction. For example, instead of the MOVE! D3.D1 instruction, you must use the following instruction: movea.l d3, A4 continued... This instruction moves a long word from data register D3 to address register A4. Note that only 24 bits of the 32 bit word will be copied to the address.
Absolute Addressing You can use the Absolute Addressing mode to copy a register's data into a memory location. For example, if we want to put the entire contents of register D4 into memory starting at location 90000. In this case, we use the instruction: MOVE.L D4,90000 Visually, this is what happens: In this mode, as in every mode, we can specify the size of the data to be moved, added, etc by using the suffixes .B, .W, or .L. Other examples of this mode are: Converts C64 C128 Files to the Amiga!
DISK-2-DISK'“ from Central Coast Software makes it easy and convenient to transfer C64 C128 files to and from the Amiga. DISK-2-DISK programs the Amiga model 1020 external 5.25" disk drive to read and write 1541 4040 and 1570 1571 disk formats including 1541 “Hippies”. You can even format a 1541 or 1571 diskette on your Amiga! • DISK-2-DISK converts Commodore PET ASCII to AmigaDOS standard ASCII and vice versa. Use DISK-2-DISK to transfer word processing text files (such as PaperClip, SpeedScript and Pocket Writer) to and from the Amiga for use with popular Amiga word processors. •
DISK-2-DISK includes a utility to find and flag dialect differences between Commodore Basic and Amiga Basic files.
• DISK-2-DISK includes VALIDATE BAM and CHECK DISK utilities.
VALIDATE BAM verifies the directory structure of the
1541 1571 diskette.
CHECK DISK reads every block of a 1541 1571 diskette to detect diskette errors. • DISK- 2 -DISK sells for $ 49.95 plus $ 3 shipping and handling.
CA residents add 6% sales tax. Telephone orders welcome. Dealer inquires invited.
MOVE.B D5,10345 Copies the lowest byte of D5 into 10345; MOVE.W A3,2003 Copies the lowest word of A3 into 2003 and 2004 (remember, a word takes up 2 bytes).
Immediate Addressing Take the following BASIC statement: LET A *10 This statement is an example of taking an Immediate value
(10) and placing it into A. Here is an equivalent in assembly,
where we will copy a value of 10 into register D6: MOVE.B
10,D6 Because the data registers (such as D6) are 4 bytes
long, the 10 will be copied into the lowest byte; the
remaining 3 bytes will be unaffected.
Another form of Immediate Addressing is called Quick Addressing. As the name implies, Quick Addressing allows the instructions to be performed faster than usual. On programs that require intensive calculation, speed is important to the user. In such programs, use of the quick addressing mode can have an appreciable effect on the overall running time.
Central Coast Software™ 268 Bowie Drive, Los Osos, CA 93402 805 528-4906 Trademarks: Amiga. AmigaDOS. Commodore-Amiga, Inc.. PaperClip. Batteries Included; Pocket Writer.
Digital Solutions. Inc.; DISK-2-DISK Central Coasl Software.
Many instructions in 68000 assembly language have a "Q" added to the end of them. This "Q" indicates Quick Addressing. In the MOVEQ instruction, an 8-bit number can be quickly copied into a 32-bit data register. For example: MOVEQ 80,D2 This example copies 80 into D2 using quick addressing.
Address Register Indirect Addressing This useful mode allows the programmer to access data in memory locations pointed to by address registers. Suppose that address register AS contains 90000. Also suppose we want to copy the data stored in address 90000 into data register D3. Thus, we would use the statement: MOVE.L (A5),D3 This statement would indirectly copy the contents of 90000 (where A5 points to) into data register D3. Likewise, we could copy the contents of a data register into the memory location pointed to by an address register. For example: MOVE.L D3, (A5) This statement copies the
contents of D3 into the address in A5.
If we wanted to copy data from memory (pointed to by an address) to a data register, as in the instruction "MOVE.L (A5),D3", and at the same time, increment or decrement the address in A5, then we would use postincrement or predecrement. Here are some examples: MOVE.L (A5)+,D3 Copies the value in location pointed-to in A5, then increments A5 by 4 (a .L long word takes 4 bytes). If we used a .B, A5 would only be incremented by 1; if we used a .W, A5 would be incremented by 2.
MOVE.L -(A5),D3 First the address register is decremented by the size (1,2, or
4) and then the data is accessed. Hence, PREdecrement.
Address Register Indirect with Displacement This mode is very versatile. You may access data from locations that are relative to a certain address. You determine the offset from a set location in the instruction. For example: MOVE.B 3(A3),D2 This statement copies the data in the address, pointed to by A3 -i- 3, into the lowest byte of data register D2. In this mode, the range of the displacement is
- 32 K to+32 K. Address Register Indirect with Index and
Displacement This mode is similar to the last, but it allows
you to specify another offset with data or an address register.
For example: MOVE.B 24(A3,D4),D2 This statement copies the
contents of the memory address, pointed to by A3 + D4 + 24,
into the lowest byte of data register D2. We could modify the
statement to read: MOVE.B 24(A3,D4.L),D2 This modification
changes the address pointed to into A3 + (the long word value
of) D4+24. In any case, the displacement value (24 in the above
cases) can range from - 127 to +127. The index (A3 + D4 above)
can range from -32 K to +32 K. Well, that's all for this month.
Next month, we will discuss the condition flags and hopefully
get into some PROGRAMMING! In the mean time, please buy a good
assembler for the Amiga (preferably the Commodore-Amiga Macro
Assembler). Until next month....
* AC- AMIGA” & COMMODORE™ PRODUCTS Prices so low we will not
advertise them... We will not be undersold!
Inside CA1-818 366-5305 • Outside CA1-800 443-9959 KJ Computers, quite possibly the largest Amiga dealer in the USA, stocks all Amiga and third party Amiga products, as well as most popular peripherals and supplies. KJ is easy to do business with, their staff is knowledgeable, and delivery fast. For all this, and best pricing available, give KJ Computers a call today!
M COMPUTERS 10815 Zelzah Avenue, Granada Hills, California 91344 by John Foust There is a sense of nervous anticipation in the air these days among Amiga owners. The Amiga 500 and 2000 have made a splash in the formerly calm waters of Amiga Creek, and with the upcoming influx of Amiga owners, it may very well turn into Amiga Lake.
On my wall, I have a cartoon drawn by Jim Miller, a well- known computer music software programmer. Miller gave out these cartoons at last summer's National Association of Music Marketers Show in Chicago. He writes for the PC market and ports to no other computers. Whenever someone asked "Why haven't you ported to the_ computer yet?,* he would give them the cartoon. The cartoon looks like a map of a continent's shoreline, with a large river flowing from left to right, dumping into an ocean.
At left, a bump in the river is labeled "Lake Apple." It drains into the "IBM River," which is fed by both the "Atari Stream" and "Amiga Creek." The ocean at right takes up half the cartoon; it is labeled "IBM Ocean.” The cartoon explains why Miller writes for the PC market. Perhaps Commodore should adopt this cartoon as the corporate reasoning behind the introduction of the Amiga 2000.
Commodore will be present at the summer Consumer Electronics Show in Chicago starting May 30, showing off the Amiga 500 and 2000 to hordes of electronics dealers. After this appearance, there will be a long drought of Amiga shows until the fall of 1987. I might very well be forced into writing about user groups and public domain software again, instead of Amiga shows.
AMICUS 17 AMICUS disk 17 is now ready. This is a telecommunications disk which contains six terminal programs: Comm version V1.33, Aterm V7.2, VT-100 V2.6, Amiga Kermit V4D(060), Vtek V2.3.1 and AmigaHost 0.9. Comm is a robust terminal program with Xmodem transfers, as well as the Wxmodem file transfer protocol implemented on People Link. This protocol can save quite a bit of time on file transfers. Aterm includes the Super Kermit transfer protocol for the Source network. VT-100 is Dave Wecker's well- known VT-100 emulator. It has Xmodem and Kermit protocols, as well as strong scripting
abilities. Amiga Kermit is a port of the Unix C- Kermit, except for the DIAL and SCRIPT commands. Vtek is a Tektronix graphics terminal emulator based on the VT-100 program V2.3. AmigaHost is designed for use on CompuServe. It includes RLE graphics abilities and the CIS- B file transfer protocol.
Vtek also contains the latest version of the 'arc' file compression and library program. The full documentation for 'arc' is included, along with a tutorial on the basics of un- 'arc'ing files.
The 'arcre' program is useful for making 'arc' files. This process is described later in this column with the files on Fish disk 53. The C source is included there also. 'FixHunk' is a program for people with expansbn memory. It is described later with Fish disk 36. 'FixObj' is described below on Fish disk 38.
Txt' is a very handy tool for manipulating text files. Very often, if you visit bulletin boards that specialize in other computers, you encounter text files that will not load into 'ed'. They have strange line endings, or they appear to be double-spaced, or they contain unprintable binary characters, or paragraphs appear as one long sentence.
The txt' program will filter these files into something readable on the Amiga. The C source is included, and has conditional compilation code for the MS-DOS world. It works like a charm on those machines, too.
Although unrelated to telecommunications, this disk also includes an executable version of 'addmem' for those people who built the memory expansion listed in Amazing Computing, Volume 2.3. Fish disks 36 to 53 The Fred Fish collection of public domain disks continues to grow. It has been a bng time since I have described the contents of the newest disks. In fact, my last description covered up to disk 35,and the collectbn is now up to disk
58. In order to cover all the disks from 36 to 53,1 will skip
some programs, and give only the highlights of each disk, A
complete catalog of available disks is on page 96. I will
cover new disks 54 to 58 next month.
Fred Fish 36 'Acp' is a copy program, much like the Unix 'cp' copy program. Why not use the AmigaDOS 'copy' command?
There are several reasons. First, some people have a primal urge to make their home computer act just like the computer they used in college, or use everyday at work. Thus, this program uses Unix and MS-DOS style wildcards for naming files, such as Second, the AmigaDOS 'copy' program is not very fast, and a simple technique can be used to increase its speed.
Continued... 'Echo' is a tiny program that prints a line of text to the screen. This program would normally be invoked from a script file, such as the 'startup-sequence' file. It has options for modifying the text with color and italics. This program was written by Larry Phillips, a co-SYSOP on CompuServe.
'FixHunk' is an absolute necessity for Amiga owners with expansion memory. Amiga program files are composed of 'hunks' of program data and 68000 code. All graphic image data must be placed in CHIP memory, while program code can reside in FAST memory. Each hunk within the program file has a tag which tells which type of memory this particular hunk prefers. Some programmers are not careful about setting this tag, which results in garbled screen displays for gadgets and program images. Fixhunk modifies the tags on hunks, and moves all data to CHIP memory. This process usually fixes programs that
do not work in expansion memory. Fixhunk was written by Dan 'DJ' James, a coSYSOP on People Link.
'KickBench' is a program to create a combined Kickstart and Workbench disk. This program was developed to allow an unattended reboot of an Amiga after a power failure, an important consideration for bulletin board systems.
Canadian wizard Alonzo Gariepy disassembled the boot code on the Kickstart and Workbench disks and wrote a series of patches. The patches are designed for use with the 'disked' program from the developer disks, so you might have to borrow 'disked' from a developer friend.
Fred Fish 37 is a Little Smalltalk system. C source is included, along with many example Smalltalk programs.
Fred Fish 38 'FixObj' is useful for those people perplexed by Tile is not an object module' error messages in the CLI. There is a chance that this program file was transmitted via modem and the Xmodem protocol, which can introduce garbage characters at the ends of files. Fixobj removes these garbage characters.
'Window' is an example from Commodore, showing how to attatch a CLI window into a custom screen.
Fred Fish 39 'ansiecho' is another 'echo' program. This disk also includes assembly language source for it, along with other CLI commands such as 'els', touch' and 'ask'.
This disk also has an example device driver. It functions as a simple RAM disk for demonstration purposes.
This disk has the first set of ray tracing images by Dave Wecker. Ray tracing is a technique for producing very lifelike computer graphics. Many computer generated images look unrealistic because they are evenly illuminated, or contain no shadows, as if there was no light source in the picture. Ray traced pictures have a light source, and the objects in the picture often reflect or transmit light as well.
Ray-traced pictures often contain glass or mirrored balls, because these objects are easy to model mathematically and because of the extremely life-like effect. Ray tracing involves folbwing the path of the light rays that would reach the viewer's eye from the scene modelled in the computer's memory.
Instead of these images, you might want to get the pictures on Fish disk 44. On that disk, the pictures have been converted to IFF format and can be viewed by any IFF viewer program. On disk 39, the images are in a non-IFF format which requires a uniquely slow display program.
Fred Fish 40 This disk contains shareware and freeware programs. This means they are not in the public domain, and chances are, source code is not provided. Most of these programs are obsolete now, as the authors have since replaced them with newer versions. Such is the disadvantage of public domain and publicly distributed software; you rarely know if you are getting a debugged and most recent version.
Fred Fish 41 'AmigaVenture' is a full-fledged adventure writing system in AmigaBasic, written by Mitsuharu Hadeishi. With this system, you can create your own text-based adventures.
The 'GetFile' directory holds the source, object and executable of Charlie Heath's file requester, popularized in his TxED editor. This is an excellent example of an fast and easy-to-use file requester, as opposed to inflexible file requesters that enforce a ten- to twenty second wait before you can even tell the system to select a different disk. It has been over a year since Heath's requester appeared.
Very few Amiga developers have incorporated it, and no one has improved upon it. It has been long enough. Amiga developers, please use it! All he wants is his name in your manual! (Just a little joke, Heath.)
'SetFont' allows you to change the font used in the CLI window. By entering 'setfont emerald 20', you can work in the CLI with the Emerald font.
Fred Fish 42 holds an Amiga version of MicroGNUEmacs, yet another Emacs clone for microcomputers. This one is intended to be completely compatible with the GNU Emacs.
'GNU' stands for "GNU's Not Unix." This version reveals an effort to produce a public domain version of the Unix operating system, as well as the programs traditionally found on Unix systems.
Fred Fish 43 'Copper* is a copper list disassembler by Scott Everndon.
(The copper is part of a graphics chip in the Amiga used to control the display.) C source is included.
'PopColours' is a program to change the colors of any screen on the Amiga, using sliders in a movable window. It was written by two developers at Canada's Transactor magazine, which accounts for the spelling of the program's name.
Fred Fish 44 This disk contains some well-drawn icons, new material about the IFF standard from Commodore, the IFF versions of the Wecker ray tracing pictures on disk 39, and a program to view IFF ILBM files.
For the Commodore Amiga™ Fred Fish 45contains the game of Clue in AmigaBasic, a version of 'make', and a few IFF pictures. 'Update' is a program to update a disk of programs. Files on the older disk will be replaced by similarly named, but newer files on the other disk. Wherels' searches a disk for a file of a given name.
Fred Fish 46 'Egad' is the long-awaited gadget editor from the Programmer's Network. This programmer tool edits menus and gadgets and generates C source code to recreate a particular screen.
'Jive' and ValSpeak' are filters used to transform texts.
'Jive' transforms text into street English, while 'ValSpeak' translates documents into Valley Girl English.
Uses parallel port Parallel printer still works Simple startup file installation Backup, Physical Format, fit Park programs included ONLY $ 749.00 Call For 30 Meg or 40 Meg prices!
PO Box 39113 Phoenix, AZ 85069 Phone (602) 993-4009 Fred Fish 47 contains the 3-D robot arm simulation and the Juggler demo, along with version 2.4 of the Wecker VT- 100 terminal program, with Xmodem and Kermit file transfer protocols.
Fish 48 'MemWatch' is a program that watches for changes in low memory. Badly behaving programs often inadvertently change values stored in this area of memory, leading to crashes. This program restores the changed bytes and puts up a requester warning of the damage.
'Profiler* is an execution profiler for Manx C version 3.30e. It can identify which regions of a program are most often executed. Source is included.
Fish 49 'MultiDef' is a programmer tool used to scan a set of object modules and library files for multiply- defined symbols.
'MyUpdate' is a program to strip comments from C 'include' files. 'QMouse' checks whether or not the left mouse button is pressed. In a script file, it can return a failure code that can change the course of execution in the script file. For example, it could decide to copy programs to the RAM: disk, if the mouse button was pressed during the startup- sequence.
Continued... Fish 50 This disk contains more shareware programs. 'Asm' is a shareware macro assembler, compatible with the assembler described in the AmigaDOS manuals. This is not the most recent version, so you might want to check your user group's library for the newest. An older version is present on Fish 46.
This disk contains the games Missile and 3-D Breakout.
Fish 50 also contains the SiliCon: CLI shell, an older version of the Perfect Sound sampled sound editor, and the source code to a Unix System V compatible 'arc' program.
Fish 51 'Bison’ is the GNU project's replacement for Unix 'yacc', a programmer tool called a parser generator.
This disk has an update of Unix 'compress' from Fish disk 6.
Fish 51 also includes 'DifSsed', portable versions of 'sq' and 'usq' file compression programs, and Unix-like 'diff' and 'sed', for finding differences between files, and creating new files from that list of differences.
20 Meg Hard Drive Fi» the Comotoe Am a™ Uses parallel port Parallel printer still works Sinple Startup File Installation Backup* Physical For Hat, and Park prograns included Only *815.00 Fron Jefferson Enterprises PO Box 39113 Phoenix, ftI 85869 Phone (602) 993-4009 Fish 52 This disk contains a replacement for the AmigaDOS 'assign' command (written in C), Tek4010', a Tektronix graphics terminal emulator, and Vdraw', a shareware drawing program.
Fish 53 This disk contains some animations and a public domain player program for Aegis Animator.
'ARCre' is a program to rename files before using the 'arc' program. Unfortunately, the 'arc' file compression program maintains the MS DOS standard of only thirteen-character file names, while many Amiga files have longer names than that. 'ARCre' renames all the files in a directory and then creates a script file to rename the files back to their original names. When the user unpacks the'arc'file, he enters 'execute execute.me’ at the CLI prompt, and all the files are renamed.
There is also a public domain C compiler for the 68000 on this disk, but it is not completely ported to the Amiga yet. It produces assembly language source code files for output, which means you still need to assemble the output of the compiler. It does not create executable files. With the advent of public domain assemblers and linkers, it may be only months before a public domain Amiga programming environment is created.
'VC' is a simple, VisiCalc-like spreadsheet program. This program is an update of the version on Fish disk 36, but it still has a few bugs (like not being able to print the spreadsheet). Source code is included.
More Amiga shows AmigaWorld magazine will sponsor an Amiga show, yet another show on the West coast, called Amiga Expo. It will be at Brooks Hall in San Francisco on September 11 through
13. Commodore is expected to be on hand. Hopefully, they will
bring a booth and some Amiga machines, and maybe even some
demonstrations with flashing lights and music.
(Ah, my cynicism is showing...) This show is being coordinated by the same company that produces the Mac Expo shows. For more information, contact Chris Rassias at Work) Expo Headquarters at (617) 329-8334.
As noted in a previous column, the name of the October 10 Amiga show in New York has been changed from Amiga Expo to AmiExpo. For more information, call (800) 32-AMIGA; in New York state, call (212) 867-4663. The winter show has been moved to Los Angeles at the Airport Hilton on January 22 to 24,1988. The summer 1988 show will be in Chicago at the Hyatt Regency July 22 to 24.
Apology In Amazing Computing V2.3 which unveiled the Amiga 500 and 2000,1 gloomily discussed the prospects of forming a national Amiga user group. I did not write to discredit the people working towards such an effort, I only wrote to explain why I did not want the AMICUS name on any other group. I did not intend to imply that the people working on a national Amiga group are going to run off to Jamaica with thousands of dollars.
People Link conferences The Sunday night conferences on the People Link have become extremely popular. Attendance figures have jumped above those of conferences on other networks.
The Sunday night conference starts out with general rumor- swapping and news exchanging. Later, the group splits into developer and user group conferences. On Monday nights, the MIDI music group meets. The unofficial hostess of the music group is Peggy Herrington, whose name can be found above many Amiga articles in other magazines. At last word, a beginner's conference was in the works for a different night during the week. This conference is targeted at people who want to learn more about their Amigas.
Let me try to describe an unsupervised online conference.
Imagine being at a party, in the dark,with eighty others.
Every few seconds, someone in the room utters a sentence and everyone can hear it perfectly. Some people have formed groups. One group might be talking about Amiga hardware, another might be telling jokes about a television show; yet it is all happening at the same time.
In the conference, whenever anyone types a line of text, the message is transmitted to every other participant in the conference. One person might ask a question and another might answer it a few lines later. The intervening messages might be talking about something else entirely.
Conferences are sometimes hard to follow. To the uninitiated, they are bewildering! Puns and jokes slip in.
Talk is littered with telecom idiom - abbreviations such as "brb" for "Be right back,” andto indicate humor (that is a smiley face, on its side) and "imho" for "In my humble opinion.” Occasional pearls of wisdom surface, too. After a heated discussion about the new Macintosh and IBM machines and the benefits of multitasking, Mike Scalora remarked "Yeah, it's a shame that less than 200,000 people know anything about computers." Scalora was talking about Amiga owners, of course.
Conferences can also be supervised, making them much easier to follow. This is often the case when a special guest is present. A moderator regulates who will ask questions and the conference guest answers them in turn.
RJ Mical discovered online conferencing late one Sunday night on People Link. Telecom denizens are often surprised to learn that they know more about telecommunications than a hot-shot programmer. Mical quickly adjusted and dove into the conversation headfirst.
Other recent conference guests include Dan Schein of Commodore West Chester's telecommunications department and Bob Page and Rich Miner of Zbxso, the people who once promised ZLI, and are now promising an Amiga expansion peripheral for image processing. Another visitor is Steve Grant from Access Associates, makers of the the Alegra memory expansion.
Grant will lend his Amiga hardware expertise to future issues of Amazing Computing, if all goes well. His first article will discuss Amiga expansion issues. Miner and Page had an article on Amiga Live! In the first issue of Amazing Computing. They hope to write again in the future. Mical hopes to write for us also, after he finishes his long-awaited game for Electronic Arts.
My favorite guests at the conferences are all of you, the readers of Amazing Computing. Many of you have visited the Amazing Computing section on People Link and left a messages just to say hello or thanks. Your comments about the magazine are taken to heart.
Like The Big Boys.
Playing games on your Amiga can be a great deal of fun, but let's be honest there's more to life than playing games.
Now you can turn your computer into a real-life professional machine with the POW«R»CARD from RS DATA Systems.
The POW»R*CARD is a powerful new expansion board which allows you to mature in your computer use with greater flexibility in multi-processing and multi-tasking.
POW«R*CARD starts you off with a 2 Meg capability and allows you to grow with upgrades to a huge 8 Meg RAM expansion, all on the same board so you don't waste valuable slot space. That means you can run more software without fear of Guru Meditation Numbers, out-ofmemory crashes or any other small system boo-boos! What's more, you won't have to rob your piggy bank because POW*R»CARD offers this tremendous growth at a cost lower per megabyte than you'll find anywhere.
With your new POW»R*CARD, memory expansion is as easy as 1-2-3.
The POW*R*CARDand enclosure will pass through the Buss without modification for even greater expansion. So you don't have to play games with your data anymore. Graduate to bigger and better things with the POW«R*CARD from RS DATA!
Upcoming Products from RS DATA;
• New Hard Disk System, 20 & 40 megabyte memory.
• 4 Port Parallel card.
• 4 Port Serial Card, allowing more serial type peripheral use.
• 4 Slot Expansion System with horizontal board placement for
system height reduction.
• Much, much more!!!
The POW*R*CARD is available now from your local Amiga dealer.. .orcall RS DATA today!
TM tumm .istptems- 7322 Southwest Freeway Suite 660 Houston, Texas 77074 713 988-5441 The AMICUS & Fred Fish Public Domain Software Library This software is collected from user groups and electronic bulletin boards around the nation. Each Amicus disk is nearly full, and is fully accessible from the Workbench. If source code is provided for any program, then the executable version is also present. This means that you don't need the C compiler to run these programs. An exception is granted for those programs only of use to people who own a C compiler.
The Fred Fish disk are collected by Mr. Fred Fish, a good and active friend of the Amiga.
Note: Each description line below may include something like 'S-O-E-D*, which stands for 'source, object file, executable and documentation'. Any corrbination of these letters indicates what forms of the program are present Basic programs are presented entirely in source code format AMICUS Disk 1 sparks qix-type graphic demo, S-E Abasic programs: Graphics Other executable programs: 3DSdids 3d solids modeling program w sample SpeechToy speech demonstration data files WhichFont displays all available fonts Blocks draws blocks Texts: Cubes draws cubes 68020 describes 66020 speedup board from
Durer draws pictures in the style of Durer CSA Fscape draws fractal landscapes Aliases explains uses of the ASSIGN command Hidden 3D drawing program, w1 hidden line Bugs known bug list in Lattice C 3.02 removal CLICard reference card for AmigaDOS CLI Jpad simple paint program CLICommands guide to using the CLI Optical draw several optical illusions Commands shorter guide to AmigaDOS PaintBox simple paint program CLI commands Shuttle draws the Shuttle in 3d wireframe EdCommands guide to the ED editor SpaceArt graphics demo Filenames AmigaDOS filename wildcard Speaker speech utility conventions
Sphere draws spheres HalfBright explains rare graphics chips that can do Spiral draws color spirals more oolors ThreeDee 3d function plots ModemPins description of the serial port pinout Topography artificial topography RAMdisks tips on setting up your RAM: disk Wheels draws circle graphics ROMWack tips on using ROMWack Xenos draws fractal planet landscapes Sounds explanation of the Instrument demo Abasic programs: Tools sound file format AddressBook sirrple database program for addresses Speed refutation of the Amiga's CPU and CardFile sinrple card file database program custom chip speed Demo
multiwindow demo WackCmds tips on using Wack KeyCodes shows keycodes for a key you press AMICUS Disk 2 Menu run many Abasic programs from a C programs: menu alb AmigaDOS object Ibrary manager MoreColors way to get more oolors on the screen at .S-E once, using aliasing ar text file archive program, S-E shapes simple color shape designer Speakit fixobj auto-chops executable files speech and narrator demo shell simple CLI shell, S-E Abasic programs: Games sq, usq file compression programs, S-E BrickOut classic computer brick wall game YachtC a familiar game, S-E Othello also known as'go' Make a
simple 'make' programming utility, S-E Saucer simple shoot-em-up game Emacs an early version of the Amiga text editor, Spelling sirrple talking spelling game S-E-D ToyBox selectable graphics demo Assembler programs: Abasic programs: Sounds bsearch.asm binary search code Entertainer plays that tune q80itasm Unix oonrpatible qsortQ function, source HAL9000 pretends ifs a real computer and C test program Police simple police siren sound setjmp.asm setjmpO code for Lattice 3.02 SugarPlum plays "The Dance of the Sugarplum Svprintf Unix system V oonrpatible printff) Fairies" trees.0 Unix compatble
treeQ function, O-D C programs: (This disk formerly had IFF specification files and Aterm sirrple terminal program, S-E examples. Since this spec is constantly updated, the IFF cc aid to compiling with Lattice C spec files have been moved to their own disk in the decvnt opposite of CONVERT for cross AMICUS collection. They are not here.)
Developers John Draper Amiga Tutorials: Dotty source code to th8 'dotty window demo Animate describes animation algorithms echox unix-style filename expansion, partial Gadgets tutorial on gadgets
S. O-D Menus learn about Intuition menus fasterfp explains use of
fast-floating point math AMICUS DlsJtl FixDate fixes future
dales on all files on a C programs: disk, S-E Xref a C
cross-reference gen., S-E freedraw sirrple Workbench drawing
program,S-E 6bitcolor extra-half-bright chip gfx demo, S-E
GfxMem graphic memory usage indicator, S-E Chop truncate
(chop) files down to size, S-E Grep searches for a given
string in afile, with Cleanup removes strange characters from
text documentation files ham shows off the hold-and-modify
method CR2LF converts carriage returns to line feeds in of
color generation Amiga files, S-E IBM2Amiga fast parallel
cable transfers between an Error adds compile errors to a C
file, S IBM and an Amiga Hello window ex. From the RKM, S
Mandel Mandebrot set program, S-E Kermit generic Kermit
implementation, flakey, moire patterned graphic demo, S-E no
terminal mode, S-E objfix makes Lattice C object file symbols
Scales sound demo plays scales, S-E visbleto Wack, S-E SkewB
Rubik cube demo in hi-res oolors, S-E quick quick sort strings
routine AmigaBaeicProg8(dir) raw example sample window I O
Automata cellular automata simulation setlace turns on
interlace mode, S-E CrazyEights card game Graph function
graphing programs WrtchingHour a game AbasiC programs: Casino
games of poker, blackjack, dice, and craps Gomoku also known
as 'othello' Sabotage sort of an adventure gams Executable
programs: Disassem a 68000 disassembler, E-D DpSlide shews a
given set of IFF pictures, E-D Arrange a text formatting
program, E-D Assembler programs: Argoterm a terminal program
with speech and Xmodem, S-E AMICUS Disk 4 Files from the
original Amiga Technical BBS Note that some of these files are
old, and refer to older versions of the operating system.
These files came from the Sun system that served as Amiga
technical support HQ for most of 1985. These files do not
carry a warranty, and are for educational purposes only. Of
course, that's not to say they don't work.
Complete and nearly up-to-date C source to 'image.ed', an early version of the Icon Editor. This is a little flaky, but compiles and runs.
An Intuition demo, in full C source, including files: demomenu.c, demomenu2.c, demoreq.c, getascii.c, idemo.c, idemo.guide, idemo.make, idemoall.h, nodos.c, and txwrite.c addmem.c add external memory to the system bobtestc example of BOB use console lO.c console IO example creaport.c create and delete ports creastdi.c create standard I O requests creataskx creating task examples diskio example of track read and write dotty.c source to the 'dotty window demo duaiplay.c dual playfield example flood.c flood fill example freemap.c old version of Ireemap' geltools.c tools for Vsprites and BOBs
gfxmem.c graphic memory usage indicator helk).c window example from RKM inputdev.c adding an input handler to the input reading the joystick direct keyboard reading layers examples test mouse port example of making your own library with Lattice tests parallel port commands tests serial port commands example of serial port use sanple printer interface code printer device definitions region test program source to interlace on off program set the attributes of the parallel port set the attributes (parity, data bits) of the serial port single playfield example source to narrator and phonetics demo
simple timer demo exec support timer functions more exec support timer functions loads and displays all available system fonts joystikc keybd.c layertes.c mousportc cwnlib.c, ownlb.asm paratest.c seritest.c serisamp.c prinintrc prtbase.h regintes.c setlaoe.c setparallel.c SetSerial.c
y. c speechtoy.c timedely.c timers timrstuf.c WhichFontc
prooess.1 and prtbas&i assmebler include files: Amiga Basic
Programs: Printer Drivers: autorqstr.txt warnings of deadlocks
with (Note: Many of these programs are present on AM ICUS
Printer drivers for the Canon PJ-1080A, the C Itoh
autorequesters Disk 1. Several of these were converted to
Amiga Basb, Prowriter, an improved Epson driver that
eliminates oonsolel0.txt copy of the RKM console I O chapter
and are included here.)
Streaking, the Epson LQ-800, the Gemini Star-10, the dis Wonttxt warning of disk font loading bug AddressBook a simpb address book database NEC 802SA, the Okidata ML-92, the Panasonic KX-P10xx fulHunc.txt list of defines, macros, functions Ball draws a ball family, and the Smith-Corona D300, with a document inputdev.txt preliminary copy of the input device Cbad program to convert CompuServe hex fibs describing the installatbn process.
Chapter to binary, S-D License information on Workbench distribution license Clue the game, Intuition driven This is an icon-driven demo, circulated to many dealers.
Printer pre-release copy of the chapter on printer drivers, CobrArt art drawing program It includes the sounds of an acoustic guitar, an alarm, a from RKM 1.1 v11fd.txt ‘dtff of .fd file changes from DeluxeDraw the drawing program in the 3rd issue of banjo, a bass guitar, a boink, a calliope, a car horn, version 1.0 to 1.1 v28v1 .diff *diff of include file changes Amazing Computing, S-D claves, water drip, electrb guitar, a flute, a harp arpegio, a from version 28 to 1.0 Eliza oonversatbnal computer psychologist kickdrum, a marimba, a organ minor chord, people AMICUS Disk S Res from the Amiga
Link Othello the game, as known as 'go' talking, pigs, a pipe organ, a Rhodes piano, a saxophone, Amiga Information Network RatMaze 30 ratmaze game a sitar, a snare drum, a steel drum, bells, a vibraphone, a Note that some of these files are old, and refer to older ROR boggling graphics demo violin, a wailing guitar, a horse whinny, and a whistle.
Versions of the operating system. These files are from Shuttle draws 3D pictures of the space shuttb AMICUS Disk 11 Amiga Link. For a time, Commodore supported Amiga Spelling simpb spelling program C programs Link, aka AIN, for online developer technical support. It YoYo wierd zero-gravity yo-yo demo, tracks yo- dirutil Intuition-based, CLI replacement file was only up and running for several weeks. These files yo tothe mouse manager, S-E do not carry a warranty, and are for educational purposes Executable programs: cpri shows and adjusts priority of CLI only. Of course, that's not to say they
don't work.
A demo of Intuition menus called 'menudemo', in C 3Dcube Modula-2 demo of a rotating cube processes, S-E Altlcon sets a second icon image, displayed ps shows info about CLI processes, S-E source when the icon is dbked vidtex displays Conpuserve RLE pictures, S-E whereis.c find a file searching all subdirectories AmigaSpell a slow but simpb spelling checker, E-D AmigaBasic programs bobtest.c BOB programming exanpb arc the ARC fib compressbn program, pointered pointer and sprite editor program sweep.c sound synthesis example must-have for telecom, E-D optimize optimization ex arqpb from AC
artide Assembler files: Bertrand graphics demo cabndar large, animated cabndar, diary and date mydev sm sample device driver disksalvage a program to rescue trashed disks, E-D book program mylb.asm sample library example KwikCopy a quick but nasty disk copy program: amortize loan amortizatbns mylb.i ignores errors, E-D brushtoBOB converts small IFF brushes to mydev.i LbDir lists hunks in an object file E-D AmigaBasic BOB OBJECTS asmsupp.i SavelLBM saves any screen as an IFF picture grids draw and play waveforms macros.i assembler include files E-D ??
Hibert draws Hibert curves Texts: ScreenDump shareware screen dump program, E only madlb mad lb story generator amig at ricks tips on CLI commands StarTerm version 2.0, term program, Xmodem mailtalk talking mailing list program extdisk external disk specification E-D meadows3D 3D graphics program, from Amazing gameport game port spec Texts: Corrputing™ artide parallel parallel port spec LatticeMain tips on fixing _main.c in Lattice mousetrack mouse tracking exanple in hires mode serial serial port spec GdtskDrive make your own 51 4 drive sbt slot machine game v1.1 update list of new features
in version 1.1 GuruMed explains the Guru numbers tbtactoe the game v1.1h.txt 'diff of include file changes from version Lat3.03bugs bug list of Lattice C version 3.03 switch pachinko-like game
1. 0 to 1.1 M Forge Rev user's view of the MbroForge hard drive
weird makes strange sounds Files for building your own printer
drivers, including PrintSpoobr EXECUTE-based print spooling
program Executabb programs ck 8pecial.o, epsondaia.c,
init.asm, printer.c, printer.link, .BMAP files: cp unix-like
copy command, E printertag.asm, renders, and waiLasm. This
disk does These are the necessary links between Amiga Basb and
ds screen dear, S-E oontain a number of files descrbing the
IFF specification.
The system Ibraries. To take advantage of the Amiga's diff unix-like stream editor uses 'diff output These are not the latest and greatest files, but remain capabilities in Basb, you need these files. BMAPs are to fix fibs here for historical purposes. They include text files and C induded for 'disf, 'consob', 'diskfonf, 'exec', 'icon', pm chart recorder performances indicator source examples. The latest IFF spec is elsewhere in this 'intuitbn'.
'layers', 'mathffp', mathbeedoubas', Assembler programs Ibrary.
'mathieeesingbas', 'mathtrans', 'potgo', timer* and ds screen dear and CLI arguments AMICUS Disk 6 IFF Plcturee translator*.
Exanple This disk includes the DPSIide program, which can view AMCVS Disk 9 Modula-2 a given series of IFF pictures, and the 'showpic' program, Amiga Bade Programs: trails moving-worm graphics demo which can view each fib at the dick of an icon, and the FlightSim simpb flight simulator program caseconvert converts Modula-2 keywords to 'saveibm1 program, to turn any screen into an IFF picture.
HuePabtte explains Hue, Saturation, and Intensity uppercase The pictures indude a screen from ArticFox, a Degas Requester ex. Of doing requesters from Amiga Forth Breshehan drde algorithm example dancer, the guys at Electronic Arts, a gorilla, horses, King Basb Analyze 12 templates for the spreadsheet Tut, a lighthouse, a screen from Marble Madness, the ScrdlDemo demonstrates scrolling capabilities Analyze!
Bugs Bunny Martian, a still from an old movb, the Dire Synthesizer sound program There are four programs here that read Commodore 64 Straits moving company, a screen from Pinball WoridMap draws a map of the world picture fibs. They can translate Koala Pad, Doodb, Print Conduction Set, a TV newcaster, the PaintCan, a world Executable programs: Shop and News Room graphics to IFF format Of course, map, a Porsche, a shuttle mission patch, a tyrannosaurus Bdngl latest Boingl demo,with selectabb getting the fibs from your C-64 to your Amiga is the hard rex, a planet view, a VISA card, and a
Speed, E part.
AMICUS Disk 7 DigiVlew HAM demo picture dfek Brush2C converts an IFF brush to C data AMICUS Disk 12 This disk has pictures from the DigiView hold-and-modify instructions, initialization code, E Executabb programs video digitizer. It includes the ladies with pencils and Brush2icon converts IFF brush to an ioon, E blink 'slink' compatble linker, but faster, E-D bllypops, the young girl, the bulldozer, the horse and Dazzb graphics demo, tracks to mouse, E clean spins the disk for use with disk deaners, buggy, the Byte cover, the dictionary page, the robot and DedGEL assembler program for stopping
68010 E-D Robert. This indudes a program to view each picture errors, S-E-D epsonset sends Epson settings to PAR: from menu, separately, and all together as separate, slidable screens.
Kbck menu-bar clock and date display, E E-D AM13&JM8 life the game of life, E showbig view hkes pictures in bw-res C programs: TimeSet Intuitbn-based way to set the time and superbitmap, E-D Browse view text files on a disk, using menus date, speaktime tell the time, E-D S-E-D EMEmacs another Emacs, more oriented to word undelete undebtesafib, E-D Crunch removes comments and white space processing, S-E-D cnvapldhm converts Appb ][ low, medium and high from C files, S-E MyCLI a CLI shell, works without the res pictures to IFF, E-D IconExec EXECUTE a series of commands from Workbench S-E Texts:
Workbench, S-E-D menued menu editor produces C code for menus, E-D PDScreen Dump FndnKeys explains hew to read f unction keys from quick quick disk-to-disk nbble copier, E-D dumps Rastport of highest screen to HackerSIn Amiga Basic quickEA copies Electronic Arts disks, removes printer explains how to win the game 'hacker* protection, E-D SetAhemate sets a second image for an bon, when Ist68010 guide to installing a 68010 in your Amiga txed 1.3 demo of text editor from Microsmiths, E-D dicked once S-E PrinterTip tips on sending escape sequences to C programs SetWindow makes windows for a CLI
program to run your printer spin3 rotating blocks graphics demo, S-E-D under Workbench S-E SmallClock a small digital clock that sits in a window StartupTip tips on setting up your startup- sequence fib popdi like start a new CLI at the press of a button, Sidekick. S-E-D menubar Scrimper the screen printer in the fourth Amazing XfrmrReview list of programs that work with the Transformer vsprite Vsprite exampb code from Commodore, S-E-D Amiga Basic bulletin board program, S-D Computing, S-E AmigaBBS Assembler programs star 10 makes star fields like Star Trek intro,S-E-D Pictures Mount
Mandelbrot 3D view of Mandelbrot set Star Destroyer hkes Star Wars starship Robot robot arm grabbing a cylinder Texts vendors list of Amiga vendors, names, addresses cardco fixes to early Cardco memory boards dndude cross-reference to C indude files, who indudes what mindwalker dues to playing the game well slideshow make your own slideshows from the Kaleidoscope disk AMICUS Disk 13 Amiga Basic programs Routines from Carolyn Scheppner of CBM Tech Support, to read and display IFF pictures from Amiga Basic. With documentation. Also induded is a program to do screen prints in Amiga Basic, and the
newest BMAP files, with a corrected ConvertFD program. With example pictures, and the SavelLBM screen capture program.
Routines to load and play FutureSound and IFF sound files from Amiga Basic, by John Foust for Applied Visions. With documentation and C and assembler source for writing your own libraries, and interfacing C to assembler in libraries. With example sound.
Executable programs gravity Sci Amer Jan 66 gravitation graphic simulation, S-E-D Texts MIDI make your own MIDI instrument interface, with documentation and a hi-res schematic picture.
AMICUS Dteh 14 Several programs from Amazing Corrputing issues: Tools Dan Kar s C structure index program, S-E-D Amiga Basic programs BMAP Reader by Tim Jones IFFBrush2BOB by Mike Swinger AutoRequester example DOSHelper Windowed help system for CLI commands, S-E-D PETrans translates PET ASCII files to ASCII files, S-E-D C Squared Graphics program from Scientific American, Sept 86, S-E-D crlf adds or removes carriage returns from files, S-E-D dpdecode decrypts Deluxe Paint, removes copy protection, E-D queryWB asks Yes or No from the user, returns exit code, S-E vc VisiCalc type spreadsheet, no
mouse control, E-D view views text files with window and slider gadget, E-D Oing, Sproing, yaBoing, Zoing are sprite-based Boingl style demos, S-E-D CLICIock, sClock, wClock are window border docks, S-E-D Texts An article on long-persistence phospor monitors, tips on making brushes of odd shapes in Deluxe Paint, and recommendations on icon interfaces from Commodore-Amiga AMICUS 15 The C programs Include:
• pr* a file printing utility, which can print files in the
background, and with line numbers and control character
Firf displays a chart of the blocks allocated on a disk.
'Ask' questions an 'execute' file, returns an error code to control the execution in that batch file 'Staf an enhanced version of AmigaDOS'status' command.
'Dissolve' random-dot dissolve demo displays IFF picture slowly, dot by dot, in a random fashion.
'PopCLIZ invoke new CLI window at the press of a key.
The executable programs include: 'Fomnf file formatting program through the printer ' driver to select print styles ‘DiskCaf catalogs disks, maintains, sorts,merges lists of disk files 'PSound* SunRize Industries' sanpled sound editor & recorder _ ‘Iconmaker1 makes icons for most programs 'Fractals' draws great fractal seascapes and mountains capes.
'3D Breakout* 3D glasses, create breakout in a new dimension 'AmigaMonitor1 displays lists of open files, memory use, tasks, devices and ports in use.
'Cosmoroids' version of the 'asteroids' for the Amiga 'Sizzlers' high resolution graphics demo written in Moduia2.
Texts: 'ansi.txf explains escape sequences the CON: device responds to.
'FKey1 includes tenplate for making paper to sit in the tray at the top of the Amiga keyboard.
'Spawn' programmer's document from Commodore Amiga descrbs ways to use the Amiga's multitasking capabilities in your own programs.
AmigaBasic programs: 'Grids' draw sound waveforms, and hear them played.
'Light' a version of the Tron light-cycle video game.
'MigaSof a game of solitaire.
'Stats' program to calculate batting averages 'Money* "try to grab all the bags of money that you can."
AMICUS 15 also includes two beautiful IFF pictures, of the enemy walkers from the ice planet In Star Wars, and a picture of a cheetah.
AMICUS 16 'juggler* demo by Eric Graham, a robot juggler bouncing three mirrored balls, with sound effects. Twenty-four frames of HAM animation are flipped quickly to produce this image. You control the speed of the juggling.
The author's documentation hints that this program might someday be available as a product.
IFF pictures parodies of the covers of Amiga World and Amazing Computing magazines.
C programs: 'Inputhandler* example of making an input handler.
'FileZapS1 binary file editing program 'ShowPrinf displays IFF picture, and prints it
* Gen' program indexes and retrieves C structures and variables
declared in the Amiga include file system.
Executable Programs: 'FixHunkZ repairs an executable program file for expanded memory 'ms2smus' converts Music Studio files to IFF standard 'SMUS* format I have heard this program might have a few bugs, especially in regards to very long songs, but it works in most cases.
'Missile' Amiga version of the 'Missile Command' videogame.
This disk also contains several files of scenarios for Amiga Flight Simulator II. By putting one of these seven files on a blank disk, and inserting it in the drive after performing a special command in this game, a number of interesting locations are preset into the Flight Simulator program. For example, one scenario places your plane on Alcatraz, while another puts you in Central Park AMICUS-17.
Teicommunications disk whuch contains six terminal programs.
"Comm" V 1.33 term prog, with Xmodem, Wxmodem, “ATerm" V7.2 term prog, includes Super Kermit "VT-100"V2.6 Dave Wecker*s VT-100 emulator with Xmodem.Kermit, and scripting "Amiga Kermit" V4D(060) port of the Unix C-Kermit "VTek" V2.3.1 Tektronix graphics terminal emulator based on the VT-100 prog. V2.3 and contains latest 'arc' file compression "AmigaHost"V0.9 for CompuServe. Includes RLE graphics abilities & CIS-B file transfer protocol.
"FixHunk" expansion memory necessity "FixObj" removes garbage characters from modem received files "Txt" filters text files from other systems to be read by the Amiga E.C. "addmem" executeable version for use with mem expansion article in AC v2.3 'arc' file documentation and a basic tutorial on un 'arming files "arcre" for makeing "arc" files E.C. i Fred Fish Disk 1: I amigademo Graphical benchmark for comparing amigas.
Amgaterm simple communications program with Xmodem balls simulation of the "kinetic thingy" with balls on strings colorful Shows off use of hold-and-modify mode, dhrystone Dhrystone benchmark program, dotty Source to the "dotty window" demo on the Workbench disk, freedraw A small "painf type program with lines, boxes, etc. gad John Draper's Gadget tutorial program gfxmem Graphical memory usage display program halfbrite demonstrates "Extra-Half-Brite" mode, if you have it hello simple window demo latffp r' accessing the Motorola Fast Floating Point I IbraryfromC palette Sample program for
designing color palettes.
Trackdisk Demonstrates use of the trackdisk driver, requesters John Draper's requester tutorial and example program, speech Sample speech demo program. Stripped down "speechtoy”.
Speechtoy Another speech demo program.
Fred Fish Disk 2: alb Object module Ibrarian.
Cc Unix-like frontend for Lattice C compiler, dbug Macro based C debugging package.
Machine independent make Subset of Unix make command.
Make2 Another make subset command, microemacs Small version of emacs editor, with macros, no extensions portar Portable file archiver, xrf DECUS C cross reference utility.
Fred Fish Disk 3; gothic Gothic font banner printer, roff A "raff type text formatter, ff A very fast text formatter cforth A highly portable forth implementation. Lots of goodies.
Xlisp Xlisp 1A, not working correctly.
Effiri.Fffli.Dteh.4i banner Prints horizontal banner bgrep A Boyer-Moore grep-like utility bison CNU Unix replacement 'yacc not working, bm Another Boyer-Moore grep-like utility grep DECUS grep kermit simple portable Kermit with no connect mode.
MyCLI Replacement CLI for the Amiga. Version 1.0 mandel A Mandelbrot set program, by Robert French and RJ Mica) Fred Fish Disk S: cons Console device demo program with supporting macro routines, free map Creates a visual diagram of free memory input.dev sample input handler, traps key or mouse events joystick Shows how to set up the gameport device as a joystick.
Keyboard demonstrates direct communications with the keyboard, layers Shows use of the layers Ibrary mandebrot IFF Mandebrot program mouse hooks up mouse to right joystick port one.window console window demo parallel Demonstrates access to the parallel port, printer opening and using the printer, does a screen dump, not working print.support Printer support routines, not working, proctest sample process creation code, not working region demos split drawing regions samplefont sample font with info on creating your own serial Demos the serial port singlePlayfield Creates 320 x 200 playfield
speechtoy latest version of cute speech demo speech.demo simplified version of speechtoy, with IO requests text.demo displays available fonts timer demos timer.device use trackdisk demos trakcdisk driver Fred Ffch.PfrK-fo compress like Unix compress, a file squeezer dadc analog dock impersonator microemacs upgraded version of microemacs from disk 2 mult removes multiple occuring lines in files scales demos using sound and audio functions setparallel Allows changing parallel port parameters setserial Allows changing serial port parameters, sortc quicksort based sort program, in C stripe Strips
comments and extra whitespace from C source Fred Fish Disk 7; This disk contains the executables of the game Hack, version 1.0.1. Fred Fifth Pifth ft This disk contains the C source to Hack on disk 7.
Fred Fish Disk 9: moire Draws moire patterns in black and white MVP-FORTH Mountain View Press Forth, version
1. 00.03A. A shareware version d FORTH from Fantasia Systems,
proff a more powerful text formatting program setlaoe Program
to toggle interlace mode on and off.
Skewb a rubic's cube type demo sparks moving snake Graphics demo Fued Fish Disk 10: oonquest An interstellar adventure simulation game dehex convert a hex file to binary filezap Patch program for any type d file, fixobj Strip garbage off Xmodem transferred files, iff Routines to read and write iff format files.
Id simple directory program Is Minimal UNIX Is, with Unix-stylewikJcarding, inC sq,usq file squeeze and unsqueeze trek73 Star Trek game yachtc Dice game.
Fred Fish PMM1; dpslide slide show program for displaying IFF images with miscellaneous pidures B .FtelLQMU2i amiga3d Shows a rotating 3 dimensional solid "Amiga sign".
ArgoTerm a terminal emulator program, written in assembler arrow3d Shows a rotating 3 dimensional wire frame arrow.
Id4 directory listing program IconExec SetWindow two programs for launching programs from Workbench that presently only work under
SetAltemate Makes an icon show a second image when clicked once StarTerm terminal emulator, with ASCII Xmodem, dialer, more.
Fred Fish Disk 13: A Bundle of Basic programs, induding: Jpad toybox ezspeak mandlebrot xmodem 3dsdids addbook algebra ror amgseql amiga-copy band bounce box brickout canvas cardfi circle colordrdes Copy cubes 1 cutpaste date dogstar dragon draw dynamictriangle Eliza ezterm filibuster fractal fscape gomoku dart haiku hal9000 halley hauntedM hidden join loz mandel menu minipaint mouse Orthelk) patch pena pinwheel gbox random-circles Readme rgb rgbtest Rord sabotage salestalk shades shapes shuttle sketchpad , . Spaceart speakspeach speecheasy spell sphere spiral striper superpad suprshr talk
terminal termtest tom topography triangle wheels xenos xmostriper (note: some programs are Abasic, most are Amigabasic, and some programs are presented in both languages) Find Fish Disk 14; amiga3d update of 12, indudes C source to a full hidden surface removal and 3D graphics beep Source for a function that generates a beep sound fex extracts text from within C source files dimensions demonstrates N dimensional graphics filezap update of disk 10, a file patch utility gfxmem_update of disk 1, graphic memory usage indicator gi oonverts IFF brush files to Image struct, in C text.
Pdterm simple ANSIVT100 terminal emulator, in 80 x 25 screen shell simple Unix 'csh1 style shell termcap mostly Unix compatible 'termcap' inplementation.
Fred Fifth Dirt IS; Blobs graphics demo, like Unix ‘worms' Clock simple digital dock program for the title bar Dazzle An eight-fold symmetry dazzler program.
Really prettyl Fish double buffered sequence cyde animation of afish Monopoly A really nice monopoly game written in AbasiC.
OkidataDump Okkfata ML92 driver and WorkBench screen dump program.
Polydraw A drawing program written in AbasiC.
Polyfractals A fractal program written in AbasiC.
Fred Fish Plofc 16; A complete copy of the latest developer IFF disk Fred Fifth Disk 17; The NewTek Digi-View video digitizer HAM demo disk Fred Fish Disk 18: AmigaDisplay dumb terminal program with bell, selectable fonts Ash Prerelease C Shell-like shell program, history, loops, etc. Browser wanders a file tree, displays files, all with the mouse MC68010 docs on upgrading your Amiga to use a 68010 Multidim rotate an N dimensional cube with a joystick PigLatin SAY command that talks in Pig Latin Scrimper Screen image printer Xlispl .6 source, docs, and executable for a Lisp interpreter.
Fred Fish Disk 19: Blackjack text-oriented blackjack game JayM inerSlides Slides by Jay M iner, Amiga graphics chip designer, showing flowchart of the Amiga internals, in 640 x 400.
Keymap_Test test program to test the keymapping routines LockMon Find unclosed file locks, for programs that don't dean up.
Fred Ftoh DI»K 20: AmigaToAtari converts Amiga object oode to Atari format DiskSalv program to reoover files from a trashed AmigaDOS disk.
Hash example of the AmigaDOS disk hashing function Hd Hex dunp utility ala Computer Language magazine, April 86 MandelBrots Mandelbrot contest winners MultiTasking Tutorial and examples for Exec level multitasking Pack strips whitespace from C source PortHandler sample Port-Handier program that performs.
Shows BCPL environment dues.
Random Random number generator in asserrbiy, for Cor assembler.
SetMouse2 sets mouse port to right or left port SpeechTerm terminal emulator with speech capabilities, Xmodem TxEd Demo editor from Microsmiths Charlie Heath Fred Fish Disk 21 This is a copy of Thomas Wilcox's Mandebrot Set Explorer disk. Verygoodl Ettti.Ffrh m n This disk contains two new "strains" of microemacs.
Lemacs version 3.6 by Daniel Lawrence. For Unix V7, BSD 42, Amiga, MS-DOS, VMS. Uses Amiga fundion keys, status line, execute, startupfiles, more.
Pemacs By Andy Poggio. New features indude ALT keys as Meta keys, mouse support, higher priority, backup files, word wrap, function keys.
Fred Fish Disk 23 Disk of source for MicroEmacs, several versions for most popular operating systems on micros and mainframes. For people who want to port MicroEmacs to their favorite machina Fred Fish Disk 24; Conques interstaller adventure simulation game Csh update to shell on Disk 14, with built in commands,named variables, substitution.
Modula-2 A pre-release version of the single pass Modula-2 conpiler originally developed for Macintosh at ETHZ. This code was transmitted to the AMIGA and is executed on the AMIGA using a spedal loader. Binary only.
Fred Fish Disk 25 Graphic Hack A graphic version of the game on disks 7 and 8 Fred Fifth Dish 2S This is the graphics-oriented Hack game by John Toebes.
Only the executable is present.
Fred Fish Disk 26 UnHunk Processes the Amiga "hunk" loadfiles.
Cdlect code, data, and bss hunks together, allows individual specificatio of code, data, and bss origins, and generates binary file with format reminiscent of Unix "a.out" format.
The output file can be easily processed by a separate program to produce Motorola "S- reoords" suitable for downloading to PROM programmer. By Eric Black.
C-kermit Port of the Kermit file transfer program and server.
Ps Display and set prooess priorities Archx Yet another program for bundling up text files and mailing or posting them as a single file unit Fred.ElfltLBlftH2Z Abdemos Amiga Basic demos from Carolyn Scheppner.
NewConvertFD creates .bmaps from fd files.
BitPlanes finds addresses of and writes to bKpianes of the screen's bitmap.
AbouIBMaps A tutorial on creation and use of bmaps.
LoadlLBM loads and displays IFF ILBM pics.
LoadACBM loads and displays ACBM pics.
ScreenPrint creates a demo screen and dumps it to a graphic printer.
Disassem Simple 68000 disassembler. Reads standard Amiga object files and disassembles the oode sections. Data sections are dumped in hex. The actual disassember routines are set up to be callable from a user program so instructions in memory can be disassembled dynAMIGAlly.
By Bill Rogers.
DvorakKeymap Example of a keymap structure for the Dvorak keyboard layout. Untested but included because assembly examples are few and far between. By Robert Bums of C-A.
Hypocydoids Spirograph, from Feb. 84 Byte.
LinesDemo Example of proportional gadgets to scroll a SuperBHMap.
MemExpansion Schematics and directions for building your own homebrew 1 Mb memory expansion, by Michael Fellinger.
SafeMalioc Program to debug 'mallocO' calls SdenceDemos Convert Julian to solar and sidereal time, stellar positions and radial velocity epoch calculations and Galilean satellite plotter.
By David Eagle.
Ered Fifth DlftK 29 Abasic games by David Addison: Backgammon, Cribbage, Milestone, and Othello Cpp DECUS'cpp'C preprocessor, and a modified 'oc* that knows about the'cpp', for Manx C. Shar Unix-oompalfcJe shell archiver, for packing files for travel.
SuperBHMap Example of using a ScrollLayer, syncing SuperBKMaps for printing, and creating dummy RastPorts.
JEEsAfLftlUM» AegisDraw Demo Demo program without save and no docs.
Animator Demo Player for Aegis Animator files Cc Unix-like front-end for Manx C. Enough Tests for existanoe of system resources, files, devioes. ¦ Rubik Animated Rubiks cube program StringLb Public domain Unix string library functions.
Vt100 VT-100 terminal emulator with Kermit and Xmodem pro1000b Fred Fish Disk 30 Several shareware programs. The authors request a donation if you find their program useful, so they can write more software.
BBS an Amiga Basic BBS by Ewan Grantham FineArt Amiga art FontEditor edit fonts, by Tim Robinson MenuEditor Create menus, save them as C source, by David Pehrson StarTerm3.0 Very nice telecommunications by Jim Nangano (Fred Fish Disk 30 is free when ordered with at least three other disks from the collection.)
Fj&flfteb-Dtoliai Life Life game, uses blitter to do 19.8 generations a second.
Mandelbrot Version 3.0 of Robert French's program.
MxExample Mutual exclusion gadget example.
RamSpeed Measure relative RAM speed, chip and fast.
Set Replacement for the Manx "set" command for environment variables, with improvements.
Tree Draws a recursive tree, green leafy type, not files.
TxEd Crippled demo version of Microsmith's text editor, TxEd.
Vdraw Full-featured drawing program by Stephen Vermeulen.
Xicon Invokes CLI scripts from icon Tioon Displays text files from an icon.
Bsdffeh Dish 32 Address Extended address book written in AmigaBasic.
Calendar Calendar diary program written in AmigaBasic.
DosPlusI First volume of CLI oriented tools for developers.
DosPlus2 Second volume of CLI oriented tools for developers.
Executables only: Mac View Views MacPaint pictures in Amiga low or high res, no sample pictures, by Scott Evemden.
Puzzle Simulation of puzzle with moving square tiles.
ShowHAM View HAM pictures from CLI.
Solitaire AbasiC games of Canfield and Klondike, from David Addison.
Spin3 Graphics demo of spinning cubes, double- buffered example.
Sword Sword of Fallen Angel text adventure game written in Amiga Basic.
Trails Leaves a trail behind mouse, in Modula-2 Ecsri-BahJDIffK a 3dstars 3d version of the "stars" program below.
Big map Low-level graphics exarrple scrolls bitmap with ScrollVPoft.
Dbuf.geb Double-buffered animation example for BOBsandVSprites.
DiskMapper Displays sector allocation of floppy disks.
MemView View memory in real time, move with joystick.
Oing Bouncing balls demo Sproing Oing, with sound effects.
ScreenDump Dumps highest screen or window to the printer.
Sdb Simple database program from a DECUS tape.
Stars Star field demo, like Star Trek.
TermPlus Terminal program with capture, library, function keys, Xmodem, CIS-B protocols.
Vt100 Version 2.0 of Dave Wecker's VT-100 emulator, with scripts and function keys.
Fred Fish Disk 24 Alint Support files for Ginrpel's'iinf syntax checker Blink PD 'alink' compatible linker, faster, better.
Browser Updated to FF18 browser', in Manx, with scroll bars, bug fixes.
Btree b-tree data structure examples Btree2 Another version of btree' Calendar Appointment calendar with alarm.
Less File viewer, searching, position by percent, line nurriber.
NewFonts Set cl 28 new Amiga fonts from Bill Fischer Pr Background print utility, style options, wildcards.
Requester Deluxe Paint-type file requester, with sample.
Fred Fish Fred Fish Disk 35 AsendPacket C example of making asynchronous I O calls to a DOS handler, written by C-A ConsoieWindow C example of getting the Intuition pointer a CON: or RAW: window, for 1.2, by C-A.
DirUti) Walk the directory tree, do CLI operations from menus DirUtil2 Another variant of Dirutil.
File Requester Lattice C file requester module, with demo driver, from Charlie Heath.
MacView Views MacPaint pictures in Amiga low or high res, with sample pictures, by Scott Evemden.
Plop Simple IFF reader program PopCLI Sidekick-style program invokes a new CLI, with automatic screen blanking.
QuickCopy Devenport disk copiers duplicate copyprotected disks.
ScrdlPf Dual playfiekf example, from C-A, shows 400 x 300 x 2 bit plane playfiekf on a 320 x 200 x 2 plane deep playfiekf.
SendPacket General purpose subroutine to send AmigaDos packets.
SpriteMaker Sprite editor, can save work as C data structure. Shareware by Ray Larson.
Tracker Converts any disk into files, for electronic transmission. Preserves entire file structure.
Shareware by Brad Wilson.
TriClops 3-D space invasion game, formerly commercial, now public domain. From Geodesic Publications.
Tsize Print total size of all files in subdirectories.
Unlfdef C preprocessor to remove given ifdefd sections of afile, leaving the rest alone. By Dave Yost.
Vttest VT-100 emulation test program. Requires a Unix system.
Fred Fish Disk 36 Acp Unix-like 'cp' copy program Clock Updated version of clock on disk 15.
Csh Manx ’csh'-like CLI, history, variables, etc. DietAid Diet planning aid organizes recipes, calories Echo Improved 'echo' command with color, cursor addressing FixHunk Fixs programs to let them run in external memory.
Fm Maps the sectors a file uses on the disk.
KickBench Docs, program to make a single disk that works like a Kickstart and Workbench.
Lex Computes Fog, Flesch, and Kincaid readability of text files.
Tunnel Vision David Addison Abasic 3D maze perspective game.
Vc Visicalo-like spreadsheet calculator program.
Vt100 Version 2.2 of Dave Wecker's telecom program YaBoing Oingl style game program shows sprite collision detects Fred Hah Disk 37 This disk is a port of Timothy Budd's Little Smalltalk system, done by Bill Kinnersley at Washington State University.
Fred Fish Disk 38 Csquared Sep 86 Sd American, Circle Squared algorithm FixObj Strips garbage off Xmodem transfered object files Handler AmigaDOS handler (device) example from C-A Hp-10c Mimics a HP-10C calculator, written in Modula-2 IFFEnoode Saves the screen as an IFF file IffDump Durrps info about an IFF file Jsh BDS C-like CLI shed NewStat STATUS-like program, shows priority, prooesses Reversi Game of Reversi, version 6.1 Uudeoode Translate binary files to text, Unix-like programs Vdraw Drawing program, version 1.14 VoiceFiler DX MIDI synthesizer voice filer program Window Example of
creating a DOS window on a custom screen Fred Fish Disk 39 AnsiEcho 'echo', touch', 'list', 'ds' written in assembler.
Display Displays HAM images from a ray-tracing program, with example pictures.
Driver Example device driver source, acts like RAM: disk Xlisp Xusp 1.7, executable only Fred Rah DisK4fl Ahost Terminal emulator with Xmodem, Kermit and CIS B protocols, function keys, scripts, RLE graphics and conference mode.
AmigaMonitor DynAMIGAlly displays the machine state, such as open files, active tasks, resources, device states, interrupts, Ibraries, ports, etc. Arc Popular file compression system, the standard for transiting files AreaCode Program that decodes area codes into state and locality.
Blink 'alink! Replacement linker, version 6.5 Cosmo An 'asteriods' done.
Dg210 Data General D-210 Terminal emulator DirUtil_Windowed DOS interface program, version DOSHelper Windowed AmigaDOS CLI help program PagePrint Prints text files with headers, page breaks, line numbers PopCLI Starts a new CLI with a single keystroke, from any program, With a screen-saver feature.
Version 2, with source.
SpriteEd Sprite Editor edits two sprites at a time X-Spell Spelling checker allows edits to files FF 41 AmigaVenture Create your own text adventure programs in AmigaBasic.
Csh Version 2.03 of Dillon's Csh-liks shell.
Executable only Dbug Macro based C debugging package, update to FF 2 DuaiPlayFieid example from CBM, update to Intuition manual GetFile Heath's file requester, with source LatXref Cross reference of Lattice 3.10 header files Lines Line drawing demo program SetFont Changes font used in a CLI window Vt100 Version 2.3 of the VT-100 terminal program.
FF42 This disk contains an Amiga version of MicroGNUEmacs.
FF43 BasicBdng AmigaBasic program demos page flipping of a 3D cube Bbm Demo copy of B.E.S.T. Business Management System.
BbsList A list of Amiga Bulletin Board Systems Co C compiler front ends for Manx and Lattice C Copper A hardware copper list disassembler InstlFF Converts Instruments demo sounds to IFF sampled sounds PopColours Adjust RGB colors of any screen SpriteCbck Simple dock is displayed on a sprite above all screens ST Emulator Non-serious Atari ST emulator Wbrun Lets Workbench programs be run from the CLI Wild Two Unix shell style wildcard matching routines FF44 icons Miscellaneous icons NewlFF New IFF material from CBM for sampled voioeand music files RayTracePics The famous ray-tradng pictures,
from FF 39, now converted to IFF HAM format for "much* faster viewinc.
ViewlLBM Displays normal and HAM ILBM files FF4S Clue Clue board game Maks Another 'make', with more features Pictures Miscellaneous pictures Update Updates an dder disk with newer files from another disk Where Is Searches a disk for files of given name FF46 Asm Shareware 68010 macro assembler, ROM Kemal Manual compatible CheckModem 'execute1 file program detects presence of modem Egad Gadget editor from the Programmers Network Jive Transforms a file from English to Jive.
My.lib A binary only oopy of Matt's alternate runtime Ibrary. Author: Matt Dillon ProffMacros Subset Berkeley 'ms' and 'mm' macros for •proff’ ValSpeak Transforms a file from English to Valley FF47 3D-Arm Simulation of a robotic arm, very good graphics, teaching tod, induding C source.
Eric Graham's stunning HAM animation of a robot juggler Juggler VT-100 Version 24 of Dave Wecker's terminal emulator, with Xmodem and Kermit file transfer protocols FF46 Bru Comm Csh Alpha version of a hard disk file archiver Version 1.30 of a terminal emulator with phone directories Version 2.04 of Matt Dillion's Unix 'csh'-like CLI replacement, induding Lattice and Manx Diskperf Amiga Du Mem Watch low HyperBase TarSplit Uuenoode EL2 Hanoi Ispell Ing Lav MIDIToois MoreRows Tilt MemClear NewZAP RainBow SMUS Players View Wbdump Profiler FF 49 Cycloids 27 DirUtil MuKiDef MyUpdate Plot Polygon
Qmouse pressed.
FF 55 Csh Touch NewStartups Astartup.asm TWSt art up. Asm Trees program FF 50 Asm Palette PipeDevice ScreenSave Shanghai Demo SoundExample Vsprites Vt100 FF 56 ClipBoard ConPackets GetDisks GetVolume loon2C MergeMem rnCAD EL5Z CutAndPaste Graphlt Juggler MouseReader Ogre Splines FF 58 ASDG-rrd Big View Egraph startup BreakOut DiskZap FirstSilicon and Missile sound, PerfectSound Sizzlers UnixArc machines, Worrbat FF 51 Bison 4 Compress Cos AmigaBasic DifSsed Sq, Usq FFS2 Assign Fractal Poly, HAMPoly polygons MxGads Tek4010 Vdraw FF 53 Animations ARCre ARP Compiler Spreadsheet C source Disk
benchmark program for Unix and Computes disk storage of a file or directory Program to watch for programs that trash memory. It attempts to repair the damage, and puts up a requester to inform you of the damage. From the Software Distillery.
A realtime execution profiler for Manx C programs. Includes C source.
Update of electronic spirograph from disk Enhanced version of DirUtil from disk 35 Scans a set of object modules and Ibraries searching for multiply defined symbols Disk update utility with options for stripping comments from C header files, and interactive verification of the updating process Computes and displays 3 dimensional functions in hires Moire type pattern generator with color cycling Queries whether a mouse button is This can give a return code that can customize a startup-sequence based on whether a mouse button was pressed.
Example of setting the datestamp on a file, using a new technique from Commodore- Amiga More extensive version of the trees on Disk 31 Version 1.1 of a shareware 68000 macro assembler, compatible with the Metaoomco assembler. This includes an example module and more Motorola mneumonics.
A brick breakout game, uses 3-D glasses Version 1.1 of a program to edit disks and binary files A smart CLI replacement with full editing recall of previous commands A Missile Command-type game, with in assembler Sound editor for a low-cost sound digitizer Graphics demos Version of 'arc1 for Unix System V inC Version 3.01 of Dave Warke s terminal emulator GNU for Unix Vacc', working update to disk version Update to the file compression program on Disk 6 "Wheel of Fortune"-type game in Unix-like *d«f and 'ssed' for finding the differences between two files, and then recreating the other, given
one file, and the list of differences.
Portable versions of the CP M squeeze and unsqueeze Replacement for AmigaDOS 'assign' command inC Makes random fractal terrains Workbench-type demos for making in lores and HAM Example of mutual exclusion gadgets with GadgetText Tektronix 4010 terminal emulator Versions 1.16 and 1.19 of a Deluxe Paint-like drawing program Demo animations with player program for Aegis Animator Creates rename scripts for files with long names, so they can be easily 'arc'ed and un'arc'ed.
Preliminary AmigaDOS replacements for 'break', 'cd', 'chmod', 'echo', 'filenote' and 'makedir* Not fully ported to the Amiga, this is a 66000 C compiler. Kwil produce simple assembly language output, but needs a lot of work.
Update with source of the 'vc' spreadsheet on disk 36 Port of program to split Unix tar* archives Utiltiies to encode and decode binary files for ASCII transmission, expanding them by 35 percent Solves Towers of Hanoi Problem in it’s own Workbench window, by Ali Ozer Port of a Unix screen oriented, interactive spelling checker. (Expansion RAM required) by Pace Willisson A Screen of lots of bouncing little windows by Leo 'Bols Ewhac' Schwab Displays number of tasks in run queue, averaged over last 1,5, and 15 minute periods, by Willaim Rucklidge Programs to play record through the MIDI l F.
By Fred Cassirer Program to make the WorkBench Screen larger than normal, by Neil Katin and Jim Mackraz Program to make your Amiga look like it didn't pass vibration testing, by Leo 'Bols Ewhac' Schwab V2.05 of Matt Dillon's csh like shell (Modified for Manx C). By Matt Dillon, Modified by Steve Drew New C Startup modules: with 1.2 fixes and better quote handling.
Opens a stdb window, using user specs.
By Commodore, posted to BIX by Carolyn Schepper Change another program's screen colors, by Carolyn Schepper Allows the standard output of one process to be fed to the standard input of another, by Matt Dillon Save a normal or HAM mode screen as an IFF file, by Carolyn Schepper Demo version of the Activision game Shanghai.
A double buffered sound exanple for Manx
C. by Jim Good now A working vsprite example, by Eric Cotton V2.6
of Dave's Vt100 terminal emulator with kermit and xmcxtem. By
Dave Wecker Clipboard devioe interface routines, to provide a
standard interface, by Andy Finkle Demos the use of DOS
Packets, ConUnit, etc. by Carolyn Schepper Program to find all
available disk device names and return them as an exec list,
by Philip Lindsay Program to get volume name of the volume
that a given file resides on. By Chuck McManis Reads an ioon
file and writes out a fragment of C code with the icon data
structures, by Carolyn Schepper Program to merge the MemList
entries of sequentially configured RAM boards, by Carolyn
Schepper An object oriented drawing program, V1.1 by Tim
Mooney Implementaions of Unix cut and paste commands, by John
Weald Progran to plot simple functions in 2 or 3 dimensions,
by Flynn Fishman V12 of robot juggler animation. Uses HAM mode
and ray tracing, by Eric Graham Shareware program to read text
files and view IFF files using only the mouse, by William Betz
Game of tactical ground combat in the year
2086. By Michael Caplinger; Amiga port by Hobie Orris Program to
demonstrate curve fitting and rendering techniques, by
Helene (Lee) Taran Extremely useful shareware recoverable
ram disk, by Perry Kivolowitz Displays any IFF picture,
independent of the physical display size, using hardware
scroll, by John Hodgson Reads pairs of x and y value from a
list of files and draws a formatted graph, by Amazing
Computing™ subscribers $ 6.00 per disk.
Non subscribers ..$ 7.00 per disk This is extremely reasonable for disks with almost 800K of information and programs. If you agree, please send check or money order to: PiM Publications Inc.
P. O. Box 869 Fall River, MA 02722 AH Checks must bo in US funds
drawn on o US Bank Please allow 4 to 6 weeks for delivery
Amazing Computing™: Your resource to the Commodore Amiga
Amazing Computing™ has vowed, from our beginning, to amass the
largcsr selection of Public Domain Software in the Amiga
Community, and with the help of John Foust and Fred Fish, we
see a great selection of software for both beginners and
advanced users.
These Public Domain software pieces are presented by a world of authors who discovered something fun or interesting on the Amiga and then placed their discoveries in the Public Domain for all to enjoy. You are encouraged to copy and share these disks and programs with your friends, customers and fellow user group members!
The disk are vety affordable!
Laureneoe Turner Shareware data management system.
V1.5 Walks through the free memory lists, zeroing free memory along the way. By John Hodgson A third-generation multi-purpose file sector editing utility. V3.0 by John Hodgeson A Maurauder-Style rainbow generator, by John Hodgson Two SMUS plays, to play SMUS IFF music formatted files, by John Hodgson A tiny ILBM viewer by John Hodgson JX-80 optimized workbench printer that does not use DumpRPort by John Hodgson In fonclwton To the best of our knowledge, the materials in this library are freely distributable. This means they were either publicly posted and placed in the Public Domain by their
Author, or they have restrictions published in their files to which we have adhered. If you become aware of any violation of the author's wishes, please contact us by mail.
Need AMIGA Software?
'iry Tiki® Ipontt Please see page 65 for order form.
To Be Continued... »AC« THE Index of Advertisers Simulator Now play BLACKJACK on your AMIGA just as if you were in Nevada. Deals up to nine players using up to nine decks. This program actually analyzes and reports on your progress during the game so you can mathematically build your own system of betting and winning. Doubles and splits up to four pairs while playing all nine hands on the screen at the same time. This program is easy enough for children to play and is ideal for helping them with their addition. $ 24.95 POKER Your AMIGA will play the roll of up to four saloon card sharks who
are after all your money. Playing against these four will truly get you warmed up for a real game of Poker. Call your game when your time comes around to deal. $ CALL SOLITAIRE is easy to play when you have a mouse to move all the rows of cards around and a computer to organize them for you. Only one problem with this program, it won’t let you cheat. $ 14.95 All programs require 512K and have built-in instructions that you can recall at anytime during operation.
Free shipping in the U.S. Dealer inquiries invited.
Send check or money order to: 4574 Linda Vista Boise, ID 83704 THE SOFTWARE FACTORY (208) 322-4958 Amiga is a trademark of Commodore-Amiga, Inc. AMIGA T-SHIRTS AND SWEATSHIRTS!
Quality white shirts silk screened with the Amiga logo in beautiful color ORDER YOURS TODAY!
Sizes: Small, Medium, Large, X-Large Prices: T-shirts: $ 12.00 Sweatshirts: $ 18.50 Also available: Amiga Stickers $ 1.50 (Great for car bumper, window, notebook, etc. Black & White) All prices include shipping and handling. In CA, add 6% tax.
SEND CHECK OR MONEY ORDER TO: T’s Me, RO. Box 11746, Santa Ana, CA 92711 2525 Shadow Lake, Santa Ana, CA 92701 Allow 3-6 Dealer Inquiries Invited: Call (714) 639-6545 weeks for Amiga is a registered trademark of Commodore-Amiga, Inc. delivery.
Adionware 47 Akron Systems 26 Alohafonts 30 Ami Expo 55 AMIGA Business Computers 16 Aminetics 54 Applied Visions A1 ASDG 45 Associated Computer Services 23 Byte by Byte CM Cltd. Al Cardinal Software 70,71 Central Coast Software 83 Century Systems 58 Comp-U-Save 39 Creative Solutions 81 Digi Pix 46 Discovery Software All Expansion Technologies 31 Felsina Software 53 Hilton Android Corporation 59 Impulse 48,49 Jefferson Enterprises 87 Lattice 5 Kent Engineering & Design 43 KJ Computers 84 Magic Circle Software 35 Memory Location, The 56 Meridian Software Bll Metadigm, Inc. 1 Michigan Software 22
MicroSearch Clll Microbotics 7 MicroSmiths, Inc. 77 Mimetics 10 NewTek Bl Phase Four Software Distributers 22 PiM Publications, Inc. 64,65 R & S Data Systems 89 Seven Seas Software 43 Software Fadory, The 96 Speech Systems 25 Spirit Technology 15 TsMe 96 T&L Enterprises 13 The Other Guys 8 TDI Software Inc. 33 True-lmage 29 Westcom Industries 50 Support the Amiga™ & Amazing Computing™, Write!
Your thoughts, experiences, and programs are needed by others. For an Author's guide, write to: Author's Guide, PiM Publications, Inc., P.O.Box 869, Fall River, MA. 02722.
AM £?0rtJ2. The 4096 Color Paint Program for the Amiga From the creators of Digi-View comes Digi-Paint, the first paint program to take full advantage of the Amiga’s exclusive “hold-and-modify” mode. No longer are you limited to 32 colors. With Digi-Paint, you can use all 4096 colors on screen simultaneously. Features include brushes, smooth shading, magnify, cut & paste, output to printer, and full IFF load and save. Digi-Paint was programmed completely in assembly language for the fastest possible response. Give your Amiga the graphics power of systems costing thousands of dollars more.
See your Amiga dealer today or call toll-free for Digi-Paint, the 4096 color paint program.
$ 59.95 Only Orders Only (800) 358-3079 ext. 342 Customer Service (913) 354-9332 NawTsK INCORPORATED 701 Jackson • Suite 133 • Topeka, KS • 6660 Amiga is a trademark of Commodore-Amiga, Inc. Digi-Paint and Digi-View are trademarks of Newtek. Inc. DeluxePaint is a trademark of Electronic Arts. Inc. © 1986 Newtek. Inc. An Inventive Approach To Practical jS| Reality J |ii W you just have to take into your own hands. Or More than once, a brainstorm lias turned into a shower of practical reality. To rhe skeptic, the truth can he shocking; Sometimes matters A Well, now you can start your AMIGA
flying high with the dynamic, new ZING!
Utility programs from MERIDIAN SOFTWARE, INC. ZING! Programs are the best program companions for the AMIGA on rhe market today. Separately, they are practical, yet dynamic working partners. Strung together. . .the sky’s rhe limit!
The High Point In Software Innovations SOFTWARE As the name implies, ZlNGlSpell is a rrognm which can detect misspelled words as you are typing them. A simple interlace allows you to cnrrccr a word, or add a word n.the dictionary. You'll never need to buy another spelling checker.
Can he used with xmhn ZING!
Components or alone. $ 49.95 SPELL Pteaso add £300 shipping and handing to each order The fastest and easiest way to work with the AMIGA. ZING! Is actually a collection of utility programs which, after installation, are invisible until called up by the user through the use of hot keys.
The main goal of ZING!, is to essentially eliminate the need to learn the operating system protocol andl cryptic commands.
Functions include: copying, editing, deleting, sorting, renaming, searching, reorganizing files, and much more! Shipping now for: $ 79.95 ZINGiKeys i4 a sophisticated, reprogrammable MACRO and Hot Key program* A program which can stand on its own, or be lied to ZING! You can tram ZINGiKeys to accomplish the most annoyingly repetitive tasks in a much easier fashion. Plus, ZINGiKeys allows you to retrieve commands and reuse them, as well as the ability to record mouse movements and use rhem with the press of a key. Shipping now for: $ 49.95 AMIGA is a registered trademark of
Commodore-AMIGA. Inc ZING!. ZINGiKeys and ZINGISpell are Irademarks of Meridian Software, Inc. All rights reserved.
Credit cards and dealer inquiries welcome.
Hip) MicroSearch DISCOVERIES "At MicroSearch, we listen to our customers ... carefully" City Desk Sets New Standards in Desktop Publishing MicroSearch is about to set the standard for desktop publishing for the Amiga with its NEW City Desk Desktop publishing program. City Desk was designed, with you in mind, to be an integrated package from the start, with the emphasis on exploiting the versatility and simplicity of the Amiga. Written by SunRize Industries of College Station, Texas, (the developers of the digital sound sampler Perfect Sound.
See below), the package will be available May 1,1987. The retail price for City Desk will be $ 149.95. Postscript compatability and kerning.
Naturally, City Desk will have postscript compatability and kerning. Since these are rapidly becoming the standard in the desktop publishing industry and because you want them, City Desk is written to include these two features from the start.
After loading the file. City Desk allows you to place the text or graphics anywhere on the page and easily enlarge, shrink, or crop the image or text by using the mouse.
Use other text and multiple fonts. City Desk will also allow you to load text from any of the Amiga word processors that are currently on the market. By using City Desk's powerful imbedded command codes and the Amiga's standard fonts, you can mix any number of different fonts to enhance your document! This lets you have unprecedented control of text fonts.
Sizes and styles.
Multiple pages and columns. With City Desk you can view multiple pages at one time and easily drag text and graphics from one page to another, as well as format any of those pages into as many columns as you feel are necessary. City Desk also lets you justify the text right, left, or center while it is in the column.
Laser printer compatability. City Desk lets you use the HP LaserJet+ for crisp typeset quality, or any other Preferences printer.
Integrate Graphics. With thegraphics integration feature. City Desk is designed with the sales and marketing professional in mind as well as the graphics art industry.
City Desk is ideal for making catalog updates and announcing price specials without messy cut and paste or the expense of typesetting. City Desk can be used by the graphics art professional for high quality page layout, highlighting easily with lines and boxes you draw yourself.
Perfect Sound Records in Stereo IFF file transfer for photographs. Integrating graphics is made possible by use of the industry standard IFF file format in the program. This allows you to use any file in IFF brush format, even digitized photographs or the included library of clip art. To get your message across.
MicroSearch has the Perfect Solution for stereo recording of digitized sounds.
Perfect Sound! Other digital sound samplers can record only one channel at a time.
Perfect Sound can record in true stereo simultaneously. Because of the popularity of this feature, there are over five thousand Perfect Sounds in use today.
SunRize Industries came up with the idea and they were able to successfully produce the finished product. Now you can flip, graph, insert or delete recorded sounds.
Other capabilities allow you to create IFF instruments and change playback or record speeds. Perfect Sound comes with the “C” source code and a library of recorded sounds. Perfect Sound retails for $ 89.95. MicroSearch, Inc. 9896 Southwest Freeway Houston, Texas 77074
(713) 988-2818 There's a slim difference between the ordinary and
the extraordinary... PAL JR.
‘T'rV’V ¦'t .-V
• I Mbyte fast expansion RAM atCOOOOO
• No wait states ,'.(v
• 20 Mbyte hard disk drive
• True DMA controller with SCSI option
• Battery backed clock calendar
• Open Zorro expansion slot
• Low profile, AMIGA-beige case
• User expandable to 9 Mbytes RAM
• Entire system auto-configures
• Suggested retail price $ 1,495.00 2 Mbyte RAM CARD
• High speed memory board
• No wait states during access or refresh
• Incorporates SIMM technology
• User upgradable to 8 Mbytes BYTE bu BYTE.. (OtniiAitcis
Arboretum Plaza II 9442 Capitol of Texas Highway North Suite
150 Austin, TX 78759 (512) 343-4357 1 Load a sound into memory
SoundNameS = ,,SoundFiles “+SoundName$ +CHR$ (0) Length* =
FSGetSizeS(SADD(SoundName$ )) IF LengthS=0 THEN PRINT "Not
Found":GOTO NoSound END IF MemTypes = 65538s:' (Chip Memory)
MemS = AllocMemS (Lengths, MemType&) IF MemS = 0 THEN PRINT
"Memory Full":GOTO NoSound END IF SndMemS (SndNum) =MemS
SndLengths(SndNum)“Lengths Rates =
FSLoadSoundS(SADD(SoundNameS),MemS) IF Rate& - 0 THEN PRINT
"Invalid Load":GOTO NoSound END IF SndPitchs(SndNum) =
INT(3579545s Rates) ' Note: Decreasing SndPitchs raises the 1
pitch of the sound produced RETURN 2 Validate character entered
IF DataType$ =,,CHAR" THEN IF x$ CHR$ (32) OR x$ CHR$ (127) THEN
(X$ CHR$ (48) OR x$ CHR$ (57)) AND (x$ ".") THEN BEEP:GOTO
Nxtchar END IF 3 ELSEIF DataType$ «“INT" THEN 4 Mouse moves and
crops graphics and text
• Mix any number of fonts
• Use Laser printer for typeset look
• Draw lines and boxes
• Clip art included

Click image to download PDF

Merci pour votre aide à l'agrandissement d'Amigaland.com !

Thanks for you help to extend Amigaland.com !




Today: 7
Yesterday: 75
This Week: 705
Last Week: 669
This Month: 2499
Last Month: 2931
Total: 63567

Information cookies

Cookies are short reports that are sent and stored on the hard drive of the user's computer through your browser when it connects to a web. Cookies can be used to collect and store user data while connected to provide you the requested services and sometimes tend not to keep. Cookies can be themselves or others.

There are several types of cookies:

  • Technical cookies that facilitate user navigation and use of the various options or services offered by the web as identify the session, allow access to certain areas, facilitate orders, purchases, filling out forms, registration, security, facilitating functionalities (videos, social networks, etc..).
  • Customization cookies that allow users to access services according to their preferences (language, browser, configuration, etc..).
  • Analytical cookies which allow anonymous analysis of the behavior of web users and allow to measure user activity and develop navigation profiles in order to improve the websites.

So when you access our website, in compliance with Article 22 of Law 34/2002 of the Information Society Services, in the analytical cookies treatment, we have requested your consent to their use. All of this is to improve our services. We use Google Analytics to collect anonymous statistical information such as the number of visitors to our site. Cookies added by Google Analytics are governed by the privacy policies of Google Analytics. If you want you can disable cookies from Google Analytics.

However, please note that you can enable or disable cookies by following the instructions of your browser.


Visite depuis
Visite depuis