# AMIGA_HW.py # # DEMO Python code to switch the AMIGAs audio filter ON and OFF on the fly. # It also changes the video mode to PAL or NTSC if required. # (C)2007-2012, B.Walker, G0LCU. Now issued as Public Domain, you may do # with it as you please. # # Written in such a way that almost anyone can understand how it works. # # For a minimum of a standard AMIGA A1200(HD) and Python 1.4.0, or for # higher end AMIGAs to 2.0.1. # Also WinUAE 1.5.3 minimum with Workbench 3.0.x and Python as above. # # Ensure that the assigned T: volume exists so as NOT to keep the file when # the AMIGA is rebooted. # # Copy/drag this file into the PYTHON: volume and rename it AMIGA_HW.py. # Call it from the Python prompt as:- # # >>> execfile("PYTHON:AMIGA_HW.py") # # And away you go... ;o) # ========================================================================== # The assembly program that _defaults_ to audio filter ON condition, (when # is pressed only), and then compiled and converted. # The address and control byte are changed as required before generating # the executable file... # # From an AMIGA CLI using, a68k and blink, the executable AMIGA_Filter is # created thus:- # DRIVE:Path/To/Source> a68k AMIGA_Filter.asm # # DRIVE:Path/To/Source> blink AMIGA_Filter.o # # DRIVE:Path/To/Source> _ # ========================================================================== # start: # ;Assembler source to switch the # ;audio filter and power light to ON. # ;Compiled under a68k and linked under blink. # ;A68k AMIGA_Filter # ; # ;blink AMIGA_Filter.o # ; # move.b #252,$BFE001 ;Set Audio Filter to bootup default condition ON. # ;Decimal 252, (0xFC), sets the filter to ON and # ;decimal 254, (0xFE), sets the filter to OFF. # clr.l d0 ;Set return code as OK. # rts ;Exit program. # end # ========================================================================== # The text HEX dump from the CLI using:- # DRIVE:Path/To/Source> Type HEX AMIGA_Filter > AMIGA_Filter.txt # DRIVE:Path/To/Source> _ # # Gives a text file, AMIGA_Filter.txt, with the contents thus... # ========================================================================== # 0000: 000003F3 00000000 00000001 00000000 ...ó............ # 0010: 00000000 00000003 000003E9 00000003 ...........é.... # 0020: 13FC00FC 00BFE001 42804E75 000003F2 .ü.ü.¿à.B.Nu...ò # ========================================================================== # To be edited to suit the Python code... # # Enjoy finding simple solutions to often very difficult problems... # # $VER: AMIGA_HW.py_Version_0.00.10_(C)2007-2012_B.Walker_G0LCU. # The only STANDARD import required... import os def main(): while 1: # A basic working screen to switch the audio filter mode.... print("\f\nA simple Python hardware _controller_ for the Classic AMIGA A1200(HD).\n") print("(C)2007-2012, B.Walker, G0LCU. Now issued as Public Domain.\n") print("Press (f) to enable audio filtering, (bootup default).") print("Press (F) to disable audio filtering.") print("Press (p) or (P) for PAL video mode.") print("Press (n) or (N) for NTSC video mode.") # Set to the audio filter address and to ON by default. control_byte="\xFC" hw_address="\x00\xBF\xE0\x01" keyboard=raw_input("Press (q) or (Q) to Quit:- ") if keyboard=="f" or keyboard==chr(13): control_byte="\xFC" hw_address="\x00\xBF\xE0\x01" if keyboard=="F": control_byte="\xFE" hw_address="\x00\xBF\xE0\x01" if keyboard=="p" or keyboard=="P": control_byte="\x20" hw_address="\x00\xDF\xF1\xDC" if keyboard=="n" or keyboard=="N": control_byte="\x00" hw_address="\x00\xDF\xF1\xDC" if keyboard=="Q" or keyboard=="q" or keyboard==chr(27): break # Manually place the binary into a string format for Python 1.4.0 to 2.0.1. binary_one="\x00\x00\x03\xF3\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x03\xE9\x00\x00\x00\x03\x13\xFC\x00" binary_two="\x42\x80\x4E\x75\x00\x00\x03\xF2" # Create the running file and place it into the AMIGA T: volume as AMIGA_HW. amiga_exe_file=binary_one+control_byte+hw_address+binary_two amigafile=open("T:AMIGA_HW","wb+") amigafile.write(amiga_exe_file) amigafile.close() # Give a short delay to allow system to settle. os.system("C:Wait 1") # Ensure the file AMIGA_HW can be executed. os.system("C:Protect T:AMIGA_HW rwed") # Now run it and _immediately_ re-run this code... os.system("T:AMIGA_HW") main() # End of AMIGA_HW.py. # Enjoy finding simple solutions to often very difficult problems...