FacebookTwitterGoogle Bookmarks

I was expecting a 5.25 drive ihat would work as a 360K IBM drive under the transformer and would also configure as a 440K drive under Amiga DOS 1.2. What I got was a 360K IBM drive under the transformer that would also configure as a 720K IBM drive under MS_DOS 3.2. That was exciting but this was Amazing. My new drive auto configures, with absolutely no help from rr.e, as an 8BOK Amiga drive under both Amiga DOS 1.1 and 1.2 Beta. The disk icon comes up on the workbench screen and everything. The operating systems seems to think it's a 3.5 inch drive. The only minor annoyance is that the system doesn't recognize disk changes in DF2: but DOS 1.2 Beta contains a new command called Diskchange which allows disk swapping in the 5.25 drive. The Commodore 5.25 needs the Diskchange command also but it will only format to 440K and can only be used as an Amiga drive under DOS 1.2. To prove that 1 really had BBOK available I used Diskcopy lo copy a Opaint slide show disk which was 95% full from DFO: to DF2:. Then I started the show and every picture displayed perfectly. Believe It Or Not! Thanks - AC- Joe Rothman Sysop of A.M.U.G. BBS for the Mighty Amiga New York Dear Mr. Hicks, I wish to discuss the subject of standards for Amiga software. There is appearing on the market an increasing number of software products for the Amiga, and many appear to be simply ported over from who knows where. I recently, purchased by mail a copy of Harvsoft's lnfobase. If functions basically as advertised, but it is definitely not something that takes advantage of the Amiga's capabilities. It's basically a simple file handling package written in AmigaBasic.

Click image to download PDF

Document sans nom P. O.Box 869 Fall River, MA. 02722 1-617-679-3109 Afc. u D*i»
Systems Command Computers Hunt! Vile Ekrrr-yum Ceorriu Future
S st*m ».'»chea' Cosncttn Augusta Ccca tJ' Drect Access
EdrrunKift Computer C 'ter Lansing Pontiic Ray Saoply Inc
So'Jwaro & Such G*er- Fa's Scova Uvh Compuiefs Pks lAi-ray
M. k! On Book* & Computers Madsen Software SouSi Inc Savannah
Ga. ii, Correctors Attn Pxk So-rtwdro City Forest H15» Yraetf
Mol a Pncto A Computoi Shop Mirtgomory TliO tJ S‘OTO Atlanta
G'otol Computer Ct-r'."
Orartjem Sortwaro Sjpetmartoit Kimmm, Hampton Universal Computer System M**« Mchgan Sof TAam No Star Tech Systems Mot-sen.i Color, Ltd Ifcya* CorrpuU'- House Inc hVi.»r 1 Conipuhir Shoo Wd. ed Tedrow Bus ness PioctoctL RothiT. tm Drtkovery F* is Church Anwni ComputfK West Hcnalj'u Pro Video Okomo* Ttic Working Compulrx Storv. iy B-ook Famry Computor Centre Tartan Phornu Piolesuon. il Computor Srstomn St Joseph Video Computor Corti* Ron» Virgmwi Mcra Systems W-yodhyidje Coppu'statc Business Systems Phn. nn Iowa Programs Un’.n.!i d Gr-md R.ipkh Wcrid Computers Inc HlChSkillo W itingKm APPLE CO GP Com
Sort Computers Ncr?i A. refcar D-gital Tronntools Tucson I ucson Cenl;ry S items
t. torc CcTpdV' App. ica9ors LTD Dos Mcym Marsha Rown Roiuvitle
Computer Store Sip D. sk Software Plus Wamon Matson Mm-jlit
Grand Rdpun Computers Etc j0im CciTputor Network Syracuse
Pie-Adrt* Renton Everett A lGSi S;S Inc Bite A-l Como tcr t
.livre Spociaats Computer Livor. id Computers Plus d Ct o
Upccr Sand j;k Computers. Ire Twxma i,* Home
t. arrpbi Trie Sertwarp Meuse Kadm-iioo Ea-thrie Micro Systems
Ccajmtus Mac Ago Coer outer S e Oci ew 'he Mero Shop Litre Bxk
Ye 0' Vi Corvewter Shoppe Ypsc.Ur.p EaTinso Mefo Systems
DcdA.1T Proghrrs Pius Sca". e P'TOtt Rctai Computer Cemv inc
Farrr. r glen M. P i Lanes Consumer Leefon cs Akron C*Me*nw
Boati Knows Comp.trg CP T Cer t. ry Computer Systems Chambers
Computer Supply Computer Ai: Computer Junclon Computer
Literacy Scornf-cp Computer Noos. Inc Bataw-a Charrpagn Park
NaperwHo N enrol Smng lApg Center CoAmtus YAKPni'a
n. -dAfKh l A H.ilr.i Studio City
P. ilo a;-a Sar U Ara Surnyvato Sir Derr act no 3A Comptters
Compu’cr R ». o'wton ComputerUnd 0 h»m Compu11iL»nde N-cs
lllini M ciocompv. ti'i% Inc 7 ho Memory Ei ran von Ur Kjurt
CCA'puV’r Indana Mnoe»ot Computpr O-thtirrs Comp„ti f Piacn
Cuinpulcr Specialties F|us 'Cornpu%-it. Ulc ‘ JMH SoftAare VCD
of H tt ng inc GnLmo Computtrs Fitj., —..!.!
Monhteto Eagan Maple Grave Hbtjmg Minnoton’na Mcrowam Mage North Coast Prog'amming Oua i*y Computix Apprcatom Qua ity Computer Appitcalois
S. stlin Computiw Center Sottw. i 'ii Cnnirn lnlcinalon. il
Solfwan; and Von.
Scttwa u Cenneci on FarVSd W lough*, Tocdo To«*do
S. ind'j' *, North Olniteri Cincinnati Mayfield Hts Cotartron
Computers Como.V Software; Cc-St Moms Computer Sottwaro
Shoppe Sound CroatiOAJ TMW Software Inc Rac-m Muauxoe Fond Cm
lac Madison Wausau Computerland rre m.;-: Fw.-vrnert B-r at
Con-Pute- Ce South Bend Sp*.*o.i sts If. l Hopk. rs Oklahoma
Compute Lard of Stso.ton Sroc tcr.
Rl VI3, — * Colena Video & Ccmputix Bartes.rte Cv'Tpo'. cr leVrvyif Competf r C-yrt*- FertWanc
V. syyjn SfK g'. cW PC’ ech Tu-Cd May. Compufesg Cer fee San
B-'u-'o Computer Ccyr Manoc Assoc i'wd Ccm-utc- Se- ces
Second Hand So*r**aro C k dhoni,1 Crt, K J Computers Lev’y
Gran.idJ In s H;’ ywtOd Computus Praprf? Ire G «*3 Chino,
M gan C-y B-andv Mart Computers Co.mp.ST CahCeptS Coumtu 1
Video Comp Inc ClSKTL 1-iAten Op Amp To;fi Boons Lot Ar7,.
:*o Computer Inc biSuinapd a instant R c'J, Ltd Chesltrtn. td
Cdo.im.is Com put* rs Eoavercn n»)gi'crcil Computer Ct’ Inc m
d)o£rrM Vort Ccn-futert LifJyertr Systems Plat Inctoperxtoxo
Cack.im.is Computers Clack. irn. il
r. os c«iip»* fs LOS Ar.ge*- CompuVcn Buonnss Systi. ms PorTd'ld
Software* Fust S-mta Rj-. i K»rv» Mthsmi Computron Business
T. g. vd Softa.I O PlJl C lnit Ms.gl.ts Data Bunk C xp Wich ta
Entorpnsus Unlimited Jackson 13 Computers Portland Tt — «
Computer Sloom Scotts V. l i y JAL EM'C.romcs LrtkXAl
Sc**A.ini Cen'nr Beaverton Tr ii Floppy Disx Ire Downey
McK.n«.is Computirs No a ton Uonluu Softa. vc Eipress Eugune
W. niw *. C.rcr Borkey
M. dAOTt Cc»T'Cui-r* Man hara r Appelgren Computer Syswms Groat
Falls Unversrty of On-gan Bookstore Eugene M7 L cctrcn. cs Them
trod Cer-futers rocc-a Nor.Cirt n?
Prinsvlvona Co do Kertyc*v TDS*Cemp.sro Aii'ch AfphdOhX-gj E5£ Warw- C ixf* CtajuiCcmpuX'S Colorate Sprrvji V C-'pAji Comp.tpr St: rc »eir;-on Carooro Edsc Computer S, items H*rmU Compute or Ptl, A t. -U C: mr..!„rr -r.« Dcryf- R'Mi'y V rMCcrrpul.-'S rg'cn Tn-id Coimputirs Data Gcf-quo Comp. tc-war Pitr-fcrurg Co*pjtenwerVs A fv-rt-i Compute* Rn: m
A. -s.i EastCo. vt ScMa. i'h Hers hey Computer Sfyop At.-Li
irtealCerrputc* Systems twrgi.-tr Dpwyrn f4o-Tt D»‘cll Fittsbj
gh Comp. kf Svke Pittsburgh Data Pro A r rt.1 Muro WoM
Ldki-WOOd Modern B.itird *.! M.» I,™ s Computer Assoriatc!
F. rgo The F toe home Bout «ai Nomitown Computor Step of Calgary
Atx.rta Sun Country Computers Codlwto f.pl rig!
&2tAa*r' Cnntor Iuleinjtenjl ’ •.1111' The Comp.liT Store V-.ct Tranj|t, CompLturs Inci, i-a I ho Sorts. i'o House A’b;rt. i iV'o •• I Dstriuto-s Ei cl«*Aix*j Software Mart lAiSum
ii. rxh. in Cut. pjtr. g A borts The Ccn fi. li*r C.r.ic Lalayelto
fJehrjjKd Rh«J? 'Siitod R«il D«mr Mao Systems Attorta
Cont’.efKut RL1LS EYE L rvtoln Intotnahendl Computer
Ss*nvic». s Johnstan kVrony Land A’t.irta Co -rr-ctrg Pcrnt
Georgetown Matsochusetis & uC. o E L ecL'oncs Oruitui McrO
Limits Sm h fit Id Computer King Puit rit CoiurrUi Mnemonics
Inc Cub Corrfxitor Ca-io-cvy.'
F. *y Com: nc Pijttsmo.tri Mdro L mrts
W. l-A os Cont Bntsh Coiumbd p"'s: ral Cenpu'er Center S: — A cn
Comoutrf.ind Leomir.ster NutCi British Coiurrbd Software
K-ngoom EastW-csor EU Vvj 1 Uw Ca Boston fkw, KiimptNre Sevih
Carolina ScnW BnfiVt Co'uTba Spi c.trun Ccmpjb-s
f..-A HJ.C*S Grjnera! CorrpuVir StOrst F'aTrg'am Ccmpu’O' f.'art
ct Mew Rjmpsh -? TidVhuJ
A. com hto-natona- Inc West Co'urt-
• » StrOx S'l’Ml Colurttad HCS Comouler Cfr.Jy Dk.«r». S*d
Computo-s Keene Horjpn Green S--c t S:"wac Bntsh CcdjTbj
[X wffr LCA V* -3 & Computer Cv fJt'A- Xl Cutis. in Ccerp.%» Era
M. nMa Caite V-doo
* ».¦-* an
t. Vro'y Locator vv» •, ffrstitacf Scsitft D»kptj Vicroenjrt
M. nteba ChrTr- Corrpr tors IcwkCt. r, farr ly Computer Ccn ms
Cr-ttof Ccmputtr Bjsitch Cen’ir Rap Ci*y Comp. lcrVi'uetd Ma
rmes Qwte Porvr-r ».'4»y Call f cyjpnmut A r.’K ist
f. vriy Computer Con he s GidgcAOOd J W A k. n Mivmrs A A
Cerr'f-uti.'S Tect) Comf».i!i-» Stj'i CamSrdgn West t.cwcn
Fam.'ly Computer Censes Sourti Orantgu KofeOlCk Mam m. cs B&cfc
Marts Orlanflo The B-t Ducket Far1, Ccmputug Cortros
R. kymood Tfp ixe Mr.icomp Commodore Computer Shop Ol-.V.S TycOm
P. trsti*- id Morns County Sldt criers ClitrsUir Com. putuet_ab of
Memphis Memphis Ark an Ontario Computer B. y Ponr'.ixl.i
Soltwam First Nashe. ie Crt.it.im Compjtot OnLviO Canute r
Image M-m.
MaryCne fr.*rr Mexoo Iuu CoTputortand Ontario Computer Terminal Ire 5-Uy.j Computer Cray 's Wtwaten Acaacry Computers AibuQ jerque Cams pec Ontario C imp. Ter Warn re
I. i-tec Com put* iWartd Oxan C.*y til’* Mcrpon CcmpuX S, stfn
Ai.prc oroo 3, to by Dyto
A. stn Electronics £COf Ontario C zr4 For.!
Vi P. l T E»'jJl Compuvscn V ucn Ctr Co'umba Page One ‘iswsta.'C Albuc jerq t C E M Ccrporabon s-arerj Hastings Data On taro Computers P-us So. tn Daytona
V. c-o Ccmpulx C*inter 5a •-mom Techr-cal Ccreepti Les Cn. es
Cotanidl Vo*o Houston The Computer Syo-u CrLiro Co •-•co ca
Inc Sitta*»r| SchAje Ad. an'aje Aotk y. ln CsmpuVT Ago Houston
TfyomhJ Cntar*5 Ed -aron Computers Dc la'-natuo The Leg eal
Choew Inc Ba'mc a Computer Age OoiJS SertAdro Co CuuU«
F. vt l, Comfufrrs Saraaou Waoorl Computer 'Aioyt Ckitjry *3 *rn
Las Vngas Com;u‘«T Mage Aust. n D -fon«; CoLve C TCt« Farm
Boc* Store
r..» resale Corrpuvi World Las Vegas Computer Rrvrtabons Hiusion
Morodata Oul'bes Coif Coast Computer £t*ct
P. nama C*y K nt Comp.V'l. md of C.vson Carson City Computer T. m«
Inc Marshal Irlo M.n.»T O-hwC Meg aped CcrTp.ter Cer! T Vmc«
Computir B. vn Damanvcor. i
* L *a K pian M -trppc itan Com; sutor" Rebar dear 1 La. a! M-cro
CkAbuc Maui Etc Aitamortc Spungs, Va cy Corrputrrs Album ffryr
f. rtcro Sta-ch Houston Vr. cn Tror.oje Quebec MSI Business System
Etrochayilu 'Amuse' f« a York Rogcncy Educat oral Sysknes
Dallas DiStr buticn ViS-pro Quebec film Arju F.tocSoncs St
Petefstu 8 Byto Shop Merr. ck Sol toi Watauga H-i r bow
Computer Center Orta ad.:
B. t »o Conputt'f C*Kiter Grand Rap. ds Castlir Computbf Ulthusm
Soffwaro Centro DaCas PtslMtytotf LB Canada fey Random Access
Computers Ire Ft Waitan Beach Bts-Byt'is N bbet PatOASife-y
CIA So’tAare Center Fluvhmg SofrtAS'O Lifer37 Vvtbh M Fa is
A', it4 SiltAdre DiaiifeutO'S Coneerd, Ontang Sc “a. si's
Computer- Center Ire Holy Mil Chebea Cerrpu'tx Am A'tor
Corrpurla Center Wh to P ar. s So‘tAd'0 Temnal Fctl Worth
Compj't C. Strtutd'S British Cclunba The Op» — n Doa Cocoa
Compubx SuepV Go Tra.-.’f,.’ Ci*, Corrpjter Outfrt
J. »m*jstpwn The Computer F ipiT»*nen Sin A-ton.o Ptnuu A D st
Inc Southeast Cargary Tho PC Cb'eexu Coral Gatirs Co-mpu*c't
Ka argo l« gfi i Computers f -w Yak The C;rrpu*cr Stop AO'cn
e 1 ACG6*t aisa Avbwrta,
A. Power t Play for 'the AMIGA.
* xxxxx
X. 'X xxxxx xxxxx w f} Sound Digitizer * Available From
Your AMIGA Dealer.
SoundScape Pro MIDI Studio AMIGA MIDI Interlace The most powerful performance and recording software on any computer. The recording studio-like environment provides complete facilities tor 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 MID! 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
• 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
$ 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 ICIiCi § © ip ©:? S © a © m... the professional software source!!
P. O. Box 60238 Sta. A, Palo Alto, CA 94306 (408) 741-0117
MetaScope: The Debugger MetaScope gives you everything you've
always wanted in an application program debugger:
• Memory Windows Move through memory, display data or
disassembled code, freeze to preserve display and allow
• Other Windows Status windows show register contents and program
state with freeze and restore: symbol, hunk, and breakpoint
windows list current definitions.
• Execution Control Breakpoints with repetition counts and
conditional expressions; trace for all instructions or
subroutine level, both single-step and continuous execution.
• Full Symbolic Capability Read symbols from files, define new
ones, use anywhere.
MetdXboIs I A comprehensive set of tools to aid your programming (full source included):
• MetaMake Program maintenance utility.
• Grep Sophisticated pattern matching utility.
• Difi Source file compare.
• Filter Text file filter.
• Comp Simple file compare.
• Dump File dump utility.
• MetaSend Amiga to PC file transfer.
• MelgSecy PC to Amiga file transfer Metadigm products are
designed to fully utilize the capabilities of the Amiga " in
helping you develop your programs. If you're programming the
Amiga, you can't afford to be without them.
Dealer Inquiries Welcome
• Powerful Expression Evaluation IlSJnL, Use extended operator
set including relationals, all assembler number formats.
• Direct to Memory Assembler Enter instruction statements for
direct conversion to code in memory.
• and More!
Log file for operations and displays, modify search fill memory, etc. MetaScribe: The Editor MetaScribe has the features you need in a program editor:
• Full Mouse Support Use for text selection, command menus,
scrolling or use key equivalents when more convenient.
• Multiple Undo Undo all commands, one at a time, to level
limited only by available memory.
• Sophisticated Search Replace Regular expressions,
forward backward, full file or marked block.
• Multiple Windows Work with different files or different
portions of the same file at one time.
• Keystroke Macros Record keystroke sequences or predefine,
assign to keys you choose.
• and Morel Copy between files, block copy move delete, set tabs
and margins, etc. MetaScope $ 95.00 MetaScribe $ 85.00 MetaTools
$ 69.95 19762 MacArthur Blvd.
Suite 300 Irvine. CA 92715
(714) 955-2555 (California residents + 6%).
Visa MasterCard accepted.
Amiga i a trademark o (Cammodore-Amiga be.
Ra Publisher: Joyce Hicks Circulation Manager: Dens Gamble Assistant to the Publisher: Robert James Hicks Corporate Advisor: Robert Gamble Managing Editor: Don Hicks Hardware Editor: Ernest P. Viveiros Sr.
Amicus A Technical Editor; John Foust Music Editor: Richard Rae Assistant EcStor Ernest P Viveiros Jr Assistant Advertising Manager: John David Fastino Amazing Authors: Ervin Bobo Bryan Catley John Foust Don Hicks Kelly Kauffman Perry Kivofowic George Musser Jr.
Steven Pietrowicz Rick Wirch & The Anrigo Special Thanks to: Robert H Bergwal!
RESCO, Inc. E P V. Consulting New England Technical Services Interactive Tutorials Inc Advertising Sales A Ecktorial t-617-678-4200 Amazing Computing™ (ISSN 088S-9480) is published by PiM Publications, Inc., P. O Box 869, Fall River, Ma. 02722.
Subscriptions; in the U.S. 12 Issues for S24.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 maintains the right to refuse any advertising.
Subscription Problems?
Please let us know send information to; PiM Publications, Inc.
P. O. Box 869 Fall River, MA. 02722 If we don't know where you
are, we can not send you your magazine!
I, Rmazing Computing Table of Contents Volume 1, Number 6 1986 AEGIS DRAW: CAD Comes To The AMIGA Kelly Adams discusses this comprehensive CAD package TRY 3D!
An introduction to programming 3D graphics on the Amiga AEGIS Images Animator: a review Erv Bobo describes this graphics duet from Aegis Deluxe Video Construction Set: a review Joe Lowery excercises this spectacular new tool from Electronic Arts Roomers The AMIGA returns with the lattest news from the Card Co. Scene Basic Tutorial Kelly Kauffman on subroutines Window Requestor in Amiga BASIC Generic routine for use in Amiga BASIC program ROT Colin French delivers a 3D graphics editor Fourth!
The tutorial continues with graphics programming 'I C What I Think' Ron Peterson with some C graphics programs AmigaNotes An introduction to MIDI Your Menu, Sir!
Programming menues in Amiga BASIC IFF Brush to AmigaBASIC 'Bob’ Editor Convert IFF Brush files for use as Aniga BASIC 'Bobs' The AMICUS Network Amicus John Foust explores the Lure of Large Memory Linking C programs with assembler routines on the Amiga The title says it all!
PDS Catalog A description of our Public Domain Library Departments: From the Editor Letters Index of Advertisers From The Editor: Birth of a Cover: One of the more difficult tasks at the magazine is the design of our cover. Oh, I know. I can hear you muttering that our simple covers could not possibly lake a great deal of effort.
They are so simple, sometimes misspelled, and for the first few issues, the same color.
Well, although simple, our covers are a result of hours of attempts and failures at catching just the right concept. We push and learn what our printer can do and what we can accomplish.
Last issue we began publishing AC with a four color process cover (this is the same as some of the "bigger" magazines).
We were responding to the cry from advertisers for color space in the magazine. We were certain that the layout would be simpler, now we could just take a picture and let the printer do the separations. Yeah!
It didn't work that way. It seems the more you can do, the more you want to do.
We now had the tools, but we were not content. We felt we should push a little harder. Each member of the staff had their own input as to what we should do for the cover. No one was extremely satisfied with any of the others' ideas.
Therefore, in the middle of the night, 1 took their suggestions put them on the cover and, in the morning, quietly gave them to the printer. Everyone's reactions? "Well, it was OK."
So 1 vowed this cover would be better, stronger, and with a lot less dessention. However, I made one mistake. This issue was intended as the graphics issue and the cover should utilize some of the tools and equipment available to the Amiga artist. Great.
The Amiga is not quite a year old, but do you know how many tools their are for graphics? Just existing equipment on the shelves today can take months to test and enjoy.
We expanded!
Early on, we discovered we were not able to show the graphic Amiga in our old standard 64 pages, so we have expanded to a new size of 100 pages total. Yet, even at 100 pages, we barely had enough room for some of the better graphic programs and listings.
Graphic programs and reviews, took up the rest of the space and we were not able to show some of the new hardware available.
Kurta Corp. has a line of digitizing products that they produced and used in the IBM and Macintosh markets. In the early stages of the search for products on the Amiga, we contacted them and received a Series One™ Tablet and a 4 WeDums 1S 81 Penmouse. Unfortunately, the software drive's for the Amiga took several months longer then they had at first thought.
When the new drivers did come and all the bugs were worked out, we were thrilled with the quality of the Series One™ tablet. We were drawing maps and diagrams and looking continually for an application in the magazine.
I bring up the Kurta tablet to show you a great product that is not reviewed in this issue. Why? We ran out of room. We will move its review as well as a few others back to our next issue.
The Task So, when we were looking at the cover, we were hit by a double problem. Not only are we looking at four color work, but we should demonstrate some of the capabilities of the Amiga products.
We did!
The cover picture (alter several arguments over content) was produce with Digi-View from NewTek in Topeka Kansas.
We placed a group of the graphic programs available on the table, with a few of our other "art tools" and took the picture in the required three passes. The hardest part was focusing the camera and getting enough light on the subject.
Once we had saved the picture, we tried a hardcopy printout, but we were not able to maintain the brightness of the monitor display.
Our next choice was imageSet. ImageSet of San Francisco advertises a service that will produce a 35mm slide, poster, or even a four color separation of your Amiga IFF file straight from your disk or via modem.
We opted for a Federal Express delivery rather than a modem transfer, (the Federal Express driver was here before we had the package sealed). We shipped the package on Friday, ImageSet confirmed receipt on Monday and we received the final product on the next Monday.
The picture was as bright as the original screen and should be reproduced on our cover. With a little masking and text additions our masterpiece was ready. Yet, as I write these words, the art is on the table beside me, and we still do not know how the final object will appear. Wish us luck..
Amiga C Compiler S149-95 Everything you need to develop programs on the Amiga, including a full set of libraries, header files, an object module disassembler, and sample C programs.
New Amiga Products From The Developers of Amiga G, Unicalc $ 79.95 A complete spread sheet package for Amiga, with die powerful features made popular by programs such as VisiCalc, SuperCalc, and lotus 1-2-3. Unicalc provides many display options and generates printed reports in a variety of formats and print image files. Supports 8192 rows of 256 columns, and includes complete on-line help.
Lattice MacLibrary $ 1IX1.00 'Fite Lattice MacLibrary is a collection of more than sixty C functions enabling you to rapidly convert your Macintosh programs to run on die Amiga, dais allows you to quickly and efiiciendy take advantage of the powerful capabilities of the Amiga Lattice Make Utility $ 125.00 Automated product generauon utility for Amiga, similar to UNIX Make, LMK rebuilds complex programs with a single command. Specify die relationships of die pieces, and automatically rebuild your sv.stem die same wav every time.
Lattice Text Utilities $ '75.00 Eight software tools for managing text files. GREP searches for specified character strings; DIFF compares files; EXTRACT creates a list of files to lie extracted from die current directory: BUILD creates new files from a batch list; WC displays a character count and a checksum of a specified file; BD is a line editor which utilizes output from odier Text Utilities; SPLAT is a search and replace function; and LUES lists, copies, erases or removes files or entire director)' structures.
Lattice Screen Editor (LSE) $ 100.00 Fast, flexible and easy to learn editor designed specifically for programmers. LSE’s multi-window' environment provides die editor functions such as block moves, pattern searches, and “cut and paste" Plus programmer features such as an error tracking mode and diree assembly language input modes.
OTHER AMIGA PRODUCTS AVAILABLE FROM LATTICE: Panel: Screen Layout Utilities $ 195.00 Cross Compiler: MS-DOS to Amiga C $ 250.00 tlBC 111: library' of data base functions $ 150.00 Cross Reference Generator $ 45.00 With Lattice products you get Lattice Service including telephone support, notice of new products and enhancements, and a money-back guarantee. Corporate license agreements available.
Phone (312)858-7950 Twx 910-291-2190 INTERNATIONAL SALES OFFICES: Benelux: De Vooght. Phone (32 2-720-91-28. England: Roundhill. Phone (0672) 54675 Japan: Lifeboat Inc. Phone (03) 293A71! France: SFL. Phone (1) 46-66-11-55 5 Dear Sirs: The story of Amazing Computing™ is amazing to me as revealed in your response to a letter. Thank you for your efforts! I hope the god of entrepreneurs blesses you well and soon enough to avert burnout from a sacrificial level of devotion.
The scope and quality of Amazing Computing™ and the service behind rt is great. I am especially glad to see that Amiga™ notes by Rick Rae will be a regular feature. I would like very much to make music with the Amiga™ and am not yet even sure what kinds of things are needed to get done and what they're called.
Persevere, live long and prosper.
Thank you, David Walton Ocala, FL Thanks for the kind words Dear Amazing Computing™, Recently, while on vacation, I stopped at a computer store in Minot, North Dakota and discovered your magazine.
They had the first five issues and I bought all five. Thanks.
Sincerely, Jim Williams Coralville, Iowa Dear Rick (Wirch), I was pleased to see your comment in the Marauder review concerning software that requires you to reboot off their disk to use it. I have been making the same point locally and everyone thinks I'm crazy. I hope as the Amiga™ becomes more established and multitasking more commonplace that software companies will get the point.
I've spent quite a bit of time with various software packages figuring out how to use them without rebooting. Deluxe Print™ was especially complicated. By the way, if you haven't gotten around to it, you can put Marauder™ in any directory on any disk and run it if you (1) move its auxiliary files, too; (2) CD to its directory before running it; and (3) (the sneaky part) move a font called HexFont into your fonts library.
Marauder™ uses this font for the little display of tracks in the lower right of the screen and freaks if it doesn't find it on the SYS: disk.
As you probably know by now, Marauder™ doesn't work with programs that achieve copy protecting by (ugh) changing disk speed, such as Deluxe Print™. If you call their hotline they tell you how to take the disk apart and twiddle a pot — not a very elegant solution.
Nathan Walpow Los Angeles, CA Dear Amazing Computing™, I'm writing to thank you for publishing Mr Viveiros' article on building an IBM drive connection which appeared in the May issue of your magazine.!
Would also like to tell you about an Amazing thing that happened when the project was completed.
It started out as a relatively uneventful project. All of the components were easy 1o find. I did try five electronic parts houses in an attempt to find the elusive 23 pin D connector. Everyone kept correcting me saying, "You mean 25 pin don't you". I decided that you can't really buy "Anything" in New York.
The parts I got matched the recommended ones exactly with two exceptions. One was the fact that the 74LS74 was a 74LS74A. The A extension makes no difference in the operation of the chip so I was not concerned. The second difference was that I had gotten a Shugart SA465 3AA 5.25 drive instead of the recommended SA 455. I thought, "Well it should work". Well it didn't The Amiga wouldn't even boot up with the drive hooked up. I doubled checked all of the connections and everything was perfect. The next thing I did was to play around with the jumper settings but that did no good at first either.
Being at my wit's end it was time to get out the documentation that came with the drive. There was a single sheet of paper that said if this drive is installed as drive B, remove the terminates resistor.
I had no idea what that was but there was a funny looking chip in a socket on the board so I removed it and continued my game of trying various jumper positions.
I got it to work! Now that was good news but what I got and what I was expecting were two very different things. I was expecting a 5.25 drive that would work as a 360K IBM drive under the transformer and would also configure as a 440K drive under Amiga DOS 1.2. What I got was a 360K IBM drive under the transformer that would also configure as a 720K IBM drive under MS_DOS 3.2. That was exciting but this was Amazing. My new drive auto configures, with absolutely no help from me, as an 880K Amiga drive under both Amiga DOS 1.1 and 1.2 Beta. The disk icon comes up on the workbench screen and
The operating systems seems to think it's a 3.5 inch drive. The only minor annoyance is that the system doesn't recognize disk changes in DF2: but DOS 1.2 Beta contains a new command called Diskchange which allows disk swapping in the 5.25 drive.
The Commodore 5.25 needs the Diskchange command also but it will only format to 440K and can only be used as an Amiga drive under DOS
1. 2. To prove that I really had 880K available I used Diskcopy
to copy a Dpaint slide show disk which was 95% full from DFO:
to DF2:. Then I started the show and every picture displayed
perfectly. Believe It Or Not! Thanks — AC- Joe Rothman Sysop
of A.M.U.G. BBS for the Mighty Amiga New York Dear Mr. Hicks,
I wish to discuss the subject of standards for Amiga software.
There is appearing on the market an increasing number of
software products for the Amiga™, and many appear to be simply
ported over from who knows where. I recently, purchased by
mail a copy of Harvsoft's Infobase. If functions basically as
advertised, but it is definitely not something that takes
advantage of the Amiga's capabilities.
It's basically a simple file handling package written in AmigaBasic. All display is done in black and white. It makes no use of the mouse, multitasking, multiple windows, softkeys, sounds, animation, color or number crunching; and it's painfully slow slow to operate. Also database names are limited to only six characters in length.
However, Harvsoft shouldn't despair.
It’s really up to us, the Amiga™ users to specify minimum standards of acceptability for software written for the Amazing Amiga™. Here are some features that should be available on all Amiga software.
1, Color, and lots of it. Allow the user to adjust color displays to suit individual tastes. Remember that a fair number of people suffer from some form of color perception deficiency and may not be able to differentiate between certain hues.
2. Multitasking should be available on word processors,
spreadsheets, paint programs, databases etc. This is one of
the reasons people buy the Amiga™, so why have software that
cant live up to the machine's capabilities.
3. The option of using either pull down menus or keyboard
commands. Again, Amiga™ owners want the flexibility of their
machine to be reflected in it's software.
4. Commercial software should be supplied in compiled code, for
stand alone applications, Who wants to have their disks
cluttered up with interpreters? It would be nice if all ads
for software state whether or not the application is compiled.
In order to ensure that we the users can locate quality software that makes full use of the machine's awesome power and flexibility, I suggest that a set of Amiga User Acceptability Standards be defined. This could consist of nothing more than a checklist of features that users are required or desirable on various categories of software.
This raises the question of who will develop such a standard? Will Amazing Computing™ do it? You have the required access to Amiga™owners, as well as some very talented writers. I hope you will consider taking on such a survey project. The standard when completed would be a valuable resource when making objective software comparisons.
Sincerely, Charles Nielsen Sydney, N.S. CANADA The questions of standards, white at first seems apropriate, can lead to a state view of the product's versatility.
The MS Dos community continualy chants "standards’ while the Amiga community has answered with innovation. Where we agree with you in the spirit that all software should perform with some degree of professionalism, there must be room to manuver and develope new means for old ends.
However, AC is only one voice and we welcome our other readers comments and suggestions.
¦AC* Conversation With A Computer (It’s a lot of fun, a brain teaser and a programming guide too!)
“Very highly recommended by me is Conversation With A Computer, from Jenday Software, a set of games and conversation written in Amiga Basic, and shipped with the source code provided. It is entertaining, amusing, thought provoking, andjust plain fun. If you have any interest in programming in BASIC on the Amiga, this is a must have for the examples.” MATTHEW LEEDS, Commodore Microcomputers This program really shows off Amiga's talents: lots of color graphics, mouse routines, voice synthesis, sound and animation. The 2,000 lines of Amiga Basic can be listed to screen or printer. The
documentation describes in detail, module by module, how it all works. There is a coded example of virtually every one of Amiga Basic’s powerful features.
You'll be challenged to three mind games. Memory Trest will drive you to drink. Battle of Numbers and Pegboard are two of the most elegant logic games of all time It’s your brain against Amiga's silicon!
The program is professionally packaged with comprehensive typeset documentation. It requires 512K. It is not copy protected. Now includes an introduction to the C language.
JENDAY SOFTWARE RO. Box 4313 Garden Grove, CA 92642
• Now with images in IFF format, display with text data voice
• Quickly build applications without any program coding from
simple phone mailing list to research to organization-wide
information management
• Self-running tutorials created automatically for personnel
• Integrate with virtually all existing hardware systems
Companion software with identical user-interface for MS DOS,
XENIX, UNIX, VMS, and others available. Same application fits
all hardware DATAMAT PARTIAL SPECIFICATIONS Organization Number
o (characters per field Number of fields per record Number of
characters per record Number of records per file Multiple
response Number of Relations per data file (simultaneous R W
access) Fully Menu-driven Relational Database Management
System Application Generator.
1,024 2,000 4,000
4. 3 billion Supports multiple responses (up to an array of nine)
for a single field.
10 Number of data files per data base Data types Global (System) Fields Field checks Password security Calculation capabilities Unlimited 13 includes Image in IFF Formal 40 user definable 9 special purpose Mandatory.Type, Initial value, Value within a specified range.
Field and data base levels Full complement of 23 math and trigonometric functions and 13 logical operators.
Automatic date and time calculations.
Data Entry — single entry to multiple files and records. FmporVExport facility with data conversion reorganization.
Forms Definition — full screen editor with mini word processor. Report Generation up to 66 lines x 132 columns, 6 level totaling with built in summary, Sort Search ¦ up to 26 selection criteria per query. Mass Editing, Time Saver Audit • stores all key strokes used In building application for automatic recreation. Statistics and Graphics- stepwise multiple regression, standard statistical tests and analysis; scatter plots, bar charts. Custom Applications Generator — batch partial batch processing; user-defined menues; self-running demos.
Available through your Amiga dealers. Inquiries Welcome.
Dealers Contact: EJ Distributors (716) 876 1457 3170 Delaware Ave, Transtime Technologies Corporation Kenmore, NY 14217 797 Sheridan Drive, Tonawanda, New York 14150, Phone: (716) 874-2010 Oatamat is a trademark of Translime Technologies Corporation AMIGA is a trademark of Commodore Amiga, incorporated MS-DOS & XENIX are trademarks of Microsoft Corporation UNIX is a trademark of Bell Laboratories VMS is a trademark of Digital Equipment Corporation 8 11, &7 AEGIS DRAW: CAD COMES TO THE AMIGA A Review By Kelly G. Adams — CompuServe [71310,226] Almost everyone has at least one graphics program.
Whether it is Electronic Arts’ Deluxe Paint or Aegis images by Aegis Development, or some other package I'm not aware of, These packages are sophisticated and provide the casual or even fairly advanced user with tremendous power.
What does a CAD package give the user to justify its added cost? First off, the user must understand the difference between bit-mapped graphics and object-oriented graphics.
The simpler packages mentioned above all rely on bit mapped images: the program itself has no or little concept of things like circles, squares, or even lines.
Once something is on the screen, it is treated as a bunch of individual dots. The dots that make up the circle are exactly the same as the dots that make up the square overlapping it as far as Deluxe Paint is concerned, and so the program cant separate the two images.
Aegis Draw, from Aegis Development, is an object-oriented program. It treats each thing you draw as an individual entity.
It stores something like a circle as a center point and a radius, then uses a mathematical process to draw it as what we recognize to be a circle.
With Aegis Draw, i could grab the circle or the square and move it somewhere else without affecting the other, even though they are sitting "on top of" each other.
Another difference between object and bit mapped graphics is that, because an object-oriented system treats each object as a mathematical expression, those objects can be plotted with arbitrarily fine precision.
Essentially, this means that when you output your work on a device of higher resolution than the screen — a plotter, for example — the result will be as perfect as the device in question allows. Circles will be as circular as possible, diagonal lines will be as un-jaggy as can be. In genera! You will get the best possible resolution.
Also, because an object-oriented package treats graphics elements as mathematical expressions, you can zoom in on a particular point and add ridiculous amounts of detail.
This means it is within reason to have something like a picture of the solar system, and be able to zoom in on the headline of a newspaper held by a properly-scaled graphic image of a person on the surface of the planet Earth!
All this power comes at a price, however: generally, object- oriented graphics packages are slower than bit mapped programs. Everytime something is displayed, thousands of calculations may take place.
Aegis Draw: What Can It DO?
In my personal rating system, three basic factors are considered on a scale of one to 10, plus my own "fudge score" (from one to five stars) which expresses my personal opinion totally uncoloured byfactual analysis: SAF: State of the Art Factor, which essentially indicates to what degree the program takes advantage of the Amiga's power as compared to other similar packages. It also indicates how "innovative" the program is. This is NOT an indication of "goodness" in a program. It is possible for a package to be "State of the Art’ without having much substance, in my book, at least. I'd give
this a 7.
Speed: Fairly obvious, although this is more a general feeling than a benchmark of performance, i'd give this a 5.
Performance: how well the program carries out the task it was designed for. For example, a graphics package with no print facility would not be "performing" very well unless it was never designed for output and had no need of such. I'd give this a 7.
Adams Score: my star rating; strictly personal opinion, but where it differs significantly from what the other scores indicate I'll usually try to explain myself. Three stars.
Product: Aegis Draw Version 1.0 (May 1986} Manufacturer: Aegis Development Notes: Requires512k RAM Aegis Draw is a powerful but slightly flawed entry level CAD product with at least one or two rather innovative features. It is a workbench application, which means other programs can run at the same time, within memory limitations.
Compared to existing Draw-type packages on the market such as Mac Draft for the Macintosh, by innovative Data Design, inc., and ln*A*Vision for the IBM, by Micrographix, PC, Aegis Draw stacks up quite admirably.
A point-by-point comparison is out of the question here, but I'll list the tools available in Aegis Draw and a few of the "preferences" that can be set. Where applicable (ie: when i feel in the mood), i'll draw a few comparisons between Aegis Draw and the other machines' equivalents.
Drawing Tools: "Hand me that Protractor..." First off, a few points about good design: the guys at Aegis did a nice job in allowing the user to change his mind. To select a tool, you use the familiar menu button to show your choices andselectfrom the pulldown menus.
Once you start doing something, like drawing a line or box, ADFO Draw Review AMIGA DISK FILE ORGANIZER 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 the directories disknames 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 Include S3.50 S & H Mastercard Visa Accepted Sorry, No COD Calif. Residents Add 6Vz% Sales Tax 'We&tc&m lac (cutfiic4' 3386 Floyd Los Angeles, CA 90068
(213) 851-4868 Order phone 1 800 621-0849 Ext. 494 you press the
selection button to indicate a starting point, such as the
center of a circle, then move the mouse until you have the
desired shape (for example, the circle reaches the correct
radius) then a second press will complete the operation.
Pressing the menu button at any time during such an operation cancels it. There is an "Undo" function under the Edit menu for when you make larger mistakes than using the wrong tool.
Now onward to the toolbox: under the tools menu there are two columns of functions. The leftmost column consists of the actual tools themselves, and the rightmost column contains tools for manipulating objects once you've drawn them. A list follows, with descriptions where necessary: Tools Description LINE RECTANGLE POLYGON — This allows you to create a multi-sided shape by stretching a set of lines between points chosen one at a time with the left mouse button.
FREEHAND — Unlike a bit-mapped graphics system, freehand drawing is the least used function. It uses a lot of memory (it is stored, I believe, as zillions of line segments of arbitrarily small length).
ARC — In Aegis Draw, the user selects the center of the arc, and the beginning and end points. Other packages, such as Pro Design II by American Small Business Computers for the IBM PC, allow a number of different options for such an arc.
All Mac Draw-type packages I know don't allow such diversity, but then, of course, they are easierto use.... CIRCLE TEXT — This is not normal Amiga font type text. You don't have any choice of type style. The text in Aegis Draw is vector-drawn, which is another way of saying that it is stored mathematically by the program. This translates into the user being able to size and rotate the letters to his hearts' content without bss of resolution.
DIMENSION — The dimension tool causes Aegis Draw to automatically calculate and display the distance between two points. This is selected as if you were drawing a line. The distance in units is actually entered into the diagram in between two arrows that follow the line between the beginning and end points chosen.
PART — A tremendously powerful feature of Aegis Draw is its ability to maintain a database of regularly used parts. An example of such an object might be a piece of furniture for an architectural diagram or an electronic component for a schematic.
The Part command lets you insert a part you defined and named using the Edit menu Group function: the power of the parts list is shown, you use the same parts list with several drawings.
Other packages have similar features. In* A’Vision on the IBM has "templates" — essentially a second diagram window. Aegis also supports this, but this parts concept is quite rare in software of its size.
Aegis has promised to extend this function in the soon-to-be- released Aegis Pro Draw. The database will include attributes, such as part cost.
MANIPULATORS DRAG IT — This moves an object from place to place.
ROTATE — The selected object can be rotated around a user- defined point. Control of rotation can be very precise. In comparison, ‘A’Vision only allows 90 degree rotations.
CLONE ERASER EXPLODE — For those not accustomed to object-oriented graphics systems, "Explode" may sound a little strange.
Normally, an object is any one thing drawn with a tool.
However, a new object can be formed from a bunch of objects. The explode manipulator reverses this, discombobulating a single object made of a number of subobjects.
”¦¦¦¦' t- Draw Review SIZER BACK — Because Aegis Draw considers objects as individual constructs, it is possible for one item to get 'in front of" another. The back manipulator moves a selected object behind another, thus giving a choice of the drawing order.
COLOR — This does more than just allow the change of an objects color. Aegis Draw allows objects to be different colors. It also sets the line thickness and fill pattern of an object.
STATS — If you require that a circle should be centered at (220,327), this command will allow you to enter those numbers directly. Exactly what you can change depends on the type of object you are manipulating; text, for example, allows you to change location, height and width, and the text itself.
Preferences... Besides the actual objects you can create and manipulate using the tools in Aegis Draw, there are also a number of user- definable options. For example: RULERS — It is possible to turn these on or off, or to select the unit type, Metricor Imperial.
GRID SNAP — When this option is turned on, all drawing operations are forced to start and end at a grid boundary.
SMOOTHING — This causes straight line objects to be smoothed. For example, a sequence of saw-tooth lines becomes a sine wave.
Aegis Draw has a multiple layer capability, up to 250 layers per diagram, that allows the user to make certain layers invisible and to select a particular layer to work on.
This is quite useful for maintaining a number of revisions to an item. You can regress to a particular revision number by turning layers off, or to show and allow editing to only certain aspects of a project, while protecting others.
The package also supports multiple diagrams in memory at once. With 512k you are limited to about two. Any other programs running in the background would limit this further.
Finally, Aegis Draw is capable of producing IFF standard picture files. You can edit pictures created with Draw in Deluxe Paint, Aegis Images, or any other IFF standard program that comes along.
Of course, there are a zillion other options and features; this package is a tad too inclusive for anything much shorter than a book to fully describe.
Aegis' standard procedure of producing what looks like a third party book for each of their products has worked again (wonderfully here, by the way). It is, however, not perfect... Nothing is Perfect My major complaints with Aegis Draw 1.0 center on its output options.
¦jjjr AMIGA 2S6K CARD Only $ 99.00 1 YEAR WARRANTY AMIGA GIVES'fOUA CREATIVE EDGE, MICHIGAN SOFTWARE [J DISTRIBUTORS inc. 1U«1 GRAND RJVtn • HOVI, MICHIGAN *3050 TELEPHONE (313) 340-4477 yj MODEM (313) 340-4479 First, let me commend Aegis for developing an intelligent plotter driver system which allows the user to write their own drivers. With this system available, it seems almost criminal to include only one pre-made driver, for the Roland DXY-980.
This driver supports a graphics plot standard called HPGL (Hewlett Packard Graphics Language, i believe), but even so it seems almost mean-hearted not to do a little leg work for the user and include completed drivers for a few more plotters.
Even worse, in my opinion, is that no reasonable option exists for high-quality printer (not plotter) output.
What printer output exists is essentially a screen dump, showing things like the menu bars. This resuits in the typical appalling resolution one normally gets from a bit-mapped graphics package. The average user may not have access to high-power equipment. I would love to have printer output quality comparable to that of Pro Design II.
As a final complaint, the manual claims there is an option to adjust plotting height and width, but the addendum card says correctly that this option was removed.
On the card, Aegis claims the ability to select the output area was considered redundant because the information was already stored in the plotter driver.
What this means is that if I want to create an 8.5 x 11" plot on WE COULDN’T HAVE SAID IT BETTER OURSELVES!
Dynamite Value & Versatility ANALYZE!
The Most Powerful Spreadsheet Program Fast & Easy Financial Analysis & Planning $ 99.95 “Best example of Amiga interface... Uses fast memory.” Eddie Churchill, Commodore Business Machines SCRIBBLE!
The Full Feature, Super-Easy Word Processor $ 99.95 “Scribble is what all the other word processors that have passed before my desk should have been. Its strong features and non-threatening poise make it a great multiple-skill-level product...its consistency with other Micro-Systems’ products is a welcome sight.” Jon Fuelieman, Commodore Business Machines, Los Gatos BBS-PC!
The Electronic Bulletin Board System That Becomes a Communications Network $ 99.95 “.. adaptable and sophisticated...,..a business-oriented commercial electronic bulletin board system that can store vital statistics from each regular user. Many Fortune 500 companies have taken advantage of BBS-PC's ability to be configured to suit specific needs.
BBS- PC is fast: it supports 1,200 or 2,400 bits per second.” Christian Dyar, PC Magazine ONLINE!
The Ultimate Telecommunications Program $ 69.95 “Online! Is a high-powered communications program for the Amiga that can deal with almost any telecommunications situation.,. a complete solution to serious users.” The Editors of AmigaWorld Magazine 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 must re- write the plotter driver!!
Finaliy, and this is a minor complaint, Aegis Draw could be faster. MacDraft is substantially quicker, although I performed no intensive benchmarks: there is no real reason for this.
My 11 x 17" plotter Preposterous!
It all EndsWhen Its Done... All in all, this is a very good package for the serious graphics user who owns a plotter. Until and if Aegis brings out real printer drivers to produce the quality of output that Aegis Draw obviously is capable of, it is difficult to recommend this package to anyone without a plotter of their own.
The price is reasonable, and the manual mentions an upgrade path to Predraw, once it is available, for the difference in price between the two.
Also, Draw is not copy protected. A practical, professional quality application like this must be backed up. Aegis Draw certainly deserves to do well — especially if they attend to my complaints!
Last Minute News... As I was getting ready to send this off to Amazing Computing, I got a phone call from Aegis. They told me of a new version of Aegis Draw, which should be available by mid-August.
Keeping in mind that I have not seen this package, here is a list of what version 1.10 will supposedly include: A "Pick Plotter” requester, that will allow you to choose from a number of plotter drivers in a drawer on the system disk.
Aegis will also include about five new drivers in this drawer.
This addresses my complaint about a lack of plotter drivers.
Feet, inches, fractions units option, for dimension and ruler lines. This allows increments as small as 1 128 of an inch.
Improved numeric display, showing angles of rotation, height and width of rectangles, length of lines, etc. Summary All in all, Aegis seems to have covered most of my complaints: they also fixed a few bugs, including one which I never noticed, I am embarassed to say. Apparently, the "smooth" preference formerly turned straight lines into wavy lines.... They still have to add high quality printer drivers, but the person I talked to, before I even mentioned that this was one of my major complaints, told me that they were developing better "printer plot" routines. Here, here, guys!
Also, Aegis has a low or no cost upgrade policy: contact them fordetails.
I was also asked to mention that approximately ninety percent of these upgrades were based on comments from users. It seems Aegis really wants to hear from their clients. Anyway, if version 1.10 is as good as it sounds, then it should be pretty great.
• AC- 12 ¥®Diy]iitni© If s B7 TRY 3D!
An introduction to 3D graphics By Jim Meadows CompuServe [75046,2012] Shortly after getting my Amiga, I was interested in testing the speed of Amiga Basic. I decided to convert some three- dimensional routines from the IBM PC and see how fast they would run. (These routines were on my Apple before that.)
I was excited to find that Amiga Basic was fast enough to see results of moving and rotating simple 3D images. To get the speed needed to do this, it required assembler on the Apple and compiled Basic on the IBM PC.
I realized that the Amiga would be an excellent tool to introduce others to the world of 3D graphics. So I added menu and mouse control and developed the sample program that appears with this article. I also decided to write this article soothers could learn the basics of 3D graphics.
Let us begin by asking, 'How can you draw a 3D image on a two-dimensional display screen?' The first concept we must master is that of a projection plane.
Imagine that you are looking out of a window at a light pole outside. If you reached up and marked on the window the top and bottom of the light pole as you saw it, and then connected the two points you marked on the window, you would then have projected the light pole image onto a projection plane — the window.
If the telephone pole is V units high, the image you draw on your window will be some amount we will call YW units high.
We will call the distance from your eye to the window DW units.
By looking at Figure 1 you can see two triangles: a big one formed from your eye to the light pole, and a smaller one formed from your eye to the light pole image you drew on the window. Since these two triangles are similar triangles, the ratio of their sides will be the same. This allows us to write: YW V =..... and solve for YW: DW Z V YW = — x DW Z If you looked at a stick lying on the ground and drew its image on the window, the same thing applies in the horizontal direction as shown in Figured.
FIGURE 2 (projection plane) (eye) DW 0-------- =XW* =
* X * _ _?
(stick) The size of the light pole that you drew on the window depends on 3 things: how tall the light pole is, how far away it is, and how far away your eye is from the window.
To represent a point in 3D space, you can use X, Y, and Z values where X is horizontal distance, V is vertical distance, and Z is depth (or how far away it is). The light pole, window, and your eye are shown in Figure 1 using these designations.
If the stick is X units long and the image you draw on the window is XW units long, we again see two triangles and can write: FIGURE 1 (pro lection plane)
- -* (light pole) XW and solve forXW:
- = (YW — DW = I s 0---- (eye) DW XW= x DW Z If you were looking
at a box outside on the ground and you marked the corners on
your window and connected the ---- points with lines, you
would then have a 3D image projected onto your window, just as
you did with the light pole and stick.
Now think of the window as your display screen. By defining an image as a series of points in 3D space connected by lines, you can use the XW and YW equations to compute the X & V values on your display screen that correspond to each of the points of the image. If you connect the points computed on your display screen, you will have a 3D image on your display.
Before we can consider how to rotate a 3D image so that we can View' it from different angles, we need to adjust the XW and YW equations a little bit more.
It is desirable for an object to appear to 'spin' about a point at the center of the object when it is rotated. It is easier to develop the rotation equations if the center of the object is at the point (0,0,0).
In the diagrams used so far, we assumed our eye was at (0,0,0) and the object was defined at some distance Z from our eye. If we define an image centered around the point (0,0,0) and our eye is also at (0,0,0), then it would appear as if we were inside the object!
To remedy this situation, we need to move the point (0,0,0) from where our eye is to the location that we want the image to appear to rotate around, if we choose a variable Dl to be the Distance to the Image rotation point, then we represent the largertriangleasshownin Figure 3.
FIGURE 3 (0,0,0) O--- (eye) 0 -------------DI------------ ---Z--- _--- 0id 2--- Thus what was simply the value Z, now becomes Dl+Z so our equations now become: XW = xDW and Z + Di FIGURE 4 (projection plane) + = V.
(XW, YW) = — —. (X, Y, Z) DW = X + We need just two more adjustments to these equations for use on the Amiga. Due to the difference in horizontal and vertical screen resolution, a scaling factor should be included in order to make a square actually look 'square', To accomplish this, the computed values of X should be multiplied by a screen scaling factor SF. Because V increases as you move down on the Amiga screen, we should reverse the sign of the computed V value. Finally, so that we can move the image around on the screen, we add PX and PY values to the computed X and V values. So
we then have: X XW = PX + (xDW)xSF Z + DI V YW = PY — (-----xDW) Z+DI You will find the above equations used in the accompanying program.
For the Amiga I have found the scaling factor for the high resolution display should be SF = 2.35, and a viewing distance of Dl = 900 units with the projection plane at DW = 400 units works well for the images defined in the program.
(If you change to a different screen resolution, adjust SF accordingly.)
As an example, let's say you want an image positioned at PX=200 and PY=150 on your screen. If one of the points of the image had values of X=80, Y=90, and Z=100, the point should appear on your display screen at X=275 and Y=114 as follows: YW = ----- x DW XW-PX + (xDW)xSF X Z + DI 80 100 + 900 V Z+DI Z + DI Since Dl is the distance from our eye to the 'center' of the... i ii i u u • tu — 200 + (x 400)x 2.35 =275 image, the above equations also allow us to vary how far the}nn _ Qnn 1 image appears to be from us by varying Dl. By using the equations for YW and XW, any point in 3D space
could be projected onto your two dimensional window as shown in.... _..., r-, YW = PY — (x DW Figure 4. 1 AMIGA HAS MULTI-TASKING, DISCOVERY SOFTWARE USES IT!
GRABBiT takes WYSIWYG* to the limit.
With GRABBiT you capture exactly what you see on your screen in an instant, regardless of what other programs you're running.
GRABBiT works with all AMIGA video modes, including "HoId-and-Modify'Ut even lets you capture images from animated programs, like the bouncing ball in Boing!
What's more, GRABBiT runs completely in the background — transparent to your other software. GRABBiT is always ready for you to use, even while you're in the middle of another program. As if that's not enough, GRABBiT requires only about 10 K of your precious RAM to operate, and it supports dozens of printers. It's not a game, it's not a toy, GRABBiT is truly a productivity power tool for your AMIGA!
We believe powerful software should be easy to use. GRABBiT is one of the EASIEST programs you'll ever use! Every GRABBiT operation is triggered by one of the “HotKeys", a set of easy-to-remember key' sequences that only lake minutes to learn.
Each Hotkey is generated simply by holding down the "Control" and "Alt" keys and pressing one of the designated letter keys.
What could be easier?
You won't grow-old waiting for GRABBiT to finish printing, either. When we say multitasking, we mean it. GRABBiT has a unique TPM [Task Priority Monitor) module which makes sure your other software can still run even while GRABBiT is printing. The TPM module constantly tracks GRABBiT's printing priority, making sure it is neither too high nor too low, but always just right!
GRABBIT adds a new dimension to the AMIGAIs multi-tasking capability.
GRABBiT supports dozens of different printers because it uses the standard Amiga device drivers. Any printer you can choose in 'Preferences" is automatically supported by GRABBiT. You'll get the most from color printers too. Because GRABBiT supports full- color printing. In fact, we have seen amazing color printouts produced by GRABBiT on the Oki-Mate 20, a color printer costing less than S200.00. Of course, GRABBiT's abilities are not limited merely to printing: GRABBiT is equally adept at saving screen images to disk -yes, even HAM screens! All GRABBiT disk files are saved in the popular IFF
format, the emerging graphics standard for AMIGA. You can capture any screen to disk for slide-show presentations or later enhancement with any popular AMIGA graphics editor like AEGIS Images or Deluxe Paint. We even include a specially modified PD utility called "SEE”, which allows you to view IFF image files quickly and easily.
GRABBiT's disk operations are lightning fast because GRABBiT is written in a hybrid of highly optimized C and 68000 Assembler.
Once you start using GRABBiT youll want it on every disk. You can easily install GRABBiT in your system startup-sequence, so it will always be there when you need it.
With alt its features this would be a great package at any price. But we think you'll agree with us that GRABBiT's most outstanding feature is VALUE! You get all the power of this sizzling new software for an unbelievably low 95 29 + S5 Shipping & Handling 'WHAT YOU SEE IS WHAT YOU GET Amiga is a registered trademark of Commodore Business Machine' Images is a registered trademark of AEGIS Development Corp. Deluxe Paint is a registered trademark of Electronic Arts Oki-Mate 20 is a registered trademark of Okidata of America GRABBiT ¦ DISCOVERY iSOFTWARE I IN I F. RNATIOXAI. 262 South 15th Street
Suite 400 Philadelphia, PA 19102
(215) 546-1533 ©©Binpyiiriif™ © dskk§ 15 90 = 150 (..x400) =114 100 + 900 Now let's consider how to
rotate an image for viewing from different angles. (If you
want to skip the math and go to the results, skip down to
the paragraph that begins 'The resulting equations then
become...'). Imagine a line going straight up and down from
the center of your image and call it the V axis. A line
going from the center of the image out to the right and
left will be the X axis.
The 2 axis would be a line from your eye through the center of the image. Picture a point to the right on the X axis and then rotate that point 30 degrees around the place where the X and V axis intersect. Where will the new location of that point be?
Figure 5 V axis 1 XR, YR) 1...*
1... 30. (X,0)
• -------------1------------*------X axis 1 X As shown in
Figure 5, the new location of the point has a smaller X value,
XR. Also, the point is no longer on the X axis, so V is no
longer 0, but has a positive value, YR.
Since the distance from the new location to the origin (where the X and V axis cross) remains the same during a rotation, the line from the origin to the new (XR.YR) location is the same length as the original X value.
The line from the origin to the new location (XR.YR) is the hypotenuse of a right triangle, while the line from the origin to the point XR on the X axis is the adjacent side (the bottom) of the triangle. The COSINE of an angle is defined as the side adjacent to the angle, divided by the hypotenuse, so: COS(30) = XR X or XR = X*COS(30) Since the SINE of an angle is defined as the side opposite to the angle divided by the hypotenuse, then: SIN(30) = Yft X or YR = X*SIN(30) What if the point was originally on the V axis instead of the X axis? Looking at Figure 6, we see this time the distance
from the new (XR, YR) location to the origin is the same length as the original V value.
Figure 6 V axis 1 (XR, YR) * (0, Y)
* — 1.301
- ---------------1-------------------X axis The new X value (XR)
in this case is negative and could be found by: SIN(30) = -XR Y
or XR = -Y*SIN(30) The new V value (YR) could be found by:
COS(30) = YR V or YR = Y*COS(30) By combining the
point-on-the-X-axis and the point-on-the-Y- axis cases we get:
XR = X * COS(30) — V * SIN(30) YR = X * SIN(30) + V * COS(30)
ZR = Z The above equations can be applied to any point in order
to rotate it 30 degrees around the Z axis. The ZR equation was
included to show that since the point rotates about the Z axis,
the Z value of the point would not change.
If we use a variable SZ = SIN(Z-Angle) and CZ = COS(Z- Angle) where 'Z-Angle' is how much we want the image rotated around the Z axis, then the equations become: XR = X * CZ — V * SZ
(A) YR = X ‘ SZ + V * CZ ZR = Z What if we want to rotate a point
around the V axis instead?
Then we use SY = SIN(Y-Angle) and CY = COS(Y-Angle) where 'Y-Angle' is how much we want the image rotated around the V axis, and by similar development the equations would be: XR=X‘CY-Z'SY
(B) ZR = X* SY + Z* CY YR = V What if it is rotated around the X
axis? Again by using SX = SIN(X-Angle) and CX = COS(X-Angle)
where ’X-Angle’ is how much we want the image rotated around
the X axis, the equations would then be: YR=Y*CX-Z‘SX
(C) ZR = Y*SX + Z’CX XR = X Now it is substitution time. If you
take the XR, YR, and ZR values from the (A) equations and
substitute them for the X, Y, and Z values in the (B)
equations, and then take the resulting XR, YR, and ZR values
from the (B) equations and substitute them for the X, Y, and
Z values in the (C) “I have to give Marauder a hearty thumbs
up and would recommend this product to friends.” AMAZING
COMPUTING “an indaspensibie tool for anyone with an Amiga”
INFO Magazine Second Generation Excellence!
The Best Gets Even Better.
MARAUDER II is the most powerful copier for Amiga, no other copier even comes close. Copies most advanced copy-protection schemes ON ANY DRIVE with NO ADJUSTMENT REQUIRED, even SkyFox, Arcticfox, and the new Deluxe Series from Electronic Arts.
Automatic copying is now fully supported, but Parameter-Entry override is still provided. MARAUDER II even includes new disk analysis utilities that will allow you to explore disks tike never before.
MARAUDER II can also make completely unprotected copies of many of your favorite programs. No key disk is required after these programs are unprotected by MARAUDER II. If you plan to get a hard disk for your Amiga, then you’ll really appreciate this feature!
Don’t wait any longer. Join the thousands of Amiga owners who already rely on MARAUDER and get MARAUDER II today. Still not copy-protected, stlil only « DISCOVERY $ 3905 $ 5 SHIPPING AND HANDLING RSW 262 South 15th Street, Suite 400 Philadelphia, PA 19102 U.S.A.
(215) 546-1533 DTiESigilifiD ©©fftmptuifiairagj™ © Hill 17
equations, you will get a general set of equations for
simultaneous rotations around any of the Axes, (Instead of
substituting, you could convert the (A), (B), and
(C) equations into matrix form and multiply them together to get
the same results).
The resulting equations then become: XFU X'(CY'CZ) + V • (-CY'SZ) + Z * (-SY) YR= X * (CX*SZ-SX*SY’CZ) + V * (CX*CZ+SX*SY*SZ) + Z* (-SX'CY) ZR = X'fSX'SZ+CX'SY’CZ) + V * (SX'CZ-CX’SY'SZ) + Z* (CX'CY) These are the equations used in the accompanying 3D program to rotate all the points of an image before projecting them onto the projection plane.
You will notice that the values in parentheses in the above equations can be evaluated once, and then applied to all the points in the image table, array IT%, in order to effectively rotate the image in space.
The computed XR, YR, and ZR values are stored in a rotated image table, called RIM%. Finally, the projection equations developed earlier are used to 'see' the rotated 3D image on the projection plane (your display screen).
Due to the sequence in which we evaluated the rotation equations, an image may appear to spin about an axis or 'wobble' about an axis when rotated depending on the angles of rotation.
One final comment about the rotation calculations is needed.
We normally think of angles in degrees (e.g., 90 degrees is a right angle). However, the SINE and COSINE functions in Basic expect the angles to be in radians.
Since 2 pi radians = 360 degrees, to convert degrees to radians you must divide by 57.2958. This is done in the program as it computes the trig functions.
The accompanying program uses the projection equations and the rotation equations we have developed. When you run the program, it first greets you with a 3D image that rotates at different X, Y, and Z angles and varies the distance the image is from you for different effects.
Then another image is displayed and rotated, using a draw undraw technique where the image is redrawn using the background color in orderto erase it.
Next the image is 'flown' through space by a short routine that moves the image about, rotating it, and moving it 'closer' to your eye by varying Dl.
Another image is then flown’ through the same flight pattern.
When the flight' is over, the program switches to a manual display mode with menus that allow you to rotate the last image for viewing at any angle and to move it about. Holding the left mouse button down repeats the last menu Hem selected for continuous movement.
The images displayed are sometimes called 'wire frame' images, since all edges are visible. You appear to see through the object, as if you have X-ray vision. By adding hidden line removal routines, only the surfaces you normally would see would be drawn. However, this type of routine can become quite complex, and is beyond the scope of this introduction to 3D graphics.
The variable EF in this program is used as an 'Erase Flag’, if EF=0, the image is drawn using the colors found in the image table. If EF=1, the image is drawn using the background color, effectively erasing the image from the screen. If EF=-1, the screen will be cleared after fhe rotated image is computed and before the image is drawn on the screen.
One possible use of these routines would be 1o combine them with a drawing program. An image could be defined, displayed from various angles, and saved on disk to later be filled in with details using a drawing program. Or for those so inclined, the image table could be expanded and equations used to generate entries in the table for the points of a 3D surface. Then the surfaces could be rotated and viewed from various angles.
The images are defined at the end of the program. Try substituting your own images in place of the program's images. The first value of a table entry is the colorto be used to connect the point with the previous point. If 0 is used for the color, a line is not drawn.
The remaining three values are the X, Y, and Z values of the point. To mark the end of your image use -1 for the color of the last entry. When you define the image points, remember that the object will appear to rotate around the point (0,0,0).
Have fun in the ’real' world of 3D graphics.
' Try3d An Example of 3D Programming 1 Initial Amiga implementation ’ by Jim Meadows 6 1 86 CompuServe [75046,2012] 3D Greeting CLS: PRINT COLOR 3: PRINT " Try3D"; COLOR 1: PRINT " An Example of 3D Programming" COLOR 1: PRINT " by Jim Meadows" GOSUB InitVals GOSUB SetImage GOSUB Setlmage GOTO Manual ef=-l ax=l0: ay=5: px=l 8 0: py=7 0 GOSUB Drawlmage LOCATE 18,20:COLOR 3: PRINT "Hello!"
GOSUB Pause ax=10: ay=-30 AinfiisigOffig) ©erapytagj™ ©'flu® 19 tXe ox, atox SPB£Qt TXOC£SS°X fov tfie.
_ AXJQA Take advantage of your AMIGA'S speaking powers with THE ORATOR. THE ORATOR allows you to compose text in either regular English, or using the Phoneme method (or a combination of both). A complete text editor permits you to change the spelling of words in order to get just the right sound. You have complete controf over the Rate, Pitch, Tuning. Voice, and Mode of each individual phrase by simple, mouse controlled sliding bars and boxes. A phrase can be any length up to 140 characters, and at least 200 phrases can string together in a single continuous file. Your story, poem, jokes,
or whatever, along with their voice settings, can be saved in a compact sequential file that you can use in your own BASIC programs. THE ORATOR also comes with THE PHONEME TUTOR, a program that makes it easy to learn the Phoneme method of text input. Includes complete documentation and a utility program for use in your own programs.
Requires the AMIGA with 512K memory, one disk drive, and AbasiC or Amiga BASIC. Both versions are included on the disk.
Price: $ 39.95 postpaid C. O.D. addSA (Indiana residents add 5% sales tax) Mail check or money order to: THE QUALITY COTTAGE V G301 F University Commons Suite 308 South Bend, In 46635 1219! 234-4401 AMIGA is a trademark of Commodore-Amiga. Inc. GOSUB Drawlmage LOCATE 18,3:COLOR 3: PRINT "Welcome to the World of 3D Graphics!"
GOSUB Pause ax=30: ay=20 GOSUB Drawlmage LOCATE IB,15:COLOR 3: PRINT "Hmmmmmm " GOSUB Pause ax=-3Q: ay=-15: az=2 0: di=500 GOSUB Drawlmage LOCATE 18,8:COLOR 3: PRINT "Yep, just as I figured It GOSUB Pause az=-20: ay=15 GOSUB Drawlmage LOCATE 18,4:COLOR 3: PRINT "You've got what it takes for 3D!"
GOSUB Pause ax=10: ay=-20: az=Q: di=900 GOSUB Drawlmage LOCATE 18,15:COLOR 3: PRINT "You have..." GOSUB Pause ax=-5: ay=0: di=700 GOSUB Drawlmage LOCATE 18,15:COLOR 3: PRINT "... ad AMIGA!!"
FOR i = 1 TO 10000: NEXT ef=0 Ri: Rotating Image CLS LOCATE 19,13:COLOR 3: PRINT "Delta Wing Fighter" GOSUB Setlmage Draw and Undraw rotating image ax=-90: ay=270: az=0: px=160: py=100 FOR ii = 1 TO 4 GOSUB Drawlmage GOSUB Pause ef=l GOSUB Drawlmage ef=0 ax=-20 ay=ay-60 IF i±=l THEN ax=0: ay=270: az=0 NEXT Fly: Animated flight path FOR inurn = 1 TO 2 IF inurn=2 THEN GOSUB Setlmage di=2400 ax=0: ay=270: az=0 px=3Q: py=30: ef=-l GOSUB Drawlmage px=px+4Q: ax=ax-5: di=di-10Q GOSUB Drawlmage ax=ax-5: di=di-10Q FOR R=1 TO 3 px=px+4 0: ay=ay-20: di=di-100 GOSUB Drawlmage NEXT FOR R = 1 TO 3
px=px+30: ay=ay-20: az=az-20: di=di-100 GOSUB Drawlmage NEXT FOR R=1 TO 4 px=px-20: py=py+10: az=az+10: di=di~8Q GOSUB Drawlmage NEXT FOR R=1 TO 8 px=px-9*R: py=py+10: az=az+5: di=di~60: ax=ax-5 GOSUB Drawlmage NEXT NEXT Finally allow manual control GOSUB Setlmage Manual: MENU 1,0,1, "Rotate +" MENU 1,1,1, "Around X-axis" MENU 1,2,1, "Around Y-axis" MENU 1,3,1, "Around Z-axis" MENU 2, 0,1, "Rotate _ II MENU 2,1,1, "Around X-axis" MENU 2,2,1, "Around Y-axis" MENU 2,3,1, "Around Z-axis" MENU 3,0,1, "Move" MENU 3, 1, 1, "Closer' MENU 3,2,1, "Away" MENU 3,3,1, "Right" MENU 3,4,1,"Left" MENU 3, 5,1,
"Up" MENU 3,6,1, "Down" MENU 4,0,1, "Reset" MENU 4,1,1, "Angles' MENU 4,2,1, "Distance" MENU 4,3,1, "Position" MENU 4,4,1,"Quit" ON MENU GOSUB Menus ON MOUSE GOSUB Mous ral=l: GOSUB Reeset ml=*2: GOSUB Reeset ml=3: GO£UB Reeset act=l: ef=-l MOUSE ON MENU ON Loop: IF act=0 THEN inc=l: GOTO Loop GOSUB Drawlmage GOSUB Vais IF MOUSE (0)0-1 THEN act=0 ELSE GOSUB Mous GOTO Loop Subroutines Vais: COLOR 1 LOCATE 1,1: PRINT "Ax, Ay, Az LOCATE 2,1: PRINT "Ex, Py LOCATE 3,1: PRINT "Di COLOR 3 "ax","ay","az "px","py "di LOCATE 4,1: PRINT "Use Menus to Change View" COLOR 2 LOCATE 5,1: PRINT " press left button to
repeat)1 RETURN Menus: act=l inc=l mO=MENU(0) ml=MENU(1) ON mO GOSUB RotateP, RotateM, Movel, Reeset RETURN Mous: act=l inc=inc+.5 ON mO GOSUB RotateP, RotateM, Movel, Reeset RETURN GETTING YOUR MONEY’S WORTH?
• UP TO 19200 BAUD
(FLA RES ADD 5%) VISAJMC COO.'CHK ACCEPTED call 813-787-3111
(813) 787-3111 IF ml=3 THEN px=lSO: py=100 IF ml=4 THEN MENU
Routines RotateP: IF ml=l THEN ax=ax+10*inc IF ml=2 THEN
ay=ay+10*inc 1 ax, ay, az = rotation Angle in degrees IF ml=3
THEN az=az+10*inc
* di = distance to image RETURN 1 dw = distance to window
(projection plane) 1 px, py = position of image on screen
RotateM: sf = screen scaling factor IF ml=l THEN ax=ax-10*inc
1 ef = erase flag (l=erase, 0=draw, -l=cls & IF ml=2 THEN
ay=ay-10*inc 1 Image data is at end of program IF ml=3 THEN
az=az-10*inc RETURN InitVals: 1 Define Arrays Movel: DIM
it%(100,3):1 Image Table IF ml=l THEN di=di-50*inc DIM
rim%(100,3):1 Rotated Image IF ml=2 THEN di=di+50*inc 1
Initialize Values IF ml=3 THEN px=px+20*inc x=0: y=0: z=0 IF ml=4
THEN px=px-20*inc dw=400:' Distance to window IF ml=5 THEN
py=py-10*inc di=900:' Distance to image IF ml=S THEN
py=py+10*inc sf=2.35:' Screen scale factor RETURN
ax=0: ay=0: az=0:’ Angles in Degrees px=200: py=100:' x, y Image
Location Reeset: ef=Q:1 Erase Flag IF ml=l THEN
ax=-15: ay=-25: az=0 f=57.29578:’ Degrees to Radians factor IF
‘Software Publishers ‘Peripheral Manufacturers ‘Hardware Developers Be Represented by Canadas Premier Distributor of Amiga support products Drawlt: np=0: IF ef=-l THEN CLS Drawltl: Check for end of table c=it% (np,0): IF c=-l THEN RETURN 1 Keep from dividing by zero IF (rim% (np, 3) +di) = 0 THEN rim%(np,3)=rim%(np, 3)+1 1 Compute screen x 6 y xw=px+ (rim% (np, 1) (rim% (np, 3) +di)) *dw*sf yw=py-(rim%(np,2) (rim%(np,3}+di))*dw Draw next line or move to next point IF c=0 THEN GOTO JustMove coir=c: IF ef=l THEN coir=0 LINE (lx, ly) — (xw, yw), coir JustMove: lx=xw: ly=yw np=np+l GOTO
Drawltl PHASE 4 DISTRIBUTORS INC. HEAD OFFICE: 7157 Fisher Road South East (403} 252-0911 Calgary, Alberta Canada T2H OW5 CAVALRY-TORONTO-VANCOUVER-ST.JOHNS ATTENTION CANADIAN DEALERS CALL TOLL FREE 1-800-661-8358 FOR THE LATEST AMIGA 128 UPDATES or 403)-258-0844 for our Dealer BBS SetImage: 1 Routine to insert an image into the table n=0 itloop: READ it% (n, 0) IF it%(n,0)=-1 THEN RETURN READ it% (n, 1), it% (n, 2), it% (n, 3) n=n+l: GOTO itloop Greeting Image Image Data Format: c, x, y, z (c=color, if =0 then move w o drawing) DATA 0, — 50,30,0 DATA 1, — 55,35,10 DATA 1, — 45,0,0 DATA 1, — 20, — 60, — 30
DATA 1,20, — 60, — 30 DATA 1, 20, -60, -30 DATA 1,45,0,0 DATA 1,55,35,10 DATA 1,50,30,0 DATA 3,30,80, — 30 DATA 3, — 30,80, — 30 DATA 3, — 50,30,0 DATA 0, 0, 22, -30 DATA 1,0, — 4, — 36 DATA 0, — 5,0, — 30 DATA 1,0, — 4, — 36 DATA 1,5, 0, — 30 DATA 0, — 20,30, — 25 DATA 1, — 35,25, — 17 DATA 1, -20, 20, -25 DATA 1, — 5,25, — 21 DATA 1, -20, 30, — 25 DATA 2, — 20,20, — 25 DATA 0,20,30, — 25 DATA 1,35,25, — 17 DATA 1,20,20, — 25 DATA 1,5,25, — 21 DATA 1,20,30, — 25 DATA 2,20,20, — 25 DATA 0, -2 0, -2 6, -22 DATA 3, 0, -34, -30 DATA 3,20, — 26, — 22 DATA 0, — 10, — 30, — 26 DATA 3,10, — 30, — 26 DATA -1 Delta Wing Fighter Image DATA 2,0,0, — 25 DATA 0,0, — 20,100 DATA
-1 DATA 1,0,20, — 100 DATA 0, SO, — 20, — 100 XVZ axis Image DATA 1,0, — 20,100 DATA 0, — 100,0,0 DATA 1, — 50, — 20, — 100 DATA 1,100, 0, 0 DATA 2,0,20, — 100 DATA 1, 80, — 20, 0 DATA 2,50, — 20, — 100 DATA 0,100,0,0 DATA 2, — 50, — 20, — 100 DATA 1, 80,20,0 DATA 0, — 75,0, — 100 DATA 0,140,14,0 DATA 3, 0,0,0 DATA 1,170, — 16,0 DATA 3,75,0, — 100 DATA 0, 140, — 16, 0 DATA 3, — 75,0, — 100 DATA 1, 170,14, 0 DATA -1:' End of Image DATA 0, 0, -100, 0 DATA 2,0,100,0 Chaser Image DATA 2,20,80,0 DATA 0, — 25, 0, — 25 DATA 0,0,100,0 DATA 1,25,0, — 25 DATA 2, — 20,80,0 DATA 1,25,0,25 DATA 0,0,120,0 DATA 1, — 25,0,25 DATA 2,0,134,0 DATA 1, — 25,0, — 25 DATA
2,14,148,0 DATA 0, — 25,25,25 DATA 0,0,134,0 DATA 3, — 25, — 25,25 DATA 2, — 14,148,0 DATA 3, — 25, — 25, — 25 DATA 0,0,0,100 DATA 3, — 25,25, — 25 DATA 3,0,0, — 100 DATA 3, — 25,25,25 DATA 3,0, — 20, — 80 DATA 0,25,25,25 DATA 0,0,0, -100 DATA 3,25, — 25,25 DATA 3,0,20, — 80 DATA 3,25, -25, — 25 DATA 0, — 14,14, — 140 DATA 3,25,25, — 25 DATA 3,16,14, — 140 DATA 3,25,25,25 DATA 3, -14, -16, — 140 DATA 0, 0, 0, -25 DATA 3, 16, — 16, -140 DATA 2,0,0,50 DATA -1 DATA 2,0,10,25
• AC* The Personal Database Management System EXTRA _ Easy to
use. No new language to learn.
• EXTRA _ On line help. Just press for command information.
• EXTRA Flexibility, with pull down menus, automatic filing and
field sizing.
INFO+ EXTRA LOW price... JUST $ 49.99!!!
VISA Order NOW! (305)657-4355 Eastern Telecom inc. 9514 Brimton Drive Orlando, FL 32817 FREE Shipping in Continental U.S. Dealer Inquiries EXTRA EXTRA EXTRA APPLICATIONS FEATURES USEFUL Electronic Files Fast Execution INFO+ helps you create, update, and Student Grades Mufti-Tasking retain computerized files of ell your Monthly Bills Dynamic Positioning valuable inlormation. You can sort the Inventory Sorts Any Field data by date, size, name, cost, etc. Birthdays AH Screen Colors INFO+ is an automatic secretary and Configurations Moose-Key Entry file cabinet all in one.
Rental Property Numeric Pad Taking a vacation or buying a car?
Shopping Lists Formatted Printing Let INFO* do the analysis for you.
Book Titles Variable Fields Never forget a recipe or birthday Phone Lists 32765 Records again. INFO+ is the ideal reminder Vrdeo Tape Not Copy Protected system, 3nd it has a large memory.
ASDG, Inc. is Proud To Announce Availability of the First Intelligent Hardware Expansion Path tor the Amiga™ September 22nd, ASDG, inc. will begin shipping the Convertible™ product line as well as the Mini-Rack-B™ All Convertibles are 100% ZORRO compatible. In fact, we’ve designed our board level products to work perfectly even if placed in a sub-standard ZORRO back plane (call our engineers for detailed information}.
These features are common to all three:
• ZERO Wait States — your FAST RAM will really be FAST
• Fully ZORRO (100 pin bus) compatible
• Fully Auto-Configuring ¦ Four Layer Printed Circuit Board — for
quality and reliability ¦ Custom Hi-Speed DRAM Controller
• ONE YEAR Parts and Labor Free — in the unlikely event of board
The Mini-Rack-B (for Budget) converts most ZORRO compatible card cage cards including the Convertibles INTO SIDE MOUNTED cards. The Mini-Rack-B is a two slot card cage with a self contained 6 amp power supply. The packaging is an attractive metal card cage which does not block either mouse port.
If purchased along with a Convertible board product, the Mini-Rack-B will be available (September 22nd) for $ 150.00. If purchased alone the Mini-Rack-B is $ 300.00. The entire unit is 10 inches deep by ten inches high and only 6 inches wide.
The Mini-Rack-B coupled with our Convertible product line allows new Amiga owners the ability to start out with an inexpensive card cage and with expansion boards which will be compatible with any future upward expansion. If you had purchased ordinary side mounted products and later decided to expand to a large card cage, your side mounted products would become unusable. With the Convertibles, simply slide them out of the Mini-Rack-B and into the ZORRO back plane of YOUR choice.
The three memory boards are being introduced at more than a TEN PERCENT DISCOUNT from their list prices. Send us proof that you are a member of any Amiga User Group, and we'll take an ADDITIONAL FIVE PERCENT off the list.
The Convertible Memory Board can be ordered NOW: LIST I INTRODUCTORY USER GROUP PRICE PRICE PRICE.5 Mbyte of FAST RAM: $ 450.00 $ 395.00 $ 370.00 1 Mbyte of FAST RAM: $ 650.00 $ 575.00 $ 550.00 2 Mbyte of FAST RAM $ 900.00 $ 795.00 $ 750.00 Ordering Information New Jersey Residents Please Add 6% Sales Tax ASDG Will Pay UPS Standard Delivery In the Continental U.S. Other means of shipment are at customer's expense.
All funds In U.S. Currency and draw upon U.S. Banks Remember, Deliveries Begin September22nd.
Dealer and VMR Pricing Aviailable Demonstrations to Large User Groups Can Be Made Send Checks or Money Orders To: ADSG, Inc. 280 River Road, Suite 54A Piscataway, N.J. 08854 AEGIS IMAGES ANIMATOR A Review byErv Bobo — By now, graphics design programs are a staple of the Amiga, but IMAGES, from Aegis Development, has a few differences worth considering — some apparent as soon as the program is booted.
On the black screen before you, a window shows a Fast Menu; this allows rapid point-and-click selection of every tool in the package, but is probably better used once you’ve become familiar with the program. For right now, drag your cursor to the command bar and dick the right mouse button to see the pulldown menus. These are the same commands you saw in the Fast Menu, but here they are much more detailed, words taking the place of icons.
The Project menu allows you to save, load or print a picture as well as adjusting the color palette. Next to it, the Edit menu allows you 1o Undo your last brush stroke, clear the screen, create a frame or magnify a portion of the work screen.
Magnify allows you to work on a small section of your picture one pixel at a time, while Frame allows you to delineate any portion of a painting and save it for later use as a brush or move it to another part of the current picture. As a Frame, it can also be moved to ANIMATOR and be used as a background or foreground object. As if this weren't enough, the area bounded by the Frame may be rotated through 360 degrees.
Next in the line of menus is Special Effects. Here you can turn on Mirrors, for symmetries! Drawing along the vertical, horizontal or diagonal — or all three at once. Within this same menu, you can choose Wash, a technique that causes adjacent colors to bleed together; or Smear which does just what it's name implies.
Here, too, you can cause a range of colors (selected from the palette) to Cycle within your painting and this can be used as an elementary type of animation.
A sub-menu to Special Effects shows Pantograph, which copies an area of the painting to another area; Under, which allows you to paint under existing lines or forms; a Grid superimposed on your painting for greater precision; and Spread, which causes the Fill command to use a range of colors ratherthan the usual single color.
Add to these the color palette, where each color can be adjusted for hue and intensity by slider bars and which contains a variety of pre-made patterns which can be edited to taste; a menu of shapes allowing you to draw freehand or to create a variety of geometric shapes; and a brush menu which shows a wide variety of brush styles and you have a drawing and painting program as complete and as easy to use as any on the market. You will, however, have to bring your own talent to the program.
Now, suppose you do use IMAGES and create a great painting of, say, a landscape? Beyond printing it, what can you do with it? Why, simply load it into AEGIS ANIMATOR, use it as a background and create some animation for it.
ANIMATOR is one of the most original programs yet created for the Amiga and one of the most surprising. When you first see how you can draw a simple shape and move it about the screen, then think about how much code would be needed to duplicate that routine on a real computer, you'll be amazed.
Like IMAGES, ANIMATOR requires an Amiga with 512k of RAM. Ft also resides on a Workbench disk and so can be copied — in fact, the memory requirements engender some special copying instructions. Following them results in a working copy that will always boot to CLI rather than Workbench, thus saving some valuable workspace in RAM, It is easy to overdo things and run out of memory. Before this happens, ANIMATOR will display a message saying "Memory Panic — System going down!" Before the system does go down, you'll have a chance to save your work.
Because it works from a battery of pull-down menus, with all routines built in, you can get up-and-running on ANIMATOR with only a minimum of instructions. Beginning with the Project menu, you can select a new routine or elect to work with an old one. Then go to the Create menu, which allows you to select from a variety of predefined shapes or to choose a tool for free-hand drawing. The menu of shapes and tools is not as extensive as that in IMAGES, so a bit more work will be required if you are working with complex shapes.
An alternative is to create your complex shape in IMAGES, save it as a Window (remember the Frame) and move it to ANIMATOR. As a Window, it can be moved about the screen and it can be embellished with routines created in ANIMATOR.
To begin moving an image, go to the Time menu and select "tweener”, A "tween" is a segment of animation and you click on it between segments as a means of keeping everything from happening at once.
Let's say that you've drawn a star and the next step is to move it sideways to the right. Without using tween, the star would simply form itself to the right and there would be no animation. Although at times there may be reasons for simultaneous action, such as having the star appear while rotating on its x axis, a little forethought is necessary in order to make your film turn out the way you hoped it would.
Three-dimensional rotation, of course, is the highest standard of computer animation. Not only is it possible with ANIMATOR, it is also easy. From the Move menu, you may select to Rotate In-plane, around x-axis or around y-axis or, if you don’t use tween, around all three simultaneously.
Exploring other options on the menus, we find we can clone a shape, change colors, re-size objects, create a path for a COLONY SOFTWARE Images Animator Review 931 W 21 ST NORFOLK VA 23517
(804) 625-2089 BBS
(804) 625-1945 FileCraft!
Data Base Manager — $ 79.95 Easy-To-Use, w 4 Ready-To-Use Data Bases. Pop-In the disk — and START USING THE PROGRAM — IMMEDIATELY!
Powerful, Fast, and Tested.. Programmable- Data Files addressed, outside DBM.
Great Documentation — BUT YOU WON'T NEED IT.
Mail Merge — $ 25 — Use w FileCraft! (above) to merge letters created with TEXT- CRAFT and data base names addresses.
Makes personalized form letters — EASILY.
Point-of-Sale — $ 99.95 — Cash register inventory Sys.
Lowest Prices — Write Call for Catalog Hints — $ 5 To Be Released (Real Soon Now): SLIDE SHOW CONSTRUCTION SET -$ 25 MARION-THE-LIBRARIAN — $ 40 RENTAL SOFTWARE Access our DISK LIBRARIES for AS LITTLE AS $ 2 DISK — RENTAL: 1000+ Disks of IBM-PC software converted to 3-1 2" disks. (Use w Transformer software, w o 5"drive.
100+ disks of AMIGA software.
Moving object to follow, outline or fill a shape, change a shape, destroy an object and more. And because we are working with animated rather than static objects, these are all continuous actions.
As you select each option from the menu, a one-line message bar will change to show what that option will do for you. In addition, as you become more adept and more accustomed to the routines indicated by different cursor shapes, you may go to the "quick-select" option, which presents you with an on-screen palette representing every command of which ANIMATOR is capable, much as the Fast Menu does in IMAGES.
When your routine is done, return to the Time menu and select Replay All. Now your creation will run in the proper sequence and, if you really like what you've done, you can select Replay Loop and allow your routine to continually repeat itself while you go drag all your friends and neighbors into the house to show them — or while customers in your showroom are caught by the continous-running display.
Whatever routines you create can be saved to disk and a storyboard option allows you to set up an order in which related routines will be recalled from disk in order to make longer routines possible. We also see this as a terrific tool to be used with a VCR and the composite output of the Amiga, as a means not only of building longer routines on video tape but also of being able to replay them in schools or offices that may not yet have an Amiga.
With the Frame Grabber interface, you'll be able to grab and freeze a frame from videotape, videodisk or direct from your video camera. Thus loaded into ANIMATOR as a background, you can embellish it with whatever animation you can imagine.
Besides video sources, you can load in paintings created with any such program that saves material in the IFF format, a growing standard developed by Electronic Arts — including those created with Deluxe Paint from EA.
In summing up, we would have to say that Aegis ANIMATOR is all we hoped it would be, and more. It is easy to use and it can be deeply explored after only a swift scanning of a few pages. This should not be taken as an invitation to throw away the manual and bull your way through, however. Read it all, refer to it often and you can be turning out animations as good as those seen on the nightly network news.
The price, in a package that includes IMAGES and ANIMATOR along with extensive and easy-to-understand instructions on each, is $ 139.95 — in our book, a bargain price for one of the best and most complete creative tools available forthe Amiga.
Ervin Bobo 23 St. Lawrence St. Peters, Mo. 63376
Electronic Arts has been known for some time for its meaty
programs. DeluxePaint comes to mind as a full course meal and
I'm happy to report that Deluxe Video is a feast! This is one
of the most mature Amiga products written to date and an
immediate classic. However, like ail great works of art,
definite choices were made and some people will be disappointed
with these selections. But let those disgruntled few spend a
little time at least appreciating the completeness of Deluxe
Video, it is truly AMAZING.
Deluxe Video (programmed by Mike Posehn and Tom Casey of Granite Bay Software) is laved out beautifully. The basis of the program is the hierarchal structure of a video containing certain elements, mainly scenes, and each of those being made up of effects. There is a different window for the overall video and for each scene. A precise timeline allows you to easily overlap specific effects and match their duration. You simply pick up either a "Track" icon or an "Effect" icon and lay it where you wish. Then adjust the starting time, and in many cases, the duration. This is word processing come
to video, and fine-tuning yourcreation is a joy.
One can really get a sense of well thought-out long-range planning here. There is even an option to expand your Part Pool (where many of your video components reside in RAM) if you have more than 512K.
The Initial disappointment that I alluded to earlier comes from the cry, "Only 8 colors!" (That's 8 per background and foreground, and... well read on.) Here is where the main choice was made to emphasize smooth, continuous video animation, over a short duration 32 palette one, like Aegis' Animator. Not that one is better for this reason, they are just at different purposes. Deluxe Video is set-up using the Amiga's dual-playfield mode which allows for a foreground to overlap a background (Hacker, Skylox, and Arcticfox also employ this technique). This mode uses a screen buffer for each
playfield so that, effectively, the normal 32 color lo-res palette is split over 4 screens a visible and a hidden each for the background and foreground.
The hidden background allows you to do a dizzying array of wipes as you reveal what lies "behind" the visible background. Figure out the combinations possible with the ability to come from six different directions, each with 5 different stylistic modifiers (such as Slide or Shrink) available, with up to 9 divisions, either horizontally or vertically.! Spent an entire evening trying all the variations and I didn't even gel dose.
The hidden foreground is used as a frame buffer to process the animation sequences in a "page-flipping" technique.
This can be turned off with a Strobe effect so that trails of your object are left.
Using Deluxe Video is like programming. In fact, I would say it is quite analagous to audio-visual programming with a compiled language (more about that last phrase in a bit). For Amazing Computing, I put together a video that had a firecracker going off in time with a Cajun ditty from Instant Music. 1 liked that one so much, I added two more, all burning down to the fuse and popping at different rates!
There are several "debugging" utilities included in Deluxe Video; a memory map to identify where too much is happening; a clear command; and a stamp feature that moves stationary foreground objeels to the background, thus freeing memory overhead.
Now about the "compiled" comment. There is a tremendous amount of disk access involved with Deluxe Video. Going back and forth between viewing your video and working on it is very disk intensive. Deluxe Video does not keep your video and all its constituent parts in memory. Each time you go from the lay-out Video and Scene screens to the viewing screen, Deluxe Video saves your changes to disk in a working file (which means when you are working on your video it takes up twice as much disk space) and then loads the player portion of Deluxe Video and reconstructs your video from disk, loading in
each picture as it is requested, fetching each sound, and so on. This insures that the critical timing of loads will be duplicated exactly each time. Then upon returning to your work area, Deluxe Video reloads your most recent lay-out screens. If you’re coming from a Basic background to C like me, the parallels to the time spent recompiling your source code are all to obvious. However, as in C, the results are worth it.
Another specific choice of the programmers was to make this very much a video-based product. Creations can be greatly improved by running them through a VCR al a slower speed and then playing them back normally. An option is available for doing this at either 1 2 or 1 4 speed, thus doubling or quadrupling your frame rate. My experience with this shows that while there is a major benefit, you'll have to re-tune your effects, especially the music and sound, in order to get the best possible results. You can even, if you have access to a single-frame recorder, record at a single-step rate giving
you the smoothest possible animations.
Hard Disk Expansion Box $ 225.00 FEATURES:
* Same size, and color as Amiga.
* Mounts directly on top of Amiga.
* Includes 40W switching P S,
* Floppy Interface PCB, and
* Amiga Interface Cable.
* Space for 5.25 floppy or HD,
* and 3.5 floppy drive.
EB1000 Cabinet w PCB and P S (Wt. 10 lbs) $ 225.00 EB1000—1 EB1000w 3.5"fipy. Scabies (Wt. 15 lbs) $ 350.00 EB1000-2 EB1000—1 w 5.25’%. Scbis. (Wt. 20 lbs) $ -175.00 FD350 Amiga compatible 3.5” floppy (Wt. 5 lbs) S 125.00 IB 100 Floppy Interface PCB (Wt. 2 lbs) $ 25.00 Ordering Information: Include $ 3.00 for shipping and handling plus $ 0.50 for each pound over 5 lbs. Shipped UPS ground. No Cod's please. California residents add 6.5% sales tax.
Send check or money order to: STACAR International 14755 Ventura Blvd., Suite 1-812 Sherman Oaks, California 91403 Telephone S (818) 904-1262 In the play mode there is even a VCR remote controller icon enabling you to last forward, reverse, skip to the end or beginning, mute the sound, or loop continuously. There is also a timer to better help your fine-tuning.
One of the major differences between Deluxe Video and Animator is that here you can incorporate sound and music and that is a big plus. Songs must be in a "SMUS' (Simple Music) IFF files such as from Instant Music & the soon to be released Deluxe Music. Music and sound are given priority over the visual effects so that they never sound draggy.
Instruments must be in the proper data drawer when you try to load the songs; there is a menu option which allows you to change those defaults another sign of mature programming.
If the instruments cannot be loaded Deluxe Video defaults to its RAM instrument, which, like the manual says, does indeed sound "something like a piano." You can vary the volume and speed of songs, as well as putting a Half of Double Volume Effect to add a dynamic range to them.
Sounds are "8SVX” (8 bit sampled sounds) IFF files digitized sound effects. If the duration chosen is longer than the sound effect, your "plop" or "boing" will repeat until it reaches your selected cut-off point. You can vary the volume, sampled rate, and direction (a sliding bar going from the left to the right speaker). These guys thought of everything!
Deluxe Video also has an Animator-like feature for implementing polygon shapes and text. It is not as full featured as Animator, but still allows you to rotate, size, and move a short text string or any of the 23 different polygon shapes. These range from a square lo arrows to a floppy disk Deluxe Video Rovipw shape. With both the text and shapes you have the option of italic, shadow, or outline variations with 8 different pattern fills for the second shadow color.
Another big feature is the level of interactiveness built in to Deluxe Video. There is a KeyWait effect that will delay the video for a specified time or until a specified key is pressed.
You can also Chain different videos together giving you videos as long as you have disk storage. Combining those two features is the KeyChain Effect (nice joke, guys). This allows you to branch, upon a specific key being pressed, to any one of 10 videos. And of course each of those could contain a KeyChain, ad interactium...). Here is a mini- Adventure Construction Set tossed in! I can even see how it would allow programmers to map out their games visually before coding!
Finally (whew!) There are a also series of templates for some Quick & Dirty (well, not so dirty really) animation routines that are featured demos to access pie and bar charts data. These will automatically figure the percentages and sizes of the pie slices or bars. They are also nice as "tutorials" or examples of how best to set up your videos.
Let me also add that the manual is very complete and helpful.
It would have been nice if they could have alphabetized the reference section, especially since they make such a big deal out of not reading it straight through.
Deluxe Video comes with three disks; besides the Key-Disk Maker you also get an unprotected Player and a Parts & Utilities Disk. The Player has 7 well-done demos on it. Parts & Utilities contains three utilities: Framer for sequential animation using IFF files (DPaint or Images); Unpack for disassembling your videos so that you can re-use their constituent parts; and VidCheck a video compactor that also prints out a breakdown of your video creation including memory usuage, track and effects, parts, etc. Deluxe Video has the mark of a "meta-program" a program that generates other programs. I
predict that not only will we soon be awash in a sea of video, but also that a series of utilities will spring from the fullness of this program. Anybody want to try implementing sprites? How about a video with commercial breaks? "And now back to our show..."
• AC* COMING SOON The Ultimate Productivity Companion for your
Amiga MERIDIAN SOFTWARE INC po Box 890-408 1-713-488-2144
Houston. TX. 77289-040? ° 00 1 Roomers By The AMIGA Summer
is traditionally a slow time in the computer industry; this
summer is no exception, even for the Amiga. There hasn’t been a
lot of activity this past month, mainly because the summer hits
are out (Marble Madness, Digi-View, MIDI Gold, etc) and all the
developers are looking forward to Comdex Fall in Las Vegas.
This is the BIG show, the one where everybody has CHRISTMAS on
his mind. But 1hen again, some things ARE happening.
You may have heard reports that Commodore had decided to mass-merchandise the Amiga. Well, there's a long story behind that one, but the end result is that no, only specialty dealers will be carrying the Amiga.
Pascal and Lisp, you say? Metacomco delivered the new versions of both to Commodore quite some time ago.
Apparently it is still lost in Quality Assurance. Not actually LOST, mind you — it's just that they don't feel that it has been shaken out enough for public consumption.
Absoft, makers of AC Fortran tor the Amiga, now have a Basic compiler called (would you believe) AC Basic. Reportedly, AC Basic maintains complete compatibility with AMIGABasic, so you won't have to change all your files around to get them compiled.
News from CardCo: First of all, they went out of business. All their C-64 inventory was liquidated by Ihe bank. The aMEGA 1 MB board was purchased by a company called C. Ltd, which just happens So be a group of people that used to work for CardCo. The aMEGA RAM board is still shipping. Also coming from CardCo C. Ltd is a six-slot Zorro expansion box for $ 499.95 and two things to put into that box: A 2MB memory board for $ 799.95 and a 20MB DMA hard drive for $ 799.95, Let's hope we see them!
Meanwhile, if you have the aMEGA 1MB board, there are some 'enhancements' you might want to make. These enhancements do not void your warranty (honest!), and if you'd rather have C.Ltd. perform the modifications, you can send it to them and they will do them. The enhancements make your RAM run with no wait states. For the hardware hackers, here are the two fixes.
First, take the coveroff the drive and look at the unit. There Is a row of straps at the top center of the board next to a large capacitor. It should be strapped like so: oooooooco iii!: i ooooooooo! I t ooooooooo 12 3 4 5 6 7 8 9 If yours does not look like this — hooray, youve got a new board. If it does look like this, take an exacto knife and cut strap 5. Then solder a wire so that strap 5 is tied high. Your straps will now look like this: OOOOOOOOO I I I I 1 I I ooooooooo I I ooooooooo 1234 5 6789 Note that only strap 5 has changed — nothing else. Now try your board, it should
auto-config and pass all its tests. If it does, GREAT! You now have a fast RAM board. If the tests fail, you have to find a 150pf capacitor (or something close) and connect one end to pin 6 of the 7486, the other to pin 7 of the same chip. Here's what it should look like: 0 --- Add this 150pf cap 7 6 5 4 3 2 1 0 |--------------------------| resistor 0 I 7486 chip I 0 |-------------------------| 8 9 10 11 12 13 14 -------------------------------------- I Edge Connector -------------------------------------- Now try your board. If it doesn't work, better call C.Ltd!
In other hardware news, look for Polaroid to link up with a small software firm in producing some Amiga products, I have heard that the Polaroid Palette looks great on the Amiga.
A company called 10 Inc has decided to compete with CSA in the 68020 add-on market. They have a 68020 and 68881 board that plugs into the Zorro bus. A software company called Synergy Microsystems is rumored to be preparing a UNIX port to make use of this board. Watch this space for further details.
Metacomco has linked up with a company called Nine Tiles to produce a cheap network interface. It will allow linked Amigas to share file systems. Meanwhile, Ameristar has said that by the time you read this, you can buy an Ethernet interface, along with Sun Microsystem's Network File System (NFS).
NFS allows machines to talk to each other and share CPU and file space as it they were one machine. NFS runs under ragtag] ©©mraiptuifiOmjg™ ©HD®® 29 THIS COMPUTER AIN’T BI6 ENOUGH FOR THE TWO OF iSSl FIRE YOUR EDITOR.
And put Microsmiths, TxEd to use for you.
? FAST display updates — more than TWENTY TIMES as fast as "Ed".
? Designed from the ground up to take advantage of the Amiga user interface.
? Multiple windows.
? Very easy to learn, use menus for online help.
? Simple, elegant set of commands.
? Alternate command keys shown in menus allow fast command entry for experienced users.
? Compact code works well with Amiga's multi-tasking.
? The first Amiga director}’ requester that doesn’t make you wait.
?.-Ml around utility editor is good for programmers, and also useful as a simple word processor. Great for use with terminal programs.
? Pronounced "Tex Ed" as in “Tex Ed, the Faster Editor in Silicon Gulch.” To order, send $ 59.9,5 in check or money order plus $ 2.50 postage and handling to: Microsmiths’ TxEd. P.O. Box 561. Cambridge, MA 02140. Tel: (617) 576-2878.
Mass. Residents add 5% sales tax. Amiga is a trademark of Commodore-Amiga, Inc. Designed by C. Heath.
Dealer inquiries invited.
Roomers rzz.
Berkeley UNIX on lots of superminis and supermicros, as well as VAX VMS and PC- DOS. Of course, Ethernet and its utilities (telnet, ftp) are much more standard, and appear on most machines that support Ethernet. Also from Ameristar is a token passing network.
Look for a new ALICK soon; one that supports relative addressing. That should bring the size of executable programs down considerably. The Manx Aztec C linker supports relative addressing now; that’s why executables compiled and linked under Manx C are smaller than those under Lattice C. A new ALICK should decrease that gap.
For you COMAL fans, Unicomal in Sweden is porting it to the Amiga. Also being ported is Precision Software's Superscript program.
Hopefully things will pick up next month.
New England Technical Services
The AmigaBasic Tutorial Subroutines by Kelly Kauffman
CompuServe [70206,640] Subroutines are primarily what a
computer is really about.
Computers are great for doing monotonous things over and over again.
Well, that's what a subroutine is all about. It allows the computer to do a set series of steps on data — over and over again. Subroutines exist in programs to be referred to many times. A simple example of this would be a routine to add a score to a players points in a game, while updating the hi- score. Instead of having lines all over your program saying something like.. "SCORE=SCORE+POINTS" and "IFSCORE HISCORETHEN HISCORE=SCORE."
With that method, you would have LOTS of extra lines in your program which takes away precious memory. Instead, the alternative... subroutines!
Now in place of these lines all over the place, we have one area of the program set away to do just that... keep track of scores. Here would be an example of the subroutine: SCOREKEEP: SCORE=SCORE+POINTS IF SCORE HISCORE THEN HISCORE=SCORE RETURN That's a subroutine. They start by being named. This is done by typing a name and then following it with a colon. They end with the command "RETURN." To go to a routine (call a routine), you simply would say: GOSUB SCOREKEEP: Mbasic will automatically jump to wherever in the program SCOREKEEP: exists, execute ail the statements between SCOREKEEP: and
the RETURN statement, and then upon executing the RETURN statement, jumps back immediately to the NEXT command following the original GOSUB statement, and program execution continues normally.
It's also a good idea when using subroutines, to locate them at the bottom of the program. If the subroutines are located within the program, Mbasic will NOT jump over them just because they're subroutines, it will however, execute them step by step, and then generate an error when it tries to execute the RETURN statement. This happens because there was no GOSUB statement to "legally" enter the subroutine. Also, the last line of your program, that is, the last line before the subroutines begin, should be "END” to stop Mbasic from executing, there by keeping it from stumbling into the
When data is changed within a subroutine, such as our SCORE'S, and then Returned out of the subroutine, the data will NOT go back to it's original values before it entered the subroutine. The values will be the new changed values that the subroutine performed on the data.
Subroutines can be used for much more than just this rudimentary example. They can, for instance, be used in menu driven programs (menu driven meaning programs that present a menu of options, and then let the user select an option by pressing a key.) to execute complete commands and then RETURN to the main menu once the operation has been completed. Subroutines also make it nice to label the different parts of your program for easy identification and debugging. They are probably one of the best bug-fighting elements of a program that you can use.
One word of caution when using subroutines though... Make absolutely, positively, sure that that the steps you perform on the data are correct, because if they aren't....big, BIG, troublems can arise! II! (troublems=troubles+problems.)
When subroutines have been fine-tuned and are working fine, they can greatly reduce the time it takes to develop a good, working piece of software.
¦AO By Steve Michel Window Requesters in Amiga Basic AMIGABASIC allows the programmer to create programs that are very "user-friendly", with a minimum of work. One of the frtendites that is fast becoming a must for any and every program is the requester.
A requester is an area of the screen that "pops-up" and prompts the user for a response to a situation that has arisen in the program. This may range from requesting a file name to be loaded, confirming that the user does indeed wish to quit a particular application, or informing the user of some fatal error that has just occurred. The program listing included below will allow you to easily add this touch to your programs.
Window Requester is generic in that it allows for maximum flexibility in where the requestor appears, what prompt it contains and its color combinations. It is designed to work for any request that needs a 'yes' or 'no' response. The actual program itself is contained between the SUB REQUESTER STATIC: line and the END SUB line. All lines above the STOP command are a simple driver to show the ease of use of Window Requester. Window Requester is actually a SUBPROGRAM. This means that although it is contained within the framework of a larger program, when it is called by the larger program, it
acts autonomously. All variables contained within the SUBPROGRAM are known only to the SUBPROGRAM, and are thus referred to as 'local' variables.
The net effect of this situation is that the SUBPROGRAM can be incorporated "as-is" into several different programs without fear of the SUBPROGRAM corrupting variables with the same name in the larger program. It also means that we can cut down on the amount of programming that we as programmers must do.
Once a generalized SUBPROGRAM has been developed and debugged, it can be stored on disk and then added to any program that requires it. Ideally then, the programmer could begin creating a whole library of specialized SUBPROGRAMS and simply add them to the program that is currently being created. This concept of programming is often referred to as modular programming. Being completely independent sometimes has its drawbacks and thus a way of communicating information between the SUBPROGRAM and the larger program has been provided by the SHARED statement as indicated in the second line of the
SUBPROGRAM example. Any data that is to be passed to or from the SUBPROGRAM must be passed through a variable listed in a SHARED statement. Any variable so defined becomes known to both the larger program and the SUBPROGRAM.
In this example, this includes all the information needed to make the requester function as desired. Each variable is described in REM statements at the beginning of the listing and are fairly self-explanatory.
A word about the color numbers, however, may be appropriate. Color numbers zero through three are listed as the default values in the driver, assuming that the larger program is working within a standard AMIGABASIC screen which has a depth of two. If your application has a deeper screen, the color choices may be increased as allowed. Color zero is the default screen background color (usually blue) and should not be used to print a message as it will not be seen againstthe same color background.
The SUBPROGRAM works by opening a window within the current screen and then directing output to that window.
This is accomplished by the WINDOW and WINDOW OUTPUT statements.
Once output is directed to a window, all locating statements (LINE, LOCATE, PAINT) are relative to the upper left hand corner of the window and NOT the screen in which the window is open. The location of the window within the screen is specified by the variables REQX1 and REQY1 and passed from the calling program. After the requester is drawn, the routine WAITER then waits for the mouse to be positioned and clicked over either the "YES" or "NO" response. The SUBPROGRAM will return the selected answer to the calling program via the variable CHOICE$. Just before exiling the SUBPROGRAM, a WINDOW
CLOSE command causes the window and all the displayed data to be removed from the screen. The important feature of this windowing technique then becomes apparent. The information on the main screen that was covered by the requester, is now redrawn as though nothing had occurred.
All this is done automatically by the operating system.
Once the program is entered and saved to disk as a regular AMIGABASIC program, it should also be saved in ASCII format. This is required if it is to be added as a SUBPROGRAM to a larger program at some later time.
To save the program in this manner, enter on the output window SAVE "WINDOW„REQUESTER“, A. Make sure the, A is outside the quotes. You may also select SAVE AS from the menu, again being careful to use the quotes correctly.
When the SUBPROGRAM module is needed, it may be added to an existing program by using the MERGE command. The correct syntax is MERGE "filename", where filename is the name of a file saved in ASCII format. The SUBPROGRAM will be appended to the end of the program currently in memory. It may then be moved with the CUT and PASTE operations. How easy can it get?
I hope this small piece of coding will enhance your program appearance and speed along your program development.
REM Window Requester by Steve Michel REM call 'REQUESTER' whenever a REM YES or NO answer is required REM' set following variables to desired values before calling reoxl = x position of top left-hand corner of requester box reqyl = y position of top left-hand corner of requester box backcol = background color of requester box msgcol = color of written message in box outcol = requester outline color msg$ = message prompt to be displayed 22 characters maximum titlesS = the title to appear in the requester window after returning from requester, the variable choice$ will equal
"YES" or "NO" reflecting the user's selection CLS INPUT "starting x location"; reoxl INPUT "starting y location"; reqyl INPUT "background color (0-3)"; backcol INPUT "message color (0-3)"; msgcol INPUT "outline color (0-3)"; outcol INPUT "title";title$ INPUT "message string"; msg$ CALL REQUESTER LOCATE 20,1: PRINT "THE USER CHOSE... "; CHOICES STOP SUB REQUESTER STATIC: SHARED titles, msg$, reoxl, reqyl, backcol, msgcol, outcol, CHOICES reox2 = reoxl + 20 6: reqy2 = reqyl + 47 yesx *» 23: yesy = 26: nox = 134: noy = yesy WINDOW 2, titles, (reoxl, reqyl) — (reox2, reqy2),0 WINDOW OUTPUT 2: PAINT
(100,20), backcol msgpadS = " " + LEFTS(msg$,22) + " " msglen = LEN(msgpadS) xloc = INT((24-msglen) 2) + l: xline = (xloc-l)*8 COLOR msgcol: LOCATE 2, xloc: PRINT msgpadS; LINE (xline,7) — (xline+8*msglen-l, 7), 0 LINE (yesx, yesy) — (yesx+57, yesy+18), outcol, bf COLOR msgcol: LOCATE 5,5: PRINT " YES "; LINE (32,31) — (71, 31), 0 LINE (nox, noy) — (nox+50, noy+18), outcol, bf LINE (144,31)-(175,3I),0 LOCATE 5,19: PRINT " NO "; WAITER: CHOICES = "none" WHILE MOUSE(0) 1 WEND xpos = MOUSE(3): ypos = MOUSE(4) IF ypos yesy OR ypos yesy+18 THEN WAITER IF xpos = yesx AND xpos = yesx+54 THEN CHOICES
= "YES" IF xpos = nox AND xpos = nox+48 THEN CHOICES = "NO" IF CHOICES = "none" THEN WAITER WINDOW CLOSE 2 END SUB
• AO
- AMIGA OWNERS Window Requesters Program Listing: The Memory
ONLY WHAT WORKS, SATISFACTION GUARANTEED ECE MIDI MUSICAL INSTRUMENT DIGITAL INTERFACE The ECE MIDI plugs Into the serial port on the AMIGA and allows It to couunicate with nidi compatible musical Instruments and equipaent. For your convenience the BCE MIDI has a RS-232 bypass port so you do not have to disconnect your equipaent when you want to use a noden or a serial printer.
Encased in a aaall attractive Aalga bone colored box, the ECE MIDI has In, Out, and Thru ports.
Ftaiaorch & Development Suggested retail) (39.93 SPEEDY AMIGAS A COLLECTION OF DOS UTILITIES FOR THE AMIGA both the novice and experienced handy DOS routines that can be with the souse or keyboard, built in requestors assure that SPEEDY AMIGAS, developed with user in aind, contains over 30 quickly and easily executed Pull-down aenus, windowing, and syntax errors are kept to a ainlaua. Several existing AalgosDOS routines have been enhanced and new features, such as Spooler, Vhere Is, Undelete, and Function Keys, have been added. Fast and efficient, SPEEDY AMIGAS siaplifies disk operation
utilities and enhances the Aalga user interface.
Suggested retail) (64.93 1 tn u wjii i*S i.Dim. 911 1 «Y16 I'D i«a Cupj *P, AJ Dm Jel 3912 Delru 3912 Du ¦i OiU Cifrj
* +w 2340* Echo 360 far KLMHNG rrerr1 Project 1 Directory
Other Util iucx Help Copy ic Oeleu ad Dni Copy a * Execute a e
File Note a n Format a 1 Iruull Join aj Liu at Protect a 9
RcUbei E-i Return* a r Se*n: h as Type a i Undel a u Where li a
AMIGA REF, DOS commands sre logically grouped by type — DISK,
FILE, UTILITY, and BATCH — to help you quickly find the coiaand
or syntax that you need. Tips on getting started, examples of
usage for AaigaDOS routines, and a complete listing of
WILDCARDS, DEVICE and CONTROL CODES are included. Advice on
working with a RAM DISK and getting AMIGA HELP are also
Suggested retail) (2.93 Aalga and AalgsDoe are tredeaarks of Coamodore‘Aalga, Inc. ECE Research 6 Davalopmant Corp. 1651 H. Monroe Street Tallahassee, FI. 32303 904-681-0786 fUiaarch & D«»»ropm«ni Dealer Inquires Welcoae ROT By Colin French; if you're itching la experiment with 3D graphics on your Amiga, try this AmigaBasic program, With ROT you can create an object composed of up to 95 points and 95 filled polygons. All you need is at least 512K, a mouse, and the patience to find the mistakes you make while typing it in!
(ROT is available on an Amicus disk. The disk also contains several demo objects.) ROT requires a lot of memory. If your WorkBench does not show at least 380,000 bytes Iree, do not try to run it. A normal two drive 512K system should have this much available after booting up the WorkBench disk. A file that came on the AmigaBasic disk called 'graphics. bmap' must be on the same disk as ROT.
AN OVERVIEW In ROT an object is composed of filled polygons, like the faces of a cube. A polygon is created by selecting the points used as its vertices. Each polygon must have at least three vertices but no more than six. A different color can be assigned to each polygon. Careful choice of hues can produce a shaded effect. Once an object is created, a series of frames are drawn each with the object in a different position. The frames are captured as bitmapped images. By showing them quickly in sequence Ihe object will go through an animated action. In every frame, you specify the rotations
and translations of the object along ail three axes. For example, using a larger and larger V axis rotation in each frame produces a spinning action when the sequence is played back, EDITING OBJECTS When ROT is first started the Object Editor screen is displayed. You can switch to the Action Editor by selecting the first item in the ACTION menu. To get back, just choose the top item in the OBJECT menu. On the left of the Object Editing screen are three views of your object showing its top, side, and front. To see how these fit together, imagine folding the top and front views away from you
until their edges touch. You now have a half-cube that surrounds your object. Any rotations applied to the object will take place around the center of this cube. In all three views a green circle highlights the currently selected point. Two points will often appear to be right on top of one another. Carefully check the position of the highlight in ait three views to make sure you've selected the point you really want.
A point with all three coordinates set to zero is considered nonexistent and is not displayed. Clicking in a view will change two of the point's coordinates so it ends up under the cursor. Which two coordinates are changed depends on the view in which you click. By doing this in at least two views you can position the point exactly where you want it in 3D space. The edges of the currently selected polygon are highlighted in orange. Of course, if it does not have any vertices chosen for it yet then the polygon doesn't exist and no highlighting appears.
On the upper left of the Object Editing screen is a block of controls that deal with points. At the top is a slider for picking the point to modify. Click on the arrows to go to the next or previous point, or anywhere within the slider to quickly skip through the list. The point you select is highlighted in the three views on the left and its coordinates can be changed by clicking within the views. To quickly set all the coordinates of a point to zero, click on the 'ZERO POINT' box. This becomes a nonexistent point, so be careful that no polygon was using it as a vertex.
Below the point controls is another set used to edit polygons. A polygon is created by selecting the points that form its vertices. Use the points slider to highlight the point you want then click on 'ADD POINT to use it as a vertex. A polygon can have between three and six vertices. Its edges are highlighted in orange in the three views. The order in which you specify the points is important. Go in one direction around the perimeter of the polygon. If you see the edges crossing you'll know the points are out of order. Click on 'UNDO POINT’ to back up through the list of vertices until the
problem is eliminated. To get rid of the polygon entirely click on 'DELETE POLYGON’.
Down at the bottom of the screen is a color palette. The color that will be used to draw the currently selected polygon is highlighted with an orange rectangle. To change it, click on the color you want. By selecting items in the OBJECT menu you can save the database of your 3D object, load a previously saved object, or erase the object and start over.
The files saved will have the suffix '. ROTOBJ' appended to the name you supply. When loading an object do not type this suffix, just the filename. If you forget the name of a file, select 'Files' from the ROT menu and try to spot it as the list scrolls by!
EDITING ACTIONS Pick the first item in the ACTION menu to display the Action Editing screen. The top section is where your object will be drawn and along the bottom are several controls. Use the slider on the left to select the frame to work with. In each frame you can set the rotations and translations of the object along all three axes. To change a particular value, click on it and type the number you want. Values are checked to make sure they fall within acceptable limits. An orange arrow will appear to let you know that the frame needs to be redrawn.
Clicking on the 'REDRAW FRAME' button will recalculate the image in the frame so it corresponds to the factors you've set Then advance to the next frame, set its factors and redraw its image. Continue in this manner until all 12 frames are done. If you go back to the Object Editor screen, modify the object and then return, the frames will not match the revised object.
To update them you could advance to each one and click on 'REDRAW FRAME' or you can use 'REDRAW ALL' to do each in sequence. Once all 12 frames have been drawn, click on 'PLAY' to show the animation sequence. Adjust the HOUSE 11600 S.W. FRWY., STE. B-216 HOUSTON, TX. 77031 HARDWARE Sony RGB Monitor Ava tex 12B0 Modem SI 2 K Color System Canon PJ-1B3SJA Color Printer SOFTWARE Aegis Act iv i s i on Byte By Byte Di g i-v i ew Infocom Lat 11ce Mi cro-Sys terns Mi ndscape TDI Chang Labs Eletronic Arts JHM Manx Mimetics New Horizons VIP Technologies Above is only a sample List, i ny speed slider as
required. To show the frames continuously, look under the ACTION menu and select 'REPEAT AT END’.
A checkmark next to this item indicates when it is activated.
Another option in the menu is 'REVERSE AT END', If you choose this the frames will be shown from first to last and then back to the first again. Both these options can be combined. To halt a continuously running sequence, click on 'STOP'. Other items in the ACTION menu will save the object’s action, load an action from disk, or erase the current action and start over. The file that is saved does not include the bitmapped frames, just the factors that are used to draw them. When you load an action, click on 'REDRAW ALL' to regenerate the frames. They are no! Saved because they occupy almost
109K. It would require over six minutes to load or save them under AmigaBasic. Oh please oh mighty Microsoft, give us BLOND and BSAVE commands next time!
The final item in Ihe ACTION menu is 'CALC BETWEEN...’. This will calculate and draw the frames that lie between any two that you specify. For example, set the V rotation of frame one to 90 degrees and that of frame seven to 180. Since you want to take six steps to go from 90 degrees to 180, each frame inbetween will have a V rotation 15 degrees greater than the previous one. You could do this yourself by advancing one frame at a time, setting the V rotation and redrawing it, but 'CALC BETWEEN...' automates the procedure. The direction of rotation is always chosen to move the object through
the smallest angle possible. If you set the starting frame to zero degrees and the ending frame to 270, then the object will be rotated -90 degrees, not + 270 degrees.
HINTS AND CAVEATS The first time any AmigaBasic routine is used, it is very slow.
Subsequent calls to the same part of the program execute at a normal speed. There are some parts of ROT, such as the input routine for filenames, which are so slow at first that you might suspect the program has 'hung'. Exercise a bit of patience before pummelling the computer. When the frames are played back there is a fair amount of flicker. This may be caused by basic drawing the bitmapped images in the middle of a screen scan. Sometimes changing the colors of an object helps minimize this problem.
The X and V translations are not true 3D transformations.
Instead they indicate where to draw the frame on the screen.
This was done to reduce the size of the images and therefore the amount of memory required to store them. As each succesive frame is displayed it overlays the previous one and thereby erases it. If you use loo great an X axis translation with a large object then parts of it may not be erased properly.
Either make a smaller object (use a Z translation to reduce its apparent size) or smaller changes in X translation.
The ROT program itself fills the standard 25K basic workspace. I had to delete most of the comments 1o get it to fit. Something else that got squeezed out is error checking during disk I O, so be sure you know the correct name of a file when you load it. Usethe 'Files' option in the ROT menu to check what's on the disk.
GOTO main: intro: PRINT" ROT PRINT" By: Colin French May 1986 " Last Revision: 19 06 86 CJF " PRINT" PRINT" PRINT" PRINT" Copying is encouraged!" Note: AmigaBasic routines are very " slow the first time they are used. " Be patient if ROT seems to 'hang'."
PRINT PRINT PRINT" PRINT" PRINT" RETURN main: IP FRE(0) 1000006 THEN CLEAR,150009S GOSUB init quit=0 WHILE NOT(quit) b=MOUSE (0) x=M0USE(1) y=M0USE(2) IF b 0 THEN IF objscr THEN GOSUB edobj IF actscr THEN GOSUB edact END IF m=MENU(0) i=MENU(1) IF m 0 THEN GOSUB menuchk Z$ =INKEY$ IF z$ "" THEN GOSUB keychk WEND GOSUB cleanup END menuchk: ON m GOSUB rotmenu, objmenu, actmenu RETURN rotmenu: IF i=l THEN GOSUB listfiles IF i=3 THEN quit=(-l) RETURN objmenu: IF i=l AND objscr=0 THEN objscr=(-1) actscr=0 MENU 2,1,2 MENU 2,2,1 MENU 2,3,1 MENU 2,4,1 MENU 3,1,1 MENU 3,2,0 MENU 3,3,0 MENU 3,4,0 MENU
3,6,0 MENU 3,7,0 MENU 3,8,0 GOSUB drw. objscr END IF IF i=2 THEN GOSUB loadobj IF i=3 THEN GOSUB saveobj IF 1=4 THEN GOSUB newobj RETURN actmenu: IF i=l AND actscr=0 THEN actscr=(-1) objscr=0 MENU 3,1,2 MENU 3,2,1 MENU 3,3,1 MENU 3,4,1 MENU 3, 6,1+ABS (actrpt) MENU 3,7,1+ABS(actrev) MENU 3,8,1 MENU 2,1,1 MENU 2,2,0 MENU 2,3,0 MENU 2,4,0 FOR n=l TO 12 frmchg (n)=1 NEXT GOSUB drw. actscr END IF IF i=2 THEN GOSUB loadact IF i=3 THEN GOSUB saveact IF i=4 THEN GOSUB newact IF i=6 THEN actrpt=NOT(actrpt) MENU 3,6,1+ABS(actrpt) END IF IF i=7 THEN actrev=NOT(actrev) MENU 3,7,1+ABS(actrev) END IF IF i=8
THEN GOSUB calctween RETURN listfiles: s5="Files on:" GOSUB drw.filereg e$ ="DF0:" GOSUB getstring2 IF s$ "c" AND s$ "C" AND s$ "" THEN CLS FILES s$ PRINT GOSUB click. continue IF objscrOO THEN GOSUB drw. objscr ELSE GOSUB drw. actscr END IF GOSUB nobut END IF RETURN loadobj: s$ ="Load:" GOSUB drw.filereq GOSUB getstring IF s$ "C" AND s$ "c" AND s$ "" THEN s$ =s$ +". ROTOBJ" OPEN s$ FOR INPUT AS 1 FOR n=0 TO 95 FOR n2=0 TO 3 INPUT l, pt (n, n2) NEXT NEXT FOR n=0 TO 95 FOR n2=0 TO 6 INPUT 1, poly (n, n2) NEXT NEXT FOR n=0 TO 95 INPUT 1, polyelr (n) NEXT FOR n=0 TO 95 INPUT 1, vrt (n) NEXT CLOSE 1 pt =
l poly=l END IF GOSUB drw. objscr RETURN saveobj: s$ ="Save:" GOSUB drw.filereq GOSUB getstring IF s$ "C" AND AND s$, M THEN s$ =S$ +". ROTOBJ" OPEN s$ FOR OUTPUT AS 1 FOR n=0 TO 9S FOR n2=0 TO 3 PRINT l, pt (n, n2); NEXT NEXT FOR n=0 TO maxpoly FOR n2=0 TO 6 PRINT 1, poly (n, n2); NEXT NEXT FOR n=0 TO maxpoly PRIM l, polyelr (n); NEXT FOR n=0 TO maxpoly PRINTffl, vrt(n); NEXT CLOSE 1 END IF GOSUB drw. objscr RETURN newobj: s$ =" erase current object.?"
GOSUB you.sure IF sure THEN FOR n=0 TO maxpt FOR n2=0 TO 2 pt (n, n2) =0 NEXT NEXT FOR n=0 TO maxpoly FOR n2=0 TO 6 poly (n, n2}=0 NEXT polyelr (n)=0 vrt(n) =0 NEXT pt=l polypi END IF GOSUB drw. objscr RETURN loadact: s$ ="Load:" GOSUB drw.filereq GOSUB getstring IF £$ "C" AND s$ "c” AND s$ "" THEN s$ =s$ +". ROTACT" OPEN s$ FOR INPUT AS 1 FOR n=l TO 12 INPUT 1, xrot (n), prot (n), zrot (n) INPUT 1, xtran (n), ytran (n), ztran (n) NEXT INPUT 1, spd, actrpt, actrev CLOSE 1 38 WiumuD© 11 s frm=l FOR n=l TO 12 frmchg (n) =1 NEXT GOSUB drw.frnmum GOSUB drw. spdnum GOSUB drw. factors GOSUB
drw. update MENU 3,6,1+ABS(actrpt) MENU 3,7,1+ABS(actrev) END IF LINE (0, 0) — (311, 131), 0, bf GOSUB putfrm RETURN saveact: s$ ="Save:“ GOSUB drw.filereq GOSUB getstring IF s$ ‘'C" AND a$ — "c" AND 6$ "" THEN b$ =b$ +". ROTACT" OPEN s$ FOR OUTPUT AS 1 FOR n=l TO 12 PRINT!, xrot (n);prot (n); zrot (n); PRINTjfl, xtran (n);ytran (n); ztran (n); NEXT PRINTjfl, spd; actrpt; actrev; CLOSE 1 END IF LINE (0,0)-(311,131), 0, bf GOSUB putfrm RETURN newact: s$ =" erase current action?"
GOSUB you.sure IF sure THEN FOR n=0 TO 12 xrot (n) =0: prot (n) =0; zrot (n) =0 xtran (n) =0;ytran (n)=0: ztran (n) =0 NEXT spd=20 actrpt=0 actrev=0 MENU 3, 6, 1 MENU 3,7,1 frm=l END IF GOSUB drw. actscr RETURN calctween: GOSUB gettween IF etfun endfrm THEN SWAP 6tfrm, endfrm stp=endfrm-stfrm LINE (0,0) -(311, 131), 0, bf IF stp l THEN xrot-xrot (endfrm) — xrot (stfrm) IF xrot 180 THEN xrot= (360-xrot) * (-1) IF xrot -180 THEN xrot=xrot+360 stpxrot=xrot stp prot=prot (endfrm) — prot (stfrm) IF prot 180 THEN prot= (360-yrot) * (-1) IF prot -180 THEN prot=prot+360 stpyrot=prot stp
zrot=zrot (endfrm) — zrot (stfrm) IF zrot 180 THEN zrot=(360-zrot)*(-1) IF zrot -180 THEN zrot=zrot+360 stpzrot=zrot stp xtran=xtran (endfrm) — xtran (stfrm)
- ROT Gtpxtran=xtran etp ytran=ytran (endfrm) — ytran (stfrm)
stpytran=ytran etp ztran=ztran (endfrm) — ztran stfrm)
stpztran=ztran stp FOR frm=stfrm+l TO endfrm-1 n=frm-stfrm xrot
(frm) =xrot (stfrm) +INT (stpxrot*n) IF. Xrot (frm) 359 THEN
xrot (frm)=xrot (frm) — 360 IF xrot (frm) 0 THEN
xrot (frm)=xrot (frm)+360 prot (frm)=prot (Btfrm)+INT(stpyrot*n) IF
prot (frm) 359 THEN prot (frm)=prot (frm) — 360 IF prot (frm) 0 THEN
prot (frm)=prot (frm)+360 zrot (frm)=zrot (stfrm)+INT(stpzrot*n)
IF zrot (frm) 359 THEN zrot (frm)=zrot (frm) — 360 IF zrot (frm) 0
THEN zrot (frm)=zrot (frm)+360
xtran (frm)=xtran (stfrm)+INT(stpxtran*n)
ytran (frm)=ytran (stfrm)+INT(stpytran*n)
ztran (frm)=ztran (stfrm)+INT(stpztran*n) GOSUB drw.frmnum GOSUB
drw. factors GOSUB high. redraw GOSUB drw.frame GOSUB getfrm
frmchg (frm)=0 GOSUB drw. update GOSUB unhigh. redraw NEXT
frm=stfrm GOSUB drw.frmnum GOSUB drw. factors END IF LINE (0,0)
-(311,131), 0, bf GOSUB putfrm RETURN gettween: GOSUB
drw. tweanreq maxchar=2 xt=188: yt=74 GOSUB getstring
stfrm=VAL(s$) IF Etfrm l THEN ctfrm=l IF stfrm 12 THEN stfrm=12
yt=82 GOSUB getstring endfrm=VAL(s $) IF endfrm l THEN endfrm=l
IF endfrm 12 THEN endfrm=12 RETURN drw. tweenreq: LINE (58, 4
8)- (254, 92), 0, bf LINE (60,50)-(252,90),3, bf LINE (61, 51) (251, 89),2, bf CALL moves (rpS, 76, 66) PRINT"Calculate
Inbetween" CALL moves (rpS,92,74) PRINT"From frame:" CALL
moves (rpS,108,82) PRINT"To frame:'' RETURN drw.filereq: LINE
(50, 48)-(262, 92),0, bf LINE (52, 50)-(260, 90),3, bf LINE
(53, 51) — (259, 89), 2, bf Great Cover-ups Protect your
investment with opaque vinyl covers.
Amiga and Monitor $ 8.95 Printers $ 4.95 (Specify brand, model and width) 3 Vz" Disk Drive $ 1.95 5 la " Disk Drive $ 1.95 51decar $ 3.95 TO: GREAT COVER-UP5 Phone: (503) 246-8977 6805 5W 8th Avenue Portland, Oregon 97219 send ME:
- Amiga & Monitor Covers @ 8.95 ea
- @ ea
- ----.-@ _ ea Please add $ 1.25 each for postage and handling
Dealer inquiries invited CALL moves (rpS, 60, 66)
PRINT"Temporary File Requestor" CALL moves (rpS,92,74) PRINT"('C
to Cancel)" CALL moves (rpS,60,82) PRINT £$ xt=68+LEN(b$)*8
yt=82 maxebar=23-LEN(e$) RETURN you.sure: GOSUB drw.surereq
GOSUB nobut answer=0 WHILE NOT (answer) b MOUSE (0) X MOUSE(1)
y=MOU SE(2) IF b 0 THEN IF y 80 AND y 92 THEN IF x 75 AND
x 127 THEN sure= (-1) answer= (-1) END IF IF x 187 AND x 23 9
THEN sure=0 answer= (-1) END IF END IF G0SU3 nobut END IF WEND
RETURN ©©mnpyitnig)™ © HD®® 39 ROT: SHARPEN YOUR IMAGE win
Digital Color Slides Posters For Professional Presentations,
Art Portfolio or even for Fun!
Let your Amiga images shine with the quality you deserve. Any image created from Deluxe Paint, Graphicraft or Propaint can be made into high quality Digital* 35mm Slides or Studio Posters No additional software or hardware needed. Just send us your files as they are stored on disk and in 2-3 days plus delivery) you'll get back the proud results. Slides are 513 each. Matte or gloss Studio Print Posters 11x17 are $ 25.50 plus slide.
Also available. Digital Color Separations (as seen in AmigaWorld Magazine) and 8x10 Color Studio Prints and Transparencies. Orders must be prepaid (with sales lax in California.) Send your disk and check to: 555 19th St. 2nd Fir.
H ImageSet = ¦ — corn.
San Fran., Ca. 94107
- corp. 415 626-8366? Images are not captured by photographic
Drw.surereq: LINE(43,4 8)-(270, 100), 0, bf LINE(45,50)-(268, 98), 3, bf LINE(46,51)-(267,97),2, bf CALL moves (rpS,53, 66) PRINT"Axe you SURE you want to" CALL moves (rpS,53,74) PRINT LEFT$ (s$,24) LINE(75,80)-(127,92), l, b LINE(187,80)-(239, 92), l, b CALL moves (rpS,93, 89) delpoly: IF vrt (poly) 0 THEN c=polyelr (poly) GOSUB unbigh.clr FOR n=0 TO vrt (poly) poly (poly, n) =0 NEXT vrt (poly)=0 polyelr (poly)=0 c=polyelr (poly) GOSUB high.clr END IF GOSUB drw.views GOSUB nobut RETURN selelr: IF x 191 AND x 304 THEN c=INT((x-192) 14)+INT((y-143) 7)*8 IF cOpolyelr (poly) THEN GOSUB high.clr SWAP
c, polyelr (poly) GOSUB unhigh.clr END IF END IF RETURN PRINT"OK" CALL moves (rpS,190, 89) PRINT"CANCEL" RETURN keychk: RETURN edobj; IF x 189 AND x 306 THEN IF y 24 AND y 32 THEN GOSUB ptslider IF y 82 AND y 90 THEN GOSUB polyslider IF y 36 AND y 48 THEN GOSUB zeropt IF y 94 AND y 106 THEN GOSUB adapt IF y 110 AND y 122 THEN GOSUB undopt IF y 126 AND y 138 THEN GOSUB delpoly IF y 142 AND y 171 THEN GOSUB selelr END IF IF x 3 AND x 82 AND y 3 AND y 82 THEN pt (pt, 2) = (x-vxl) * (-1) pt (pt, 0) = (y-vyl) * (-1) GOSUB drw.views GOSUB nobut END IF IF x 3 AND x 82 AND y 96 AND y 175 THEN pt (pt, 2)
= (x-vx2) * (-1) pt (pt, 1) = (y-vy2) * (-1) GOSUB drw.views GOSUB nobut END IF IF x 97 AND x 176 AND y 96 AND y 175 THEN pt (pt, 0)=x-vx3 pt (pt, l) = (y-vy3)* (-1) GOSUB drw.views GOSUB nobut END IF RETURN zeropt: p=pt GOSUB unhigh. pt GOSUB erase. pt pt (pt, 0) =0 pt (pt, 1)=0 pt (pt,2)=0 GOSUB drw. pt GOSUB high. pt RETURN adapt: IF vrt (poly) 5 THEN BEEP.-RETURN IF pt (pt, 0) =0 AND pt (pt, 1) =0 AND pt (pt,2)=0 THEN RETURN vrt (poly)=vrt (poly)+1 poly (poly, vrt (poly))=pt GOSUB drw.views GOSUB nobut RETURN undopt: IF vrt (poly) 0 THEN poly (poly, vrt (poly))=0 vrt (poly)=vrt (poly) — 1 END IF GOSUB
drw.views GOSUB nobut RETURN drw. views: GOSUB erase.views p=pt GOSUB high. pt FOR p=l TO maxpt GOSUB drw. pt NEXT p=pt t=poly FOR poly=l TO maxpoly GOSOB drw, poly NEXT poly=t GOSUB high.poly RETURN erase. views: LINE(2,2)- (83,83),0, bf LINE(2,95)-(83,176),0, bf LINE(96,95)-(177,176),0, bf RETURN drw.pt: IF pt (p,0) 0 OR pt (p,1) 0 OR pt (p,2) 0 THEN PSET(yxl-pt (p,2), vyl-pt(p,0)) PSET(yx2-pt (p,2), vy2-pt(p,1)) PSET(yx3+pt (p,0), vy3-pt(p,1)) END IF RETURN erase.pt: COLOR 0 GOSUB drw. pt COLOR 1 RETURN high.pt: CIRCLE (vxl-pt(p,2), vyl-pt (p,0)),2,2 CIRCLE(yx2-pt (p,2), vy2-pt(p, l)),2,2
CIRCLE(yx3+pt (p,0), vy3-pt(p,1)),2,2 RETURN unhigh.pt: CIRCLE(yxl-pt (p,2), vyl-pt(p,0)),2,0 CIRCLE(yx2-pt (p,2), vy2-pt (p,1)),2,0 CIRCLE(yx3+pt (p,0), vy3-pt(p,1)),2,0 RETURN drw.poly: IF vrt (poly) 0 THEN PSET(yxl pt (poly (poly,1),2), vylpt (poly (poly,1),0)) PSET (yx2-pt (poly (poly,1),2), vy2- pt (poly (poly,1),1)) PSET(yx3+pt (poly (poly,1),0), vyS- pt (poly (poly,1),1)) IF vrt (poly) 1 THEN FOR n=2 TO vrt (poly) LINE(yxl-pt (poly (poly, n-1),2), vyl- pt (poly (poly, n-1),0)) — (yxl-pt (poly (poly, n),2), vyl- pt (poly (poly, n),0)) LINE(yx2-pt (poly (poly, n-1),2), vy2- pt (poly (poly, n-1),1)) — (yx2-pt (poly (poly, n),2), vy2-
pt (poly (poly, n),1)) LINE(yx3+pt (poly (poly, n-1),0), vy3- pt (poly (poly, n-1),1)) — (yx3+pt (poly (poly, n),0), vy3- pt (poly (poly, n),1)) NEXT Capturayourlavorlto plcturaafromDeluxePaint*, Graphic rah’ andlmagea* on Instant print Him u»ing tha Polaroid’ 600 Camara Included with tha Screenahootet’ or uaa tha Screanahooter with our 15mm Camara toot Included) to make proaentalion atidea.
Lor Screenshooter Kit: Hood for A3" monitor, adaptor tens, Polaroid 600 camera, 35 mm camera bracket.
Add $ 4.00 lor shipping.
V ISA, AMEX, Mastercard Accepted
* Trademarks of various corporations.
Professional Network Services Corporation 3A5 A Chestnut Street Needham, MA02A92 _(547) 449-6460_ LINE(yxl-pt (poly (poly, n-1),2), vyl- pt (poly (poly, n-1),0)) — (yxl-pt (poly (poly,1),2), vyl- pt (poly (poly,1),0)) LINE(yx2-pt (poly (poly, n-1),2), vy2- pt (poly (poly, n-1),1)) — (yx2-pt (poly (poly. l),2), vy2- pt (poly (poly,1),1)) LINE(yx3+pt (poly (poly, n-1),0), vyl- pt (poly (poly, n-1),1)) — (yx3+pt (poly (poly,1),0), vyl- pt (poly (poly. l),1)) END IF END IF RETURN erase.poly: COLOR 0 GOSUB drw.poly COLOR 1 RETURN high.poly: COLOR 3 GOSUB drw.poly COLOR 1 RETURN unhigh, poly: GOSUB drw.poly RETURN high.clr:
y2=INT(c B) x2=c-y2*8 LINE(192+x2*14,143+y2*7) ¦ (205+x2*14,149+y2*7),3, b RETURN unhigh.clr: y2=INT(c 8) x2=c-y2*8 LINE (192+x2*14,143+y2*7)- (205+x2*14,149+y2*7),0, b RETURN ptslider: IF x 197 THEN p=pt GOSUB unbigh. pt pt=pt-l IF pt l THEN pt=l p=pt GOSUB drw.ptnum GOSUB high. pt GOSUB nobut ELSEIF x 298 THEN p=pt GOSUB unhigh. pt pt=pt+l IF pt maxpt THEN pt=maxpt p=pt GOSUB drw.ptnum GOSUB high. pt GOSUB nobut ELSEIF x 199 AND x 295 THEN p=pt GOSUB unhigh. pt pt=x-199 p=pt GOSUB drw.ptnum GOSUB high. pt GOSUB nobut END IF RETURN polyslider: IF XC197 THEN c=polyelr (poly) GOSUB unhigh.clr GOSUB
unhigh.poly poly=poly-l IF polyCl THEN poly=l GOSUB drw. polynum GOSUB high.poly c=polyelr (poly) GOSUB high.clr GOSUB nobut ELSEIF x 2 98 THEN c=polyelr (poly) GOSUB unhigh.clr GOSUB unhigh.poly poly=poly+l IF poly maxpoly THEN poly=maxpoly GOSUB drw. polynum GOSUB high.poly c=polyelr (poly) GOSUB high.clr GOSUB nobut ELSEIF x 199 AND x 295 THEN c=polyelr (poly) GOSUB unhigh.clr GOSUB unhigh.poly poly=x-199 GOSUB drw. polynum GOSUB high.poly c=polyelr (poly) GOSUB high.clr GOSUB nobut END IF RETURN edact: IF x 4 AND x 122 AND y 150 AND y 158 THEN GOSUB frmslider: RETURN IF x 40 AND x 250 AND y 136 AND
y 148 THEN GOSUB drw.frm:RETURN IF x 140 AND x 250 AND y 152 AND y 164 THEN GOSUB drw. allfrmrRETURN IF x 260 AND x 306 AND y 136 AND y 148 THEN GOSUB playbut: RETURN IF x 260 AND x 306 AND y 152 AND y 164 THEN GOSUB stopbut: RETURN IF x 263 AND x 303 AND y 178 AND y 183 THEN GOSUB spdslider: RETURN IF y 168 AND y 176 THEN IF x 92 AND x 140 THEN GOSUB mod. xrot: RETURN IF x 147 AND x 196 THEN GOSUB mod. prot: RETURN IF x 203 AND x 252 THEN GOSUB mod. zrot: RETURN END IF IF y 177 AND y 185 THEN IF x 92 AND x 140 THEN GOSUB mod. xtran: RETURN IF x 147 AND x 196 THEN GOSUB mod. ytran: RETURN IF x 203 AND
x 252 THEN GOSUB mod. Ztran: RETURN END IF RETURN frmslider: IF x 12 THEN frm=frra-l IF frmCl THEN frra=l GOSUB drw.frmnum GOSUB drw. update GOSUB drw. factors GOSUB putfrm GOSUB nobut ELSEIF x 114 THEN frm=frm+l IF frm 12 THEN frm=12 GOSUB drw.frmnum GOSUB drw. update GOSUB drw. factors GOSUB putfrm GOSUB nobut ELSEIF x 16 AND x 110 THEN frm=INT((x-16) 8)+l GOSUB drw.frmnum GOSUB drw. update LINE (0, 0) — (311, 131), 0, bf GOSUB drw. factors GOSUB putfrm GOSUB nobut END IF RETURN drw.frm: GOSUB high. redraw GOSUB drw.frame GOSUB getfrm frmchg (frm)=0 GOSUB drw. update GOSUB unhigh. redraw GOSUB nobut
RETURN drw. allfrm: GOSUB hlgh. redraw2 tfrm=frm FOR frm=l TO 12 GOS UB drw.frmnum GOSUB drw. factors GOSUB drw.frame GOSUB getfrm frmchg (frm)=0 GOSUB drw. update NEXT frm=tfrm GOSUB drw.frmnum GOSUB drw. factors GOSUB putfrm GOSUB unhigh. redraw2 GOSUB nobut RETURN playbut: GOSUB high.play GOSUB unhigb.stop GOSUB freeze.menu frminc=l clickstop=0 WHILE NOT(clickstop) frm=frm+frminc IF frm 12 THEN IF actrev THEN frm=ll frminc=(-1) ELSEIF actrpt THEN frm=l ELSE frm=l clickstop=(-1) END IF END IF IF frmCl THEN IF actrpt THEN frm=2 frminc=l ELSE frro=l clickstop=(-1) END IF END IF GOSUB putfrm GOSUB
drw.frmnum FOR n=0 TO 39-spd b=M0USE(0) X=M0USE 1) y=M0USE(2) IF b 0 THEN IF x 260 AND x 306 AND y 152 AND y 164 THEN clicketop=(-1) n=39-spd END IF IF x 263 AND x 303 AND y 178 AND y 183 THEN spd=x-263 GOSUB drw. spdnum END IF END IF NEXT WEND GOSUB drw. factors GOSUB drw. update GOSUB unhigh.play GOSUB high.stop GOSUB unfreeze.menu GOSUB nobut RETURN AMIGA CUSTOM PRINTER DRIVER:$ 35+S H Create your own printer driver for virtually any printer.
• MENU DRIVEN »WORKS THRU PREFERENCES We are world famous for our
selection of Amiga software!_ Call our Amiga BBS at night or
call during store hours to order!
Konmora. N.V. 1421 7, w on our printer driver. '*6') For Dealers only: Please call forpricing
(716) 873-5321 & THE PRINTER STOREhouM stopbut: RETURN spdslider:
spd=x-263 GOSUB drw. epdnum RETURN mod.xrot:
s$ =STR$ (xrot (frm)) xt=108: yt=175 maxchar=4 numonly=l GOSUB
getstring2 xrot (frm)=VAL(s$) xrot (frm)=xrot (frm) MOD 360 IF
xrot (frm) 0 THEN xrot (frm)=xrot (frm)+360 GOSUB drw. factors
frmchg (frm)=1 GOSUB drw. update GOSUB nobut RETURN mod.yrot:
b$ =STR$ (prot (frm)) xt=164: yt=175 maxchar=4 numonly=l GOSUB
getstring2 prot (frm)=VAL(s$) prot (frm)=prot (frm) MOD 360 IF
prot (frm) 0 THEN prot (frm)=prot (frm)+360 GOSUB drw. factors
frmchg (frm)=1 © HD§d 43 GOSUB drw. update GOSOB nobut RETURN
mod.zrot: s$ =STR$ (zrot (frm)) xt=220: yt=17S maxchar=4
numonly=l GOSUB getstring2 zrot (frm) =VA1 (s$)
zrot (frm)=zrot (frm) MOD 360 IF zrot (frm) 0 THEN
zrot (frm)=zrot (frm)+360 GOSUB drw. factors frmchg (frm) =1
GOSUB drw. update GOSUB nobut RETURN mod. xtran:
s$ =STR$ (xtran (frm)) xt=108: yt=184 maxchar=4 numonly=l GOSUB
getstring2 xtran (frm)=VAL(s$) IF xtran (frm) -90 THEN
xtran (frm}=(-90) IF xtran (frm) 90 THEN xtran (frm)=90 GOSUB
drw. factors frmchg (frm)=1 GOSUB drw. update GOSUB nobut
RETURN mod. ytran: s$ =STR$ (ytran (frm)) xt=164: yt=184
maxchar=3 numonly=l GOSUB getstring2 ytran (frm)=VAL(s$) IF
ytran (frm) -8 THEN ytran (frm)= -8) IF ytran (frm) 8 THEN
ytran (frm)=8 GOSUB drw. factors frmchg (frm)=1 GOSUB
drw. update GOSUB nobut RETURN mod. ztran:
s$ =STR$ (ztran (frm)) xt=220: yt=184 maxchar=4 numonly=l GOSUB
getstring2 ztran (frm)=VAL(s$) IF ztran (frm) 0 THEN
ztran (frm)=0 IF ztran (frm) 999 THEN ztran (frm)=999 GOSUB
drw. factors frmchg (frm)=1 GOSUB drw. update GOSUB nobut
RETURN drw.frame: GOSUB unit. matrix IF xrot (frm) 0 THEN
GOSUB apply.xrot IF prot (frm) 0 THEN GOSUB apply.yrot IF
zrot (frm) 0 THEN GOSUB apply.zrot IF ztran (frm) 0 THEN
GOSUB apply.ztran GOSUB transform.pts GOSUB convert2scr
GOSUB sort.poly LINE (0, 0) — (311,131), 0, bf GOSUB
drw. object RETURN matprep: 'bit of matrix preparation FOR
row=0 TO 3 FOR col=0 TO 3 td (row, col)=fran (row, col)
tr2 (row, col)=0 NEXT NEXT RETURN unit. matrix: 'create a
unit matrix FOR row=0 TO 3 FOR col=0 TO 3 fran (row, col)=0
IF row=col THEN fran (row, col) =1 NEXT NEXT RETURN
matmult: 'multiply transformation matricies FOR row=0 TO 3
FOR co1=0 TO 3 t=0 FOR el=0 TO 3 t=t+trl (row, el) *tr2
(el, col) NEXT fran (row, col)=t NEXT NEXT RETURN apply.xrot:
'rotate object about x axis GOSUB matprep
rad=xrot (frm)*3.1416 180 tr2(0,0)=l: tr2(3,3)=l tr2 (1,1)
=COS (rad): tr2 (1, 2)=SIN (rad) * (-1) tr2 (2,1)=SIN (rad)
: tr2 (2, 2) =C0S (rad) GOSUB matmult RETURN apply.yrot:
'rotate object about y axis GOSUB matprep
rad=prot (frm)*3.1416 180 tr2(l, l)=l: tr2(3,3)=l tr2 (0, 0)
=COS (rad): tr2 (0, 2) =SIN (rad) tr2 (2, 0) =SIN (rad) *
(-1): tr2 (2, 2)=C0S(rad) GOSUB matmult RETURN apply.zrot:
'rotate object about z axis GOSUB matprep
rad=zrot (frm)*3.1416 180 tr2 (2, 2) =1: tr2 (3, 3) =1 tr2
(0, 0) =C0S (rad): tr2 (0, 1) =SIN (rad) * (-1) tr2 (1, 0)
=SIN (rad): tr2 (1,1) =COS (rad) GOSUB matmult RETURN
apply. ztran: 'translate object along z axis GOSUB matprep
tr2 (0, 0) =1: tr2 (1,1) =1 tr2(2,2)=l: tr2(3,3)=l
tr2(3,2)=ztran (frm) GOSUB matmult RETURN transform.pts;
COLOR 1,0 FOR p=l TO 95 LOCATE 1, 5 PRINT”Calculating
Point";p IF pt (p, 0) 0 OR pt (p, l) 0 OR pt (p,2) 0 THEN
FOR cOl=0 TO 3 t=0 FOR el=0 TO 3 t=t+pt p, el) *fran (el,
col) NEXT tpt (p, col) t NEXT END IF NEXT RETURN convert2scr:
'convert points to screen coordinates FOR p=l TO 95
r=zeye (tpt(p,2)+zeye) tpt (p, 0)=INT (tpt (p, 0} *r) +ho£f
tpt (p, 1) = (INT (tpt (p, 1) *r)) * (-1) +voff NEXT
RETURN reset. polyorder: FOR n=l TO maxpoly polyord (n,0)=0
polyord (n,1)=0 NEXT RETURN sort.poly: GOSUB reset. polyorder
'find average of all polygons' z coord FOR n=l TO maxpoly
LOCATE 1,17 ERINI"Polygon"n IF vrt(n) 0 THEN t=0 FOR n2=l
TO vrt(n) t=t+tpt (poly (n, n2),2) NEXT polyord (n, 0)
=INT(t vrt (n)) END IF NEXT 'sort polygons by average z
coord FOR n=l TO maxpoly LOCATE 1,24 PRINT n;"again."
IF vrt(n) 0 THEN t= (-100) P=(-l) FOR n2=l TO maxpoly IF vrt(n2) 0 THEN IF polyord (n2,0) t THEN t=polyord (n2, 0): p=n2 END IF NEXT polyord (n,1)=p polyord (p, 0) = (-100) END IF NEXT COLOR 1,2 RETURN drw. object: FOR n=l TO maxpoly 45 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 ihc 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 2'U" x, »" x VW (W x D x
H) in standard AMIGA color.
• Leap year capability.
• A-TIME package contains; 1-A -TIME dock calendar module' 1-3.5"
DS Utilities Disk Operating instructions PRICE W5 AVAILABLE:
P. 0. BOX 6408 (409) 833-2686 BEAUMONT, TEXAS 77705 include s3.50
for shipping and handling For MC VISA orders call (409)
833-2686 AMIGA is a trademark of Commodore — Amiga inc. IF vrt
(n) 2 THEN FOR n2=l TO vrt (polyord (n, 1)) AREA (tpt (poly
(polyord (n, 1), n2), 0) -Fxtran (frm), tpt (poly (polyord
(n, 1), n2), 1) -Fytran (frm)} NEXT COLOR polyelr (polyord (n,
(hoff-64+xtran (frm), voff-58+ytran (frm)) (hoff+63+xtran (frm), voff+57+ytran (frm)), frames ((fr
- 1)*frmsize) RETURN putfrm: PUT(hoff-64+xtran (frm), voff-
58+ytran (frm)), frames ((frm-1)*frmsize), PSET RETURN getstring:
’enter here if no default string s5=" " getstring2: 'enter here
if have a default string GOSUB freeze.menu GOSUB hokey
numehar=LEN(s $) CALL moves (rpS, xt, yt) PRINT 6$; Z$ = " "
getstring3: LINE(xt+numchar*8+l, yt-7)- (xt+numchar*8+4, yt+2),
3, bf z$ =INPUT$ (1) LINE (xt+numchar*8+l, yt-7) (xt+numchar*8+4, yt+2),2, bf IF z$ =CHR$ (8) OR z$ =CHR$ (31) OR
z$ =CHR$ (127) THEN IF numchar 0 THEN PRINT CHR$ (8);" ";CHR$ (8);
numch ar=numch ar-1 e$ =LEFT$ (s$, numchar) END IF END IF IF
ASC(z$) 31 AND numchar maxchar AND numonly=0 THEN s$ =s$ +z$
PRINT z$; numchar=numchar+l END IF IF ASC(z$) 31 AND
numchar maxchar THEN IF numonly=l THEN IF(z$ ="0" AND z$ ="9")
OR z$ =” — " THEN s$ =s$ +z$ PRINT z$; numchar=numchar+l END IF END
IF END IF IF z$ OCHR$ (13) THEN getstring3 numonly=0 GOSUB
unfreeze.menu RETURN clicJc. Continue: LOCATE 23,4 PRINT"(Press
mouse button to continue)"; GOSUB nobut b=M0USE(0) WHILE b=0
b=MOUSE(0) WEND RETURN nobut: b=MOUSE(0) WHILE b 0 b=M0USE(0)
FUNCTION move LIBRARY LIBRARY "graphics. library" SCREEN
1,320,200,5,1 WINDOW 2, "ROT", (0, 0) — (311,186), 0,1 WINDOW
OUTPUT 2 rpS=WINDOW(8) 'pointer to raster port PALETTE 0,0, 0,0
PALETTE 2,0,.5, 0 46 W®Dmx! BJ PALETTE 31,0,.25, 0 PALETTE
30,.7,.7,0 LOCATE 3,1 GOSUB intro DIM
pt (95,3), poly (95,6), polyelr (95), vrt(95) DIM
xrot (12), prot (12), zrot (12) DIM xtran (12),
ytran (12), ztran (12), frmchg (12) DIM fran (3, 3), td (3, 3),
tr2 (3, 3), tpt (95, 3), polyord (95, 1) DIM frames (27876)
pt=l: poly=l objscr=-l: actscr=0 yxl=43: yx2=43: yx3=13 6
vyl=43;vy2=135: vy3=135 maxpt=95: maxpoIy=95 frm=l: spd=20
frmsize=2323 hoff=156: voff=66: zeye=44 0 actrpt=0: actrev=0 FOR
n=l TO maxpt pt (n,3) =1 NEXT GOSUB Init.menu COLOR 1,0 GOSUB
click. continue COLOR 1,2 GOSUB drw. objeer RETURN init.menu:
MENU 1,0,1, "ROT" MENU 1,1,1," Files " MENU 1,2,0,"------ — "
MENU 1,3,1," Quit " MENU 2, 0,1, "Object" MENU 2,1,2," Object
Editor " MENU 2,2,1," Load Object MENU 2,3,1," Save Object MENU
2,4,1," New Object MENU 3,0,1, "Action” MENU 3,1,1," Action
Editor " MENU 3,2,0," Load Action MENU 3,3,0," Save Action "
MENU 3,4,0," New Action MENU 3,5,0,"---------------- — " MENU
3,6,0," Repeat at end " MENU 3,7,0," Reverse at end " MENU
3,8,0," Calc between..." MENU 4,0,0," " MENU 4,1,0," " RETURN
freeze.menu: MENU 1,0,0 MENU 2,0,0 MENU 3,0,0 RETURN
unfreeze.menu: MENU 1,0,1 MENU 2,0,1 MENU 3,0,1 RETURN cleanup:
,55 drw. objscr: LINE (0,0)-(320,200),2, bf LINE (2,2) — (83,
83), 0, bf LINE (2, 95) — (03,17 6),0, bf LINE (96, 95) (177,176), 0, bf LINE (186, 2) — (310, 53), l, b LINE (186, 60)
— (310, 176}, 1, b LINE (191, 142) — (304,171), 0, b£ FOR y=0
TO 3 FOR x=0 TO 7 LINE(193+x*14,144+y*7)-
(204+x*14,148+y*7), y*8+x, bf NEXT NEXT x=189: y=126: GOSUB
drw. button y=110: GOSUB drw. button y=94: GOSUB drw. button
y=36: G0SUB drw. button y=24: GOSUB drw. scroll y=82: GOSUB
drw. scroll CALL move! (rpt, 228,12): PRINT"POINT" CALL moves
(rpi, 236, 21): PRINT" " CALL moves (rpt,208,45): PRINT"Zero
Point" CALL moves (rpS,220,70): PRINT"POLYGON" CALL
moves (rpS,236, 79): PRINT" " CALL moves (rpS, 200,103)
;PRINTMAdd above Pt" CALL moves (rpS,200,119): PRINTMUndo last
Pt" CALL moves (rpS,192,135): PRINT"Delete Polygon" CALL moves
(rpS, 10, 92): PRINT"Z TOP" CALL moves (rpS,10,185): PRINT"Z
SIDE"; CALL moves (rpS,107,185): PRINT"FRONT X"; CALL moves
(rpS,86,16): PRINT"X" CALL moves (rpS,86,109): PRINT"Y"
x=2: y=89: GOSUB drw. leftarrow y=182: GOSUB drw. leftarrow
x=89: y=2: GOSUB drw. uparrow y=95: GQSUB drw. uparrow
x=177: y=182: GO£UB drw. rightarrow GOSUB drw, ptnum GOSUB
drw. polynum GOSUB drw.views c=polyelr (poly) GOSUB high.clr
GOSUB nobut RETURN drw. button: LINE (x, y) — (x+116, y+12), l, b
LINE(x+2, y+13)-(x+117, y+13),0 LINE -(x+117, y+l),0 RETURN
drw. scroll: LINE(x, y)-(x+116, y+8), l, b LINE (x+8,
y)-(x+109, y+8), l, b LINE (x+2, y+9) — (x+117, y+9), 0 LINE
-(x+117, y+1),0 COLOR 0 AREA (x+3, y+4): AREA (x+5, y+2): AREA
(x+5, y+6) AREAFILL
AREA(x+112, y+2): AREA(x+112, y+6): AREA(x+114, y+4) AREAFILL COLOR
1,2 RETURN Classic games software you can drive with your
mouse! Buf, you don'1 need a license
- just an AMIGA and: PALETTE 2, 0,0,0 MENU RESET RETURN Mouse
Driven TM Games Gallery I, II, and ill.
Each of these packages contain exciting: Space, Gambling, Sports Games, and Mind Teasers.
Each provides a standard series of features and options for:
• Speech ‘Graphics ‘Menus
• Color ‘Help ‘Voice and ‘Mouse Control!
Kickstart 1.1 & 512K memory required. $ 29.95 + $ 3.00 shipping & handling.
(713) 488-2144 k. dm ¦ meridian — ' I ¦! SOFTWARE Telephone orders
B rBlNC.
Welcome P.O. Box 890408 Visa Mastercard Amex Houston, TX. 77289-0408 AMIGA Is a Trademark of Commodore-Amiao, inc drw, leftarrow: AREA(x, y): AREA(x+3, y-3): AREA(x+3, y+3);AREAFILL LINE (x, y) — (x+6, y) RETURN drw. rightarrow: AREA(x, y): AREA(x-3, y-3): AREA(x-3, y+3): AREAFILL LINE (x, y) — (x-6, y) RETURN drw. uparrow: AREA(x, y): AREA(x-3, y+3): AREA(x+3, y+3): AREAFILL LINE (x, y)-(x, y+6) RETURN drw, ptnum: LINE (199, 26) — (296, 30), 0, bf LINE (198+pt, 26) — (20I+pt,30), 3, bf CALL moves (rpS, 244, 21) PRINT RIGHT? ("00M+STR$ (pt), 2) RETURN drw. polynum: LINE (199, 84) — (296, B8), 0, bf LINE (198+poly,
84) — (201+poIy, 88), 3, bf CALL moves (rpS,244, 79) PRINT RIGHT? ("00"+STR? (poly),2) RETURN drw. actscr: LINE (0, 0)- (311,131), 0, bf LINE (0, 132) — (311,186), 2, bf x=140: y=136: GOSUB drw. button2 y=152: GOSUB drw, button2 EffilUgSQUg) ©©UtTDpOMOUDgj™ © 11 U®(§ 47 x=260: y=136: GOSUB drw. button3 y=152: GOSUB drw. button3 LINE (260, 178)-(3 06, 183), l, b LINE (262, 184) — (307, 184), 0 LINE -(307,179),0 LINE(4,150)-(122,158), l, b LINE (12,150) — (114,158), l, b LINE (6,159) — (123,15 9}, 0 LINE -(123, 151), 0 COLOR 0 AREA(7,154): AREA(9,152): AREA(9,156): AREAFILL AREA (117, 152): AREA
(119,154): AREA (117,156) AREAFILL COLOR 1,2 CALL moves (rpS, 28,145): PRINT"FRAME ¦' CALL moves (rpS, 4,175): PRINT"Rotations: X= Y= Z=" CALL moves (rpS, 4,184): PRINT"Translate: X= Y= Z="; GOSUB unh i gh. redraw GOSUB unhigh. redraw2 GOSUB unhigh.play GOSUB high.stop CALL movefi (rpS, 264,175): PRINTMSpeed" GOSUB drw.frmnum GOSUB drw. spdnum GOSUB drw, update GOSUB drw. factors GOSUB putfrm RETURN drw.frmnum: LINE (15,152)-(111, 156), 0, bf LINE(7+frm*8,152)-(15+frm*8,156),3, bf CALL moves (rpS,84,145) PRINT RIGHT $ ("00 "+STR$ (f rm), 2) RETURN drw. Spdnum: LINE (262, 180) -(304,181), 0, b
LINE(261+spd,180)-(265+spd,181),3, b RETURN drw. update: LINE (115, 138) — (131, 146), 2, bf IF frmchg (frm) 0 THEN LINE(115,142)-(131,142),3 LINE -(127,138),3 LINE(131,142)-(127,146),3 END IF RETURN drw. factors: CALL moves (rpS,103,175) PRINT LEFTS(STR$ (xrot (frm))+" ",4) CALL moves (rpS,164,175) PRINT LEFTS(STR? (prot (frm))+" ",4) CALL moves (rpS,220,175) PRINT LEFT? (STR$ (zrot (frm))+" ",4) CALL moves (rpS,108,184) PRINT LEFT? (STR? (xtran (frm))+" ",4); CALL moves (rpS, 164,184) PRINT LEFT? (SIRS (ytran (frm))+" ",4); CALL moves (rpS, 220,184) PRINT LEFT? (STR? (ztran (frm))+" ¦l,4); RETURN
unhigh. redraw: LINE(141,137)-(249,147),2, bf CALL moves (rpS,148,145) PRINT"Redraw Frame" RETURN high. redraw: LINE (141,137) — (24 9, 147),3, bf COLOR 1,3 CALL moves (rpS,148,145) PRINT"Redraw Frame" COLOR 1,2 RETURN unhigh. redraw2: LINE (141,153)-(249, 163), 2, bf CALL moves (rpS,156, 161) PRINT-Redraw All" RETURN high. redraw2: LINE(141,153)-(249,163),3, bf COLOR 1,3 CALL moves (rpS,156,161) PRINT"Redraw All" COLOR 1,2 RETURN unhigh.play: LINE (261,137)-(305, 147),2, bf CALL moves (rpS,268, 145) PRINT"Play" RETURN high.play: LINE (2 61,137)-(305, 147),3, bf COLOR 1,3 CALL moves (rpS,268, 145)
PRINT"Play" COLOR 1,2 RETURN unhigh.stop: LINE(261,153)-(305,163),2, bf CALL moves (rpS,268,161) PRINT"Stop" RETURN high.stop: LINE (261,153) -(305,163), 3, bf COLOR 1,3 CALL moves (rpS,268, 161) PRINT"Stop" COLOR 1,2 RETURN drw. button2: LINE(x. y) — (x+110, y+12), l, b LINE(x+2, y+13)-(x+111, y+13),0 LINE -(x+111, y+l),0 RETURN drw. button3: LINE (x, y)-(x+46, y+12), l, b LINE(x+2, y+13)-(x+47, y+13),0 LINE -(x+47, y+1),0 RETURN
• AC- By Popular Demand!
Ok, Ok! We give in. Our readers have requested a subscription form and we are giving in. The small coupon in the corner is a direct result of the dozens of calls and letters from prospective subscribers. In all honesty, we have never put a subscription form in the magazine, because we wanted your thoughts and ideas by letter.
However, if there are some Amiga users out there who do not want to drop us a line and tel! Us of the Amazing things they are doing, well, just fill out the card below with check or money order for $ 24.00 U.S., $ 30.00 Canada and Mexico, or $ 35.00 overseas (first class and airmail rates are available upon request) and send to: PiM Publications Inc.
P. O. Box 869 Fall River, MA 02722 We will start your
subscription request with our next available issue.
If you need any of our first six Back Issues, they are available at $ 4.00 each and can be ordered at the same time as your subscription.
While sending the coupon, please don't forget our long list of Public Domain Software listed in the back of this issue!
So, there you have a quick, easy way to fully support your Amiga. But, if you are not in such a hurry, we would still like to see your thoughts, dreams, hopes, and ideas in your letters.
Thank you.
Ng Yes! I am taking the easy way, please start my subscription with the next available issue! 1 have enclosed $ 24.00 for 12 issues U.S.($ 30.00 Canada and Mexico, $ 35.00 overseas).
Name street state zip code city am mailing this to: PiM Publications, Inc.
P. O. Box 869 Fall River, MA 02722 Thanks for your order.
Computer West 4130 N. 75th Ave. 105 Phoenix, AZ 85033
(602) 849-4795 DEALER INQUIRES WELCOME Solid Oak Swivel Custom
Disk Cabinet Gallery of Images For DELUXE PRINT® Giapter 1
yfi (W)) (1 4**$ Holds 84
3. 5" Micro Floppies Put all your disks in one place — at your
fingertips $ 49.95 s Lr Featuring: States, Social Activities,
Southwestern Art, Mix and Match “"‘y $ 19.95 MEMORY EXPANSION
Speed Features: Autoconfis urine Computer Art Gallery of Animations by Ken Costello Mounts on expansion port Zero wait states A must for business, graphics, database, and cad programs.
$ 795.00 Corvette example; wheels spin, telephone poles flash by and road moves. 23 animations, Explore the animations of C? 1 O O C your computer. J? An Disk Deluxe Print 19.95? Art Disk Deluxe Paint 19.95? Check money order D Credit Card No.
Exp. Date_? Visa? M C? Amcr. Exp. Computer West S3.00 shipping and handling
* 7 j, Mail to: 4130 N. 75th Ave. 105 AZ residents add 6.5%
sales tax
(602) 849-4795 Phoenix, AZ 85033? Memory Board S795.0G? Oak
disk holder S69.95 Sign._ Name Address City State Zip
Aaz. gi u i rryjterd tniermrt of Cemmoccrc Bujiecaj
Macrunex. Dexluxe Prist u i rtjutrrcd tudcsun: of Lleerrmjc
50 W@llyJinl© Ds SF Forth!
By Jon Bryan Las) month I began the planning stages of an application which would simulate a bouncing ball in three dimensions.
Some of the necessary equations were presented, along with a discussion of the many choices and compromises which must be made in writing such an application. I also made the decision to use "Multi-Forth" from Creative Solutions, Inc. as the language implementation, largely because it was (and still is at the time this is being written) the most powerful version yet to be released.
This month I'm finally including some actual code which you can run if you have Multi-Forth, it's an implementation of the Bresenham Mtchener circle algorithm as published in "Fundamentals of Interactive Computer Graphics" by J.D. Foley and A. Van Dam. It may not seem at first glance to have much to do with bouncing balls, but I ask you to bear with me.
I think it will prove to be useful. Let me explain my reason for implementing the algorithm. 1 would like to draw a series of shaded spheres to give the perspective view of the ball as it travels from the front to the back of the "room." In order to derive the x and y coordinates for each pixel which constitutes a point on the surface of the sphere, the radius of the sphere must be calculated for each horizontal "slice" (raster scan line) through the sphere. Bresenham's algorithm provides a convenient method for calculating that radius quickly and efficiently. For each slice, the radius
provides a starting and an ending pixel relative to the central axis of the sphere. The x and y pixel coordinates and the radius of the sphere may then be used to calculate the amount of illumination reflected to your eye from that point on the surface of the sphere.
The algorithm presented here will actually draw circles; something which won't be required for bouncing balls. For calculating the illumination of the sphere we'll be more interested in the raw numbers — the coordinates of the pixels, rather than the pixels themselves. But since pictures are easier to understand than numbers, and because it provides some instant gratification, I decided to draw circles now and save the pure calculations for later, Even if I later decide to take a different tack, this month’s algorithm is worthwhile for its own sake. It provides an excellent example of the use
of local variables, and it is also sliohtly faster than the circle-drawinq algorithm included in Multi-Forth.
At this point I must admit a weakness on my part. I don't yet know how to create animateable objects on the Amiga from Forth. What I expect to use are Blitter Objects, or "BOBs," as they will provide the greatest flexibility and also allow a greater number of colors than hardware sprites. The extra colors will be required for the different levels of illumination. If there were no background to contend with the balls could be animated by brute force, using the Blitter to move a chunk of the screen from one place to another, and to move a new image into place as the ball changed its apparent
size. But, since we must preserve the background over which the ball is animated, BOBs seem to be the obvious way to go. I just don't know how to use them yet.
I&Mstogj ©©DUfljpyftBimg™ ©11 ©®i 51 STACKS AND LOCALS Forth programmers are accustomed to handling most data on the stack, but Multi-Forth provides an alternative in the form of "local" variables. Besides SWAP, ROT, DUP, OVER and all the other stack operators, in Multi-Forth you can opt tor named, local variables within words to streamline definitions and make your code more readable. After only a few weeks of using them I've been converted. Local variables are convenient, readable, often faster than using the stack, and they obviate one of the objections users of more traditional languages
have had to Forth in the past. There may be an ultra-conservative Forth programmer somewhere who will object to local variables, but I think it's a great idea whose time has come.
One component of the circle-drawing algorithm provides an excellent example. The algorithm calculates one octant (45 degrees) of the circle, and uses symmetry to plot the other seven pixels. The procedure which plots the eight points, named CIRCLE_POINTS, is a perfect choice for the use of local variables.
Referring to the listing, CIRCLE_P01NTS expects the x and y coordinates relative to the origin on the stack. OVER NEGATE OVER NEGATE produces -x and -y, and LOCALS| — y -x y x j then creates the variables, assigning values to them in the order that the values come off the stack. Use of the local variable within the definition causes its value 1o be pushed onto the stack to be used by DOT, a word included in Multi-Forth which plots a pixel in the current window. The eight invocations of DOT then use symmetry to plot the eight pixels.
The words ADDR. OF and TO allow modification of the value of a local variable. "ADDR. OF d" places the address of d on the stack, and "0 TO d" would set the local variable d to zero.
It’s important to realize that variables created by LOCALSj are transient. They only exist within the word in which they're used, so the same variable name may be used within any number of words and mean something different each time, though I wouldn't recommend the practice.
The word which calculates the x and y coordinates for the circle is named MICH_CIRCLE after J. Michener, who derived the algorithm from one that J. Bresenham developed for pen plotters. A reasonably detailed treatment of the algorithm may be found in the text "Fundamentals of Interactive Computer Graphics" referenced earlier.
I'll try to distill the essence of the algorithm. MICH_CIRCLE expects the x and y coordinates of the origin of the circle and the radius on the stack. First it initializes a "decision variable"
d. Then, within a loop, a new value for the decision variable is
calculated incremently and the sign of the new value is used
to determine which pixel is closest to the radius of the true
circle. The x coordinate of the circle is incremented on each
pass through the loop and the value of the y coordinate is
decremented if the decision variable is greater than or equal
to zero. The loop is exited when x =y. Refer to the text if
you wish to study the algebraic manipulations from which the
calculations used in the algorithm are derived.
CODE OPTIMIZATION Code optimization is a dangerous subject, in more ways than one. The quest for ultimate efficiency can be a frustrating one, with many pitfalls, f fell into one myself and thought I should share it with you. After my success at coding MICH CIRCLE and my pleasure at seeing it actually WORK I thought I'd have a go at speeding it up a bit. Multi-Forth, like most Forths, includes an assembler which can be used for optimization. At times it's indispensable, but at other times overzealous use of it can result in a lot of wasted time. In this particular case my use of it turned out
to be mostly wasted effort.
Typically, if you want an application to run faster you translate the inner loops into machine code, since you may be spending 90% of your time executing 10% of the code. I translated the portion of the algorithm which recalculated the decision variable and the values of x and y, naming it DECIDE.XY, made the substitution in MICH_CIRCLE2, and lo and behold,! Got a whopping one-half of one percent improvement in the execution speed! At this point I realized that the effort was pointless, but I still couldn't resist tweaking things a bit more. MICH_ClRCLE2 uses locals to pass the parameters to
DECIDE.XY, then updates those variables upon exiting DECIDE.XY by using the Multi-Forth word TO. Ft was obvious that what little I gained by using machine code was being reabsorbed in manipulating the variables.
In MICH_CIRCLE3 I rearranged things so that the decision variable and the x and y coordinates were left on the stack, reducing the overhead for DECIDE.XY. Now when I ran this "improved" version the speed increased by all of 3%! You have undoubtedly realized by now that Multi-Forth is already quite fast, and more importantly, that I was optimizing the wrong part of the code. Unable to content myself with the obvious truth, I decided to try ONE MORE THING, and there at least I accomplished something, even if it wasn't what I expected.
PROBLEMS WITH THE ASSEMBLER Multi-Forth has an interesting feature which allows assembly code to be included "in line." By using the words CODE and FORTH one can insert machine instructions right into the middle of a high-level definition, and that's what I did in MICH_CIRCLE4. When I tried it I got an "empty stack" error, and for the life of me I couldn't understand why. I spent an hour or so experimenting and scratching my head (I even called Creative Solutions), and eventually tracked the problem to a mistake in the Assembler. By the time you read 52 W®[]QMfD© Hb BJ this the problem will
be corrected on the latest release, but if you're not sure, go into the "assembler" file using your favorite editor and find FORTH. You'll see the phrase "HERE 10 +" which should be changed to read 'HERE 0A +" and you're all set. The problem was that HERE 10 + created an offset for a Load Effective Address instruction which was too large and caused a branch to parts unknown.
A FEW FINAL NOTES On a 640x200 display MICH_CIRCLE doesn't actually draw circles. It draws tall, skinny ellipses, because the aspect ratio isut 1:1. Executing "220 100 XVSCALE" will cause it to draw something much closer to a circle. Before you can compile the code you will have to "include assembler" for the CODE definitions. Multi-Forth doesn't include the assembler by default. Those who are familiar with standard assembler will probably find Forth assembly language confusing, since it's "Reverse Polish" just like Forth. A more serious problem is that each Forth vendor's assembler is
slightly different, making translation more difficult. Some Forth vendors have decided to implement the standard Motorola assembler syntax for just that reason.
The next step is to execute "samplewindow" to open a window in which the circles can be plotted.
The benchmark I used for timing is as follows:: TEST 100 100 100 0 DO 2DUP I MICH_CIRCLE LOOP 2DROP; which draws 100 circles at a common origin with radii from 0 to
SOURCE LISTING FOLLOWS: Bresenham Michener circle algorithm.
From "Fundamentals of Interactive Computer Graphics" by Foley and Van Dam.
Jon R. Bryan 6-24-86 This routine plots eight pixels of the circle using symmetry; CIRCLE_POINTS (x y —) OVER NEGATE OVER NEGATE LOCALS | -y -x y x | x y DOT y x DOT -x y DOT y -x DOT X -y DOT -y x DOT -X -y DOT -y -x DOT; First we do everything in high level: MICH_CIRCLE (xcenter ycenter radius ) 3 OVER 2*- (decision variable d=3-2*radius) 0 (the Initial value of x) GET.XYOFFSET (DOT is relative to the current XYOFFSET) initially y=radius) LOCALS| yoffset xoffset x d y ycenter xcenter | (next set XYOFFSET to the origin of the circle) xoffset xcenter + yoffset ycenter
+ XYOFFSET BEGIN x y WHILE X y CIRCLE_POINTS d o IF x 4* 6+ ADDR. OF d +! (d=d+4*x+6) ELSE x y — 4* 10+ ADDR. OF d +!
- 1 ADDR. OF y +! (decrement y) THEN 1 ADDR. OF x +! (increment
x) REPEAT x y = (the pixel precisely on the diagonal) IF X y
CIRCLE_POINTS THEN xoffset yoffset XYOFFSET; Now we decide
to get tricky and optimize This code replaces the
IF-ELSE-THEN section above CODE DECIDE.XY (d x y — d' x' y')
SP)+ REGLIST D0-D2 LONG MOVEM, (move values to registers) D1
D3 LONG MOVE, (make a working copy of x) D2 LONG TST, (d 07)
d=4*x+6) ELSE, DO D3 LONG SUB, D3 02 LONG ASL D3 10 LONG
ADDI, D3 D2 LONG ADD, (d=4* f x-y] +10) DO 01 LONG SUBQ, (
decrement y) THEN, D1 01 LONG ADDQ, (increment x) REGLIST
D0-D2 SP —) LONG MOVEM, (new stack value s) NEXT END-CODE
SciCalc™ Scientific Calculator For The Amiga™
3. 1415926536 | [cTT] fefTj [fu] fpej] [Hyp] m rri nn in im m m
mi im mmrnmmiinFnmfn] mmnurnfmmmmmi |Smn1 fftl fTfl fPl
iTiga-, $ 14.95 Don't let the price fool you! SciCalc has full
algebraic tiierarcy and features an automatic constant that is
a delight to use. Choose from 3 display modes: Floating Point.
Scientific, or Fixed Point.. Press Ihe Hyp (erbolic) key twice
and a whole new page of functions is at your fingertips. No
long waits — SciCalc has been available since March. Your
orderwith manual will be sent by First Class mail.
* Large Equals Key (Display) ¦ Color highlighting ¦ Full Error
Trapping ¦2 Dimensipnal Statistics ¦ Linear Regression ¦ Linear
• Correlation Coefficient
• Factorials lo 170
* Aa'justible Size ¦ 10 Memories
• Powers ¦ Logarithms ¦ T rigonametry (D R G)
• Hyperbolics ¦ Poiar Rectangular Conversions, and more.
Dealers Inquiries Welcome Send Check for $ 14.95 to: DESKWARE
P. O. Box 47577 St. Petersburg, FL. 33743 ycent BEGIN WHILE
REPEAT x y = IF x xoffset x X d TO TO TO MICH_CIRCLE3
GET.XYOFFSET LOCALS| yoffset SWAP xoffset + 3 R@ 2* ~ 0 (x)
insert the new routine...: MICH_CIRCLE2
xcenter ycenter radiue —) 3 OVER 2* — 0 GET.XYOFFSET LOCALS|
yoffset xoffset x d xcenter | xoffset xcenter + yoffset
ycenter + Lo and behold, it makes hardly any difference
(less than. 5%)!
So we decide to try a slightly different tack.
Xoffset [R (save radius) SWAP yoffset + XYOFFSET (initialize decision variable) (now we have d x y on the stack) CIRCLE POINTS DECIDE.XY And find that we've shaved less than 3% off the time! Which just goes to show that Multi-Forth is WHILE REPEAT 2DUP = IF CIRCLE_POINTS THEN xoffset yoffset y CIRCLE_POINTS THEN yoffset XYOFFSET; (xcenter ycenter radius CIRCLE_POINTS y DECIDE.XY XYOFFSET 2DUP quite fast to begin with, and that much more time is spent plotting the points than calculating their coordinates. But just to demonstrate one more technique, here is an example of
the use of CODE and FORTH for in-line code.
: MICH_ CIRCLE4 xcenter ycenter radius ) GET.XYOFFSET LOCALS] yoffset xoffset] R (save radius) SWAP xoffset + SWAP yoffset + XYOFFSET 3 R@ 2* — (initial value of decision variable) 0 (x) R (y=radius initially) BEGIN 2DCJP WHILE 2DUP CIRCLE_POINTS CODE SP)+ REGLIST D0-D2 LONG MOVEM, D1 D3 LONG MOVE, D2 LONG TST, MI IF, D3 02 D3 06 D3 D2 ELSE, DO D3 D3 02 D3 10 D3 D2 DO 01 THEN, D1 01 REGLIST DO-D2 SP FORTH REPEAT 2DUP = IF CIRCLE_POINTS DROP ELSE THEN xoffset yoffset XYOFFSET;
Drive and Hard Disk Printer or Plotter Inquiries invited (818)
P. O. BOX 3475. GRANADA HILLS. CA 91344 erber trade mark oI
Gerber Sc*nt-fic Instruments rroy trade mark of KeuffH it
Essen M — trade mark at Infer national Eus.ness Machines
itoCAD — trade mark of Autodesk Inc NET LIST FROM SCHEMATIC
BOOT 1000 KOOO 6000 WKK1 60X1 « no «KK 6(00 60VS SOX'* SOY*
sooto Sonic SOOI J SCO! 1 SOOI 2 SOOI2
• D. C gives you all the expected CAD functions of zooming,
rotating, panning, group functions and menu driven features.
• D'C brings you professional CAD capability tested and proven in
the production of tens of thousands of drawings.
• D'C will liberate you from the need to draw free hand.
• D'C has net listing capability from your schematic.
• Schematic comparison to your printed circuit artwork for
continuity check.
• D'C can produce isometric views.
• Mil-Spec quality Leroy* fonts.
• Automatic line dimensioning.
• D'C includes a series of information libraries: Symbols.
Electronic Parts Chips, Architectural Components.
Landscaping, etc. niga trade mark of Commodore Business
Machines "I C What I Think!"
By Ronald Peterson= Graphics is the single most outstanding feature of the Amiga, When! First saw an Amiga demonstration at the SIGGRAPH ’85 convention in San Francisco I was impressed most by its display capabilities. For under $ 2000, it matched most of the abilities of the $ 80,000 graphics terminals I use in my job. I knew I had to have one, sooner or later. It turned out to be sooner, and I spent a gleeful couple of days playing with the demo programs, but eventually I wanted to start writing some graphics programs of my own.! Started by writing a few routines in BASIC and though it could
draw a line or a box with reasonable speed I was horrified by how slow it was in performing the calculations required for more complex pictures. I soon realized that most of those fancy demo programs were written not in BASIC, but in C!
C is a programming language that retains a freedom of access to hardware architecture similar to assembly language while offering many of the more advanced constructs of a high level language, such as loops and if-then-else statements.
So I got hold of the Lattice C compiler and the Amiga ROM Kernal Manual and dug in. Learning a new language, a new machine, a new operating system, and a new DOS all at the same time looked like a hopeless task at first, but a couple of months later I was rewarded. I had written a program that drew a single line on the screen! I was ecstatic! While il may not sound like much, it was the first real connection between an idea in my head and a picture on the screen of an Amiga. I had forged myself a new path for expression! Once I had that single line a multitude of doors opened for me. In short
order I soon had boxes, triangles, hires screens, and simple animations to fascinate myself with. And so I present here the results of my trials in a short tutorial form to encourage others in their efforts to transform ideas to the screen of an Amiga. First, I will cover some of the basics to ensure a common ground for communication but the real intent of this article is to pass on some of the things I learned that the manuals don’t tell you.
There are two ways of accessing the Amiga's graphic capabilities when using the C language. You can either work through the Intuition window manager or you can open your own display window, called a Viewport. Working through Intuition gives you all the flexibility that comes with the windowing system. I am more interested in speed and raw graphics power, so I chose working Through my own Viewport.
The fundamental element of a display on the Amiga is a Raster. A Raster is simply an area of memory which has been set aside to be used for holding an image. The Raster memory is periodically scanned by the Amiga custom graphics chips and its contents mapped onto Ihe monitor screen. This reserved area of memory is also called a Bitplane because it is organized into planes (remember geometry?) That are up to 1024 bits square by up to six bits deep. Taking a bit from each plane — for example, the lower right hand corner bit — and putting them together gives a number. This can be used as an index
into the Color Lookup Table. The value in this table determines the color for the point on the screen that corresponds to that part of the bitplane — the lower right hand corner.
Since the Amiga doesn't have 1024 by 1024 resolution only a portion of a set of bitplanes can be displayed on the monitor. The selection of this portion is accomplished by using a Viewport. A Viewport is what its name suggests; a rectangular window through which a subset of the bitplanes can be seen.
There can be more than one viewport displayed on the screen at one time but viewports cannot overlap and they cannot exist side by side. They can only be stacked vertically. As far as I can tell, each bitplane can have only one viewport. A "screen" as demonstrated in the Introduction to the Amiga manual is an example of a viewport. A linked set of viewports is appropriately called a View since this is what appears on the monitor screen. In the same sense that a viewport is a window for seeing into a bitplane set, a Rastport is a window for drawing into a bitplane set. A rastport can also be
thought of as a communication port because it is the channel through which all the Amiga's built in drawing routines work. So, that should be enough of an explanation to ensure that you know the basic terminology and concepts involved in creating a display. The program listing that accompanies this article demonstrates how to implement all of these concepts in a C program. It draws heavily on the example program on pages 2-28 through 2-31 of the Amiga ROM Kernal Manual which! Gratefully acknowledge. But before we get to the program here are some of the tips I promised on things that aren't in
the ROM manuals.
The first thing i learned is that there are mistakes in the example programs in the Kernal manual. Although the programs segments and examples are supposedly tested and functional, they don't always work, 1 suggest reading the first four chapters (particularly the chapters on Messages and Ports and on I O) to get some idea of how to communicate with the Amiga and in order to be able to troubleshoot the examples.
Double buffering is a technique where two independent viewports are displayed alternately so that all the drawing that is going on is hidden from the observer and a smooth looking animation results. If you are interested in double buffering a display then two rastports are required to draw into two sets of bitplanes. Swapping one rastport back and forth doesn't work.
The LoadViewQ function is the one that causes what you've drawn to appear on the screen. This is particularly important for double buffering. It is not enough to just change the copper list pointers. You must execute a new LoadView () in order to get the new picture to the screen. If you allocate IC What I Think ¦¦¦......¦¦¦?¦:¦¦!
Memory (such as required for a bftplane) then deallocate when your program is done. If you don’t then each time you run your program another chunk of memory will disappear until you reboot, eventually crashing your system when you run out of free memory.
Syncing with the vertical blanking interval is easy once you know how. There are two funclions for this purpose called WaitBOVPf) and WaitTOFQ. WaitBOVPQ waits for the electron beam to scan to the bottom of the current viewport and WaitTOFQ waits till the vertical blank interval has begun. I found that putting a call to WaitBOVPQ right before the LoadViewQ call syncs things up nicely.
Sometimes you would like to have a program run until you are tired of watching it. So you put it into an endless loop. This works except that you have to reboot the system when you want to use it again. Using control-C to abort the program would be ideal, but writing a console handler to implement such a trap is painful, to say the least. However, someone somewhere has been kind to us and has given us a neat function call just for this purpose. To activate CTRL7C checking set: Enable_Abort = 1; Every time your program calls an I O function (like prints) a check will be made for a CTRL C. If
you would rather handle the abort yourself (so you can deallocate all that memory) set Enable_Abort = 0 and call Chk_Abort () somewhere in your main loop. If ChkAbortQ returns a nonzero value then abort!
(See listing for example.)
Here are some tricks to speed things up: there are several things you can try. One is to try the Motorola Fast Floating Point math library. It can be significantly faster than Ihe Lattice math routines since they are in hand-tooled machine code, instead of C. [Ed.: You might also consider using fixed- point, floating point numbers, or using only integers, instead of floating point numbers.] Another trick is to reduce the size of the objects you are animating. This is not always desirable.
Finally, if you are using a similar set of calculations over and over, such as moving an object in a circle you can precalculate the coordinates of the path and store them in an array to provide much faster access. Now for some fun!
The program shown in Listing 1 shows most of Ihe features 1 have talked about here, it creates a smoothly animated display on a 320 by 200 viewport of some rotating triangles.
The positions of the corners are precalulated to improve the speed and a control-C trap is implemented as described above. It is synced with the vertical blanking interval and is double buffered so that you don't see the triangles being drawn.
When you run this program, doni be scared when your screen instantly turns togarbage. This is just what the bit plane looks like before you clear it. I left this in intentionally. 1 like it. It is something you don't get to see. Use SetRastQ if you want 1o blank the screen. After a few seconds, the precalculations will be done, and the triangles will appear.
The source code to this program can be found on the AMICUS disks. Check the catalog for more information.
Listing One * fastest. C-------------------* * Demonstrate opening a Viewport and doing simple * * Animation using a double buffered display. * * Written By Ronald Peterson * * With acknowledgements to the ROM Manual * * * * INCLUDE's — include "stdio. h" (include "math. h" include "exec types. h1' (include "graphics gfx. h" include "hardware dmabits. h" (include "hardware custom. h" include "graphics gfxmacros. h include "graphics copper. h" (include "graphics view. h" include "graphics gels. h" include "graphics regions. h" include "graphics clip. h" include
"exec exec. h" include "graphics text. h" include "graphics gfxbase, hn include "graphics rastport. h" * DEFINE'B * define DEPTH 4 define WIDTH 320 define HEIGHT 200 define NOT_ENOUGH_MEMORY -1000 (define CLIP 0 * 0 = no clip 1 = clip * * set CLIP to 1 for debugging so that you don't draw outside the bitplane * * and crash the system. * * GLOBAL variable definitions — * struct View v; struct Viewport vp; struct ColorMap *cm; struct Rasinfo ri; struct BitMap b; struct BitMap b2; * second bitmap for double buffering * struct eprlist *loft; * copper list pointers for
double buffer * struct eprlist *lof2; struct eprlist *shfl; struct eprlist *shf2; extern int Enable_Abort; * RastPort variables -----------* PLANEPTR rastpoint, rastpoint2; struct RastPort rp; struct RastPort rp2; WORD areabuffer[250]; struct TmpRas tmpras; struct Arealnfo myAreainfo; WORD areabuffer2[250]; struct TmpRas tmpras2; struct Arealnfo myAreaInfo2; 2 * COMBtfTERS LONG i; SHORT j, k, n; int c, iphi; double phi, rad; double Qsinray (), QcosrayO; extern struct ColorMap *GetColorMap (); struct GfxBase *GfxBase; struct View *oldview; * save pointer to old view so can restore *
USHORT colortable[] = [0x000, OxfOO, OxOfO, OxOOf, 0x880, 0x088, 0x808, 0x123, 0x045, 0xe4f, 0x59a, 0x3d3, 0x7fa, 0x675, Oxabc, Oxfff); * set colors black, red, green, blue, yellow, purple, orange, etc * KBYTE *displayraem; UWORD *colorpalette; * Start of main routine — * main () static int xxx[12], yyy[12], flag, good, imc, ioffset; static double inc, two_pi, offset; rad = 3.1415926 180.; inc =5. * rad; offset = 80. * rad; imc — 2; ioffset = 80; two pi = 6.2831852; GfxBase = (struct GfxBase *) OpenLibrary ("graphics. library",0); if (GfxBase = NULL) exit (1); oldview = GfxBase- ActiView;
* save current view to restore later * InitView (Sv); * initialize view * InitVPort (£vp); * initialize viewport *
v. ViewPort = Svp; * link view into viewport * * init bit map
(for rasinfo and rastport) *
InitBitMap (£b2, DEPTH, WIDTH, HEIGHT); * set up information
about Raster location * ri. BitMap = £b; ri. RxOffset = 0;
ri. RyOffset = 0; ri.Next = NULL; * specify dimensions *
vp.DWidth = WIDTH; vp.DHeight = HEIGHT; vp. Rasinfo = 6ri; *
init color table * cm = GetColorMap (16); * 16 entries, since
4 planes deep * colorpalette = (UWORD *)cm- ColorTable; WE’VE
Largest Inventory of Commodore And Amiga Software And
Hardware Products CALL I (818) 366-5305 • 366-9120 10815
Zelzah Avenue Granada Hills. CA 91344 ri. BitMap = £b2;
MakeVPort (£v,£vp); MrgCop (£v); lof2 = v. LOFCprList; * store
pointers to copper lists* shf2 = v. SHFCprList; * for double
buffering * LoadView (£v); * tell copper to use list for
display * * now initialize a rastport * InitRastPort (4rp);
rp. BitMap = £b; * link rastport to bitmap *
SetDrMd (£rp, JAM1); * set draw mode to JAM1 * * now set up
buffer for area fill * InitArea (£myAreaInfo, areabuffer,
100); rp. Arealnfo = £myAreaInfo; rastpoint =
(PLANEPTR)AllocRaster (WIDTH, HEIGHT); InitTmpRas (£tmpras,
rastpoint, RASSIZE(WIDTH, HEIGHT)); rp. TmpRas = £tmpras; * now
initialize a second rastport * InitRastPort (£rp2); rp2. BitMap
= £b2; * link rastport to bitmap * SetDrMd (£rp2, JAM1); *
set draw mode to JAM1 * * set up buffer for area fill in
RastPort 2 * InitArea (£myAreaInfo2, areabuffer2, 100);
rp2. AreaInfo = £myAreainfo2; rastpoint2 = (PLANEPTR)
AllocRaster (WIDTH, HEIGHT); InitTmpRas (£tmpraa2, rastpoint2,
RASSIZE(WIDTH, HEIGHT)); rp2. TmpRas = £tmpras2; phi =0.;
iphi =0; flag = 0; SetOPen (£rp,1); * set outline color *
SetOPen (Srp2,1); * set outline color * Enable_Abort = Q; *
disable automatic CTRL-C abort * for (i=0; K100000; i++) (if
(0!= Chk_Abort ()) * check for CTRL-C abort * goto dals
v. LOFCprList = loft; * set pointers to copper lists and *
v. SHFCprList = shfl; * set RastPort bitmap pointer*
WaitBOVP(£vp); * wait till in vertical blank area *
LoadView (4v); * display Viewport 1 (bitmap 1) * SetRast
(Srp2, 0); * clear Viewport 2 (bitmap 2) * if (flag = 0)
iphi = iphi + imc; for (good=0; good 9; good++) iphi = iphi
+ ioffset; if (iphi 360)iphi=iphi-360; jetx[good] = (int)
Qsinray (iphi); yyytgood] = (int)Qcosray (iphi); if CLIP if
(xxxfgood] (WIDTH-1)) xxx (good) = WIDTH-2; if (xxx[good)
0) xxx[good] = 1; if (yyytgood] (HEIGHT-1)) yyytgood] =
HEIGHT-2; if (yyytgood] 0) yyytgood] = 1; endif}) * move
endpoints slightly and redraw * flag = 1; iphi = iphi + imc;
for (good=0; good 9; good++) t iphi = iphi + ioffset; if (iphi
360)iphi=iphi-360; xxx[good] = (int)Qsinray (iphi); yyytgood]
= (int)Qcosray (iphi); if CLIP if (xxx[good] (WIDTH-1))
xxxtgood] = WIDTH-2; if (xxx[good] 0) xxx[good] = 1; if
(yyytgood] (HEIGHT-1)) yyytgood] = HEIGHT-2; if (yyytgood]
0) yyy[good] = l; tendif) SetAPen (Srp2, 3);
AreaMove (£rp2, xxx[0], yyy[0]); AreaDraw (Srp2, xxx[1], yyy[1]);
AreaDraw (£rp2, xxx[2], yyy[2]); AreaEnd (Srp2); SetAPen (£rp2,
2); AreaMove (£rp2, xxx[3], yyy[3]); AreaDraw (Srp2, xxx [4],
yyy [4]); AreaDraw (£rp2, xxx[5], yyy[5]); AreaEnd (£rp2);
SetAPen (£rp2,1); AreaMove (£rp2, xxx[6], yyy[6]);
AreaDraw (£rp2, xxx[7], yyy[7]); AreaDraw (£rp2, xxx[8], yyy[8]);
AreaEnd (£rp2);
v. LOFCprList = lof2; * set pointers to copper lists and *
v. SHFCprList = shf2; * set RastPort bitmap pointer*
WaitBOVP(fivp); * wait till in vertical blank area *
LoadView (£v); * display Viewport 2 (bitmap 2) *
SetRast (£rp,0); * clear Viewport 1 (bitmap 1) * iphi = iphi
+ imc; for (good=0; good 9; good++) iphi = iphi + ioffset;
if (iphi 360) iphi*-iphi-3 60; xxx[good] =
(int)Qsinray (iphi); yyytgood] = (int)Qcosray (iphi); if CLIP
if (xxx[good] (WIDTH-1)) xxx[good] = WIDTH-2; ' I C What
I Think if (xxx[good] 0) xxx[good] = 1; ff (yyy[g°°d]
(HEIGHT-1)) yyy[good] = HEIGHT-2; if (yyy[good] 0) yyyfgood]
= 1; ifendif} SetAPen (Srp, 3); AreaMove (firp, xxx [0],
yyy[0]); AreaDraw (£rp, xxx[I], yyy [1]); AreaDraw (Srp, xxx
[2], yyy[2]); AreaEnd (Srp); SetAPen (Srp,2);
AreaMove (srp, xxx[3], yyy[3]); AreaDraw (Srp, xxx [4], yyy [4])
; AreaDraw (£rp, xxx[5], yyy [5]); AreaEnd (Srp);
SetAPen (Srp,1); AreaMove Srp, xxx[6], yyy[6]);
AreaDraw (Srp, xxx[7], yyy[7]}; AreaDraw (£rp, xxx[8], yyy[3]);
AreaEnd (Srp);} date_all: LoadView (oldviaw); * put back the
old view * FreeMemory (); * exit gracefully *
CloseLibrary (GfxBase);} * End of
main-------------------------* * return user and
system-allocated memory to sys manager * FreeMemory () *
free drawing area * FreeRaster (rastpoint, WIDTH, HEIGHT);
FreeRaster (rastpoint2, WIDTH, HEIGHT); for(i=0; KDEPTH; i++)
FreeRaster (b. Planes [i], WIDTH, HEIGHT); FreeRaster (b2
. Planes [i], WIDTH, HEIGHT);) * free the color map created
by GetColorMap () * FreaColorMap (cm); * free dynamically
created structures *
v. LOFCprList = loft; v, SHFCprList » shfl;
FreeVPortCopLists (Svp); FreeCprList (v. LOFCprList);
FreeCprhist (v. SHFCprList); * free up interlace copper list *
v. LOFCprList = lof2;
v. SHFCprList = shf2; FreeVPortCopLista (fivp);
FreeCprList (v. LOFCprList); FreeCprList (v. SHFCprList); * free
up interlace copper list * return (0); * store endpoints of
triangles to speed up rotation * double Qsinray (theta) int
theta; int j; static int iflag = 0; DATA REDUCTION
ASSOCIATES INC. 303 West Sixth Avenue Dept. A Tallahassee,
Florida 32303 904-681-0553 INTRODUCING A 68010 UPGRADE KIT...
Static double x, result[365]; if (iflag == 0) iflag = 1; x = 0.; for(j=0; j 3 65; j++) (X = x +.0174532; result[]] = 150,*ein(x)+151.;)} return (result[theta]); double Qcosray (theta) int theta; int]; static int iflag =0; static double x, result [365]; if (]flag == 0) iflag = 1; x = 0.; for(j=0; j 365; j++) x = X +.0174532; result [j] = 95.*coa(x)+99.;}} return (result [theta]);} *AC* 59 SYMPHONY MUSIC LIBRARY The library contains o er 800 tour voice stereo music pieces to turn A your AMIGA into a sophisticated Jukebox providing you with over 30 1 1 hours cu music.
0'jet v 900 50 '13s;.
‘ Over 30 hours of music in entire library.
' User selectable; tempo.
¦ Selections may be played thru any MIDI synthesizer using the MID!
CONNECTION (sold separately).
' User selectable key (transposition).
* Includes lukebox program to allow you to: 11 Select all pieces
artel sil back to hours of uninterrupted music.
2) Select the order you wish the pieces to be played,
3) Select the number of times you wish each piece to be played.
' Turn sour AMIGA into an incredible mu-ic machine.
' Over 800 masterpieces in entire library.
• Over 101) songs in each volume.
1 Not rust single note music, but 4 lull voice arrangements.
' l.arh volume contains ewer 3 Ilnurs of music.
' Stereo,.Mono, and MIDI output simultaneously.
* You mav specify sound of eac h of the voices.
SYMPHONY LIBRARY Vol 6 Nostalgit Richard Rogers Songbook Music F rom the Movies Pop Music from the 6U's, 7d's, & 80 s SYMPHONY LIBRARY Vol 7 Variety (Tasut ai Pop Music from the 30's thru 80S Popular Classics SYMPHONY LIBRARY Vol 3 Pop Mush: from the 4U s. 311 s, 60's. 70 s Beatles Medley SYMPHONY LIBRARY Vol 4 IV I heme Music Beethoven, Broadway. A. Blues Kenny Rodgers Greatest Hits Best of the Beatles Cctuulrv Classics SYMPHONY LIBRARY Vul 5 Popular Potpourri Polka Party Classical tribute to Bach Christmas treasure SYMPHONY LIBRARY Vul 1 Music from stage. Screen N IV Pop Musk ltom the Til s,
(id's, c 7(l’s Old Time Favorites Classii a!
Chrelmas ipupular & traditional) Patriolie Polka Party SYMPHONY LIBRARY Veil 2 Music Potpourri Barbershop Quartette Religious Music Hits of the 80's Variety Surprise!
THE MIDI CONNECTION [he MIDI CONNECTION is a hardware interface to allow you to conned the AMIGA to any MIDI synthesizer, drum machine, sampler and more. MIDI IN and OUI connectors with cables allow easy installation. The MIDI CONNECTION mas he used with our SYMPHONY MUSIC LIBRART nr the MIDI SYMPHONY.
E '
CONNECTION hardware interface give you the features you need to
compose serious music using.MIDI equipment. Features include:
• Filter out unwanted channel or type of MIDI data.
• Simple music editing.
• Real Time recording and playback.
• Playback all or individual tracks.
• track delete, copy, transpose or mix
• Editing
• Metronome available tor synchronization.
• tempo ma be modified.
• Change kev (Transposition).
• Quantizing to 12nd or 64th.
• Playback any or all tracks at any tempo.
• tracks mas be deleted, copied, transposed or mixed.
• Supports up In Hi tracks.
• 10, IKK) events per trai k
• 40.000 events all tracks.
• Mav he used as a sequencer.
• Menu driven.
• Overdubbing.
• User friendly graphics display.
COMING SOON SYMPHONY SOUND SAMPLER. I his high speech digital sampler allows vnu to create and modify sounds. When used with the SYMPHONY Piano Keyboard, you can turn your AMIGA into an EnsOniq Mirage.
SYMPHONY WRITER. A composition program spec ideally lor developing sheet music.
SYMPHONY 61 note Piano Keyboard. This professional quality keyboard transforms your AMIGA into a real synthesizer.
CASIO CONNECTION. I Ins program and lhe67 note keyboard allows CZ-I0I and CZ-10(M) owners to use a lull size keyboard.
AMK. A is st twdfmarK of Commodorc-Ami o Inc. Mirdjlc rs a trademark of lnsumt| trio.
(312) 879-6880 We act npt ASH, CHECK, CUD, VISA and MASTER CARD
Shipping aurl handling US and Canada. S3. U0 Shipping anti handling outside Ihe US and Canada... S3.00 COD charge . $ 2.00 Illinois residents add 6 ¦ ¦'.ties tax.
60 H5 $?
AmigaNotes By Richard Rae — Music Editor CompuServe [72177,3516] AN INTRODUCTION TO MIDI If you’ve been tracking the various Amiga music packages soon to hit the market, you've probably run across references to MIDI capability. You've also heard about MIDI if you've been involved in the ongoing Amiga ST debate, or if you own one of the current crop of synthesizers. I want to devote this column to a very brief introduction to MIDI and why it is a valuable asset.
MIDI stands for Musical Instrument Digital Interface. Like RS232 or Bell 212S, it is a standard for communications. And like other standards it can be extremely useful... consider where we’d be if every computer manufacturer used his own (incompatible) serial communications protocol!
MIDI ts the result of a collaboration between numerous musical instrument manufacturers, and is guided by the MID!
Manufacturers Association (MMA) and the International MIDI Association (IMA). The IMA sells both abbreviated and detailed MID! Spec packages, and membership is available to anyone willing to pay the dues. (The address will be given at the end of this column in case you're interested...) WHAT’S 1TGOOD FOR?
Now before delving into the specifics, let's ask a very important question: what can MIDI do for you? The answers are many and varied, depending on your interests in music.
Let's take a look at just a few of them.
Possibly the most important application to many of us is the "tapeless studio”. If you wanted to record a difficult synthesized passage in the days before MIDI, you had to play it over and over until you got it right. With MIDI, the choices multiply. Oh, you can still try it until you get it right. But instead of using a mechanical deck time and again, waiting through the rewind as well as adding wear and tear, you can record the passage digitally with your computer via MIDI.
"Rewind" is instantaneous, and there are no mechanical parts involved. What if you almost got it but made one tiny little mistake? With most MIDI sequencers you can actually edit the recording on a NOTE BY NOTE BASIS. This is almost impossible on a tape deck, except for those of us with infinite patience and a steady hand with a razor blade. Or suppose the passage is just too fast for your fingers. You can slow down the data rate: reduce the tempo of your recording and play the piece at a speed you can handle. After recording at the reduced speed, you can return the tempo to normal with no
loss of quality. If you just can't play at all, you still have an option: enter the score note by note in musical notation format. Once the score is entered, you can ask the computer to play it back through the synthesizer just as if you had originally played it on the keyboard.
Tassllifiigi ©©[TEmpojaGBiragj™ ©W3 61 MIDI will also help you "clean up your act". If you've recorded a passage which is perfect except for timing, most sequencer programs will allow you to quantize the data, "snapping" the notes to the nearest beat.
MIDI is a great time saver as well. If you want an arpeggio to run throughout a piece of music, you can play it once, then use a "cut and paste" function to replicate it throughout. If you decide to rearrange a composition after getting it into the sequencer, you can move or transpose entire sections as needed. (These functions are actually a part of 1he music composition program being used, but without MIDI you would be limited to either hearing the music via the program's internal voices or playing the piece manually on your synthesizer until you got it right.)
With a computer acting as a MIDI sequencer, you also have the advantage of multi-tracking. With two synthesizers you can record a bass part on one track, then listen to the bass track while recording a rhythm track. Each Track which you "lay down" in this manner is totally independent of the others.
Using this layering technique you can literally become a one man band, limited only by the number of synthesizers you own.
At this point I expect at least a few of you are protesting. "I just bought the computer, now you're telling me to buy a bunch of synthesizers?" No, notatali. But remember, MIDI is a system for COMMUNICATIONS. An RS232 port is useless unless you have a modem or serial printer or SOMETHING to talk to; so it is with MIDI. If you're not interested in controlling electronic music instruments, if the internal sound capabilities of the Amiga are sufficient for you, then you will not be interested in MIDI.
If you dream of setting up your own electronic music studio however, look at the cost advantages of MIDI. Without it, you can produce eight part music with only one synthesizer and an eight track recorder, with complete control over the final mixdown. Bui even the least expensive eight track format -
- quarter inch — will cost you at least $ 1500 discounted for the
deck alone. Then you need a mixer and at least one synthesizer,
and... On the flip side, four track cassette decks are
currently available for about $ 600 retail, which means you'll
probably be able to buy them discounted for about $ 300 very
soon, MIDI synthesizers are getting cheaper all the time; I
have seen the Casio CZ101 for $ 250 discounted, and the Yamaha
DX-100 is readily available for less than $ 400. With a four
track deck, MIDI tape sync interface, sequencer program, and
two synthesizers, you can create the same "eight track" final
product. We'll get into the details of this in another article;
suffice to say that you can save quite a bit of money this way
if you already own the computer.
MIDI can also do housekeeping for you. Every synthesizer is limited in the number of voices you can store in it (with instruments like Yamaha's DX-7, where the storage is on RAM cartridges, the limiting factor is the pocketbook: those cartridges can cost upwards of $ 100 each). With a MIDI librarian program, you can store your sound patches on disk and load them into the synthesizer a voice or bank at a time.
Programming synthesizers through the tiny LCD or LED "window" provided is difficult at times. A patch editor allows you to use your computer to program the instrument, viewing an entire screen of information at one time.
For live acts, your computer can coordinate the entire show.
MIDI doesn't stop at keyboard instruments... there are MIDI controlled mixers, effects boxes, amplifiers, lighting controllers, drum machines, and more. MIDI can bring them all together!
The key to this versatility is the fact that MIDI handles DATA, not sound: rather than recording musical tones, a MIDI system stores information about what note is played on which instrument when and for how long.
Now to delve a little deeper. Like RS232, MIDI is both a hardware and a software standard. Let's take a look at the hardware aspects of MIDI.
MIDI HARDWARE A MIDI connection is made with a multi-wire shielded cable less than 50 feet in length and terminated with five-pin DIN connectors. DIN connectors are those strange multi-pin connectors one sometimes finds on the back of expensive receivers and open reel decks; similar connectors are found on the Commodore 64 and Tandy Model 100.
DIN connectors have been accepted in Europe for years, and were chosen for MIDI because they provided a relatively inexpensive yet reliable multi-pin connection. (For manufacturers desiring even higher quality, the MIDI spec allows substitution of XLR connectors if the manufacturer also supplies appropriate adapters with the equipment.)
The five pins of a MIDI DIN connector are arranged in a semicircle and are surrounded by a metal shell with an indexing notch. The center pin is a ground and is connected to the cable shield, while the two outermost pins are not used; this leaves two pins to carry signals. A logical person would assume that, like RS232, these two pins carry transmit and receive data. Our logical person would be wrong! MIDI technology reaches back to the days of the teletype; it is in fact a five milliamp current loop which requires two wires to transmit data.
Now why on Earth would designers of a modern high- technology interface choose such an antiquated technique?
The answer is three-fold and relates to one very simple fact: MIDI was designed as an inexpensive interface for musical instruments.
The first reason for a current loop interlace is noise rejection.
Anyone who has performed in an "electric" band knows how various buzzes, clicks, and hums can work their way into an audio system. The same random signals which simply cause irritating noises on the audio lines would play havoc with a digital control system like MIDI. A current loop is a low impedance system, and as such is very resistant to external interference.
The second reason for choosing a current loop is closely related to the first: isolation. Performers in that same live band will tell you that singing through an amplifier with a different ground polarity from the guitar amplifier they are using can be a literally shocking experience. In addition to the potential damage to sensitive digital equipment, ground loops of this sort are responsible for many of the hum problems encountered during an audio engineer's career. A properly designed current loop like that used by MIDI can allow complete isolation between various instruments.
The third reason for the MIDI current loop is one of cost.
Rather than requiring line drivers or level shifters, the MIDI current loop can be driven by a simple transistor or TTL gate.
Isolation on the receiving end is provided by the only potentially high cost component: an optoisolator. In fact, a complete MIDI interface for a UART port can be built with only six components: a TTL or transistor driver stage, an optoisolator input stage, three current limiting resistors, and a protection diode! It would be difficult to develop a more straightforward interface providing all the benefits of the MIDI current loop.
MIDI data is transmitted serially at a rate of 31.25 Kbaud, or 31,250 bits per second. Those of you who know baud rates will recognize this as a very non-standard speed. With the exception of very old equipment, all standard baud rates are multiples of 300 baud: 300, 600, 1200, 1800, 2400, 4800, 9600, and 19200 are most offer seen. Why an oddball baud rate? As with the current loop, a close examination reveals sound reasoning.
For example, why should MIDI use a "standard" baud rate?
MIDI has nothing to do with RS232 communications. In fact, using one of these data rates almost forces us to use a dedicated "baud rate generator"... an unneeded expense.
31. 25 Kbaud was chosen primarily because it is easily derived
from most computer system clocks. In other words, divide one
Mhz by 32 and you get 31.25 Khz! For a two Mhz clock one
would divide by 64, and so on. Dividing by a power of two is
trivially easy, and in some cases these signals are already
available elsewhere in the system. 31.25 Kbaud was also
chosen because it is the highest "easily derived" data rate
less than 50 Kbaud. The latter figure is the practical upper
limit for some of the components which might be used in the
design of a MIDI port.
As mentioned earlier, MIDI data is transmitted serially. The format is a ten bit word with one start bit, 8 data bits, and one stop bit. Unlike the baud rate, this is a very standard format.
A MIDI port can therefore be driven by a plain vanilla serial device such as a UART or ACM.
Before we delve into the software aspect of MIDI, let's take a moment to discuss Amiga vs. Atari vs. everybody else.
The Atari 520ST and 1040ST both have built-in MIDI ports, and Atari fans like to point that out when engaged in a "My computer is best" battle. True, the Amiga does not have a built-in MIDI port, but let's examine why this is not as serious a problem as ft could be.
The main difficulty for computers without MIDI ports is the non- standard baud rate. In most cases, the standard serial ports provided are simply not capable of communicating at 31.25 Kbaud. With the Amiga, this is not the case. The designers knew that MIDI was an important issue, and designed the serial port to support the required baud rate. In fad, prerelease versions of the Preferences program included a serial port baud rate designated as "MIDI": 31.25 Kbaud. The current version of Preferences does not include this selection, but the Amiga still supports it.
(I am told that the Preferences to be shipped with AmigaDOS version 1.2 once again includes the 31,250 baud setting.)
(The version 1.2 Preferences does restore the MIDI baud rate setting. In fad, it has another screen in Preferences to allow other serial settings as well, such as 7 or 8 bits, parity, stop bits, etc., beyond the simple baud rate setting in the 1.0 and 1.1 Preferences.)
With the baud rate hurdle behind us, the only requirement is a simple interface which converts RS232 signals to and from MIDI signals. This interface is almost trivially simple, and can be built with a handful of components. There are easily a half dozen manufacturers developing MIDI interfaces which simply plug into the serial port; most will retail for around $ 50.
MIDI SOFTWARE The software portion of the MIDI spec is as straightforward and well thought out as the hardware. MIDI communication is based on the message. All MIDI message bytes fall into one of two categories: status or data. A status byte always has its most significant bit (MSB) set; a data byte always has a zero MSB.
(Immediately we have gained an advantage: simplicity of programming. Rather than keeping data counters and worrying about resynctug in the case of lost data, our status bytes are always distinguishable from data. And we can even transmit messages within messages.)
A message is typically a status byte followed by one or more data bytes. There are several types of messages: channel system, common system, real-time, and system exclusive.
CHANNEL MESSAGES Channel messages are generalized pieces of information which any synthesizer might need in order to make a sound, such as key depressions and patch selection.
[firagigSiftKg] ©smpMtilirag™ © 63 =MIDI IS HERE!
Midi-Designs is Proud To Introduce The MD-1 Midi interface For The Commodore Amiga.
Features Include:
• IN. OUT, THROUGH jacks lor sending and receiving data
• Attractive custom metal enclosure
• 1 year warranty
• 100% compatible with Amivision's Music Studio 1M Software and
all popular synthesizers including those manufactured by
Yamaha. Casio and Korg.
Price $ 49.95 MO-l INTERFACES ARE IN STOCK FOR IMMEDIATE SHIPMENT For Additional Information or to Order, write Or call MIDI-DESIGNS 2232 Summit Slreei Columbus. OH i1320l
(614) 267-6755 Dealer Inquiries Invited Midi-Designs is a
division of J. Michaels Company The status byte of a
channel message includes a four bit number in the lower
nibble which is the message's channel.
MIDI devices monitoring the data stream can be set to respond to all messages or only the messages for a single channel. Thus we can connect sixteen devices via one daisy- chained cable and each will respond independently.
With the MSB set to one indicating a status byte and four bits for the channel number, three bits are left to encode seven different channel messages. These messages are note off, note on, polyphonic aftertouch, control change program, change channel, after touch, and pitch wheel change.
(Some of these messages are self-explanatory while others are probably not familiar to you. Since this is just an overview of MIDI, I'll save the details for a later article.)
Note that with three bits there are eight, not seven, possible bit combinations. The eighth combination is used to signal a system message. System messages do not include channel numbers; the lower nibble is instead used to indicate the type of system message.
SYSTEM COMMON MESSAGES System common messages are intended for all devices in a MIDI system, and encompass general purpose data. These messages include song position pointer definition, song selection, and tune requests.
SYSTEM REAL-TIME MESSAGES System real-time messages are also intended for all devices in a MIDI system, and deal with timing of events. These messages are composed solely of status bytes. For this reason they can be interleaved with other messages, even appearing within another message's data stream. Real-time messages are given this priority because, after all, timing is everything. The real-time message group includes the timing clock, song start, song continue, and song stop.
SYSTEM EXCLUSIVE MESSAGES These messages are intended for specific devices. Unlike channel messages, reception of system exclusive messages is based on the device itself rather than channel number. For example, a system exclusive message may be sent to all Yamaha devices in a system, and it will be ignored by Casio or Korg machines. Within a system exclusive message all bets are off. Such a message might be a bulk digitized audio dump, a patch parameter transfer, or any function unique to one manufacturer's system. Interpretation of the data between the status byte and EOX
(end-of-system-exclusive- message) byte is the sole responsibility of the receiving device.
RECAP As you can see, the MIDI definition is well structured yet flexible. Hardware is designed to be cheap and rugged.
Status bytes are immediately discernible from data. Three groups of messages encompass song parameter setup, system timing, and actual song execution, while a fourth message group provides a manufacturer the ability to implement anything not already included in the spec. The MIDI spec states that its purpose is to "enable... synthesizers, sequencers, home computers, rhythm machines, etc. to be interconnected through a standard interface", and all in all it does its job well. There are problems, but they are for the most part minor and avoidable.
MIDI continues to become a unifying force in the fields of computers and electronic music. Expect to see further columnson the wide world of MIDI and its applications.
Until next month... Nybbles, Rick For more information about MIDI, contact: International MIDI Association 11857 Hartsook Street North Hollywood, CA 91607
RUN ON 68020 SYSTEMS (This is a low cost way of entering
the 68020 market).
OPERATION TRANSPARENT TO USERS — EMULATOR LOADED AT BOOT TIME, DOES NOT AFFECT AMIGA BUNDLED SOFTWARE: Emulator, Manx Aztec C and Lattice C Floating Point Libraries, Assembler Tools (Allow Motorola Floating Point mnemonics to be freely mixed with 68000 code and assembled with standard AMIGA assemblers), substitute for Motorola Fast Floating Point software library.
PLANNED SUPPORT: Fortran, Scientific Library (FFT, Matrix Algebra, etc.), and other languages.
Bare Board, Software, Documentation and Manual, parts list $ 149 INTRODUCTORY PRICING: FPU-1 FPU-2 FPU-3 Assembled and Tested without 68881 Math Chip, Software, Manual $ 269 Assembled and Tested with 68881 Math Chip, Software, Manual $ 459 Send orders to: NCP PO Box 645 Monrovia, CA 91016
(818) 334-1002 Add (3.00 lot shipping A handling. Payment should
bs by check or Mousy Ordsr California Rtsldanta add 6%
salts tar.
By Bryan D. Catley When you sit down in a restaurant, the menu you receive is invariably a direct reflection of the quality of the restaurant itself. So too is the case with menu-driven programs; they are a direct reflection of the overall quality of those programs which employthem.
As you are probably aware, Amiga Basic gives you full access to the pull-down menus available to the Amiga, and allows you to establish your own menus, which you control directly from your program. And that is exactly what this tutorial and the accompanying program will show you how to do! You will learn to:
- establish your own menus
- set up a menu interrupt routine, and turn it on
- enable and disable items on the menu
- insert a checkmark next to the selected item
- enable a menu item only after certain other events haveoccured
- turn off the menu interrupt routine, and restore thel standard
Amiga Basic menus Further, an expansion of the accompanying
program will be suggested which will provide an ideal first
"hands-on" experience with custom menus.
Please read this article completely, and examine the program listing before you actually enter it; and when you do, be sure and save a copy before you execute it for the first time.
The Menu Demonstration Program This program is completely menu driven. When you use it, you will be presented with a header screen, and nothing else will happen until you select a menu item.
Pressing the right mouse button will reveal a new set of three menu titles: "Boxes", "Polygons", and "Run". Moving the pointer on top of any one of them (while keeping the right button pressed) will reveal the associated "pull-down" menu list. Move the pointer up and down on the list, and note how the enabled items are highlighted. When the desired item is highlighted, release the right button to select it.
Boxes. This menu allows you to open a window, and fill it with continually changing squares or oblongs in randomly selected colors. There are also items to clear and close the window.
Additionally, you may also move the Window around the screen by using the standard "Drag Bar".
65 Polygons. This menu provides similar features to the Boxes menu, except the shapes are triangles, or are randomly created with up to eight s ides.
Run. This menu has a single item: Quit. Selecting this terminates the program and returns you to Basic. Note that "Quit" is only enabled when both the "Boxes" and "Polygons" windows are closed.
Overview of Custom Menu Handling Setting up and using your own custom menus is really quite simple, and entails the following steps:
- set up your custom menus
- turn them on and advise Basic of the name of the routine to
receive control when a menu item is selected
- continue processing, or wait for a menu item to be selected
- when a menu item is selected, the interrupt routine determines
Ihe item selected, sets appropriate indicators, and returns to
the main program
- the main program examines the indicators and takes appropriate
- when no longer required, the custom menus are turned off, and
the standard Amiga Basic menus are restored That's all there is
to it! Now let's take a closer look at how we can accomplish
all this.
Establishing Your Custom Menus Look at the first (initialization) part of the program; you will see a number of MENU statements. It is these statements which define the menus that are going to be used by the program. (This statement is also used to modify the status of existing items). The format is: MENU number, Item, mode[,"title"] number is the number of the menu being referenced.
Numbers start at one and go from left to right across the screen. In the standard menu set, "Project" is one, and "Output" is four item is the number of She item within the menu. They start at zero (for the menu title box), and go up by one for each item in the menu. In the standard "Project" menu, "New” is one, and "Quit" is five mode defines the desired status of the menu item; it may be 0,1, or 2.
Your Menu, Sir!..... 0 Item is disabled; i.e. it may not be selected. If zero is selected for item zero, (the menu title), Ihe entire menu is disabled regardless of the setting of individual items within that menu 1 Item is enabled; i.e. it may be selected 2 As for 1, except a checkmark is placed in the item box when il is selected "title" is the text that is to appear in the menu box. If you plan on using mode 2, you must Seave two spaces to the left of the text. This is omitted when modifying the status of an existing menu item Looking at our MENU statements, you will see that all our
custom menus are fuliy defined, but only the "Quit" and "Open" items are enabled. This is because, initially, they are the only valid selections. Also, note that we have defined three menus that will replace the first three standard menus.
However, the fourth standard menu (Output) would still be displayed, so we turn it off with the final MENU statement that contains a null title.
Finally, we use the "MENU ON" statement to tell Basic to start using Ihe custom menus, and the "ON MENU GOSUB...." statement is used to identify the subroutine to be given control when a menu item is selected. Both statements must be issued before the custom menus may be used, but they do not, necessarily, have to be adjacent.
The Menu Interrupt Subroutine Once menu trapping has been turned on, this is the subroutine that will automatically receive control when any menu item is selected. And it is a genuine subroutine that ends with a RETURN statement! When it terminates, control is always returned to the statement following the one being executed when the menu item was selected, it is just as if you had inserted the following piece of code between each statement in the program: "IF MENU(0) 0 THEN GOSUB RtnName". Note that Basic temporarily turns off menu trapping while in the interrupt routine, so recursive menu
traps are impossible.
When first entered, we use the functions MENU(O) and MENU(1) to determine the selected menu and menu item respectively. (MENU(O) is reset to zero each time il executes so you may poll it, if desired, much as you might poll INKEYS). Now that we have these two values, it becomes very easy to direct the program flow by using the "ON... GOTO...” statement; once for the menu, and once for the item.
If an "Open" item was selected, the first thing that is done is to disable the "Open" item (no longer a valid request), and enable all the other items they are now perfectly valid requests). Further, the variable "opncount" (previously initialized to zero) is incremented by one. If it is Ihen equal to one, the "Quit" menu item under4 5"Run" is disabled. This prevents the user from terminating the program while any windows are still open.
Selecting a "Close" item essentially reverses the "Open" processing. The "Open" item is enabled while the others are disabled, "opncount" is decremented by one, and the "Quit" item is enabled when it becomes zero. The user is now able to select "Open" again whenever it becomes desirable.
66 Us (p?
When a processing item ("Squares", "3 Sided", etc) is chosen, the selected item is enabled with a checkmark, while its partner is enabled with no checkmark; (remember, it is still a valid selection). Additionally, the window containing the selected shapes is made the current window, (thereby forcing it to the front).
Should "Clear" be selected, the window is made current and cleared, and both processing options are enabled with no checkmarks.
The most important things of all to note are that each processing option ends up by setting the variable "type” to an appropriate value, and that the variable "sw" is set to one just before the RETURN is executed. The contents of these two variables allow the main body of the program to detect that a menu item has been selected, and carry on as appropriate for the item selected.
"type" essentially tells the main program to wait for another menu selection (via the SLEEP statement) or to do some specific processing; draw boxes, polygons, etc. "sw" allows the draw routines to discover that another menu item has been selected, to know that it is time to stop the current processing, and to proceed next as appropriate, via "type".
The Main Program Body Here, the routines within the main program body are executed as a direct result of the menu selection (via the "type” variable).
If it's appropriate to wait for the next menu selection, "type" directs the program to "WaitRtn" which uses the SLEEP statement to wait for the next menu selection. (Note that SLEEP may also be used to wait for MOUSE events, if you have also included a MOUSE interrupt routine within your program).
If some form of processing is required, the processing routine only maintains control until another menu item has been selected, (via "WHILE sw=0... WEND"). If you remember, the variable "sw" is set to zero just before the routine is given control; and the only way it can be changed is via Ihe menu interrupt routine. In this example, it is Irue for the routines that draw the various patterns on the screen; they simply keep executing until "sw" changes value I You will undoubtedly notice that the only way "QuitRtn" can be reached is when the user selects "Quit" under the "Run" menu, (and only
after they have closed the other windows at that}!
On Interrupt Routines In General Now, if you are not used to 1he concept of interrupt routines, this may all seem a little strange, but study the program carefully. It is really very simple (though a little different), and I m sure you will get the hang of it very quickly.
II is important for two reasons. First, interrupt routines may also be used to handle mouse "clicking"; and secondly, to gain control whenever an error occurs. You should already be beginning to see the possibilities of using interrupt routines in your programs.
Your Menu. Sir!
However, if you are still having problems seeing their importance, consider the operating system that is driving your Amiga. It functions almost solely on interrupts; for one thing, that's how it handles multitasking. Each time an interrupt (and the possible interrupts that it may encounter far exceed anything we have discussed here) occurs, it gives control to the next task on its "task list". This lash then maintains control until the next interrupt occurs, when the next task receives control, and so on as long as there are tasks to service!
Understanding them is important because while they will not be needed in many programs, occasionally you will be able to make really effective use of them.
An Extension Exercise As a first exposure to using interrupts, why not try a simple expansion to this program? Once you understand how it functions, just add a third window in which to draw circles and ovals! The code necessary to do this is, for the most part, a duplication of code that already exists; (the polygon code is essentially a duplication of the boxes code). While not essential, one thing you should do is to make the "Circles" menu the third one, and move the "Run" menu to position number four. (Remember, the menu is a direct reflection!)
A couple of final notes. When using custom menus, it is not mandatory to use an interrupt routine. There is nothing wrong with using "x=0: WHILE x=0;x=MENU(0): WEND” to wait for a menu selection. In some cases it may even be the most appropriate method; but it does not provide a great dea!
Of flexibility, it frequently requires a lot of duplicated code, moditications will become increasingly complicated and CPU cycles are being used continually.
There are also a couple of other statements that may be used when processing custom menus which we have not discussed. They simply provide even more flexibility, and you may find out about them in your Amiga Basic manual.
Well, i trust you have found this little excercise interesting, and that you are now familiar enough with custom menus and interrupt routines to try them in your own programs. They do require a slightly different thought process (if you use the interrupt approach) in the design of your programs, but they provide a tremendous amount of flexibility. They also remove the need for you to supply your own error checking and handling code — it's all built in!
One more door has been opened!
' Amiga Basic Menu Demonstration Program Version 1.0 by Bryan D. Catley 'CLEAR: RANDOMIZE TIMER SCREEN 1,320,200,4,1 WINDOW 2,"Menu Examples16,1 COLOR 3,2: CLS 67 nN&sOinigj ©©[fifipyStoD™ MENU 1, 0,1, "Boxes" MENU 1,1,1,"Open” MENU 1,2,0," Square” MENU 1,3,0," Oblong" MENU 1,4,0,"Clear" MENU 1,5,0,"Close" MENU 2,0,1,"Polygons" MENU 2,1,1,"Open" MENU 2,2,0," 3 Sides" MENU 2,3,0," Random" MENU 2,4,0,"Clear" MENU 2,5,0, "Close" MENU 3,0,1,"Run” MENU 3,1,1, "Quit" MENU 4,0,0,"" LOCATE 7, 6: PRINT"? Fogram Control" LOCATE 9,15: PRINT"i s via" LOCATE 11,16: PRINT"MENUS" LOCATE 16,8: PRINT"(Use
Right Mouse Button) MENU ON: ON MENU GOSUB Menuint opncount=0: type=2 1 Perform Routine Necessary as a Result of Menu Election 1 DoMenu: sw=0 ON type GOTO QuitRtn, WaitRtn, BoxesRtn, BoxesRtn, PolyRtn, PolyRtn WaitRtn: SLEEP: GOTO DoMenu BoxesRtn: WHILE sw=0 windw id=WIND OW(2): windhit=WINDOW(3) bxl=INT(RND*windwid) — 1: bx2=INT(RND*windhit) — 1 x windwid-bxl: y=windhit-bx2 col=INT(RND*15) IF type=3 THEN IF x y THEN x=y bx3=INT(RND*x) IF sw=0 THEN LINE (bxl, bx2) — STEP (bx3, bx3), col, bf ELSE bx3=INT RND*x): bx4=INT(RND*y) IF sw=0 THEN LINE (bxl, bx2) — STEP (bx3, bx4), col, bf END IF FOR n=l TO 500: NEXT WEND
GOTO DoMenu PolyRtn: WHILE sw=0 windwid=WINDOW(2}: windhit=WINDOW(3) IF type=5 THEN n=3 IF type=6 THEN n=INT(RND*5)+3 FOR m=l TO n x=INT(RND*windwid) — 1: y=INT(RND*windhit) — 1 IF x l THEN x=l IF y l THEN y=l AREA (x, y) NEXT IF SW=0 THEN COLOR INT (RND*1S): AREAFILL FOR n=l TO 500: NEXT WEND GOTO DoMenu QuitRtn: MENU OFF: MENU RESET WINDOW CLOSE 2: SCREEN CLOSE 1 END Your Menu, Sir! ~ This is the Menu Interrupt Routine. It Automatically Receives Control when a Menu Selection is Made i Manuint: menu 0 =MENU(0}: menul=MENU(1) ON menuO GOTO MIBoxes, MIPolys, MIRun MIBoxes: ON menul GOTO
MIBxOpn, MIBxSq, MIBxOb, MIBxClr, MIBxCls MIBxOpn; MENU 1,1,0: MENU 1,2,1: MENU 1,3,1: MENU 1,4,1: MENU 1,5.
WINDOW 3,"Boxes:", (8,8)-(232,120),22,1 wind3col=INT(RND*15): C0L0R, wind3col: CLS opncount=opncount+l: IF opncount=l THEN MENU 3,1,0 type=2: GOTO MIExit MIBxSq: MENU 1,2,2: MENU 1,3,1 WINDOW 3 type=3: G0T0 MIExit MIBxOb: MENU 1,2,1: MENU 1,3,2 WINDOW 3 type=4: GOTO MIExit MIBxClr: MENU 1,2,1: MENU 1,3,2 WINDOW 3:COLOR, wind3col: CLS type=2: GOTO MIExit MIBxCls; MENU 1,1,1: MENU 1,2,0: MENU 1,3,0: MENU 1,4,0: MENU 1,5, WINDOW CLOSE 3 opncount=opncount-l; IF opr.count l THEN MENU 3,1,1 type=2: GOTO MIExit MIPolys: ON menul GOTO MIPyOpn, MIPy3Side, MIPyRnd, MIPyClr, MIPyCls MIPyOpn: MENU 2,1,0: MENU 2,2,1: MENU
2,3,1: MENU 2,4,1: RENU 2,5,1 WINDOW 4, "Polygons:", (48, 56) — (296,168), 22, 1 wind4col=INT(RND*15):COLOR, wind4col: CLS opncount=opncount+l: IF opncount=l THEN MENU 3,1,0 type=2: GOTO MIExit MIPySSide: MENU 2,2,2: MENU 2,3,1 WINDOW 4 type=5: GOTO MIExit MIPyRnd: MENU 2,2, 1: MENU 2,3,2 WINDOW 4 type=6: GOTO MIExit MIPyClr: MENU 2,2,1: MENU 2,3,2 WINDOW 4:COLOR, wind4col: CLS type=2: GOTO MIExit MIPyCIs: MENU 2,1,1: MENU 2,2,0: MENU 2,3,0: MENU 2,4,0: MENU 2,5,0 WINDOW CLOSE 4 opncount=opncount-l: IF opncount l THEN MENU 3,1,1 type=2: GOTO MIExit MIRun: ON menul GOTO MIRunQuit MIRunQuit: type=l: GOTO MIExit
MIExit: sw=l: RETURN *AC* Join your fellow Amiga Users on People Link.
Plink is a low-cost, high-quality network accessible via the Telenet and Tymnet data networks.
More than five hundred public domain programs are available for downloading from our voluminous data libraries.
Also very popular, you can find as many as 40 people in our weekly Amiga conferences.
To receive a free hour tryout, call our 800 modem number for information.
Customer Information 800-524-0100 AMERICAN PEOPLE 312-870-5200 3215 N. FRONTAGE RD. SUITE 1505 ARLINGTON HEIGHTS, IL 60004-1437 *800-826-8855 (via modem)
* 312-822-9712 ml a 6 trademark of Commodore-Aniga, Inc. IFF
Brush to AmigaBASIC 'Bob' Editor By Michael Swinger- = I bought
my Amiga primarily for the graphics and animation
possibilities, as I suspect many others did, and planned to
write my own applications in BASIC. When Amiga Basic was
finally released in December, it was encouraging 1o see that
most of the graphics potential could be tapped in BASIC. On the
other hand, it was discouraging that the supplied Object Editor
was capable of creating only small, primitive shapes. It proved
difficult to rewrite.
Deluxe Paint was released at about the same time, and the first thing! Did was to try to stick an IFF file created in Deluxe Paint straight into the BASIC OBJECT.SHAPE statements — which didn't work, of course. If you LIST the Object Editor program, the very first page tells you the format of the file it produces. When the IFF format was made public it was then possible to see why the two tile formats were incompatible, but it was also clear that they both contained much the same information, and that it should be possible to convert one format into the other.
The listing here is a graphics editor in Amiga Basic. St will convert Deluxe Paint files into the same formal as that produced by the BASIC Object Editor, so that a "brush" created in Deluxe Paint can be programmed as a "BOB" in Amiga8asic, using the OBJECT.SHAPE commands.
I wrote the editor for my own use. It has several limitations: One, the brush file cannot be compressed, so that the maximum size of a bob is around 40 pixels wide by 90 pixels tall. If the brush is larger, the bit map will be compressed, since it takes up too much space. Two, although the brush file contains the color information for the PALETTE statements, it will not be written out.
So that you can refine and improve this editor, if you wish, let me describe briefly the formal of an IFF brush file (such as that produced by Deluxe Paint, Aegis Images, or Graphicraft), and the AmigaBasic file handling routines you will have to grapple with.
You can examine a binary file in the CLI by entering TYPE filename OPT H. The hexadecimal representation of the data in the file will be arranged in four groups of digits on the left of the screen: the right side shows any ASCII equivalent.
A Deluxe Paint brush, the "Wizard", looks like this: 464F524D — This spells "FORM", An ID.
00000A24 — The size of the file, stored in eight hex digits, which is 4 bytes, also known as a long word'.
494C424D — Spells "ILBM", Interleaved Bitmap-this is what will create most of the incompatibility problems-more on this later.
424D4844 — Spells "BMHD", Bitmap Header, another ID.
00000014 — The size of the header information which follows.
0043003E — First four hex digits are width of the image; the second four are the height. This is stored as 2 ’short words’ of 2 bytes each.
00000000 — X and V origin for grabbing a brush.
05020100 — The first pair of digits (a single byte) is the depth, of color planes; the second byte is the transparency or background register; the third byte is the compression type- a 0 means the file is uncompressed, a 1 means the bitmap has been compressed — more trouble; the fourth byte, which should be 0, is merely padding to insure that everything is beginning on an even byte boundary.
00000A0B — The first short word indicates which bit pattern means "transparent"; the second short word is the pixel aspect ratio, in this case 10:11, or 320 X 200.
014000C8 — 2 short words which give the width and height of the page.
434D4150 — Spells "CMAP", the ID for the color map.
00000060 — The size of the CMAP which follows.
The CMAP stores the color data as triplets of red, green, and blue for each color register in values of zero to fifteen. The first two long words hold the RGB values for the first two registers and part of the third in this example; 00000D F0 FORO DODO The RGB values would be 0,0,13; 15,15,15; etc. Divide these values by 15 for an approximation of the PALETTE values to be used in AmigaBasic. The problem is that the information is stored in each byte in reverse order-ie., F0 instead of OF. The CMAP continues until all the registers are described.
At this point you will encounter another series of Ids, depending on whether the file is of a brush or a full screen. If the bytes spell "GRAB", this is for a brush. If it spells "CRNG", this is the color cycle information for a full screen image.
424F4459 — This spells "BODY", the actual bit map of the image.
00000988 — The size of the BODY which follows.
MODULA-2 ’Bob' Editor the successor to Pascal
• CODE statement for in-line assembly code.
» Error lister will locate and identify all errors in source code » Modula-2 is NOT copy protected.
¦ 320-page manual ¦ FULL interface to ROM Kernel. Intuition.
Workbench and AmigaDos ¦ 32-bit native code implementation with all standard modules ¦ Supports transcendental functions and real numbers Benchmark!
Compile Unk Execute Serve of Eratosthenes 16 32 5,3 Null Program 14 10 — Added (eaturei of Modula-2 not found In Pascal n Programs may be broken up into Modules for separate compilation
* Multi-tasking is supported ° Module version control p Open
array parameters (VAR r: ARRAY OF REALS) a CASE has an ELSE
and may contain subranges ¦ Dynamic strings of any size ¦
Machine level interface Bit-wise operators Direcl port and
Memory access Absolute addressing Interrupt structure
* Type transfer functions ¦ Definable scope of object Pascal and
Modula-2 source code are nearly identical. Modula-2 should be
thought of as an enhancement to Pascal (they were both designed
by Professor Niklaus Wirth) Regular Version: S89.95 Developer's
Version: $ 149.95 The developer's version supplies an extra
diskette containing all of ihe definition module sources, a
symbol file decoder, link and load file disassemblers, a source
file cross referencer. The hermit file transfer utility and the
source code to several of the Amiga Modules.
77) 1 SOFTWARE, INC. Dallas. Texas 75238 ¦ (214) 340-4042
CompuServe Number: 75026,1331 10410 Markison Road 1 Telex:
888442 For some reason the body of an IFF bit map is
interleaved, which may make it easier lor a human to inspect
the data.
Interleaving means that the first row of the image is written out for each piano, and then the next row for each plane, etc. We have to "de-interleave" the data so that an entire plane is written out for the whole image, row by row, before going on to the next plane.
If you have Listed Ihe Object Editor (or typed LUST in the output window to get a printout of the program) you can see that the IFF data simply has to be read in to an editing program, filtered to extract only the data we need, and then re-arranged to be written back out in a string format that the OBJECT.SHAPE statements can use.
The CVL function will read a long word (4 bytes) from a file and convert it into an integer. The MKL$ function is the mirror function to write it back to a file in string format. CVI and MKI$ do the same for short words of 2 bytes. To convert a single byte to an integer, Ihe ASC function works just fine.
The editor will prompt you for the complete pathnames of the files to be converted and the files to be created, so keep notes of these. You can avoid lots of frustration by specifying the pathname of a file by its drive, rather than its disk name, especially if you're using one drive. When you first create the brush in whatever graphics program you are using be sure to use the first color as the background color, and specify that color for PALETTE 0 in your BASIC program so that the same color ends up as the transparent background for your bobs.
Some refinements you can add to the editor are routines to decompress files, write the CMAP data into a series of PALETTE statements, and the ability to write the data for bobs orforthe PUT and GET routines.
Program listing: 1 ** Instructions, sort of ** 1 This editor will convert a BRUSH created in Deluxe Paint 1 into the format required for a BOB by the OBJECT.SHAPE ’ statements in AmigaBasic.
' The brush can be in 320 or 640 X 200 or 400 resolution 1 and in 32, 16, or 8 colors.
At the moment the Deluxe Paint file cannot be compressed.
' An approximate safe max. size is 40 pixels wide X 90 1 pixels tall-- An "input past end" error when loading the IFF file means 1 you're trying to read a compressed file.
1 Graphicraft (v. 1) doesn't compress files, so this editor could read a full screen, if you can then figure out how to 1 stuff the resulting 41 K or so into a BASIC array to PUT it 1 on the screen..... 1 If you want more information on BOB and SPRITE file 1 formats, list the Object. editor program in the demos on the 1 EXTRAS disk. For more info on IFF files, see all the stuff on 1 CompuServe, especially a file ’called "IFF.text", which describes the file format.
1 Fiddle with this, please!! It needB a decompression routine!
(PLANES); PRINT 2, MKL$ (WYDTH); PRINT 2, MKL$ (HEIGHT); PRINT 2, MKI® (24); PRINT 2, MKI®(XC); PRINT 2, MKI$ (0); FOR J=0 TO PLANES-1 FOR 1=0 TO HEIGHT-1 PRINT 2, BODY$ (J, I); NEXT I NEXT J CLOSE 2 INPUT " TYPE 1 TO EDIT ANOTHER FILE, OR 2 TO QUIT ”, S ON S GOTO RESTART, QUIT RESTART: CLEAR: GOTO START QUIT: END ¦AC- MIDI GOLD MIDI Interface for the Commodore Amiga Personal Computer Available now.. from Golden Hawk Technology!
• Dual MIDI Out and single MIDI In connections.
• Sync Out connection provides clock and start stop control for
drum machines and other devices.
• Connects directly to the serial port.
• Custom metal enclosure.
• Complete with interface cable.
• One year warranty.
• Full technical information included.
PRICE $ 79.00 — Free shipping on prepaid orders.
427-3 Amherst Street, Suite 389, Nashua, NH 03063
(603) 882-7198 Weekdays 2PM — 10PM EST VSSA'MastcrCard CODs
Accepted DEALERS INQUIRIES WELCOME Amiga Is a trademark of
Commodore-Amiga, Inc. AMIGA Multi User Software by
Conceptual Computing if
1) Q _
- I f 7 -
* Attach up to 8 (or morel terminals to your Amiga, each running
any number of tasks or windows a.it °r, iyi.
* Also provides Pipelining, Shell programs and Cut and Paste
Editing r any console window.
Sof twang $ 120 US S loO San.
Demo disk nd uun 3 13 US $ IS Can.
If you want to us* on* external terminal — just attach It to th* serial port.
For more than one external terminal, you need to buy a multiplexer.
Port Multiplexer *360 US *500 Can.
3 Port Multiplexer *690 US *960 Can.
Please add *S shipping for software and *10 for each multiplexer.
Canadian prices for Canadian orders only. Ontario orders add 7V. Tax.
Conceptual Computing 603 Caatlefield Ave., Toronto, Ontario, Canada M5N 1L9 U16) 701-7742 Also available: Aalga MIDI Interface 1*5 US *55 Car.. — *5 shipping 2 Megs For Your AMIGA!
A must for software developers Allows more programs to run simutaneously and faster Can be used to increase system RAM and or as a FAST RAM DRIVE Uses standard memory bus architecture to allow future compatibility Allows full use of memory expansion port for additional peripherals In Use By Many Major Software Developers For Over Six Months AX2000 2 MEG RAM Board $ 899.00U.S. ($ 1276.00 CDN) AX10001 MEG RAM Board $ 729.00 U.S. ($ 1035.00CDN) Complete in case, nothing else to buy!
1 year manufacturer warranty!
DEALER INQUIRES INVITED Comspec Communications Inc. 153 Bridgeland Avenue, Unit 5 Toronto, Ontario, Canada M6A2Y6 (416)787-0617 Shipping via courrier: within Canada add S25.00. To U.S.A. add 5100.00 U.S. — includes custom clearance Amiga is a registered trademark of Commodore Business Machine, The AMICUS Network By John Foust — Compusen e [72337,135] People Link AMICUS Delphi JOHNFOUST uuep through the Weil "ifoust" I walked into an Amiga dealer in another city. The storefront window had a prominent Amiga banner, and a shelf and fable near the window had the most Amiga software that
I had ever seen in one place, including COMDEX. Best of all, there was a healthy stack of the latest issue of Amazing Computing.
A box for True Basic caught my eye. At this time, the demo disks were just shipping, and! Didn't think the package was out yet. I was pleasantly surprised. This store is in a not-so- iarge northern Wisconsin town. I asked about the magazine.
The salesman said it was selling well.
He was thinking about sending for the Amicus disks, but he hesitated, since one customer brought in AMICUS disk 9, and he felt it mightn't be worth the six dollars. He worried that their was a lot of duplication between the Fred Fish disks and the AMICUS disks.
I hope this hesitancy isn't common among dealers. Six dollars a disk isn’t much, considering it takes someone two minutes per disk copy, and more time to address and stamp the envelope. Ordering a collection of twenty disks is a formidable expense, if you are unsatisfied, you can always reformat the disks. The consumer price of blank Amiga disks is four to five dollars each, in a box of ten, at many dealers, although the smart shopper gets them mail order.
Duplication is a justified thought, of course. Hey, i must have 200 disks of Amiga software, and I've given up all hope of organizing it. However,! Have tried to keep duplication to a minimum. There will always be a small amount, since I don’t know the contents of the Fish disks in advance. Also, Fred Fish claims to "speak no BASIC", so I think he shies away from AmigaBasic, and favors hard-core C programs.
I think the AMICUS disks are the best value in the Amiga software market today. It's certainly much cheaper than subscribing to a commercial network, and downloading software. The disks are well-organized, and most function in a one-drive system, and 99 percent of the texts and programs are accessible from Workbench. Some dealers reorganize them for customer satisfaction. For instance, they might make a telecommunications disk to help sell modems, or an Amiga Basic disk to promote a user group.
The Lure of Large Memory It is hard to confess, because I know many Amiga owners will begin to lust, but I’ve had a two-and-a-half megabyte Amiga for several months. I can't imagine going back to 512 K memory. Extra memory truly spoils Ihe Amiga owner.
Picture this: No more 'bumps' or ’gronks.’ No requests for the Workbench disk. Imagine 1.8 megs free on the Workbench memory indicator. Imagine compiles and links without disk access, and at much greater speed.
It comes for a price, of course. The Comspec board I’ve been using has a list price of $ 1079 American, but the lack of custom fees in Canada brings this to about $ 900 there. I’m sure memory board prices will drop, as the market widens, and more people join the Amiga fold. So far, there are at least a half-dozen other contenders in the RAM expansion market.
Ah, the joy! The absence of 'gronk, gronk, gronk’ makes it worthwhile for me. The increased speed is a joy, too. The RAM disk operates much faster than the disk drives. Version
1. 2 of the operating system increases the speed of the RAM: disk
even more.
In my Workbench startup-sequence, I first start a new Cll process. This Cll window lets me start my work immediately, while the startup-sequence finishes in the initial background Cll.
The next line in the batch file is the RAM test and the Comspec ’AddMem' program. It takes a few seconds to check the memory, and tell the operating system that this memory can be used for programs.
’AddMem' is the program supplied on the developer disks, for use with the prototype memory expansions that Amiga used in-house. Each memory expansion box on the market comes with a program like this, if the original 'AddMem' doesn't work, or if they want 1o add a custom memory check program, as Comspec did. Their program also performs the function of 'Addmem.'
Reportedly, some boxes will ’auto-config’, which means the operating system will recognize the board immediately, and add the memory itself. I’d suspect these 'autoconfig' boards will cost extra, since it requires more chips and design effort.
This auto-configuration ability is a new feature of version 1.2 of the operating system, due out later this fall.
Next, the slarlup-sequence copies most of the Workbench disk to the RAM: disk. This happens in the background, while I'm doing something else in the Cll. This takes about two minutes, as compared to the 15 second boots without the RAM expansion. Then it loads the Workbench.! Must admit.! Don't use the Workbench slot. When my Amiga had only 512K,! Didn't even load the Workbench, because I would rather use the memory for a RAM: disk. Now, with several megabytes, who cares? After the initial gronking, I won't have another disk access, unless I ask for one explicitly.
A series of ASSIGN commands in the batch file tell the INSIDE YOUR GREY BOX AMIGA SCHEMATICS hi Ml- |You can investigate:
• RAM Expansions
• Auto Boot Rom Mods
• Disk Drive Interfaces
• Additional Ports
• DMA Expansions
• Video Enhancements
• Etc. $ 24.95 Orders Toll Free 10-6 MON-SAT 800 762-5645 14840
Build America Dr. Woodbridge, VA 22191 Info: (703) 491-6494
Cardinal I Software no operating system to look at the files in
RAM: instead of the files in DF0: whenever I type a command
in the CLI.
The RAM: disk is an easy place to store things. It's like a hard disk, everything is there, and you don't have to worry if you've stored it on the right disk.
Download to RAM: When downloading or uploading files from a network, I use the RAM: disk. My terminal program, Online!, normally writes out each block of data as it is received. This can waste a lot of time, and wasting time on a pay-by-the-minute network is not my idea of fun.
With the RAM: disk, uploading or downloading happens much faster. Of course, this works well on a 256 K or 512 K Amiga, too. If you say "RUN ONLINE!" In the CLI instead of just "ONLINE", you can switch back to the CLI, and copy each downloaded file to disk, while your terminal program is still running. To tree up memory, you can delete each file after it is copied to disk, while another file is downloading to the RAM: disk.
In the RAM: disk, the files cause no conflicts with what I'm doing on the floppy drives. If the upload or download is going to take a while to complete, I can click the telecom window to the back. A beep signals the end of the transmission. Meanwhile, I can work on something else.
Pain Squared!
If you've ever been angry after a visit from the Guru, consider amplifying that anguish several times with a RAM: disk. Of course, you are lulled into a sense of security after several days of no trouble. If you’ve got several files in RAM: and a program crashes, you lose the files. Perhaps you've had this happen already, but what if you had a megabyte or two of files in the RAM: disk? Rebooting takes a long time, so you won't be back up to speed for several minutes, and the files are gone, daddy, gone.
One night, I crashed the machine while ARCing files for uploading to a network. In the background, I was uploading a large file, and it had been going for about ten minutes. I lost about three hour's work, all told. I was furious! I still had copies of the files in question, but ARCing takes a long time, and the ARC files would just clutter my disks, so I left them in RAM:
The crash was caused by a program I found on a public domain disk I got in the mail. Needless to say, I erased the program after this, and formatted the disk to further curse its bits.
Now, everytime f run a new program, I save the important files in RAM: to disk. In general, I've been more careful, and I save my important RAM: files to a spare disk every quarter hour.
When compiling or assembling, I don't have a single disk access, and it goes so much faster. The Lattice compiler, the Aztec compiler, the Metacomco assembler, and the object libraries all fit into RAM: with room to spare for my source code. I truly think I could get along with one drive, if I didn’t have to copy disks so often.
Tt almost makes the Amiga a nice development machine.
Let's face facts, program development without a hard disk is a hassle. The combination of a large hard disk and a large RAM disk is almost ideal. Floppies and limited memory are an frustrating pair of limitations. I cant wait to get a hard disk, to shorten the time it takes to boot, and to say goodbye to gronks and disk swapping forever.
At first, I was inclined to run as many programs as possible at the same time, t soon noticed a degradation in speed. My telecom program would display jerky bursts of characters, and the disk drives would gronk at a different frequency. Mouse and window re-sizing speed would drop.
Some programs don't work well with the extended memory.
The most common problem shows up in gadgets in the program. Instead of a detailed drawing of a button or switch, the gadget is solid black, or filled with random bits.
A proper Amiga program must ask the operating system for memory visible to the Amiga graphics chips. The RAM expansion on the front of your Amiga is visible to the graphics chips, but the memory expansion on the side is not.
The operating system calls the graphic memory chip memory.
The programmer must specifically request chip memory for the renderings of gadgets, otherwise, the drawings will not be displayed correctly.
Dan 'DJ' James, a regular on People Link, wrote a program that adjusts program files so this problem is removed. An Amiga executable file is composed of several pieces, and the operating system loads these pieces into the type of memory needed for the program, in chip or non-chip memory.
James' program massages the program file, and tells the operating system to put al! Data objects in chip memory. This program works well, and ss on one of the newer AMICUS disks. See the catalog for more information.
Future Amiga chips Confirming long-standing rumors, Jay Miner, the general manager at Commodore-Amiga, announced that C-A pSans new Denise and Agnus chips for future Amiga computers.
Agnus is the video chip in the Amiga. The current chip can only address 512K of memory, meaning that all sampled sounds and video graphic images must reside in this memory, also known as 'chip' memory.
The new chip can manipulate 2 megabytes of memory. The new chip set will also support non-interlaced graphics. We'll have more details in a future issue. The news arrived at press time.
Modula-2 from Switzerland The latest news on the Modula-2 compiler on Fred Fish disk 24 came across Usenet recently. According to Claudio Hieder, of the computer science department at ETH Zurich, this version on the Fish disks is a pre-release of the © DM 75 CARDINAL ANNOUNCES ITS 2x2 EXPANSION DISK DRIVE GIVE YOUR AMIGA
2. 6 MEGABYTES 2x2 CONSISTS OF: 2 5 1 4” 80 track drives,
electronics and software.
• AMIGA DOS MODE — Emulates
3. 5” drives with 880K each.
• PC DOS MODE — Provides dual 40 track, 360K drives.
$ 595.00 JUKI 5510 C Color Printer (Uses Epson Codes) $ 469.00 Modula-2 Compiler used for MacMETH for the Macintosh. A new version and system will be available soon. Hopefully, 'soon' means something different in the Swiss software vocabulary.
"The current version of the Compiler, alpha tests are coming soon, works much better than the PD version, also the runtime system is much better. Range errors and other Traps don't lead to Gurus anymore," he said. "The system will be release at the end of this year and will include all necessairy interfaces, a source-code debugger, a linker..." Nope, it sounds like Wirth's grad students understand the American software industry, if 'soon' means five to six months.
Did you know that Americans call Prof. Wirth by value, and that the Europeans call him by name? Did I tell this joke already? You see, we pronounce it 'worth', and they say Veerth', the way he pronounces it.
New AMICUS disks Disk 11 is finally ironed out. First, here are the C programs on the disk. As I mentioned two issues ago, it has a program called 'pm', a performance monitor. It presents a chart- recorder-type display, in a sizable window. It displays a rolling chart of CPU activity and memory use, separated into chip and fast memory.
'ps' is like the Unix command of the same name. It shows a list of the currently active CLI processes, and information about them. By Dewi Williams.
'epri' shows a list of CLI processes, and lets you adjust the priority of a process. In a multitasking computer, each program in memory gets a share of the processor's time. The priority is a measure of that share. By adjusting the priority of a process, you can speed the execution of one process, at the sake of the others.
Vidtex' is a program to display the run-length-encoded pictures from CompuServe. For example, up-to-the-minute weather maps are available in one forum on CompuServe.
With any terminal program, you can capture the graphic weather display. It is sent as a stream of seemingly meaningless characters, but this program will turn it into a high or medium resolution picture. This was written by Amazing Computing author George Musser.
This disk contains several programs from Amazing Computing. It is much easier to get this disk than to type in all the source code to a multi-page Amiga Basic program.
Author Steve Pietrowicz has two contributions on this disk, including the pointer editor article in this issue, and his example programs from the discussion of optimization of Amiga Basic.
There is an extensive calendar, diary and date book program, written by Mark Hurst, of Sheridan, Oregon. In a strange connection, this program came to me through a pitching coach of the Seattle Mariners. It is superbly done. For example, when you open the diary, the pages are animated, and the cover of the book opens v hen you start.
76 H9 The IFF brush to Amiga Basic BOB converter program, by author Jim Swinger, is here. BOBs are the OBJECT shapes you can draw in Amiga Basic.
Jim Meadow's 3D graphics program is here. There is a loan amortization program, a program to draw and play sound waveforms, a program to draw Hilbert curves, a 'madlib' generator program, a talking mailing list program, a program to demonstrate reading the mouse on a high resolution screen, a slot machine game, a strange, pachinko-like game, a game of TicTacToe, and a short program that makes wierd sounds.
For executable programs, there are three programs for displaying the three most popular Commodore 64 paint program pictures. One displays Doodle! Pictures, one shows Koala Pad pictures, and one shows pictures.
There ts a program called 'cp', like the Unix command. This is a copy program, like the AmigaDOS copy command, except it uses the popular '*’ wildcard filename method of Unix, CP M and PC-DOS.
'diff and 'ssed' are more Unix-like programs, 'diff' compares two text files, and outputs a list of their differences, 'ssed' is a stream-oriented editor that can take the output of 'diff, apply it to one of the files, and produce the other.
'dirutil' is a handy, Intuition method of manipulating files on a disk. You can delete, rename, copy and move files, all within intuition-style menus and requesters.
A single assembly language program, 'els', by Tom Caldwell, is a short example of sending a clear-screen sequence to the screen, and handling simple command line arguments.
Modula-2 is more and more attractive as an Amiga development language. Like assembly language, development is hampered by a lack of examples, and the C- language emphaisis in the ROM Kernal Manual.
TDI Modula-2 has a recent bug fix that corrected a long list of problems in the original release. Les Caudle, of TDI, claims the new version is much faster, and produces smaller, faster code than before. He said the Sieve benchmark is now down 1o about 2400 bytes of executable code, Richie Bielak was a major bug-slayer and Modula guru in this effort. Three of his example programs are collected here.
One is called trails', which is one of those moving worm displays. Another is a simple requester example, and another is a lower-to-uppercase converter program, a handy tool for sloppy typists.
There is a single Forth example of a well-known circle-drawing algorithm. This short example is by Amazing Computing columnist Jon Bryan.
Last, there is a shareware collection of spreadsheet templates for the Analyze! Spreadsheet, from Micro-Systems Software. There are a dozen here, they include a checkbook balancer, an inventory sheet, and a loan amortization sheet.
New Fred Fish Disks The Fish disks are now 30 in number.
Disk 25 contains a new version of Hack, ported to the Amiga by John Toebes. This is the graphic version, as compared to the character-based graphics of the previous version.
Disk 26 has 'unhunk', a program to process the Amiga executable load file format. It lets you coalesce code and data hunks, 'ckermit' is a nearly complete Kermit server, with a connect mode, ’ps' is the process priority program described in AMICUS disk 11. ’archs' bundles a series of text files for transmission through a network.
Disk 27 has AmigaBasic demos I promised on AMICUS disk
13. These include the new ConverlFD program, and programs to use
Ihe new IFF hunk type called ACBM, which is a format more
conducive for display under Amiga Basic.
ScreenPrint is an example of using library calls to access AmigaDOS (unctions.
Disk 28 has more Abasic games, by the author of the Monopoly game. These include cribbage, backgammon, milie bournes, and othello. For C programs, this has 'shar', the Unix-compatible file archiving and unpacking program, and SuperBiiMap, which demonstrates the use of ScrollLayers, and how to sync SuperBitMaps for printing.
Disk 29 contains a demo version of Aegis Draw. The Save feature is disabled, but otherwise, this is the real production program. 'cc' is another version of the C compiler froni-end program from an early Fish disk, but this version is set up for the Manx compiler.
'enough' is a program to test for the existance of a given resource such as memory, disk drives, etc. from the Cll.
'player' is a public domain playing program for Aegis Animator script files.
'rubik' is an animated Rubik's cube program, a merger of the 'skewb' and ’amiga3d' programs.
This disk has a public domain implementation of a C string library.
'vt100' is a terminal program that emulates the VT100 terminal. It also has Kermit and Xmodem protocols.
It has the Disk 30 is a collection of shareware programs.
Amiga Basic BBS I promised tor AMICUS disk 12.
Fonted is an Amiga font editor, which might hold you until the official font editor comes with version 1.2 of the operating system.
MenuEdilor is a useful program for programmers. It lets you design Intuition menus, and then outputs the proper C code to effect those menus in your C program. Mostly, this is a translation of the things you designed into data arrays in the right format for the operating system. This sort of program is sorely needed for the Amiga, Most other windowed operating systems rely en a program like this, such as the Macintosh, or Windows on an IBM PC.
StarTerm is a program by one of the SYSOPs of CompuServe. This is a full-featured terminal program that exceeds the capabilities of Online in some ways.
Please note that these programs are shareware. This means the author is requesting money from you, if you and your conscience feel that you get sufficient benfit from its use, they want your money. Since these authors are more sensitive to the 'public domainness' of their property, the contents of this disk might prevent Amazing Computing from distributing it.
This is the addendum to the AMICUS list, to delineate AMICUS 11.
Disk 11 C programs dirutil Intuition-based, Cll replacement file manager, S-E epri shows and adjusts priority of Cll processes, S-E ps shows info about Cll processes, S-E vidtex displays CompuServe RLE pictures, S-E Amiga Basic programs pointered pointer and sprite editor program optimize optimization ex ample from AC article calendar large, animated calendar, diary and date book program amortize loan amortizations brushtoBOB converts small IFF brushes to Amiga Basic BOB OBJECTS grids draw and play waveforms hilbert draws Hilbert curves madlib mad lib story generator mailtalk talking mailing
list program meadows3D 3d graphics program, from Amazing Computing article mousetrack mouse tracking example in hires mode slot slot machine game tidadoe the game switch pachinko-likegame weird makes strange sounds Executable programs unix-like copy command, E screen clear, S-E unix-like program to show differences between files unix-like stream editor uses 'diff' to fix files chart recorder performance indicator cp els diff output ssed pm Assembler programs els screen clear and Cll arguments example Modula-2 trails moving-worm graphics demo caseconvert converts Modula-2 keywords to uppercase
Forth Breshehan circle algorithm example Analyze 12 templates for the spreadsheet Analyze!
Do you know where your bugs are?
This C programmer is finding his bugs the hard way...one at a time.
Thatfs why it's taking so long. But there's an easier way. Use Amiga-Lint 2.00 Amiga-Lint analyzes your C programs (one or many modules) and uncovers glitches, bugs, quirks, and inconsistencies. It will catch subtle errors before they catch you. By examining multiple modules, Amiga-Lint enjoys a perspective your compiler docs not have.
— Indirect files automate testing.
NEW: ANSI C extensions (enum, prototypes, void, defined, pragma) and many additional checks.
Full K&R C Use Amiga-Lint to find: inconsistent declarations argument parameter mismatches uninitialized variables unaccessed variables unreferenced variables suspicious macros indentation irregularities function inconsistencies unusual expressions... MUCH MUCH MORE User-modifiable iibrary-description files for the Aztec and Lattice C compilers.
All warning and informational messages may be turned off individually.
— Use it to check existing programs, novice programs, programs
about to be exported or imported, as a preliminary to
compilation, or prior to scaling up to a larger memory model.
— All one pass with an integrated pre-processor so it's very
— Has numerous options and informational messages,
- It will use all the memory available.
— PRICE: $ 98.00 MC, VISA, COD (Includes shipping and handling
within US) PA residents add 6% sales tax. Outside USA add
$ 15.00, Educational and quantity discounts available.
Trademarks: Amiga-Lint (Gimpel Software), Amiga (Commodore) %mm ®mum 3207 Hogarth Lane • Collegeville, PA 19426
AMIGA By Gerald Hull People Link DRJERRY One of the more
common approaches to software development is to code the
application initially in a high-order language (HOL), to
get it up and running as soon as possible.
Then, as necessary or desired, various subroutines are rewritten in assembly language for increased speed and efficiency.
Whatever your motivation — you may have some particular algorithms already coded in assembler, orwish to perform low- level functions that aren't easily accomplished otherwise -this article will show you how to interface routines written in 68000 assembly language with an Amiga HOL.
The particular HOL in my example is Lattice C, and the specific interfacing procedure I describe is pretty much limited to that language, insofar as it relies upon use of "Mink."
Manx C would use a similar method of linking assembly language routines. It has a different frame pointer, and its registers are organized differently than Lattice. Of course, in Manx, in-line assembly code is permitted. In TDI Modula 2, you can insert in-line code, in the form of constants, but not true assembly language source text.
However, so far as my description of HOL structures goes, much of what I say should carry over to other dialects of C, as well as any similar high-level languages on the 68000. Such languages use "local stack frame" (LSF) based subroutines.
They include Modula-2 and Pascal, for instance, but do NOT include languages such as Basic, Forth, and Fortran. I touch on some of the variations in HOL implementation in later sections.
A "local stack frame" is a nifty way of providing any subroutine in a program with its own local variable space, located by relerence to a special "frame pointer". More importantly, the LSF approach guarantees that any such subroutine can call any other and be confidant that parameter values will not get messed up, and the program's flow of control will not become confused. Such routines can even call themselves, and for this reason are said to be "recursively reentrant".
The instruction set of the 68000 microprocessor in the Amiga has several instructions designed to implement the local stack frame concept. Later on, we will examine exactly how they work. First we must confront a more immediate problem: How do we isolate the C code that we want to replace with assembler? In what remains, I assume familiarity with the Amiga's command line interface, the CLI, and ED editor, as well as access to the Lattice C compiler and the MetaComCo Macro Assembler.
©I!®® 79 I will describe the process I followed in structuring 68000 code to replace a particular C subroutine, and in assuring that it would link back into the original program.
SEPARATING A SUBROUTINE In order to replace C code with assembly language, the first thing you want to do is isolate it in its own subroutine. If your goal is to speed up your program, try as much as possible to keep all loops internal to the routine. As we shall see, a certain overhead is accrued everytime a LSF subroutine is called.
The program in Listing 2, DOODLE. C, is nothing special: it's a computerized version of a little doodle from grade school. I doubt it is the cleverest way on the Amiga of doing what it does. However, it is relatively short, and has a routine 'doodit ()' which contains a number of subroutine calls and all the serious number crunching in the program. This makes it usefulforourpurposes, since [designed it that way.
The next step removes the function 'doodit ()' from DOODLE. C. Once it is removed, the program wifi not link without a reference to '_doodit'. We can play a shell game with how that is provided.
How is this done in DOODLE. C? Notice that Listing 2 contains only a single 'include' tile, in the line include doodle.def ’. That file, in Listing 1, holds all the other 'include' files, as well as all the define' statements and any "non-official" structure definitions. By putting all this information in a separate include file, I can also easily provide exactly the same information to 'dooditQ' when I want to compile it separately. Further, note that the variable 'INTERNAL' has been set to FALSE in DOODLE.DEF. The symbol 'FALSE' is defined as "0" in INCLUDE EXEC TYPES. H. Turning back to
the listing of DOODLE. C, you will see C preprocessor directives surrounding the routine we are intending to assemble: if INTERNAL void doodit (port. Color, box) ffendif NEW!
EXPERT SYSTEM KIT Those of us who get excited about computers have been looking for the application that takes us into the twenty-first century. This is it! Now you can create an expert system that will grow with your Amiga. Would you like a computer system straight out of science fiction sitting in your own home or office? How powerful can it be? As big as your imagination, because you build it the way you want it!
We supply the EXPERT SYSTEM driver along with a sample knowledge base. Complete instructions guide you to creating your own application, Experiment with artificial intelligence! The software driver analyzes your data and learns to draw the correct conclusions. Think of the applications! Diagnose circuits, plant and animal diseases. Predict events based on past performance- weather, stock market, sports. Build the ultimate science project or develop a commercial application! We will be supporting this kit with a newsletter so you can share knowledge bases, techniques and ideas.
PRICE: $ 69.95 plus $ 3 shipping and handling.
COD add $ 4. Visa MC orders call (612) 871-6283. Money orders or checks to: Interactive Analytic Node 2345 West Medicine Lake Drive Minneapolis, Minnesota 55441 80 WoDM® hs These directives provide the means by which 'doodit)' is removed from its parent program: as long as ’INTERNAL’ is defined as 0 (FALSE), the C preprocessor will pass over the routine as rf it isn’t there.
However, not only do we want 'doodit ()' out of DOODLE. C, we want it to be able to stand on its own, because the assembly language which replaces it has to stand on its own.
This is why the variables it shares with other parts of the program are explicitly passed as parameters: 'port', ’color,’ and 'box'. 'dooditO' also shares the constants NODE, SIDE, PART, XM and YM, requiring their separate definition in the assembler version of the routine. A more modularly designed program would pass all these values to ’doodit ()’ as parameters.
The routine has other features which facilitates its translation into 68000 assembler. It contains no floating point math, for instance. To use "float" or "double" variables would introduce additional complexities that are best avoided.
Floating point chews up time to boot. And finally, the decremental x and y for-loops were designed with an especially sexy 68000 branch instruction in mind called DORA.
SEPARATE COMPILATION OF FILES I will assume that you have entered the texts of Listings 1 and 2 into appropriately named files. They are also available on the AMICUS disks, and in the data libraries of several networks.
Your C disk should contain a batch file which both compiles and links programs; the custom is to call such files something like "MAKE". When you try to compile and link DOODLE. C, you will get a "link failure" message citing ’_doodit' as an "unresolved external reference".
Note that DOODLE.DEF must ba in your root directory, or you’ll get a lot of compiler errors as well. Check RAM: to see if it contains the file DOODLE. O. If it's not there, you probably have a line like 'delete file. o' in your MAKE file. You'll have to comment that line out, and recompile.
Next, using the define block and write block utilities of Amiga's ED editor, put a copy of the ’doodit ()’ routine into a separate file: RAM: DOODIT. C. Insert the line include doodle.def at the very beginning of the fife, just as it is in DOODLE. C. In this way, you will provide reference to the very same global definitions and constants that were required for compiling the main program. The 'doodit ()' routine may not need them all, of course, but the excess cannot cause any harm.
Now exit, and execute the MAKE batch file on DOODIT. C as well. If you have done everything correctly, it will compile, but fail to link, because of unresolved external references: ’_main', '_GfxBase', and '_boxinit'. In fact, you now have everything you need, but in two different places.
In compiling DOODLE. C you will have produced an object file named DOODLE. O, and in compiling DOODIT. C, you will have produced another named DOODIT. O. To produce a complete program, all we need do is Sink the two together, and each will provide the other with the external references it is looking for.
LINKING SEPARATE FILES TOGETHER To do this, it will be useful to have a special batch file just for that purpose. Make a copy of your MAKE file under another name (1 call mine MAKI}. Then delete (or "comment out") all the lines that have to do with compilation, and amend the link sequence so that it can deal with two separate files. This is what my MAKI looks like.
.key filet, file2 echolinking file1 . o with fiie2. o to filcl."
: c slink: lib Lstartup.obj+ file1.o+ file2. o + library: lib lc. lib+: lib amiga.lib to filet;delete file1.0 *** THESE LINES;delete file2. o *** COMMENTED OUT date dfO: now Assuming that both DOODLE. O and DOODIT. O are in your RAM: directory, you can now link them together with the following command: 1 execute makl ram: doodle ram: doodit If everything has gone right, this will leave an executable program in the RAM: directory named DOODLE. It will behave just as if we had changed the delinition of INTERNAL’ in DOODLE.DEF to define INTERNAL TRUE' and had compiled it. Oh great. It looks like
we've gone to all this trouble for nothing! But actually we have accomplished something very important: we have the program DOODLE. C looking to a separate file for the subroutine ’doodit ()'. Now all we have to do is provide an assembler-based version of that routine for the linker, and it will be none the wiser! This, of course, is where the file MACDOOD.ASM, in Listing 3, enters the picture.
Once you have gotten a copy of MACDOOD.ASM into RAM: you will want to change disks and apply the assembler MAKE batch file to it. And again you will get error messages from the linker: ’_boxinit' and ’_GfxBase' are unresolved. GfxBase is a pointer used to calculate the calling addresses of Make and Draw. But, more importantly, you will have left MACDOOD. O in RAM: an object file produced from the 68000 translation of dooditQ.
Finally, retrieve your version of MAKI (mine's on the C disk).
After making sure that you also have DOODLE. O in RAM: you can link the C program to the assembly language subroutine with: 1 execute makl ram: doodle ram: macdood There now should be a new executable program in RAM: named DOODLE. Mission accomplished! Now when the program goes to execute the ’doodle ()’ subroutine, it will be using the assembler code listed in MACDOOD.ASM rather than the original C code. For what it's worth, the new version of 'doodit ()' is 40% smaller than the C version, and the revised version of DOODLE is approximately 37% faster._ THE EXPLORER A tool to match your
Would you like...to scout the inner workings of your Amiga?...a live window onto memory to watch what other tasks are doing?...an on-line memory map to tell you where you are?
...to actually see the assembly language code, in human readable form, that exists inside your Amiga?...to step through a piece of code to see what it does?,.to capture your own source code and customize it?
The EXPLORER has some powerful features that make it a superb extension of your curiosity. Features: display memory and files in Hex and ASCII, memory modify, search, move, fill, display and change registers, disassembly trace, load programs, disassemble to disk. Output to printer or disk file.
Powerful commands: loops, text display, realtime RAM view, S. more! The EXPLORER puts your sense of wonder in charge!
The EXPLORER can be used for serious program development too! As a debug tool the EXPLORER’S command set is compact and efficient. You can execute your commands within loops, creating live displays of RAM or registers while you test your program. You control the display format too, and even display informative messages. No need to waste valuable time typing that patch into memory every time you debug. Simply write a new command to do it for you. After all, what are computers for? When you want to save the contents of RAM or a series of trace steps for future examination, just send them to the
printer, or better yet, send them to a disk file!
PRICE: $ 49.95 plus $ 3 shipping and handling.
COO add $ 4. Visa MC orders call (612) 871-6283. Money orders or checks to: Interactive Analytic Node 2345 West Medicine Lake Drive Minneapolis, Minnesota 55441 AofufflsHiniji ©omnptuiSDirDgj™ © US)®® 81 The first indicates the overall features of your 68000 routine.
The second illustrates how to make calls to other subroutines, including Amiga ROM Kernal modules. These recipes can be adapted to one's own needs.
• Quick reference io all commands
• Fits over keyboard — made of durable vinyl
• Professionally designed Get the Guru Busters!™ ["? Amiga DOS
S9.95? Microsoft Basic $ 9.95? Both S16.95 I Charge my:? Visa
? Master Card? Check money order I Credit Card No. __ Exp.
Date- I Name_______. Address------ | City____ State-ZIP- ¦
Signature-- — I Michigan residents add 4% sales tax. Add
S1.50 shipping & handling
* Mail to: Slipped Disk • 31044 John R • Madison Heights, Ml
48071 Dealer inquiries welcome. Phone: 1313) 533-9803 Allow? — 4
weeks lor delivery HOL SUBROUTINES IN ASSEMBLER Now we get to
the really fun part: how do you design 68000 assembly language
routines to ensure that they will replace C subroutines? The
essential structures involved are relatively simple; they are
isolated and abstracted in Figures 1 and 2.
Figure 1: A structure for recursively reentrant, local-stack- based subroutines.
SUBROUTINE STRUCT M68000 EXAMPLE Allocate Locale Frame LINKFP, LVAL Save Needed Registers MOVEM. L D2-D7 SP, — (SP) Execute Function code Restore Used Registers MOVEM. L (SP)+, D2-D7 SP Deallocate Local Frame UNLK FP Return RTS Let's now focus in on some of the details of MACDOOD.ASM, to see how those structures are implemented, and to illuminate other features of the 68000 code.
Perhaps the most common and most rewarding strategy for speeding up assembly code is to keep as much data as possible in registers. This works best, of course, with processors that give you many general purpose registers.
Instructions work faster on register variables, and you avoid the expense of fetching and storing information from memory.
The 68000 family of processors facilitates this strategy by providing the user with a total of 16 general purpose registers. More precisely, Motorola has given us eight data registers, DO through D7, and eight address registers, AC through A7. Unfortunately, many assembler instructions distinguish between the two types, which qualifies the term "general purpose". On the other hand, the architecture is so much cleanerthan Intel.
I have made full use of registers, as the initial comments on "registerusage" indicate. Of the address registers, A7 is always the "stack pointer", or SP. I have chosen A6 to be my "frame pointer" (FP) — we'll be hearing more about it shortly.
Aside from these structural roles, A2 is the only other address register i use. I need it because the variable 'box' is a pointer. It contains the address of a sequence of memory locations, as opposed to what is in those locations. We will shortly learn the advantage of this.
The other registers mentioned are used more or less equivalently to variables in the C version of ’doodit ()’, as the comments point out. D4 through D7 are used for different variables at different times.
Listing 3 begins with a number of "assembly directives".
Unlike ordinary assembler commands — for example, MOVE — they do not produce any machine code, but provide processing instructions to the assembler.
Figure 2: A structure for calling recursively reentrant, local- stack-frame subroutines.
Push Params. On Stack MOVE. L 16(FP), — (SP) MOVE. L 12(FP), — (SP) MOVE. L 8 (FP).-(SP) Save Reqs. If Necessary MOVEM. L D0-D1, LVAR(FP) Jump To Subroutine 1JSR BOXINT Get Return Value MOVE. L D0.12(FP) Restore Anv Saved Reqs.
MOVEM. L LVAR(FP), D0-D1 Clean Up Stack LEA 12(SP), SP The XREF statement tells the assembler that certain labels won't be found in this particular piece of code, while the XDEF statement tells it what labels it should make visible to the linker. As you can see, all of the subroutines have acquired an underscore prefix (as in '_Move'). The Lattice compiler expects this, as do most C compilers.
Next, there are a number of "equates" (EQUR and EQU commands) which function very much like define' statements in a C program. They also help to make the logic of the code more readable by eliminating "magic numbers".
These equates direct the assembler to replace one symbol with another throughout the listing prior to the assembly process.
Note that registers are treated differently than other expressions: I need EQUR (as opposed to EQU) to establish that the string 'FP' will be used in place of 'A6'. After this we find a "macro definition" of INCR, This functions equivalently to the C define INCR’ macro in the HOL version of doodit ().
After the assembler has performed macro expansion, the statement INCR d2 will become addq. l OFFS, d2 cmpi. l NODE*OFFS, d2 bit.001 * a UNIQUE label is generated each time moveq 0, d2.001: I hope to explore 68000 macros in a future article.
SETTING UP A LOCAL STACK FRAME Cotrol is transfered to the label '_doodit' when the C program calls our assembler routine. Figure 1 illustrates this: we allocate a local stack frame and provide ourselves with some memory storage space to play with.
The LINK and UNLK instructions are the primary method tor creating local stack frames on the 68000.
The instruction LINK FP, LVAR accomplishes three things.
First, the previous value of FP is pushed on the stack; second, the new value of SP is moved into FP; and third, the value of LVAR (-16) is added to the stack pointer. Figure 3 shows what the stack looks like after the execution of that instruction.
After all this, (a) the new FP points to the location of the previous frame pointer, (b) your local variable space is available at negative offsets to FP (up to -16), (c) any parameters that were pushed on the stack before your routine was called are available at positive offsets to FP, and
(d) SP is now a local stack frame, ready for our use.
Make special note that the value supplied to the LINK instruction must be an even, negative value. Register A7 cannot contain odd values. The UNLK instruction, when we get to it, will undo everything LINK has done, in reverse order. Since we are automatically saving and restoring the previous FP, it doesn't matter if the register we use is the same used in the rest of the program. Lattice, in fact, reserves either A5 or A6 as a local frame pointer, depending on a compile-time switch.
We can be sure ’doodit ()’ won’t cause a stomach ache somewhere else in the C code. We do this by saving the current values of all the registers we intend to use, and restoring them later when we’re all done. One qualification: on the Amiga, registers A0, A1, DO and D1 are regarded as system "scratch registers". This means that the calling routine cannot expect their values to be untouched; hence, we don't have to save them.
mraagOmig] ©©mripyliOinig™ © Udi® 83 Although you haven't had your Amiga (or very long, you may find that you need a more powerful line interpreter.
Consider these features: Pipes Search paths User definable command-line editing Definable function keys Unix-lke wildcards More versrtile redirections Command aliases Built in commands Command history All available now. At a reasonable pnee. From Z O X s o THE AMIGA TOOLSMITHS.
RO. Box 283. Lowell MA. 01853-0283 USA
• I 0»k*n*rV si AT&T « t l »lurwi d Comryxxto* Am j tx The 68000
instruction set has a special instruction tor circumstances
like these: the "MOVE Multiple" or MOVEM command. With it, you
can save up to all sixteen registers with a single instruction.
The MOVEM instruction can save registers without predecrement, as in MOVEM. L D0-D1, LVAR(FP) You can restore them by reference to the same address 'LVAR(FP)' because they are moved in the same sequence.
When you use the instruction with predecrement, for example, MOVEM. L D2-D7 SP, — (SP) A7 is the first register moved. When you restore with postincrement, A7 is the last register moved. Think about it!
Any other procedure would lead to chaos____ So, before we do anything else, we execute the instruction MOVEM. L D2-D7 A2, — (SP) This loads the contents of registers D2 though D7 and A2 into an area right under our local variable space. See Figure 3.
When we finish, before we UNLK, we will execute MOVEM. L Programming Journal for the Amiga Amiga Project Figure 3 provides a snapshot of the memory bcations containing the elements of the box array. As we have seen, A2 has been loaded with the base address of the array; indeed, A2 can be regarded as pointing either to box or to box[0]. x, since they are the same location.
A no-nonsense journal dedicated to programming for the Amiga, on the Amiga.
Monthly columns written by experts covering Forth, C, assembly, Modula-2, Pascal, and more.
Help and advice for those of you who want to REALLY program your Amiga.
No HYPE, No Gee-WizM!
$ 24.00 for 12 informative issues.... Send your check or money order to Amiga Project
P. O.Box 285 Kent, OH. 44240 216-673-0185 Dealers, Advertisers,
Call for current pricing info... (SP)+, D2-D7 A2 which will
restore the registers to the way they were before our
subroutine was called.
ARRAYS AND LOOPS IN 68000 Now that it has taken care of its housekeeping chores, the code can turn to the function at hand, that is, executing the '__doodit' algorithm. I'm not going to go into step-by-step details but will simply highlight some of the more interesting features.
Please keep in mind that '_doodit' is more or less a straightforward translation of the C function 'dooditQ', and therefore follows the same sequence of operations. To appreciate this isomorphism, you don’t really need any understanding of what the algorithm is doing. All you need do is see how each step in one is mirrored in copy-cat step by the other.
Another common way of speeding up assembler versions of HOL routines is in the calculation of array offsets. If you look at a disassembly of what Lattice C does with 'doodit ()', you will see a lot of math devoted to array offsets.
MACDOOD.ASM economizes a great deal in this regard by using a special 68000 addressing mode called "address register indirect with displacement".
We can best appreciate il by reference to 'box', 'box’ is a four- element array of 'coord' structures, each of which in turn consists of two long integers, V and ’y'. Since the algorithm spends a lot of time zipping around box[], it is a good subject for optimization.
84 Wynns© H, Figure 3: Struct coord box[4] in memory, showing address- register-indirect-with-displacement addressing [D2=2*8=16] Higher Memory B OX[3]. V A2+28 A2+24 A2+20 A2+16 A2+12 A2+8 A2+4 A2+0 BOX[3].X_ BOX[21. V 4 A2, D2) 0(A2, D2) BOX[2].X BOX[1J. V Boxm. x box;o]. y Lower Memory 0(A2) BOX[Q], X On a more primitive microprocessor, it would be necessary to recalculate the value of A2 every time we wanted to address other elements of the array, or other components of their structures.
The 68000 instruction set makes such calculations unnecessary. It allows us to use a separate data register to index the array element, as well as a separate displacement to select out the particular structure component. Suppose we want to move a new value into box[2], y.
First, we make sure that D2 contains the proper array element offset. Since each 'coord' structure takes up eight bytes (2 long words), we put 2*8 = 16 into D2. And because 'y' is the second component in the structure, we need to add in an additional 4 byte displacement.
Given that D2 has been set up properly, we can now move the new value in with a single instruction MOVE. L VALUE,4(A2, D2) If we are at the same time concerned with another element in the same array, we can keep that offset in a different data register. I use D2 to keep the value of frst', multiplied by OFFS. OFFS is 8, the size of one 'coord' structure, and multiply that by D3 for 'send'. Aren't you glad the Amiga doesn't use an 8088? Lam!
We can attain similar economies when it comes to implementing loop structures. Recall that I counseled against making loops external to our assembler routine. Otherwise, we would have to go through the LINK, save, restore, UNLK sequence over and over again. But also we would have been unable to use the 68000’s singularly efficient loop- control instructions.
In particular, the DORA (Decrement and Branch) instruction enables an elegant, single instruction analogue of the C loop for (x- SIDE-1;x -0;~x)..... =Linking C with Assembly in assembler: moveq SIDE-1, d0 *d0 = x = SlDE-1 XBEG:.
Dbra dO.XBEG ‘ ~x; branch unless x 0.
Each time the DORA instruction is executed, it decrements the associated data register. If its value has not yet reached — 1, a branch is made to the label, I used such loops hoping that the Lattice compiler would utilize DORA, but alas it didn’t.
DORA is just one member of a whole slew of 'DBcc' instructions with various condition codes: DBEQ, DONE, DBMi, DBPL, DBGT, DOLT and more, all the way to DBT (Decrement and Branch if True) and DBF (Decrement and Branch if False).
DORA, in fact, is identical to DBF, since the condition being tested is whether the asssociated data register contains -1 (hexadecimal $ FFFFFFFF).
CALLING OTHER LSF ROUTINES The last feature of ’_doodit' we will examine in any detail is the way it calls other iocai stack frame subroutines. The structure outlined in Figure 2 is our guide.
Usually, we will need to pass some parameters to the routine we are calling, which have to be pushed on the stack. Lattice differs from some other HOL implementations in that it expeels them to be pushed on in the reverse of their order in the parameter list of the called routine. For ’_boxinit (port, color, box)' we push box 'first', then 'color', finally 'port'.
This leaves them ordered correctly, from low to high memory, as far as the called routine is concerned. Note that one of the advantages of using a frame pointer is that the offsets for addressing the parameters which were passed to us are NOT affected by stack manipulations. The offsets would change if we were using offsetsto SP.
We also have to make sure that we push the right kind of values on the stack. Sometimes a routine wants a pointer, that is, the address of a value, and sometimes it wants the value itself.
Finally, we want to make sure that the AMOUNT of space we allocate on the stack tor passing the parameters is correct.
Lattice C simplifies things here by using long words to pass everything but floating point values. This is another reason why I avoided floats in 'dooditQ'. Other HOL's, of course, will have different practices.
After we have appropriately loaded-up the stack, we have to save register D0-D1 A0-A1 if we don't want their contents corrupted. I personally find this requirement on the Amiga a bit irritating. It makes much more sense to me for each routine to be responsible for restoring the contents of ail the registers it uses. But I wasn't invited to join the Amiga software design team.
MORE THAN A MAGAZINE, we're the largest Commodore Users Group in the world!
Take a look, Here's what you’ll get.,
• Access to library for C-64, Amiga, MS DOS, VIC 20. PET CBM,
Plus 4, C-16, Superset, B-128, C-I2S.
• 10 magazines featuring articles and advice from noted experts
like Jim Butterfield. Steve Punter and Uz Deal.
• Access to the TPUG Bulletin Board System, a Punter BBS based in
Toronto, Ontario.
• Free admission to TPUG chapter meetings, covering many special
interest areas of Commodore computing,
• The right to attend TPUGs Annua! Conference, with guest expens
from around the world.
TPUG yearly memberships: Regular member (mends meetings) 135.00 Cdn Student members (Aill-tlrae. Httuds meetings) 115-00 Cdn.
Associate (Canada) — S250C Cdn.
Associate VS.a.) — 525 no u.5. S30. no cdn Associate (Overseas sea mall) S35-00 U. S Associate (Overseas air mad S45.00 U.S. Associate club (15 members) less S5.00 pel person on Apprapnale membership.
FOR FURTHER INFORMATION: Send S1.00 for an Information catalogue or telephone: (416) 445-4524 (Please tell us which machine you usel) TPUG INC. DEPT. 200 101 DUNCAN MILL HD.. SUITE G7. DON MILLS. ONTARIO, CANADA M3B 1Z3 Anyway, this is where ’jloodit' finally makes use of the 16 bytes of local variable space it reserved itself with the LINK instruction. Not all of that space is actually used. I gave myself extra, just in case I might need it.
Now at last, we can call the subroutine in question. This automatically pushes the return address on the stack, so that the called routine finds SP pointing to the stack, and the pushed parameters at SP offsets starting at 4. Now the calling routine will LINK, save, restore, UNLK, just like our routine.
Indeed, if we were making a recursive call, it would be our routine.
All C routines are functions, which means there can be a return value as likely as not. New values may also have been implicitly "returned", insofar as we have sent pointers, as opposed to values, as parameters. That is, since the called routine has the address of the variable in question, any changes it makes in it will be felt by the calling routine.
Lattice C uses registers DO and D1 for holding such return values, which of course ties in with their status as scratch registers. A common alternative convention is to allocate space on the stack for the return value. However, in Lattice C at least, if there is a return value, as there is with '_boxini!'t (it sends back a new value for color), we have to save it off before we restore any values to D0-D1 A0-A1.
Finally, but certainly not least and not necessarily last, we have 1o restore the stack to the value it had before we starting 85 UNLOCK TH€ MVSTCRV IIIITH THG KCV TO ’C
• Source 5 executable Code • Foster & Cosier ¦ Full Documentation
• Deliveries Begin Sept.!
$ 34.95 DATA RESEARCH PROCESSING, INC. 5121 Audrey Dr. Huntington Beach, CA 92649 Phone: (714) 840-7186 pushing parameters in preparation for the JSR. If we are negligent in this duty, then when we attempt to restore registers in concluding our routine, we will load absolute garbage into them. Bingo, blinking ’GURU’____ Once again, the 68000 instruction set supplies us with a clever command which is often the most efficient means of cleaning up the stack: the "Load Effective Address" (LEA) instruction. It calculates the address of an operand in the ordinary fashion, but then uses that ADDRESS
instead of what's in it. Hence, the instruction 'LEA 12(SP), SP' has the effect of adding 12 to the value in the stack pointer, thereby popping off three long words.
TRAILING CLOUDS OFGLORY But enough is enough. I leave to you the pleasure of uncovering all the other clever and not-so-clever nuances of MACDOOD.ASM.! WILL be disappointed, however, if 1 haven't encouraged others to concoct their own assembly language replacements for C routines. It's a lot of fun, and does carry some rewards. For what it’s worth, '_doodit' in the assembler version is 40 percent smaller than 'dooditQ' in C, and the new DOODLE is approximately 37 percent faster.
Now if! Could just get at those Amiga Move and Draw subroutines... 68000 ASSEMBLY LANGUAGE BIBLIOGRAPHY i relied on the following books when working out the details of the interfacing process described above. You may find others more useful, but I want at least to give credit where it's due. Any idiocy, of course, is mine, all mine.
Gerry Kane, Doug Hawkins, and Lance Leventhal. 68000 ASSEMBLY LANGUAGE PROGRAMMING; McGraw-Hili (1981): approx. 400 pp. This huge book was one of the first out, and it shows. Bui I learned a lot from it, and continue to lean on it, OH, SAY CAN YOU Lattice C Compiler Manual; Commodore-Amiga S Lattice (1985): approx. 150 pp. Lattice has been in the C compiler business for some time, and even though their current Amiga offering could use a lot of improvement, their expertise shows through in this manual. Section 5: "68000 Code Generation" is especially relevant to my topic.
M68000 16 32-bit icroprocessor Programmer's Reference Manual, fourth edition, Motorola Prentice-Hall (1984): 218 pp. This is an absolutely indispensible reference for doing 68000 code. Don't leave home without it.
Leo Scanlon. The 68000: Principles and Programming; Howard Sams (1981): 237 pp. Although much slimmer than the Osborne volume, I often find clearer examples and explanations in here. My explanation of LINK, for instance, was cribbed from Scanlon.
Listing 1 'doodle.def' ******************************************„****
* *********************************************** j ifinclude
exec typaa. h ifinclude exec taskfl. h ifinclude
exec librarie8, h ifinclude exec devices. h jj include de
vice e keyrnap. h ifinclude graphics copper. h ifinclude
graphics display. h include graphics gfxbaee. h ifinclude
graphite text, h ifinclude grapbicE view, h include
graphics gelB, h ifinclude Xgraphics regions. h ifinclude
devices keymap. h include hardware blit. h ifinclude
lattice Btdio, b include Clattice ctypa. h include
libraries dos. h ifincluda intuition intuitlon. h ifinclude
intuition intuitlonbaee. h ffdefine INTERNAL FALSE * excises
doodit () * ifdefine NODE 4 * number of cornerB per figure *
ifdefine SIDE 4 * number of figures per side * ifdefine
INCR(a) ((++a) (NODE)? (a): (0)) * wraparound counter, 0,
.NODE-1 * ifdefine PART 8 * reduce sides by I PART *
ffdefine XM 4 00 * pixel width of graphics area * ifdefine YM
160 * pixel height of graphics area * ffdefine XO 115 * x
origin of graphic* area * ifdefine YO 25 * y origin of
graphic* area * ifdefine WHITE I define BLACK 2 struct coord
* one pair of x, y coordinates * int x, y;}; Listing 2
'doodle. c‘ **********************.*************************
* ********************************************** ((include
doodle.def * has other includes, defines, etc. * struct
GfxBase ‘GfxBase; * library base pointers * struct
IntuitionBase ‘IntuitionBase; struct Window *pwndo; * my
program window * struct NewWindow progwind; struct
IntuiMessage ‘message; struct coord box [NODE]; * basic
graphics figure * int color; * color we draw it with * void
init (); * open libraries and windows * int boxinit0; *
reinit. Colors, corners, and maybe quit * void quits); *
bottle up and go * void doodit (); * the routine we will
replace with 68k assembler *
***.************************************.***.* “ MAIN PROGRAM
* * initialize some stuff, then doodle endlessly main () struct
RastPort ‘port; init (); port = pwndo- Sport; color = WHITE;
SetAPen (port, color); RectFill (port, XO, YO, XO+XM, YO+YM);
color = boxinit (port, color, box); doodit (port, color, box);}
“ change color; reset box corners to original “ coords; maybe quit
* ***** ***************************************** int
boxinit (port, color, box) struct RastPort ‘port; int color;
struct coord box [NODE]; (quit (); if (color == WHITE) color
= BLACK; else color = WHITE; Set Apen (port, color); box[0]. x =
XO; box[0]. y = YO; box [1]. x ¦= XO+XM SIDE; box[1]. y = YO;
The Complete Line of Amiga Software.
A Full Line of Commodore and Amiga Hardware and Software.
ComputAmericA 1111 Springhil! Ave.
Mobile, AL 36604 Call Toll Free 800-262-3111 AL residents 205)-438-3476 box[2]. x = XO+XM SIDE; boxI2]-y = YO+YM SIDE; box[3]. x = XO; box[3]. y = YO+YM SIDE; return (color);) if INTERNAL * if FALSE, excises doodit from doodle * ************************************************ “ draw some doodles until you quit (in boxinit)
* ************************************** ********** void
doodit (port, color, box) struct Rastport *port; int color;
struct coord box [NODE]; [int frst = 0, send “ 1; int nux,
nuy, x, y, xl, yl; while (TRUE) for (x = SIDE-1; x = 0; -~x)
for (y = SIDE-1; y = 0; y) (xl = XM*x SIDE; yl = YM*y SIDE;
Movefport, box[frst].x+xl, box[frst].y+yl); Draw (port,
box[send].x+xl, box[send].y+yl);} A-TALK TM Advanced
Communication and Terminal Program for the AMIGA KERMIT XMODEM — ASCII TRANSFER — Xmodem binary files are stripped of
padding characters.
• • •• « • *•
• ¦ *• DIAL-A-TALK — Phone directory, redial and script language
for auto-login. Tested login scripts. Programmable function
ANSI TTY EMULATION — Resizable and fullscreen windows. Termcap and terrninfo for UNIX users.
B • *.
• * •
• • •*
• • • •
• • •*
• • • * VOICE OPTION — For having mail read aloud and for telling
you how the call and login arc progressing.
SETTINGS — Over 10 modem types supported. All communication parameters, including X-on X-off.
A-TALK lists for $ 49.95 and is not copy protected, J*** $ 2.00 shipping; CA residents add 6.5% sales tax. •••• rrudc-in discounts available. For info and orders, contact: *•- Felsina Software *•.. 3175 South Hoover Street, 275 ¦»!’ Los Angeles, CA 90007 till
(213) 747-8498 f-
*) GetMsg (pwndo- DserPort)) if (message- Class == CLOSEWINDOW)
ReplyMsg (message); CloseWindow (pwndo);
CloseLibrary (GfxBase); CloseLibrary (IntuitionEase); exit (0);
}} **********************»**»*********************
* * open appropriate libraries and windows, etc,
* ******************************************* int-k* I char
ilib[] = "intuition. library"; * assorted string constants *
char glib[] = "graphics. Library"; char fmsgH = "failed. n";
void init () if ((IntuitionBasa = (struct IntuitionBase *)
OpenLibrary (ilib, 0}) = 0) prints ("%s %s", exit (); ilib,
fmsg), 1 if ((GfxBase = (struct GfxBase: OpenLibrary (glib,
0}) =0) prints ("%E %s", glib, fmsg);
CloseLibrary (IntuitionBasa); exit ();) progwind. LeftEdge = 0;
progwind. TopEdge = 0; progwind.Width = 640; progwind. Haight =
200; progwind, DetailPen = 0; progwind. BlockPen = 1;
progwind.IDCMEFlags = CLOSEWINDOW; progwind. FiretGadget = NULL;
progwind. Checkmark = NULL; progwind.Title = "Jim Dandy Doodle
All The Day" progwind. Screen = NULL; progwind. Bit Map = NULL;
progwind. MinWidth = 640; progwind. MinHaight ¦= 200;
progwind. MaxWidth = 640; progwind. MaxHaight = 200;
progwind, Type = WBENCHSCREEN; if ((pwndo = (struct Window *)
OpenWindow (iprogwind)) == 0) ifendif
* * check for exit signal; if so, clean up and go * void quit ()
prints ("program window W, fmsg); CloseLibrary (GfxBase);
CloseLibrary (IntuitionBase); exit (); if (message = (struct
IntuiMessage Listing 3 3macdood. asm*
* ************************************************
* ************************************************ ** ** ** ** **
** ** register usage (see C version of doodit ()): a2 — box (=
box[0].x) a6 = frame pointer (FP) a7 = stack pointer (SP) do =
* * dl = y
* * d2 = frst
* * (*8 for indexing "coords,"
* * i.e. double long words) d3 = send (ditto) d4 = xl; nux d5 =
yl; nuy ** ** ** ** ** ** ** d6 =¦= box[frst send]. x + xl d7 =
box[frst send]. y + yl let the linker know what we need, and
what we got here xref _Mova,_Draw,_boxinit xdef doodit OFFS,
NODE*OFFS, e 0, i ** equates FP equr a6
* a6 is the local frame pointer SP equr a7
* a7 is the stack pointer LVAR equ
- 16
* allocate 16 bytes for loc. Var.
MODE equ 4 * number of corners in basic figure SIDE equ 4
* number of figures per side PART equ 8 * sides reduced by 1 PART
each time XM equ 400
* pixel width of graphics area YM equ 160
* pixel height of graphics area OFFS equ 8
* index amt 8 bytes per coord ** 68000 macro version of 1
define INCR(a) ((++a) (MODE)? (a): (0)) ' IHCR macro
addq.1 cmpi. l bit moveq endm ©©mpyjliODTJgj™ © 11 Di® 89
* * execution begins here doodit: link movam.1 move.1 FP, LVAR ’
±2-d7 a2, — 16(FP), a2 allot local stack frame (SP) * save
* a2 = address of box STR1: moveq moveq 0, d2 OFFS, d3
* frst = 0
* send = 1 (*8) STR2: moveq SIDE-l, d0
* x = SIDE-1 XBEG: moveq SIDE-1, dl
* y = SIDE-1 YBEG: move.1 mulu do, d4 XM, d4
* xl = X
* xl = x*xm 'Resale your omptt Cuisine Over 200 rVLccipcs in 8
cat acyorlcs.
'Edit nufC yrcctgyes* Organize and scare Ft j'des fcij category or ingredient.
Send eficefi or money order jor, i 29.95 to:
* fiA'', W • nfyt soft ware V 20. 2ox 700701 Stui o£f, Ca.
95170 divu SIDE, d4
* xl = (x*xm) SIDE move.1 dl, d5
* yi = y mulu YM, d5
* yl = y*ym divu SIDE, dS
* yl = (y*ym) SIDE move.1 0(a2, d2), d6
* d6 = box[frst]. x add. w d4, d£
* d6 = box[frst].x+xl move,1 4(a2, d2), d7
* d7 = box[frst]. y add. W d5, d7
* d7 = box[£rst).y+yl move.1 d7, — (SP)
* push box Ifrst],.y+yl on stack move.1 d6, — (SP)
* push box (fret].
.x+xl on stack move.1 8(FP), — (SP)
* push port on stack raovem.1 dO-dl, LVAR(FP)
* keep do £ dl from mischief jsr Move
* move cursor (Amiga ROM module) move.1 0 (a2, d3), d6
* d6 = box[send]. x add. l d4, d6
* d6 = box[send].x+xl move.1 4(a2, d3), d7
* d7 = box[send], y add. l d5, d7
* d7 = box [send].y+yl move.1 d6,4(SP)
* move box [send].x+xl into stack move.1 d7,8 (SP)
* move box [send].y+yl into stack jsr _Draw
* draw line (Amiga ROM module) movem. l LVAR(FP), dO-dl
* restore do £ dl (finally) lea 12(SP), SP
* clean up stack (finally) Yes, we mean you! If you enjoy Amazing
Computing and you are using your Amiga, you have completed one
half of the qualifications of an Amazing Writer for Amazing
dl. YBEG * y; branch unless y 0 lea 12(SP)rSP * clean up stack
move 1 do, 12(FP) dbra dO.XBEG * x; branch unlese x 0
* get return value = color move.1 0(a2, d3), d4 * nux = box[send]. x
beq FINI sub. 1 0(a2, d2), d4
* color = 0 means we1 re done
* nux = nux — box[fret]. x bra STR1 divs APART, d4 * nux =
nux PART
* branch (reinit, fret & send) ext. 1 d4
* (dump remainder in upper word) MORE: move 1 d4,0(a2, d2) *
box[fret]. x = nux add. X 0(a2, d2), d4 move 1 d5,4(a2, d2) *
box[frst]. y = nuy
* nux = nux + boxlfrst]. x INCR d2 * frst = INCR(frst) move. 1
4(a2, d3), d5 * nuy = box[send]. y INCR d3 * send = INCR(send)
cub. 1 4(a2, d2), d5 bra STR2 * do it all over again
* nuy = nuy — box[fret]. y dive APART, d5 * nuy = nuy PART ext. 1
d5 FIN I roovem.1 (SP) +, d2-d7 a2
* (dump remainder in upper word)
* restore all used registers add. l 4(a2, d2), d5 uulk FP *
deallocate local stack frame
* nuy “ nuy + box (fret]. y rte
* return cmp. 1 0(a2, d2), d4 * box[fret]. x = nux?
* that's all, folks!
Bne MORE * if not, branch cmp. 1 4(a2, d2), d5 * box[fret]. y = nuy?
Bne MORE * if not, branch move.1 16 (IT), — (SP) * push box on stack move.1 12(FP), — (SP) * push color on stack move. 1 8(FP), — (SP) * push port on stack jsr boxinit
* reinit. Box corners, perhaps quit
• AC- Amazing Writers!!!
We are interested in the tasks and joys you have experienced on the Amiga. We want to read the secrets you have unlocked. We want to experience your excitement and enthusiasm, tf you own an Amiga, you have already qualified as an independent thinker, now use that ability to communicate your individual story or idea.
Amazing Computing ™ pages are filled with people who want to reach you with their thoughts. They explain a portion of the computer you both use and abuse, because they found it interesting.
If there is something in the Amiga family that interests you, chances are there are people who would enjoy hearing what you have to say. So don't sit around waiting for others to teach you what you have already learned by hours of trial and error, get excited and teach the rest of us.
Tf your idea or explanation is of interest to developers and hard core hackers, please send your thoughts and a request for writer's guide lines to: AMICUS Network Editor.
If you are more interested in general use of the Amiga and its products, please send your suggestions and ideas to: Editor, Amazing Computing™ But, either way post them to: PiM Publications Inc.
P. O. Box 869 Fall River, MA 02722 Please include a hard copy and
an electronic copy of your article for review. In both
instances, please include your name, address and phone number.
We will return an answer as soon as our editors stop shouting
about how great your idea is, and types a response.
Amazing Computing™: your resource to the Commodore Amiga 90 D, $?
AMICUS and Fred Fish Public Domain Software Library This software is collected from user groups and electronic bulletin boards around the nation. Each 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.
Note: Each description line below may include something like 'S-O-E-D', which stands for 'source, object file, executable and documentation'. Any combination of these letters indicates what forms of the program are present. Basic programs are presented entirely in source code format.
AMICUS Disk 1 Abasic programs: Graphic* 3DSolids 3d solkts modeling programws'sarrpls data fifes Blocks draws blocks Cubes draws cubes Durer draws pictures in the style of Outer Fscaps draws fractal landscapes Hidden 3D drawing program, w hidden line removal Jpad simple paint program Optical draw several optical illusions Paintbox simple paint program Shuttle draws the Shuttle tn 3d wireframe SpacsArt graphic* demo Speaker speech utility Sphere draws spheres Spiral draws color spirals Three Dee 3d tu notion plots Topography artificial topography Wheels draws circle graphics Xenos draws
fractal planet landscapes Abasic program*: Tool* AddrBssBook simple database program for addresses CaroFile simple card file database program Demo mjltrw.ndow demo KeyCodes shows keycodes for a key you press Menu run many Abasic programs from a menu MoreColors way la get more colors on the screen at once, using aliasing shapee simple color shape desig ner Speakrt speech and narrator demo Abatic programs: Game* BrickOut dasslc computer brick wall game Olhslto also known as 'go' Saucer simple snoot-em-up game Spelling simple talking spelling game ToyBox selectable graphics demo Abasic program*:
Sound* Entertainer plays that tune HAL9000 pretends tfa a real computer Poles simple police siren sound Sugarplum plays "The Dance or the Sugarplum Fairies' C programs: Aterm simple terminal program, S-E os aid to compiling with Lattice C docynt opposite of CONVERT tor cross developers Dotty source code to the’dotty window demo echox untx-style filename expansion, partial
S. O-D fastertp explains use of fast-floating point math FixDate
fixes future dates on all tiles on a disk. S-E freed raw
simple Workbench drawing program.S-E GfxMem graphic memory
usage Indicator, S-E Grep searches for a given string in a
file, with documentation ham shows oil the hold-and-modity
method of cobs generation iBM2Arniga last parallel cable
transfers between an ISM and an Amiga Mandel Mandefcrot set
program, S-E moire patterned graphic demo, S-E ob lix makes
Lattice C object tile symbols visible to Wack, S-E qu'ck quick
sort strings routine raw example sample window VO set lace
turns on interlace mode, S-E sparks qix-type g raph ic d a mo,
S-E Other executable programs: SpeechToy speech demonstration
Which Font displays all avaitaoie torts Texts: 68020 describes
68020 speedup board from CSA Aliases explains uses of the
ASSIGN corrTr-and Bugs known bug list In Lattice C 3.02
CLICard reference card tor AmigaDOS CLI CliCo remands guide to
using the Cli Commands shorter guide to AnrigaDOS CLI commands
EdCommands guide to the EO editor File names AmgaDOS filename
wildcard conventions Hall Bright explains rare graphics chips
that can do more cobra ModemPins description of the serial
port pinout FtAMdisks tps on setting up your RAM: disk ROMWack
tips on using ROMWack Sounds explanation of the Instrument
demo sound lite formal Speed refutation of the Amga's CPU and
custom chp speed WackCmds tips on using Wack AMICUS Disk.2 C
program*: abb AmigaDOS object ibrary manager, S-E at text
tile archive program, S-E ftxobj auto-chops executable files
shell simple CLI shaft. S-E sq. usq file conpresslon programs,
S-E Yacht C a familiar game, S-E Make a simple 'make'
programming utility, S-E Emacs an early version of the Amiga
text editor, S-E-D Assembler programs: bsearch.asm binary
search code qsort.asm Unix corrpatbb qsortO function, scores
and C test program setjmp.asm seljmpO code tor Lattice 3.02
Svprintl Unix system Vcompatible printt () tress. c Unix
corrpatbe treeQ function, O-D (This disk lormerty had IFF
specification tiles and examples. Since this spec Is
constantly updated, the IFF spec files have been moved to
their own disk in the AMICUS collection. They are not here.)
John Draper Amiga Tutorials: Animate describes animation algorilhrm Gadgets tutorial on gadgets Menus learn about Intuition menus AMICUS Disk 3 C program*: Xrel mm_ a C cross-reference gen, S-E extra-haif-bdQfit chb alxderoa 5-E Chop truncate (chop) tiles down lo size, S-E Cleanup removes strange characters from text tiles CR2LF converts carriage returns to line feeds In Amiga libs. S-E Error adds cotrpile errors to a C lite, S He Bo window ex. Trom the RKM, S Kermit generic Kermit Inpementation, tlakey, no terminal mode, S-E Scales sound demo plays scales, S-E Skewy Rubik cube demo in likes
odors. S-E AmlgaBasicProgsfdir) Automata cellular automata simulation CrazyEghts card game Graph function graphing programs WitchingHour a game AbasIC programs: Casino games of pokar, blackjack, dica, and craps Gomoku also known as 'olhelto' Sabotage sort c (an adventure game Executable programs: Disassem a 68000 disassembler, E-D DpSlide 6hews a given set of IFF pictures, E-D Arrange a text tormatting program E-D Assembler pro grams: A goterm a terminal program wltn speech and Xmodem, S-E AMCUS Di»k4 Fifesfrom theoriginal Amig* Technical BBS Note that some? (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 hot 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 o the Icon Editor. This ts a little flaky, but compiles and runs.
An Intuition demo, in full C source, including files: demomenu. c, demomenu2. c, Oemoreq. c, getasdi. c, idemo. c, toemo.guide, idemo.make. idemoaii. h, nodos. c, and txwrite. c addmem. c add externa] memory to the system OotXest. c example of BOB use cons-oielQ. c console IO example creaport. c create and delete ports creastdLc create standard 10 requests croatask. c creating task examples diskio. c example of track read and write dotty. c source to the 'dotty window' demo duaipiay. c dual pLayfioW example flood. c flood fill example freemap. c old version of Tree map’ geltoote. c tools for Vspdes and BOBs
gfxmemx: graphic memory usage indicator helio. c window example from RKM inputdev. c adding an input handler to the input stream Aiwhg ©©iffiipydtosg™ ©H®ii 91 JoystjK. c reading the joystick dancer, the guys at Electronic Ads. A gorilla, horses. King
• intuition’, layers*. ‘mathffp'. Mathieeedoubas'.
KeytxLc direct keyboard reading Tut. A lighthouse, a screen from Marble Madness, the ¦malh»eeesingbas, matntrans,1100130'. Timer* and tayerte6. c layers examples Bugs Bunny Martian, astilltroman old movie, the Dire ¦translator*.
Mousport. c lest mouse port Straits moving company, a screen from Pinball ownlb. c. Contructon Set. A TV new sten, the PaintCan, a world AMICUS Disk 9 ownlib.asm example of making your own Ibrary with map, a Porsche, a shuttle mission paten, a tyrannosaurus Amiga Basic Program*: Lattice rex. A planet view, a VISA card, and a ten-speed.
FiightSim simple flight simulator program paralesLc tests parallel port commands HuePalette explains Hue. Saturation, and Intensity seritest. c tests serial port commands AMICUS Disk 7 DigiView HAM demo picture disk Requester ex. Of doing requesters from Amiga serisamc. c example of serial pod use This disk has pictures Iromtho DigView hob-and-modty Basic prinintr. c sample printer interlace code video digitizer. It includes the ladies with pencils and Scroll Demo demonstrates sapling capabilities prtbase. h printer device deli nitons btiypops. The young girt, the bulbozor. The horse and
Synthesizer sound program rsginles. c region test program buggy, the Byte cover, the dictionary page, the robcX and WorkJMap draws a map of the world sotlace. c source to interlace on oft program Robert. This includes a program to view each picture setparallel. c set the afirbutes of the parallel port separately, and all together as separate, slktabe screens.
Executable programs: SetSefial. c set the ahrbutes (parity, data tuts) of the Boogl latest Bong! Demo.with selectable serial pod AMICUS DislS speed. E singptay. c single piaytield example C pross»m»: Brush2C converts an IFF brush to C data speechtoy. c source to narrator and phonetics demo Browse view text files on a disk, using menus instructions. Initialization code. E timedely. c simple timer demo S-E-D Brush21con converts IFF brush to an icon, E timer. c exec supped timer functions Crunch removes comments and white space Dazzle graphics demo, tracks to mouse. E timrstuf. c more exec supped timer
functions from C files, S*E DeoGEL assembler program for stopping 68010 WhictiFonLc baas and displays ail available system ton Exec EXECUTE a series of commands from errors. S-E-D toms Workbench S-E Klock menu-bar dock and date display. E process.! And prtbase. i ass moo* or include files: PD Screen life the game of life. E autorqstr.txt warnings of deadlocks with Dump dump6 Rastport of highest screen to Times et Intuition-based way to set the time and autoroquesters printer date. E oonsoleO.lxf copy of Ihe RKM console LO chapter SetAJternaie sets a second image lor an icon, whoo ME mats
another Emacs, more oriented to wend dskJont.txt warning of disk font loading bug dicked once S-E processing, S-E-D tulllunc.lxt list of Udotinos, macros, tundbus Set Window makes windows lor a Cll program to run MyCLt a Cll shell, works without the inputdev.txt preliminary copy of the input device under Workbench S-E Workbench. S-E-D chapter SmailCiock a small digital clock that sits in a window menu bar Text*: License information on Workbench disirbutton license Scrimp er the screen printer in the fourth Amazing FnctnKeys explains how to read function keys from printer pre-release copy of
Ihe chapter on printer drivers.
Computing. S-E Amiga Basic from RKM 1.1 v11td.txt 'ditr of.Id lie changes from HackerSin explains how to win the game ‘hacker* version 1.0to 1.1 v2Bv1.0it1 'dilf of include tile charges Amiga Basic Program*: IstSdOl 0 guioe to installing a 68010 in your Aniga from version 20 to 1.0 (Note: Many of the6e programs are present on AMICUS PnnterTip tps on sending escape sequences to Oisk 1. Several of these were converted to Amiga Base, your printer and are included here.)
SlartupTip tps on setting up your starlit AMICUS Disk 5 Fifes from the Amiaa Link 1 sequence file Amiga Information Network AC dress Book a simple address book database Xfrmr Review list of programs that work with the Note tha! Some of these files are old, and refer to older Ball draws a ball Transformer versions of the operating system. These files are from Ooad program to convert CompuServe hex tiles AmgaLink. For a time. Commodore supported Amiga to binary, S-D Printer Driver*: Link, aka AiN, for online developer technical support. It Clue the game. Intuition driven Printer drivers for the
Canon PJ-1080A, the C ftoh was only up and running for several wseks. These tiles Color Art art drawing program Prowriter, an improved Epson driver that eliminates do not carry a warranty, and are for educational purposes DoluxeDraw the drawing program in the 3rd issue of 6treakjrg, the Epson LQ-800, the Gemini Star-10, the only. Of course, that's not to say they doni work.
Amazing Computing. S-D NEC 8025S. The Okidata Ml-92. The Panasonic KX-P10xx Erza conversational computer psychologist family. And the Smth-Corona D300. With a document A demo of Intuition menus called menudemo', In C Othello the game, as known as ‘go* desert*ng the installation process.
Source Rat Maze 3D ralmaze game ROR boggling graphics demo AMICUS Disk 10 Instrument sound dome* wtiereis. c find a tile searching all subdirectories Shuttle draws 30 pictures of the space shuttle This is an icon-driven demo, circulated to many dealers.
Bobtest. c BOS programming example Spelling simple spelling program ft includes the sounds of an acoustic guitar, an alarm, a sweep. c sound synthesis example YoYo wierd zero-gravity yo-yo demo, tracks yo- banjo, a bass guitar, a boink. A calliope, a car horn, Assembler lllea: yo tothe mouse daves. Water drip, electric guitar, a flute, a harp arpegd, a kjekdrum, a marintoa. A organ minor chord, poope myCev.asm sample device driver Executable program*: talking, pgs. A pipe organ, a Rhodes piano, a saxophoie, mylib.asm sample Ibrary example 30cuDe Modula-2 demo of a rotating cube a srtar. A 8nare
drum, a steel drum bells, a vbrophone. A mylb. l Alt Icon sets a second icon image, dispayed violin, a wailing guitar, a horse whinny, and a wnttie.
Mydev. i when the icon is dicked asmsuppj AmgaSpei!
A slow but simple spelling checker. E-D macros.! Assembler indude tiles: arc the ARC tile compression program.
RreaMBn L lsk 1: must-have tor telecom, E-D amigademo Graphical benchmark for comparing am gas.
Tercts: Bertrand graphics demo amigaterm simple communications program wflh amig at ricks tips on Cll commands disksarvage a program to rescue trashed disks. E-D Xmodem exldisk external disk speckleallon KwikCopy a quick but nasty disk copy program: balls simulation of the "knefic thingy" with balls gameport game port spec ignores errors. E-D on strings par ai let parallel port spec UDDir lists hunks m an object file E-D colorful Shows oft use of hoic-and-mpdify mode.
Serial serial port spec SaveiLBM saves any screen as an IFF picture dhrystone Dhrystone benchmark program.
VI.1 update list of new features In vers ion 1.1 E-D 7?
Dotty Source to the 'dotty window" demo on the v1.1h.txl 'ditr of Include 1 lie changes from versor Screen Dump shareware screen dump program, E onfy Workbench disk.
1. 0 to 1.1 StarTerm version 2.0, term program. Xmodem treedraw A
6mall 'paint* type program with Ime6.
E-D boxes, elc.
Files lor building your own printer drivers. Including gad John Draper's Gadget tutorial program dospecial. c, op6ondatac. Inil.asm, printer. c, printerink.
Texts: gfxmem Graphical memory usage display program printerlag.asm, render. c, and waif.asm. This dskdoes LattceMajn tp6 on fixing _main. c in Lattice half bn te demonstrates 'Extra-Half-Brrte' mode, if you contain a number of tiles desorbing the IFF specification.
GdiSkDrive make your own 5 1 4 drive have it These are not the latest and greatest tiles, but remain GuruMed explains the Guru numbers hello smple window demo here for historical purposes. They include ted tiles and C Laf3.03bugs bug 1st of Lattice C versor 3.03 lattfp accessing the Motoroa Fast Floating Point 1 source oxampk*. The latest IFF spec Is elsewhere In this MforgeRev user's view of the MicroForge hard drive orary from C library.
PrintSpooler EXECUTE-based print spooling program palette Sample program for designing color paier.es. 6 IFF Pictures.BMAP files: trackdisk Demonstrates use of the trackdisk driver.
This disk indudes the DPSIde program, which can view These are the necessary links between Amiga Basic and requesters John Draper's requester tutorial and a given series of IFF pictures, and the 'showpic1 program.
The system Ibraries. To take advantage of the Amiga's example program.
Which can view each tile at the dick of an icon, and the capabilities in Basic, you need these files. BM Aps are speech Sample speech demo program Strpped 'saveibnf program, to turn any screen into an IFF picture.
Included for ’ctst*. ’console', 'diskfonr. ‘exec. ’icon'.
Down 'speochtoy.
The pictures indude a screen from AnicFox, a Degas speochtoy Another speech demo program.
92 ¥®Oiuim© H9 Ergd-Eiah Digh 2; alib Object module Ibra ian.
Cc Unix-like Irontend for Lattice C compiler, ebug MacrobasedCdebuggmgpackage.
Machine independent make Subset erf Unix make command.
Mako2 Another make subset command, mcroomacs Small version of emacs editor, with macros, no extensions portar Portable file archiver, xrt DECUS C cross reference utility.
Fred Fish Disk 3: gothic rotl ft eforth xlisp Gothic font banner printer.
A *roff“ type text formatter.
A very fast text formatter A highly portable forth implementation. Lots of goodies.
Xirsp 1.4. not working corroctty.
Fred Fish Dish 4; banner Prints horizontal banner A Boyer-Mooregrep-lika utility CNU Unix replacement ‘yacd. Not wrking.
Another Boyer-Moore grep-lika utility DECUS greo bgrop bison bm grep kermil MyCLI mandef simple portable Kermit with no connect mode.
Replacement CL I lor the Amga. Version 1.0 A Mandebrot set program, by Robert French and RJ Mcai Fred Fish Disk 5: Console device demo program with supporting macro routines.
Creates a visual diagram at tree memory sample Input handler, traps key or mouse events Ireemap input.dev joystick keyboard layers mandofbrot mouse one. window console window demo Shows hew to set lp ihe gameport device as a joystick.
Demonstrates direct communications with the keyboard.
Shows use of the layers Ibra IFF Mandebrot program hooks up mouse to right joystick port Demonstrates access to the parallel port, opening and using the printer, does a screen dump, not working parallel printer pnnt.supporl Printer support routines, networking.
ProdQ6t sample process creation code, not working region demos spirt drawing regions samplofont sample loot with into on creating your own serial Demos the serial port singlePlayfield Creates 320 x 200 ptaytieW speecMoy latest version of cute speech demo speech.demo simplified version of speochtoy. With 10 requests text.demo dsplays available fonts timer demos timer.device use trackdtsk demos Irakedisk driver Fred Fish Disk 6: compress like Unix compress, a file squeezer dado analog clock impersonator microemacs upgraded versor of miefoemacs from disk 2 mull removes multiple occuring lines In
files scalee demos using sound and audio functions setparallel Aftows changing parallel port parameters setserial Allows changing serial port parameters, sonic quicksort based sort program, in C stripe Strip6 comments and extra whitespace from C source Fred Fish Disk 7: The disk contains the executables of the game Hack, version t.0.1. The disk contains the C source to Hack on disk 7.
Fred Fish Disk 9: moire Draws moire patterns in back and white MVP-FORTH Mountain View Press Forth, version
1. 00.03A. A shareware version of FORTH from Fantasia Systems,
prot! A more powerful text formatting program sottace Program
to toggle interlace mode on and off.
Skesvb a ruble's cube type demo sparks moving snake Graphics demo Fred Fish Disk IP; An interstellar ad enture simulation game convert a hex file to binary Patch program for any type of file.
Conquest dohox fiiezap fixobj iff W Strp garbage off Xmodem transferred files.
Routines to read and write iff format Hies.
Simple directory program Minimal UNIX is, with Unix-style wildcarding, inC file squeeze and unsqueeze Star Trek game Dice game.
Sq.usq trek73 yachtc Fred Fiah Disk 11: dpslide slide show program for displaying IFF images with miscellaneous pictures Fred Fish Disk 12: arriga3d Shows a rotating 3 dimensional solid ’Amga sign’.
Argo Term a terminal emulator program, witter in assenbier arrew3d Shows a rotating 3 dimensional wire frame arrow.
Lb4 directory listing program Icon Exec SetWindow two prog rams for launchug prog rams from Workbench that presently only work under
Set Alternate Makes an icon show a second image when clicked once Sta Term terminal emulator, with ASCII Xmodem, dialer, more.
Fred Fish Disk 13: A Bundled Basic programs, Including: Jpad toybox ezspeak mandlobrot xmodem 3dsolids addbook algebra ror amgseqt amiga-capy band bounce box bnekout canvas cardti circle colorcirdes Copy cubesl culpaste dale dogstar dragon draw dynarrictriangk) Eliza eztarm filibuster fractal Iscape gomoku dart haiku hai9000 bailey haurrtodM hidden join loz mandel menu minipaint mouse Odhello palch pens pinwheel gbox random-drdes Readme rgb rgbtoet Rotd salxitage salestalk shades shapes shuttle sketchpad spaceart speak spoactt speecheasy spell sphere spiral sloper superpad suprshr talk
terminal termtost tom topography triangle wheels xenos xmostriper (note: some programs are Abasic, most are Arrigabasic.
And some programs are pre6enled in Doth languages) Fred Fish Disk 14: amgaSd update o (112. Includes C soorce to a lull hidden surface removal and 30 graphics beep Source lor a lunctionthal generates a beep sound dax extracts text Irom within C source files dimensions demonstrates N dimensional graphics tilezap update of disk 10. A file patch utility gfxmem update of disk 1, graphic memory usage indicator gi converts IFF brush files to Image struct. In C text.
Pdterm simple ANSI VT100terminal emulator, in 80 x 25 screen shell simple Unix 'csh’ style shell termcap mostly Unix corrpalble termcap' impiementalion.
Frelflah Diak IS: Blobs graphics demo. Irka Unix “worms' Clock simple digital dock program tor the ttle bar Dazzle An oight-foW symmetry Cazzier program Realty pretty I Fish double buffered sequence cycle animation of a fish Monopoly A realty nice monopoly game written in AbasC.
OkidataDump OkJdata ML92 driver and WorkBench screen dump program.
Polydraw A drawing program written in AbasC.
Polytradals A fractal program written in AbasC.
Fred Fish Disk 10: Complete copy of the latest developer IFF dsk Fred Fish DiaKJZ; The NewTek Digi-View video digitizer HAM demo disk Fred Fish Disk 18: AmgaD splay dumoterrrnalprogramwitubell, selectable fonts Ash Prerelease C Shell-like shell program.
History. Loop6. Etc. Browser wanders a file tree, displays tiles. Afl with the mouse MC68010 docs on upgrading your Amiga to use a 68010 Mutidim rotate an N dimensional cube with a joystick PigLalm SAY command that talks in Pig Latin Sefimper Screen image printer Xlisp 1.6 source, docs, and executable lor a Lisp interpreter.
FredFiah Diak19: Blackjack text-oriented blackjack game JayMinorSudes Slides by Jay Miner. Amiga graphics chp designer, showing flowchart of the Amga internals, in 640 x 400.
Keymap Test test program to test the keymapping routines LockMon Find undosed file locks, for programs that don't clean uFredFah Disk 20: ArrjgaToAlari converts Amiga object code to Atari format DiskSalv program to recover fifes from a trashed AmigaDOS disk.
Hash exampteof the AmigaDOS disk hashing function Hd Hex dump utility ala Computer Language magazine. April 86 MandeiBrots Mandebrot contest winners MultiTasking Tutorial and examples for Exec level multitasking Pack strips whitespace from C source Pod Handler sample Port-Handier program trial periorms.
Snows 9CPL environment clues.
Random Random number generator in assembly. For C or assembler.
SetMouse2 sets mouse port to right or left port.
Speech Term terminal emulator with speech capabilities.
Xmodem TxEd Demo editor (rom M»cro6miths Charlie Heath Fred Hah DM21 This is a copy oI Thomas Wilcox's Mandelbrot Set Explorer d16k. Verygoodl Fred Fish Disk 22 This disk contains two new ’strains’ of microemacs.
Version 3.6 by Daniel Lawrence. For Unix V7, BSD 4. Z Amiga, MS-DOS. VMS. Uses Amiga function keys, status Sne. Execute, startup tie6. More.
Lemacs By Andy Poggio. New features indude ALT keys as Meta keys, mouse support, higher priority, backup files, word wrap, function keys.
Ffgd Fi»h DiiK 23 Disk of source for MicroEmacs. Several versions for most popular operating sy6tem6 on micros and mainframes.
For people who want to port MicroEmacs to their favorite machine.
FredFi. h Disk 24: Cenques Inlerstaikz adventure simulation game Csh todate to shell on Disk 14. With built in commands.named variables, substitution.
Modula-2 A pre-reiease version o the single pass Modula-2 compiler originally developed tor Macintosh at ETHZ. Th16 code was transmitted to the AM IGA and is executed on the AMIGA using a special loader. Binary only.
Fred Fish Disk 25 Graphic Hack graphic version of the game on dsks7S8 FredFlahDliK 26 Unhun Processes the Amiga "hunk' loaotites.
Collect code, data, and b6s hunks together, stows Individual specification o! Code, data, and b6S origins, and generates binary (lie with formal reminiscent of Unix •a. ourtormaL The output file can be easily processed by a separate program to produce Motorola *S- P emacs ©HD®(93 iTM Amazing Computing™ has vowed, from our begining, to amass the largest 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 disks are very affordable!
Amazing Computing™ subscribers $ 6.00 per disk.
Non subscribers..$ 7.00 per disk. ffitnyrlc" CiiitGhlafuf 4-tur. lApyi-ir. j}n ppriH programmer. By Eric Black.
Port of the Kermit file transfer program and server.
C-kormit Ps Archs Display and set process priorities Yet another program for bundling up text files and mailing or posting them as a single file unit, Fred Rah Disk 27 Abdsmos AmigaSasic demos IromCarolynScheppner.
NewConvortFD creates. brtsps Trorr fd hies.
BilPlanes finds addresses of and wrilostobitplams of the screen's bitmap, AbouIBMaps is a tutorial on creation and use of bmaps.
LoadlLBM loads and displays IFF IIBM pics.
LoadACBM loads and displays ACBM pics.
ScreenPrinf creates a demo screen and dumps it lo a graphic printer.
Disassem Simple 68000 disassembler. Reads standard Amiga object files and disassembles the code sections. Data sections are dunped in hex. The actual disass ember routines are set up to be callable from a user program so instructions in memory can be disassembled dynamically. By Bill Rogers.
OorakKeymap Example of a keymap structure lor the Dvorak keyboard layout. Untested but included because assembly examples are few and far between. By Robert Bums of C-A.
Hypocyefoids Spirograph, from Feb. 84 Byte.
UnesDemo Example of proportional gadgets to scroll a SuperBitMap.
MemExpansion Schematics and directions for building your own homebrew 1 Mb memory expansion, by Michael Fellinger.
SafeMalfoc Program to debug 'mallocO' calls Science Demos Convert Julian to sola; and sidereal time, stellar positions and radial velocity epoch calculations and Galilean satellite plotter.
By David Eagle.
Ef. gd Flah Disk 29 Basic games by David Addison: Backgammon, Crbbage, Milestone, Othello D6CUS 'cpp' C preprocessor, and a modified 'cd that knows about the 'cpp', for Manx C. Cpp Unix-compalible shell archiver, lor packing files for travel.
Shar SuperBitMap Example of using a Scrolllayer, synang SuperBitMaps for printing, and creating dummy RastPorts.
Fred Fish Disk 29 AegisDraw Demo Demo without save and no docs.
Animator Demo Player lor Aeg is Animator filesUnix-like ront-end lor Manx C. Tests for existance of system resources, files, devices.
Enough Flubik StringLi) VI100 Animated Rubik's cube program Public domain Unix string library functions.
VT-100 terminal emulator with Kermit and Xmodem protocols Fred Fish Disk 30 Several shareware programs. The authors request a donation if you find their program useful, so they can write more software.
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 Please allow 4 to 6 weeks for
delivery Amazing Computing™: Your resource to the Commodore
Amiga an Amiga Basic BBS 0 Ewan Grantham Amiga an BBS Fine An
FontEditor ManuEdrtor StarTerrn3.0 adit fonts, by Tim Rooinson
CVS ale menus, save them as C source, by David Pehrson Very
nice lelecommuncalorE by Jim Nangano (Fred Fish Disk *30 is
free, wtisn ordered with at least three other disks Iron the
coiled ion.)
To Se Continued.. In Conclusion To the best of our knowledge, Ihe materials In this Itorary are freely redistributable. This means they were either publidy 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 authors wishes, please contact us by mail.
• AC* Smallest footprint.
Lowest price.
Introducing Alegra: The Amiga™ Memory Expansion Unit from Access Associates.
Alegra: 512K now.
Now you can add 512K of external memory to your Amiga. In the smallest package available. At the lowest price available: s3390: suggested retail.
Alegra E: 512K now. 2 MB later.
If you'll need 2 MB of memory in the future, the upgradeable Alegra E is the right choice now. Alegra E gives you 512K bytes of added memory with the option of 2 MB later.4 Because the upgrade requires only internal component changes. Alegra maintains its slim 3 4, r-wide footprint. The price: s37900, suggested retail.
Alegra features a 90 day parts and labor warranty against manufacturing defects.
See Alegra at your quality Amiga dealer.
[ACCESS ASSOCIATES 491 Aldo Avenue Santa Clara, CA. 95054-2303 408-727-8520 Dealer inquiries invited.
Bridge the communications gap with a new standard of comparison MacroModem Efficient for novice or expert One keystroke does the u»ork of dozens
• User defined command macros 36 commands of 35 characters
each. A Macro may contain any key code.
• Macro Help on a function key,
• Command macros stored on disk.
• Load a new command macro set while online.
• Xmodem transfers Check sum or CRC.
• Transmit text from a disk file.
• Capture a terminal session in a disk file.
• Display the terminal capture file while online.
• The 20 most commonly used commands are invoked with the Amiga
Function Keys. HELP lists them.
• User Defined Phone Directory 36 numbers per disk file. Change
directories while on line.
• Auto Dial pick a number from the directory window or enter it
from the keyboard.
• Includes MacroModem Editor • a multi-window editor for Macro
and Phone files.
• Includes FileFilter a file copy utility that ends file format
problems: Finds the end of Amiga binary files Chops data files
to specified length* Translates Amiga, Mac and IBM text files
Expands tabs Inserts or removes form feeds
• Unlimited baud rates from 112 to 262,000.
• User selected serial capture buffer site.
• Two terminal display modes TTY and ANSI.
• Command mode with multiple commands on a tine.
• SHELL command fur calling AmigaDOS.
• Multi-window operation.
• NewCLI Create a new AmigaDOS window when you need it, even
during File Transfers.
• Runs From CLI or Workbench.
• Requires 256k and 1 disk drive.
Price $ 69.95 Dealer inquiries invited Kent Engineering &. Design Box 178, Mottville, NY 13119
(315) 685-8237 MacroWare Ifo brid8e to Vour computing future.
Amiga, IBM, Macintosh arc trademarks of Commodore ** Amiga, Inc., International Bmineu Machine*, and Apple Computer, respectively.
Index of Adertisers Access Associates 95 Adept Software 89 Advanced Systems Design Group 24 Akron Systems 45 Amiga House 36 Amiga Project 84 Byte By Byte CIV Cardinal Software 74,75 Colony Software 26 ComputAmericA 87 Computer West 50 Commspec Communications 72 Conceptual Computing 71 Data Reductions Associates 59 Data Research Processing 86 DESKWARE 53 Discovery Software 15,17,19 Eastern Telecom Inc. 23 ECE 34 Felsina Software 88 Gimble 78 Golden Hawk Technology 71 Great Cover-Ups 39 Image Set 40 Inovatronics, Inc. cm Interactive Analytic Node 80,81 Jen Day Software 7 K J Computers 57
Lattice, Inc 5 Macro Ware 96 Memory Location, The 33 Meridian Software Inc. 47,59 Metadigm, Inc, 2 Michigan Software Distributors 11 Microillusions 54 MicroSmiths, Inc, 30 Micro-Systems Software Inc. 12 MIDI-DESIGNS 63 Mimetics 1 Netch Computer Products 64 New England Technical Services 30 PIM Publications Cll.2,49,90, 94 PeopleLink 68 Phase Four Distributors 22 Professional Network Services Co.
41 Quality Cottage 20 SKE Software 21 Slipped Disk 82 Software Supermarket 43 Speech Systems 60 Stacar International 28 TDI Software 70 TPUG 85 Transtime Technology Co.
8 Westcom Industries 10 ZOXSO 83 96 Amiga Programming Tools Workt I owe* s5SS5SSs6«CSiN551£ indow A member of the TM Power TOOLS family of professional s development products.
The first interactive Amiga program design tool, IpQWQlf'Wftlets you to design fantastic looking windows, menus and gadgets in minutes instead of hours or days!
You show this incredible program what you want and it does the rest, generating C or 68000 assembler source code for you to include in your own programs. IP(£)W®irW5 QfD (tH ® M § is a structure generator for a machine that thrives on structures. With this software package you can: Pick the exact size and position for your windows visually. No more "wait to see what it looks like"; ©iY@ i$]l)(rO©'®7§3 knows where your window is and everything else about it!
Design professional looking menus. Add menus, move menus, or delete menus, whatever you want to do with text menus, our program keeps track of them and writes source code letting you duplicate them exactly with simple operating system calls.
Create your own string, integer and boolean gadgets and position them anywhere in your window.
[p (DW@tiW]Ti$ ©W& keeps them from colliding and remembers the type, location and text contents of each one for writing those complex gadget structures.
Best of all, you can keep your designs in a format that can be re-edited, letting you create your favorite type of windows and customize them for each program you write.
Order Form Price for ¥*(£)3 T1 @1 ©M 3 is $ 89.95, plus $ 3.50 for shipping and handling. Texas residents please add 6.125% sales tax to total price.
Name _ Address _ City_ State_ Zip_ Products ordered _ Payment method: MCA isa Check Money Order AC Card Number_ Expiration Date_ Name on card__Signature_ Enter total enclosed: INDVRTRONICS, INC. 11311 Stemmons Frwy., Suite 7 Dallas, TX 75229 214 241-9515 UNLEASH THE AWESOME POWER OF THE AMIGA!
The PAL is a turnkey expansion chassis that provides the most powerful and cost effective hardware growth path for your AMIGA.
Features: High speed efirect Amiga DMA controBer and hard disk • Five DMA expansion slots * 1 Meg Ram with Clock Calendar • Room for multiple storage retrieval devices * 100% compatible with current and future Amigas • 1 to 8 megabyte ram card options • Optional pass through bus connector for further expansion • Optional prototyping card • Future products currently under development
* -r --; BYTE bu BYTE.
11 Jfef"0*AllfW 3736 Bee Cave Rd., Suite 3, Austin, Texas 78746
(512) 328-2985.: INFOMINDER is an intelli- i| gent inlonnation
resource that provides the user with instantaneous access
to reference information stored within the Amiga personal
Fuly supports multi-tasking • Fast access by menu or outline ¦ Text capabilities include: Justification, ¦i- ¦, r.. — J Word Wr, Multiple character fonts styles • information content completely user definable • Supports combination of TEXT and IFF GRAPHICS -Programmatic interface for context sensitive help • Narration and printing of information • Expand and shrink topics.
INFOMINDER wil revolutionize the way we access textual and graphical information. Stop searching and START using the information around you.
Special introductory price S89.95 WRITE HAND is a general word processor and form letter generator that gives you the most features for your dollars. Developed to meet the special needs of sinal business, WRITE I HAND is easy to learn and easy to use.
WRITE HAND chalenges you to compare the folowing " featuresdolar-for-dolar, fea- ture-for-feature to those of other word processors on the market today.
• Extensive on-line HELP service • Form letter generator •
Powerful editing capabilities • Formats documents while you edH
• Reviews and merges fifes while you edt • Moves blocks of text
and figures of any size • Provides word wrap, bolding and
undetfning Make WRITE HAND the tool that moves your business
into the productive world of electronic word processing.
Suggested retail price $ 50.
FINANCIAL PLUS is the af- fordable way to put your bus- iness at your fingertips. FF ipMi NANCIAL PLUS is the com- “ PR:: plote accounting solution with five systems in one: General Ledger ¦ Ac-! Counts Payable • Accounts Receivable • Payroll ¦ Word, F! Processor JfU FINANCIAL PLUS is adaptable. You customize each company according to its size and bookkeeping needs.
An easy-to-read, easy-to-learn users guide provides comprehensive instructions for setting up your own books.
Plain-Engish menus are the system "roadmaps” for both the novice and for the more experienced. Because FINANCIAL PLUS is a totally integrated accounting system, no longer must you purchase individual packages, store entries on separate diskettes, or run confusing transfer programs to obtain complete integration.
Suaaested retail orice $ 295.
1 Get next point c=it%(np,0): IF c=-l THEN RETURN x=it% (np, 1): y=it% (np, 2): z=it% (np, 3) 1 Compute its new location rim%(np,1}=x*xRx+y*yRx+z*zRx rim%(np,2)=x*xRy+y*yRy+z*zRy rim%(np,3}=x*xRz+y*yRz+z*zRz np=np+l GOTO Rotatel 2 colorpalette++ = colortable[I]; * copy my colors into this data structure * vp. ColorMap = cm; * link it with the viewport * * allocate space for two bitmaps * for (1=0; KDEPTH; 1+4)
b. Planes[i] = (PLANEPIR)AllocRaster (WIDTH, HEIGHT); if (b. Planes
[1] = NULL)exit(NOT_ENOUGH_MEMORY); b2. Planes [i] =
(PLANEPTR)AllocRaster (WIDTH, HEIGHT); if (b2 . Planes [i] ==
NULL)exit(NOT_ENOUGH_MEMORY); 1 ri. BitMap = Sb;
MakeVPort (sv, svp); * construct copper instr (prelim) list *
MrgCop (sv); * merge prelim lists together into a real
* copper list in the view structure * lofl = v. LOFCprList; *
store pointers to copper lists * ehfl = v. SHFCprList; * for
double buffering *
v. LOFCprList = 0;
v. SHFCprList = 0; 3 boxffrst]. x = nux; box[frst]. y = nuy; frst
¦= INCR (frst); send = INCR (send);} 4 As 1 Mbit DRAMs
become widely available.
’’ AiTi. ga s a trademark ef Com moo ore Amiga. Inc.

Click image to download PDF

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

Thanks for you help to extend Amigaland.com !




Today: 62
Yesterday: 117
This Week: 179
Last Week: 762
This Month: 2735
Last Month: 2931
Total: 63803

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