A Simple 100Hz To 10KHz Square Wave Generator.
  ---------------------------------------------
		Barry Walker

  Specifications, (A1200(HD)):-
  -----------------------------

  1) Waveforms Generated ............  Square Wave Only.
  2) Designed Frequency Range .......  100Hz to 10KHz.
  3) Usable Frequency Range .........  10Hz to 30KHz.
  4) Frequency Accuracy .............  Better than + or - 2%.
  5) Rise And Fall Time(s) ..........  Better that 10uS.
  6) Mark To Space ..................  1 to 1.
  7) Output Voltage .................  Better than 0.5V peak to peak.
  8) Output Impedance ...............  Approximately 3 KilOhms.
  9) Hum And Noise ..................  Better than 30dB below fundamental
                                       signal at maximum output.
 10) Computer Audio Channel Used ....  Left hand channel ONLY.
 11) All Classic AMIGA Compatible ...  Yes, including WinUAE, (AF2005).
 12) Minimum AMIGA OS ...............  OS1.3x.
 13) Mouse Required .................  No, only the keyboard is used.
 14) GPL ............................  Yes, source included and compiled
                                       under ACE Basic Compiler, (C)D.Benn.
 15) Hardware Required ..............  A simple home made connecting cable.

----------------------------------------------------------------------------

  Overview:-
  ----------

  This project is a simple square wave generator only and can be used for
  basic audio checks. It is a single output only using the left audio
  channel of the AMIGA. It is just a simple audio source to check whether
  an audio amplifier is working or not. This works on ANY classic AMIGA
  AND WinUAE, (Amiga Forever 2005), with FULL sound emulation.

----------------------------------------------------------------------------

  Keyboard Controls:-
  -------------------

  1) ~Q~, ~q~, ~Space Bar~ or ~Esc~ ....  Quit the program.
  2) ~i~ increase frequency ............  500Hz steps.
  3) ~I~ increase frequency ............  10Hz steps.
  4) ~o~ increase frequency ............  1Hz steps(ish :).
  5) ~d~ decrease frequency ............  500Hz steps.
  6) ~D~ decrease frequency ............  10Hz steps.
  7) ~O~ decrease frequency ............  1Hz steps(ish :).
  8) ~v~ increase output level .........  0-100%.
  9) ~V~ decrease output level .........  100-0%.
 10) ~m~ instant maximum output ........  100%.
 11) ~M~ instant output off ............  0%.
 12) ~f~ audio filter off ..............  Normal.
 13) ~F~ audio filter on ...............  Not much use.

  (Note:- On some installations of WinUAE/AF?? the 'Esc' key can give
  problems. It was added purely for completeness.)
  
  Default conditions:-
  --------------------

  1) Frequency .........................  1000Hz.
  2) Output level ......................  100%, maximum.
  3) Audio filter ......................  Off.

  With modification to the software and recompiling it is possible
  to extend the frequency range from 1Hz to 50(+)KHz...

  You will notice that the screen grab



  only shows some of these keyboard controls.
  These are the only important ones for general testing, the others were
  added for completeness.

----------------------------------------------------------------------------

    Construction Of The Test Lead
 ------------------------------

  Parts Required:-
  ----------------

  1) A length of coaxial cable approximately 1.5 metres, RG58 or UR76.
  2) Two PHONO or RCA plugs. One will be left blank.
  3) A countersunk head brass screw approximately 1.5" (37mm) long.
  4) A matching nut.
  5) An insulated crocodile clip.
  6) A length of sleeving, (the sleeving off of the coaxial cable will do).
  7) An old ballpoint pen case.

----------------------------------------------------------------------------

  Tools Required:-
  ----------------

  1) Soldering iron.
  2) Solder. (NOTE:- Solder with lead in it is now banned in the UK.)
  3) Side cutters.
  4) Pliers.
  5) File.
  6) A hobby saw.
  7) PVC tape.
  8) Superglue, (be very careful with this).

----------------------------------------------------------------------------

  Strip at least 6" to 9" of sleeving off of one end of the coaxial cable.
  Do NOT discard this sleeving. Seperate the braid from the inner conductor.
  Solder the inner conductor to the head of the brass countersunk-head screw.

  Place the sleeving over the braiding before fitting the crocodile clip
  and then wrap some PVC tape around the ~Y~ joint of the cable. Solder
  the crocodile clip to the braiding.

  Dismantle an old ballpoint pen to obtain the case. Discard all of the
  inner parts of the pen.

  Before reassembling the screw into the ballpoint pen case, cut the case
  down to a practical length, (approximately 3" to 4").

  Fit the PHONO, (RCA), plug to the other end of the coaxial cable, inner
  conductor to the pin, the braid to the outer part of the plug.

  View the pictures for additional information.





  When you have checked this cable and are confident it is electrically good
  use the superglue to seal the top of the pen case and the nut. Do NOT get
  this glue on you or anything else as it is dangerous. Allow time to dry.

----------------------------------------------------------------------------

  Starting The Square Wave Generator:-
  ------------------------------------
 
      *** WARNING ***

             DO NOT USE WITH VOLTAGES GREATER THAN 12 VOLTS D.C.

  1) Ensure the AMIGA is switched OFF.
  2) Connect the cable to LEFT channel phono socket.
  3) Connect a blank PHONO/RCA plug to the RIGHT channel phono socket.
  4) Switch on the AMIGA and boot into Workbench.
  5) Open up a Shell/CLI.
  6) Go to the ~VOLUME:Drawer~ with the ~Square_Wave_Gen~ software inside.
  7) Type "Square_Wave_Gen[RETURN]" without the quotes and away we go.
  8) Connect up to an audio circuit and start testing.
  9) When finished switch OFF the AMIGA and disconnect all of the hardware.

----------------------------------------------------------------------------
  The ACE Basic Compiler Code:-
  -----------------------------
REM A simple Square Wave Generator.
REM This is ready for ACE Basic Compiler, (C)David Benn.
REM Given to    http://www.thecryptmag.com/    and as PD for all.
REM This will work from OS1.3x to 3.xx without modification.
REM It will also work under WinUAE with full sound enabled.

REM Set up a WorkBench window and fix the font to ~topaz 8~.
  WINDOW 1," A WIDE BAND SQUARE WAVE GENERATOR, (C)1996-2006, B.WALKER, G0LCU.",(0,0)-(640,200),6
  FONT "topaz.font",8
  COLOR 1,0
  CLS

REM Set up variabes.
  LET a$="$VER: Square_Wave_Generator-Version_0.76.64_(C)12-05-1996_G0LCU."
  LET addr&=ALLOC(512,0)
  LET toneaddr&=addr&
  LET pokeaddr&=addr&
  LET dataaddr&=pokeaddr&
  LET n=0
  LET freq=1000
  LET period=INT(3563220/(6*freq))
  LET volume=64

  FOR n=0 TO 201
  LET dataaddr&=(pokeaddr&+n)
  POKE dataaddr&,127
  NEXT n

  POKE (pokeaddr&+1),-128

  FOR n=6 TO 9
  LET dataaddr&=(pokeaddr&+n)
  POKE dataaddr&,-128
  NEXT n

  FOR n=26 TO 41
  LET dataaddr&=(pokeaddr&+n)
  POKE dataaddr&,-128
  NEXT n

  FOR n=106 TO 169
  LET dataaddr&=(pokeaddr&+n)
  POKE dataaddr&,-128
  NEXT n


REM Set up the screen.
screen_setup:
  LOCATE 3,24
  PRINT "SIGNAL OUTPUT LEFT AUDIO CHANNEL."
  LOCATE 6,25
  PRINT "Press the letter in brackets:-"
  LOCATE 7,25
  PRINT "------------------------------"
  LOCATE 9,21
  PRINT "(i) Increase frequency (coarse, 500Hz)."
  LOCATE 10,21
  PRINT "(I) Increase frequency (fine, 10Hz)."
  LOCATE 11,21
  PRINT "(d) Decrease frequency (coarse, 500Hz)."
  LOCATE 12,21
  PRINT "(D) Decrease frequency (fine, 10Hz)."
  LOCATE 13,21
  PRINT "(Q) or (q) Quit the program." 
  LOCATE 16,31
  PRINT "FREQUENCY"
  LOCATE 19,6
  PRINT "Designed range 100Hz to 10KHz SQUARE WAVE. Useful range 10Hz to 30KHz."


REM Generate an audio tone.
  POKEW 14676118,15		'Switch off audio dma.
  POKEL 14676128,toneaddr&	'Set address to chip ram.
  POKEW 14676132,4		'Number of words in data sample.
  POKEW 14676134,period		'Period of sampling time.
  POKEW 14676136,volume		'Volume max 64, min 0.
  POKEW 14676126,255		'Disable any other modulation.
  POKEW 14676118,33281		'Enable sound on CH1.
  POKE 12574721,254		'Disable audio filter.


REM This is the program loop.
key_hold:
  LET a$=INKEY$
  IF a$="q" OR a$="Q" OR a$=" " OR a$=CHR$(27) THEN GOTO cleanup:
  IF a$="i" THEN LET freq=freq+500
  IF a$="I" THEN LET freq=freq+10
  IF a$="d" THEN LET freq=freq-500
  IF a$="D" THEN LET freq=freq-10
  IF a$="o" THEN LET freq=freq+1
  IF a$="O" THEN LET freq=freq-1
  If a$="v" THEN LET volume=volume+1
  IF a$="V" THEN LET volume=Volume-1
  IF a$="m" THEN LET volume=64
  IF a$="M" THEN LET volume=0
  IF a$="f" THEN POKE 12574721,254
  IF a$="F" THEN POKE 12574721,252
  IF freq<=10 THEN LET freq=10
  IF freq>=30000 THEN LET freq=30000
  IF volume<=0 THEN LET volume=0
  IF volume>=64 THEN LET volume=64
  LOCATE 16,40
  PRINT freq;"Hz.";"        "
  IF freq>3520 THEN GOTO band0:
  IF freq>880 THEN GOTO band1:
  IF freq>220 THEN GOTO band2:
  GOTO band3:
  GOTO key_hold:
band0:
  LET period=INT(3563220/(2*freq))
  POKEL 14676128,toneaddr&
  POKEW 14676132,1
  POKEW 14676134,period
  POKEW 14676136,volume
  GOTO key_hold:
band1:
  LET period=INT(3563220/(8*freq))
  POKEL 14676128,(toneaddr&+2)
  POKEW 14676132,4
  POKEW 14676134,period
  POKEW 14676136,volume
  GOTO key_hold:
band2:
  LET period=INT(3563220/(32*freq))
  POKEL 14676128,(toneaddr&+10)
  POKEW 14676132,16
  POKEW 14676134,period
  POKEW 14676136,volume
  GOTO key_hold:
band3:
  LET period=INT(3563220/(128*freq))
  POKEL 14676128,(toneaddr&+42)
  POKEW 14676132,64
  POKEW 14676134,period
  POKEW 14676136,volume
  GOTO key_hold:


REM This is the cleanup routine.
cleanup:
  POKEW 14676118,15		'Turn off audio DMA.
  POKE 12574721,252		'Enable audio filter.
  CLEAR ALLOC			'Reclaim memory.
  WINDOW CLOSE 1		'Close the window.
  END				'Exit without errorcode.

----------------------------------------------------------------------------
  Note that although this is compiled BASIC, (using ACE Basic Compiler),
  with a little time and effort this code could be modified to suit
  AmigaBASIC easily and use the AmigaBASIC interpreter.

  As it stands the executable WILL run on OS1.3x successfully as well as
  OS2.0x and above. NO special libraries, handlers, devices or commands are
  required, ONLY a full, standard OS install. The project sticks rigidly
  to my CRITERIA described in the Magazine's Issue 44.


Square_Wave_Gen.lha - The Main Executable

  Last but not least, the FULL archive of this project including the source
  code and HAM images also can be found at:-

 http://main.aminet.net/hard/hack/AMIGA-Project2.lha

============================================================================

     IMPORTANT:-
 -----------


    The Legal Stuff:-
    -----------------

    These programs are Freeware and no profit will be made from them,
    also all of the files must remain unaltered and intact including this
    one. The author is not responsible for any damage to, or loss of, or
    failure of equipment or data caused in any way by the use of these
    programs. There is NO warranty with the use of these software releases
    and YOU USE THEM AT YOUR OWN RISK.

----------------------------------------------------------------------------

    Testing Evaluation:-
    --------------------

    An A1200(HD) in 2MB, 6MB and 10MB modes using trapdoor memory AND/OR
    PCMCIA memory expansions. Also tested on an A600(HD) in 2MB and 6MB
    modes. All test conditions were/are running STANDARD KS2.0x to 3.1x,
    and using standard ~topaz 8~ fonts throughout.

    I have no idea what a strange configuration setup will create so refer
    to the ~The Legal Stuff~ above.

----------------------------------------------------------------------------

  WARNING.
 --------

  1) DISCONNECT any faulty equipment under test from the MAINS supply.
  2) If a DC supply is used do NOT reverse polarity the connections.
  3) Do NOT power up any electronic item until it is safe to do so.
  4) CHECK and RECHECK all of your construction and repair work thoroughly.
  5) Handle ALL tools used with care.
  6) Beware of ALL types of solvents, glues and etching fluids.
  7) NEVER leave a soldering iron switched on unattended.
  8) KEEP everything OUT of the reach of small children.
  9) Switch OFF the AMIGA before disconnecting or connecting any hardware.
 10) And finally read 1) to 9) again.

----------------------------------------------------------------------------

   Contact:-
   ---------

   Mr Barry Walker, G0LCU.

   Email:-     wisecracker@tesco.net
   URL:-       http://homepages.tesco.net/wisecracker/G0LCU.HTM

   Author of the ~TestGear?~ projects in the ~hard/hack~ drawer of AMINET.

----------------------------------------------------------------------------

   A very useful HardWare related site, (C) Anthony Hoffman, for
   modifications, schematics, repairs and the like is:-

    http://amiga.serveftp.net/

============================================================================



© RIYAN Productions