include "..\..\..\macros.inc" initipc: mov eax,9 mov ebx,prc or ecx,-1 mcall mov ecx,eax loop1: push ecx mov eax,9 mov ebx,prc mcall cmp word [prc+10],'CM' jne no_cmd cmp byte [prc+12],'D' jne no_cmd mov ebx,[prc+30] mov dword [cmdpid],ebx mov dword [cmdnumb],ecx no_cmd: pop ecx loop loop1 cmp dword [cmdpid],0 jne no_exit jmp exit no_exit: mov eax,60 mov ebx,2 mov ecx,dword [cmdpid] mov edx,printf mov esi,4 mcall call initcmd waitcmdinit: mov eax,40 mov ebx,01000000b mcall mov eax,23 mov ebx,100 mcall cmp eax,7 je cmd_ok jmp exit cmd_ok: cmp byte [ipcb+16],'.' jne exit mov eax,18 mov ebx,3 mov ecx,dword [cmdnumb] mcall ret pause1: mov eax,5 mov ebx,1 mcall ret exit: or eax,-1 mcall cls: mov eax,60 mov ebx,2 mov ecx,dword [cmdpid] mov edx,ipccls mov esi,4 mcall call pause1 ret print: mov ecx,84 loopprt: mov edi,stripc add edi,ecx mov esi,fill_symbol movsb loop loopprt cld mov ecx,4 mov edi,stripc mov esi,printf rep movsb cld mov edx,79 sub edx,eax mov ecx,79 sub ecx,edx mov edi,stripc+4 mov esi,ebx rep movsb mov eax,60 mov ebx,2 mov ecx,dword [cmdpid] mov edx,stripc mov esi,84 mcall call pause1 ret eol: mov eax,60 mov ebx,2 mov ecx,dword [cmdpid] mov edx,ipceol mov esi,4 mcall call pause1 ret initcmd: mov eax,60 mov ebx,2 mov ecx,dword [cmdpid] mov edx,ipckey mov esi,4 mcall mov eax,60 mov ebx,1 mov ecx,ipcb mov edx,28 mcall cld mov ecx,28 mov edi,ipcb mov esi,ipcc rep movsb ret getkey: call initcmd waitagain: mov eax,40 mov ebx,01000000b mcall mov eax,10 mcall cmp eax,7 jne waitagain mov edi,key mov esi,ipcb+16 movsb ret endipc: mov eax,60 mov ebx,2 mov ecx,dword [cmdpid] mov edx,ipcend mov esi,4 mcall jmp exit cmdpid dd 0 cmdnumb dd 0 printf db '~ppp' ipceol db '~lll' ipcend db '~eee' ipccls db '~ccc' ipckey db '~kkk' key db 0 ipcb: db 0 db 0,0,0 dd 8 times 20 db 0 ipcc: db 0 db 0,0,0 dd 8 times 20 db 0 stripc: times 84 db 0 fill_symbol db 0 prc: times 52 db 0