2411 lines
42 KiB
NASM
Executable File
2411 lines
42 KiB
NASM
Executable File
.FILE "MOTION.ASM"
|
|
*----------------------------------------------------------------------------
|
|
*
|
|
*
|
|
*COPYRIGHT (C) 1994 BY TV GAMES, INC.
|
|
*ALL RIGHTS RESERVED
|
|
*
|
|
*
|
|
*
|
|
*Misc Notes:
|
|
*
|
|
* The Galil board is unreliable under conditions of abort, and can
|
|
* become confused. To illustrate this point D/L a program, send a
|
|
* HW Abort, then send an XQ command, and send a HW Abort. We have been
|
|
* able to repeatedly shut the Galil board down, so that it will not
|
|
* respond (under normal AB circumstances even under abort, Galil will
|
|
* still return a prompt).
|
|
*
|
|
* We have to place the following redundancies into our code to assure
|
|
* safe handling of the motion control:
|
|
*
|
|
* 1) within the program the TL (torque limit) must be tested to
|
|
* insure no runaway motors (test incombination of movement)
|
|
* 2) check HW value for safety controls
|
|
* 3) every thirty frames the Galil board is polled for abort status
|
|
* 4) every sixty frames (when motion is OK) we must make sure
|
|
* that we are receiving characters
|
|
*
|
|
*
|
|
*
|
|
|
|
.include MACS.EQU
|
|
.include MPROC.EQU
|
|
.include VUNIT.EQU
|
|
.include CMOS.EQU
|
|
.include SYSID.EQU
|
|
.include SYS.EQU
|
|
.include GLOBALS.EQU
|
|
.include SNDTAB.EQU
|
|
.include PALL.EQU
|
|
.include OBJECTS.EQU
|
|
.include TEXT.EQU
|
|
.include DIAG.EQU
|
|
|
|
|
|
|
|
.globl CHECK_MOTION_DIP
|
|
.globl CHECK_MOTION_PRESENT
|
|
|
|
.globl CHECK_MOTION_DIP,CHECK_MOTION_PRESENT
|
|
MIN_MOVE_DIST .set 200
|
|
|
|
.bss MOTION_NOT_ON,1
|
|
.bss MOTION_STOP_HIT,1
|
|
.bss MOTION_RCV_TIKS,1
|
|
|
|
|
|
|
|
|
|
.text
|
|
*----------------------------------------------------------------------------
|
|
*This is the initial check of the galil board.
|
|
*The CMOS value will be set to ON if cool else OFF
|
|
*No other routine may turn it ON.
|
|
*No other routine will ever download or initialize galil
|
|
*This routine may only be called at powerup
|
|
*
|
|
*
|
|
*
|
|
*
|
|
INITIALIZATION_MOTION_CHECK:
|
|
CALL CLEAR_LATCH_ERROR
|
|
|
|
LDI 1,R2
|
|
SETAUD ADJ_MOTION_PRESENT
|
|
LDI 0,R2
|
|
SETAUD AUD_RESET_TOTALLY
|
|
|
|
CALL CHECK_MOTION_DIP
|
|
RETSNZ
|
|
|
|
LDI 1,RC
|
|
TEXTITT "MOTION SETUP TESTING...",1,250
|
|
|
|
CALL RESET_GALIL
|
|
CALL WAIT_ACK_REAL
|
|
|
|
CALL CHECK_MOTION_PRESENT
|
|
BNE INIT_MOTION_ERROROUT
|
|
|
|
;send it UP, for .5 inch (1000)
|
|
;
|
|
romdata
|
|
|
|
MINIT10 .string "SP 15000, 15000, 15000",13,0
|
|
MINIT11 .string "AC 105000,105000,105000",13,0
|
|
MINIT12 .string "DC 435000,435000,435000",13,"TL 7,7,7",13,0
|
|
MINIT13 .string "IT 0.1,0.1,0.1",13,0
|
|
|
|
MINIT9 .string "SH;TL 7,7,7;ER 1000,1000,1000;OE 1,1,1;PR 4000,4000,4000;BG",13,0
|
|
MINIT9DIAG .string "SH;PR 4000,4000,4000;BG",13,0
|
|
|
|
MINIT1 .string "OE 0,0,0;TL 5,5,5;JG 13000,13000,13000;BG;",13,0
|
|
MINITQX .string "MG ",34,"X",34,", _TSX {$2.0}",13,0
|
|
MINITQY .string "MG ",34,"Y",34,", _TSY {$2.0}",13,0
|
|
MINITQZ .string "MG ",34,"Z",34,", _TSZ {$2.0}",13,0
|
|
|
|
.text
|
|
|
|
;test limit switches if not found in 3 seconds shutdown
|
|
;motion
|
|
;
|
|
;
|
|
|
|
LDI 1,RC
|
|
TEXTITT "TESTING UPPER LIMITS",50,260
|
|
|
|
LDL MINIT10,AR2 ;send init strings first
|
|
CALL SEND_CMD
|
|
CALL WAIT_ACK
|
|
LDL MINIT11,AR2
|
|
CALL SEND_CMD
|
|
CALL WAIT_ACK
|
|
LDL MINIT12,AR2
|
|
CALL SEND_CMD
|
|
CALL WAIT_ACK
|
|
LDL MINIT13,AR2
|
|
CALL SEND_CMD
|
|
CALL WAIT_ACK
|
|
|
|
READAUD ADJ_OUTOFDIAG
|
|
CMPI 1,R0
|
|
BNE JAJA66
|
|
LDL MINIT9DIAG,AR2
|
|
BU JAJA887
|
|
JAJA66 LDL MINIT9,AR2 ;lift off the failsafes (PR 4000,4000,4000)
|
|
JAJA887 CALL SEND_CMD
|
|
CALL WAIT_ACK
|
|
|
|
|
|
|
|
LDI 100,AR3
|
|
GLLLT CALL WAIT_FOR_VBLANK
|
|
DBU AR3,GLLLT
|
|
|
|
CALL ABORT_RESET_GALIL
|
|
|
|
|
|
;
|
|
;check for safety errors
|
|
;hold for 10 seconds until all errors
|
|
;are cleared.
|
|
;
|
|
SAFETY_ERROR_CHK
|
|
|
|
LDI 57*10,AR3
|
|
MILOOP2
|
|
CLRI AR2
|
|
LDP @991030h
|
|
LDI @991030h,R0
|
|
LDI *AR2,AR2
|
|
SETDP
|
|
AND @CME_MASK,R0
|
|
BZ NO_ERRORMIL
|
|
|
|
LDI 1,RC
|
|
TEXTITT "MOTION ERROR",50,270
|
|
TEXTITT "CLEAR MATS AND BEAM TO CONTINUE",50,280
|
|
|
|
CALL WAIT_FOR_VBLANK
|
|
|
|
DBU AR3,MILOOP2
|
|
BU INIT_MOTION_ERROROUT
|
|
|
|
;
|
|
;no safety errors, continue on
|
|
;
|
|
NO_ERRORMIL
|
|
|
|
LDI 2000,R0
|
|
CALL WAITMSEC
|
|
|
|
CALL ABORT_RESET_GALIL
|
|
|
|
FILL 50,270,500,289,0
|
|
|
|
LDL MINIT1,AR2 ;send it up
|
|
CALL SEND_CMD
|
|
CALL WAIT_ACK
|
|
|
|
LDI 10,AR3
|
|
LLLT CALL WAIT_FOR_VBLANK
|
|
DBU AR3,LLLT
|
|
|
|
LDI -1,R0
|
|
STI R0,@GALIL_STATUS_X
|
|
STI R0,@GALIL_STATUS_Y
|
|
STI R0,@GALIL_STATUS_Z
|
|
|
|
LDI 57*9,AR3
|
|
MILOOP1
|
|
PUSH AR3
|
|
|
|
LDL MINITQX,AR2 ;query X
|
|
CALL SEND_CMD
|
|
CALL WAIT_ACK
|
|
|
|
LDL MINITQY,AR2 ;query Y
|
|
CALL SEND_CMD
|
|
CALL WAIT_ACK
|
|
|
|
LDL MINITQZ,AR2 ;query Z
|
|
CALL SEND_CMD
|
|
CALL WAIT_ACK
|
|
POP AR3
|
|
|
|
CALL WAIT_FOR_VBLANK
|
|
|
|
;insert checking for limit switches
|
|
;
|
|
;
|
|
|
|
LDI @GALIL_STATUS_X,R0
|
|
TSTB 08h,R0
|
|
BNZ NO_UP_LIM_YET
|
|
LDI @GALIL_STATUS_Y,R0
|
|
TSTB 08h,R0
|
|
BNZ NO_UP_LIM_YET
|
|
LDI @GALIL_STATUS_Z,R0
|
|
TSTB 08h,R0
|
|
|
|
BZ GOT_ALL_UPPERS
|
|
;if all limit switches are activated, then exit
|
|
|
|
NO_UP_LIM_YET
|
|
CLRI AR2
|
|
LDP @991030h
|
|
LDI @991030h,R0
|
|
LDI *AR2,AR2
|
|
SETDP
|
|
AND @CME_MASK,R0
|
|
BZ NO_UP_SAFETY_ERROR
|
|
BU SAFETY_ERROR_CHK
|
|
;check for mats or optos
|
|
;start over if error
|
|
|
|
NO_UP_SAFETY_ERROR
|
|
|
|
DBU AR3,MILOOP1
|
|
|
|
BU UPPER_LIMIT_ERROR
|
|
;here we would error out
|
|
|
|
GOT_ALL_UPPERS
|
|
|
|
;check failsafes
|
|
;
|
|
;
|
|
CALL CHECK_MOTION_ERROR
|
|
BC INIT_MOTION_ERROROUT
|
|
|
|
CLRI AR2
|
|
LDP @991030h
|
|
LDI @991030h,R0
|
|
LDI *AR2,AR2
|
|
SETDP
|
|
AND @CME_MASK,R0
|
|
RS 8,R0
|
|
AND 0F0h,R0
|
|
CMPI 060h,R0
|
|
BGE INIT_MOTION_ERROROUT
|
|
;
|
|
;---> BR if FAILSAFES STILL ON
|
|
;
|
|
|
|
|
|
romdata
|
|
MINIT1L .string "SH;JG -13000,-13000,-13000;BG",13,0
|
|
.text
|
|
|
|
|
|
LDI 1,RC
|
|
TEXTITT "LOWER LIMIT TEST",250,260
|
|
|
|
LDL MINIT1L,AR2 ;send it up
|
|
CALL SEND_CMD
|
|
CALL WAIT_ACK
|
|
|
|
LDI 10,AR3
|
|
LLLLT CALL WAIT_FOR_VBLANK
|
|
DBU AR3,LLLLT
|
|
|
|
;
|
|
;check lower limits
|
|
;
|
|
LDI 57*9,AR3
|
|
MILOOP1LOW
|
|
PUSH AR3
|
|
|
|
LDL MINITQX,AR2 ;query X
|
|
CALL SEND_CMD
|
|
CALL WAIT_ACK
|
|
|
|
LDL MINITQY,AR2 ;query Y
|
|
CALL SEND_CMD
|
|
CALL WAIT_ACK
|
|
|
|
LDL MINITQZ,AR2 ;query Z
|
|
CALL SEND_CMD
|
|
CALL WAIT_ACK
|
|
POP AR3
|
|
|
|
CALL WAIT_FOR_VBLANK
|
|
|
|
;insert checking for limit switches
|
|
;
|
|
;
|
|
|
|
LDI @GALIL_STATUS_X,R0
|
|
TSTB 04h,R0
|
|
BNZ NO_LO_LIM_YET
|
|
LDI @GALIL_STATUS_Y,R0
|
|
TSTB 04h,R0
|
|
BNZ NO_LO_LIM_YET
|
|
LDI @GALIL_STATUS_Z,R0
|
|
TSTB 04h,R0
|
|
BZ GOT_ALL_LOWERS
|
|
;if all limit switches are activated, then exit
|
|
|
|
NO_LO_LIM_YET
|
|
|
|
CLRI AR2
|
|
LDP @991030h
|
|
LDI @991030h,R0
|
|
LDI *AR2,AR2
|
|
SETDP
|
|
AND @CME_MASK,R0
|
|
BZ NO_LO_SAFETY_ERROR
|
|
BU SAFETY_ERROR_CHK
|
|
;check for mats or optos
|
|
;start over if error
|
|
|
|
NO_LO_SAFETY_ERROR
|
|
|
|
DBU AR3,MILOOP1LOW
|
|
|
|
BU LOWER_LIMIT_ERROR
|
|
;here we would error out
|
|
|
|
GOT_ALL_LOWERS
|
|
|
|
;
|
|
;initialize the stuff
|
|
;
|
|
|
|
LDL PP,AR2
|
|
CALL SEND_CMD
|
|
CALL WAIT_ACK
|
|
|
|
CALL CHECK_MOTION_PRESENT
|
|
BNE INIT_MOTION_ERROROUT
|
|
|
|
|
|
LDI 57*3,AR3
|
|
LLLTA CALL WAIT_FOR_VBLANK
|
|
DBU AR3,LLLTA
|
|
|
|
|
|
LDL PP1,AR2
|
|
CALL SEND_CMD
|
|
CALL WAIT_ACK
|
|
LDL PP2,AR2
|
|
CALL SEND_CMD
|
|
CALL WAIT_ACK
|
|
LDL PP3,AR2
|
|
CALL SEND_CMD
|
|
CALL WAIT_ACK
|
|
LDL PP4,AR2
|
|
CALL SEND_CMD
|
|
CALL WAIT_ACK
|
|
|
|
|
|
;hang out for a moment
|
|
CALL WAIT_FOR_VBLANK
|
|
|
|
|
|
|
|
;
|
|
;now dl the program.
|
|
;
|
|
CALL CLEAR_LATCH_ERROR
|
|
CALL ABORT_RESET_GALIL
|
|
CALL MOTION_DLPROG
|
|
|
|
CLRI AR2
|
|
LDP @991030h
|
|
LDI @991030h,R0
|
|
LDI *AR2,AR2
|
|
SETDP
|
|
AND @CME_MASK,R0
|
|
BNZ INIT_MOTION_ERROROUT
|
|
|
|
LDI @LATCHED_ERROR,R0
|
|
BNZ INIT_MOTION_ERROROUT
|
|
|
|
;
|
|
;execute the program
|
|
;we are now guarenteed to be cool
|
|
;
|
|
|
|
FILL 1,250,500,350,0
|
|
LDI 1,RC
|
|
TEXTITT "MOTION SYSTEM OK",300,240
|
|
|
|
RETS
|
|
*----------------------------------------------------------------------------
|
|
|
|
|
|
|
|
*----------------------------------------------------------------------------
|
|
*
|
|
*an intialization error has occurred:
|
|
* shutdown and dont use the galil
|
|
*
|
|
*
|
|
|
|
romdata
|
|
|
|
;MOTOROFF .string "ST;MO",13,0
|
|
;MOTOROFF .string "ST",13,0
|
|
;MOTOROFF .string "TL 0.6,0.6,1.8;JG 90000,90000,90000;BG;WT 4000;TL 0.5,0.5,1.6;WT 4000;TL 0.3,0.3,1.4;WT 4000;ST XYZ;MO",13,0
|
|
;
|
|
;MOTOROFF1 .string "TL 0.6,0.6,1.8;JG 90000,90000,90000;BG",13,0
|
|
;MOTOROFF2 .string "TL 0.5,0.5,1.6;WT 3000;TL 0.4,0.4,1.4;WT 3000;TL 0.3,0.3,1.2",13,0
|
|
;MOTOROFF3 .string "TL 0.2,0.2,1.0;WT 3000;TL 0.1,0.1,0.8;WT 3000;TL 0.0,0.0,0.6",13,0
|
|
;MOTOROFF4 .string "ST XYZ;MO",13,0
|
|
;MOTOROFF4 .string 0
|
|
;
|
|
MOTOROFF0 .string "JG 90000,90000,90000;BG;TL 0.6,0.6,1.8",13,0
|
|
MOTOROFF1 .string "TL 0.55,0.55,1.7;WT 1000",13,0
|
|
MOTOROFF2 .string "TL 0.50,0.50,1.6;WT 1000",13,0
|
|
MOTOROFF3 .string "TL 0.45,0.45,1.5;WT 1000",13,0
|
|
MOTOROFF4 .string "TL 0.40,0.40,1.4;WT 1000",13,0
|
|
MOTOROFF5 .string "TL 0.35,0.35,1.3;WT 1000",13,0
|
|
MOTOROFF6 .string "TL 0.30,0.30,1.2;WT 1000",13,0
|
|
MOTOROFF7 .string "TL 0.25,0.25,1.1;WT 1000",13,0
|
|
MOTOROFF8 .string "TL 0.20,0.20,1.0;WT 1000",13,0
|
|
MOTOROFF9 .string "TL 0.15,0.15,0.9;WT 1000",13,0
|
|
MOTOROFF10 .string "TL 0.10,0.10,0.8;WT 1000",13,0
|
|
MOTOROFF11 .string "TL 0.05,0.05,0.7;WT 1000",13,0
|
|
MOTOROFF12 .string "ST XYZ;MO",13,0
|
|
|
|
MOTOFF_PROG
|
|
.word MOTOROFF1
|
|
.word MOTOROFF2
|
|
.word MOTOROFF3
|
|
.word MOTOROFF4
|
|
.word MOTOROFF5
|
|
.word MOTOROFF6
|
|
.word MOTOROFF7
|
|
.word MOTOROFF8
|
|
.word MOTOROFF9
|
|
.word MOTOROFF10
|
|
.word MOTOROFF11
|
|
.word MOTOROFF12
|
|
.word 0
|
|
|
|
.text
|
|
|
|
.globl SEND_MOTOR_OFF
|
|
SEND_MOTOR_OFF:
|
|
CALL RESET_GALIL
|
|
CALL WAIT_ACK_REAL
|
|
|
|
;bong sound
|
|
LDI 984,AR2
|
|
CALL SENDSND
|
|
|
|
;2.5 sec delay
|
|
LDI 2500,R0
|
|
CALL WAITMSEC
|
|
|
|
LDL MOTOROFF12,AR2
|
|
CALL SEND_CMD
|
|
CALL WAIT_ACK
|
|
RETS
|
|
|
|
|
|
SEND_MOTOR_OFF_NO_RESET:
|
|
|
|
LDL MOTOROFF0,AR2
|
|
CALL SEND_CMD
|
|
CALL WAIT_ACK
|
|
|
|
FILL 1,200,500,390,0
|
|
|
|
LDI 500,R0 ;WAIT
|
|
CALL WAITMSEC
|
|
|
|
LDL MOTOFF_PROG,AR4
|
|
MOTOFF_LOOP
|
|
|
|
LDI 1,RC
|
|
TEXTITT "SLOWLY TURNING OFF MOTORS",1,200
|
|
|
|
LDI 984,AR2 ;BONG
|
|
CALL SENDSND
|
|
|
|
LDI 2000,R0 ;WAIT
|
|
CALL WAITMSEC
|
|
|
|
LDI *AR4++,AR2 ;SEND NEXT TORQUE LEVEL
|
|
CMPI 0,AR2
|
|
BEQ MOTOFF_DONE
|
|
CALL SEND_CMD
|
|
CALL WAIT_ACK
|
|
|
|
FILL 1,200,500,390,0 ;CLEAR MESSAGE
|
|
|
|
LDI 500,R0 ;WAIT
|
|
CALL WAITMSEC
|
|
|
|
LDI *AR4++,AR2 ;SEND NEXT TORQUE LEVEL
|
|
CMPI 0,AR2
|
|
BEQ MOTOFF_DONE
|
|
CALL SEND_CMD
|
|
CALL WAIT_ACK
|
|
BU MOTOFF_LOOP
|
|
|
|
MOTOFF_DONE
|
|
FILL 1,200,500,390,0
|
|
RETS
|
|
|
|
|
|
|
|
INIT_MOTION_ERROROUT:
|
|
|
|
CALL SEND_MOTOR_OFF_NO_RESET
|
|
|
|
CLRI R2
|
|
SETAUD ADJ_MOTION_PRESENT
|
|
|
|
;show message on screen
|
|
;
|
|
|
|
FILL 1,250,500,350,0
|
|
LDI 4,AR5
|
|
GDLPAA LDI 1,RC
|
|
TEXTITT "MOTION SYSTEM HAS ERRORS",100,250
|
|
TEXTITT "MOTION SYSTEM DEACTIVATED",100,260
|
|
LDI 984,AR2
|
|
CALL SENDSND
|
|
|
|
LDI 450,R0
|
|
CALL WAITMSEC
|
|
|
|
FILL 1,250,500,350,0
|
|
|
|
LDI 150,R0
|
|
CALL WAITMSEC
|
|
DBU AR5,GDLPAA
|
|
|
|
CLRI AR2
|
|
LDP @991030h
|
|
LDI @991030h,R0
|
|
LDI *AR2,AR2
|
|
SETDP
|
|
RS 12,R0 ;right justify
|
|
AND 0Fh,R0
|
|
|
|
|
|
CMPI 8,R0
|
|
BLT NNE1
|
|
LDI 1,RC
|
|
TEXTITT "BOARD NOT PLUGGED IN",100,250
|
|
BU FFFD
|
|
NNE1
|
|
|
|
LDI R0,AR2
|
|
ADDI @BABAID,AR2
|
|
LDI *AR2,AR2
|
|
LDI 1,RC
|
|
LDI 100,R2
|
|
LDI 250,R3
|
|
CALL _outtextxyc
|
|
FFFD
|
|
|
|
LDI 3000,R0
|
|
CALL WAITMSEC
|
|
FILL 1,250,500,350,0
|
|
RETS
|
|
BABAID .word JJG
|
|
romdata
|
|
JJG .word MM0,MM1,MM2,MM3,MM4,MM5,MM6,MM7
|
|
MM0 .string "UNKNOWN ERROR",0
|
|
MM1 .string "MAT NOT PLUGGED IN",0
|
|
MM2 .string "MAT STEPPED ON",0
|
|
MM3 .string "SAFETY BEAM PATH BROKEN",0
|
|
MM4 .string "SAFETY BEAM DETECTOR NOT RECEIVING",0
|
|
MM5 .string "SAFETY BEAM LIGHT NOT EMITTING",0
|
|
MM6 .string "FAIL SAFE SWITCH ENGAGED",0
|
|
MM7 .string "FAIL SAFE SWITCH NOT CONNECT PROPERLY",0
|
|
;maybe reported as 'error 48'
|
|
.text
|
|
*----------------------------------------------------------------------------
|
|
|
|
|
|
|
|
;if EVER failsafe problem MOTOR OFF
|
|
;now message on screen
|
|
;countdown 10 seconds
|
|
;if in 10 seconds error not cleared
|
|
;no motion for game
|
|
;move it up
|
|
;read status
|
|
;check for upper limit switches
|
|
;if not found in 3 seconds shut down NO MOTION
|
|
;check failsafes and all errors
|
|
;if failsafes still engaged msg "NO MOTION FOR THIS GAME"
|
|
;other safety error 10 seconds to clear if not clear NO MOTION FOR GAME
|
|
;dl the program
|
|
;has error been latched?
|
|
;F->continue
|
|
;T->dl program again if > 2x than NO MOTION
|
|
;xq the program
|
|
|
|
;if ST from galil (during gameplay) MOTION OFF until reset
|
|
; hit the ABORT LINE ???
|
|
; stop sending commands
|
|
;TS
|
|
*----------------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
bbd .string "MOTION BURNIN",0
|
|
*----------------------------------------------------------------------------
|
|
*
|
|
*WAIT 500
|
|
*
|
|
WAIT500:
|
|
; RPTS 490
|
|
RPTS 100
|
|
NOP
|
|
PUSH R0
|
|
LDI @_MODE,R0
|
|
AND MMODE,R0
|
|
CMPI MDIAG,R0
|
|
BNE WT500X
|
|
CALL FEED_WATCHDOG ;FEED THE DOG WHEN IN DIAGNOSTICS
|
|
WT500X
|
|
POP R0
|
|
RETS
|
|
*----------------------------------------------------------------------------
|
|
*
|
|
*CHECK FOR MOTION DIPSWITCH
|
|
*RET NE IF MOTION DIPSWITCH OFF
|
|
*
|
|
CHECK_MOTION_DIP:
|
|
PUSH AR2
|
|
CLRI AR2
|
|
LDP @DIPSW
|
|
LDI @DIPSW,R0 ;READ DIPSWITCH
|
|
LDI *AR2,AR2
|
|
POP AR2
|
|
RS 16,R0
|
|
SETDP
|
|
TSTB DIP_MOTION,R0 ;MOTION CABINET?
|
|
RETS
|
|
*
|
|
*CHECK IF MOTION PRESENT
|
|
*RET NE IF MOTION NOT PRESENT
|
|
*
|
|
CHECK_MOTION_PRESENT:
|
|
READAUD ADJ_MOTION_PRESENT
|
|
CMPI 1,R0
|
|
RETS
|
|
|
|
DIAG_MOTION_TESTZ:
|
|
LDI 1,IR1
|
|
BU MOTION_BURNIN_J
|
|
DIAG_MOTION_TESTX:
|
|
LDI 2,IR1
|
|
BU MOTION_BURNIN_J
|
|
DIAG_MOTION_TESTY:
|
|
LDI 4,IR1
|
|
BU MOTION_BURNIN_J
|
|
|
|
DIAG_MOTION_BURNIN:
|
|
LDI 7,IR1
|
|
|
|
MOTION_BURNIN_J
|
|
CALL CHECK_MOTION_DIP
|
|
BNZ GALIL_ERR1 ;RETURN IF NON MOVING
|
|
|
|
|
|
CALL CHECK_MOTION_PRESENT
|
|
BNE GALIL_ERROR
|
|
|
|
; CALL INITIALIZE_GALIL
|
|
CALL INITIALIZATION_MOTION_CHECK
|
|
|
|
CALL CHECK_MOTION_PRESENT
|
|
BNE GALIL_ERROR
|
|
|
|
CALL CLRSCRN
|
|
CALL SETPAGE0
|
|
|
|
LDIL SCREEN0,R0 ;set active screen to 1 (writeable)
|
|
STPI R0,@ACTIVE_SCREEN
|
|
|
|
CLRI AR4 ;page index
|
|
|
|
LDI DEFAULT_COLOR,RC
|
|
TEXTIT bbd,50,330
|
|
|
|
CLRF R5
|
|
CLRF R6
|
|
CLRF R7
|
|
MBI_LP
|
|
|
|
CLRI AR2
|
|
LDP @991030h
|
|
LDI @991030h,R0
|
|
LDI *AR2,AR2
|
|
SETDP
|
|
RS 8,R0
|
|
LS 24,R0
|
|
CMPI 0,R0
|
|
BEQ JAJA
|
|
.globl MOTION_SAFETY_SWITCHES_DIAG
|
|
CALL MOTION_SAFETY_SWITCHES_DIAG
|
|
BU ENTER_DIAG
|
|
JAJA
|
|
|
|
|
|
TSTB 1,IR1
|
|
BZ JJ5
|
|
|
|
ADDFL 0.03,R5
|
|
CMPF TWOPI,R5
|
|
BLT JJ5
|
|
SUBF TWOPI,R5
|
|
JJ5
|
|
TSTB 2,IR1
|
|
BZ JJ6
|
|
|
|
ADDFL 0.05,R6
|
|
CMPF TWOPI,R6
|
|
BLT JJ6
|
|
SUBF TWOPI,R6
|
|
JJ6
|
|
TSTB 4,IR1
|
|
BZ JJ7
|
|
|
|
ADDFL 0.04,R7
|
|
CMPF TWOPI,R7
|
|
BLT JJ7
|
|
SUBF TWOPI,R7
|
|
JJ7
|
|
LDF R7,R2
|
|
PUSHFL R5
|
|
PUSHFL R6
|
|
PUSHFL R7
|
|
CALL _HPsin
|
|
LDF R0,R4
|
|
POPFL R7
|
|
POPFL R6
|
|
POPFL R5
|
|
|
|
LDF R6,R2
|
|
PUSHFL R4
|
|
PUSHFL R5
|
|
PUSHFL R6
|
|
PUSHFL R7
|
|
CALL _HPsin
|
|
LDF R0,R3
|
|
POPFL R7
|
|
POPFL R6
|
|
POPFL R5
|
|
POPFL R4
|
|
|
|
LDF R5,R2
|
|
PUSHFL R3
|
|
PUSHFL R4
|
|
PUSHFL R5
|
|
PUSHFL R6
|
|
PUSHFL R7
|
|
CALL _HPsin
|
|
LDF R0,R2
|
|
POPFL R7
|
|
POPFL R6
|
|
POPFL R5
|
|
POPFL R4
|
|
POPFL R3
|
|
|
|
|
|
PUSHFL R5
|
|
PUSHFL R6
|
|
PUSHFL R7
|
|
;R2 front
|
|
;R3 left
|
|
;R4 right
|
|
;
|
|
|
|
;-1>=x>=1
|
|
MPYF 0.8,R2
|
|
MPYF 0.8,R3
|
|
MPYF 0.8,R4
|
|
|
|
;-.8>=x>=.8
|
|
|
|
CALL MOTION_SCALE_ENTER
|
|
CALL WAIT_FOR_VBLANK
|
|
POPFL R7
|
|
POPFL R6
|
|
POPFL R5
|
|
|
|
LDI @_newbut,R0
|
|
LDI R0,R1
|
|
TSTB SW_DIAG,R1 ;move up
|
|
BNZ MBI_LP
|
|
|
|
RETS
|
|
*----------------------------------------------------------------------------
|
|
|
|
|
|
|
|
*----------------------------------------------------------------------------
|
|
*PLAYER CABINET MOTION
|
|
*
|
|
*PARAMETERS
|
|
* AR4 PLAYER CAR OBJECT
|
|
* AR5 PLAYER CAR STRUCTURE
|
|
*
|
|
*CONTROL AXES:
|
|
* X=LFT REAR 0=GROUND, 50000=FULL HEIGHT
|
|
* Y=RT REAR 0=GROUND, 50000=FULL HEIGHT
|
|
* Z=FRONT 0=GROUND, 50000=FULL HEIGHT
|
|
*
|
|
PLMOTION:
|
|
CALL CHECK_MOTION_DIP
|
|
RETSNZ ;RETURN IF NON MOVING
|
|
|
|
|
|
LDI @MOTION_STOP_HIT,R0
|
|
RETSNZ
|
|
|
|
|
|
;
|
|
;check for an abort
|
|
;
|
|
|
|
LDI @ABORT_QUERY,R0
|
|
DEC R0
|
|
STI R0,@ABORT_QUERY
|
|
BGT NOCHECK
|
|
|
|
LDI 30,R0
|
|
STI R0,@ABORT_QUERY
|
|
LDL ABORTQ,AR2
|
|
CALL SEND_CMD
|
|
CALL WAIT_ACK
|
|
NOCHECK
|
|
|
|
.bss ABORT_QUERY,1
|
|
romdata
|
|
ABORTQ .string "#IBO;IBO=_SCX|_SCY|_SCZ;MG ",34,"V",34," IBO {$2.0}",13,0
|
|
.text
|
|
|
|
|
|
|
|
|
|
;
|
|
;MOTION SAFETY CODE
|
|
;
|
|
|
|
MOTION_ERROR_TIKS .set (57*5)
|
|
.globl WAITTIK
|
|
.bss WAITTIK,1
|
|
|
|
LDI @WAITTIK,R0 ;is counter in a previous 5 second wait?
|
|
BZ NO_PREVMOTION_ERRORS ;br -> NO, continue error checking
|
|
|
|
LDI 1,R1
|
|
STI R1,@MOTION_SAFETY_ON
|
|
|
|
CLRI AR2
|
|
LDP @991030h
|
|
LDI @991030h,R2
|
|
LDI *AR2,AR2
|
|
SETDP
|
|
LDL 0FF80h,R1
|
|
AND R1,R2
|
|
BZ NO_NEW_MOTION_ERRORS
|
|
|
|
LDI MOTION_ERROR_TIKS,R1
|
|
STI R1,@WAITTIK
|
|
RETS
|
|
|
|
|
|
NO_NEW_MOTION_ERRORS
|
|
SUBI @NFRAMES,R0
|
|
LDILT 0,R0
|
|
STI R0,@WAITTIK
|
|
|
|
CMPI 0,R0
|
|
RETSGT
|
|
|
|
;here is where we want to test to see if we are done with the error
|
|
;and how we are to recover
|
|
|
|
CALL ABORT_RESET_GALIL ;recover latch from mark
|
|
|
|
CLRI AR2
|
|
LDP @991030h ;IF we have a motion error after
|
|
LDI @991030h,R0 ;we attempted to reset, THEN
|
|
LDI *AR2,AR2
|
|
SETDP ;try again next frame
|
|
LDL 0FF80h,R1 ;
|
|
AND R1,R0 ;
|
|
RETSNZ ;
|
|
|
|
; CALL MOTION_DLPROG
|
|
|
|
RESETMOTIONANYWAY
|
|
.globl XQ,SEND_CMD,WAIT_ACK
|
|
LDL XQ,AR2 ;tell galil to continue executing program
|
|
CALL SEND_CMD
|
|
CALL WAIT_ACK
|
|
|
|
CLRI R0
|
|
STI R0,@MOTION_SAFETY_ON
|
|
|
|
; LDI 300,R0
|
|
; STI R0,@MOTION_RCV_TIKS
|
|
|
|
RETS
|
|
|
|
|
|
NO_PREVMOTION_ERRORS
|
|
|
|
|
|
; LDI @LATCHED_ERROR,R0
|
|
; BZ NONELAT
|
|
;
|
|
; CALL CLEAR_LATCH_ERROR
|
|
; CALL ABORT_RESET_GALIL ;recover latch from mark
|
|
; CALL MOTION_DLPROG
|
|
;
|
|
; BU RESETMOTIONANYWAY
|
|
;NONELAT
|
|
|
|
|
|
;IF galil is NOT responding
|
|
;attempt to reset serious
|
|
;
|
|
LDI @MOTION_RCV_TIKS,R0
|
|
BGT NOTTLRST
|
|
|
|
|
|
LDI 1,R2
|
|
SETAUD AUD_RESET_TOTALLY
|
|
|
|
LDI 0,R2
|
|
SETAUD ADJ_MOTION_PRESENT
|
|
RETS
|
|
|
|
;
|
|
; CALL RESET_GALIL
|
|
; CALL WAIT_ACK_REAL
|
|
;
|
|
;
|
|
; LDS "JG -26000,-2,AR2
|
|
; CALL SEND_CMD
|
|
; CALL WAIT_ACK
|
|
;
|
|
; CALL CHECK_MOTION_PRESENT
|
|
; BEQ KKGK
|
|
;
|
|
; LDI 1,R2
|
|
; SETAUD ADJ_MOTION_PRESENT
|
|
RETS
|
|
KKGK
|
|
LDL PP1,AR2
|
|
CALL SEND_CMD
|
|
CALL WAIT_ACK
|
|
LDL PP2,AR2
|
|
CALL SEND_CMD
|
|
CALL WAIT_ACK
|
|
LDL PP3,AR2
|
|
CALL SEND_CMD
|
|
CALL WAIT_ACK
|
|
LDL PP4,AR2
|
|
CALL SEND_CMD
|
|
CALL WAIT_ACK
|
|
|
|
;
|
|
;dl the program.
|
|
;
|
|
CALL CLEAR_LATCH_ERROR
|
|
CALL MOTION_DLPROG
|
|
|
|
LDI 300,R0
|
|
STI R0,@MOTION_RCV_TIKS
|
|
NOTTLRST
|
|
|
|
|
|
.globl MOTION_SAFETY_ON
|
|
.bss MOTION_SAFETY_ON,1
|
|
.globl MOTION_SAFETY_TYPE
|
|
.bss MOTION_SAFETY_TYPE,1
|
|
|
|
CLRI AR2
|
|
LDP @991030h
|
|
LDI @991030h,R0
|
|
LDI *AR2,AR2
|
|
SETDP
|
|
|
|
LDL 0FF80h,R1
|
|
AND R1,R0
|
|
BZ NO_MOTION_ERRORS
|
|
|
|
|
|
;we do have an error
|
|
;
|
|
LDI MOTION_ERROR_TIKS,R1
|
|
STI R1,@WAITTIK
|
|
LDI 1,R1
|
|
STI R1,@MOTION_SAFETY_ON
|
|
|
|
LDI R0,R2
|
|
RS 12,R2
|
|
AND 0Fh,R2
|
|
LDI 0,R3 ;assume its a mat
|
|
|
|
CMPI 3,R2
|
|
LDIEQ 1,R3
|
|
CMPI 4,R2
|
|
LDIEQ 1,R3
|
|
CMPI 5,R2
|
|
LDIEQ 1,R3
|
|
|
|
CMPI 6,R2
|
|
LDIEQ 2,R3
|
|
CMPI 7,R2
|
|
LDIEQ 2,R3
|
|
STI R3,@MOTION_SAFETY_TYPE
|
|
|
|
|
|
LDI R0,R1
|
|
RS 16,R1
|
|
RETSC ;BOARD NOT PLUGGED IN OR PAL NOT INSTALLED -> DONT DO ANYTHING
|
|
|
|
TSTB 080h,R0 ;MOTION STOP IF HELD DOWN -> DONT DO ANYTHING
|
|
BZ NOTTHIS
|
|
|
|
LDI 3,R0
|
|
STI R0,@MOTION_SAFETY_TYPE
|
|
|
|
LDI 1,R0
|
|
STI R0,@MOTION_STOP_HIT
|
|
|
|
romdata
|
|
MSSM .string "MOTION STOP BUTTON HIT",0
|
|
.text
|
|
LDL MSSM,AR2
|
|
FLOAT 256,R2
|
|
FLOAT 310,R3
|
|
LDI 57*3,RC
|
|
CALL TEXT_ADDDS
|
|
ORM TXT_CENTER,*+AR0(TEXT_COLOR)
|
|
ORM TXT_CENTER,*+AR1(TEXT_COLOR)
|
|
|
|
RETS
|
|
|
|
NOTTHIS
|
|
KDS
|
|
|
|
NO_MOTION_ERRORS
|
|
|
|
|
|
|
|
|
|
LDI @MOTION_NOT_ON,R0
|
|
RETSNZ
|
|
|
|
CALL CHECK_MOTION_PRESENT
|
|
RETSNE
|
|
|
|
LDF *+AR5(RF_PY),R5
|
|
ADDF *+AR5(LF_PY),R5
|
|
|
|
ADDF *+AR5(LR_PY),R5
|
|
ADDF *+AR5(RR_PY),R5
|
|
MPYF 0.25,R5
|
|
|
|
|
|
*FIND AVERAGE Y POSITION = R5
|
|
|
|
LDF *+AR5(RF_PY),R2
|
|
ADDF *+AR5(LF_PY),R2
|
|
MPYF 0.5,R2
|
|
|
|
LDF *+AR5(LR_PY),R3
|
|
LDF *+AR5(RR_PY),R4
|
|
|
|
|
|
*GET Y HEIGHT DELTA TO CENTER
|
|
|
|
|
|
SUBRF R5,R2 ;Z (FRONT) AXIS DELTA
|
|
SUBRF R5,R3 ;X (LREAR) AXIS DELTA
|
|
SUBRF R5,R4 ;Y (RREAR) AXIS DELTA
|
|
|
|
FLOAT 150,R0 ;DIVIDE BY RADIUS FOR PROPORTIONALITY
|
|
CALL INV_F30
|
|
|
|
|
|
*COMPUTE EQUATION M=2X-X*X/150
|
|
LDF 2,R1
|
|
MPYF R1,R2,R5 ;2*Z
|
|
MPYF R2,R2
|
|
MPYF R0,R2
|
|
SUBF R2,R5,R2
|
|
MPYF R0,R2
|
|
|
|
MPYF R1,R3,R5 ;2*X
|
|
MPYF R3,R3
|
|
MPYF R0,R3
|
|
SUBF R3,R5,R3
|
|
MPYF R0,R3
|
|
|
|
MPYF R1,R4,R5 ;2*Y
|
|
MPYF R4,R4
|
|
MPYF R0,R4
|
|
SUBF R4,R5,R4
|
|
MPYF R0,R4
|
|
|
|
|
|
|
|
|
|
; MPYF R0,R2
|
|
; MPYF R0,R3
|
|
; MPYF R0,R4
|
|
;
|
|
CMPF 0.9,R2 ;RESTRICT RANGE TO -0.9->0.9
|
|
LDFGT 0.9,R2
|
|
CMPF -0.9,R2
|
|
LDFLT -0.9,R2
|
|
|
|
CMPF 0.9,R3 ;RESTRICT RANGE TO -0.9->0.9
|
|
LDFGT 0.9,R3
|
|
CMPF -0.9,R3
|
|
LDFLT -0.9,R3
|
|
|
|
CMPF 0.9,R4 ;RESTRICT RANGE TO -0.9->0.9
|
|
LDFGT 0.9,R4
|
|
CMPF -0.9,R4
|
|
LDFLT -0.9,R4
|
|
|
|
*GET LEAN ANGLES 20% OF MOTION (10% OF MOTION RESERVED)
|
|
|
|
*FRONT-BACK (XLEAN)
|
|
|
|
LDF *+AR5(CARXLEAN),R1 ;RADIAN LEAN -0.1->0.1
|
|
|
|
MPYF 6,R1
|
|
|
|
ADDF R1,R3
|
|
ADDF R1,R4
|
|
SUBF R1,R2
|
|
|
|
*LEFT-RIGHT (ZLEAN)
|
|
|
|
LDF *+AR5(CARZLEAN),R1 ;RADIAN LEAN -0.1->0.1
|
|
|
|
MPYF 6,R1
|
|
|
|
ADDF R1,R4
|
|
SUBF R1,R3
|
|
|
|
*LIMIT MOTION +-1.0
|
|
|
|
CMPF 1.0,R2
|
|
LDFGT 1.0,R2
|
|
CMPF 1.0,R3
|
|
LDFGT 1.0,R3
|
|
CMPF 1.0,R4
|
|
LDFGT 1.0,R4
|
|
|
|
CMPF -1.0,R2
|
|
LDFLT -1.0,R2
|
|
CMPF -1.0,R3
|
|
LDFLT -1.0,R3
|
|
CMPF -1.0,R4
|
|
LDFLT -1.0,R4
|
|
|
|
*SEND STUFF TO MOTION PLATFORM
|
|
|
|
*R2=Z FRONT -1.0->1.0
|
|
*R3=X LFT REAR -1.0->1.0
|
|
*R4=Y RT REAR -1.0->1.0
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
MOTION_SCALE_ENTER:
|
|
|
|
|
|
|
|
;NOW SCALE INTO THE RANGE USEABLE
|
|
;BY OR MOTION SYSTEM
|
|
;
|
|
FLOAT 17000,R1
|
|
MPYF R1,R2
|
|
MPYF R1,R3
|
|
MPYF R1,R4
|
|
FLOAT 26000,R1
|
|
ADDF R1,R2
|
|
ADDF R1,R3
|
|
ADDF R1,R4
|
|
|
|
FIX R2
|
|
FIX R3
|
|
FIX R4
|
|
JAJA555
|
|
|
|
|
|
.bss sPOTVALUE,15
|
|
.bss MOTION_CMDSTR,80
|
|
|
|
.bss LAST_ZF,1
|
|
.bss LAST_XL,1
|
|
.bss LAST_YR,1
|
|
|
|
|
|
PUSH R3
|
|
PUSH R4
|
|
|
|
; PUSHFL R3
|
|
; PUSHFL R4
|
|
|
|
LDI @LAST_ZF,R1
|
|
SUBI R2,R1
|
|
ABSI R1
|
|
CMPI MIN_MOVE_DIST,R1
|
|
BLT N76
|
|
|
|
STI R2,@LAST_ZF
|
|
LDL sPOTVALUE,AR2
|
|
CALL _itoa
|
|
|
|
LDL PZC1,AR0
|
|
LDL MOTION_CMDSTR,AR1
|
|
CALL STRCPY
|
|
|
|
LDL MOTION_CMDSTR,AR0
|
|
LDL sPOTVALUE,AR1
|
|
CALL STRCAT
|
|
|
|
LDL MOTION_CMDSTR,AR0
|
|
LDL PZC2,AR1
|
|
CALL STRCAT
|
|
|
|
LDI AR0,AR2
|
|
CALL SEND_CMD
|
|
CALL WAIT_ACK
|
|
|
|
N76
|
|
POP R2 ;RT REAR (Y)
|
|
LDI @LAST_YR,R1
|
|
SUBI R2,R1
|
|
ABSI R1
|
|
CMPI MIN_MOVE_DIST,R1
|
|
BLT N77
|
|
|
|
STI R0,@LAST_YR
|
|
|
|
LDL sPOTVALUE,AR2
|
|
CALL _itoa
|
|
|
|
LDL PYC1,AR0
|
|
LDL MOTION_CMDSTR,AR1
|
|
CALL STRCPY
|
|
|
|
LDL MOTION_CMDSTR,AR0
|
|
LDL sPOTVALUE,AR1
|
|
CALL STRCAT
|
|
|
|
LDL MOTION_CMDSTR,AR0
|
|
LDL PYC2,AR1
|
|
CALL STRCAT
|
|
LDI AR0,AR2
|
|
CALL SEND_CMD
|
|
CALL WAIT_ACK
|
|
|
|
N77
|
|
POP R2 ;LT REAR (X)
|
|
|
|
LDI @LAST_XL,R1
|
|
SUBI R2,R1
|
|
ABSI R1
|
|
CMPI MIN_MOVE_DIST,R1
|
|
BLT N78
|
|
|
|
STI R0,@LAST_XL
|
|
|
|
LDL sPOTVALUE,AR2
|
|
CALL _itoa
|
|
|
|
LDL PXC1,AR0
|
|
LDL MOTION_CMDSTR,AR1
|
|
CALL STRCPY
|
|
|
|
LDL MOTION_CMDSTR,AR0
|
|
LDL sPOTVALUE,AR1
|
|
CALL STRCAT
|
|
|
|
LDL MOTION_CMDSTR,AR0
|
|
LDL PXC2,AR1
|
|
CALL STRCAT
|
|
LDI AR0,AR2
|
|
CALL SEND_CMD
|
|
CALL WAIT_ACK
|
|
N78
|
|
RETS
|
|
*----------------------------------------------------------------------------
|
|
|
|
|
|
|
|
*----------------------------------------------------------------------------
|
|
LEVEL_THE_MOTION:
|
|
CALL CHECK_MOTION_DIP
|
|
RETSNZ ;RETURN IF NON MOVING
|
|
|
|
CALL CHECK_MOTION_PRESENT
|
|
RETSNE
|
|
|
|
; LDF -1.26,R2
|
|
; LDF -1.26,R3
|
|
; LDF -1.26,R4
|
|
; BU MOTION_SCALE_ENTER
|
|
|
|
LDI 0,R2
|
|
STI R2,@LAST_ZF
|
|
LDL sPOTVALUE,AR2
|
|
CALL _itoa
|
|
|
|
LDL PZC1,AR0
|
|
LDL MOTION_CMDSTR,AR1
|
|
CALL STRCPY
|
|
|
|
LDL MOTION_CMDSTR,AR0
|
|
LDL sPOTVALUE,AR1
|
|
CALL STRCAT
|
|
|
|
LDL MOTION_CMDSTR,AR0
|
|
LDL PZC2,AR1
|
|
CALL STRCAT
|
|
|
|
LDI AR0,AR2
|
|
CALL SEND_CMD
|
|
CALL WAIT_ACK
|
|
|
|
|
|
LDI 0,R2 ;RT REAR (Y)
|
|
LDL sPOTVALUE,AR2
|
|
CALL _itoa
|
|
|
|
LDL PYC1,AR0
|
|
LDL MOTION_CMDSTR,AR1
|
|
CALL STRCPY
|
|
|
|
LDL MOTION_CMDSTR,AR0
|
|
LDL sPOTVALUE,AR1
|
|
CALL STRCAT
|
|
|
|
LDL MOTION_CMDSTR,AR0
|
|
LDL PYC2,AR1
|
|
CALL STRCAT
|
|
LDI AR0,AR2
|
|
CALL SEND_CMD
|
|
CALL WAIT_ACK
|
|
|
|
CLRI R2 ;LT REAR (X)
|
|
LDL sPOTVALUE,AR2
|
|
CALL _itoa
|
|
|
|
LDL PXC1,AR0
|
|
LDL MOTION_CMDSTR,AR1
|
|
CALL STRCPY
|
|
|
|
LDL MOTION_CMDSTR,AR0
|
|
LDL sPOTVALUE,AR1
|
|
CALL STRCAT
|
|
|
|
LDL MOTION_CMDSTR,AR0
|
|
LDL PXC2,AR1
|
|
CALL STRCAT
|
|
LDI AR0,AR2
|
|
CALL SEND_CMD
|
|
CALL WAIT_ACK
|
|
|
|
RETS
|
|
*----------------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
|
|
*----------------------------------------------------------------------------
|
|
|
|
SH .string "SH;JG 10000,10000,10000;BG",13,0
|
|
|
|
|
|
THEPROGL
|
|
.word EDIT,T5,T6,T7,T8,T9
|
|
.word T10,T11,T12,T13,T14,T15,T16,T17,T18,T19
|
|
.word T20,T21,T22,T23,T24,T25,T26,T27,T28,T29
|
|
.word T30,T31,T32,T33,T34,T35,T36,T37,T38,T39
|
|
.word T40,T41,T42,T43,T44,T45,T46,T47,T48,T49
|
|
.word T50,T51,T52,T53,T54,T55,T56,T57,T58,T59
|
|
.word T60
|
|
|
|
; .word T60,T1,T2,T3,T4,T61,T63,T64,T65,0
|
|
; .word T60,T1,T2,T3,T4,T61,T62,T63,T64,T65,0
|
|
|
|
.word T1,T2,T3
|
|
.word T66X,T67X,T68X
|
|
.word T66Y,T67Y,T68Y
|
|
.word T66Z,T67Z,T68Z
|
|
.word T69
|
|
.word T70,T71,T72,T73,T74,T75,T76,T77,T78,T79
|
|
.word T80,T81,T82,T83,T84
|
|
.word 0
|
|
|
|
;INITPROGL
|
|
; .word EDIT,T5,T6,T7,T8,T9
|
|
; .word T10,T11,T13,T14,T15,T16,T17,T18,T19
|
|
; .word T20,T21,T22,T23,T25,T26,T27,T28,T29
|
|
; .word T30,T31,T32,T33,T34,T35,T36,T37,T38,T39
|
|
; .word T40,T41,T42,T43,T44,T45,T46,T47,T48,T49
|
|
; .word T50,T51,T52,T53,T54,T55,T56,T57,T58,T59
|
|
; .word T60
|
|
;
|
|
; .word T1,T2,T3
|
|
; .word T66,T67,T68,T69
|
|
; .word T70,T71,T72,T73,T74,T75,T76,T77,T78,T79
|
|
; .word T80,T81,T82,T83,T84
|
|
; .word 0
|
|
;
|
|
|
|
*----------------------------------------------------------------------------
|
|
DOWNLOAD_PROGRAM:
|
|
|
|
IBO654
|
|
LDI *AR4++,AR2
|
|
CMPI 0,AR2
|
|
BEQ DNF
|
|
CALL SEND_CMD
|
|
CALL WAIT_ACK ;#
|
|
|
|
CALL WAIT_FOR_VBLANK
|
|
|
|
BU IBO654
|
|
DNF
|
|
LDL ENDED,AR2
|
|
CALL SEND_CMD
|
|
CALL WAIT_ACK ;:
|
|
|
|
LDL XQ,AR2
|
|
CALL SEND_CMD
|
|
CALL WAIT_ACK
|
|
;
|
|
;eric, is this correct? - ml
|
|
;
|
|
; LDL T10,AR2 ;;set actuators
|
|
; CALL SEND_CMD
|
|
; CALL WAIT_ACK
|
|
;
|
|
; LDL T11,AR2
|
|
; CALL SEND_CMD
|
|
; CALL WAIT_ACK
|
|
;
|
|
; LDL T12,AR2
|
|
; CALL SEND_CMD
|
|
; CALL WAIT_ACK
|
|
|
|
RETS
|
|
*----------------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
*----------------------------------------------------------------------------
|
|
*SEND COMMAND TO GALIL MOTION CONTROL BOARD
|
|
*
|
|
*
|
|
*FF09
|
|
*F709
|
|
*FF09
|
|
*
|
|
*FF00
|
|
*FB00
|
|
*FF00
|
|
*
|
|
*
|
|
*PARAMETERS
|
|
* AR2 PTR TO STR
|
|
*
|
|
*
|
|
SEND_CMD:
|
|
PUSH R0
|
|
PUSH R1
|
|
PUSH R2
|
|
PUSH R3
|
|
PUSH R4
|
|
PUSH R5
|
|
PUSH R6
|
|
PUSH R7
|
|
DINT
|
|
|
|
LDIL SOUND,AR3
|
|
LDI 0FF09h,R0
|
|
LDI 0F709h,R1
|
|
STI R0,*AR3
|
|
CALL WAIT500
|
|
STI R1,*AR3
|
|
CALL WAIT500
|
|
STI R0,*AR3
|
|
CALL WAIT500
|
|
|
|
|
|
LDI 0FF00h,R2
|
|
LDI 0FB00h,R3
|
|
|
|
|
|
|
|
CLRI R5 ;SHIFT COUNT
|
|
LLKK CMPI -32,R5
|
|
BNE REGLP
|
|
CLRI R5
|
|
NOP *AR2++
|
|
REGLP
|
|
LDI *AR2,R4
|
|
LSH R5,R4
|
|
SUBI 8,R5
|
|
AND 0FFh,R4
|
|
CMPI 0,R4
|
|
BZ KKKII
|
|
|
|
|
|
OR R4,R2,R6
|
|
OR R4,R3,R7
|
|
STI R6,*AR3
|
|
CALL WAIT500
|
|
STI R7,*AR3
|
|
CALL WAIT500
|
|
STI R6,*AR3
|
|
CALL WAIT500
|
|
BU LLKK
|
|
KKKII
|
|
|
|
EINT
|
|
POP R7
|
|
POP R6
|
|
POP R5
|
|
POP R4
|
|
POP R3
|
|
POP R2
|
|
POP R1
|
|
POP R0
|
|
RETS
|
|
*----------------------------------------------------------------------------
|
|
|
|
|
|
|
|
*----------------------------------------------------------------------------
|
|
RESET_GALIL:
|
|
DINT
|
|
LDIL SOUND,AR3
|
|
LDI 0FF0Ch,R0
|
|
LDI 0F70Ch,R1
|
|
|
|
STI R0,*AR3
|
|
CALL WAIT500
|
|
STI R1,*AR3
|
|
CALL WAIT500
|
|
STI R0,*AR3
|
|
CALL WAIT500
|
|
|
|
|
|
LDI 0FF00h,R0
|
|
LDI 0FB00h,R1
|
|
STI R0,*AR3
|
|
CALL WAIT500
|
|
STI R1,*AR3
|
|
CALL WAIT500
|
|
STI R0,*AR3
|
|
CALL WAIT500
|
|
|
|
|
|
LDI 0FF0bh,R0
|
|
LDI 0F70bh,R1
|
|
STI R0,*AR3
|
|
CALL WAIT500
|
|
STI R1,*AR3
|
|
CALL WAIT500
|
|
STI R0,*AR3
|
|
CALL WAIT500
|
|
|
|
|
|
LDI 0FF00h,R0
|
|
LDI 0FB00h,R1
|
|
STI R0,*AR3
|
|
CALL WAIT500
|
|
STI R1,*AR3
|
|
CALL WAIT500
|
|
STI R0,*AR3
|
|
CALL WAIT500
|
|
EINT
|
|
|
|
RETS
|
|
*----------------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
*----------------------------------------------------------------------------
|
|
*
|
|
*clear the abort (restore communication to galil)
|
|
*
|
|
*
|
|
.globl ABORT_RESET_GALIL
|
|
ABORT_RESET_GALIL:
|
|
DINT
|
|
LDIL SOUND,AR3
|
|
|
|
;
|
|
;in essence we are clearing the abort, but NOT reseting galil
|
|
;
|
|
|
|
LDI 0FF0eh,R0 ; 0Ch = reset bit addr
|
|
LDI 0F70eh,R1 ; 0Eh = abort/reset bit addr
|
|
STI R0,*AR3
|
|
CALL WAIT500
|
|
STI R1,*AR3
|
|
CALL WAIT500
|
|
STI R0,*AR3
|
|
CALL WAIT500
|
|
|
|
|
|
LDI 0FF00h,R0
|
|
LDI 0FB00h,R1
|
|
STI R0,*AR3
|
|
CALL WAIT500
|
|
STI R1,*AR3
|
|
CALL WAIT500
|
|
STI R0,*AR3
|
|
CALL WAIT500
|
|
EINT
|
|
|
|
|
|
LDL XQ,AR2 ;tell galil to continue executing program
|
|
CALL SEND_CMD
|
|
CALL WAIT_ACK
|
|
|
|
|
|
RETS
|
|
*----------------------------------------------------------------------------
|
|
|
|
|
|
|
|
.globl DIAG_MOTION_TESTX,DIAG_MOTION_TESTY,DIAG_MOTION_TESTZ
|
|
.globl DIAG_MOTION_BURNIN
|
|
|
|
|
|
*----------------------------------------------------------------------------
|
|
MOTION_DLPROG:
|
|
CALL CHECK_MOTION_DIP
|
|
RETSNZ ;RETURN IF NON MOVING
|
|
|
|
CALL CHECK_MOTION_PRESENT
|
|
RETSNE
|
|
|
|
LDL THEPROGL,AR4
|
|
CALL DOWNLOAD_PROGRAM
|
|
|
|
CLRI R0
|
|
STI R0,@LAST_ZF
|
|
STI R0,@LAST_XL
|
|
STI R0,@LAST_YR
|
|
|
|
CLRI R0
|
|
STI R0,@MOTION_NOT_ON
|
|
RETS
|
|
*----------------------------------------------------------------------------
|
|
|
|
|
|
|
|
*----------------------------------------------------------------------------
|
|
*MOTION DIPSWITCH OFF
|
|
GALIL_ERR1
|
|
CALL SETPAGE0
|
|
LDIL SCREEN0,R0
|
|
STI R0,@ACTIVE_SCREEN
|
|
|
|
LDI 2,AR5
|
|
GDLP
|
|
LDI 0,RC
|
|
TEXTITT "WARNING MOTION DIP SWITCH OFF",150,130
|
|
|
|
LDI 250,R0
|
|
CALL WAITMSEC
|
|
|
|
LDI COL_WHITE,RC
|
|
TEXTITT "WARNING MOTION DIP SWITCH OFF",150,130
|
|
|
|
LDI 984,AR2
|
|
CALL SENDSND
|
|
|
|
LDI 250,R0
|
|
CALL WAITMSEC
|
|
DBU AR5,GDLP
|
|
|
|
RETS
|
|
|
|
*MOTION NO DETECTED
|
|
GALIL_ERROR:
|
|
|
|
; .globl MOTION_SAFETY_SWITCHES_DIAG
|
|
; CALL MOTION_SAFETY_SWITCHES_DIAG
|
|
; BU ENTER_DIAG
|
|
|
|
|
|
; CALL CLRSCRN
|
|
CALL SETPAGE0
|
|
LDIL SCREEN0,R0
|
|
STI R0,@ACTIVE_SCREEN
|
|
|
|
LDI 2,AR5
|
|
GLP
|
|
LDI 0,RC
|
|
TEXTITT "WARNING MOTION NOT DETECTED",150,130
|
|
|
|
LDI 250,R0
|
|
CALL WAITMSEC
|
|
|
|
LDI COL_WHITE,RC
|
|
TEXTITT "WARNING MOTION NOT DETECTED",150,130
|
|
|
|
LDI 984,AR2
|
|
CALL SENDSND
|
|
|
|
LDI 250,R0
|
|
CALL WAITMSEC
|
|
DBU AR5,GLP
|
|
|
|
RETS
|
|
*
|
|
*WAIT R0 X MSEC
|
|
*
|
|
WAITMSEC
|
|
MPYI 5000,R0
|
|
WTMLP
|
|
SUBI 1,R0
|
|
BGE WTMLP
|
|
RETS
|
|
|
|
*----------------------------------------------------------------------------
|
|
|
|
|
|
*----------------------------------------------------------------------------
|
|
*
|
|
*
|
|
*RETURNS
|
|
* C IF ERROR
|
|
* NC IF NOT ERROR
|
|
*
|
|
*
|
|
CME_MASK .word 0FF80h
|
|
CHECK_MOTION_ERROR:
|
|
PUSH R0
|
|
PUSH AR0
|
|
CLRI AR0
|
|
LDP @991030h
|
|
LDI @991030h,R0
|
|
LDI *AR0,AR0
|
|
SETDP
|
|
|
|
AND @CME_MASK,R0
|
|
BZ CME_NO_MOTION_ERRORS
|
|
|
|
SETC
|
|
POP AR0
|
|
POP R0
|
|
RETS
|
|
|
|
CME_NO_MOTION_ERRORS
|
|
CLRC
|
|
POP AR0
|
|
POP R0
|
|
RETS
|
|
*----------------------------------------------------------------------------
|
|
|
|
|
|
*----------------------------------------------------------------------------
|
|
.globl CLEAR_LATCH_ERROR
|
|
CLEAR_LATCH_ERROR:
|
|
DINT
|
|
CLRI R0
|
|
STI R0,@LATCHED_ERROR
|
|
EINT
|
|
RETS
|
|
.bss LATCHED_ERROR,1
|
|
LATCH_ERROR:
|
|
CALL CHECK_MOTION_DIP
|
|
RETSNZ ;RETURN IF NON MOVING
|
|
CALL CHECK_MOTION_ERROR
|
|
RETSNC
|
|
LDI 1,R0
|
|
STI R0,@LATCHED_ERROR
|
|
RETS
|
|
*----------------------------------------------------------------------------
|
|
|
|
|
|
*
|
|
*CHECK GALIL READY
|
|
*RET CS IF GALIL READY W/ CHAR
|
|
*
|
|
G_READY:
|
|
LDIL SOUND,AR3
|
|
LDI 0FF0Ah,R0
|
|
LDI 0F70ah,R1
|
|
STI R0,*AR3
|
|
CALL WAIT500
|
|
STI R1,*AR3
|
|
CALL WAIT500
|
|
STI R0,*AR3
|
|
CALL WAIT500
|
|
|
|
LDI 0FF00h,R0
|
|
LDI 0Fb00h,R1
|
|
STI R0,*AR3
|
|
CALL WAIT500
|
|
STI R1,*AR3
|
|
CALL WAIT500
|
|
|
|
LDI *AR3,R1 ;read status
|
|
STI R0,*AR3
|
|
CALL WAIT500
|
|
LSH 17,R1 ;PUT INTO CARRY
|
|
RETS
|
|
|
|
*
|
|
*GET GALIL CHARACTER
|
|
*RET R1= 8 BIT ASCII CODE B0-B7
|
|
*RET CS IF CHAR PRESENT
|
|
*RET CC IF NO CHAR PRESENT
|
|
*
|
|
G_CHAR:
|
|
CALL G_READY
|
|
RETSNC ;RETURN IF NOTHING
|
|
|
|
CALL G_READY
|
|
RETSNC ;RETURN IF NOTHING
|
|
|
|
LDIL SOUND,AR3
|
|
LDI 0FF08h,R0
|
|
LDI 0F708h,R1
|
|
STI R0,*AR3
|
|
CALL WAIT500
|
|
STI R1,*AR3
|
|
CALL WAIT500
|
|
STI R0,*AR3
|
|
CALL WAIT500
|
|
|
|
LDI 0FF00h,R0
|
|
LDI 0Fb00h,R1
|
|
STI R0,*AR3
|
|
CALL WAIT500
|
|
STI R1,*AR3
|
|
CALL WAIT500
|
|
|
|
LDI *AR3,R1
|
|
RS 8,R1
|
|
AND 0FFh,R1
|
|
|
|
STI R0,*AR3
|
|
CALL WAIT500
|
|
SETC
|
|
RETS
|
|
|
|
*
|
|
*GET GALIL STRING
|
|
*
|
|
G_STRING:
|
|
|
|
GS0
|
|
CALL G_CHAR ;CHARACTER READY?
|
|
BNC GSX ;NO...
|
|
|
|
|
|
CMPI 'G',R1 ;position error
|
|
BNE NOTPERR ;attempt motion recalibration
|
|
|
|
LDI 1,R2
|
|
SETAUD AUD_RESET_TOTALLY
|
|
|
|
LDI 0,R2
|
|
SETAUD ADJ_MOTION_PRESENT
|
|
BU GS0
|
|
|
|
NOTPERR
|
|
CMPI 'V',R1 ;STATUS ANYONE?
|
|
BNE NOTQSTATUS
|
|
CALL G_HEX
|
|
AND 6h,R1
|
|
CMPI 6h,R1
|
|
BZ GS0
|
|
|
|
LDI @WAITTIK,R1
|
|
CMPI 2,R1
|
|
LDILT 2,R1
|
|
STI R1,@WAITTIK
|
|
BU GS0
|
|
|
|
NOTQSTATUS
|
|
|
|
|
|
CMPI 'W',R1 ;IS IT AN ERROR??
|
|
BNE NOTQQERRORX ;
|
|
LDI @LLG6X,AR2
|
|
BU SHOWENCODER
|
|
|
|
NOTQQERRORX
|
|
CMPI 'S',R1 ;IS IT AN ERROR??
|
|
BNE NOTQQERRORY ;
|
|
|
|
LDI @LLG6Y,AR2
|
|
BU SHOWENCODER
|
|
NOTQQERRORY
|
|
|
|
CMPI 'Q',R1 ;IS IT AN ERROR??
|
|
BNE NOTQQERRORZ ;
|
|
|
|
LDI @LLG6Z,AR2
|
|
BU SHOWENCODER
|
|
.data
|
|
LLG6X .word L4ABX
|
|
LLG6Y .word L4ABY
|
|
LLG6Z .word L4ABZ
|
|
romdata
|
|
L4ABX .string "X ENCODER FAILURE",0
|
|
L4ABY .string "Y ENCODER FAILURE",0
|
|
L4ABZ .string "Z ENCODER FAILURE",0
|
|
.text
|
|
|
|
SHOWENCODER
|
|
FLOAT 256,R2
|
|
FLOAT 110,R3
|
|
LDI 60,RC
|
|
CALL TEXT_ADDDS
|
|
ORM TXT_CENTER,*+AR0(TEXT_COLOR)
|
|
ORM TXT_CENTER,*+AR1(TEXT_COLOR)
|
|
CALL SET40FONTDS
|
|
|
|
CLRI R2
|
|
SETAUD ADJ_MOTION_PRESENT
|
|
|
|
;
|
|
; galil program will take care of this - ml
|
|
;
|
|
; ;send shutdown commands
|
|
; LDL MOTOROFF,AR2
|
|
; CALL SEND_CMD
|
|
; RETS
|
|
|
|
RETS
|
|
|
|
NOTQQERRORZ
|
|
NOTQQERROR
|
|
CMPI 'X',R1
|
|
BNE GS1
|
|
CALL G_HEX
|
|
BNC GSX
|
|
STI R1,@GALIL_STATUS_X
|
|
B GS0
|
|
GS1
|
|
CMPI 'Y',R1
|
|
BNE GS2
|
|
CALL G_HEX
|
|
BNC GSX
|
|
STI R1,@GALIL_STATUS_Y
|
|
B GS0
|
|
GS2
|
|
CMPI 'Z',R1
|
|
BNE GS0
|
|
CALL G_HEX
|
|
BNC GSX
|
|
STI R1,@GALIL_STATUS_Z
|
|
B GS0
|
|
GSX
|
|
RETS
|
|
*----------------------------------------------------------------------------
|
|
|
|
|
|
.bss GALIL_STATUS_X,1
|
|
.bss GALIL_STATUS_Y,1
|
|
.bss GALIL_STATUS_Z,1
|
|
*----------------------------------------------------------------------------
|
|
*
|
|
*GET HEX STRING
|
|
*
|
|
G_HEX
|
|
CALL G_CHAR
|
|
BNC GHX ;NO...
|
|
|
|
CMPI '$',R1
|
|
BNZ GHX
|
|
|
|
CALL G_CHAR
|
|
BNC GHX ;NO...
|
|
CALL ASCIIHEX
|
|
BNC GHX
|
|
LDI R1,R2
|
|
LSH 4,R2
|
|
|
|
CALL G_CHAR
|
|
BNC GHX ;NO...
|
|
|
|
CALL ASCIIHEX
|
|
BNC GHX
|
|
ADDI R2,R1
|
|
SETC
|
|
RETS
|
|
GHX
|
|
CLRC
|
|
RETS
|
|
|
|
*
|
|
*CHANGE ASCIIHEX TO HEX 4 BITS
|
|
*R1=ASCII
|
|
*RET R1 =HEX
|
|
*CC IF INVALID
|
|
*CS IF VALID
|
|
*
|
|
ASCIIHEX:
|
|
CMPI 47H,R1
|
|
BGE ASCERR
|
|
|
|
SUBI 30H,R1
|
|
BN ASCERR
|
|
|
|
CMPI 9,R1
|
|
BLE AH1
|
|
CMPI 11H,R1
|
|
BLT ASCERR
|
|
|
|
SUBI 7,R1
|
|
AH1
|
|
SETC
|
|
RETS
|
|
ASCERR
|
|
CLRC
|
|
RETS
|
|
*----------------------------------------------------------------------------
|
|
|
|
|
|
|
|
*----------------------------------------------------------------------------
|
|
WAIT_ACK:
|
|
|
|
DINT
|
|
LDI 1000,R6 ;EXCESS CHARACTER TIMEOUT
|
|
|
|
WAIT_ACK_LOOP
|
|
CALL G_READY
|
|
BNC EXITL2 ;NOTHING THERE DUDES...
|
|
|
|
LDI 300,R0
|
|
STI R0,@MOTION_RCV_TIKS
|
|
|
|
CALL G_STRING
|
|
BNC EXITL2 ;NOTHING THERE DUDES...
|
|
DEC R6
|
|
BZ NO_RESPONSE ;TOO MANY CHARACTERS
|
|
|
|
BU WAIT_ACK_LOOP
|
|
EXITL2
|
|
EINT
|
|
RETS
|
|
*----------------------------------------------------------------------------
|
|
|
|
|
|
*----------------------------------------------------------------------------
|
|
NO_RESPONSE:
|
|
EINT
|
|
LDI 0,R2
|
|
SETAUD ADJ_MOTION_PRESENT
|
|
RETS
|
|
*----------------------------------------------------------------------------
|
|
|
|
|
|
*----------------------------------------------------------------------------
|
|
WAIT_ACK_REAL:
|
|
|
|
LDI 10000,R6 ;NO RESPONSE TIMEOUT
|
|
WAR0
|
|
CALL G_READY
|
|
BC WAR1
|
|
DEC R6
|
|
BZ NO_RESPONSE
|
|
B WAR0
|
|
WAR1
|
|
LDI 1000,R6 ;EXCESS CHARACTER TIMEOUT
|
|
WAR1L
|
|
CALL G_CHAR
|
|
BNC EXITL2A ;NO MORE CHARACTERS
|
|
|
|
DEC R6
|
|
BZ NO_RESPONSE ;TOO MANY CHARACTERS
|
|
BU WAR1L
|
|
|
|
EXITL2A
|
|
RETS
|
|
*----------------------------------------------------------------------------
|
|
|
|
|
|
|
|
*----------------------------------------------------------------------------
|
|
*
|
|
*
|
|
*
|
|
UPPER_LIMIT_ERROR:
|
|
;
|
|
; CALL RESET_GALIL
|
|
; CALL WAIT_ACK_REAL
|
|
;
|
|
; ;send shutdown commands
|
|
; LDL MOTOROFF,AR2
|
|
; CALL SEND_CMD
|
|
;
|
|
CALL SEND_MOTOR_OFF_NO_RESET
|
|
|
|
CLRI R2
|
|
SETAUD ADJ_MOTION_PRESENT
|
|
|
|
LDI 5,AR5
|
|
|
|
ULLERR
|
|
FILL 1,200,500,390,0
|
|
|
|
LDI 50,R0
|
|
CALL WAITMSEC
|
|
|
|
LDI 1,RC
|
|
TEXTITT "UPPER LIMIT SWITCH ERROR",1,200
|
|
|
|
LDI @GALIL_STATUS_X,R0
|
|
TSTB 08h,R0
|
|
BZ ULL1
|
|
|
|
TEXTITT "X AXIS LIMIT SWITCH NOT FOUND",1,210
|
|
ULL1 LDI @GALIL_STATUS_Y,R0
|
|
TSTB 08h,R0
|
|
BZ ULL2
|
|
|
|
TEXTITT "Y AXIS LIMIT SWITCH NOT FOUND",1,220
|
|
ULL2 LDI @GALIL_STATUS_Z,R0
|
|
TSTB 08h,R0
|
|
BZ ULL3
|
|
|
|
TEXTITT "Z AXIS LIMIT SWITCH NOT FOUND",1,230
|
|
ULL3
|
|
|
|
LDI 450,R0
|
|
CALL WAITMSEC
|
|
DBU AR5,ULLERR
|
|
RETS
|
|
*----------------------------------------------------------------------------
|
|
|
|
|
|
|
|
*----------------------------------------------------------------------------
|
|
LOWER_LIMIT_ERROR:
|
|
;
|
|
; CALL RESET_GALIL
|
|
; CALL WAIT_ACK_REAL
|
|
;
|
|
; ;send shutdown commands
|
|
; LDL MOTOROFF,AR2
|
|
; CALL SEND_CMD
|
|
;
|
|
|
|
CALL SEND_MOTOR_OFF_NO_RESET
|
|
|
|
CLRI R2
|
|
SETAUD ADJ_MOTION_PRESENT
|
|
|
|
FILL 1,200,500,390,0
|
|
|
|
LDI 5,AR5
|
|
LLLERR
|
|
|
|
|
|
FILL 1,200,500,390,0
|
|
|
|
LDI 50,R0
|
|
CALL WAITMSEC
|
|
|
|
LDI 1,RC
|
|
TEXTITT "LOWER LIMIT SWITCH ERROR",1,200
|
|
|
|
LDI @GALIL_STATUS_X,R0
|
|
TSTB 04h,R0
|
|
BZ LLL1
|
|
|
|
TEXTITT "X AXIS LIMIT SWITCH NOT FOUND",1,210
|
|
LLL1 LDI @GALIL_STATUS_Y,R0
|
|
TSTB 04h,R0
|
|
BZ LLL2
|
|
|
|
TEXTITT "Y AXIS LIMIT SWITCH NOT FOUND",1,220
|
|
LLL2 LDI @GALIL_STATUS_Z,R0
|
|
TSTB 04h,R0
|
|
BZ LLL3
|
|
|
|
TEXTITT "Z AXIS LIMIT SWITCH NOT FOUND",1,230
|
|
LLL3
|
|
|
|
LDI 450,R0
|
|
CALL WAITMSEC
|
|
DBU AR5,LLLERR
|
|
|
|
|
|
|
|
RETS
|
|
*----------------------------------------------------------------------------
|
|
|
|
|
|
|
|
*----------------------------------------------------------------------------
|
|
|
|
|
|
*We must take into consideration:
|
|
* IF a limit switch is bogus, we can compensate by
|
|
* doing:
|
|
*
|
|
* "JG -26000,-26000,-26000;BG",13,"WT 3100",13,
|
|
* "SH",13
|
|
* "PR 500,500,500" ;just to relieve the pressure a bit...
|
|
* "DP 0,0,0",13
|
|
* "SP 15000,15000,15000",13,0
|
|
* etc... etc...
|
|
*
|
|
* NO NOT TRUE
|
|
*
|
|
*AC ACCERATION
|
|
*BG BEGIN MOTION
|
|
*DC DECELERATION
|
|
*DP DEFINE POSITION AS
|
|
*IT INDEPENDANT TIME CONSTANT (SMOOTHING FUNCTION)
|
|
*JG JOG (MOVE AT SPEED)
|
|
*JP JUMP
|
|
*MO MOTOR OFF
|
|
*PA POSITION ABSOLUTE
|
|
*PR POSITION RELATIVE
|
|
*SP SPEED
|
|
*WT WAIT
|
|
*XQ EXECUTE (LABEL)
|
|
*#<> LABEL
|
|
*EN END OF PROGRAM
|
|
*ED EDIT (OPEN BUFFER)
|
|
*^Q (17/CTRL-Q) (END OF BUFFER)
|
|
*
|
|
|
|
romdata
|
|
|
|
PPSAF .string "PR 4000,4000,4000;BG",13,"WT 500",13,"PR -12000,-12000,-12000",13,0
|
|
|
|
PP .string "JG -26000,-26000,-26000;BG",13,"WT 3100",13,"DP 0,0,0",13,"SP 15000,15000,15000",13,0
|
|
PP1 .string "AC 105000,105000,105000",13,"ER 8000,8000,8000",13,0
|
|
PP2 .string "DC 435000,435000,435000",13,"TL 7,7,7",13,0
|
|
PP3 .string "IT 0.1,0.1,0.1",13,"PA 0,0,0;BG",13,0
|
|
PP4 .string "JG 0,0,0;BG",13,0
|
|
|
|
|
|
EDIT .string "ED",13,0
|
|
T5 .string "#PROG",13,0
|
|
T6 .string "#XE",13,0
|
|
T7 .string "#XA",13,0
|
|
T8 .string "#YE",13,0
|
|
T9 .string "#YA",13,0
|
|
T10 .string "#ZE",13,0
|
|
T11 .string "#ZA",13,0
|
|
T12 .string "JG 0,0,0",13,0
|
|
T13 .string "BG XYZ",13,0
|
|
T14 .string "XA=0",13,0
|
|
T15 .string "YA=0",13,0
|
|
T16 .string "ZA=0",13,0
|
|
T17 .string "#LOOP",13,0
|
|
T18 .string "XE=XA-_RPX",13,0
|
|
T19 .string "XE=XE*5",13,0
|
|
T20 .string "YE=YA-_RPY",13,0
|
|
T21 .string "YE=YE*5",13,0
|
|
T22 .string "ZE=ZA-_RPZ",13,0
|
|
T23 .string "ZE=ZE*5",13,0
|
|
T24 .string "JG XE,YE,ZE",13,0
|
|
;T25 .string "JP #CHKX,(_TTX*_TTX)>21",13,0
|
|
T25 .string "JP #CHKX,(_TTX*_TTX)>23",13,0
|
|
;T26 .string "JP #CHKY,(_TTY*_TTY)>21",13,0
|
|
T26 .string "JP #CHKY,(_TTY*_TTY)>23",13,0
|
|
;T27 .string "JP #CHKZ,(_TTZ*_TTZ)>21",13,0
|
|
T27 .string "JP #CHKZ,(_TTZ*_TTZ)>26",13,0 ;LOFF DLTA November 9,1994
|
|
T28 .string "JP #LOOP",13,0
|
|
T29 .string "#INITP",13,0
|
|
T30 .string "#COUNT",13,0
|
|
|
|
T31 .string "#CHKX",13,0
|
|
T32 .string "ACC=0",13,0
|
|
T33 .string "INITP=_TPX",13,0
|
|
T34 .string "#MLPX",13,0
|
|
;T35 .string "JP #LOOP,(_TTX*_TTX)<7",13,0
|
|
T35 .string "JP #LOOP,(_TTX*_TTX)<10",13,0
|
|
T36 .string "JP #LOOP,(_TPX-INITP)>5",13,0
|
|
T37 .string "JP #LOOP,(_TPX-INITP)<-8",13,0
|
|
T38 .string "COUNT=COUNT+1",13,0
|
|
T39 .string "JP #ERROUTX,COUNT>5",13,0
|
|
T40 .string "JP #MLPX",13,0
|
|
|
|
T41 .string "#CHKY",13,0
|
|
T42 .string "COUNT=0",13,0
|
|
T43 .string "INITP=_TPY",13,0
|
|
T44 .string "#MLPY",13,0
|
|
;T45 .string "JP #LOOP,(_TTY*_TTY)<7",13,0
|
|
T45 .string "JP #LOOP,(_TTY*_TTY)<10",13,0
|
|
T46 .string "JP #LOOP,(_TPY-INITP)>5",13,0
|
|
T47 .string "JP #LOOP,(_TPY-INITP)<-8",13,0
|
|
T48 .string "COUNT=COUNT+1",13,0
|
|
T49 .string "JP #ERROUTY,COUNT>5",13,0
|
|
T50 .string "JP #MLPY",13,0
|
|
|
|
T51 .string "#CHKZ",13,0
|
|
T52 .string "COUNT=0",13,0
|
|
T53 .string "INITP=_TPZ",13,0
|
|
T54 .string "#MLPZ",13,0
|
|
;T55 .string "JP #LOOP,(_TTZ*_TTZ)<7",13,0 ;LOFF DLTA November 9,1994
|
|
T55 .string "JP #LOOP,(_TTZ*_TTZ)<17",13,0
|
|
T56 .string "JP #LOOP,(_TPZ-INITP)>5",13,0
|
|
T57 .string "JP #LOOP,(_TPZ-INITP)<-8",13,0
|
|
T58 .string "COUNT=COUNT+1",13,0
|
|
T59 .string "JP #ERROUTZ,COUNT>5",13,0
|
|
T60 .string "JP #MLPZ",13,0
|
|
|
|
T1 .string "#POSERR",13,0
|
|
T2 .string "MG ",34,"G",34,13,0
|
|
T3 .string "JP #MOTOFF",13,0
|
|
|
|
T66X .string "#ERROUTX",13,0
|
|
T67X .string "MG ",13,0
|
|
T68X .string "MG ",34,"W",34,13,0
|
|
|
|
T66Y .string "#ERROUTY",13,0
|
|
T67Y .string "MG ",13,0
|
|
T68Y .string "MG ",34,"S",34,13,0
|
|
|
|
T66Z .string "#ERROUTZ",13,0
|
|
T67Z .string "MG ",13,0
|
|
T68Z .string "MG ",34,"Q",34,13,0
|
|
|
|
|
|
T69 .string "#MOTOFF",13,0
|
|
T70 .string "JG 90000,90000,90000;BG;TL 0.6,0.6,1.8",13,0
|
|
T71 .string "WT 2000;TL 0.55,0.55,1.6",13,0
|
|
T72 .string "WT 2000;TL 0.50,0.50,1.5",13,0
|
|
T73 .string "WT 2000;TL 0.45,0.45,1.4",13,0
|
|
T74 .string "WT 2000;TL 0.40,0.40,1.3",13,0
|
|
T75 .string "WT 2000;TL 0.35,0.35,1.2",13,0
|
|
T76 .string "WT 2000;TL 0.30,0.30,1.1",13,0
|
|
T77 .string "WT 2000;TL 0.25,0.25,1.0",13,0
|
|
T78 .string "WT 2000;TL 0.20,0.20,0.9",13,0
|
|
T79 .string "WT 2000;TL 0.15,0.15,0.8",13,0
|
|
T80 .string "WT 2000;TL 0.10,0.10,0.7",13,0
|
|
T81 .string "WT 2000;TL 0.05,0.05,0.6",13,0
|
|
T82 .string "WT 2000",13,0
|
|
T83 .string "OE 1,1,1;AB",13,0
|
|
T84 .string "TL 7,7,7;EN",13,0
|
|
|
|
|
|
ENDED .string 17,0
|
|
XQ .string "XQ",13,0 ;"XQ #PROG",13,0
|
|
|
|
PXC1 .string "XA=",0
|
|
PXC2 .string 13,"BG XYZ",13,0
|
|
|
|
PYC1 .string "YA=",0
|
|
PYC2 .string 13,0
|
|
|
|
PZC1 .string "ZA=",0
|
|
PZC2 .string 13,0
|
|
|
|
.text
|
|
*----------------------------------------------------------------------------
|
|
.END
|
|
|