;------------------------------------- ; Robot info ;------------------------------------- ; name: Hunter, ver. 4.10 ; created: 22 Jan 2000 ; author: Dmitry N. Finozhenok ; e-mail: dfn@chat.ru ;------------------------------------- #config scanner=4 #config heatsinks=2 #def RotAddr #def StartAddr #def WorkAddr #def FireAddr #def throttle #def scan_arc #def distance #def delta jne 20 ;--------------------------------- ; Variable area ;--------------------------------- *0 0 0 0 *0 0 0 0 *0 0 0 0 *0 0 1 0 *0 0 1 0 *0 0 1 0 *0 0 1 0 *0 0 2 0 *0 0 2 0 *0 1 2 0 *0 1 2 0 ; 10 *0 1 2 0 *0 1 3 0 *0 1 3 0 *0 1 3 0 *0 1 3 0 *0 1 3 0 *0 1 4 0 *0 1 4 0 *0 1 4 0 *0 1 4 0 ; 20 *0 1 4 0 *0 1 4 0 *0 1 5 0 *0 1 5 0 *0 1 5 0 *0 2 5 0 *1 2 5 0 *1 2 5 0 *1 2 6 0 *1 2 6 0 ; 30 *1 2 6 0 *1 2 6 0 *1 2 6 0 *1 2 6 0 *1 2 6 0 *1 2 6 0 *1 2 6 0 *1 2 7 0 *1 2 7 0 *1 2 7 0 ; 40 *1 2 7 0 *1 2 7 0 *1 2 7 0 *1 2 7 0 *1 2 7 0 *1 2 7 0 *1 2 7 0 *1 2 7 0 *1 2 7 0 *1 2 7 0 ; 50 *1 2 7 0 *1 2 7 0 *1 2 7 0 *1 2 7 0 *1 2 7 0 *1 2 7 0 *1 2 7 0 *1 2 7 0 *1 2 7 0 *1 2 7 0 ; 60 *1 2 7 0 *1 2 7 0 *1 2 7 0 *1 2 7 0 *1 2 7 0 *1 2 7 0 *1 2 7 0 *1 2 7 0 *1 2 7 0 *1 2 7 0 ; 70 *1 2 7 0 *1 2 7 0 *1 2 7 0 *1 2 7 0 *1 2 7 0 *1 2 7 0 *1 2 7 0 *1 2 7 0 *1 2 6 0 *1 2 6 0 ; 80 *1 2 6 0 *1 2 6 0 *1 2 6 0 *1 2 6 0 *1 2 6 0 *1 2 6 0 *1 2 6 0 *1 2 6 0 *1 2 5 0 *1 2 5 0 ; 90 *1 2 5 0 *1 2 5 0 *1 2 5 0 *1 2 5 0 *1 2 5 0 *1 2 5 0 *1 2 4 0 *1 2 4 0 *1 2 4 0 *1 1 4 0 ; 100 *1 1 4 0 *0 1 4 0 *0 1 4 0 *0 1 4 0 *0 1 3 0 *0 1 3 0 *0 1 3 0 *0 1 3 0 *0 1 3 0 *0 1 3 0 ; 110 *0 1 3 0 *0 1 2 0 *0 1 2 0 *0 1 2 0 *0 1 2 0 *0 1 2 0 *0 1 2 0 *0 1 2 0 *0 1 1 0 *0 0 1 0 ; 120 *0 0 1 0 *0 0 1 0 *0 0 1 0 *0 0 1 0 *0 0 0 0 *0 0 0 0 *0 0 0 0 *0 0 0 0 *0 0 0 0 *0 0 0 0 ; 130 *0 0 0 0 *0 0 -1 0 *0 0 -1 0 *0 0 -1 0 *0 0 -1 0 *0 0 -1 0 *0 -1 -1 0 *0 -1 -2 0 *0 -1 -2 0 *0 -1 -2 0 ; 140 *0 -1 -2 0 *0 -1 -2 0 *0 -1 -2 0 *0 -1 -2 0 *0 -1 -3 0 *0 -1 -3 0 *0 -1 -3 0 *0 -1 -3 0 *0 -1 -3 0 *0 -1 -3 0 ; 150 *0 -1 -3 0 *0 -1 -4 0 *0 -1 -4 0 *0 -1 -4 0 *-1 -1 -4 0 *-1 -1 -4 0 *-1 -1 -4 0 *-1 -2 -4 0 *-1 -2 -4 0 *-1 -2 -5 0 ; 160 *-1 -2 -5 0 *-1 -2 -5 0 *-1 -2 -5 0 *-1 -2 -5 0 *-1 -2 -5 0 *-1 -2 -5 0 *-1 -2 -5 0 *-1 -2 -6 0 *-1 -2 -6 0 *-1 -2 -6 0 ; 170 *-1 -2 -6 0 *-1 -2 -6 0 *-1 -2 -6 0 *-1 -2 -6 0 *-1 -2 -6 0 *-1 -2 -6 0 *-1 -2 -6 0 *-1 -2 -7 0 *-1 -2 -7 0 *-1 -2 -7 0 ; 180 *-1 -2 -7 0 *-1 -2 -7 0 *-1 -2 -7 0 *-1 -2 -7 0 *-1 -2 -7 0 *-1 -2 -7 0 *-1 -2 -7 0 *-1 -2 -7 0 *-1 -2 -7 0 *-1 -2 -7 0 ; 190 *-1 -2 -7 0 *-1 -2 -7 0 *-1 -2 -7 0 *-1 -2 -7 0 *-1 -2 -7 0 *-1 -2 -7 0 *-1 -2 -7 0 *-1 -2 -7 0 *-1 -2 -7 0 *-1 -2 -7 0 ; 200 *-1 -2 -7 0 *-1 -2 -7 0 *-1 -2 -7 0 *-1 -2 -7 0 *-1 -2 -7 0 *-1 -2 -7 0 *-1 -2 -7 0 *-1 -2 -7 0 *-1 -2 -7 0 *-1 -2 -7 0 ; 210 *-1 -2 -7 0 *-1 -2 -7 0 *-1 -2 -7 0 *-1 -2 -7 0 *-1 -2 -7 0 *-1 -2 -7 0 *-1 -2 -7 0 *-1 -2 -7 0 *-1 -2 -6 0 *-1 -2 -6 0 ; 220 *-1 -2 -6 0 *-1 -2 -6 0 *-1 -2 -6 0 *-1 -2 -6 0 *-1 -2 -6 0 *-1 -2 -6 0 *-1 -2 -6 0 *-1 -2 -5 0 *-1 -2 -5 0 *0 -1 -5 0 ; 230 *0 -1 -5 0 *0 -1 -5 0 *0 -1 -5 0 *0 -1 -4 0 *0 -1 -4 0 *0 -1 -4 0 *0 -1 -4 0 *0 -1 -4 0 *0 -1 -4 0 *0 -1 -3 0 ; 240 *0 -1 -3 0 *0 -1 -3 0 *0 -1 -3 0 *0 -1 -3 0 *0 -1 -2 0 *0 -1 -2 0 *0 -1 -2 0 *0 0 -2 0 *0 0 -2 0 *0 0 -1 0 ; 250 *0 0 -1 0 *0 0 -1 0 *0 0 -1 0 *0 0 0 0 *0 0 0 0 ;--------------------------------- ; Program init ;--------------------------------- :20 mov throttle, 100 mov scan_arc, 8 mov StartAddr, 200 mov WorkAddr, 400 mov FireAddr, 404 mov RotAddr, 402 out 22, 23 out 22, 23 mov ax, 1 int 3 out 11, throttle out 17, scan_arc je 200 jne 200 ;--------------------------------- ; Heat control ;--------------------------------- :100 in 2, ax cmp ax, 100 ja 200 cmp StartAddr, 200 jz 200 mov StartAddr, 200 mov WorkAddr, 400 ;---------------------------------- ; Move control ;---------------------------------- :200 cmp ColCnt, 1 jb 201 mov ColCnt, 0 neg throttle out 11, throttle :201 out 14, 2 ;---------------------------------- ; Scan control ;---------------------------------- :300 in 7, distance cmp distance, 1600 jb 303 cmp scan_arc, 32 jb 302 out 12, 64 jne 307 je 307 :302 shl scan_arc, 2 jne 306 je 306 :303 cmp scan_arc, 2 je WorkAddr shr scan_arc, 2 mov ax, scan_arc cmp [3], 1 ja 304 je 305 neg ax cmp [3], -1 ja 306 je 305 :304 add ax, ax :305 add ax, ax out 12, ax :306 out 17, scan_arc :307 jne 200 je 200 ;--------------------------------- ; Fire control ;--------------------------------- :400 add delta, [3] jne RotAddr je RotAddr :401 out 12, delta mov delta, 0 :402 jne FireAddr je FireAddr :403 out 15, delta :404 out 15, delta out 15, delta mov scan_arc, 8 mov WorkAddr, 500 mov StartAddr, 100 jne StartAddr je StartAddr ;--------------------------------- ; Calculate move delta ;--------------------------------- :500 mov fx, [13] mov ex, [6] cmp fx, 0 ja 501 neg fx xor ex, 128 :501 mov delta, 0 mov bx, 1030 shl ex, 2 add bx, ex shr fx, 7 jne fx je fx :1 sub bx, 2 mov delta, [bx] jne 510 je 510 :2 sub bx, 1 mov delta, [bx] jne 510 je 510 :3 add delta, [bx] add delta, [bx] add delta, [bx] shr delta, 2 :0 jne 510 je 510 :7 add delta, [bx] :6 add delta, [bx] :5 add delta, [bx] shr delta, 2 :4 add delta, [bx] jne 511 je 511 :510 mov RotAddr, 402 jne 520 je 520 :511 mov RotAddr, 401 :520 cmp distance, 500 ja 521 mov FireAddr, 403 jne StartAddr je StartAddr :521 mov FireAddr, 404 jne StartAddr je StartAddr