# 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")<RETURN/ENTER>
#
# And away you go... ;o)
# ==========================================================================
# The assembly program that _defaults_ to audio filter ON condition, (when
# <RETURN/ENTER> 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<RETURN/ENTER>
# <Some reports here.>
# DRIVE:Path/To/Source> blink AMIGA_Filter.o
# <Some more reports here.>
# 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<RETURN/ENTER>
# ;<Some reports here.>
# ;blink AMIGA_Filter.o<RETURN/ENTER>
# ;<Some more reports here.>
# 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<RETURN/ENTER>
# 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)<RETURN/ENTER> to enable audio filtering, (bootup default).")
print("Press (F)<RETURN/ENTER> to disable audio filtering.")
print("Press (p) or (P)<RETURN/ENTER> for PAL video mode.")
print("Press (n) or (N)<RETURN/ENTER> 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)<RETURN/ENTER> 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...