Pushok

gmod elevator zasm v2

Dec 31st, 2013
377
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.56 KB | None | 0 0
  1. jmp Main
  2.  
  3. fst:
  4.     db 0, 0, 0, 0
  5. dU:
  6.     db 0, 0, 0, 0
  7. dD:
  8.     db 0, 0, 0, 0
  9. dC:
  10.     db 0, 0, 0, 0
  11. flr:
  12.     db 0, 0, 0, 0
  13. len:
  14.     db 0, 0, 0, 0
  15. run: // 1 - down, 2 - up
  16.     db 0, 0, 0, 0
  17. nextLen:
  18.     db 0, 0, 0, 0
  19. gofst:
  20.     db 0, 0, 0, 0
  21.  
  22. //port1(in) - up button
  23. //port2(in) - down button
  24. //port3(out) - screen
  25. //port4(out) - length
  26. //port4(in) - default lenght
  27. //port5(in) - floor step
  28. //port5(out) - indicator
  29. //port3(in) - call button
  30.  
  31. Wait://Delay(MS)
  32.     mov ecx, eax
  33. CWait:
  34.     idle
  35.     dec ecx
  36.     cmp ecx, 0
  37.     jg CWait
  38.     ret
  39.  
  40. SetIndicator: //0 - blue, 1 - green, 2 - red
  41.     mul eax, 8
  42.     push ecx //save ecx
  43.     mov ecx, eax //eax = ecx
  44.     xor eax, eax //clean all eax bits
  45.     mov eax, 255
  46.     bshl eax, ecx // eax = eax << ecx
  47.     pop ecx //restore ecx
  48.     mov port5, eax
  49.     ret
  50.  
  51. Main: //Set initial state of program
  52.     cmp #fst, 0
  53.     jg next
  54.     mov #run, 0
  55.     mov #fst, 1
  56.     mov #dU, 0
  57.     mov #dD, 0
  58.     mov #dC, 0
  59.     mov #gofst, 0
  60.     mov #flr, 1
  61.     mov #len, port4
  62.     mov #nextLen, port4
  63.     mov eax, 1
  64.     call SetIndicator
  65. next: //Up button interception
  66.     cmp #gofst, 1
  67.     je skip3
  68.     cmp port1, 1
  69.     jne skip1
  70.     cmp port1, #dU
  71.     je skip1;
  72.     cmp #flr, 10
  73.     jge skip1
  74.     inc #flr
  75.     mov port3, #flr
  76.     add #nextLen, port5
  77.     mov #run, 1
  78.     jmp skip3
  79. skip1://Down button interception
  80.     cmp port2, 1
  81.     jne skip2
  82.     cmp port2, #dD
  83.     je skip2
  84.     cmp #flr, 1
  85.     jle skip2
  86.     dec #flr
  87.     mov port3, #flr
  88.     sub #nextLen, port5
  89.     mov #run, 2
  90.     jmp skip3
  91. skip2:
  92.     cmp port3, 1
  93.     jne skip3
  94.     cmp port3, #dC
  95.     je skip3
  96.     cmp #flr, 1
  97.     jle skip3
  98.     mov #gofst, 1
  99.     jmp skip3
  100. skip3://checking, is lift running
  101.     cmp #gofst, 1
  102.     jne not_fst
  103.     cmp #flr, 1
  104.     je skip
  105.     dec #flr
  106.     mov port3, #flr
  107.     sub #nextLen, port5
  108.     mov #run, 2
  109. not_fst:
  110.     cmp #run, 0
  111.     je skip
  112. go_elev:
  113.     mov eax, 2
  114.     call SetIndicator
  115. elevate://choosing direction(1-up, 2-down)
  116.     mov eax, 5
  117.     call Wait //delay for 5 ms
  118.    
  119.     cmp #run, 1
  120.     je up
  121.     cmp #run, 2
  122.     je down
  123. up:
  124.     cmp #len, #nextLen
  125.     jge endelev  
  126.     add #len, 3
  127.     mov port4, #len
  128.     jmp elevate
  129. down:
  130.     cmp #len, #nextLen
  131.     jle endelev
  132.     sub #len, 3
  133.     mov port4, #len
  134.     jmp elevate
  135. endelev:
  136.     mov eax, 1
  137.     call SetIndicator
  138.     mov #run, 0
  139. skip://Backuping old values
  140.     cmp #flr, 1
  141.     jne C
  142.     mov #gofst, 0  
  143. C:
  144.     push port1
  145.     push port2
  146.     push port3
  147.     pop #dC
  148.     pop #dD
  149.     pop #dU
  150.     jmp Main
Advertisement
Add Comment
Please, Sign In to add comment