Skip to content

Instantly share code, notes, and snippets.

@MericBERBER
Created December 6, 2017 13:42
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save MericBERBER/5586000b287f94903df324a8c15c899f to your computer and use it in GitHub Desktop.
Save MericBERBER/5586000b287f94903df324a8c15c899f to your computer and use it in GitHub Desktop.
org 100h
GO:
call RANDOM_NUMBER
call TIME_CHECKT
cmp intsecT, 1
je NoTimeLeft
call TIME_INCT
call TIME_CHECK
cmp intsec, 1
je NoTimeLeft
call TIME_INC
mov cx, 1
WAITME:
loop WAITME
call WRITE_TIME
mov ax, 0
mov al, R
and al, 5
mov key, al
mov bl, R
mul bl
add al, 5
mov bl, 5
div bl
cmp ah, 0
jne GO
lea si, M1
call ScPro
call TIME_ZERO
mov ax, 0
mov al, key
mov bl, R
or al, bl
cmp al, 0
je GO
lea si,M2
call ScPro
call TIME_ZERO
mov ax, 0
mov al, key
add al, R
sar al, 2
cmp al, 0
je GO
lea si, M3
call ScPro
call TIME_ZERO
mov ax, 0
mov al, key
xor al, R
cmp al, 0
je GO
lea si, M4
call ScPro
call TIME_ZERO
mov ax, 0
mov al, key
mul R
cmp al,0
jne GO
lea si, M5
call ScPro
call TIME_ZERO
mov dx, 0
mov dl, R
NoTimeLeft:
END:
ret
M1 DB 'Lock1 was opened',0
M2 DB 'Lock2 was opened',0
M3 DB 'Lock3 was opened',0
M4 DB 'Lock4 was opened',0
M5 DB 'Lock5 was opened',0
M0 DB 17 DUP(0)
ScPro PROC
mov dx, 2040h
mov cx, 17
L:mov al, [si]
out dx, al
inc si
inc dx
loop L
ret
ENDP
RANDOM_NUMBER PROC
mov ah, 00h ; interrupts to get system time
int 1ah; CX:DX now hold number of clock ticks
mov ax, dx
xor dx, dx
mov cx, 10
div cx
mov R, dl
ret
ENDP RANDOM_NUMBER
Num db 00111111b, 00000110b, 01011011b, 01001111b, 01100110b, 01101101b, 01111100b, 00000111b, 01111111b, 01101111b
R db 0
totalmin db 0
totalsec db 0
lockmin db 0
locksec db 0
intsec db 0
intsecT db 0
key db 0
kalan db 0
TIME_CHECKT PROC
mov ax, 0
mov al, totalmin
cmp al, 3
jne EndTimeCheckT
mov intsecT, 1
EndTimeCheckT:
ret
ENDP TIME_CHECKT
TIME_CHECK PROC
mov ax, 0
mov al, lockmin
cmp al, 1
jne EndTimeCheck
mov intsec, 1
EndTimeCheck:
ret
ENDP TIME_CHECKT
TIME_INCT PROC
mov ax, 0
mov al, totalsec
cmp al, 59
je MakeZero
inc al
mov totalsec, al
jmp EndTimeInc
MakeZero:
mov totalsec, 0
inc totalmin
EndTimeInc:
ret
ENDP TIME_INCT
TIME_INC PROC
mov ax, 0
mov al, locksec
cmp al, 59
je MakeZeroL
inc al
mov locksec, al
jmp EndTimeIncL
MakeZeroL:
mov locksec, 0
inc lockmin
EndTimeIncL:
ret
ENDP TIME_INC
TIME_ZERO PROC
mov ax, 0
mov locksec, 0
ret
ENDP TIME_ZERO
WRITE_TIME PROC
mov dx, 2030h
mov al, Num[0]
out dx, al
inc dx
mov al, totalmin
mov ah, 0
mov si, ax
mov al, Num[si]
or al, 10000000b
out dx, al
inc dx
mov al, totalsec
mov bl, 10
div bl
mov kalan, ah
mov ah, 0
mov si, ax
mov al, Num[si]
out dx, al
inc dx
mov ah, 0
mov al, kalan
mov si, ax
mov al, Num[si]
out dx, al
inc dx
mov al, Num[0]
out dx, al
inc dx
mov al, lockmin
mov ah, 0
mov si, ax
mov al, Num[si]
or al, 10000000b
out dx, al
inc dx
mov al, locksec
mov bl, 10
div bl
mov kalan, ah
mov ah, 0
mov si, ax
mov al, Num[si]
out dx, al
inc dx
mov ah, 0
mov al, kalan
mov si, ax
mov al, Num[si]
out dx, al
ret
ENDP WRITE_TIME
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment