Pushok icon

gmod elevator zasm v2

Pushok | PRO | 12/31/13 02:19:01 PM UTC | 0 ⭐ | 361 👁️ | Never ⏰ | []
C |

2.56 KB

|

None

|

0 👍

/

0 👎

jmp Main
 
fst:
    db 0, 0, 0, 0
dU:
    db 0, 0, 0, 0
dD:
    db 0, 0, 0, 0
dC:
    db 0, 0, 0, 0
flr:
    db 0, 0, 0, 0
len:
    db 0, 0, 0, 0
run: // 1 - down, 2 - up
    db 0, 0, 0, 0
nextLen:
    db 0, 0, 0, 0
gofst:
    db 0, 0, 0, 0
 
//port1(in) - up button
//port2(in) - down button
//port3(out) - screen
//port4(out) - length
//port4(in) - default lenght
//port5(in) - floor step
//port5(out) - indicator
//port3(in) - call button
 
Wait://Delay(MS)
    mov ecx, eax
CWait:
    idle
    dec ecx
    cmp ecx, 0
    jg CWait
    ret
 
SetIndicator: //0 - blue, 1 - green, 2 - red
    mul eax, 8
    push ecx //save ecx
    mov ecx, eax //eax = ecx
    xor eax, eax //clean all eax bits
    mov eax, 255
    bshl eax, ecx // eax = eax << ecx
    pop ecx //restore ecx
    mov port5, eax
    ret
 
Main: //Set initial state of program
    cmp #fst, 0
    jg next
    mov #run, 0
    mov #fst, 1
    mov #dU, 0
    mov #dD, 0
    mov #dC, 0
    mov #gofst, 0
    mov #flr, 1
    mov #len, port4
    mov #nextLen, port4
    mov eax, 1
    call SetIndicator
next: //Up button interception
    cmp #gofst, 1
    je skip3
    cmp port1, 1
    jne skip1
    cmp port1, #dU
    je skip1;
    cmp #flr, 10
    jge skip1
    inc #flr
    mov port3, #flr
    add #nextLen, port5
    mov #run, 1
    jmp skip3
skip1://Down button interception
    cmp port2, 1
    jne skip2
    cmp port2, #dD
    je skip2
    cmp #flr, 1
    jle skip2
    dec #flr
    mov port3, #flr
    sub #nextLen, port5
    mov #run, 2
    jmp skip3
skip2:
    cmp port3, 1
    jne skip3
    cmp port3, #dC
    je skip3
    cmp #flr, 1
    jle skip3
    mov #gofst, 1
    jmp skip3
skip3://checking, is lift running
    cmp #gofst, 1
    jne not_fst
    cmp #flr, 1
    je skip
    dec #flr
    mov port3, #flr
    sub #nextLen, port5
    mov #run, 2
not_fst:
    cmp #run, 0
    je skip
go_elev:
    mov eax, 2
    call SetIndicator
elevate://choosing direction(1-up, 2-down)
    mov eax, 5
    call Wait //delay for 5 ms
    
    cmp #run, 1
    je up
    cmp #run, 2
    je down
up:
    cmp #len, #nextLen
    jge endelev  
    add #len, 3
    mov port4, #len
    jmp elevate
down:
    cmp #len, #nextLen
    jle endelev
    sub #len, 3
    mov port4, #len
    jmp elevate
endelev:
    mov eax, 1
    call SetIndicator
    mov #run, 0 
skip://Backuping old values
    cmp #flr, 1
    jne C
    mov #gofst, 0  
C:
    push port1
    push port2
    push port3
    pop #dC
    pop #dD
    pop #dU
    jmp Main

Comments