'>HxPgmHdrs.txt D Buckley 9-2-01 '============================================================== ' Program Headers - Hextor_0 to Hextor26 '============================================================== '>Hextor_0.BSx '============================================================== '{$stamp BS2Sx} '============================================================== 'Setup program for the leg servos, 'buttons allow:- ' legs to be set to ' Neutral position - legs up ' the correct position for attaching the legs ' and body to the leg servos as in the html ' assembly instructions. ' standUp position - ie legs down ' servo positions to be adjusted ' servos 0 - 11 (legs), alter neutral setting in BOS ' servos 12,13,14 no setting in BOS to alter. '============================================================== '>Hextor_0play.BSx '============================================================== '{$stamp BS2Sx} '============================================================== 'Now you have got the legs on, this program lets you have a 'little play with Hextor. 'The buttons allow you to go Forward, Backward, Right, Left '============================================================== '>Hextor_1.BSx '-------------------------------------------------------------- '{$stamp BS2Sx} '-------------------------------------------------------------- 'Introduction to controlling the LEDs. 'Required knowledge:- 'con, output, high, low, pause, toggle, goto '-------------------------------------------------------------- 'The program is very simple, 'We first of all declare the two constants, 'Rled (Right LED) and Lled (Left LED) 'then set the pins to OUTPUT and make one HIGH the other LOW 'The initial setting of the LEDs and the PAUSE time can be as 'you like. '============================================================== '>Hextor_2.BSx '-------------------------------------------------------------- '{$stamp BS2Sx} '-------------------------------------------------------------- 'Introduction to controlling the walker. 'This involves sending a single control byte to the 'Bug Commander BOS to initiate various basic moves. ' 'New '--- 'Required knowledge: var, assignment{=}, gosub, return, serout ' 'BOS command: U,F,B,L,R,M,S,O,C,D,P 'Constants: i96n BOSrx BOStx epower poweruptime 'Variables: BOSbusy BOScmnd 'Subroutine: tellBOS '-------------------------------------------------------------- 'Experiment with altering the order of the commands, try adding 'more, remember to 'gosub tellBOS' each time BOScmnd is changed '============================================================== '>Hextor_3.BSx '-------------------------------------------------------------- '{$stamp BS2Sx} '-------------------------------------------------------------- 'Introduction of sequences held in DATA statements 'and a simple routine to read the moves. ' 'New '--- 'Required knowledge: DATA, read, if then 'Meta Command: z 'Variable: Rptr 'Subroutine: dosequence '-------------------------------------------------------------- 'Now instead of writing lines of Basic to add commands, the 'commands are held in DATA staements so they are easy to alter. 'The main routine does one sequence and then the other. 'Experiment with changing the commands in the sequences and add 'your own, setting Sptr and then gosub(ing) in the start loop. '============================================================== '>Hextor_4.BSx '-------------------------------------------------------------- '{$stamp BS2Sx} '-------------------------------------------------------------- 'Introduction of setting:- 'speed, ride-height, leg-lift, stride-length 's=speed, r=ride-height, l=leg-lift,m=half stride-length. 'Introduction of gait modifiers Q and T. ' 'All the settings remain in operation until new values are sent 'or the robot is powered down. ' 'wiggle1 now has the instruction "s",8, setting the spped to 8 'and the ride-height instruction "r",170 (the default) 'wiggle2 now has the instruction "s",0, setting the spped to 0 'and the ride-height instruction "r",200 ' 's = 0 - 15 only the low nibble of higher values is used 'r = 0 - 255 r<150 means the servos have to work very hard 'l = 0 - 255 but leg height limited to neutral position 'm = 0 - 127 in practice m>40 leads to unstable walking ' 'Also wiggle1 now has the gait modifier "Q" 'and wiggle3 has the gait modifier "T". ' 'New '--- 'Required knowledge: lookdown ' 'BOS Commands: Q,T,s,r,l,m 'Variable: arg1 'Subroutine: tellBC1d '-------------------------------------------------------------- 'Experiment with the s,r,m,l,Q and T commands. 'Note the main loop now executes three sequences. '============================================================== '>Hextor_5IR.BSx '-------------------------------------------------------------- '{$stamp BS2Sx} '-------------------------------------------------------------- 'Debug program for testing IR training and comms ' 'New '--- 'Required knowledge: serin, &, serout..[dec..] ' debug (not vital but it helps) 'Constant: irrx 'Variable: irin 'Subroutine: irget '============================================================== '>Hextor_5LCD.BSx '-------------------------------------------------------------- '{$stamp BS2Sx} '-------------------------------------------------------------- 'Debug program for testing LCD and buttons on the LCD Pendant ' 'New '--- 'Required knowledge: serin, &, serout..[dec..] ' debug (not vital but it helps) ' 'Constant: lcdtx,lcdrx,ESC,LCDhome,LCDlighton,LCDlightoff ' LCDpsmode,LCDline1,LCDline2,pressed 'Variable: lcdbtns,btn1state - btn4state 'Subroutine:lcd btns nobtns '============================================================== '>Hextor_5LCD2.BSx '-------------------------------------------------------------- '{$stamp BS2Sx} '-------------------------------------------------------------- 'Debug program for testing LCD and buttons on the LCD Pendant. ' 'Introduces a method of storing LCD text in DATA and the use of 'ENCode on the button states to get a button number, so if 'required a BRANCH can be made depending on the button pressed. ' 'New '--- 'Required knowledge: serin, &, serout..[dec..] ' debug (not vital but it helps) ' 'Constant: 'Variable: btn,lcdmsg,lcdchar 'Subroutine:btns rewritten,lcd rewritten '============================================================== '>Hextor_5.BSx '-------------------------------------------------------------- '{$stamp BS2Sx} '-------------------------------------------------------------- 'Debug program for testing LCD and buttons on the LCD pendant 'and for testing IR training and comms. ' 'New '--- 'Required knowledge: serin, &, serout..[dec..] ' debug (not vital but it helps) ' 'Constant: irrx,lcdtx,lcdrx,ESC,LCDcls,LCDlighton,LCDlightoff ' LCDpsmode,LCDline1,LCDline2,pressed 'Variable: irin,lcdbtns,btn1state - btn4state 'Subroutine:irget,lcd, btns '============================================================== '>Hextor_6IR.BSx '-------------------------------------------------------------- '{$stamp BS2Sx} '-------------------------------------------------------------- 'Introduction to controlling Hextor using the infra-red 'communication link (IR-link). 'To use the IR-link the receiver must first be trained to 'recognise the codes from your handset. 'See the 'Hextor-Manual, Documents, IR-Receiver'. ' 'Note how the srmlQT settings remain in force until re-written. ' 'New '--- ' 'Constant: 'Variable: 'Subroutine: '============================================================== '>Hextor_6.BSx '-------------------------------------------------------------- '{$stamp BS2Sx} '-------------------------------------------------------------- 'Introduction to controlling Hextor using the infra-red 'communication link (IR-link) and or the LCD pendant. 'To use the IR-link the receiver must first be trained to 'recognise the codes from your handset. 'See the 'Hextor-Manual, Documents, IR-Receiver'. ' 'Note how the srmlQT settings remain in force until re-written. ' 'New '--- ' 'Constant: 'Variable: btn now set in subroutine btns 'Subroutine:btns rewritten 'LCD text: messages and names altered '============================================================== '>Hextor_7.BSx '-------------------------------------------------------------- '{$stamp BS2Sx} '-------------------------------------------------------------- 'Re-oganisation of sequences so settings s,r,m,l, can be 'selected by key commands without running a sequence as well. ' 'lcdmenu written to read the buttons and write to the lcd ' 'New '--- 'Required knowledge: ' 'Constant: lcdoptions 'Variable: btnc,mendo 'Subroutine:lcdmenu 'LCD text: messages and names altered '-------------------------------------------------------------- 'Experiment with the s,r,m,l commands '============================================================== '>Hextor_8US.BSx '-------------------------------------------------------------- '{$stamp BS2Sx} '-------------------------------------------------------------- 'Debug program for testing the ultrasonic sensor and servo 'New '--- 'Required knowledge: ' 'Constants: ustx usrx ustout usmin usahead usmax 'Variables: usdir usRange 'Subroutine: usget '============================================================== '>Hextor_9.BSx '-------------------------------------------------------------- '{$stamp BS2Sx} '-------------------------------------------------------------- 'Introduction to robot control using the Ultrasonic Sensor 'and a wander routine using behaviour rules and the sensor. ' 'New '--- 'Required knowledge: debug (not vital but it helps) ' 'Constants: ustx usrx,lcdoptions increased 'Variables: usdir usRange 'Subroutine:usget,lcdmenu dm6 added to lookup 'LCD text: lcdm0 altered,lcdm6 '-------------------------------------------------------------- 'Experiment with the order of the tests, the sensor direction 'and the threshold values in 'uswander' '============================================================== '>Hextor10.BSx '-------------------------------------------------------------- '{$stamp BS2Sx} '-------------------------------------------------------------- 'An improved method of specifying Utrasonic Sensor positions 'and corresonding action in the wander routine by using DATA. 'New test sequences can be used by simply altering the DATA 'statements rather then having to write program statements. 'The rules in the DATA are the same as used in Hextor_9.BSx. 'New '--- 'DATA moved to start of program, makes it easier to find ' 'Required knowledge: ' 'Constants: 'Variables: usRptr,usRrange,usaction 'Routine: uswander rewritten '-------------------------------------------------------------- 'Understand the new routine 'uswander' and experiment with 'the tests in the DATA statements at 'usactions'. '============================================================== '>Hextor11.BSx '-------------------------------------------------------------- '{$stamp BS2Sx} '-------------------------------------------------------------- 'A new method of specifying Utrasonic Sensor action where 'action can be specified for greater than the range as well as 'less than or equal to the range. This allows the robot to 'follow objects as well as avoid them. 'New '--- 'New rule added at 'usactions' to allow simple following 'Default action byte for US wander now in DATA. ' 'Required knowledge: ' 'Meta Command: X 'Constants: 'Variables: usaction renamed usactiong, usactionl 'Routine: uswander rewritten '-------------------------------------------------------------- 'Understand the new routine 'uswander' and experiment with 'the tests in the DATA statements at 'usactions'. '============================================================== '>Hextor12.BSx '-------------------------------------------------------------- '{$stamp BS2Sx} '-------------------------------------------------------------- 'Introduction of a modification to 'uswander' allowing a 'sequence to be run as a result of a range test. 'New '--- 'The Ultrasonic sensor data now has an extra entry 'ussequence' 'holding the value which points to the desired Action-sequence. 'If no Action-sequence is required use 'DATA 0'. 'The start of the rules is now indicated by 'usrules. 'US servo directions are now named constants ' 'Required knowledge: ' 'Meta Command: a 'Constants: 'Variables: 'Routine: uswander rewritten at usdo 'Subroutine: '-------------------------------------------------------------- 'Experiment with triggering sequences on US sensor range. '============================================================== '>Hextor13.BSx '-------------------------------------------------------------- '{$stamp BS2Sx} '-------------------------------------------------------------- 'Introduction of more complex behaviour rules. 'Example of rules used with data from the Ultrasonic Sensor. 'if something is too close then back away 'else if something is not too far away then go towards it 'else turn round and sit down. 'So the robot tries to find a corner and sit in it facing out 'until something comes near when it will come out of the corner 'and start again. ' 'New '--- 'Behaviour rules at usrules rewritten as above ' 'Required knowledge: ' 'Constants: 'Variables: 'Routine: 'Subroutine: dosequence slightly rewritten to avoid nxt label 'Sequence: tround '-------------------------------------------------------------- 'Experiment with different sets of rules. '============================================================== '>Hextor14.BSx '-------------------------------------------------------------- '{$stamp BS2Sx} '-------------------------------------------------------------- 'Introducing direct control of the servos, 'dosequence extended 'so the three bytes for direct control can be included in the 'sequences in DATA statements. 'Also introducing the command "W". ' 'New '--- 'The subroutines necessary for direct control of servos. 'Key 7 used for the sequence 'dobeg'. ' 'A test in the lcd ir routine to see if the IR code has changed 'so we don't do the same sequence twice for the same keypress. ' 'Sptr the pointer to the routines is a byte so it can't point 'to locations beyond 255. 'lcdmsg the pointer to the LCD messages is a word so they can 'grow beyond 255. 'So the LCD messages should be the last DATA. ' 'Required knowledge: commands for direct control of the servos ' 'BOS Command: 3 byte direct control,W 'Constants: lcdoptions altered 'Variables: arg2, oldirin 'Routine: Scon as part of dosequence, directcon1 'Subroutine:BOSmsg3, BOSrepl1, BOSrepl2, dosequence extended ' lcdmenu altered for dm7, ' irget default value was 15 now 0=idle value 'Sequence: beg 'LCD text: dm7 '============================================================== '>Hextor15.BSx '-------------------------------------------------------------- '{$stamp BS2Sx} '-------------------------------------------------------------- 'Introducing the concept of Behaviour Controllers. ' 'As we have seen the program evolve up to Hextor_14.BS2 it has 'developed two areas with distinct modes of operation:- '1 - Infra-Red Behaviour Controller ' In this section it is the received infra-red commands ' which control program flow, running each sequence as the ' user desires with an option to jump to section 2. '2 - Ultrasonic Behaviour Controller ' In this section it is the information from the ultrasonic ' sensor which directs program flow depending on the rules ' in the DATA statements at 'usrules'. Most of the time the ' program looks to see if there are any infra-red commands ' whereupon it jumps back to section 1. ' 'In this program a third Behaviour Controller is 'added '3 - Direct BOS Control ' In this section it is the program statements as written ' by the user which control the flow. Each time through the ' loop the program looks to see if there are any infra-red ' commands whereupon it jumps back to section 1. ' This section allows you to use all the BOS commands at ' will. ' 'New '--- 'Key 8 used to jump to Direct BOS Control. ' 'Required knowledge: commands for direct control of the servos ' 'Constants: lcdoptions altered 'Variables: Rptr Sptr usRptr all changed to word variables 'Routine: usdo modified to read both bytes of Sptr 'Subroutine:lcdmenu altered for dm8 'Sequence: 'LCD text: dm1 - dm6 altered,dm8 '-------------------------------------------------------------- 'Experiment with different BOS commands. '============================================================== '>Hextor16.BSx '-------------------------------------------------------------- '{$stamp BS2Sx} '-------------------------------------------------------------- 'Introduction to using more than one Ultrasonic behaviour. ' 'New '--- 'Key 2 used for beg instead of wiggle2 'Key 7 now used for the second ultrasonic behaviour 'The behaviour rules are now accessed by a single pointer. ' 'Required knowledge: ' 'Constants: 'Variables: usrules 'Routine: uswander renamed usbehave and rewritten at usdo 'Subroutine: 'Sequence: 'usRules: usaction renamed uscorner, usbeg 'Behaviour: the ultrasonic behaviour controller now has two ' entry points - douscorner, dousreact 'LCD text: dm2,dm6,dm7,dm8 all altered '-------------------------------------------------------------- 'Experiment with different Behaviours. 'To see some strange behavious try setting 'usrules' to random 'locations and then what happens when an object is placed in- 'front of the ultrasonic sensor. 'usbehave' will blindly try 'and understand the meaningless data as rules and do what they 'say. Setting usrules=1 was interesting. D,15(=BBz),66,67,R,L. '============================================================== '>Hextor17.BSx '-------------------------------------------------------------- '{$stamp BS2Sx} '-------------------------------------------------------------- 'Introduction to using more than one triggered sequence in each 'set of Ultrasonic behaviour rules. ' 'New '--- 'Now it is possible to have more than one sequence triggered in 'each us rule set, instead of the sequence pointer being in the 'header to each rule set the required pointer is put on each 'line of the test. ' 'Key 7 now does ushello ' 'Required knowledge: ' 'Constants: 'Variables: 'Routine: doushello, usbehave rewritten at usdo and ustest 'Subroutine: 'Sequence: Rface Lface F5 R5 L5 'usRules: uscorner and usbeg modified to use more sequences ' ushello 'Behaviour: 'LCD text: dm7 altered '============================================================== '>Hextor18.BSx '-------------------------------------------------------------- '{$stamp BS2Sx} '-------------------------------------------------------------- 'Improvement to the actions in UShello ' 'New '--- ' 'Required knowledge: ' 'Constants: 'Variables: 'Routine: 'Subroutine: 'Sequence: BR BL 'usRules: ushello modified with BR BL 'Behaviour: 'LCD text: '-------------------------------------------------------------- 'You will also note that the sequence 'wiggle2' is not used in 'this program, it could be deleted but may be useful in the 'future. Deleting sequences can lead to unpredictable results 'since you have to be absolutely certain that they are not used 'anywhere in the program, if in doubt change them to the single 'byte "z" for a no action sequence. ' 'Writing control sequences illustrates the importance of a good 'education, if the memory is first filled up with junk 'sequences then later it becomes very difficult to assign 'meaningful names to useful sequences. Changing the contents of 'a sequence can lead to all sorts of strange behaviour. '============================================================== '>Hextor19.BSx '-------------------------------------------------------------- '{$stamp BS2Sx} '-------------------------------------------------------------- 'Introduction of a Yawn function. ' 'If you have run the ushello rules you will have found that 'although if a person approaches the robot it can go up to them 'and beg it is perfectly capable of finding a blank wall and 'begging - forever! What is needed is a method of keeping track 'of how many times a sequence has been activated and at some 'threshold allowing the robot to get bored and do something 'else. The Yawn function allows the next US rule to be skipped 'if it has been triggered a set number of times. If the next 'rule was the one triggering the beg sequence then it could be 'skipped and another sequence with the same activation 'parameters done instead. ' 'The choice of name is governed by the few remaining letters 'not used. The Stamp is not the worlds best computer to use for 'wordy messages. ' 'New '--- ' 'Required knowledge: ' 'Meta Command: Y 'Constants: 'Variables: usyawn 'Routine: usbehave modified at usmove for yawn action 'Subroutine: 'Sequence: tround modified with speed settings 'usRules: ushello modified with Yawn 'Behaviour: '-------------------------------------------------------------- 'You will also note that the sequence 'wiggle2' is not used in 'this program, it could be deleted but may be useful in the 'future. Deleting sequences can lead to unpredictable results 'since you have to be absolutely certain that they are not used 'anywhere in the program, if in doubt change them to the single 'byte "z" for a no action sequence. ' 'Writing control sequences illustrates the importance of a good 'education, if the memory is first filled up with junk 'sequences then later it becomes very difficult to assign 'meaningful names to useful sequences. Changing the contents of 'a sequence can lead to all sorts of strange behaviour. '============================================================== '>Hextor20.BSx '-------------------------------------------------------------- '{$stamp BS2Sx} '-------------------------------------------------------------- 'Introduction of an enhanced Yawn function which allows more 'than one yawn variable. ' 'Because we are running out of room 'the section in BOScon between '**** make space delete start 'and '**** make space delete end 'has been deleted. ' 'New '--- 'Two yawn nibble variables instead of the byte 'usyawn'. 'It is easy to add to the branch commands in 'usmove' for more 'yawn variables. 'The first parameter byte for "Y" or "y" is now the index to 'the yawn variable, 0=>usyawn0, 1=>usyawn1. ' 'Required knowledge: ' 'Constants: 'Variables: usyawn0 usyawn1 'Routine: usbehave modified at usmove for yawn action 'Subroutine: 'Sequence: 'usRules: ushello modified with Yawn variable select 'Behaviour: '-------------------------------------------------------------- 'Experiment with yawn variables. '============================================================== '>Hextor21.BSx '-------------------------------------------------------------- '{$stamp BS2Sx} '-------------------------------------------------------------- 'Introduction of a facility to link sequences by means of the '"a" Meta command similar to GOTO. ' 'Because we are running out of room 'the section in BOScon between '**** make space delete start 'and '**** make space delete end 'has been deleted ' 'New '--- 'In a sequence the meta command a,word 'sequence-name', 'permits 'sequence-name' to be jumped to. ' 'Introduction of word 'arg' with arg1 and arg2 redefined as its 'low and high bytes. Arg just used as temp storage at Sgo ' 'new subroutine readword reads two bytes of DATA ' 'Required knowledge: ' 'Meta command: 'a' now used in sequences 'Common RAM: 'Constants: 'Variables: arg, arg1 and arg2 redefined 'Routine: 'Subroutine: dosequence modified at Scon and Sa, read_arg 'Sequence: wiggle2 is linked to the end of wiggle3 by 'a' 'usRules: 'Behaviour: '-------------------------------------------------------------- 'Experiment with Meta command 'a'. '============================================================== '>Hextor22.BSx '-------------------------------------------------------------- '{$stamp BS2Sx} '-------------------------------------------------------------- 'Introduction of a facility to include a sequence in another 'similar to GOSUB, enabled by means of a stack and pointer. ' 'Note this is a moment which has been drawing near for some 'time CTL-M shows that we are running out of room, consequently 'it is time to use the other 7 pages in the Stamp2Sx. We will 'begin another series of programs where each Behaviour 'controller is placed in a separate page. ' 'Because we are running out of room 'the section in BOScon between '**** make space delete start 'and '**** make space delete end 'has been deleted ' 'New '--- 'In a sequence a new meta command i,word 'sequence-name', 'permits 'sequence-name' to be used as a subroutine. ' 'Common RAM section before cons and vars 'A software stack is implemented in Common RAM ' 'Required knowledge: use of stacks, stackpointers, push and pop ' and Common RAM ' 'Meta command: i 'Common RAM: software stack 'Constants: 'Variables: incS, tempb, stkp 'Routine: stkp initialised in init1: 'Subroutine: push,pop,pushword,popword ' Sinc added to dosequence, ' dosequence modified at doneS 'Sequence: wiggle2 included in the middle of wiggle3 'usRules: 'Behaviour: '-------------------------------------------------------------- 'Experiment with including sequences in other sequences '============================================================== '>Hextor23.BSx '============================================================== '{$stamp BS2Sx} '============================================================== 'Modification of the last three rules of uscorner to use the 'Action sequences F5,R5,L5, similar to ushello, the action is 'faster since the ultrasonic sensor is not tested each step. ' 'New '--- ' 'Required knowledge: ' 'Meta command: 'Common RAM: 'Constants: BOShalt pin name added for completeness ' not used yet 'Variables: 'Routine: 'Subroutine: 'Sequence: 'usRules: 'Behaviour: '============================================================== 'Experiment with sequences in rules to make the action quicker '============================================================== '>Hextor24.BSx '============================================================== '{$stamp BS2Sx} '============================================================== 'Dosequence modified to allow h,v,w commands. 'Two voice sequences added in initialisation at init1. 'The first, a chirp, is used instead of a pause whilst waiting 'for the infra-red circuitry to settle and the second, a beep, 'to indicate ready. ' 'New '--- ' 'Required knowledge: ' 'Meta command: 'BOS Commands: V, h, v, w 'Common RAM: 'Constants: 'Variables: 'Routine: 'Subroutine: dosequence modified 'Sequence: chirp1, beep2 'usRules: 'Behaviour: '============================================================== 'Experiment with sounds and gripper position control '============================================================== '>Hextor25.BSx '============================================================== '{$stamp BS2Sx} '============================================================== 'Introduction of Wave Gait commands 'renamed tellBOSx routines to better indicate type of message ' 'New '--- ' 'Required knowledge: ' 'Meta command: 'BOS Commands: 0,1,2,3,4,5,6,f,m,b 'Common RAM: 'Constants: 'Variables: 'Routine: 'Subroutine: tellBOScc ' dosequence modified to handle wave gait cmnds ' some dosequence labels renamed ' renamed tellBOS as tellBOSc ' renamed tellBOS1d as tellBOScd ' renamed tellBOS2d as tellBOScdd ' renamed tellBOS3 as tellBOSccc 'Sequence: wiggle3 modified with new commands 'usRules: 'Behaviour: '============================================================== 'Experiment with Wave Gait commands '============================================================== '>Hextor26.BSx '============================================================== '{$stamp BS2Sx} '============================================================== 'Introduction of a Meta Command to run Basic subroutines so the 'LEDs can be flashed etc. 'If a constant is setup with a name similar to an underscored 'subroutine label then the sequences will be easier to read. 'eg xleds con 0 and x_leds: 'dosequence modified to allow x 'Argument to xleds, 0 - both off ' 1 - right on ' 2 - left on ' 3 - both on 'eg x - eXecute a Basic subroutine, used in sequences ' "x",, ' eg "FBRLx",xleds,n,"FROP... ' where xleds is the name of a constant used to ' control a Branch command in the subroutine Xecute ' and 'n' is the parameter for the routine. ' 'New '--- ' 'Required knowledge: ' 'Meta command: 'x' 'BOS Commands: 'Common RAM: 'Constants: xleds 'Variables: 'Routine: x_leds 'Subroutine: xecute ' dosequence modified at test for 'x' and xe: 'Sequence: wiggle1 modified with x,xleds 'usRules: 'Behaviour: '============================================================== 'Experiment with Xecute '==============================================================