Files
kolibrios/programs/testing/protection/trunk/test.asm

206 lines
7.8 KiB
NASM
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
;-------------------------------------------------------------------------------
;
; PROTECTION TEST
;
;-------------------------------------------------------------------------------
; last update: 07/03/2014
; changed by: Marat Zakiyanov aka Mario79, aka Mario
; changes: Optimisations and code refactoring.
; Reducing the consumption of RAM, 4 KB instead of 64 KB.
; Translation into Russian.
;---------------------------------------------------------------------
use32
org 0x0
db 'MENUET01' ; 8 byte id
dd 0x01 ; header version
dd START ; start of code
dd I_END ; size of image
dd IM_END ; memory for app
dd stack_top ; esp
dd 0x0 ; I_Param
dd 0x0 ; I_Icon
;-------------------------------------------------------------------------------
include '../../../macros.inc'
include 'lang.inc'
;-------------------------------------------------------------------------------
START: ; start of execution
red: ; redraw
call draw_window ; at first, draw the window
;-------------------------------------------------------------------------------
still:
mcall 10 ; wait here for event
cmp eax,1 ; redraw request ?
jz red
cmp eax,3 ; button in buffer ?
jz button
cmp eax,2 ; key in buffer ?
jnz still
;-------------------------------------------------------------------------------
key:
mcall 2 ; just read it and ignore
jmp still
;-------------------------------------------------------------------------------
button:
mcall 17
cmp ah,1 ; button id=1 ?
jnz noclose
mcall -1 ; close this program
;-------------------------------------------------------------------------------
noclose:
cmp ah,2
jnz notest2
cli
;-------------------------------------------------------------------------------
notest2:
cmp ah,3
jnz notest3
sti
;-------------------------------------------------------------------------------
notest3:
cmp ah,4
jnz notest4
mov [0x10000],byte 1
;-------------------------------------------------------------------------------
notest4:
cmp ah,5
jnz notest5
jmp dword 0x10000
;-------------------------------------------------------------------------------
notest5:
cmp ah,6
jnz notest6
mov esp,0
push eax
;-------------------------------------------------------------------------------
notest6:
cmp ah,7
jnz notest7
in al,0x60
;-------------------------------------------------------------------------------
notest7:
cmp ah,8
jnz still
out 0x60,al
jmp still
;-------------------------------------------------------------------------------
; *********************************************
; ******* WINDOW DEFINITIONS AND DRAW ********
; *********************************************
;-------------------------------------------------------------------------------
draw_window:
;mcall 48,3,sys_colors,40
mcall 12,1
mcall 0,<200,370>,<200,295>,0x14FFFFFF,,tlabel
mcall 8, <36,15>, <88,15>, 2, 0x6888B8
.newb:
mcall
add ecx,26*65536
inc edx
cmp edx,9
jb .newb
cld
mov ebx,26*65536+37 ; draw info text with function 4
mov ecx,0x10000000
mov edx,text
mov esi,40
mov eax,4
.newline:
mcall
add ebx,13
add edx,40
cmp [edx],byte 'x'
jnz .newline
mcall 12,2 ; function 12:tell os about windowdraw
ret
;-------------------------------------------------------------------------------
; DATA AREA
;-------------------------------------------------------------------------------
if lang eq it_IT
text:
db 'Il programma usa 0x1000 byte di memoria '
db ' '
db 'Open debug board for rezult information '
db ' '
db ' CLI '
db ' '
db ' STI '
db ' '
db ' MOV [0x10000],BYTE 1 '
db ' '
db ' JMP DWORD 0x10000 '
db ' '
db ' MOV ESP,0 & PUSH EAX '
db ' '
db ' IN Al,0x60 '
db ' '
db ' OUT 0x60,AL '
db 'x'
else if lang eq ru_RU
text:
db '<27>ਫ®¦¥­¨¥ ¨á¯®«ì§ã¥â 0x1000 ¡ ©â ¯ ¬ïâ¨'
db ' '
db 'Žâªàëâì BOARD ¤«ï ¯à®á¬®âà  à¥§ã«ìâ â  '
db ' '
db ' CLI '
db ' '
db ' STI '
db ' '
db ' MOV [0x10000],BYTE 1 '
db ' '
db ' JMP DWORD 0x10000 '
db ' '
db ' MOV ESP,0 & PUSH EAX '
db ' '
db ' IN Al,0x60 '
db ' '
db ' OUT 0x60,AL '
db 'x'
else
text:
db 'Application uses 0x1000 bytes of memory '
db ' '
db 'Open debug board for result information '
db ' '
db ' CLI '
db ' '
db ' STI '
db ' '
db ' MOV [0x10000],BYTE 1 '
db ' '
db ' JMP DWORD 0x10000 '
db ' '
db ' MOV ESP,0 & PUSH EAX '
db ' '
db ' IN Al,0x60 '
db ' '
db ' OUT 0x60,AL '
db 'x'
end if
;-------------------------------------------------------------------------------
if lang eq it_IT
tlabel:
db 'Kolibri prova di protezione',0
else if lang eq ru_RU
tlabel:
db 'Kolibri ¯à®¢¥àª  § é¨âë ï¤à ',0
else
tlabel:
db 'Kolibri protection test',0
end if
;-------------------------------------------------------------------------------
I_END:
;-------------------------------------------------------------------------------
align 4
rb 256
stack_top:
;-------------------------------------------------------------------------------
IM_END:
;-------------------------------------------------------------------------------