Added sources: emulator/PrMK , games/klavisha
git-svn-id: svn://kolibrios.org@1863 a494cfbc-eb01-0410-851d-a64ba20cac60
254
programs/emulator/PrMK/trunk/LOAD_LIB.MAC
Normal file
@ -0,0 +1,254 @@
|
||||
;14.04.2009 - a macros for code load library the box_lib.obj from '/sys/lib/' or current dirrectory.
|
||||
; The macros for load any library/libraries:
|
||||
; Copyright (c) 2009, <Lrz>
|
||||
; All rights reserved.
|
||||
;
|
||||
; Redistribution and use in source and binary forms, with or without
|
||||
; modification, are permitted provided that the following conditions are met:
|
||||
; * Redistributions of source code must retain the above copyright
|
||||
; notice, this list of conditions and the following disclaimer.
|
||||
; * Redistributions in binary form must reproduce the above copyright
|
||||
; notice, this list of conditions and the following disclaimer in the
|
||||
; documentation and/or other materials provided with the distribution.
|
||||
; * Neither the name of the <organization> nor the
|
||||
; names of its contributors may be used to endorse or promote products
|
||||
; derived from this software without specific prior written permission.
|
||||
;
|
||||
; THIS SOFTWARE IS PROVIDED BY Alexey Teplov aka <Lrz> ''AS IS'' AND ANY
|
||||
; EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
; WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
; DISCLAIMED. IN NO EVENT SHALL <copyright holder> BE LIABLE FOR ANY
|
||||
; DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
; (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||
; ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
; (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
;*****************************************************************************
|
||||
; This macros based on source code:
|
||||
; <Lrz> - Alexey Teplov / Àëåêñåé Òåïëîâ
|
||||
; Mario79, Mario - Marat Zakiyanov / Ìàðàò Çàêèÿíîâ
|
||||
; Diamondz - Evgeny Grechnikov / Åâãåíèé Ãðå÷íèêîâ
|
||||
;------------------------
|
||||
; DESCRIPTION
|
||||
; Macro load_library
|
||||
; Logick of work.
|
||||
; A first time we must to check system path, where I belive find a system library. System path is "/sys/lib/".
|
||||
; If I cannot found my library, i must to check second way. Second way is current dirrectory.
|
||||
; If we cannot load library, we must show the error message:
|
||||
; "I'm sorry,the programm cannot found system library box_lib.obj."
|
||||
; "The find was make on 2 ways: /sys/lib/ and current dirrectory."
|
||||
;
|
||||
; ebx,library_name
|
||||
; esi,cur_dir_path
|
||||
; edi,library_path
|
||||
;---------------------------------------------------------------------
|
||||
; Macro test_load_library
|
||||
; A first time we must to check own path in current dirrectory the program, where I belive find a system library.
|
||||
; If I cannot found my library, i must to check second way. Second way is system path a "/sys/lib/".
|
||||
; If we cannot load library, we must show the error message:
|
||||
; "I'm sorry,the programm cannot found system library box_lib.obj."
|
||||
; "The find was make on 2 ways: /sys/lib/ and current dirrectory."
|
||||
|
||||
macro load_library library_name, cur_dir_path, library_path, system_path, err_message_found_lib, head_f_l, myimport, err_message_import, head_f_i
|
||||
{
|
||||
local end_steep
|
||||
;---------------------------------------------------------------------
|
||||
; loading Box_Lib library
|
||||
|
||||
mcall 68,19,system_path ; load of sys directory
|
||||
test eax,eax
|
||||
jnz end_steep
|
||||
|
||||
mov ebx,library_name
|
||||
mov esi,cur_dir_path
|
||||
mov edi,library_path
|
||||
|
||||
copy_path ;the macros making way /current pach a program/+ name system library
|
||||
|
||||
mcall 68,19,library_path ; load of alternative
|
||||
test eax,eax
|
||||
jnz end_steep
|
||||
|
||||
show_error_window err_message_found_lib, head_f_l ;show error message /create window
|
||||
|
||||
end_steep:
|
||||
|
||||
import_boxlib myimport, err_message_import, head_f_i ;import
|
||||
;---------------------------------------------------------------------
|
||||
}
|
||||
|
||||
|
||||
macro test_load_library library_name, cur_dir_path, library_path, system_path, err_message_found_lib, head_f_l, myimport, err_message_import, head_f_i
|
||||
{
|
||||
local end_steep
|
||||
;---------------------------------------------------------------------
|
||||
; loading Box_Lib library
|
||||
mov ebx,library_name
|
||||
mov esi,cur_dir_path
|
||||
mov edi,library_path
|
||||
|
||||
copy_path ;the macros making way /current pach a program/+ name system library
|
||||
|
||||
mcall 68,19,library_path ; load of alternative
|
||||
test eax,eax
|
||||
jnz end_steep
|
||||
|
||||
mcall 68,19,system_path ; load of sys directory
|
||||
test eax,eax
|
||||
jnz end_steep
|
||||
|
||||
show_error_window err_message_found_lib, head_f_l ;show error message /create window
|
||||
|
||||
end_steep:
|
||||
|
||||
import_boxlib myimport, err_message_import, head_f_i ;import
|
||||
;---------------------------------------------------------------------
|
||||
}
|
||||
|
||||
macro load_libraries library_name, cur_dir_path, library_path, system_path, err_message_found_lib, head_f_l, myimport, err_message_import, head_f_i
|
||||
{
|
||||
local end_steep
|
||||
;---------------------------------------------------------------------
|
||||
; loading Box_Lib library
|
||||
|
||||
mcall 68,19,system_path ; load of sys directory
|
||||
test eax,eax
|
||||
jnz end_steep
|
||||
|
||||
mov ebx,library_name
|
||||
mov esi,cur_dir_path
|
||||
mov edi,library_path
|
||||
|
||||
copy_path ;the macros making way /current pach a program/+ name system library
|
||||
|
||||
mcall 68,19,library_path ; load of alternative
|
||||
test eax,eax
|
||||
jnz end_steep
|
||||
|
||||
show_error_window err_message_found_lib, head_f_l ;show error message /create window
|
||||
|
||||
end_steep:
|
||||
|
||||
import_boxlib myimport, err_message_import, head_f_i ;import
|
||||
;---------------------------------------------------------------------
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
macro copy_path
|
||||
{
|
||||
local copy_path
|
||||
;---------------------------------------------------------------------
|
||||
; mov ebx,library_name
|
||||
; mov esi,cur_dir_path
|
||||
; mov edi,library_path
|
||||
|
||||
copy_path:
|
||||
xor eax,eax
|
||||
cld
|
||||
.lp1:
|
||||
lodsb
|
||||
stosb
|
||||
test eax,eax
|
||||
jnz .lp1
|
||||
mov esi,edi
|
||||
|
||||
std
|
||||
.lp2:
|
||||
lodsb
|
||||
cmp al,'/'
|
||||
jnz .lp2
|
||||
mov edi,esi
|
||||
mov esi,ebx
|
||||
add edi,2
|
||||
|
||||
|
||||
cld
|
||||
.lp3:
|
||||
lodsb
|
||||
stosb
|
||||
test eax,eax
|
||||
jnz .lp3
|
||||
;---------------------------------------------------------------------
|
||||
}
|
||||
|
||||
macro show_error_window err_message, head
|
||||
{
|
||||
local red_win
|
||||
local still
|
||||
local button
|
||||
|
||||
mcall 40,0x5 ;set mask on events rewraw window and get id button.
|
||||
red_win:
|
||||
;draw_window:
|
||||
mcall 12, 1
|
||||
mcall 0, <0,300>, <0,100>, 0x33AABBCC, 0x805080D0, head
|
||||
mcall 4, <10,10>, 0x90000000, err_message; _found_lib
|
||||
mcall 12, 2
|
||||
align 4
|
||||
still: ;main loop
|
||||
mcall 10 ;wait event
|
||||
dec eax
|
||||
jz red_win
|
||||
|
||||
sub eax,2
|
||||
jnz still ;go to main loop
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
button:
|
||||
mcall 17 ;get id button
|
||||
test ah,ah ;if in ah 0, then go to still
|
||||
jz still
|
||||
mcall -1
|
||||
}
|
||||
|
||||
macro import_boxlib myimport, err_message_import, head_f_i
|
||||
{
|
||||
local import_loop
|
||||
local import_find
|
||||
local lp
|
||||
local import_find_next
|
||||
local import_found
|
||||
local import_done
|
||||
local exit
|
||||
; initialize import
|
||||
mov edx, eax
|
||||
mov esi,myimport
|
||||
import_loop:
|
||||
lodsd
|
||||
test eax, eax
|
||||
jz import_done
|
||||
push edx
|
||||
import_find:
|
||||
mov ebx, [ds:edx]
|
||||
test ebx, ebx
|
||||
jz exit ;import_not_found
|
||||
push eax
|
||||
lp:
|
||||
mov cl, [ds:eax]
|
||||
cmp cl, [ds:ebx]
|
||||
jnz import_find_next
|
||||
test cl, cl
|
||||
jz import_found
|
||||
inc eax
|
||||
inc ebx
|
||||
jmp lp
|
||||
import_find_next:
|
||||
pop eax
|
||||
add edx, 8
|
||||
jmp import_find
|
||||
import_found:
|
||||
pop eax
|
||||
mov eax, [ds:edx+4]
|
||||
mov [esi-4], eax
|
||||
pop edx
|
||||
jmp import_loop
|
||||
exit:
|
||||
add esp,4
|
||||
|
||||
show_error_window err_message_import, head_f_i ;show error message /create window
|
||||
|
||||
import_done:
|
||||
;---------------------------------------------------------------------
|
||||
}
|
789
programs/emulator/PrMK/trunk/MASMFpuLib.asm
Normal file
@ -0,0 +1,789 @@
|
||||
;FpuAtoFL PROTO :DWORD,:DWORD,:DWORD
|
||||
;FpuFLtoA PROTO :DWORD,:DWORD,:DWORD,:DWORD
|
||||
|
||||
;FpuAdd PROTO :DWORD,:DWORD,:DWORD,:DWORD
|
||||
;FpuSub PROTO :DWORD,:DWORD,:DWORD,:DWORD
|
||||
;FpuMul PROTO :DWORD,:DWORD,:DWORD,:DWORD
|
||||
;FpuDiv PROTO :DWORD,:DWORD,:DWORD,:DWORD
|
||||
;FpuSqrt PROTO :DWORD,:DWORD,:DWORD
|
||||
;FpuXexpY PROTO :DWORD,:DWORD,:DWORD,:DWORD
|
||||
;FpuAbs PROTO :DWORD,:DWORD,:DWORD
|
||||
;FpuTrunc PROTO :DWORD,:DWORD,:DWORD
|
||||
;FpuRound PROTO :DWORD,:DWORD,:DWORD
|
||||
;FpuChs PROTO :DWORD,:DWORD,:DWORD
|
||||
|
||||
;FpuLnx PROTO :DWORD,:DWORD,:DWORD
|
||||
;FpuLogx PROTO :DWORD,:DWORD,:DWORD
|
||||
;FpuEexpX PROTO :DWORD,:DWORD,:DWORD
|
||||
;FpuTexpX PROTO :DWORD,:DWORD,:DWORD
|
||||
|
||||
;FpuSin PROTO :DWORD,:DWORD,:DWORD
|
||||
;FpuCos PROTO :DWORD,:DWORD,:DWORD
|
||||
;FpuTan PROTO :DWORD,:DWORD,:DWORD
|
||||
;FpuArcsin PROTO :DWORD,:DWORD,:DWORD
|
||||
;FpuArccos PROTO :DWORD,:DWORD,:DWORD
|
||||
;FpuArctan PROTO :DWORD,:DWORD,:DWORD
|
||||
|
||||
;FpuSinh PROTO :DWORD,:DWORD,:DWORD
|
||||
;FpuCosh PROTO :DWORD,:DWORD,:DWORD
|
||||
;FpuTanh PROTO :DWORD,:DWORD,:DWORD
|
||||
;FpuArcsinh PROTO :DWORD,:DWORD,:DWORD
|
||||
;FpuArccosh PROTO :DWORD,:DWORD,:DWORD
|
||||
;FpuArctanh PROTO :DWORD,:DWORD,:DWORD
|
||||
|
||||
;FpuSize PROTO :DWORD,:DWORD,:DWORD
|
||||
;FpuComp PROTO :DWORD,:DWORD,:DWORD
|
||||
;FpuExam PROTO :DWORD,:DWORD
|
||||
;FpuState PROTO :DWORD
|
||||
|
||||
SRC1_FPU EQU 1
|
||||
SRC1_REAL EQU 2
|
||||
SRC1_DMEM EQU 4
|
||||
SRC1_DIMM EQU 8
|
||||
SRC1_CONST EQU 16
|
||||
|
||||
ANG_DEG EQU 0
|
||||
ANG_RAD EQU 32
|
||||
|
||||
DEST_MEM EQU 0
|
||||
DEST_IMEM EQU 64
|
||||
DEST_FPU EQU 128
|
||||
|
||||
SRC2_FPU EQU 256
|
||||
SRC2_REAL EQU 512
|
||||
SRC2_DMEM EQU 1024
|
||||
SRC2_DIMM EQU 2048
|
||||
SRC2_CONST EQU 4096
|
||||
|
||||
STR_REG EQU 0
|
||||
STR_SCI EQU 32768
|
||||
|
||||
FPU_PI EQU 1
|
||||
FPU_NAPIER EQU 2
|
||||
|
||||
XAM_VALID EQU 1
|
||||
XAM_ZERO EQU 2
|
||||
XAM_NEG EQU 4
|
||||
XAM_SMALL EQU 8
|
||||
XAM_INFINIT EQU 16
|
||||
|
||||
CMP_EQU EQU 1
|
||||
CMP_GREATER EQU 2
|
||||
CMP_LOWER EQU 4
|
||||
|
||||
|
||||
|
||||
|
||||
; #########################################################################
|
||||
;
|
||||
; FpuFLtoA
|
||||
;
|
||||
;##########################################################################
|
||||
|
||||
; -----------------------------------------------------------------------
|
||||
; This procedure was written by Raymond Filiatreault, December 2002
|
||||
; and modified April 2003. A minor flaw was corrected in July 2003.
|
||||
; Modified March 2004 to avoid any potential data loss from the FPU
|
||||
;
|
||||
; This FpuFLtoA function converts an 80-bit REAL number (Src) to its
|
||||
; decimal representation as a zero terminated alphanumeric string which
|
||||
; is returned at the specified memory destination unless an invalid
|
||||
; operation is reported by the FPU or the definition of the parameters
|
||||
; (with uID) is invalid.
|
||||
;
|
||||
; The format of the string can be specified as regular (default) or
|
||||
; scientific notation. The number of decimal places returned must also be
|
||||
; specified but the total number of significant digits must not exceed 16.
|
||||
; When the regular format is specified, the integer portion can also be
|
||||
; padded with preceding spaces to position the decimal point at a
|
||||
; specified location from the start of the string.
|
||||
;
|
||||
; The source can be an 80-bit REAL number from the FPU itself or from
|
||||
; memory.
|
||||
;
|
||||
; The source is not checked for validity. This is the programmer's
|
||||
; responsibility.
|
||||
;
|
||||
; This procedure is based on using an FPU instruction to convert the
|
||||
; REAL number into a specific packed decimal format. After unpacking,
|
||||
; the decimal point is positioned as required.
|
||||
;
|
||||
; Only EAX is used to return error or success. All other CPU registers
|
||||
; are preserved. All FPU registers are preserved.
|
||||
;
|
||||
; -----------------------------------------------------------------------
|
||||
|
||||
|
||||
; #########################################################################
|
||||
align 4
|
||||
proc FpuFLtoA stdcall, lpSrc:DWORD, lpDecimal:DWORD, lpDest:DWORD, uID:DWORD
|
||||
|
||||
locals
|
||||
tempdw dd ?
|
||||
esize dd ?
|
||||
Padding dd ?
|
||||
Decimal dd ?
|
||||
content: times 108 db ?
|
||||
tempst dt ?
|
||||
bcdstr dt ?
|
||||
oldcw dw ?
|
||||
truncw dw ?
|
||||
unpacked: times 20 db ?
|
||||
endl
|
||||
|
||||
;get the specified number of decimals for result
|
||||
;and make corrections if necessary
|
||||
|
||||
mov eax,[lpDecimal]
|
||||
test [uID],SRC2_DMEM
|
||||
jz @F
|
||||
mov eax,[eax] ;get the decimals from memory
|
||||
@@:
|
||||
push eax
|
||||
movzx eax,al ;low byte - number of decimal digits
|
||||
cmp eax,15
|
||||
jbe @F
|
||||
mov eax,15 ;a maximum of 15 decimals is allowed
|
||||
@@:
|
||||
mov [Decimal],eax
|
||||
pop eax
|
||||
movzx eax,ah ;2nd byte - number of char before decimal point
|
||||
cmp eax,17
|
||||
jbe @F
|
||||
mov eax,17 ;a maximum of 17 characters is allowed
|
||||
@@:
|
||||
mov [Padding],eax
|
||||
|
||||
test [uID],SRC1_FPU ;is data taken from FPU?
|
||||
jz @F ;continue if not
|
||||
|
||||
;-------------------------------
|
||||
;check if top register is empty
|
||||
;-------------------------------
|
||||
|
||||
fxam ;examine its content
|
||||
fstsw ax ;store results in AX
|
||||
fwait ;for precaution
|
||||
sahf ;transfer result bits to CPU flag
|
||||
jnc @F ;not empty if Carry flag not set
|
||||
jpe @F ;not empty if Parity flag set
|
||||
jz srcerr1 ;empty if Zero flag set
|
||||
|
||||
@@:
|
||||
fsave [content]
|
||||
|
||||
;----------------------------------------
|
||||
;check source for Src and load it to FPU
|
||||
;----------------------------------------
|
||||
|
||||
test [uID],SRC1_FPU
|
||||
jz @F
|
||||
lea eax,[content]
|
||||
fld tbyte [eax+28]
|
||||
jmp dest0
|
||||
|
||||
@@:
|
||||
test [uID],SRC1_REAL ;is Src an 80-bit REAL in memory?
|
||||
jz srcerr ;no proper source identificaiton
|
||||
mov eax,[lpSrc]
|
||||
fld tbyte [eax]
|
||||
jmp dest0 ;go complete process
|
||||
|
||||
srcerr:
|
||||
frstor [content]
|
||||
srcerr1:
|
||||
push edi
|
||||
mov edi,[lpDest]
|
||||
mov eax,"ERRO";ORRE"
|
||||
stosd
|
||||
mov ax,"R"
|
||||
stosw
|
||||
pop edi
|
||||
xor eax,eax
|
||||
ret
|
||||
|
||||
dest0:
|
||||
|
||||
;-------------------------------------------
|
||||
;first examine the value on FPU for validity
|
||||
;-------------------------------------------
|
||||
|
||||
fxam ;examine value on FPU
|
||||
fstsw ax ;get result
|
||||
fwait
|
||||
sahf ;transfer to CPU flags
|
||||
jz maybezero
|
||||
jpo srcerr ;C3=0 and C2=0 would be NAN or unsupported
|
||||
jnc getnumsize ;continue if normal finite number
|
||||
|
||||
;--------------------------------
|
||||
;value to be converted = INFINITY
|
||||
;--------------------------------
|
||||
|
||||
push ecx
|
||||
push esi
|
||||
push edi
|
||||
mov edi,[lpDest]
|
||||
mov al,"+"
|
||||
test ah,2 ;C1 field = sign
|
||||
jz @F
|
||||
mov al,"-"
|
||||
@@:
|
||||
stosb
|
||||
mov eax,"INFI";IFNI"
|
||||
stosd
|
||||
mov eax,"NITY";YTIN"
|
||||
stosd
|
||||
jmp finish
|
||||
|
||||
;-------------------------
|
||||
;value to be converted = 0
|
||||
;-------------------------
|
||||
|
||||
maybezero:
|
||||
jpe getnumsize ;would be denormalized number
|
||||
fstp st0 ;flush that 0 value off the FPU
|
||||
push ecx
|
||||
push esi
|
||||
push edi
|
||||
mov edi,[lpDest]
|
||||
test [uID],STR_SCI ;scientific notation?
|
||||
jnz @F ;no padding
|
||||
mov ecx,[Padding]
|
||||
sub ecx,2
|
||||
jle @F ;no padding specified or necessary
|
||||
mov al," "
|
||||
rep stosb
|
||||
@@:
|
||||
mov ax,3020h ;" 0" szstring
|
||||
stosw ;write it
|
||||
jmp finish
|
||||
|
||||
;---------------------------
|
||||
; get the size of the number
|
||||
;---------------------------
|
||||
|
||||
getnumsize:
|
||||
fldlg2 ;log10(2)
|
||||
fld st1 ;copy Src
|
||||
fabs ;insures a positive value
|
||||
fyl2x ;->[log2(Src)]*[log10(2)] = log10(Src)
|
||||
|
||||
fstcw [oldcw] ;get current control word
|
||||
fwait
|
||||
mov ax,[oldcw]
|
||||
or ax,0c00h ;code it for truncating
|
||||
mov [truncw],ax
|
||||
fldcw [truncw] ;insure rounding code of FPU to truncating
|
||||
|
||||
fist [esize] ;store characteristic of logarithm
|
||||
fldcw [oldcw] ;load back the former control word
|
||||
|
||||
ftst ;test logarithm for its sign
|
||||
fstsw ax ;get result
|
||||
fwait
|
||||
sahf ;transfer to CPU flags
|
||||
sbb [esize],0 ;decrement esize if log is negative
|
||||
fstp st0 ;get rid of the logarithm
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; get the power of 10 required to generate an integer with the specified
|
||||
; number of significant digits
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
mov eax,[uID]
|
||||
and eax,STR_SCI
|
||||
jnz .els0 ;regular decimal notation
|
||||
mov eax,[esize]
|
||||
or eax,eax ;check if number is < 1
|
||||
js @F
|
||||
; .if eax > 15 ;if number is >= 10^16
|
||||
cmp eax,15
|
||||
jbe .endif0
|
||||
or [uID],STR_SCI ;switch to scientific notation
|
||||
mov [Decimal],15 ;insures 15 decimal places in result
|
||||
jmp scific
|
||||
.endif0:
|
||||
add eax,[Decimal]
|
||||
; .if eax > 15 ;if integer + decimal digits > 16
|
||||
cmp eax,15
|
||||
jbe .endif1
|
||||
sub eax,15
|
||||
sub [Decimal],eax ;reduce decimal digits as required
|
||||
.endif1:
|
||||
@@:
|
||||
push [Decimal]
|
||||
pop [tempdw]
|
||||
jmp @f
|
||||
.els0: ;scientific notation
|
||||
scific:
|
||||
mov eax,[Decimal]
|
||||
sub eax,[esize]
|
||||
mov [tempdw],eax
|
||||
; .endif
|
||||
@@:
|
||||
|
||||
;----------------------------------------------------------------------------------------
|
||||
; multiply the number by the power of 10 to generate required integer and store it as BCD
|
||||
;----------------------------------------------------------------------------------------
|
||||
|
||||
;.if tempdw != 0
|
||||
cmp [tempdw],0
|
||||
je @f
|
||||
fild [tempdw]
|
||||
fldl2t
|
||||
fmulp st1,st0 ;->log2(10)*exponent
|
||||
fld st0
|
||||
frndint ;get the characteristic of the log
|
||||
fxch
|
||||
fsub st,st1 ;get only the fractional part but keep the characteristic
|
||||
f2xm1 ;->2^(fractional part)-1
|
||||
fld1
|
||||
faddp st1,st0 ;add 1 back
|
||||
fscale ;re-adjust the exponent part of the REAL number
|
||||
fstp st1 ;get rid of the characteristic of the log
|
||||
fmulp st1,st0 ;->16-digit integer
|
||||
;.endif
|
||||
@@:
|
||||
|
||||
fbstp [bcdstr] ;->TBYTE containing the packed digits
|
||||
fstsw ax ;retrieve exception flags from FPU
|
||||
fwait
|
||||
shr eax,1 ;test for invalid operation
|
||||
jc srcerr ;clean-up and return error
|
||||
|
||||
;------------------------------------------------------------------------------
|
||||
; unpack BCD, the 10 bytes returned by the FPU being in the little-endian style
|
||||
;------------------------------------------------------------------------------
|
||||
|
||||
push ecx
|
||||
push esi
|
||||
push edi
|
||||
lea esi,[bcdstr+9] ;go to the most significant byte (sign byte)
|
||||
lea edi,[unpacked]
|
||||
mov eax,3020h
|
||||
mov cl,byte [esi] ;sign byte
|
||||
; .if cl == 80h
|
||||
cmp cl,0x80
|
||||
jne @f
|
||||
mov al,"-" ;insert sign if negative number
|
||||
; .endif
|
||||
@@:
|
||||
stosw
|
||||
mov ecx,9
|
||||
@@:
|
||||
dec esi
|
||||
movzx eax,byte [esi]
|
||||
ror ax,4
|
||||
ror ah,4
|
||||
add ax,3030h
|
||||
stosw
|
||||
dec ecx
|
||||
jnz @B
|
||||
|
||||
mov edi,[lpDest]
|
||||
lea esi,[unpacked]
|
||||
test [uID],STR_SCI ;scientific notation?
|
||||
jnz scientific
|
||||
|
||||
;************************
|
||||
; REGULAR STRING NOTATION
|
||||
;************************
|
||||
|
||||
;------------------------------
|
||||
; check if padding is specified
|
||||
;------------------------------
|
||||
|
||||
mov ecx,[Padding]
|
||||
or ecx,ecx ;check if padding is specified
|
||||
jz nopadding
|
||||
|
||||
mov edx,2 ;at least 1 integer + sign
|
||||
mov eax,[esize]
|
||||
or eax,eax
|
||||
js @F ;only 1 integer digit if size is < 1
|
||||
add edx,eax ;->number of integer digits
|
||||
@@:
|
||||
sub ecx,edx
|
||||
jle nopadding
|
||||
mov al," "
|
||||
rep stosb
|
||||
|
||||
nopadding:
|
||||
pushfd ;save padding flags
|
||||
movsb ;insert sign
|
||||
mov ecx,1 ;at least 1 integer digit
|
||||
mov eax,[esize]
|
||||
or eax,eax ;is size negative (i.e. number smaller than 1)
|
||||
js @F
|
||||
add ecx,eax
|
||||
@@:
|
||||
mov eax,[Decimal]
|
||||
add eax,ecx ;->total number of digits to be displayed
|
||||
sub eax,19
|
||||
sub esi,eax ;address of 1st digit to be displayed
|
||||
pop eax ;retrieve padding flags in EAX
|
||||
; .if byte ptr[esi-1] == "1"
|
||||
cmp byte [esi-1],"1"
|
||||
jne @f
|
||||
dec esi
|
||||
inc ecx
|
||||
push eax ;transfer padding flags through stack
|
||||
popfd ;retrieve padding flags
|
||||
jle @F ;no padding was necessary
|
||||
dec edi ;adjust for one less padding byte
|
||||
; .endif
|
||||
@@:
|
||||
@@:
|
||||
rep movsb ;copy required integer digits
|
||||
mov ecx,[Decimal]
|
||||
or ecx,ecx
|
||||
jz @F
|
||||
mov al,"."
|
||||
stosb
|
||||
rep movsb ;copy required decimal digits
|
||||
@@:
|
||||
jmp finish
|
||||
|
||||
;********************
|
||||
; SCIENTIFIC NOTATION
|
||||
;********************
|
||||
|
||||
scientific:
|
||||
movsb ;insert sign
|
||||
mov ecx,[Decimal]
|
||||
mov eax,18
|
||||
sub eax,ecx
|
||||
add esi,eax
|
||||
cmp byte [esi-1],"1"
|
||||
pushfd ;save flags for extra "1"
|
||||
jnz @F
|
||||
dec esi
|
||||
@@:
|
||||
movsb ;copy the integer
|
||||
mov al,"."
|
||||
stosb
|
||||
rep movsb ;copy the decimal digits
|
||||
|
||||
mov al,"E"
|
||||
stosb
|
||||
mov al,"+"
|
||||
mov ecx,[esize]
|
||||
popfd ;retrieve flags for extra "1"
|
||||
jnz @F ;no extra "1"
|
||||
inc ecx ;adjust exponent
|
||||
@@:
|
||||
or ecx,ecx
|
||||
jns @F
|
||||
mov al,"-"
|
||||
neg ecx ;make number positive
|
||||
@@:
|
||||
stosb ;insert proper sign
|
||||
|
||||
;Note: the absolute value of the size could not exceed 4931
|
||||
|
||||
mov eax,ecx
|
||||
mov cl,100
|
||||
div cl ;->thousands & hundreds in AL, tens & units in AH
|
||||
push eax
|
||||
and eax,0ffh ;keep only the thousands & hundreds
|
||||
mov cl,10
|
||||
div cl ;->thousands in AL, hundreds in AH
|
||||
add ax,3030h ;convert to characters
|
||||
stosw ;insert them
|
||||
pop eax
|
||||
shr eax,8 ;get the tens & units in AL
|
||||
div cl ;tens in AL, units in AH
|
||||
add ax,3030h ;convert to characters
|
||||
stosw ;insert them
|
||||
|
||||
finish:
|
||||
xor eax,eax
|
||||
stosb ;string terminating 0
|
||||
pop edi
|
||||
pop esi
|
||||
pop ecx
|
||||
|
||||
frstor [content]
|
||||
|
||||
or al,1 ;to insure EAX!=0
|
||||
ret
|
||||
|
||||
endp
|
||||
|
||||
; #########################################################################
|
||||
|
||||
|
||||
align 4
|
||||
|
||||
; #########################################################################
|
||||
; FpuCos
|
||||
;##########################################################################
|
||||
;
|
||||
; cos(Src) -> Dest
|
||||
FpuCos:
|
||||
test [flags],(1 shl 30)
|
||||
jz @f ;jump if angle already in radians
|
||||
fldpi ;load pi (3.14159...) on FPU
|
||||
fmulp
|
||||
test [flags],(1 shl 31)
|
||||
jnz .1
|
||||
pushd 200
|
||||
jmp .2
|
||||
.1: pushd 180
|
||||
.2: fidiv dword [esp] ;value now in radians
|
||||
fwait
|
||||
add esp,4 ;clean the stack
|
||||
@@: fldpi
|
||||
fadd st,st ;->2pi
|
||||
fxch
|
||||
|
||||
@@: fprem ;reduce the angle
|
||||
fcos
|
||||
fstsw ax ;retrieve exception flags from FPU
|
||||
fwait
|
||||
shr al,1 ;test for invalid operation
|
||||
sahf ;transfer to the CPU flags
|
||||
jpe @B ;reduce angle again if necessary
|
||||
fstp st1 ;get rid of the 2pi
|
||||
ret
|
||||
|
||||
align 4
|
||||
; #########################################################################
|
||||
; FpuSin
|
||||
;##########################################################################
|
||||
;
|
||||
; sin(Src) -> Dest
|
||||
FpuSin:
|
||||
test [flags],(1 shl 30)
|
||||
jz @f ;jump if angle already in radians
|
||||
fldpi ;load pi (3.14159...) on FPU
|
||||
fmulp
|
||||
test [flags],(1 shl 31)
|
||||
jnz .1
|
||||
pushd 200
|
||||
jmp .2
|
||||
.1: pushd 180
|
||||
.2: fidiv dword [esp] ;value now in radians
|
||||
fwait
|
||||
add esp,4 ;clean the stack
|
||||
@@:
|
||||
fldpi
|
||||
fadd st,st ;->2pi
|
||||
fxch
|
||||
|
||||
fprem ;reduce the angle
|
||||
fsin
|
||||
fstp st1 ;get rid of the 2pi
|
||||
ret
|
||||
|
||||
align 4
|
||||
; #########################################################################
|
||||
; FpuArctan
|
||||
;##########################################################################
|
||||
;
|
||||
; atan(Src) -> Dest
|
||||
FpuArctan:
|
||||
fld1
|
||||
fpatan
|
||||
test [flags],(1 shl 30)
|
||||
jz @F ;jump if angle is required in radians
|
||||
test [flags],(1 shl 31)
|
||||
jnz .1
|
||||
pushd 200
|
||||
jmp .2
|
||||
.1: pushd 180
|
||||
.2: fimul dword [esp] ;*180 degrees
|
||||
fldpi ;load pi (3.14159...) on FPU
|
||||
fdivp ;*180/pi, angle now in degrees
|
||||
add esp,4 ;clean CPU stack
|
||||
|
||||
ftst ;check for negative angle
|
||||
fstsw ax ;retrieve status word from FPU
|
||||
fwait
|
||||
sahf
|
||||
jnc @F ;jump if positive number
|
||||
test [flags],(1 shl 31)
|
||||
jnz .3
|
||||
pushd 400
|
||||
jmp .4
|
||||
.3: pushd 360
|
||||
.4: fiadd dword [esp] ;angle now 0-360
|
||||
fwait
|
||||
add esp,4 ;clean CPU stack
|
||||
|
||||
@@:
|
||||
ret
|
||||
|
||||
align 4
|
||||
; #########################################################################
|
||||
; FpuTan
|
||||
;##########################################################################
|
||||
|
||||
; a = tan(x)
|
||||
FpuTan:
|
||||
fldpi ;load pi (3.14159...) on FPU
|
||||
fadd st,st ;->2pi
|
||||
fxch
|
||||
test [flags],(1 shl 30)
|
||||
jz @F ;jump if angle already in radians
|
||||
test [flags],(1 shl 31)
|
||||
jnz .1
|
||||
pushd 400
|
||||
jmp .2
|
||||
.1: pushd 360
|
||||
.2: fmul st,st1
|
||||
fidiv dword [esp] ;value now in radians
|
||||
pop eax ;clean the stack
|
||||
@@: fprem ;reduce the angle
|
||||
fptan
|
||||
|
||||
fstp st ;get rid of the 1
|
||||
fstp st1 ;get rid of the 2pi
|
||||
ret
|
||||
|
||||
align 4
|
||||
; #########################################################################
|
||||
; FpuArccos
|
||||
;##########################################################################
|
||||
; sqrt(1-Src^2)
|
||||
; acos(Src) = atan ------------- -> Dest
|
||||
; Src
|
||||
|
||||
FpuArccos:
|
||||
fld st ;copy cosine value
|
||||
fmul st0,st1 ;cos^2
|
||||
fld1
|
||||
fsubrp ;1-cos^2 = sin^2
|
||||
fsqrt ;->sin
|
||||
fxch
|
||||
fpatan ;i.e. arctan(sin/cos)
|
||||
|
||||
test [flags],(1 shl 30)
|
||||
jz @F ;jump if angle is required in radians
|
||||
test [flags],(1 shl 31)
|
||||
jnz .1
|
||||
pushd 200
|
||||
jmp .2
|
||||
.1: pushd 180
|
||||
.2: fimul dword [esp] ;*180 degrees
|
||||
fldpi ;load pi (3.14159...) on FPU
|
||||
fdivp ;*180/pi, angle now in degrees
|
||||
pop eax ;clean CPU stack
|
||||
@@:
|
||||
ret
|
||||
|
||||
align 4
|
||||
; #########################################################################
|
||||
; FpuArcsin
|
||||
;##########################################################################
|
||||
; Src
|
||||
; asin(Src) = atan ------------- -> Dest
|
||||
; sqrt(1-Src^2)
|
||||
FpuArcsin:
|
||||
fld st0 ;copy sine value
|
||||
fmul st0,st0 ;sin^2
|
||||
fld1
|
||||
fsubrp ;1-sin^2 = cos^2
|
||||
fsqrt ;->cos
|
||||
fpatan ;i.e. arctan(sin/cos) = arcsin
|
||||
test [flags],(1 shl 30)
|
||||
jz @F ;jump if angle is required in radians
|
||||
test [flags],(1 shl 31)
|
||||
jnz .1
|
||||
pushd 200
|
||||
jmp .2
|
||||
.1: pushd 180
|
||||
.2: fimul dword [esp] ;*180 degrees
|
||||
fldpi ;load pi (3.14159...) on FPU
|
||||
fdivrp ;*180/pi, angle now in degrees
|
||||
add esp,4 ;clean CPU stack
|
||||
@@:
|
||||
ret
|
||||
|
||||
align 4
|
||||
; #########################################################################
|
||||
; FpuEexpX
|
||||
;##########################################################################
|
||||
|
||||
; e^(Src) = antilog2[ log2(e) * Src ] -> Dest
|
||||
|
||||
FpuEexpX:
|
||||
|
||||
fldl2e ;->log2(e)
|
||||
fmulp ;->log2(e)*Src
|
||||
|
||||
fld st0 ;copy the logarithm
|
||||
frndint ;keep only the characteristic
|
||||
fsub st1,st ;keeps only the mantissa
|
||||
fxch ;get the mantissa on top
|
||||
|
||||
f2xm1 ;->2^(mantissa)-1
|
||||
fld1
|
||||
faddp ;add 1 back
|
||||
|
||||
fscale ;scale it with the characteristic
|
||||
|
||||
fstp st1 ;get rid of the characteristic
|
||||
ret
|
||||
|
||||
align 4
|
||||
; #########################################################################
|
||||
; FpuXexpY
|
||||
;##########################################################################
|
||||
|
||||
; Src1^Src2 = antilog2[ log2(Src1) * Src2 ] -> Dest
|
||||
|
||||
FpuXexpY:
|
||||
fxch ;set up FPU registers for next operation
|
||||
fyl2x ;->log2(Src1)*exponent
|
||||
|
||||
fld st0 ;copy the logarithm
|
||||
frndint ;keep only the characteristic
|
||||
fsub st1,st ;keeps only the mantissa
|
||||
fxch ;get the mantissa on top
|
||||
|
||||
f2xm1 ;->2^(mantissa)-1
|
||||
fld1
|
||||
faddp ;add 1 back
|
||||
|
||||
fscale ;scale it with the characteristic
|
||||
|
||||
fstp st1 ;overwrite the characteristic
|
||||
ret
|
||||
|
||||
|
||||
if 0
|
||||
exp:
|
||||
.N equ 10
|
||||
xor eax,eax
|
||||
mov ecx,.N
|
||||
fld1
|
||||
.0: dec ecx
|
||||
jz .end
|
||||
mov eax,.N
|
||||
sub eax,ecx
|
||||
mov [.d],eax
|
||||
fild [.d]
|
||||
@@: dec eax
|
||||
jz @f
|
||||
mov [.d],eax
|
||||
fild [.d]
|
||||
fmulp
|
||||
jmp @b
|
||||
@@: mov eax,.N
|
||||
sub eax,ecx
|
||||
fld st2
|
||||
@@: dec eax
|
||||
jz @f
|
||||
fld st3
|
||||
fmulp
|
||||
jmp @b
|
||||
@@: fdivrp
|
||||
faddp
|
||||
jmp .0
|
||||
.end: fxch
|
||||
fstp st0
|
||||
ret
|
||||
.d dd 0
|
||||
endf
|
BIN
programs/emulator/PrMK/trunk/MK_b3-34_hand.bmp
Normal file
After Width: | Height: | Size: 25 KiB |
1838
programs/emulator/PrMK/trunk/PrMK.asm
Normal file
1
programs/emulator/PrMK/trunk/config.inc
Normal file
@ -0,0 +1 @@
|
||||
__CPU_type fix p5
|
739
programs/emulator/PrMK/trunk/docs/b3-34help0.htm
Normal file
@ -0,0 +1,739 @@
|
||||
<HTML>
|
||||
<HEAD>
|
||||
<TITLE>Б3-34 - краткое руководство</TITLE>
|
||||
<META http-equiv="Content-Type" content="text/html; charset=windows-1251">
|
||||
<META name="keywords" content="Калькулятор Б3-34 - краткое руководство.">
|
||||
</HEAD>
|
||||
|
||||
<BODY bgcolor="#FFFFFF">
|
||||
<TABLE width="96%" border="0" align="center">
|
||||
<TR>
|
||||
<TD height="102" width="33%"><FONT color="#FF0000">Внимание!</FONT> Данный
|
||||
документ находится в процессе разработки и может содержать ошибки.</TD>
|
||||
<TD height="102" width="28%"> </TD>
|
||||
<TD height="102" width="39%"><FONT size="-1"><I>Данный документ - есть синтез
|
||||
оригинального "Руководства по эксплуатации" с дополнениями автора
|
||||
программы "Калькулятор Б3-34". </I></FONT></TD>
|
||||
</TR>
|
||||
</TABLE>
|
||||
<P align="center"> </P>
|
||||
<P align="center"><B><FONT size="+2" color="#CC0000">Калькулятор Б3-34.</FONT></B></P>
|
||||
<P align="center"><B><FONT color="#000000">Содержание пакета:<BR>
|
||||
<A href="b3-34help0.htm">Краткое руководство</A></FONT></B><FONT color="#000000"><B>
|
||||
</B><FONT color="#666666">(этот файл) </FONT><B> <A href="b3-34help1.htm">Таблица
|
||||
команд</A> <A href="b3-34help2.htm"> Описание программы</A></B></FONT></P>
|
||||
<P align="center"><B><FONT size="+2" color="#CC0000"><BR>
|
||||
</FONT><FONT size="+2">Краткое руководство.</FONT></B></P>
|
||||
<P align="center"><B><BR>
|
||||
</B></P>
|
||||
<TABLE width="96%" border="0" align="center">
|
||||
<TR>
|
||||
<TD>
|
||||
<P align="center"><B>Нужен ли Вам такой калькулятор?</B></P>
|
||||
<P>Калькулятор <B>Б3-34</B> является программируемым микроклькулятором (ПМК)
|
||||
и предназначен для выполнения научных, инженерных и статистических расчётов.
|
||||
В отличие от простых калькуляторов, в <B>Б3-34</B> отсутствует клавиша
|
||||
= (равно). В Б3-34 сначала вводятся операнды, затем решается что с ними
|
||||
делать. Например, чтобы вычислить сумму 2+2 надо нажать на клавишу 2,
|
||||
затем на синюю клавишу "стрелка вверх", затем на клавишу 2 и
|
||||
на синюю клавишу +, на индикаторе высветится результат (4). Если Вам надо
|
||||
сохранить несколько длинных чисел для повторного их использования, достаточно
|
||||
после ввода числа нажать две клавиши - П и любую, от 0 до F, и продолжить
|
||||
работу. Повторим предыдущий пример, только при этом сохраним операнды
|
||||
в памяти. Нажимаем клавишу 2, клавишу П, клавишу 1, клавишу 2, клавишу
|
||||
П, клавишу 2, клавишу +, на индикаторе высветится результат (4). Теперь
|
||||
проверим, чему будет равно произведение введёных ранее чисел. Нажимаем
|
||||
клавишу ИП, клавишу 1, клавишу ИП, клавишу 2, синюю клавишу X (умножить).
|
||||
Этим все удобства "машинны" не исчерпываются. Они проявляются
|
||||
в полной мере тогда, когда требуются многочисленные вычисления для составление
|
||||
таблиц и графиков.</P>
|
||||
</TD>
|
||||
</TR>
|
||||
</TABLE>
|
||||
<BR>
|
||||
<TABLE width="96%" border="0" align="center">
|
||||
<TR>
|
||||
<TD>
|
||||
<P align="center"><B>Калькулятор имеет:</B></P>
|
||||
<UL>
|
||||
<LI> програмную память объёмом в 100 или 256 шагов;</LI>
|
||||
<LI>16 адресуемых регистров памяти для хранения данных или адресов перехода
|
||||
в программе;</LI>
|
||||
<LI> команды прямых и косвенных переходов в программе, команды вызова
|
||||
подпрограм и команды возврата из подпрограм;</LI>
|
||||
<LI>возможность обращения к подпрограмме внутри подпрограм. Глубина таких
|
||||
обращений равна 5;</LI>
|
||||
<LI>команды прямого и косвенного безусловного перехода;</LI>
|
||||
<LI>четыре типа команд прямого и косвенного условного перехода (по условиям
|
||||
x=0, x!=0 (не равно 0), x>=0 (больше или равняется 0), x<0);</LI>
|
||||
<LI>команды организации циклов;</LI>
|
||||
<LI>команды косвенной записи содержимого регистра X в регистры памяти;</LI>
|
||||
<LI>команды косвенной индикации содержимого регистров памяти;</LI>
|
||||
<LI>команды сброса счётчика адресов в нулевое состояние;</LI>
|
||||
<LI>команда пуска и остановки при автоматическом вычислении по программе;</LI>
|
||||
<LI>команда пошагового выполнения программы в режиме "Автоматическая работа";</LI>
|
||||
<LI>индикация кодов трёх последовательных шагов программы и текущего состояния
|
||||
счётчика адресов;</LI>
|
||||
<LI>клавиши пошагового просмотра программы в сторону увеличения или уменьшения
|
||||
адресов в режиме "Программирование";</LI>
|
||||
<LI>команда вывода результатов в файл для последующей печати на принтере</LI>
|
||||
</UL>
|
||||
</TD>
|
||||
</TR>
|
||||
</TABLE>
|
||||
<BR>
|
||||
<TABLE width="96%" border="0" align="center">
|
||||
<TR>
|
||||
<TD>
|
||||
<DIV align="center">
|
||||
<P><B>Ввод чисел.</B></P>
|
||||
<P align="left">Ввод чисел, операций и команд в микрокалькулятор осуществляется
|
||||
нажатием соответствующих клавиш левой кнопкой мыши. Имеется пока не
|
||||
полностью реализованная возможность ввода посредством клавиатуры. <FONT color="#999999">(Надо
|
||||
отметить, что сложность реализации ввода с клавиатуры обусловлена отсутствием
|
||||
подходящих по смыслу названий на клавишах стандартной клавиатуры. Автор
|
||||
был бы благодарен за ценный совет по этой проблеме.) <FONT color="#000000">Многие
|
||||
клавиши имеют двойную и тройную символику. Один символ изображён непосредственно
|
||||
на клавише, второй - над клавишей красным цветом, третий - снизу или
|
||||
справа от клавиши чёрным цветом. Ввод функции, символ которой изображён
|
||||
красным цветом над клавишей, осуществляется нажатием на префиксную клавишу
|
||||
F или К, затем на клавишу над которой изображён символ вводимой функции.
|
||||
Назначение клавиш приведено в <FONT color="#6600CC"><A href="b3-34help1.htm">таблице
|
||||
команд</A> <FONT color="#000000">(размер файла >81 кбайт).</FONT></FONT></FONT></FONT></P>
|
||||
</DIV>
|
||||
</TD>
|
||||
</TR>
|
||||
</TABLE>
|
||||
<BR>
|
||||
<TABLE width="96%" border="0" align="center">
|
||||
<TR>
|
||||
<TD>
|
||||
<P align="center"><B>Два режима работы калькулятора.</B></P>
|
||||
<P align="left"><B>"Автоматическая работа"</B> - основной режим работы.<BR>
|
||||
<B>"Программирование"</B> - режим предназначен для ввода кода программы,
|
||||
включается посредством нажатия на клавиши F и ПРГ. Выход из режима - нажатием
|
||||
клавиш F и АВТ.</P>
|
||||
</TD>
|
||||
</TR>
|
||||
</TABLE>
|
||||
<BR>
|
||||
<TABLE width="96%" border="0" align="center">
|
||||
<TR>
|
||||
<TD>
|
||||
<DIV align="center">
|
||||
<P><B>Регистры стека.</B></P>
|
||||
<P align="left"><FONT color="#999999"><FONT color="#000000">В микроклькуляторе
|
||||
имеются 5 операционных регистров X1, X, Y, Z, T. Регистр X служит для
|
||||
приёма и хранения вводимого числа и результата вычислений. Его содержимое
|
||||
отображается на индикаторе. </FONT><FONT color="#999999"><FONT color="#000000">Регистр
|
||||
Y</FONT></FONT><FONT color="#000000"> служит для приёма информации из
|
||||
регистра X, что обеспечивает при необходимости, ввод в регистр X второго
|
||||
числа. Занесение </FONT><FONT color="#999999"><FONT color="#000000">числа</FONT></FONT>
|
||||
<FONT color="#000000">в регистр Y происходит при нажатии на кнопку "стрелка
|
||||
вверх".</FONT></FONT></P>
|
||||
</DIV>
|
||||
</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD height="897">
|
||||
<TABLE width="100%" border="0">
|
||||
<TR>
|
||||
<TD width="17%" height="447"><IMG src="stack1.gif" width="119" height="159" alt="Рис. 1"></TD>
|
||||
<TD width="83%">
|
||||
<P align="center"><FONT size="+1">Схематичное представление регистров
|
||||
стека. </FONT></P>
|
||||
<P>Регистры стека X, Y, Z и T организованы по принципу магазинной
|
||||
памяти, когда последовательно записанная информация может быть считана
|
||||
только в последовательности, обратной последовательности записи
|
||||
(последнее записанное число является первым). Например, когда вводится
|
||||
операнд в регистр X командой чтения из регистра памяти, то содержимое
|
||||
регистра X копируется в регистр Y (сдвигается вверх), а предыдущее
|
||||
содержимое регистра Y копируется в регистр Z, предыдущее содержимое
|
||||
регистра Z копируется в регистр T. При выполнении <FONT color="#6600CC"><A href="#two_place_operation">двухместной
|
||||
операции</A></FONT> взаимодействуют регистры Y и X. Результат помещается
|
||||
в регистр X, регистр Y получает содержимое регистра Z, регистр Z
|
||||
получает содержимое регистра T, а содержимое регистра T остаётся
|
||||
неизменным. Регистр X1 получает содержимое регистра X, которое там
|
||||
было до выполнения этой операции (рис. 5). <A href="#register_X1">Регистр
|
||||
X1 </A>служит для сохранения предыдущего содержимого регистра X.
|
||||
</P>
|
||||
</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD width="17%" height="159"><IMG src="stack2.gif" width="119" height="159" align="top" alt="Рис. 2"></TD>
|
||||
<TD width="83%">
|
||||
<P align="center"> </P>
|
||||
<P align="center"><B>Команда продвижения стека вверх.<BR>
|
||||
</B>(стрелка вверх)</P>
|
||||
<P align="left">Сдвиг содержимого регистров стека происходит по схеме:
|
||||
X->Y->Z->T (рис. 2). Содержимое регистра результата предыдущей операции
|
||||
X1 не изменяется.</P>
|
||||
<P align="left"> </P>
|
||||
</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD width="17%" height="195"><IMG src="stack3.gif" width="119" height="159" alt="Рис. 3"></TD>
|
||||
<TD width="83%"> </TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD width="17%" height="168"><IMG src="stack4.gif" width="119" height="159" alt="Рис. 4"></TD>
|
||||
<TD width="83%">
|
||||
<P align="center"><B>Команда обмена содержимым регистров X и Y.<BR>
|
||||
</B>(на клавише изображено XY со стрелками)</P>
|
||||
<P align="center"><BR>
|
||||
Схема обмена содержимым регистров показана на рисунке 4.</P>
|
||||
</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD width="17%" height="174"><IMG src="stack5.gif" width="119" height="159" alt="Рис. 5"></TD>
|
||||
<TD width="83%"> </TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD width="17%" height="226"><IMG src="stack6.gif" width="119" height="176" alt="Рис. 6"></TD>
|
||||
<TD width="83%">
|
||||
<P align="center"><B><A name="register_X1"></A>Регистр предыдущего
|
||||
результата.</B></P>
|
||||
<P align="left">В дополнение к четырём стековым регистрам в микроклькуляторе
|
||||
имеется ещё один регистр , называемый регистром предыдущего результата.
|
||||
Этот регистр сохраняет значение числа, которое находилось в регистре
|
||||
X до выполнения операции. Для проверки этого числа нажмите клавиши
|
||||
F и Вх. При этом произойдёт перемещение информации в стеке (рис.
|
||||
6): X->Y->Z->T, X1->X.</P>
|
||||
</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD width="17%" height="180"><IMG src="stack7.gif" width="119" height="171" alt="Рис. 7"></TD>
|
||||
<TD width="83%" height="180">
|
||||
<DIV align="center">
|
||||
<P> </P>
|
||||
<P align="center"><B>Команда Rotate.<BR>
|
||||
</B>(в оригинале изображено кольцо со стрелками)</P>
|
||||
<P align="left">В результате выполнения этой команды обмен регистрами
|
||||
стека произойдёт по схеме: X->X1, T->Z->Y->X, X1->T (рис. 7).</P>
|
||||
</DIV>
|
||||
</TD>
|
||||
</TR>
|
||||
</TABLE>
|
||||
</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD>
|
||||
<DIV align="center">
|
||||
<P><B>Регистры общего назначения.</B></P>
|
||||
<P align="left">Это 16 адресуемых регистров памяти для хранения данных
|
||||
или адресов переходов в программе. Номер регистра обозначается шеснадцатиричным
|
||||
числом - от 0 до F. В оригинале "руководства по эксплуатации"
|
||||
в название этих регистров введён префикс RG (RG0, RG1 ... и т.д.). Из
|
||||
<FONT color="#999999"><FONT color="#000000"><FONT color="#6600CC"><A href="b3-34help1.htm">таблицы
|
||||
команд </A></FONT></FONT></FONT>видно, что код команд обращения к регистрам
|
||||
однозначно определяется вторым полубайтом кода команды, например, таких
|
||||
как 40 -4F (запись в регистр памяти - клавиши П, 0 до П.F), 60 -6F (извлечение
|
||||
из регистров памяти в регистр X - клавиши П, 0 до П.F) и других командах.
|
||||
</P>
|
||||
</DIV>
|
||||
</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD>
|
||||
<DIV align="center">
|
||||
<P><B><A name="stack_of_return"></A>Регистры стека возврата.</B></P>
|
||||
<P align="left">Калькулятор имеет 5 регистров образующих стек возврата,
|
||||
которые програмно недоступны, однако они позволяют программе вызвать
|
||||
до 5-ти вложенных подпрограм. В ячейках стека возврата хранятся адреса
|
||||
возврата из подпрограм.</P>
|
||||
</DIV>
|
||||
</TD>
|
||||
</TR>
|
||||
</TABLE>
|
||||
<BR>
|
||||
<TABLE width="96%" border="0" align="center">
|
||||
<TR>
|
||||
<TD height="326">
|
||||
<DIV align="left">
|
||||
<P align="center"><A name="one_place_operation"></A><B>Одноместные операции.</B></P>
|
||||
<P>Одноместные операции - это операции для выполнения которых требуется
|
||||
один операнд. Операнд, над которам производится операция находится в
|
||||
регистре X и высвечивается на индикаторе. Результат операции записывается
|
||||
в регистр X, при этом содержимое остальных регистров не изменяется.
|
||||
Следующие операции в Б3-34 являются одноместными: </P>
|
||||
</DIV>
|
||||
<UL>
|
||||
<LI>
|
||||
<DIV align="left">вычисление логарифмических функций (lg, ln);</DIV>
|
||||
</LI>
|
||||
<LI>степенных функций (x^2 - возведение в квадрат, e^x, 10^x);</LI>
|
||||
<LI>тригонометрических прямых и обратных функций ();</LI>
|
||||
<LI>вычисление квадратного корня (sqr);</LI>
|
||||
<LI>вычисление обратной величины(1/x);</LI>
|
||||
<LI>ввод числа пи (PI);<BR>
|
||||
</LI>
|
||||
</UL>
|
||||
</TD>
|
||||
</TR>
|
||||
</TABLE>
|
||||
<BR>
|
||||
<TABLE width="96%" border="0" align="center">
|
||||
<TR>
|
||||
<TD>
|
||||
<DIV align="center">
|
||||
<P><A name="two_place_operation"></A><B>Двухместные операции.</B></P>
|
||||
<P align="left">Двухместные операции - это операции для выполнения которых
|
||||
требуется два операнда, расположеных в регистрах X и Y. К таким операциям
|
||||
относятся четыре арифметических действия (сложение, вычитание, умножение
|
||||
и деление) и вычисление степенной функции x^y (x в степени y). Результат
|
||||
операции записывается в регистр X. При этом информация в регистре Y,
|
||||
хранящаяся до выполнения операции заменяется <FONT color="#000000">содержимым
|
||||
регистра Z. Схема передвижения в стеке T=T->Z->Y, X1=содержимому
|
||||
регистра X до выполнения операции</FONT>.</P>
|
||||
</DIV>
|
||||
</TD>
|
||||
</TR>
|
||||
</TABLE>
|
||||
<BR>
|
||||
<TABLE width="96%" border="0" align="center">
|
||||
<TR>
|
||||
<TD>
|
||||
<DIV align="center">
|
||||
<P><B><A name="chain_calculations"></A>Цепочечные вычисления.</B></P>
|
||||
<P align="left"> Если на индикаторе высвечивается результат предыдущих
|
||||
вычислений, то набор на клавиатуре нового числа автоматически передвигает
|
||||
информацию из регистра X в регистр Y. <FONT color="#000000">Перемещение
|
||||
в стеке происходит по схеме X->Y->Z->T, предыдущее содержимое
|
||||
T теряется</FONT>. Таким образом, результат вычисления предыдущей операции
|
||||
может участвовать в качестве второго операнда при выполнении последующих
|
||||
вычислений. </P>
|
||||
</DIV>
|
||||
</TD>
|
||||
</TR>
|
||||
</TABLE>
|
||||
<BR>
|
||||
<TABLE width="96%" border="0" align="center">
|
||||
<TR>
|
||||
<TD>
|
||||
<P align="center"><B><A name="bp_jump"></A>Команда безусловного перехода.</B></P>
|
||||
<P>Команда безусловного перехода реализуется клавишей БП и последующим вводом
|
||||
адреса перехода. Эта команда прерывает естественный порядок выполнения
|
||||
программы и осуществляет преход к выполнению команды, указанной в адресе
|
||||
перехода. Длина команды - два шага. Её можно использавать ещё для ручного
|
||||
перехода к желаемому адресу при отладке программы.</P>
|
||||
</TD>
|
||||
</TR>
|
||||
</TABLE>
|
||||
<BR>
|
||||
<TABLE width="96%" border="0" align="center">
|
||||
<TR>
|
||||
<TD>
|
||||
<DIV align="center">
|
||||
<P><A name="conditional_jump"></A><B>Команды перехода по условию.</B></P>
|
||||
<P align="left">Команды перехода по условию ( x<0 либо x=0, x>=0,
|
||||
x!=0 (не равно нулю)) реализуются клавишей F, клавишей условия "
|
||||
x<0", "x=0", "x>=0", "x!=0"
|
||||
и вводом адреса перехода. Проверяется сожержимое регистра X на выполнение
|
||||
заданного условия. Если условие <FONT color="#CC0000">не выполняется</FONT>,
|
||||
то следующей по программе будет выполнена команда, адрес которой указан
|
||||
непосредственно в команде условного перехода. Если условие выполняется,
|
||||
то следующей командой будет следующая за адресом прехода команда. Длина
|
||||
команды - два байта (шага) програмной памяти.</P>
|
||||
</DIV>
|
||||
</TD>
|
||||
</TR>
|
||||
</TABLE>
|
||||
<BR>
|
||||
<TABLE width="96%" border="0" align="center">
|
||||
<TR>
|
||||
<TD>
|
||||
<DIV align="center">
|
||||
<P><A name="routine_call"></A><B>Команда вызова продпрограммы.</B></P>
|
||||
<P align="left">Команда вызова продпрограммы реализуется клавишей ПП и
|
||||
сдующему за ней адресом (начала подпрограммы). При этом в <A href="#stack_of_return">стек
|
||||
возврата</A> записывается следующий адрес программы, на который в дальнейшем
|
||||
будет сделан взврат из подпрограммы (В/О). Длина команды - два шага.
|
||||
В режиме "Автоматическая работа", когда программа не выполняется,
|
||||
нажатие на клавишу ПП производит пошаговое выполнение программы.</P>
|
||||
</DIV>
|
||||
</TD>
|
||||
</TR>
|
||||
</TABLE>
|
||||
<BR>
|
||||
<TABLE width="96%" border="0" align="center">
|
||||
<TR>
|
||||
<TD>
|
||||
<DIV align="center">
|
||||
<P><A name="indirect_routine_call"></A><B>Команды косвенного вызова продпрограммы.</B></P>
|
||||
<P align="left">Команда косвенного вызова продпрограммы реализуется клавишами
|
||||
К , ПП и клавишей адресуемого регистра ( 0 ... F ). <A href="#stack_of_return">
|
||||
</A> Длина команды - один шаг. С помощью этой команда происходит <FONT color="#660099">
|
||||
<A href="#registers_modification_table">модификация</A></FONT> адреса,
|
||||
хранящегося в адресуемом регистре, индекс которого входит в команду.
|
||||
Затем, записывается в <A href="#stack_of_return">стек возврата</A> следующий
|
||||
адрес программы, на который в дальнейшем будет сделан взврат из подпрограммы
|
||||
(командой В/О), и осуществляется вызов подпрограммы, записанной по модифицированному
|
||||
адресу. </P>
|
||||
</DIV>
|
||||
</TD>
|
||||
</TR>
|
||||
</TABLE>
|
||||
<BR>
|
||||
<TABLE width="96%" border="0" align="center">
|
||||
<TR>
|
||||
<TD>
|
||||
<DIV align="center">
|
||||
<P><A name="routine_return"></A><B>Команда возврата из продпрограммы.</B></P>
|
||||
<P align="left">Команда возврата из продпрограммы реализуется клавишей
|
||||
В/О. Из <A href="#stack_of_return">стека возврата</A> читается последний
|
||||
адрес, который записывается туда во время вызова подпрограммы посредством
|
||||
команды ПП ... (или К ПП ...), и происходит переход на этот адрес. </P>
|
||||
</DIV>
|
||||
</TD>
|
||||
</TR>
|
||||
</TABLE>
|
||||
<BR>
|
||||
<TABLE width="96%" border="0" align="center">
|
||||
<TR>
|
||||
<TD>
|
||||
<P align="center"><A name="#Косвенный безусловный переход"></A><B>Косвенный
|
||||
безусловный переход.</B></P>
|
||||
<P>Команда косвенного безусловного перехода по модифицированному адресу
|
||||
реализуеся клавишами К, БП и клавишей адресуемого регистра (от 0 до F,
|
||||
<FONT color="#000000">от A до F - надписи чёрного цвета</FONT>). При исполнении
|
||||
этой команды происходит модификация адреса, хранящегося в адресуемом регистре
|
||||
(индекс которого входит в команду), и происходит переход к испонению команды,
|
||||
записанной по новому (модифицированному) адресу. Модификация адреса происходит
|
||||
в зависимости от номера регистра, входящего в команду. Если команда содержит
|
||||
номер одного из регистров 0, 1, 2, 3, то при выполнении команды из содержимого
|
||||
адресуемого регистра вычитается 1. Если номер адресуемого регистра 4 ,
|
||||
5 или 6, то к содержимому регистра прибавляется 1. Если номер адресуемого
|
||||
регистра от 7 до F, то содержимое адресуемого регистра не изменяется.</P>
|
||||
</TD>
|
||||
</TR>
|
||||
</TABLE>
|
||||
<P align="center"><A name="registers_modification_table"></A><B>Таблица модификации
|
||||
при косвенной адресации.</B></P>
|
||||
<TABLE width="96%" border="1" align="center" bgcolor="#E0FFF0">
|
||||
<TR>
|
||||
<TD width="12%">
|
||||
<DIV align="center">Регистр </DIV>
|
||||
</TD>
|
||||
<TD width="20%">
|
||||
<DIV align="center">Модификация</DIV>
|
||||
</TD>
|
||||
<TD width="68%">
|
||||
<DIV align="center">Надпись</DIV>
|
||||
</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD width="12%">
|
||||
<DIV align="center">0</DIV>
|
||||
</TD>
|
||||
<TD width="20%">
|
||||
<DIV align="center">-1</DIV>
|
||||
</TD>
|
||||
<TD width="68%">
|
||||
<DIV align="center">Клавиша с надписью 0</DIV>
|
||||
</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD width="12%">
|
||||
<DIV align="center">1</DIV>
|
||||
</TD>
|
||||
<TD width="20%">
|
||||
<DIV align="center">-1</DIV>
|
||||
</TD>
|
||||
<TD width="68%">
|
||||
<DIV align="center">Клавиша с надписью 1</DIV>
|
||||
</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD width="12%">
|
||||
<DIV align="center">2</DIV>
|
||||
</TD>
|
||||
<TD width="20%">
|
||||
<DIV align="center">-1</DIV>
|
||||
</TD>
|
||||
<TD width="68%">
|
||||
<DIV align="center">Клавиша с надписью 2</DIV>
|
||||
</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD width="12%">
|
||||
<DIV align="center">3</DIV>
|
||||
</TD>
|
||||
<TD width="20%">
|
||||
<DIV align="center">-1</DIV>
|
||||
</TD>
|
||||
<TD width="68%">
|
||||
<DIV align="center">Клавиша с надписью 3</DIV>
|
||||
</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD width="12%">
|
||||
<DIV align="center">4</DIV>
|
||||
</TD>
|
||||
<TD width="20%">
|
||||
<DIV align="center">+1</DIV>
|
||||
</TD>
|
||||
<TD width="68%">
|
||||
<DIV align="center">Клавиша с надписью 4</DIV>
|
||||
</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD width="12%">
|
||||
<DIV align="center">5</DIV>
|
||||
</TD>
|
||||
<TD width="20%">
|
||||
<DIV align="center">+1</DIV>
|
||||
</TD>
|
||||
<TD width="68%">
|
||||
<DIV align="center">Клавиша с надписью 5</DIV>
|
||||
</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD width="12%">
|
||||
<DIV align="center">6</DIV>
|
||||
</TD>
|
||||
<TD width="20%">
|
||||
<DIV align="center">+1</DIV>
|
||||
</TD>
|
||||
<TD width="68%">
|
||||
<DIV align="center">Клавиша с надписью 6</DIV>
|
||||
</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD width="12%">
|
||||
<DIV align="center">7</DIV>
|
||||
</TD>
|
||||
<TD width="20%">
|
||||
<DIV align="center">нет</DIV>
|
||||
</TD>
|
||||
<TD width="68%">
|
||||
<DIV align="center">Клавиша с надписью 7</DIV>
|
||||
</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD width="12%">
|
||||
<DIV align="center">8</DIV>
|
||||
</TD>
|
||||
<TD width="20%">
|
||||
<DIV align="center">нет</DIV>
|
||||
</TD>
|
||||
<TD width="68%">
|
||||
<DIV align="center">Клавиша с надписью 8</DIV>
|
||||
</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD width="12%">
|
||||
<DIV align="center">9</DIV>
|
||||
</TD>
|
||||
<TD width="20%">
|
||||
<DIV align="center">нет</DIV>
|
||||
</TD>
|
||||
<TD width="68%">
|
||||
<DIV align="center">Клавиша с надписью 9</DIV>
|
||||
</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD width="12%">
|
||||
<DIV align="center">A</DIV>
|
||||
</TD>
|
||||
<TD width="20%">
|
||||
<DIV align="center">нет</DIV>
|
||||
</TD>
|
||||
<TD width="68%">
|
||||
<DIV align="center">Клавиша с надписью , (запятая), под клавишей чёрным
|
||||
цветом - латинская буква A. </DIV>
|
||||
</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD width="12%">
|
||||
<DIV align="center">B</DIV>
|
||||
</TD>
|
||||
<TD width="20%">
|
||||
<DIV align="center">нет</DIV>
|
||||
</TD>
|
||||
<TD width="68%">
|
||||
<DIV align="center">Клавиша с надписью /-/, под клавишей чёрным цветом -
|
||||
латинская буква B. </DIV>
|
||||
</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD width="12%">
|
||||
<DIV align="center">C</DIV>
|
||||
</TD>
|
||||
<TD width="20%">
|
||||
<DIV align="center">нет</DIV>
|
||||
</TD>
|
||||
<TD width="68%">
|
||||
<DIV align="center">Клавиша с надписью ВП, под клавишей чёрным цветом -
|
||||
латинская буква C. </DIV>
|
||||
</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD width="12%">
|
||||
<DIV align="center">D</DIV>
|
||||
</TD>
|
||||
<TD width="20%">
|
||||
<DIV align="center">нет</DIV>
|
||||
</TD>
|
||||
<TD width="68%">
|
||||
<DIV align="center">Клавиша с надписью Cx, под клавишей чёрным цветом -
|
||||
латинская буква D. </DIV>
|
||||
</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD width="12%">
|
||||
<DIV align="center">E</DIV>
|
||||
</TD>
|
||||
<TD width="20%">
|
||||
<DIV align="center">нет</DIV>
|
||||
</TD>
|
||||
<TD width="68%">
|
||||
<DIV align="center">Клавиша с надписью в виде стрелки вверх, справа от клавиши
|
||||
чёрным цветом - латинская буква E. </DIV>
|
||||
</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD width="12%">
|
||||
<DIV align="center">F</DIV>
|
||||
</TD>
|
||||
<TD width="20%">
|
||||
<DIV align="center">нет</DIV>
|
||||
</TD>
|
||||
<TD width="68%">
|
||||
<DIV align="center">Клавиша с надписью - (знак минус), справа от клавиши
|
||||
чёрным цветом - латинская буква F. </DIV>
|
||||
</TD>
|
||||
</TR>
|
||||
</TABLE>
|
||||
<BR>
|
||||
<TABLE width="96%" border="0" height="125" align="center">
|
||||
<TR>
|
||||
<TD>
|
||||
<P align="center"><A name="indirect_conditional_jump"></A><B>Косвенный переход
|
||||
по условию.</B></P>
|
||||
<P>Команды косвенных переходов по условию реализуется клавишей "К",
|
||||
клавишей условия ( x<0 либо x=0, x>=0, x!=0 (не равно нулю)) и клавишей
|
||||
адресуемого регистра (от "0" до "F"). С помощью этой
|
||||
команды проверяется содержимое регистра X на выполнение заданного условия.
|
||||
Если условие не выполняется (<FONT color="#000000">обратите внимание,
|
||||
именно - когда</FONT><FONT color="#999999"> <FONT color="#CC0000">не выпоняется</FONT></FONT>),
|
||||
то происходит <FONT color="#660099"> <A href="#registers_modification_table">модификация</A></FONT>
|
||||
(изменение) адреса, хранящегося в адресуемом регистре, индекс которого
|
||||
входит в команду, и осуществляется переход к выполнению команды, записанной
|
||||
по модифицированному адресу. Если условие выполняется, то происходит переход
|
||||
к выполнению следующей команды. При этом адрес, записанный в адресуемом
|
||||
регистре, не модифицируется.</P>
|
||||
</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD> </TD>
|
||||
</TR>
|
||||
</TABLE>
|
||||
<TABLE width="96%" border="0" align="center">
|
||||
<TR>
|
||||
<TD>
|
||||
<DIV align="center">
|
||||
<P><A name="indirect_mem_read"></A><B>Команды косвенного чтения регистра
|
||||
памяти.</B></P>
|
||||
<P align="left">Команда модифицирует регистр , номер которого входит в
|
||||
команду (согласно <A href="#registers_modification_table">таблице модификации)</A>,
|
||||
после чего происходит чтение соответствующего регистра в регистр X.
|
||||
Пример. Если содержимое регистра 0 до выполнения команды было равно
|
||||
3, то при выполнении команды К ИП 0 уменьшается содержимое регистра
|
||||
0 (теперь оно равно 2) и происходит чтение содержимого регистра 2 в
|
||||
регистр X.</P>
|
||||
</DIV>
|
||||
</TD>
|
||||
</TR>
|
||||
</TABLE>
|
||||
<BR>
|
||||
<TABLE width="96%" border="0" align="center">
|
||||
<TR>
|
||||
<TD>
|
||||
<DIV align="center">
|
||||
<P><A name="indirect_mem_write"></A><B>Команды косвенной записи в регистр
|
||||
памяти.</B></P>
|
||||
<P align="left">Команда модифицирует регистр , номер которого входит в
|
||||
команду (согласно <A href="#registers_modification_table">таблице модификации</A>),
|
||||
после чего происходит запись в соответствующий регистр содержимое регистра
|
||||
X. Пример. Если содержимое регистра 0 до выполнения команды было равно
|
||||
3, то при выполнении команды К П 0 уменьшается содержимое регистра 0
|
||||
(теперь оно равно 2) и происходит запись содержимого регистра X в регистр
|
||||
2.</P>
|
||||
</DIV>
|
||||
</TD>
|
||||
</TR>
|
||||
</TABLE>
|
||||
<BR>
|
||||
<TABLE width="96%" border="0" align="center">
|
||||
<TR>
|
||||
<TD>
|
||||
<DIV align="center">
|
||||
<P><A name="L0_discription"></A><B>Команды организации циклов.</B></P>
|
||||
<P align="left">Команды организации циклов организуются клавишами L0,
|
||||
L1, L2, L3 в сочетании с префиксной клавишей F. Команда состоит из кода
|
||||
команды и следующего за ней адреса перехода. При выполнении команды
|
||||
L0 происходит обращение к регистру памяти RG0. При каждом выполнении
|
||||
этой команды из содержимого регистра 0 вычитается 1 и производится анализ
|
||||
его на нуль. Если оно не равно нулю, происходит переход к выполнению
|
||||
команды перехода, входящего в команду. Если содержимое регистра памяти
|
||||
RG0 равно нулю, то цикл завершается и выполняется следующая команда.
|
||||
Длина команды - два шага.</P>
|
||||
</DIV>
|
||||
</TD>
|
||||
</TR>
|
||||
</TABLE>
|
||||
<BR>
|
||||
<TABLE width="96%" border="0" align="center">
|
||||
<TR>
|
||||
<TD>
|
||||
<P align="center"><B>Программирование.</B></P>
|
||||
<P> Вход в режим программирования осущесвляется посредством нажатия на клавиши
|
||||
F и ПРГ. Калькулятор перейдёт на текущий адрес программы. Если требуется
|
||||
перейти на заданый адрес, то перед входом в режим программирования надо
|
||||
перейти на этот адрес нажатием клавиши БП и вводом адреса. Перемещение
|
||||
по программе происходит автоматически при вводе команд или принудительно
|
||||
- клавишами ШГ. Справа на индикаторе высвечивается адрес следующего шага
|
||||
программы. В других полях индикатора высвечиваются (3 поля) коды введённых
|
||||
команд в порядке возрастания, слева направо. <BR>
|
||||
Если необходимо исключить из программы какую-либо команду, необходимо
|
||||
нажать клавишу К и клавишу НОП, шаг программы заполнится командой, которая
|
||||
ничего не делает. Выход из режима "Программирование" осуществляется
|
||||
нажатием на клавиши F и АВТ.</P>
|
||||
</TD>
|
||||
</TR>
|
||||
</TABLE>
|
||||
<BR>
|
||||
<TABLE width="96%" border="0" align="center">
|
||||
<TR>
|
||||
<TD>
|
||||
<DIV align="center">
|
||||
<P><B>Вычисление по программе.</B></P>
|
||||
<P align="left">Вычисления по программе начинаются нажатием на клавишу
|
||||
С/П. Начинается выполнение программы с текущего адреса. Если требуется
|
||||
начать (или продолжить) программу с конкретного адреса, то необходимо
|
||||
перейти на этот адрес нажатием клавиши БП и вводом адреса. Останов вычислений
|
||||
осуществляется повторным нажатием клавиши С/П. </P>
|
||||
</DIV>
|
||||
</TD>
|
||||
</TR>
|
||||
</TABLE>
|
||||
<BR>
|
||||
<TABLE width="96%" border="0" align="center">
|
||||
<TR>
|
||||
<TD>
|
||||
<DIV align="center">
|
||||
<P><B>Отличия от оригиналального Б3-34.</B></P>
|
||||
<P align="left">При косвенном обращении команд к регистрам, когда должен
|
||||
быть считан номер регистра, от содержимого стчитываемого регистра выделяется
|
||||
целая часть (дробная не учитывается, но и не меняется), из которой выделятся
|
||||
младшее значимое, не превышающее количества регистров памяти минус 1
|
||||
(это 4 младших бита). В случае считывания адреса перехода используется
|
||||
целая часть содержимого регистра. Если адрес перехода окажется за пределами
|
||||
программы, - программа выдаст соответствующее предупреждение. </P>
|
||||
</DIV>
|
||||
</TD>
|
||||
</TR>
|
||||
</TABLE>
|
||||
<P align="center"><!-- #BeginDate format:Sw1m -->5 May, 2002 3:02<!-- #EndDate --> </P>
|
||||
</BODY>
|
||||
</HTML>
|
3384
programs/emulator/PrMK/trunk/docs/b3-34help1.htm
Normal file
236
programs/emulator/PrMK/trunk/docs/b3-34help2.htm
Normal file
@ -0,0 +1,236 @@
|
||||
<HTML>
|
||||
<HEAD>
|
||||
<TITLE>Б3-34 - программа</TITLE>
|
||||
<META http-equiv="Content-Type" content="text/html; charset=windows-1251">
|
||||
</HEAD>
|
||||
|
||||
<BODY bgcolor="#FFFFFF">
|
||||
<TABLE width="96%" border="0" align="center">
|
||||
<TR>
|
||||
<TD height="102" width="33%"><FONT color="#FF0000">Внимание!</FONT> Данный
|
||||
документ находится в процессе разработки и может содержать ошибки.</TD>
|
||||
<TD height="102" width="28%"> </TD>
|
||||
<TD height="102" width="39%"><FONT size="-1"></FONT></TD>
|
||||
</TR>
|
||||
</TABLE>
|
||||
<P align="center"><B><FONT size="+2" color="#CC0000">Калькулятор Б3-34.<BR>
|
||||
</FONT></B><B><FONT color="#000000"><A href="b3-34help0.htm">Краткое руководство</A></FONT></B><FONT color="#000000"><FONT color="#666666"><B>.</B></FONT><B>
|
||||
<A href="b3-34help1.htm">Таблица команд</A>.<BR>
|
||||
<A href="b3-34help2.htm"> Описание программы</A> </B><FONT color="#666666">(этот
|
||||
файл)<B></B></FONT><B>. </B></FONT><B><FONT size="+2" color="#CC0000"><BR>
|
||||
</FONT><FONT size="+2">Описание программы.</FONT></B></P>
|
||||
<P align="center"> </P>
|
||||
<TABLE width="96%" border="0" align="center" height="119">
|
||||
<TR>
|
||||
<TD>
|
||||
<P align="center"><B>Внешний вид.</B></P>
|
||||
<UL>
|
||||
<LI>Линейка адреса. Предназначена для индикации текущего адреса программы.
|
||||
Может быть отключена соответствующей установкой программы из меню "Установки".</LI>
|
||||
<LI>Поле текстового сообщения. Предназначено для сообщения об ошибке или
|
||||
об особом состоянии калькулятора.</LI>
|
||||
<LI>Включатель питания. Очищаются все регистры, стек и стек возврата.
|
||||
Программа при отключении питания не изменяется.</LI>
|
||||
<LI>Переключатель радианы - градусы. Представление углов для операций
|
||||
с sin, cos, tg, arcsin, arccos, arctg.</LI>
|
||||
<LI>Индикатор Б3-34. </LI>
|
||||
<LI>Клавиши от F до Сx (всего 30 шт.). Для ввода команд.</LI>
|
||||
<LI>Текстовое поле для индикации текущего адреса программы в цифровом
|
||||
виде. Находится справа от клавиши ПП.</LI>
|
||||
</UL>
|
||||
</TD>
|
||||
</TR>
|
||||
</TABLE>
|
||||
<BR>
|
||||
<TABLE width="96%" border="0" align="center" height="119">
|
||||
<TR>
|
||||
<TD>
|
||||
<P align="center"><B>Содержание меню "Программа".</B></P>
|
||||
<UL>
|
||||
<LI>"Новая" - создание новой программы</LI>
|
||||
<LI>"Перезагрузить" - загрузить текщую программу из состава
|
||||
штатных программ.</LI>
|
||||
<LI>"Загрузить" - загрузить программу из состава штатных программ.</LI>
|
||||
<LI>"Сохранить как" - сохранить программу в составе штатных
|
||||
под новым именем.</LI>
|
||||
<LI>"Сохранить" - сохранить программу, если она имеется в составе
|
||||
штатных и текст программы изменился. </LI>
|
||||
<LI>"Сохранить всё" - сохранить программу, если она имеется
|
||||
в составе штатных, её регистры, стек и стек возврата. </LI>
|
||||
<LI>"Свойства" - вызов окна со свойствами текущей программы.</LI>
|
||||
<LI>"В текст" - вызов окна трансляции кодов программы в текстовый
|
||||
формат. </LI>
|
||||
<LI>"Из текста" - вызов окна загрузки программы из тектового
|
||||
файла. </LI>
|
||||
<LI>"Вывод в файл" - показать окно вывода в файл. Доступно при
|
||||
наличии выведенного текста. </LI>
|
||||
<LI>"Скорость" - показать окно установок скорости выполнения
|
||||
программы. </LI>
|
||||
<LI>"Регистры" - показать окно с содержимым всех регистров.</LI>
|
||||
<LI>"Установки" - показать окно с общими опциями программы.</LI>
|
||||
<LI>"Горячая клавиша" - окно выбора клавиши компьютера для запуска
|
||||
программы "Калькулятор Б3-34" или другой программы.</LI>
|
||||
<LI>"Выход" - выход из программы.</LI>
|
||||
</UL>
|
||||
<P> </P>
|
||||
</TD>
|
||||
</TR>
|
||||
</TABLE>
|
||||
<BR>
|
||||
<TABLE width="96%" border="0" align="center" height="119">
|
||||
<TR>
|
||||
<TD>
|
||||
<P align="center"><B>Содержание меню "Правка".</B></P>
|
||||
<UL>
|
||||
<LI>"Вставить" - команда вставки числа из текстового буфера
|
||||
обмена (системы).</LI>
|
||||
<LI>"Копировать" - команда копирования содержимого ренистра
|
||||
X (что видно и на индикаторе) в текстовый буфер обмена системы.</LI>
|
||||
<LI>"Очистить регистры" - обнуляет 16 регистров памяти.</LI>
|
||||
<LI>"Очистить стек" - обнуляет все регистры стека.</LI>
|
||||
<LI>"Очистить стек возврата" - обнуляет регистры стека возврата.</LI>
|
||||
<LI>"Очистить всё" - действует как и вкылючатель питания. Очищаются
|
||||
все регистры, стек и стек возврата. Программа не изменяется.</LI>
|
||||
<LI>"Очистить прогр. память" - очищает програмную память.</LI>
|
||||
<LI>"Следующее окно" - переключение между дечерними окнами.</LI>
|
||||
</UL>
|
||||
</TD>
|
||||
</TR>
|
||||
</TABLE>
|
||||
<BR>
|
||||
<TABLE width="96%" border="0" align="center" height="119">
|
||||
<TR>
|
||||
<TD>
|
||||
<P align="center"><B>Содержание меню "Помощь".</B></P>
|
||||
<UL>
|
||||
<LI>"Помощь" - вызов файла помощи (b3-34help0.htm)</LI>
|
||||
<LI>"О версии Б3-34" - сообщение об изменениях или особенностях
|
||||
данной версии программы.</LI>
|
||||
<LI>"Про это" - об авторе этой (пока недоделанной) программы.</LI>
|
||||
<LI>"На сайт автора" - для скачивания последней версии программы.</LI>
|
||||
<LI>"Ошибки" - сообщения об событиях в программе, служит для
|
||||
отладки программы b3_34.exe.</LI>
|
||||
</UL>
|
||||
</TD>
|
||||
</TR>
|
||||
</TABLE>
|
||||
<BR>
|
||||
<TABLE width="96%" border="0" height="125" align="center">
|
||||
<TR>
|
||||
<TD>
|
||||
<P align="center"><B>Калькулятор имеет:</B></P>
|
||||
<UL>
|
||||
<LI> програмную память объёмом в 100 или 256 шагов;</LI>
|
||||
<LI>16 адресуемых регистров памяти для хранения данных или адресов перехода
|
||||
в программе;</LI>
|
||||
<LI> команды прямых и косвенных переходов в программе, команды вызова
|
||||
подпрограм и команды возврата из подпрограм;</LI>
|
||||
<LI>возможность обращения к подпрограмме внутри подпрограм. Глубина таких
|
||||
обращений равна 5;</LI>
|
||||
<LI>команды прямого и косвенного безусловного перехода;</LI>
|
||||
<LI>четыре типа команд прямого и косвенного условного перехода (по условиям
|
||||
x=0, x!=0 (не равно 0), x>=0 (больше или равняется 0), x<0);</LI>
|
||||
<LI>команды организации циклов;</LI>
|
||||
<LI>команды косвенной записи содержимого регистра X в регистры памяти;</LI>
|
||||
<LI>команды косвенной индикации содержимого регистров памяти;</LI>
|
||||
<LI>команды сброса счётчика адресов в нулевое состояние;</LI>
|
||||
<LI>команда пуска и остановки при автоматическом вычислении по программе;</LI>
|
||||
<LI>команда пошагового выполнения программы в режиме "Автоматическая работа";</LI>
|
||||
<LI>индикация кодов трёх последовательных шагов программы и текущего состояния
|
||||
счётчика адресов;</LI>
|
||||
<LI>клавиши пошагового просмотра программы в сторону увеличения или уменьшения
|
||||
адресов в режиме "Программирование";</LI>
|
||||
<LI>команда вывода результатов в файл для последующей печати на принтере.<BR>
|
||||
<BR>
|
||||
</LI>
|
||||
</UL>
|
||||
</TD>
|
||||
</TR>
|
||||
</TABLE>
|
||||
<BR>
|
||||
<TABLE width="96%" border="0" align="center" height="119">
|
||||
<TR>
|
||||
<TD>
|
||||
<P align="center"><B>Установки программы.</B></P>
|
||||
<UL>
|
||||
<LI>"Сброс калькулятора при выключении питания" - сброс всех
|
||||
регистров. </LI>
|
||||
<LI>"Раннее обнаружение ошибок" - .</LI>
|
||||
<LI>"Про это" - об авторе этой (пока недоделанной) программы.</LI>
|
||||
<LI>"На сайт автора" - для скачивания последней версии программы.</LI>
|
||||
<LI>"Ошибки" - сообщения об событиях в программе, служит для
|
||||
отладки программы b3_34.exe.</LI>
|
||||
</UL>
|
||||
</TD>
|
||||
</TR>
|
||||
</TABLE>
|
||||
<P align="center"> Выписка из программы о назначении клавиш управления со стандартной
|
||||
IBM клавиатуры для версии программы 1.31.</P>
|
||||
<P><FONT size="-1">{1,0x29,0,"клавиша ` (~)","клавиша калькулятора F (индекс 0)"},//<BR>
|
||||
{1,0x14D,1,"клавиша Стрелка вправо","калькулятора ШГ вправо (индекс 1)"},//<BR>
|
||||
{1,0x14B,2,"клавиша Стрелка влево","калькулятора ШГ влево (индекс 2)"},//<BR>
|
||||
{1,0x147,3,"клавиша Home","клавиша калькулятора В/О (индекс 3)"},//<BR>
|
||||
{1,0x14F,4,"клавиша End","клавиша калькулятора С/П (индекс 4)"},//<BR>
|
||||
{1,0x25,5,"клавиша лат. K","клавиша калькулятора K (индекс 5)"},//<BR>
|
||||
{1,0x13,5,"клавиша рус. K","клавиша калькулятора K (индекс 5)"},//<BR>
|
||||
{1,0x17,6,"клавиша I","клавиша калькулятора ИП (индекс 6)"},//<BR>
|
||||
{1,0x19,7,"клавиша лат.P ","клавиша калькулятора П (индекс 7)"},//<BR>
|
||||
{1,0x22,7,"клавиша рус.П(Лат.G)","клавиша калькулятора П (индекс 7)"},//<BR>
|
||||
{1,0x33,8,"клавиша рус.Б(или запятая)","клавиша калькулятора БП (индекс 8)"},//<BR>
|
||||
{1,0x1F,9,"клавиша S ","клавиша калькулятора ПП (индекс 9)"},//<BR>
|
||||
{1,0x47,10,"клавиша Цифр. клав. 7 ","клавиша калькулятора 7 (индекс 10)"},//<BR>
|
||||
{1,0x08,10,"клавиша 7 ","клавиша калькулятора 7 (индекс 10)"},//<BR>
|
||||
{1,0x48,11,"клавиша Цифр. клав. 8 ","клавиша калькулятора 8 (индекс 11)"},//<BR>
|
||||
{1,0x09,11,"клавиша 8 ","клавиша калькулятора 8 (индекс 11)"},//<BR>
|
||||
{1,0x49,12,"клавиша Цифр. клав. 9 ","клавиша калькулятора 9 (индекс 12)"},//<BR>
|
||||
{1,0x0A,12,"клавиша 9 ","клавиша калькулятора 9 (индекс 12)"},//<BR>
|
||||
{1,0x37,13,"клавиша Цифр. клав.* ","клавиша калькулятора X (индекс 13)"},//<BR>
|
||||
{1,0x4E,14,"клавиша Цифр. клав. + ","клавиша калькулятора + (индекс 14)"},//<BR>
|
||||
{1,0x4B,15,"клавиша Цифр. клав. 4 ","клавиша калькулятора 4 (индекс 15)"},//<BR>
|
||||
{1,0x05,15,"клавиша 4 ","клавиша калькулятора 4 (индекс 15)"},//<BR>
|
||||
{1,0x4C,16,"клавиша Цифр. клав. 5 ","клавиша калькулятора 5 (индекс 16)"},//<BR>
|
||||
{1,0x06,16,"клавиша 5 ","клавиша калькулятора 5 (индекс 16)"},//<BR>
|
||||
{1,0x4D,17,"клавиша Цифр. клав. 6 ","клавиша калькулятора 6 (индекс 17)"},//<BR>
|
||||
{1,0x07,17,"клавиша 6 ","клавиша калькулятора 6 (индекс 17)"},//<BR>
|
||||
{1,0x135,18,"клавиша Цифр. клав. / ","клавиша калькулятора / (индекс 18)"},//<BR>
|
||||
{1,0x4A,19,"клавиша Цифр. клав. - ","клавиша калькулятора - (индекс 19)"},//<BR>
|
||||
{1,0x21,19,"клавиша лат. F ","клавиша калькулятора - (индекс 19) и рег. F"},//<BR>
|
||||
{1,0x4F,20,"клавиша Цифр. клав. 1 ","клавиша калькулятора 1 (индекс 20)"},//<BR>
|
||||
{1,0x02,20,"клавиша клав. 1 ","клавиша калькулятора 1 (индекс 20)"},//<BR>
|
||||
{1,0x50,21,"клавиша Цифр. клав. 2 ","клавиша калькулятора 5 (индекс 21)"},//<BR>
|
||||
{1,0x03,21,"клавиша клав. 2 ","клавиша калькулятора 5 (индекс 21)"},//<BR>
|
||||
{1,0x51,22,"клавиша Цифр. клав. 3 ","клавиша калькулятора 3 (индекс 22)"},//<BR>
|
||||
{1,0x04,22,"клавиша клав. 3 ","клавиша калькулятора 3 (индекс 22)"},//<BR>
|
||||
{1,0x150,23,"клавиша Стрелка вниз ","калькулятора смена XY (индекс 23)"},//<BR>
|
||||
{1,0x148,24,"клавиша Стрелка вверх ","калькулятора Стрелка вверх (индекс 24)"},//<BR>
|
||||
{1,0x12,24,"клавиша лат. E ","калькулятора Стрелка вверх (индекс 24) и рег.E"},//<BR>
|
||||
{1,0x11C,24,"клавиша Цифр. Enter ","калькулятора Стрелка вверх (индекс 24) и
|
||||
рег.E"},//<BR>
|
||||
{1,0x52,25,"клавиша Цифр. клав. 0 ","клавиша калькулятора 0 (индекс 25)"},//<BR>
|
||||
{1,0x0B,25,"клавиша клав. 0 ","клавиша калькулятора 0 (индекс 25)"},//<BR>
|
||||
{1,0x53,26,"клавиша Цифр. клав. . ","клавиша калькулятора , (индекс 26)"},//<BR>
|
||||
{1,0x1E,26,"клавиша лат.A ","клавиша калькулятора , (индекс 26)и рег. A"},//<BR>
|
||||
{1,0xC,27, "клавиша - (тире) ","клавиша калькулятора /-/ (индекс 27)"},//<BR>
|
||||
{1,0x30,27,"клавиша лат.B ","клавиша калькулятора /-/ (индекс 27)рег.B"},//<BR>
|
||||
{1,0x152,28,"клавиша Insert ","клавиша калькулятора ВП (индекс 28)"},//<BR>
|
||||
//{0xBD,28,"клавиша ???? "," клавиша калькулятора ВП (индекс 28)"},//<BR>
|
||||
{1,0x153,29,"клавиша Delete ","клавиша калькулятора Cx (индекс 29)"},//<BR>
|
||||
{1,0x39,29,"клавиша Пробел ","клавиша калькулятора Cx (индекс 29)"},//<BR>
|
||||
{1,0x20,29,"клавиша лат. D ","клавиша калькулятора Cx (индекс 29)и рег.D"}//</FONT></P>
|
||||
<P align="center"><FONT size="-1"><B>Замечания в ходе проверки</B></FONT></P>
|
||||
<P align="left">Последний шаг программы не виден, этот недостаток можно устранить,
|
||||
если не следовать логике Б3-34. Слово VER100 в начале текста программы означает,
|
||||
что программа имеет 100 шагов, а слово VER256 - 256 шагов. До начала первого
|
||||
шага программы могут быть заданы начальные значения регистрам памяти сочетанием,
|
||||
например П0=1.567 или П0=1,567. Коментарий может быть добавлен в пределах строки
|
||||
после двух наклонных черт: //. Команды (в основном) можно печатать на русским
|
||||
и латинским шрифтом. Вместо ИП можно набрать IP, ip, ип, iП и т.д..</P>
|
||||
<P align="center"><B><FONT size="+3">Запуск.</FONT></B></P>
|
||||
<P align="left"> <FONT size="+1">Слева, ниже индикатора, включить выключатель
|
||||
питания.</FONT><BR>
|
||||
</P>
|
||||
<P><FONT size="-1"><B>Продолжение следует ...</B></FONT></P>
|
||||
<P align="center"><FONT size="-1"><B> <BR>
|
||||
</B> </FONT> </P>
|
||||
</BODY>
|
||||
</HTML>
|
BIN
programs/emulator/PrMK/trunk/docs/stack1.gif
Normal file
After Width: | Height: | Size: 2.2 KiB |
BIN
programs/emulator/PrMK/trunk/docs/stack2.gif
Normal file
After Width: | Height: | Size: 4.0 KiB |
BIN
programs/emulator/PrMK/trunk/docs/stack3.gif
Normal file
After Width: | Height: | Size: 2.1 KiB |
BIN
programs/emulator/PrMK/trunk/docs/stack4.gif
Normal file
After Width: | Height: | Size: 1.4 KiB |
BIN
programs/emulator/PrMK/trunk/docs/stack5.gif
Normal file
After Width: | Height: | Size: 1.8 KiB |
BIN
programs/emulator/PrMK/trunk/docs/stack6.gif
Normal file
After Width: | Height: | Size: 2.2 KiB |
BIN
programs/emulator/PrMK/trunk/docs/stack7.gif
Normal file
After Width: | Height: | Size: 2.4 KiB |
76
programs/emulator/PrMK/trunk/docs/Калькуляторные игры.txt
Normal file
@ -0,0 +1,76 @@
|
||||
Компьютерные игры без компьютеров
|
||||
|
||||
Xakep, номер #007, Калькуляторные игры стр. 70-73
|
||||
Владимир Веселов (veselov@xakep.ru)
|
||||
иллюстрация - А.Еремин
|
||||
|
||||
|
||||
Чтобы приготовить рагу из зайца, как минимум нужно иметь кошку.
|
||||
|
||||
Народная мудрость
|
||||
|
||||
Благодаря неустанной заботе Советского правительства, Политбюро ЦК КПСС и лично Леонида Ильича Брежнева появление персональных компьютеров в нашей стране сильно подзадержалось. В то время как на Западе трудящиеся уже вовсю поглощали опиум компьютерных игр, самый прогрессивный в мире советский народ по старинке забивал козла, дулся в подкидного дурака или морщил репу над шахматами. Однако в середине восьмидесятых годов новый вождь Советского Союза Михаил Сергеевич Горбачев призвал страну к повальной компьютерной грамотности, чем страна была сильно озадаченна. Широкие массы трудящихся готовы были осваивать эти самые ПК, вот только где их взять? На просторах Страны Советов некоторое (причем весьма малое) количество персональных компьютеров к тому времени осело только в весьма закрытых НИИ да наиболее привилегированных учебных заведениях. Но "партия сказала надо, комсомол ответил есть!" Наиболее пытливые граждане вскоре обнаружили, что ПК в стране имеются в достаточных количествах... правда, расшифровывалась эта аббревиатура не "Персональный Компьютер", а "Программируемый микроКалькулятор".
|
||||
|
||||
Поскольку сравнивать было практически не с чем, определить, что ПК и рядом не лежал с подлинным компьютером, было нельзя. Вот почему его возвели в этот ранг, и появился первый в России "Клуб Компьютерных Игр". Обосновался он на страницах журнала "Техника - Молодежи" и примерно до 1990-го года был посвящен исключительно калькуляторам.
|
||||
|
||||
Что же представляла эта первая в нашей стране игровая платформа? Да самый обычный калькулятор для научных расчетов, где, кроме возможности вычислять синусы, логарифмы и прочие тангенсы, была возможность составить программу в девяносто семь операторов. Программы могли быть довольно сложными, поскольку имелись операторы циклов, условных и безусловных переходов, ну и прочие необходимые вещи. Естественно, имелась и оперативная память, правда, она ограничивалась четырнадцатью ячейками. Так как в калькуляторе существовало жесткое разделение памяти, отводимой переменным и программе, да еще было множество зашитых в ПЗУ подпрограмм, назвать точный размер ОЗУ невозможно. Но, переводя на современный язык, можно сказать, что он не превышал 500 байт.
|
||||
|
||||
И вот на этой-то "платформе" были реализованы практически все существовавшие тогда жанры компьютерных игр! Наибольшее развитие получили симуляторы и стратегии, но не были забыты аркады, логические игры и даже ролевые. Пожалуй, только квест в чистом виде отсутствовал, хотя некоторые квестоподобные игры имелись.
|
||||
|
||||
Надо сказать, что для игр на калькуляторах нужно было обладать изрядной фантазией. Ну сам посуди, тебе не дается ничего, кроме голых цифр, а ты на их основе должен представить себе состояние управляемого объекта, свое положение в игровом мире и все остальное. Правда, в некоторых играх позволялось рисовать какие-то схемы и графики, заполнять какие-то таблицы, но можно было обойтись и без всего этого.
|
||||
|
||||
По ступенькам в небо
|
||||
|
||||
Все началось с маленькой программульки под названием "Лунолет", которая очень быстро выросла в полноценную игру "Рейс Кон-Тики". Вот ее сюжет: небольшой двухместный космический аппарат стартует с поверхности Луны и выходит на круговую орбиту. Совершает хитрые маневры по сближению с орбитальной станцией и в конце концов стыкуется с ней. Пополняет запасы топлива, отрывается от станции и совершает перелет к Земле. Входит в атмосферу, тормозится, планирует, а потом совершает почти мягкую посадку на поверхность океана.
|
||||
|
||||
Теперь попроси любого программиста написать по этому сюжету космический симулятор, размер которого не превышал бы 500 байт. Уж не знаю, что именно он ответит, но вот тебе наверняка придется повторить фразу Пятачка из старого анекдота: "Ой! А куда это я пошел?" Все правильно, вместить столько разных вещей в столь узкие рамки попросту невозможно. Тем не менее, такая игра была сделана.
|
||||
|
||||
Решение было гениально простым (как, впрочем, и все, что связано с играми на ПК): сделать симулятор походовым и состоящим из нескольких последовательно вводимых программ. Да, да, игровой процесс был разделен на ходы, где в начале вводились исходные данные, а в конце получались координаты и состояние летательного аппарата. Скажем, вводишь время в 10 секунд, вектор тяги 45 градусов, количество сжигаемого топлива 100 килограмм и нажимаешь кнопку "С/С" (Старт/Стоп). Калькулятор пару-тройку минут жужжит, а потом сообщает, что ты успешно врезался в Луну и твои останки покоятся на глубине 18-ти метров.
|
||||
|
||||
А общий игровой процесс выглядел так: набираешь первую программу, с ее помощью отрываешься от поверхности Луны и выходишь на орбиту. Запоминаешь в ячейках памяти параметры орбиты, вводишь следующую программу (вручную с клавиатуры!) и совершаешь маневры сближения с орбитальной станцией. Потом следует третья программа, с помощью которой стыкуешься со станцией, ну и так далее. Полностью игра состояла, если мне не изменяет память, из шести программ, последняя из которых моделировала полет безмоторного аппарата в атмосфере.
|
||||
|
||||
Именно она послужила основой для следующей серии симуляторов - самолетных. Первой была программа на тему рассказа Олдриджа "Последний дюйм". Правда, сажать в ней нужно было не легкий самолетик, а громадный аэробус, все же остальные трагические коллизии остались в целостности. А вскоре подоспел и симулятор сверхлегкого самолета, на нем можно было не только совершать взлеты и посадки, но и выполнять мертвую петлю! Причем прежде чем броситься в эту авантюру, нужно было как следует подготовиться, иначе самолет сваливался в штопор и разбивался.
|
||||
|
||||
Вообще, симуляторов было создано великое множество - имитировались дирижабли с температурным управлением, парусные буера, глубоководные аппараты и даже такие экзотические средства передвижения как гравилеты. Не было только симуляторов наземных машин, по очень простой причине - играть в них в походовом режиме совсем уж не интересно. Однако вскоре эта трудность была преодолена. Правда, по современной классификации игры для калькулятора, шедшие в реальном времени, следует отнести к аркадам.
|
||||
|
||||
Синусоидальный руль
|
||||
|
||||
Попробуй решить такую задачу: перед тобой калькулятор, в процессе вычислений реагирующий только на нажатие кнопки "С/С" и непрерывно выводящий всю прогоняемую через него информацию на дисплей (выглядит это как жуткое мелькание цифр). Тебе нужно создать для этого калькулятора игру, идущую в режиме реального времени. Есть какие-нибудь соображения?
|
||||
|
||||
Ладно, даю подсказку. Калькулятор может вести вычисления угловых величин в градусах, радианах или градах (это когда прямой угол равен 100 градусам; говорят, придумано специально для армейских старшин, чтобы с точкой кипения воды не путали), причем переключать с одного режима на другой можно прямо в процессе вычислений. Усек идею? Молодец! А для тех, кто в танке, растолкую подробно.
|
||||
|
||||
Чтобы сообщить калькулятору, чего ты от него что-то хочешь, нужно ввести в программу вычисление хотя бы синуса 90. Если счет идет в градусах, получается одна величина, в радианах - другая, ну а в градах и вовсе третья. Проверив в нужном месте полученную величину, калькулятор узнает, что руль повернут вправо, или, там, педаль газа утоплена до отказа.
|
||||
|
||||
А как быть с выводом информации? Тоже просто. Нужно повторить вывод соответствующих цифр на дисплей не менее трех раз (то есть вставить в программу три пустых оператора), тогда человеческий глаз успевает рассмотреть их. В классических аркадах, скажем, в гонках с препятствиями, выводилась комбинация нулей, единиц и двоек. Нули обозначали свободную дорогу, единицы ямы и камни, а двойки - машины соперников, и нужно было описанным способом между ними лавировать.
|
||||
|
||||
В более сложных аркадах, типа управления парусной яхтой, выводилась ее скорость (два знака), курс (еще два знака), скорость ветра (два знака) и его направление (последние два знака). И вот за считанные секунды нужно было считать восьмизначное число, сообразить, какие его цифры что означают, и дать нужную команду. Пожалуй, эти калькуляторные аркады были посложнее современных.
|
||||
|
||||
Единство и борьба противоположностей
|
||||
|
||||
Вот уж что, казалось бы, невозможно втиснуть в рамки девяноста семи операторов и четырнадцати ячеек памяти, так это мир стратегии. Однако он прекрасно туда влез. Первая стратегическая игра называлась "Остров" и довольно точно, хотя и со значительными упрощениями, моделировала управление небольшим островным государством. Были там налоги, собираемые с жителей, доходы от туризма и от промышленности. Существовали методы повышения всех этих доходов. Причем промышленность загрязняла окружающую среду и мешала туризму, а жители были постоянно чем-то недовольны.
|
||||
|
||||
Надо сказать, администрация Клуба прекрасно ориентировалась в требованиях текущего момента, поэтому такую классово чуждую игру выпустить не могла, пришлось подвергнуть ее значительным доработкам. На дворе стоял уже 1986-й год, стране было велено повернуться лицом к сельскому хозяйству, поэтому игра называлась "Урожай". Моделировалось в ней управление колхозом, причем довольно точно, с засухами, нашествием грызунов, расхитителями социалистической собственности и всем прочим. А еще через год, когда наши правители озаботились кооперативной деятельностью, эта же игра была преобразована в "Кооперативное кафе" (вот она, предшественница мелкопрозовского "Пица Тайкуна"!).
|
||||
|
||||
Позднее появились варианты игры, позволявшие управлять большим магазином, заводом, авторемонтной мастерской и даже преступной шайкой. Правда, все это были продукты народного творчества и на страницы клуба они не попали.
|
||||
|
||||
Ничего в этом перечне игр не улавливаешь? Ну как же, один и тот же основной алгоритм игры позволяет моделировать деятельность руководителя государства, крупного (и мелкого) хозяйственника, кооператора и мафиози. Можно сказать, что на этом простом примере было показано, что принципиальных различий между всеми ними нет. Очень скоро стране пришлось убедиться в этом на собственном опыте.
|
||||
|
||||
Впрочем, это не имеет отношения к предмету нашего рассмотрения, поэтому скажу лучше пару слов о воргеймах. Тут, собственно говоря, все обстоит просто. Дело в том, что на Западе воргеймы появились задолго до появления компьютеров. Были это такие настольные игры, разыгрываемые на картонном поле пластмассовыми фишками. Чтобы внести в них элемент объективности и случайности, применялись игральные кости. Как ты понимаешь, перевести все это на язык калькулятора несложно. То есть в первых воргеймах сохранялось и поле, и фишки, а калькулятор только более-менее объективно рассчитывал результаты столкновения двух отрядов. Позднее появились более продвинутые игры, где взаимное положение войск, уровень их снабжения и подготовки, мораль и все прочее хранилось в памяти калькулятора, а игроку оставалось только отдавать команды, атаковать такой-то отряд неприятеля таким-то своим отрядом.
|
||||
|
||||
Жестокие игры
|
||||
|
||||
В области логических игр калькулятор вступил на тропу, которую ему, по идее, никак не возможно было одолеть. Дело в том, что наши умельцы не стали моделировать всякие паззлы, крестики-нолики или "Морской бой", они сразу же взялись за шахматы и шашки!
|
||||
|
||||
Вот ведь что интересно, всего за несколько месяцев до появления первой шахматной программы один из отцов-основателей клуба на вопрос, когда такие игры появятся, ответил фразами: "Не вполне обоснованная вера во всемогущество ПК", "Какие там шахматы! Пиши что попало, ходи как попало!" По счастью, поклонников ПК это не обескуражило. Конечно, до полноценных шахматных программ дело так и не дошло, но я уверен, что не из-за слабости ПК или недостатка в нашей стране самородков, а только из-за пришествия в нее ZX Spectrum и прочей иностранной заразы.
|
||||
|
||||
Первая шахматная программа предлагала поставить мат слоном и конем черному королю, управляемому ПК. Надо сказать, черные оборонялись весьма искусно, так что повозиться приходилось немало. Потом были программы, в которых ПК ставил ладьей или ладьей и слоном мат королю, управляемому человеком. Должен отметить, это были очень обидные программы, один мой приятель, большой любитель шахмат, забросил их навсегда после того как "проклятая железяка" поставила ему мат на девятом ходу.
|
||||
|
||||
Потом пошли шахматоподобные игры, "Волки и овцы", "Укрощение мустанга" и другие. Наконец, появились и шашечные программы, в которых можно было сыграть полноценную партию. О них нужно сказать особо.
|
||||
|
||||
Для начала очередная задачка на сообразительность. Шашечная доска состоит из 64-х клеток (если считать только используемые черные - 32-х), в игре участвует по 12 шашек с каждой стороны. Теперь попробуй запихнуть все это в 14 регистров, да еще пару-тройку нужно оставить для всяких вспомогательных вычислений. Ну что, крыша поехала? Ладно, не буду томить.
|
||||
|
||||
Простейший и наиболее экономный способ заключается в том, чтобы хранить не состояние каждой клеточки, а состояние рядов. То есть записываем в первый регистр, скажем, 1020, это значит, что в первой клетке первого ряда стоит белая шашка, вторая и четвертая пусты, а в третьей стоит черная. Для описания всей доски понадобится всего восемь регистров. Но можно и это количество сократить вдвое, если в одном регистре хранить сразу два ряда, нечетный как целую часть числа, а четный как дробную. Вообще-то есть возможность запихнуть всю доску в два регистра, попробуй сам сообразить, как.
|
||||
|
||||
Несбывшиеся надежды
|
||||
|
||||
Шашечные программы были, можно сказать, лебединой песней ПК. Правда, под занавес, появилась почти настоящая RPG "Страна Фантазия", RTS "Полет шмеля", аркада "Охота на скалоеда" и пошаговая стратегия "Пещера сокровищ". Однако с запада (и востока) на страну уже надвинулись всякие там "Коммодоры" и "Амиги", а за нами маячил и сам IBM PC. Как ты знаешь, Страна Советов этого натиска не выдержала и развалилась, под ее обломками был погребен и скромный микрокалькулятор. А жаль, кто знает, до каких бы высот дошло народное творчество, какие немыслимые идеи воплотились бы в девяноста семи шагах программы и четырнадцати ячейках памяти?
|
@ -0,0 +1,90 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//W3c//DTD HTML 4.0 Transitional//EN">
|
||||
<html>
|
||||
<head>
|
||||
<title>Система команд программируемых микрокалькуляторов Б3-34 МК-54 МК-56</title>
|
||||
<meta name=KEYWORDS content="система команд программируемый калькулятор микрокалькулятор Б3 БЗ МК 34 54 56">
|
||||
<meta name=DESCRIPTION content="Система команд советских программируемых микрокалькуляторов Б3-34, МК-54, МК-56">
|
||||
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=windows-1251">
|
||||
<LINK REL=STYLESHEET TYPE="text/css" HREF="Система команд программируемых микрокалькуляторов Б3-34 МК-54 МК-56_files/s2008000.css">
|
||||
</head>
|
||||
<body bgcolor="#CCCCCC" link="#0000CC" alink="#0000CC" background="Система команд программируемых микрокалькуляторов Б3-34 МК-54 МК-56_files/b4000000.gif">
|
||||
<CENTER>
|
||||
<TABLE BORDER=0 CELLSPACING=0 CELLPADDING=5 width=80% background="pict/t.gif">
|
||||
<TBODY>
|
||||
<TR>
|
||||
<TD><h1>Система команд ПМК Б3-34, МК-54, МК-56</h1></TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD><hr><a href="http://www.semico.ru/" title="Сайт НПП СЕМИКО">
|
||||
Главная
|
||||
</a>/
|
||||
<a href="http://mk.semico.ru/index.htm" title="ЭКВМ">
|
||||
ЭКВМ
|
||||
</a>/
|
||||
<a href="http://mk.semico.ru/oinfo.htm" title="Общая информация">
|
||||
Общая информация
|
||||
</a>
|
||||
<SCRIPT src="Система команд программируемых микрокалькуляторов Б3-34 МК-54 МК-56_files/s0000000.js" language="JavaScript1.2"></SCRIPT>
|
||||
<hr>
|
||||
</TD>
|
||||
</TR>
|
||||
</TBODY></TABLE>
|
||||
|
||||
<TABLE BORDER=0 CELLSPACING=0 CELLPADDING=5 width=80% background="pict/t.gif">
|
||||
<TBODY>
|
||||
<TR>
|
||||
<TD><br>
|
||||
|
||||
<IMG src="Система команд программируемых микрокалькуляторов Б3-34 МК-54 МК-56_files/com_b334.jpg" width=567 height=326 border=0 alt="Система команд советских программируемых микрокалькуляторов Б3-34">
|
||||
<P><i>Рис.1. [1]</i>
|
||||
</P>
|
||||
<br>
|
||||
<P>Система команд советских программируемых микрокалькуляторов "Электроника Б3-34" представлена на рисунке 1. Знаками '-', 'L', 'C', 'Г', 'E' обозначены шестнадцатиричные цифры 'A','B','C','D','E' соответственно. Так они выводились на семисегментном ВЛИ индикаторе калькуляторов. Цифра 'F' в таблице не имеет отдельного обозначения, она выводилась как пустое знакоместо. Единственная команда Б3-34, в которой она используется - это "FBx" (возврат числа в стек из регистра хранения результата предыдущей операции). Различным цветом выделены группы команд в зависимости от их назначения.
|
||||
</P>
|
||||
<P>В Б3-34 было 14 регистров памяти. Команды "П↑" "ИП↑" "Kx≠0↑" "КБП↑" "Kx≥0↑" "КПП↑" "КП↑" "Kx<0↑" "КИП↑" "Kx=0↑" работали в Б3-34 аналогично командам с регистром 0, но не вызывали автодекремента, то есть уменьшения на единицу содержимого регистра 0 при косвенном обращении. Эта особенность часто использовалась при оптимизации, но с появлением регистра "Е" в моделях МК-52 и МК-61 программы с этими командами пришлось разрабатывать заново. Команды с кодами 26h-2Ah и 30h-3Bh вызывали в Б3-34 аварийный останов.
|
||||
</P>
|
||||
<P>Команды калькуляторов МК-54 и МК-56 отличались рядом обозначений: "П→x" вместо "ИП", "x→П" вместо "П", "X↔Y" вместо "XY", "B↑" вместо "↑", а также команды "sin<sup>-1</sup>", "cos<sup>-1</sup>", "tg<sup>-1</sup>" вместо корректных обозначений "arcsin", "arccos", "arctg" соответственно. При этом набор команд и исполняемые ими действия в перечисленных моделях были идентичны. Система команд и их обозначений МК-54, МК-56 является базовой для последующих моделей МК-52 и МК-61.
|
||||
</P>
|
||||
<IMG src="Система команд программируемых микрокалькуляторов Б3-34 МК-54 МК-56_files/stack000.jpg" width=464 height=501 border=0 alt="Перемещение информации в стеке при выполнении команд ПМК Б3-34">
|
||||
<P><i>Рис.2. [1]</i>
|
||||
</P>
|
||||
<P>На рисунке 2 показано перемещение информации в регистрах стека микрокалькуляторов при выполнении различных команд и операций. Подробное описание стека см. в <a href="http://mk.semico.ru/re_logika.htm" title="логика вычислений и организация памяти">руководстве по эксплуатации</a> программируемого калькулятора МК-152.
|
||||
</P>
|
||||
<P>В основе <a href="http://mk.semico.ru/tabl2.htm" title="система команд ЭКВМ МК-152">системы команд</a> клавишных ЭВМ МК-152 и МК-161 лежат команды калькуляторов МК-52 и МК-61, но обозначения команд записи "П" и считывания "ИП", а также обратных тригонометрических функций соответствуют Б3-34. Есть и другие <a href="http://mk.semico.ru/dr_sovmest.htm" title="совместимость ЭКВМ и ПМК">отличия</a> ЭКВМ "Электроника МК" от советских ПМК.
|
||||
</P>
|
||||
<br><hr><br>
|
||||
<IMG src="Система команд программируемых микрокалькуляторов Б3-34 МК-54 МК-56_files/tablb334.jpg" width=700 height=439 border=0 alt="Система команд советских программируемых микрокалькуляторов Б3-34 - НиЖ 12-84">
|
||||
<P><i>Рис.3. [2]</i>
|
||||
<P>На рисунке 3 - таблица кодов операций для программируемого микрокалькулятора "Электроника Б3-34" с 5-й цветной вкладки журнала "Наука и Жизнь" N12 за 1984 г. Рис. С. Пивоварова.
|
||||
</P>
|
||||
|
||||
<br><hr><br>
|
||||
<h4>Литература</h4>
|
||||
|
||||
<TABLE BORDER=0 CELLSPACING=0 CELLPADDING=5><TBODY>
|
||||
<TR><TD>
|
||||
<P>1. Данилов И.Д. Секреты программируемого микрокалькулятора. - М.:Наука. Гл. ред. физ.-мат. лит., 1986. - 160 с.- (Б-чка "Квант". Вып. 55.)</P>
|
||||
</TD><TD><IMG src="Система команд программируемых микрокалькуляторов Б3-34 МК-54 МК-56_files/danilov1.jpg" width=90 height=146 border=0 alt="Данилов И.Д. Секреты программируемого калькулятора. Библиотечка Квант вып. 55"></TD></TR>
|
||||
|
||||
<TR><TD>
|
||||
<P>2. Журнал "Наука и Жизнь" N12 - 1984 г.</P>
|
||||
</TD><TD><IMG src="Система команд программируемых микрокалькуляторов Б3-34 МК-54 МК-56_files/nkj12840.jpg" width=90 height=143 border=0 alt="НиЖ 12-84"></TD></TR>
|
||||
</TBODY></TABLE>
|
||||
<br>
|
||||
|
||||
</TD>
|
||||
</TR>
|
||||
|
||||
<TR>
|
||||
<TD>
|
||||
<hr><font color="#666666">НПП "СЕМИКО" (383) 271-01-25 (многоканальный)</font><br>
|
||||
</TD>
|
||||
</TR>
|
||||
|
||||
</TBODY></TABLE>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
||||
|
||||
<!-- This document saved from http://mk.semico.ru/comb334.htm -->
|
After Width: | Height: | Size: 58 KiB |
After Width: | Height: | Size: 4.9 KiB |
After Width: | Height: | Size: 6.7 KiB |
After Width: | Height: | Size: 39 KiB |
After Width: | Height: | Size: 103 KiB |
After Width: | Height: | Size: 999 B |
194
programs/emulator/PrMK/trunk/editbox_ex.mac
Normal file
@ -0,0 +1,194 @@
|
||||
|
||||
ch_struc_size=36
|
||||
ed_struc_size=76
|
||||
ch_flag_en=10b
|
||||
|
||||
ch_left equ [edi] ;ª®®à¤¨ â ç « à¨á®¢ ¨ï ¯® å
|
||||
ch_top equ [edi+2] ;ª®®à¤¨ â ç « à¨á®¢ ¨ï ¯® ã
|
||||
ch_text_margin equ [edi+4] ;=4 à ááâ®ï¨¥ ®â ¯àאַ㣮«ì¨ª 祪 ¡®ªá ¤® ¤¯¨á¨
|
||||
ch_size equ [edi+8] ;12 à §¬¥à ª¢ ¤à â 祪 ¡®ªá
|
||||
ch_color equ [edi+12] ;梥⠢ãâਠcheckbox
|
||||
ch_border_color equ [edi+16] ; or [edi+4] ;梥â à ¬ª¨ checkbox ¥¥ ¬®¦® § ¤ âì á ¬®áâ®ï⥫ì®
|
||||
ch_text_color equ [edi+20];[edi+4] ;梥â ⥪áâ
|
||||
ch_text_ptr equ [edi+24] ;㪠§ ⥫ì ç «® ⥪á⮢®© áâப¨
|
||||
ch_text_length equ [edi+28]
|
||||
ch_flags equ [edi+32] ;ä« £¨
|
||||
|
||||
ed_width equ [edi] ;è¨à¨ ª®¬¯®¥â
|
||||
ed_left equ [edi+4] ;¯®«®¦¥¨¥ ¯® ®á¨ å
|
||||
ed_top equ [edi+8] ;¯®«®¦¥¨¥ ¯® ®á¨ ã
|
||||
ed_color equ [edi+12] ;梥â ä® ª®¬¯®¥â
|
||||
shift_color equ [edi+16] ;=0x6a9480 ¤«ï ¯à¨¬¥à ¢®§ì¥¬ ¦¥«¥ë© 梥⠡®ªá
|
||||
ed_focus_border_color equ [edi+20] ;梥â à ¬ª¨ ª®¬¯®¥â
|
||||
ed_blur_border_color equ [edi+24] ;梥⠥ ªâ¨¢®£® ª®¬¯®¥â
|
||||
ed_text_color equ [edi+28] ;梥â ⥪áâ
|
||||
ed_max equ [edi+32] ;ª®«-¢® ᨬ¢®«®¢ ª®â®àë¥ ¬®¦® ¬ ªá¨¬ «ì® ¢¢¥áâ¨
|
||||
ed_text equ [edi+36] ;㪠§ â¥«ì ¡ãä¥à
|
||||
ed_mouse_variable equ [edi+40] ; 㪠§ â¥«ì ¯¥à¥¬¥ãî ¤«ï ¡®ªá /£à㯯ë
|
||||
ed_flags equ [edi+44] ;ä« £¨
|
||||
bp_flags equ [ebp+44] ;¢ ¥ª®â®àëå ¯à®æ¥¤ãà å edi ¨á¯®«ì§ã¥âáï, ¢§ ¬¥ 㪠§ ⥫ì åà ¨âìáï ¢ ebp
|
||||
ed_size equ [edi+48] ;ª®«-¢® ᨬ¢®«®¢
|
||||
bp_size equ [ebp+48] ;ª®«-¢® ᨬ¢¯®«®¢, ¤«ï ¤à¥á 樨 ¨á¯«ì§ã¥âáï ebp¡ edi § ïâ
|
||||
ed_pos equ [edi+52] ;¯®§¨æ¨ï ªãàá®à
|
||||
ed_offset equ [edi+56] ;ᬥ饨¥
|
||||
cl_curs_x equ [edi+60] ;¯à¥¤ë¤ã饥 ª®®à¤¨ â ªãàá®à ¯® å
|
||||
cl_curs_y equ [edi+64] ;¯à¥¤ë¤ã饥 ª®®à¤¨ â ªãàá®à ¯® ã
|
||||
ed_shift_pos equ [edi+68] ;¯®«®¦¥¨¥ ªãàá®à
|
||||
ed_shift_pos_old equ [edi+72] ;áâ ஥ ¯®«®¦¥¨¥ ªãàá®à
|
||||
|
||||
ed_struc_size=76
|
||||
struc edit_box width,left,top,color,shift_color,focus_border_color,\
|
||||
blur_border_color,text_color,max,text,mouse_variable,flags,size,pos
|
||||
{
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;Bit mask from editbox
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
ed_figure_only= 1000000000000000b ;®¤¨ ᨬ¢®«ë
|
||||
ed_always_focus= 100000000000000b
|
||||
ed_focus= 10b ;䮪ãá ¯à¨«®¦¥¨ï
|
||||
ed_shift_on= 1000b ;¥á«¨ ¥ ãáâ ®¢«¥ -§ ç¨â ¢¯¥à¢ë¥ ¦ â shift,¥á«¨ ¡ë« ãáâ ®¢«¥, § ç¨â ¬ë 㦥 çâ® - â® ¤¥« «¨ 㤥ন¢ ï shift
|
||||
ed_shift_on_off=1111111111110111b
|
||||
ed_shift= 100b ;¢ª«îç ¥âáï ¯à¨ ¦ ⨨ shift â.¥. ¥á«¨ ¦¨¬ î
|
||||
ed_shift_off= 1111111111111011b
|
||||
ed_shift_bac= 10000b ;¡¨â ¤«ï ®ç¨á⪨ ¢ë¤¥«¥®£® shift â.¥. ¯à¨ ãáâ ®¢ª¥ £®¢®à¨â çâ® ¥áâì ¢ë¤¥«¥¨¥
|
||||
ed_shift_bac_cl=1111111111101111b ;®ç¨á⪠¯à¨ 㤠«¥¨¨ ¢ë¤¥«¥¨ï
|
||||
ed_shift_cl= 1111111111100011b
|
||||
ed_shift_mcl= 1111111111111011b
|
||||
ed_left_fl= 100000b
|
||||
ed_right_fl= 1111111111011111b
|
||||
ed_offset_fl= 1000000b
|
||||
ed_offset_cl= 1111111110111111b
|
||||
ed_insert= 10000000b
|
||||
ed_insert_cl= 1111111101111111b
|
||||
ed_mouse_on = 100000000b
|
||||
ed_mous_adn_b= 100011000b
|
||||
ed_mouse_on_off=1111111011111111b
|
||||
ed_height=14 ; ¢ëá®â
|
||||
|
||||
.width dd width
|
||||
.left dd left
|
||||
.top dd top
|
||||
.color dd color
|
||||
.shift_color dd shift_color
|
||||
.focus_border_color dd focus_border_color
|
||||
.blur_border_color dd blur_border_color
|
||||
.text_color dd text_color
|
||||
.max dd max
|
||||
.text dd text
|
||||
.mouse_variable dd mouse_variable
|
||||
.flags dd flags+0
|
||||
.size dd size+0
|
||||
.pos dd pos+0
|
||||
.offset dd 0
|
||||
.cl_curs_x dd 0
|
||||
.cl_curs_y dd 0
|
||||
.shift dd 0
|
||||
.shift_old dd 0
|
||||
}
|
||||
macro edit_boxes_set_sys_color start,end,color_table
|
||||
{
|
||||
mov edi,start
|
||||
mov ecx,((end-start)/ed_struc_size)
|
||||
mov esi,color_table
|
||||
@@:
|
||||
mov eax,dword [esi+36]
|
||||
mov ebx,dword [esi+20]
|
||||
push dword eax
|
||||
pop dword ed_focus_border_color
|
||||
shr bh,1
|
||||
shr bl,1
|
||||
shr ah,1
|
||||
shr al,1
|
||||
add ah,bh
|
||||
add al,bl
|
||||
ror eax,16
|
||||
ror ebx,16
|
||||
shr bl,1
|
||||
shr al,1
|
||||
add al,bl
|
||||
ror eax,16
|
||||
mov dword ed_blur_border_color,eax
|
||||
mov dword shift_color,eax
|
||||
add edi,ed_struc_size
|
||||
loop @b
|
||||
}
|
||||
macro get_sys_colors col_buf
|
||||
{
|
||||
;mov eax,48
|
||||
push 48
|
||||
pop eax
|
||||
;mov ebx,3
|
||||
push 3
|
||||
pop ebx
|
||||
;mov ecx,col_buf
|
||||
push col_buf
|
||||
pop ecx
|
||||
;mov edx,40
|
||||
push 40
|
||||
pop edx
|
||||
mcall
|
||||
}
|
||||
macro check_boxes_set_sys_color start,end,color_table
|
||||
{
|
||||
ch_left equ [edi] ;ª®®à¤¨ â ç « à¨á®¢ ¨ï ¯® å
|
||||
ch_top equ [edi+2] ;ª®®à¤¨ â ç « à¨á®¢ ¨ï ¯® ã
|
||||
ch_text_margin equ [edi+4] ;=4 à ááâ®ï¨¥ ®â ¯àאַ㣮«ì¨ª 祪 ¡®ªá ¤® ¤¯¨á¨
|
||||
ch_size equ [edi+8] ;12 à §¬¥à ª¢ ¤à â 祪 ¡®ªá
|
||||
ch_color equ [edi+12] ;梥⠢ãâਠcheckbox
|
||||
ch_border_color equ [edi+16] ; or [edi+4] ;梥â à ¬ª¨ checkbox ¥¥ ¬®¦® § ¤ âì á ¬®áâ®ï⥫ì®
|
||||
ch_text_color equ [edi+20];[edi+4] ;梥â ⥪áâ
|
||||
ch_text_ptr equ [edi+24] ;㪠§ ⥫ì ç «® ⥪á⮢®© áâப¨
|
||||
ch_text_length equ [edi+28]
|
||||
ch_flags equ [edi+32] ;ä« £¨
|
||||
|
||||
|
||||
;ch_left equ [edi] ;ª®®à¤¨ â ç « à¨á®¢ ¨ï ¯® å
|
||||
;ch_top equ [edi+2] ;ª®®à¤¨ â ç « à¨á®¢ ¨ï ¯® ã
|
||||
;ch_color equ [edi+4] ;梥⠢ãâਠcheckbox
|
||||
;ch_border_color equ [edi+8] ;梥â à ¬ª¨ checkbox
|
||||
;ch_text_color equ [edi+12] ;梥â ⥪áâ
|
||||
;ch_text_ptr equ [edi+16] ;㪠§ ⥫ì ç «® ⥪á⮢®© áâப¨
|
||||
;ch_text_length equ [edi+20] ;¤«¨ ¤¯¨á¨ (2^64 â ª®© ¤«¨ë ¬®¦¥â ¡ëâì ⥪áâ)
|
||||
;ch_flags equ [edi+24] ;ä« £¨
|
||||
|
||||
mov edi,start
|
||||
mov ecx,((end-start)/ch_struc_size)
|
||||
mov esi,color_table
|
||||
@@:
|
||||
push dword [esi+32]
|
||||
pop dword ch_text_color
|
||||
push dword [esi+36]
|
||||
pop dword ch_border_color
|
||||
add edi,ch_struc_size
|
||||
loop @b
|
||||
}
|
||||
struc check_box left,top,ch_text_margin,ch_size,color,border_color,text_color,text,ch_text_length,flags
|
||||
{ ;áâàãªâãà ¯ à ¬¥â஢ ¤«ï 祪 ¡®ªá
|
||||
ch_flag_en=10b
|
||||
.left: dw left ;+0 ;¯®«®¦¥¨¥ ¯® å
|
||||
.top: dw top ;¯®«®¦¥¨¥ ¯® ã
|
||||
.ch_text_margin: dd ch_text_margin ;à ááâ®ï¨¥ ®â ¯àאַ㣮«ì¨ª 祪 ¡®ªá ¤® ¤¯¨á¨
|
||||
.ch_size: dd ch_size ;à §¬¥à ª¢ ¤à â 祪 ¡®ªá , ¤«ï ¯à¨¬¥à 12
|
||||
.color: dd color ;梥⠢ãâਠ祪¡®ªá
|
||||
.border_color: dd border_color ;梥â à ¬ª¨
|
||||
.text_color: dd text_color ;梥⠤¯¨á¨
|
||||
.text: dd text ; ¤à¥á ¢ ª®¤¥ ¯à®£à ¬¬ë £¤¥ à ᯮ«®¦¥ ⥪áâ
|
||||
.ch_text_length: dd ch_text_length ;¤«¨ áâப¨ á ᨬ¢®« ¬¨
|
||||
.flags: dd flags+0 ; ä« £¨
|
||||
}
|
||||
struc option_box point_gr,left,top,op_text_margin,op_size,color,border_color,text_color,text,op_text_length,flags
|
||||
{ ;áâàãªâãà ¯ à ¬¥â஢ ¤«ï 祪 ¡®ªá
|
||||
op_flag_en=10b
|
||||
.option_group: dd point_gr
|
||||
.left: dw left ;+0 ;¯®«®¦¥¨¥ ¯® å
|
||||
.top: dw top ;¯®«®¦¥¨¥ ¯® ã
|
||||
.ch_text_margin: dd op_text_margin ;à ááâ®ï¨¥ ®â ¯àאַ㣮«ì¨ª 祪 ¡®ªá ¤® ¤¯¨á¨
|
||||
.ch_size: dd op_size ;à §¬¥à ª¢ ¤à â 祪 ¡®ªá , ¤«ï ¯à¨¬¥à 12
|
||||
.color: dd color ;梥⠢ãâਠ祪¡®ªá
|
||||
.border_color: dd border_color ;梥â à ¬ª¨
|
||||
.text_color: dd text_color ;梥⠤¯¨á¨
|
||||
.text: dd text ; ¤à¥á ¢ ª®¤¥ ¯à®£à ¬¬ë £¤¥ à ᯮ«®¦¥ ⥪áâ
|
||||
.ch_text_length: dd op_text_length ;¤«¨ áâப¨ á ᨬ¢®« ¬¨
|
||||
.flags: dd flags+0 ; ä« £¨
|
||||
}
|
||||
|
1
programs/emulator/PrMK/trunk/lang.inc
Normal file
@ -0,0 +1 @@
|
||||
lang fix ru
|
48
programs/emulator/PrMK/trunk/macroPRMK.inc
Normal file
@ -0,0 +1,48 @@
|
||||
macro buttabnum a0,a1,a2,a3,a4
|
||||
{
|
||||
test [flags],(1 shl 5)
|
||||
jnz .prg
|
||||
test [flags],(1 shl 3)
|
||||
jnz .a1
|
||||
if a4
|
||||
test [flags],(1 shl 4)
|
||||
jnz .a4
|
||||
endf
|
||||
test [flags],(1 shl 11)
|
||||
jnz .a2
|
||||
test [flags],(1 shl 12)
|
||||
jnz .a3
|
||||
test [flags],(1 shl 9)
|
||||
jnz .prg
|
||||
mov eax,a0
|
||||
jmp but_table.to_opcode
|
||||
.a1: mov eax,a1
|
||||
jmp but_table.to_opcode
|
||||
.a2: mov eax,a2
|
||||
jmp but_table.to_opcode
|
||||
.a3: mov eax,a3
|
||||
jmp but_table.to_opcode
|
||||
.prg:
|
||||
test [flags],(1 shl 8)
|
||||
jz @f
|
||||
add [dop8],a0
|
||||
jmp but_table.dop8
|
||||
@@: test [flags],(1 shl 9)
|
||||
jz @f
|
||||
mov al,a0
|
||||
jmp but_table.dop9
|
||||
@@: movzx eax,[schk]
|
||||
add eax,PMEM
|
||||
inc [schk]
|
||||
test [flags],(1 shl 3)
|
||||
jnz @f
|
||||
mov byte [eax],a0
|
||||
ret
|
||||
@@: mov byte [eax],a1
|
||||
btr [flags],3
|
||||
ret
|
||||
if a4
|
||||
.a4: mov eax,a4
|
||||
jmp but_table.to_opcode
|
||||
endf
|
||||
}
|
543
programs/emulator/PrMK/trunk/macros.inc
Normal file
@ -0,0 +1,543 @@
|
||||
@^ fix macro comment {
|
||||
^@ fix }
|
||||
|
||||
; -------------------------
|
||||
macro library [lname,fname]
|
||||
{
|
||||
forward
|
||||
dd __#lname#_library_table__,__#lname#_library_name__
|
||||
common
|
||||
dd 0
|
||||
forward
|
||||
align 4
|
||||
__#lname#_library_name__ db fname,0
|
||||
}
|
||||
|
||||
macro import lname,[name,sname]
|
||||
{
|
||||
common
|
||||
align 4
|
||||
__#lname#_library_table__:
|
||||
forward
|
||||
if used name
|
||||
name dd __#name#_import_name__
|
||||
end if
|
||||
common
|
||||
dd 0
|
||||
forward
|
||||
if used name
|
||||
align 4
|
||||
__#name#_import_name__ db sname,0
|
||||
end if
|
||||
}
|
||||
|
||||
macro export [name,sname]
|
||||
{
|
||||
forward
|
||||
dd __#name#_export_name__,name
|
||||
common
|
||||
dd 0
|
||||
forward
|
||||
align 4
|
||||
__#name#_export_name__ db sname,0
|
||||
}
|
||||
; -------------------------
|
||||
|
||||
macro m2m dest,src {
|
||||
push src
|
||||
pop dest
|
||||
}
|
||||
|
||||
|
||||
macro iglobal {
|
||||
IGlobals equ IGlobals,
|
||||
macro __IGlobalBlock { }
|
||||
|
||||
macro uglobal {
|
||||
UGlobals equ UGlobals,
|
||||
macro __UGlobalBlock { }
|
||||
|
||||
endg fix } ; Use endg for ending iglobal and uglobal blocks.
|
||||
|
||||
|
||||
macro IncludeIGlobals{
|
||||
macro IGlobals dummy,[n] \{ __IGlobalBlock
|
||||
purge __IGlobalBlock \}
|
||||
match I, IGlobals \{ I \} }
|
||||
|
||||
macro IncludeUGlobals{
|
||||
macro UGlobals dummy,[n] \{
|
||||
\common
|
||||
\local begin, size
|
||||
begin = $
|
||||
virtual at $
|
||||
\forward
|
||||
__UGlobalBlock
|
||||
purge __UGlobalBlock
|
||||
\common
|
||||
size = $ - begin
|
||||
end virtual
|
||||
rb size
|
||||
\}
|
||||
match U, UGlobals \{ U \} }
|
||||
|
||||
uglobal
|
||||
endg
|
||||
|
||||
iglobal
|
||||
endg
|
||||
|
||||
|
||||
; new application structure
|
||||
macro meos_app_start
|
||||
{
|
||||
use32
|
||||
org 0x0
|
||||
|
||||
db 'MENUET01'
|
||||
dd 0x01
|
||||
dd __start
|
||||
dd __end
|
||||
dd __memory
|
||||
dd __stack
|
||||
|
||||
if used __params & ~defined __params
|
||||
dd __params
|
||||
else
|
||||
dd 0x0
|
||||
end if
|
||||
|
||||
dd 0x0
|
||||
}
|
||||
MEOS_APP_START fix meos_app_start
|
||||
|
||||
macro code
|
||||
{
|
||||
__start:
|
||||
}
|
||||
CODE fix code
|
||||
|
||||
macro data
|
||||
{
|
||||
__data:
|
||||
IncludeIGlobals
|
||||
}
|
||||
DATA fix data
|
||||
|
||||
macro udata
|
||||
{
|
||||
if used __params & ~defined __params
|
||||
__params:
|
||||
db 0
|
||||
__end:
|
||||
rb 255
|
||||
else
|
||||
__end:
|
||||
end if
|
||||
__udata:
|
||||
IncludeUGlobals
|
||||
}
|
||||
UDATA fix udata
|
||||
|
||||
macro meos_app_end
|
||||
{
|
||||
align 32
|
||||
rb 2048
|
||||
__stack:
|
||||
__memory:
|
||||
}
|
||||
MEOS_APP_END fix meos_app_end
|
||||
|
||||
|
||||
; macro for defining multiline text data
|
||||
struc mstr [sstring]
|
||||
{
|
||||
forward
|
||||
local ssize
|
||||
virtual at 0
|
||||
db sstring
|
||||
ssize = $
|
||||
end virtual
|
||||
dd ssize
|
||||
db sstring
|
||||
common
|
||||
dd -1
|
||||
}
|
||||
|
||||
; macro for defining multiline text data
|
||||
struc mls [sstring]
|
||||
{
|
||||
forward
|
||||
local ssize
|
||||
virtual at 0
|
||||
db sstring ; mod
|
||||
ssize = $
|
||||
end virtual
|
||||
db ssize
|
||||
db sstring
|
||||
common
|
||||
db -1 ; mod
|
||||
}
|
||||
|
||||
|
||||
|
||||
; strings
|
||||
macro sz name,[data] { ; from MFAR [mike.dld]
|
||||
common
|
||||
if used name
|
||||
name db data
|
||||
.size = $-name
|
||||
end if
|
||||
}
|
||||
|
||||
macro lsz name,[lng,data] { ; from MFAR [mike.dld]
|
||||
common
|
||||
if used name
|
||||
label name
|
||||
forward
|
||||
if lang eq lng
|
||||
db data
|
||||
end if
|
||||
common
|
||||
.size = $-name
|
||||
end if
|
||||
}
|
||||
|
||||
macro szc name,elsz,[data] { ; from MFAR [mike.dld]
|
||||
common
|
||||
local s,m
|
||||
m = 0
|
||||
if used name
|
||||
label name
|
||||
forward
|
||||
virtual at 0
|
||||
db data
|
||||
s = $
|
||||
end virtual
|
||||
d#elsz s
|
||||
if m < s
|
||||
m = s
|
||||
end if
|
||||
db data
|
||||
common
|
||||
.size = $-name
|
||||
.maxl = m
|
||||
end if
|
||||
}
|
||||
|
||||
macro lszc name,elsz,[lng,data] { ; from MFAR [mike.dld]
|
||||
common
|
||||
local s,m,c
|
||||
m = 0
|
||||
c = 0
|
||||
if used name
|
||||
label name
|
||||
forward
|
||||
if lang eq lng
|
||||
virtual at 0
|
||||
db data
|
||||
s = $
|
||||
end virtual
|
||||
d#elsz s
|
||||
if m < s
|
||||
m = s
|
||||
end if
|
||||
db data
|
||||
c = c+1
|
||||
end if
|
||||
common
|
||||
.size = $-name
|
||||
.maxl = m
|
||||
.count = c
|
||||
end if
|
||||
}
|
||||
|
||||
|
||||
; easy system call macro
|
||||
macro mpack dest, hsrc, lsrc
|
||||
{
|
||||
if (hsrc eqtype 0) & (lsrc eqtype 0)
|
||||
mov dest, (hsrc) shl 16 + lsrc
|
||||
else
|
||||
if (hsrc eqtype 0) & (~lsrc eqtype 0)
|
||||
mov dest, (hsrc) shl 16
|
||||
add dest, lsrc
|
||||
else
|
||||
mov dest, hsrc
|
||||
shl dest, 16
|
||||
add dest, lsrc
|
||||
end if
|
||||
end if
|
||||
}
|
||||
|
||||
macro __mov reg,a,b { ; mike.dld
|
||||
if (~a eq)&(~b eq)
|
||||
mpack reg,a,b
|
||||
else if (~a eq)&(b eq)
|
||||
mov reg,a
|
||||
end if
|
||||
}
|
||||
|
||||
|
||||
include 'config.inc'
|
||||
__CPU_type equ p5
|
||||
SYSENTER_VAR equ 0
|
||||
|
||||
macro mcall a,b,c,d,e,f { ; mike.dld, updated by Ghost for Fast System Calls
|
||||
local ..ret_point
|
||||
__mov eax,a
|
||||
__mov ebx,b
|
||||
__mov ecx,c
|
||||
__mov edx,d
|
||||
__mov esi,e
|
||||
__mov edi,f
|
||||
|
||||
if __CPU_type eq p5
|
||||
int 0x40
|
||||
else
|
||||
if __CPU_type eq p6
|
||||
push ebp
|
||||
mov ebp, esp
|
||||
push ..ret_point ; it may be 2 or 5 byte
|
||||
sysenter
|
||||
..ret_point:
|
||||
pop edx
|
||||
pop ecx
|
||||
|
||||
else
|
||||
if __CPU_type eq k6
|
||||
push ecx
|
||||
syscall
|
||||
pop ecx
|
||||
else
|
||||
display 'ERROR : unknown CPU type (set to p5)', 10, 13
|
||||
__CPU_type equ p5
|
||||
int 0x40
|
||||
end if
|
||||
end if
|
||||
end if
|
||||
}
|
||||
|
||||
|
||||
; -------------------------
|
||||
macro header a,[b] {
|
||||
common
|
||||
use32
|
||||
org 0
|
||||
db 'MENUET',a
|
||||
forward
|
||||
if b eq
|
||||
dd 0
|
||||
else
|
||||
dd b
|
||||
end if }
|
||||
macro section name { align 16
|
||||
label name }
|
||||
macro func name {
|
||||
if ~used name
|
||||
display 'FUNC NOT USED: ',`name,13,10
|
||||
else
|
||||
align 4
|
||||
name:
|
||||
;diff16 `name,0,name
|
||||
;pushad
|
||||
;pushfd
|
||||
;dps `name
|
||||
;newline
|
||||
;mcall 5,1
|
||||
;popfd
|
||||
;popad
|
||||
}
|
||||
macro endf { end if }
|
||||
|
||||
macro diff16 title,l1,l2
|
||||
{
|
||||
local s,d
|
||||
s = l2-l1
|
||||
display title,': 0x'
|
||||
repeat 8
|
||||
d = '0' + s shr ((8-%) shl 2) and $0F
|
||||
if d > '9'
|
||||
d = d + 'A'-'9'-1
|
||||
end if
|
||||
display d
|
||||
end repeat
|
||||
display 13,10
|
||||
}
|
||||
|
||||
macro diff10 title,l1,l2
|
||||
{
|
||||
local s,d,z,m
|
||||
s = l2-l1
|
||||
z = 0
|
||||
m = 1000000000
|
||||
display title,': '
|
||||
repeat 10
|
||||
d = '0' + s / m
|
||||
s = s - (s/m)*m
|
||||
m = m / 10
|
||||
if d <> '0'
|
||||
z = 1
|
||||
end if
|
||||
if z <> 0
|
||||
display d
|
||||
end if
|
||||
end repeat
|
||||
display 13,10
|
||||
}
|
||||
|
||||
; optimize the code for size
|
||||
__regs fix <eax,ebx,ecx,edx,esi,edi,ebp,esp>
|
||||
|
||||
macro add arg1,arg2
|
||||
{
|
||||
if (arg2 eqtype 0)
|
||||
if (arg2) = 1
|
||||
inc arg1
|
||||
else
|
||||
add arg1,arg2
|
||||
end if
|
||||
else
|
||||
add arg1,arg2
|
||||
end if
|
||||
}
|
||||
|
||||
macro sub arg1,arg2
|
||||
{
|
||||
if (arg2 eqtype 0)
|
||||
if (arg2) = 1
|
||||
dec arg1
|
||||
else
|
||||
sub arg1,arg2
|
||||
end if
|
||||
else
|
||||
sub arg1,arg2
|
||||
end if
|
||||
}
|
||||
|
||||
macro mov arg1,arg2
|
||||
{
|
||||
if (arg1 in __regs) & ((arg2 eqtype 0) | (arg2 eqtype '0'))
|
||||
if (arg2) = 0
|
||||
xor arg1,arg1
|
||||
else if (arg2) = 1
|
||||
xor arg1,arg1
|
||||
inc arg1
|
||||
else if (arg2) = -1
|
||||
or arg1,-1
|
||||
else if (arg2) > -128 & (arg2) < 128
|
||||
push arg2
|
||||
pop arg1
|
||||
else
|
||||
mov arg1,arg2
|
||||
end if
|
||||
else
|
||||
mov arg1,arg2
|
||||
end if
|
||||
}
|
||||
|
||||
|
||||
macro RGB [a] {
|
||||
common
|
||||
match (r=,g=,b),a \{
|
||||
\dd ((r) shl 16) or ((g) shl 8) or (b)
|
||||
\}
|
||||
}
|
||||
|
||||
|
||||
struc POINT _t,_dx,_dy {
|
||||
.x _t _dx
|
||||
.y _t _dy
|
||||
}
|
||||
|
||||
; structure definition helper
|
||||
include 'struct.inc'
|
||||
|
||||
struct RECT
|
||||
left dd ?
|
||||
top dd ?
|
||||
right dd ?
|
||||
bottom dd ?
|
||||
ends
|
||||
|
||||
struct BOX
|
||||
left dd ?
|
||||
top dd ?
|
||||
width dd ?
|
||||
height dd ?
|
||||
ends
|
||||
|
||||
; structures used in MeOS
|
||||
struct process_information
|
||||
cpu_usage dd ? ; +0
|
||||
window_stack_position dw ? ; +4
|
||||
window_stack_value dw ? ; +6
|
||||
dw ? ; +8
|
||||
process_name rb 12 ; +10
|
||||
memory_start dd ? ; +22
|
||||
used_memory dd ? ; +26
|
||||
PID dd ? ; +30
|
||||
box BOX ; +34
|
||||
slot_state dw ? ; +50
|
||||
dw ? ; +52
|
||||
client_box BOX ; +54
|
||||
wnd_state db ? ; +70
|
||||
rb (1024-71)
|
||||
ends
|
||||
|
||||
struct system_colors
|
||||
frame dd ?
|
||||
grab dd ?
|
||||
grab_button dd ?
|
||||
grab_button_text dd ?
|
||||
grab_text dd ?
|
||||
work dd ?
|
||||
work_button dd ?
|
||||
work_button_text dd ?
|
||||
work_text dd ?
|
||||
work_graph dd ?
|
||||
ends
|
||||
|
||||
struct FILEDATE
|
||||
Second db ?
|
||||
Minute db ?
|
||||
Hour db ?
|
||||
db ?
|
||||
Day db ?
|
||||
Month db ?
|
||||
Year dw ?
|
||||
ends
|
||||
|
||||
struct FILEINFO
|
||||
Attributes dd ?
|
||||
IsUnicode db ?
|
||||
db 3 dup(?)
|
||||
DateCreate FILEDATE
|
||||
DateAccess FILEDATE
|
||||
DateModify FILEDATE
|
||||
Size dq ?
|
||||
ends
|
||||
|
||||
; constants
|
||||
|
||||
; events
|
||||
EV_IDLE = 0
|
||||
EV_TIMER = 0
|
||||
EV_REDRAW = 1
|
||||
EV_KEY = 2
|
||||
EV_BUTTON = 3
|
||||
EV_EXIT = 4
|
||||
EV_BACKGROUND = 5
|
||||
EV_MOUSE = 6
|
||||
EV_IPC = 7
|
||||
EV_STACK = 8
|
||||
|
||||
; event mask bits for function 40
|
||||
EVM_REDRAW = 1b
|
||||
EVM_KEY = 10b
|
||||
EVM_BUTTON = 100b
|
||||
EVM_EXIT = 1000b
|
||||
EVM_BACKGROUND = 10000b
|
||||
EVM_MOUSE = 100000b
|
||||
EVM_IPC = 1000000b
|
||||
EVM_STACK = 10000000b
|
1444
programs/emulator/PrMK/trunk/opcodes.inc
Normal file
268
programs/emulator/PrMK/trunk/proc32.inc
Normal file
@ -0,0 +1,268 @@
|
||||
|
||||
; Macroinstructions for defining and calling procedures
|
||||
|
||||
macro stdcall proc,[arg] ; directly call STDCALL procedure
|
||||
{ common
|
||||
if ~ arg eq
|
||||
reverse
|
||||
pushd arg
|
||||
common
|
||||
end if
|
||||
call proc }
|
||||
|
||||
macro invoke proc,[arg] ; indirectly call STDCALL procedure
|
||||
{ common
|
||||
if ~ arg eq
|
||||
reverse
|
||||
pushd arg
|
||||
common
|
||||
end if
|
||||
call [proc] }
|
||||
|
||||
macro ccall proc,[arg] ; directly call CDECL procedure
|
||||
{ common
|
||||
size@ccall = 0
|
||||
if ~ arg eq
|
||||
reverse
|
||||
pushd arg
|
||||
size@ccall = size@ccall+4
|
||||
common
|
||||
end if
|
||||
call proc
|
||||
if size@ccall
|
||||
add esp,size@ccall
|
||||
end if }
|
||||
|
||||
macro cinvoke proc,[arg] ; indirectly call CDECL procedure
|
||||
{ common
|
||||
size@ccall = 0
|
||||
if ~ arg eq
|
||||
reverse
|
||||
pushd arg
|
||||
size@ccall = size@ccall+4
|
||||
common
|
||||
end if
|
||||
call [proc]
|
||||
if size@ccall
|
||||
add esp,size@ccall
|
||||
end if }
|
||||
|
||||
macro proc [args] ; define procedure
|
||||
{ common
|
||||
match name params, args>
|
||||
\{ define@proc name,<params \} }
|
||||
|
||||
prologue@proc equ prologuedef
|
||||
|
||||
macro prologuedef procname,flag,parmbytes,localbytes,reglist
|
||||
{ if parmbytes | localbytes
|
||||
push ebp
|
||||
mov ebp,esp
|
||||
if localbytes
|
||||
sub esp,localbytes
|
||||
end if
|
||||
end if
|
||||
irps reg, reglist \{ push reg \} }
|
||||
|
||||
epilogue@proc equ epiloguedef
|
||||
|
||||
macro epiloguedef procname,flag,parmbytes,localbytes,reglist
|
||||
{ irps reg, reglist \{ reverse pop reg \}
|
||||
if parmbytes | localbytes
|
||||
leave
|
||||
end if
|
||||
if flag and 10000b
|
||||
retn
|
||||
else
|
||||
retn parmbytes
|
||||
end if }
|
||||
|
||||
macro define@proc name,statement
|
||||
{ local params,flag,regs,parmbytes,localbytes,current
|
||||
if used name
|
||||
name:
|
||||
match =stdcall args, statement \{ params equ args
|
||||
flag = 11b \}
|
||||
match =stdcall, statement \{ params equ
|
||||
flag = 11b \}
|
||||
match =c args, statement \{ params equ args
|
||||
flag = 10001b \}
|
||||
match =c, statement \{ params equ
|
||||
flag = 10001b \}
|
||||
match =params, params \{ params equ statement
|
||||
flag = 0 \}
|
||||
virtual at ebp+8
|
||||
match =uses reglist=,args, params \{ regs equ reglist
|
||||
params equ args \}
|
||||
match =regs =uses reglist, regs params \{ regs equ reglist
|
||||
params equ \}
|
||||
match =regs, regs \{ regs equ \}
|
||||
match =,args, params \{ defargs@proc args \}
|
||||
match =args@proc args, args@proc params \{ defargs@proc args \}
|
||||
parmbytes = $ - (ebp+8)
|
||||
end virtual
|
||||
name # % = parmbytes/4
|
||||
all@vars equ
|
||||
current = 0
|
||||
match prologue:reglist, prologue@proc:<regs> \{ prologue name,flag,parmbytes,localbytes,reglist \}
|
||||
macro locals
|
||||
\{ virtual at ebp-localbytes+current
|
||||
macro label . \\{ deflocal@proc .,:, \\}
|
||||
struc db [val] \\{ \common deflocal@proc .,db,val \\}
|
||||
struc dw [val] \\{ \common deflocal@proc .,dw,val \\}
|
||||
struc dp [val] \\{ \common deflocal@proc .,dp,val \\}
|
||||
struc dd [val] \\{ \common deflocal@proc .,dd,val \\}
|
||||
struc dt [val] \\{ \common deflocal@proc .,dt,val \\}
|
||||
struc dq [val] \\{ \common deflocal@proc .,dq,val \\}
|
||||
struc rb cnt \\{ deflocal@proc .,rb cnt, \\}
|
||||
struc rw cnt \\{ deflocal@proc .,rw cnt, \\}
|
||||
struc rp cnt \\{ deflocal@proc .,rp cnt, \\}
|
||||
struc rd cnt \\{ deflocal@proc .,rd cnt, \\}
|
||||
struc rt cnt \\{ deflocal@proc .,rt cnt, \\}
|
||||
struc rq cnt \\{ deflocal@proc .,rq cnt, \\} \}
|
||||
macro endl
|
||||
\{ purge label
|
||||
restruc db,dw,dp,dd,dt,dq
|
||||
restruc rb,rw,rp,rd,rt,rq
|
||||
restruc byte,word,dword,pword,tword,qword
|
||||
current = $-(ebp-localbytes)
|
||||
end virtual \}
|
||||
macro ret operand
|
||||
\{ match any, operand \\{ retn operand \\}
|
||||
match , operand \\{ match epilogue:reglist, epilogue@proc:<regs>
|
||||
\\\{ epilogue name,flag,parmbytes,localbytes,reglist \\\} \\} \}
|
||||
macro finish@proc \{ localbytes = (((current-1) shr 2)+1) shl 2
|
||||
end if \} }
|
||||
|
||||
macro defargs@proc [arg]
|
||||
{ common
|
||||
if ~ arg eq
|
||||
forward
|
||||
local ..arg,current@arg
|
||||
match argname:type, arg
|
||||
\{ current@arg equ argname
|
||||
label ..arg type
|
||||
argname equ ..arg
|
||||
if dqword eq type
|
||||
dd ?,?,?,?
|
||||
else if tbyte eq type
|
||||
dd ?,?,?
|
||||
else if qword eq type | pword eq type
|
||||
dd ?,?
|
||||
else
|
||||
dd ?
|
||||
end if \}
|
||||
match =current@arg,current@arg
|
||||
\{ current@arg equ arg
|
||||
arg equ ..arg
|
||||
..arg dd ? \}
|
||||
common
|
||||
args@proc equ current@arg
|
||||
forward
|
||||
restore current@arg
|
||||
common
|
||||
end if }
|
||||
|
||||
macro deflocal@proc name,def,[val]
|
||||
{ common
|
||||
match vars, all@vars \{ all@vars equ all@vars, \}
|
||||
all@vars equ all@vars name
|
||||
forward
|
||||
local ..var,..tmp
|
||||
..var def val
|
||||
match =?, val \{ ..tmp equ \}
|
||||
match any =dup (=?), val \{ ..tmp equ \}
|
||||
match tmp : value, ..tmp : val
|
||||
\{ tmp: end virtual
|
||||
initlocal@proc ..var,def value
|
||||
virtual at tmp\}
|
||||
common
|
||||
match first rest, ..var, \{ name equ first \} }
|
||||
|
||||
macro initlocal@proc name,def
|
||||
{ virtual at name
|
||||
def
|
||||
size@initlocal = $ - name
|
||||
end virtual
|
||||
position@initlocal = 0
|
||||
while size@initlocal > position@initlocal
|
||||
virtual at name
|
||||
def
|
||||
if size@initlocal - position@initlocal < 2
|
||||
current@initlocal = 1
|
||||
load byte@initlocal byte from name+position@initlocal
|
||||
else if size@initlocal - position@initlocal < 4
|
||||
current@initlocal = 2
|
||||
load word@initlocal word from name+position@initlocal
|
||||
else
|
||||
current@initlocal = 4
|
||||
load dword@initlocal dword from name+position@initlocal
|
||||
end if
|
||||
end virtual
|
||||
if current@initlocal = 1
|
||||
mov byte [name+position@initlocal],byte@initlocal
|
||||
else if current@initlocal = 2
|
||||
mov word [name+position@initlocal],word@initlocal
|
||||
else
|
||||
mov dword [name+position@initlocal],dword@initlocal
|
||||
end if
|
||||
position@initlocal = position@initlocal + current@initlocal
|
||||
end while }
|
||||
|
||||
macro endp
|
||||
{ purge ret,locals,endl
|
||||
finish@proc
|
||||
purge finish@proc
|
||||
restore regs@proc
|
||||
match all,args@proc \{ restore all \}
|
||||
restore args@proc
|
||||
match all,all@vars \{ restore all \} }
|
||||
|
||||
macro local [var]
|
||||
{ common
|
||||
locals
|
||||
forward done@local equ
|
||||
match varname[count]:vartype, var
|
||||
\{ match =BYTE, vartype \\{ varname rb count
|
||||
restore done@local \\}
|
||||
match =WORD, vartype \\{ varname rw count
|
||||
restore done@local \\}
|
||||
match =DWORD, vartype \\{ varname rd count
|
||||
restore done@local \\}
|
||||
match =PWORD, vartype \\{ varname rp count
|
||||
restore done@local \\}
|
||||
match =QWORD, vartype \\{ varname rq count
|
||||
restore done@local \\}
|
||||
match =TBYTE, vartype \\{ varname rt count
|
||||
restore done@local \\}
|
||||
match =DQWORD, vartype \\{ label varname dqword
|
||||
rq count+count
|
||||
restore done@local \\}
|
||||
match , done@local \\{ virtual
|
||||
varname vartype
|
||||
end virtual
|
||||
rb count*sizeof.\#vartype
|
||||
restore done@local \\} \}
|
||||
match :varname:vartype, done@local:var
|
||||
\{ match =BYTE, vartype \\{ varname db ?
|
||||
restore done@local \\}
|
||||
match =WORD, vartype \\{ varname dw ?
|
||||
restore done@local \\}
|
||||
match =DWORD, vartype \\{ varname dd ?
|
||||
restore done@local \\}
|
||||
match =PWORD, vartype \\{ varname dp ?
|
||||
restore done@local \\}
|
||||
match =QWORD, vartype \\{ varname dq ?
|
||||
restore done@local \\}
|
||||
match =TBYTE, vartype \\{ varname dt ?
|
||||
restore done@local \\}
|
||||
match =DQWORD, vartype \\{ label varname dqword
|
||||
dq ?,?
|
||||
restore done@local \\}
|
||||
match , done@local \\{ varname vartype
|
||||
restore done@local \\} \}
|
||||
match ,done@local
|
||||
\{ var
|
||||
restore done@local \}
|
||||
common
|
||||
endl }
|
20
programs/emulator/PrMK/trunk/readme.txt
Normal file
@ -0,0 +1,20 @@
|
||||
PrMK (<28>à®£à ¬¬¨àã¥¬ë© ¬¨ªà®ª «ìªã«ïâ®à) - í¬ã«ïâ®à ŒŠ <20>‡-34. Copyright ‘‘‘<E28098>.
|
||||
|
||||
<20>®¤¤¥à¦¨¢ îâáï ®á®¢ë¥ Ž<>ŠŽ„ë, ०¨¬ ¯à®£à ¬¬¨à®¢ ¨ï, ¢ ⮬ ç¨á«¥ ¢¢®¤ Ž<>ŠŽ„ á ª« ¢¨ âãàë:
|
||||
- ¡¨à ¥¬ "0..f 0..F", ⥪ã饥 ᬥ饨¥ ¨ªà¨¬¥â¨àã¥âáï, Ž<>ŠŽ„ ¢¢¥¤ñ;
|
||||
- ¡¨à ¥¬ "sk", ¤ «¥¥ "0..f 0..F" - ¨ ¬ë ¯¥à¥å®¤¨¬ ª ¡à ®¬ã á¬¥é¥¨î ¢ ¯à®£à ¬¬¥, § ®¤® ¬¥ï¥¬ § 票¥ ‘çñâ稪 Š®¬ ¤.
|
||||
Š®¬ ¤ë ¨ á¬¥é¥¨ï ¢¢®¤ïâáï ¢ è¥áâ ¤æ â¨à¨ç®¬ ¢¨¤¥.
|
||||
|
||||
Š®¬¡¨ æ¨ï ª« ¢¨è Ctrl+S ®âªà®¥â ¤¨ «®£ íªá¯®àâ ¯à®£à ¬¬ë, Ctrl+L - ¤¨ «®£ ¨¬¯®àâ .
|
||||
|
||||
<20>¥à¥ª«îç ⥫ì <20>-ƒ<>-ƒ ¯à¥¤áâ ¢«ï¥â ¨§ ᥡï âਠª®¯ª¨; <20> - à ¤¨ ë (360 £à ¤ãᮢ=2pi à ¤), ƒ<>„ - £à ¤ë (360 £à ¤ãᮢ=400 £à ¤), ƒ - £à ¤ãáë (1 ƒ<>„ = 0,9 ƒ = pi/200 <20>). ’ਣ®®¬¥âà¨ç¥áª¨¥ äãªæ¨¨ ¢ëáç¨âë¢ îâ § ç¥¨ï ¯® í⨬ âàñ¬ ¯ à ¬¥âà ¬ (¯à ¢¤ , cos 90 = 6,123^-17, çâ® ¯à¨¬¥à® = 0).
|
||||
|
||||
<20>ਠáâ à⥠PrMK ®â« ¢«¨¢ ¥â ᮤ¥à¦¨¬®¥ ª®¬ ¤®© áâப¨, ¢â®¬ â¨ç᪨ § £àã¦ ï ¯à®£à ¬¬ã ¯® ¯¥à¥¤ ®¬ã ¯ãâ¨, â.¥. ¬®¦® ¯à® áá®æ¨¨à®¢ âì ä ©«ë *.mkp á PrMK. <20>ਬ¥àë â ª®£® ä ©« 室ïâáï ¢ à娢¥.
|
||||
|
||||
<20>®á«¥ ®¯¥à 樨 ®áâ ®¢ (50h) ¢ PC-Speaker'e à §¤ áâáï ¯¨áª, ¥áâ¥á⢥® ¯à¨ ¢ª«îçñ®¬ ¤¨ ¬¨ª¥.
|
||||
|
||||
” ©«ë á¯à ¢ª¨ ®â ¢â®à ¯à®£à ¬¬ë "Š «ìªã«ïâ®à <20>3-34" www.ua1zcl.fromru.com, â ª¦¥ mk.semico.ru ¨ xakep.ru
|
||||
|
||||
<20>à®£à ¬¬ ¥ ¯à®å®¤¨« ¦ñá⪮£® â¥áâ¨à®¢ ¨ï, ¯®í⮬㠮¦¨¤ îâáï ¢á¥¢®§¬®¦ë¥ ®£à¥å¨.
|
||||
|
||||
‘ 㢠¦¥¨¥¬, staper@inbox.ru
|
BIN
programs/emulator/PrMK/trunk/smpl/1.MKP
Normal file
34
programs/emulator/PrMK/trunk/smpl/1.mkp.asm
Normal file
@ -0,0 +1,34 @@
|
||||
;” ©« ¯à®£à ¬¬ë ¤«ï PrMK. ‘ª®¬¯¨«¨à®¢ âì á ¯®¬®éìî FASM.
|
||||
|
||||
; ‚ëç¨á«ï¥¬ ¯«®é ¤ì ªàã£
|
||||
;‚¢®¤ ¤ ëå:
|
||||
;1. ‚¢¥áâ¨ à ¤¨ãá ªà㣠;
|
||||
;2. <20> ¦ âì [‚/Ž] [‘/<2F>];
|
||||
;3. <20> ¨¤¨ª â®à¥ - ¯«®é ¤ì ªà㣠.
|
||||
|
||||
|
||||
db "<‘’…Š>"
|
||||
|
||||
;¤ «¥¥ á«¥¤ãîâ § 票ï ॣ¨áâ஢ á⥪ (⮫쪮 qword)
|
||||
|
||||
;R.X1
|
||||
dq 0.0
|
||||
;R.X
|
||||
dq 2.0
|
||||
;R.Y
|
||||
dq 0.0
|
||||
;R.Z
|
||||
dq 0.0
|
||||
;R.T
|
||||
dq 0.0
|
||||
|
||||
db "<<3C>ƒ‘’>"
|
||||
|
||||
;<3B>¥£¨áâàë: (á R.0 ¯® R.E)
|
||||
|
||||
times 15 dq 0.0
|
||||
|
||||
db "<<3C><>ƒŒ>"
|
||||
;<3B>à®£à ¬¬ ¢ Ž<>ŠŽ„ å ŒŠ
|
||||
|
||||
db 0x22,0x20,0x12,0x50,0x51,0x00
|
BIN
programs/emulator/PrMK/trunk/smpl/2.MKP
Normal file
46
programs/emulator/PrMK/trunk/smpl/2.mkp.asm
Normal file
@ -0,0 +1,46 @@
|
||||
;” ©« ¯à®£à ¬¬ë ¤«ï PrMK. ‘ª®¬¯¨«¨à®¢ âì á ¯®¬®éìî FASM.
|
||||
|
||||
;ˆ£à "ªà¥á⨪¨-®«¨ª¨"
|
||||
;<3B>¥à¥¯¥ç â ® á ª¨£¨ "ˆ£àë á ¬¨ªà® <20>‚Œ" Ÿ.Š.’à®å¨¬¥ª®. Š¨¥¢. "’¥åiª ", 1986
|
||||
|
||||
;“áâ ®¢¨âì ¯¥à¥ª«îç ⥫ì <20>-ƒ ¢ ¯®«®¦¥¨¥ <20>, ¦ âì ª« ¢¨è¨ ‚/Ž ¨ ‘/<2F> ¤«ï ¢ëᢥ稢 ¨ï ®¬¥à <20>X=9 æ¥âà «ì®© ª«¥âª¨, "§ ¨¬ ¥¬®©" ¬¨ªà®ª «ìªã«ïâ®à®¬; ¯®á«¥ ª ¦¤®£® ¢ëᢥ稢 ¨ï ®¬¥à ª«¥âª¨, "§ ¨¬ ¥¬®©" ¬¨ªà®ª «ìªã«ïâ®à®¬, ¢¢®¤¨âì ¢ ॣ¨áâà X ®¬¥à ª«¥âª¨, "§ ¨¬ ¥¬®©" ¯à®â¨¢¨ª®¬, ¨ ¦¨¬ âì ⮫쪮 ª« ¢¨èã ‘/<2F>; ¯à¨ ¢ë¨£àëè¥ ¬¨ªà®ª «ìªã«ïâ®à ¢ëᢥ稢 îâáï æ¨äàë 77 (®¬¥à ª«¥âª¨, "§ ¨¬ ¥¬®©" ¯®á«¥¤¨¬ 室®¬ ¬¨ªà®ª «ìªã«ïâ®à , åà ¨âáï ¢ ॣ¨áâॠY); ¯à¨ ¨ç¥©®¬ १ã«ìâ ⥠¢ëᢥ稢 ¥âáï ã«ì.
|
||||
|
||||
;<3B>®¬¥à ª«¥â®ª ¯®«ï:
|
||||
|
||||
; 1 | 2 | 3
|
||||
;-----------------
|
||||
; 8 | 9 | 4
|
||||
;-----------------
|
||||
; 7 | 6 | 5
|
||||
|
||||
|
||||
db "<‘’…Š>"
|
||||
|
||||
;¤ «¥¥ á«¥¤ãîâ § 票ï ॣ¨áâ஢ á⥪ (⮫쪮 qword)
|
||||
|
||||
;R.X1
|
||||
dq 0.0
|
||||
;R.X
|
||||
dq 0.0
|
||||
;R.Y
|
||||
dq 0.0
|
||||
;R.Z
|
||||
dq 0.0
|
||||
;R.T
|
||||
dq 0.0
|
||||
|
||||
db "<<3C>ƒ‘’>"
|
||||
|
||||
;<3B>¥£¨áâàë: (á R.0 ¯® R.E)
|
||||
|
||||
times 15 dq 0.0
|
||||
|
||||
db "<<3C><>ƒŒ>"
|
||||
;<3B>à®£à ¬¬ ¢ Ž<>ŠŽ„ å ŒŠ
|
||||
|
||||
db 0x0E,0x09,0x50,0x53,0x19,0x20,0x12,0x1D,0x5C,0x11
|
||||
db 0x69,0x53,0x19,0x01,0x11,0x51,0x30,0x67,0x53,0x19
|
||||
db 0x67,0x53,0x19,0x00,0x50,0x01,0x11,0x5E,0x1E,0x08
|
||||
db 0x49,0x50,0x47,0x69,0x04,0x11,0x57,0x28,0x5C,0x2A
|
||||
db 0x08,0x10,0x48,0x67,0x11,0x57,0x33,0x68,0x07,0x07
|
||||
db 0x50,0x69,0x52
|
BIN
programs/emulator/PrMK/trunk/smpl/3.MKP
Normal file
97
programs/emulator/PrMK/trunk/smpl/3.mkp.asm
Normal file
@ -0,0 +1,97 @@
|
||||
;” ©« ¯à®£à ¬¬ë ¤«ï PrMK. ‘ª®¬¯¨«¨à®¢ âì á ¯®¬®éìî FASM.
|
||||
|
||||
;ˆ£à "<22>®á ¤ª ‹ãã"
|
||||
;<3B>¥à¥¯¥ç â ® á ª¨£¨ "5 ¢¥ç¥à®¢ á ¬¨ªà®ª «ìªã«ïâ®à®¬" ˆ.„.„ ¨«®¢, ƒ.‚.‘« ¢¨. Œ®áª¢ . "”¨ áë ¨ áâ â¨á⨪ ", 1988
|
||||
;Andriy Slezenko, student@uninet.kiev.ua
|
||||
|
||||
;1. ‚¢¥á⨠¯à®£à ¬¬ã.
|
||||
;2. <20>¥à¥©â¨ ¢ ०¨¬ ¢ëç¨á«¥¨©.
|
||||
;3. ‚/Ž ‘/<2F> "0".
|
||||
;4. h0 ( ç «ì ï ¢ëá®â ª®à ¡«ï) <20>€ v0 ( ç «ì ï ᪮à®áâì) <20>‚.
|
||||
; m0 (¨á室 ï ¬ áá ⮯«¨¢ ) <20>‘ g (ã᪮२¥ ᢮¡®¤®£® ¯ ¤¥¨ï ¤«ï ¯« ¥âë) <20>9.
|
||||
;5. ‘/<2F> "h" XY "v" ˆ<>‘ "m" ˆ<>4 "t" (⥪ã騥 § 票ï).
|
||||
;6. S (à á室 ⮯«¨¢ ¢ á«¥¤ãîéãî ᥪã¤ã).
|
||||
;7. <20>¥à¥©â¨ ª ¯.5 ¨ ¯à®¤®«¦ âì ¤® ¯®á ¤ª¨ ª®à ¡«ï.
|
||||
|
||||
;–¥«ì ¨£àë - ¯®á ¤¨âì ª®à ¡«ì ‹ãã.
|
||||
; ‘¨âã æ¨ï ã á á ¢ ¬¨ â ª ï â ª ï. <20> ª¥â 室¨âáï à ááâ®ï¨¨ N ¬¥â஢ ®â ‹ãë, ᪮à®áâì ¥¥ V ¬¥â஢ ¢ ᥪã¤ã, § ¯ á ⮯«¨¢ ¢ ¡ ª å - S â®. ‚¥«¨ç¨ë íâ¨, ª®¥ç®, ¨§¢¥áâë ª®¬ ¤¨àã. ‘®¯« à ª¥âë ¯®¢¥àãâë ª ‹ã¥ ¨, ¤®¡ ¢«ïï ⮯«¨¢® ¢ ¤¢¨£ ⥫ì, ¬ë ç¨ ¥¬ â®à¬®§¨âì. Š ¦¤ãî ᥪã¤ã ᢥ⮢®¬ â ¡«® ¢ ª®¬ ¤¨à᪮© à㡪¥ ¯®ï¢«ï¥âáï ¨ä®à¬ æ¨ï ® ¢ëá®â¥ ª®à ¡«ï ¤ ¯®¢¥àå®áâìî ¯« ¥âë, ᪮à®á⨠¥£® ¨ § ¯ ᥠ⮯«¨¢ . ’ ª ª ª ª®¬ ¤¨à®¬ ª®à ¡«ï ¡ã¤¥â¥ ¢ë, â® § ©â¥, çâ® ¯¥à¥¤ ⥬, ª ª ¯®á¬®âà¥âì â ¡«®, 㦮 ¦ âì â ª¨¥ ª« ¢¨è¨: XY ¯®ª §ë¢ ¥â ᪮à®áâì, ˆ<>‘ ¤ ¥â ®áâ ⮪ ⮯«¨¢ ¢ ¡ ª¥, ˆ<>4 - ¢à¥¬ï á ç « â®à¬®¦¥¨ï. —â® ª á ¥âáï ¢ëá®âë à ª¥âë ¤ ¯« ¥â®©, â® ® ¡ã¤¥â § £®à âìáï ¢ 襬 â ¡«® áà §ã ¯à¨ ®áâ ®¢ª¥ ª «ìªã«ïâ®à ¯®á«¥ ¯à®¢¥¤¥¨ï ®ç¥à¥¤®£® ¬ ¥¢à .
|
||||
; ‡ ¤ ç ¯®ïâ - ¯®á ¤¨âì ª®à ¡«ì â ª, çâ®¡ë ¢ ¬®¬¥â ¯®á ¤ª¨ ᪮à®áâì ¥£® ¡ë« ¡«¨§ª ª ã«î, ⮯«¨¢ ¯à¨ í⮬ ¦¥« â¥«ì® ¨§à á室®¢ âì ¯®¬¥ìè¥, ¤ ¨ ¯à®¢¥á⨠¯®á ¤ªã ¯®¡ëáâ॥ - ¥§ 祬 ¤®«£® ¬ãç¨âì ç«¥®¢ íª¨¯ ¦ , ¢¥¤ì ¯¥à¥£à㧪¨ ¯à¨ ¯®á ¤ª¥ ¥ ¬ «¥ìª¨¥. „ , çâ® ª á ¥âáï ⮯«¨¢ , ¤®¯®«¨â¥«ì®¥ ãá«®¢¨¥ - ¥á«¨ ¥£® ®áâ ¥âáï ¬¥ìè¥ 95 â®, â® ®¡à âë© áâ àâ ‡¥¬«î á⠥⠥¢®§¬®¦ë¬.
|
||||
|
||||
;Š®â஫ìë© ¯à¨¬¥à:
|
||||
;<3B>ãáâì ¢ëá®â ¡ã¤¥â 1000 ¬¥â஢, ᪮à®áâì - 150 ¬/á, § ¯ á ⮯«¨¢ - 500 â®. „ , ¥é¥ 㦮 ¢¢¥á⨠¢ ¡®à⮢®© ª®¬¯ìîâ¥à ã᪮२¥ ᢮¡®¤®£® ¯ ¤¥¨ï ‹ã¥ - 1,62 ¬/á^2. ‚¢®¤¨¬ í⨠ç¨á« ᮮ⢥âá⢥® ¢ ॣ¨áâàë <20>€, <20>‚, <20>‘ ¨ <20>9.
|
||||
;<3B> ¦¨¬ ¥¬ ‚/Ž ‘/<2F> ¨ ¨¤¨ª â®à¥ ¯®ï¢¨« áì ç «ì ï ¢ëá®â . ‚¢®¤¨¬ ¢ ¤¢¨£ â¥«ì ¯¥à¢ãî ¯®àæ¨î ⮯«¨¢ - 20 ‘/<2F>. —¥à¥§ 10 ᥪ㤠¨¤¨ª â®à¥ ¯®ï¢¨« áì ¢ëá®â , ª®â®à®© ⥯¥àì 室¨«áï ª®à ¡«ì, 856.4. …é¥ á⮫쪮 ¦¥ ⮯«¨¢ - 20 ‘/<2F> ¨ ¢ëá®â áâ « 719.4. …é¥ ¯®àæ¨ï ¯®¡®«ìè¥ - 25 ‘/<2F>. ‚ëá®â 591 ¬¥âà.
|
||||
;<3B>஢¥à¨¬ ®áâ «ìë¥ ¯ à ¬¥âàë: ᪮à®áâì (ª« ¢¨è XY) - 128,4 ¬/á, § ¯ á ⮯«¨¢ (ˆ<>‘) - 435 â®, ¢à¥¬ï ¢ ¯ã⨠(ˆ<>4) - 3 á.
|
||||
;<3B>®á«¥ ¢¢®¤ ¤¢ à § ¯®¤àï¤ ¯® 30 â® £®àî祣®, ¢ëá®â ª®à ¡«ï ᨧ¨« áì ¤® 366,9 ¬.
|
||||
;<3B>®á«¥ ¤ «ì¥©è¥£® ¢¢®¤ ¤¢ à § ¯®¤àï¤ ¯® 35 â® £®àî祣®, â ¡«® ¯®ª § «® ¢ëá®âã - 194,1 ¬, ᪮à®áâì - 76,6, ⮯«¨¢® - 305, ¢à¥¬ï - 7.
|
||||
;„ «¥¥ ¯®«¥â ¯à®â¥ª « â ª:
|
||||
|
||||
; <09> á室 ⮯«¨¢ ‚ëá®â
|
||||
; 40 130.5
|
||||
; 45 85.6
|
||||
; 40 57.4
|
||||
; 40 46.2
|
||||
; 10 38.1
|
||||
; 10 33.2
|
||||
; 0 26.6
|
||||
; 0 18.4
|
||||
; 5 10.9
|
||||
; 7 5.1
|
||||
; 8 1.6
|
||||
; 10 1.2
|
||||
; 5 1.5
|
||||
; (§¤¥áì ᪮à®áâì ®ª § « áì
|
||||
; ®âà¨æ ⥫쮩 (-0,3) ¨ ª®à ¡«ì
|
||||
; ç « ᮢ 㤠«ïâìáï ®â ¯®¢¥àå®áâ¨)
|
||||
; 0 0.3
|
||||
; 3 3.1111111
|
||||
;Š®á㫨áì ¯®¢¥àå®á⨠‹ãë. <20>®á«¥ ¯®á ¤ª¨ ¢ëïᨫ®áì (ˆ<>‘), ç⮠⮯«¨¢ ®áâ «®áì 82 â®ë, ¢à¥¬ï, § âà 祮¥ íâ®â ¯à®æ¥áá (ˆ<>4), 21 ᥪ㤠.
|
||||
;‚ ¨â®£¥ ¬ë ¢¨¤¨¬, ç⮠ᥫ¨ â殮«®¢ â®, ® ª®à ¡«ì 楫, á íª¨¯ ¦¥¬ ¢á¥ ¢ ¯®à浪¥. ‚®â ⮫쪮 ⮯«¨¢ ¯¥à¥à á室®¢ «¨, ®¡à âë© ¯ãâì ¥ å¢ â¨â. <20>ਤ¥âáï ‹ã¥ ¦¤ âì ª®à ¡«ì-ᯠá â¥«ì ¨ ¤¥ïâìáï, çâ® ¥£® ª ¯¨â á¯à ¢¨âáï á ¯®á ¤ª®© «ãçè¥ ¢ á.
|
||||
;<3B>® ¥ ®£®àç ©â¥áì. „«ï ¯¥à¢®£® à § ¢¯®«¥ ¯à¨«¨ç®.
|
||||
|
||||
;<3B>ਬ¥ç ¨ï:
|
||||
;1. —¨á« ¢ ª ¢ëçª å - íâ® ç¨á« , ¢ëᢥ稢 ¥¬ë¥ íªà ¥.
|
||||
;2. ‚믮«ïâì ¯.4 ¥ ®¡ï§ ⥫ì®. <20>® 㬮«ç ¨î ¯à¥¤¯®« £ ¥âáï: h=1000 ¬, v0=150 ¬/á, m0+500 â, g=1,62 ¬/á^2 ¤«ï ‹ãë.
|
||||
;3. ‘¬ëá« á®®¡é¥¨© ® ª ç¥á⢥ ¯®á ¤ª¨ à áè¨ä஢ ¨¦¥.
|
||||
|
||||
;1,1111111 - ¨¤¥ «ì ï ¯®á ¤ª ;
|
||||
;2,1111111 - ®à¬ «ì ï ¯®á ¤ª ;
|
||||
;3,1111111 - â殮« ï ¯®á ¤ª ;
|
||||
;4,1111111 - ¯®á ¤ª á «¥£ª® ãáâà ¨¬ë¬¨ ¯®¢à¥¦¤¥¨ï¬¨;
|
||||
;5,1111111 - ¯®¢à¥¦¤¥¨ï, ¯®«ãç¥ë¥ ¯à¨ ¯®á ¤ª¥, ¥ãáâà ¨¬ë. Ž¡à âë© áâ àâ ª ‡¥¬«¥ ¢àï¤ «¨ ¢®§¬®¦¥;
|
||||
;6,1111111 - ®ç¥ì ᨫìë¥ ¯®¢à¥¦¤¥¨ï;
|
||||
;7,1111111 - à §£¥à¬¥â¨§ æ¨ï ®â¤¥«ìëå ¡«®ª®¢ ¢ १ã«ìâ ⥠ᨫ쮣® 㤠à . †¨§ì ç«¥®¢ íª¨¯ ¦ ¯®¤ ã£à®§®©;
|
||||
;8,1111111 - £¨¡¥«ì íª¨¯ ¦ ;
|
||||
;9,1111111 - ¢§àë¢ ª®à ¡«ï.
|
||||
|
||||
|
||||
db "<‘’…Š>"
|
||||
|
||||
;¤ «¥¥ á«¥¤ãîâ § 票ï ॣ¨áâ஢ á⥪ (⮫쪮 qword)
|
||||
|
||||
;R.X1
|
||||
dq 0.0
|
||||
;R.X
|
||||
dq 0.0
|
||||
;R.Y
|
||||
dq 0.0
|
||||
;R.Z
|
||||
dq 0.0
|
||||
;R.T
|
||||
dq 0.0
|
||||
|
||||
db "<<3C>ƒ‘’>"
|
||||
|
||||
;<3B>¥£¨áâàë: (á R.0 ¯® R.E)
|
||||
|
||||
times 15 dq 0.0
|
||||
|
||||
db "<<3C><>ƒŒ>"
|
||||
;<3B>à®£à ¬¬ ¢ Ž<>ŠŽ„ å ŒŠ
|
||||
|
||||
db 0x0D,0x44,0x0C,0x03,0x4A,0x48,0x02,0x13,0x4C,0x01
|
||||
db 0x05,0x00,0x4B,0x01,0x0A,0x06,0x02,0x49,0x0D,0x50
|
||||
db 0x6B,0x6A,0x50,0x40,0xD4,0x14,0x6C,0x14,0x11,0x5C
|
||||
db 36 ,0x0D,0x40,0x6C,0x51, 37 ,0x4C,0x68,0x13,0x02
|
||||
db 0x10,0x60,0x14,0x13,0x69,0x14,0x11,0x6B,0x10,0x4B
|
||||
db 0x6A,0x14,0x11,0x4A,0x5C, 20 ,0x0B,0x6B,0x22,0x21
|
||||
db 0x10,0x01,0x10,0x4D,0xDD,0x6D,0x09,0x23,0x10,0x50
|
180
programs/emulator/PrMK/trunk/struct.inc
Normal file
@ -0,0 +1,180 @@
|
||||
|
||||
; Macroinstructions for defining data structures
|
||||
|
||||
macro struct name
|
||||
{ fields@struct equ name
|
||||
match child parent, name \{ fields@struct equ child,fields@\#parent \}
|
||||
sub@struct equ
|
||||
struc db [val] \{ \common fields@struct equ fields@struct,.,db,<val> \}
|
||||
struc dw [val] \{ \common fields@struct equ fields@struct,.,dw,<val> \}
|
||||
struc du [val] \{ \common fields@struct equ fields@struct,.,du,<val> \}
|
||||
struc dd [val] \{ \common fields@struct equ fields@struct,.,dd,<val> \}
|
||||
struc dp [val] \{ \common fields@struct equ fields@struct,.,dp,<val> \}
|
||||
struc dq [val] \{ \common fields@struct equ fields@struct,.,dq,<val> \}
|
||||
struc dt [val] \{ \common fields@struct equ fields@struct,.,dt,<val> \}
|
||||
struc rb count \{ fields@struct equ fields@struct,.,db,count dup (?) \}
|
||||
struc rw count \{ fields@struct equ fields@struct,.,dw,count dup (?) \}
|
||||
struc rd count \{ fields@struct equ fields@struct,.,dd,count dup (?) \}
|
||||
struc rp count \{ fields@struct equ fields@struct,.,dp,count dup (?) \}
|
||||
struc rq count \{ fields@struct equ fields@struct,.,dq,count dup (?) \}
|
||||
struc rt count \{ fields@struct equ fields@struct,.,dt,count dup (?) \}
|
||||
macro db [val] \{ \common \local anonymous
|
||||
fields@struct equ fields@struct,anonymous,db,<val> \}
|
||||
macro dw [val] \{ \common \local anonymous
|
||||
fields@struct equ fields@struct,anonymous,dw,<val> \}
|
||||
macro du [val] \{ \common \local anonymous
|
||||
fields@struct equ fields@struct,anonymous,du,<val> \}
|
||||
macro dd [val] \{ \common \local anonymous
|
||||
fields@struct equ fields@struct,anonymous,dd,<val> \}
|
||||
macro dp [val] \{ \common \local anonymous
|
||||
fields@struct equ fields@struct,anonymous,dp,<val> \}
|
||||
macro dq [val] \{ \common \local anonymous
|
||||
fields@struct equ fields@struct,anonymous,dq,<val> \}
|
||||
macro dt [val] \{ \common \local anonymous
|
||||
fields@struct equ fields@struct,anonymous,dt,<val> \}
|
||||
macro rb count \{ \local anonymous
|
||||
fields@struct equ fields@struct,anonymous,db,count dup (?) \}
|
||||
macro rw count \{ \local anonymous
|
||||
fields@struct equ fields@struct,anonymous,dw,count dup (?) \}
|
||||
macro rd count \{ \local anonymous
|
||||
fields@struct equ fields@struct,anonymous,dd,count dup (?) \}
|
||||
macro rp count \{ \local anonymous
|
||||
fields@struct equ fields@struct,anonymous,dp,count dup (?) \}
|
||||
macro rq count \{ \local anonymous
|
||||
fields@struct equ fields@struct,anonymous,dq,count dup (?) \}
|
||||
macro rt count \{ \local anonymous
|
||||
fields@struct equ fields@struct,anonymous,dt,count dup (?) \}
|
||||
macro union \{ fields@struct equ fields@struct,,union,<
|
||||
sub@struct equ union \}
|
||||
macro struct \{ fields@struct equ fields@struct,,substruct,<
|
||||
sub@struct equ substruct \}
|
||||
virtual at 0 }
|
||||
|
||||
macro ends
|
||||
{ match , sub@struct \{ restruc db,dw,du,dd,dp,dq,dt
|
||||
restruc rb,rw,rd,rp,rq,rt
|
||||
purge db,dw,du,dd,dp,dq,dt
|
||||
purge rb,rw,rd,rp,rq,rt
|
||||
purge union,struct
|
||||
match name=,fields,fields@struct \\{ fields@struct equ
|
||||
make@struct name,fields
|
||||
fields@\\#name equ fields \\}
|
||||
end virtual \}
|
||||
match any, sub@struct \{ fields@struct equ fields@struct> \}
|
||||
restore sub@struct }
|
||||
|
||||
macro make@struct name,[field,type,def]
|
||||
{ common
|
||||
if $
|
||||
display 'Error: definition of ',`name,' contains illegal instructions.',0Dh,0Ah
|
||||
err
|
||||
end if
|
||||
local define
|
||||
define equ name
|
||||
forward
|
||||
local sub
|
||||
match , field \{ make@substruct type,name,sub def
|
||||
define equ define,.,sub, \}
|
||||
match any, field \{ define equ define,.#field,type,<def> \}
|
||||
common
|
||||
match fields, define \{ define@struct fields \} }
|
||||
|
||||
macro define@struct name,[field,type,def]
|
||||
{ common
|
||||
local list
|
||||
list equ
|
||||
forward
|
||||
if ~ field eq .
|
||||
name#field type def
|
||||
sizeof.#name#field = $ - name#field
|
||||
else
|
||||
rb sizeof.#type
|
||||
end if
|
||||
local value
|
||||
match any, list \{ list equ list, \}
|
||||
list equ list <value>
|
||||
common
|
||||
sizeof.#name = $
|
||||
restruc name
|
||||
match values, list \{
|
||||
struc name value \\{
|
||||
match any, fields@struct \\\{ fields@struct equ fields@struct,.,name,<values> \\\}
|
||||
match , fields@struct \\\{ label .
|
||||
forward
|
||||
match , value \\\\{ field type def \\\\}
|
||||
match any, value \\\\{ field type value
|
||||
if ~ field eq .
|
||||
rb sizeof.#name#field - ($-field)
|
||||
end if \\\\}
|
||||
common \\\} \\} \} }
|
||||
|
||||
macro enable@substruct
|
||||
{ macro make@substruct substruct,parent,name,[field,type,def]
|
||||
\{ \common
|
||||
\local define
|
||||
define equ parent,name
|
||||
\forward
|
||||
\local sub
|
||||
match , field \\{ match any, type \\\{ enable@substruct
|
||||
make@substruct type,name,sub def
|
||||
purge make@substruct
|
||||
define equ define,.,sub, \\\} \\}
|
||||
match any, field \\{ define equ define,.\#field,type,<def> \\}
|
||||
\common
|
||||
match fields, define \\{ define@\#substruct fields \\} \} }
|
||||
|
||||
enable@substruct
|
||||
|
||||
macro define@union parent,name,[field,type,def]
|
||||
{ common
|
||||
virtual at 0
|
||||
forward
|
||||
if ~ field eq .
|
||||
virtual at 0
|
||||
parent#field type def
|
||||
sizeof.#parent#field = $ - parent#field
|
||||
end virtual
|
||||
if sizeof.#parent#field > $
|
||||
rb sizeof.#parent#field - $
|
||||
end if
|
||||
else if sizeof.#type > $
|
||||
rb sizeof.#type - $
|
||||
end if
|
||||
common
|
||||
sizeof.#name = $
|
||||
end virtual
|
||||
struc name [value] \{ \common
|
||||
label .\#name
|
||||
last@union equ
|
||||
forward
|
||||
match any, last@union \\{ virtual at .\#name
|
||||
field type def
|
||||
end virtual \\}
|
||||
match , last@union \\{ match , value \\\{ field type def \\\}
|
||||
match any, value \\\{ field type value \\\} \\}
|
||||
last@union equ field
|
||||
common rb sizeof.#name - ($ - .\#name) \} }
|
||||
|
||||
macro define@substruct parent,name,[field,type,def]
|
||||
{ common
|
||||
virtual at 0
|
||||
forward
|
||||
if ~ field eq .
|
||||
parent#field type def
|
||||
sizeof.#parent#field = $ - parent#field
|
||||
else
|
||||
rb sizeof.#type
|
||||
end if
|
||||
local value
|
||||
common
|
||||
sizeof.#name = $
|
||||
end virtual
|
||||
struc name value \{
|
||||
label .\#name
|
||||
forward
|
||||
match , value \\{ field type def \\}
|
||||
match any, value \\{ field type value
|
||||
if ~ field eq .
|
||||
rb sizeof.#parent#field - ($-field)
|
||||
end if \\}
|
||||
common \} }
|
566
programs/games/klavisha/trunk/courses/BASEKURS.ASM
Normal file
@ -0,0 +1,566 @@
|
||||
; ’¨¯®¢®© ä ©« á § ¤ ¨ï¬¨ ¤«ï ª« ¢¨ âãண®
|
||||
; âॠ¦ñà KJ|ABuIIIA
|
||||
|
||||
; Œ€Š‘ˆŒ€‹œ<E280B9>Ž „Ž<E2809E>“‘’ˆŒ›‰ <20>€‡Œ…<C592> ‘’<E28098>ŽŠˆ
|
||||
; <20>…‡ ‘Š<E28098>Ž‹‹ˆ<E280B9>ƒ€ - 38 ‘ˆŒ‚Ž‹Ž‚!
|
||||
; (¯à¨ à §¬¥à¥ ®ª ¯® 㬮«ç ¨î)
|
||||
|
||||
; <20> áâ®ïâ¥«ì® <20>… <20>…ŠŽŒ…<C592>„“…’‘Ÿ ¤¥« âì áâப¨
|
||||
; ¤«ï ¡®à ¤«¨¥¥ 38 ᨬ¢®«®¢.
|
||||
|
||||
; ‘âப¨ ®â¤¥«ïîâáï ®¤ ®â ¤à㣮© ¡ ©â®¬ 0x00
|
||||
|
||||
; “ப¨ ®â¤¥«ïîâáï ®¤¨ ®â ¤à㣮£® ¡ ©â®¬ 0xFE,
|
||||
; ª®â®àë© áâ ¢¨âáï ‚Œ…‘’Ž 0x00 ¢ ª®æ¥ ¯®á«¥¤¥©
|
||||
; áâப¨ ãப
|
||||
|
||||
; <20>®á«¥¤¨¬ ¡ ©â®¬ ä ©« „Ž‹†…<E280A0> ¡ëâì ¡ ©â 0xFF,
|
||||
; ª®â®àë© áâ ¢¨âáï <20>Ž‘‹… ¯®á«¥¤¥£® 0xFE ¢ ª®æ¥
|
||||
; ¯®á«¥¤¥£® ãப
|
||||
|
||||
; ‘®¡à ë© ä ©« (¨«¨ ¦¥ ¡à ë© ¢àãçãî ¢
|
||||
; HEX-। ªâ®à¥) ¤®«¦¥ ¨¬¥âì à áè¨à¥¨¥ .KLA
|
||||
|
||||
|
||||
; ----------------------------------------------
|
||||
|
||||
; “ç¥¡ë© ªãàá
|
||||
|
||||
; ‘®áâ ¢¨â¥«ì: €¤à¥© Œ¨å ©«®¢¨ç (Dron2004)
|
||||
|
||||
; “ப 1
|
||||
db 'ä ä ä ä ä ä ä ä ä ä ä ä ä ä ä ä ä', 0x00
|
||||
db 'ä ä ä ä ä ä ä ä ä ä ä ä ä ä ä ä ä', 0x00
|
||||
db 'ä ä ä ä ä ä ä ä ä ä ä ä ä ä ä ä ä', 0x0
|
||||
db 'ä ä ä ä ä ä ä ä ä ä ä ä ä ä ä ä ä', 0x00
|
||||
db 'ë ë ë ë ë ë ë ë ë ë ë ë ë ë ë ë ë', 0x00
|
||||
db 'ë ë ë ë ë ë ë ë ë ë ë ë ë ë ë ë ë', 0x00
|
||||
db 'ë ë ë ë ë ë ë ë ë ë ë ë ë ë ë ë ë', 0x00
|
||||
db 'ë ë ë ë ë ë ë ë ë ë ë ë ë ë ë ë ë', 0x00
|
||||
db '¢ ¢ ¢ ¢ ¢ ¢ ¢ ¢ ¢ ¢ ¢ ¢ ¢ ¢ ¢ ¢ ¢', 0x00
|
||||
db '¢ ¢ ¢ ¢ ¢ ¢ ¢ ¢ ¢ ¢ ¢ ¢ ¢ ¢ ¢ ¢ ¢', 0x00
|
||||
db '¢ ¢ ¢ ¢ ¢ ¢ ¢ ¢ ¢ ¢ ¢ ¢ ¢ ¢ ¢ ¢ ¢', 0x00
|
||||
db '¢ ¢ ¢ ¢ ¢ ¢ ¢ ¢ ¢ ¢ ¢ ¢ ¢ ¢ ¢ ¢ ¢', 0x00
|
||||
db ' ', 0x00
|
||||
db ' ', 0x00
|
||||
db ' ', 0x00
|
||||
db ' ', 0x00
|
||||
db '¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯', 0x00
|
||||
db '¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯', 0x00
|
||||
db '¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯', 0x00
|
||||
db '¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯', 0x00
|
||||
db '¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯', 0x00
|
||||
db '¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯', 0x00
|
||||
db 'äë¢ äë¢ äë¢ äë¢ äë¢ äë¢ äë¢ ', 0x00
|
||||
db 'äë¢ äë¢ äë¢ äë¢ äë¢ äë¢ äë¢ ', 0x00
|
||||
db 'äë¢ äë¢ äë¢ äë¢ äë¢ äë¢ äë¢ ', 0x00
|
||||
db 'äë¢ äë¢ äë¢ äë¢ äë¢ äë¢ äë¢ ', 0x00
|
||||
db 'äë¢ äë¢ äë¢ äë¢ äë¢ äë¢ äë¢ ', 0x00
|
||||
db 'äë¢ ¯ äë¢ ¯ äë¢ ¯ äë¢ ¯ äë¢ ¯', 0x00
|
||||
db 'äë¢ ¯ äë¢ ¯ äë¢ ¯ äë¢ ¯ äë¢ ¯', 0x00
|
||||
db 'äë¢ ¯ äë¢ ¯ äë¢ ¯ äë¢ ¯ äë¢ ¯', 0x00
|
||||
db 'äë¢ ¯ äë¢ ¯ äë¢ ¯ äë¢ ¯ äë¢ ¯', 0x00
|
||||
db ' ¢ëä ¢ëä ¢ëä ¢ëä ¢ëä ë¢ä ¢ëä', 0x00
|
||||
db ' ¢ëä ¢ëä ¢ëä ¢ëä ¢ëä ë¢ä ¢ëä', 0x00
|
||||
db '¯ ¢ëä ¯ ¢ëä ¯ ¢ëä ¯ ¢ëä ¯ ¢ëä', 0x00
|
||||
db '¯ ¢ëä ¯ ¢ëä ¯ ¢ëä ¯ ¢ëä ¯ ¢ëä', 0xFE
|
||||
|
||||
; “ப 2
|
||||
db '® ® ® ® ® ® ® ® ® ® ® ® ® ® ® ® ®',0x00
|
||||
db '® ® ® ® ® ® ® ® ® ® ® ® ® ® ® ® ®',0x00
|
||||
db '® ® ® ® ® ® ® ® ® ® ® ® ® ® ® ® ®',0x00
|
||||
db '® ® ® ® ® ® ® ® ® ® ® ® ® ® ® ® ®',0x00
|
||||
db '« « « « « « « « « « « « « « « « «',0x00
|
||||
db '« « « « « « « « « « « « « « « « «',0x00
|
||||
db '« « « « « « « « « « « « « « « « «',0x00
|
||||
db '« « « « « « « « « « « « « « « « «',0x00
|
||||
db '¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤',0x00
|
||||
db '¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤',0x00
|
||||
db '¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤',0x00
|
||||
db '¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤',0x00
|
||||
db '¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦',0x00
|
||||
db '¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦',0x00
|
||||
db '¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦',0x00
|
||||
db '¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦',0x00
|
||||
db 'à à à à à à à à à à à à à à à à à',0x00
|
||||
db 'à à à à à à à à à à à à à à à à à',0x00
|
||||
db 'à à à à à à à à à à à à à à à à à',0x00
|
||||
db 'à à à à à à à à à à à à à à à à à',0x00
|
||||
db '®à ®à ®à ®à ®à ®à ®à ®à ®à ®à ®à',0x00
|
||||
db '®à ®à ®à ®à ®à ®à ®à ®à ®à ®à ®à',0x00
|
||||
db '®à ®à ®à ®à ®à ®à ®à ®à ®à ®à ®à',0x00
|
||||
db 'à® à® à® à® à® à® à® à® à® à® à®',0x00
|
||||
db 'à® à® à® à® à® à® à® à® à® à® à®', 0x00
|
||||
db 'à® à® à® à® à® à® à® à® à® à® à®', 0x00
|
||||
db 'í í í í í í í í í í í í í í í í', 0x00
|
||||
db 'í í í í í í í í í í í í í í í í', 0x00
|
||||
db 'í í í í í í í í í í í í í í í í', 0x00
|
||||
db 'í í í í í í í í í í í í í í í í', 0x00
|
||||
db 'í í í í í í í í í í í í í í í í', 0x00
|
||||
db 'í í í í í í í í í í í í í í í í', 0x00
|
||||
db '®à í¦ ®à í¦ ®à í¦ ®à í¦ ®à í¦ ®à', 0x00
|
||||
db '®à í¦ ®à í¦ ®à í¦ ®à í¦ ®à í¦ ®à', 0x00
|
||||
db '®à í¦ ®à í¦ ®à í¦ ®à í¦ ®à í¦ ®à', 0x00
|
||||
db '®à í¦ ®à í¦ ®à í¦ ®à í¦ ®à í¦ ®à', 0x00
|
||||
db '®«¤¦ ®«¤¦ ®«¤¦ ®«¤¦ ®«¤¦ ®«¤¦ í', 0x00
|
||||
db '®«¤¦ ®«¤¦ ®«¤¦ ®«¤¦ ®«¤¦ ®«¤¦ í', 0x00
|
||||
db '®«¤¦ ®«¤¦ ®«¤¦ ®«¤¦ ®«¤¦ ®«¤¦ í', 0x00
|
||||
db '®«¤¦ ®«¤¦ ®«¤¦ ®«¤¦ ®«¤¦ ®«¤¦ í', 0x00
|
||||
db 'íà íà íà íà íà íà íà íà íà íà íà', 0x00
|
||||
db 'íà íà íà íà íà íà íà íà íà íà íà', 0x00
|
||||
db 'íà íà íà íà íà íà íà íà íà íà íà', 0x00
|
||||
db 'íà íà íà íà íà íà íà íà íà íà íà', 0xFE
|
||||
|
||||
;“ப 3
|
||||
db 'äë¢ ¯à ®«¤¦ í äë¢ ¯à ®«¤¦ í',0x00
|
||||
db 'äë¢ ¯à ®«¤¦ í äë¢ ¯à ®«¤¦ í',0x00
|
||||
db 'äë¢ ¯à ®«¤¦ í äë¢ ¯à ®«¤¦ í',0x00
|
||||
db 'äë¢ ¯à ®«¤¦ í äë¢ ¯à ®«¤¦ í',0x00
|
||||
db 'äë¢ ¯à ®«¤¦ í äë¢ ¯à ®«¤¦ í',0x00
|
||||
db 'äë¢ ¯à ®«¤¦ í äë¢ ¯à ®«¤¦ í',0x00
|
||||
db 'äë¢ ¯à®¯ « ®«¤¦ ¯à®¯ « ííí',0x00
|
||||
db 'äë¢ ¯à®¯ « ®«¤¦ ¯à®¯ « ííí',0x00
|
||||
db 'äë¢ ¯à®¯ « ®«¤¦ ¯à®¯ « ííí',0x00
|
||||
db 'äë¢ ¯à®¯ « ®«¤¦ ¯à®¯ « ííí',0x00
|
||||
db 'äë¢ ¯à®¯ « ®«¤¦ ¯à®¯ « ííí',0x00
|
||||
db 'äë¢ ¯à®¯ « ®«¤¦ ¯à®¯ « ííí',0x00
|
||||
db '¯à® ®à í¤¦ ¦¤«® ¯à® ®à í¤¦ ¦¤«®',0x00
|
||||
db '¯à® ®à í¤¦ ¦¤«® ¯à® ®à í¤¦ ¦¤«®',0x00
|
||||
db '¯à® ®à í¤¦ ¦¤«® ¯à® ®à í¤¦ ¦¤«®',0x00
|
||||
db '¯à® ®à í¤¦ ¦¤«® ¯à® ®à í¤¦ ¦¤«®',0x00
|
||||
db '¯à® ®à í¤¦ ¦¤«® ¯à® ®à í¤¦ ¦¤«®',0x00
|
||||
db '¯à® ®à í¤¦ ¦¤«® ¯à® ®à í¤¦ ¦¤«®',0x00
|
||||
db '¯à® ®à í¤¦ ¦¤«® ¯à® ®à í¤¦ ¦¤«®',0x00
|
||||
db '¯à® ®à í¤¦ ¦¤«® ¯à® ®à í¤¦ ¦¤«®',0x00
|
||||
db '¯à® ®à í¤¦ ¦¤«® ¯à® ®à í¤¦ ¦¤«®',0x00
|
||||
db 'ä í ä í ä í ä í ä í ä í ä í ä í',0x00
|
||||
db 'ä í ä í ä í ä í ä í ä í ä í ä í',0x00
|
||||
db 'ä í ä í ä í ä í ä í ä í ä í ä í',0x00
|
||||
db 'ä í ä í ä í ä í ä í ä í ä í ä í',0x00
|
||||
db 'ä í ä í ä í ä í ä í ä í ä í ä í',0x00
|
||||
db 'ä í ä í ä í ä í ä í ä í ä í ä í',0x00
|
||||
db '¯ ¤ « «®à¤ ¯à®¯ « த äë¢ í¯à',0x00
|
||||
db '¯ ¤ « «®à¤ ¯à®¯ « த äë¢ í¯à',0x00
|
||||
db '¯ ¤ « «®à¤ ¯à®¯ « த äë¢ í¯à',0x00
|
||||
db '¯ ¤ « «®à¤ ¯à®¯ « த äë¢ í¯à',0x00
|
||||
db '¯ ¤ « «®à¤ ¯à®¯ « த äë¢ í¯à',0x00
|
||||
db '¤®« த ¤®« த ¤ ¤ ¤ ¯à®ä',0x00
|
||||
db '¤®« த ¤®« த ¤ ¤ ¤ ¯à®ä',0x00
|
||||
db '¤®« த ¤®« த ¤ ¤ ¤ ¯à®ä',0x00
|
||||
db '¤®« த ¤®« த ¤ ¤ ¤ ¯à®ä',0x00
|
||||
db ' ¯ ®à ¯ ®à ¯ ®à à® ¯ à® ¯ ',0x00
|
||||
db ' ¯ ®à ¯ ®à ¯ ®à à® ¯ à® ¯ ',0x00
|
||||
db ' ¯ ®à ¯ ®à ¯ ®à à® ¯ à® ¯ ',0x00
|
||||
db ' ¯ ®à ¯ ®à ¯ ®à à® ¯ à® ¯ ',0x00
|
||||
db ' ¯ ®à ¯ ®à ¯ ®à à® ¯ à® ¯ ',0x00
|
||||
db ' ¯ ®à ¯ ®à ¯ ®à à® ¯ à® ¯ ',0x00
|
||||
db ' ¯ ®à ¯ ®à ¯ ®à à® ¯ à® ¯ ',0x00
|
||||
db '¦í ëä ¦í ëä ¦í ëä ¦í ëä ¦í ëä',0x00
|
||||
db '¦í ëä ¦í ëä ¦í ëä ¦í ëä ¦í ëä',0x00
|
||||
db '¦í ëä ¦í ëä ¦í ëä ¦í ëä ¦í ëä',0x00
|
||||
db '¦í ëä ¦í ëä ¦í ëä ¦í ëä ¦í ëä',0x00
|
||||
db '¦í ëä ¦í ëä ¦í ëä ¦í ëä ¦í ëä',0x00
|
||||
db '¦í ëä ¦í ëä ¦í ëä ¦í ëä ¦í ëä',0x00
|
||||
db '¦í ëä ¦í ëä ¦í ëä ¦í ëä ¦í ëä',0x00
|
||||
db '¦í ëä ¦í ëä ¦í ëä ¦í ëä ¦í ëä',0x00
|
||||
db 'í¦ äë í¦ äë í¦ äë í¦ äë í¦ äë',0x00
|
||||
db 'í¦ äë í¦ äë í¦ äë í¦ äë í¦ äë',0x00
|
||||
db 'í¦ äë í¦ äë í¦ äë í¦ äë í¦ äë',0x00
|
||||
db 'í¦ äë í¦ äë í¦ äë í¦ äë í¦ äë',0x00
|
||||
db 'í¦ äë í¦ äë í¦ äë í¦ äë í¦ äë',0x00
|
||||
db 'í¦ äë í¦ äë í¦ äë í¦ äë í¦ äë',0xFE
|
||||
|
||||
|
||||
;“ப 4
|
||||
db 'ï ï ï ï ï ï ï ï ï ï ï ï ï ï ï',0x00
|
||||
db 'ï ï ï ï ï ï ï ï ï ï ï ï ï ï ï',0x00
|
||||
db 'ï ï ï ï ï ï ï ï ï ï ï ï ï ï ï',0x00
|
||||
db 'ï ï ï ï ï ï ï ï ï ï ï ï ï ï ï',0x00
|
||||
db 'ï ä ï ä ï ä ï ä ï ä ï ä ï ä ï',0x00
|
||||
db 'ï ä ï ä ï ä ï ä ï ä ï ä ï ä ï',0x00
|
||||
db 'ï ä ï ä ï ä ï ä ï ä ï ä ï ä ï',0x00
|
||||
db 'ï ä ï ä ï ä ï ä ï ä ï ä ï ä ï',0x00
|
||||
db 'ï ä ï ä ï ä ï ä ï ä ï ä ï ä ï',0x00
|
||||
db 'ï ä ï ä ï ä ï ä ï ä ï ä ï ä ï',0x00
|
||||
db 'ç ç ç ç ç ç ç ç ç ç ç ç ç ç ç',0x00
|
||||
db 'ç ç ç ç ç ç ç ç ç ç ç ç ç ç ç',0x00
|
||||
db 'ç ç ç ç ç ç ç ç ç ç ç ç ç ç ç',0x00
|
||||
db 'ç ç ç ç ç ç ç ç ç ç ç ç ç ç ç',0x00
|
||||
db 'ç ë ç ë ç ë ç ë ç ë ç ë ç ë ç',0x00
|
||||
db 'ç ë ç ë ç ë ç ë ç ë ç ë ç ë ç',0x00
|
||||
db 'ç ë ç ë ç ë ç ë ç ë ç ë ç ë ç',0x00
|
||||
db 'ç ë ç ë ç ë ç ë ç ë ç ë ç ë ç',0x00
|
||||
db 'ç ë ç ë ç ë ç ë ç ë ç ë ç ë ç',0x00
|
||||
db 'ç ë ç ë ç ë ç ë ç ë ç ë ç ë ç',0x00
|
||||
db 'á á á á á á á á á á á á á á á',0x00
|
||||
db 'á á á á á á á á á á á á á á á',0x00
|
||||
db 'á á á á á á á á á á á á á á á',0x00
|
||||
db 'á á á á á á á á á á á á á á á',0x00
|
||||
db 'á ¢ á ¢ á ¢ á ¢ á ¢ á ¢ á ¢ á',0x00
|
||||
db 'á ¢ á ¢ á ¢ á ¢ á ¢ á ¢ á ¢ á',0x00
|
||||
db 'á ¢ á ¢ á ¢ á ¢ á ¢ á ¢ á ¢ á',0x00
|
||||
db 'á ¢ á ¢ á ¢ á ¢ á ¢ á ¢ á ¢ á',0x00
|
||||
db 'á ¢ á ¢ á ¢ á ¢ á ¢ á ¢ á ¢ á',0x00
|
||||
db 'á ¢ á ¢ á ¢ á ¢ á ¢ á ¢ á ¢ á',0x00
|
||||
db '¬ ¬ ¬ ¬ ¬ ¬ ¬ ¬ ¬ ¬ ¬ ¬ ¬ ¬ ¬',0x00
|
||||
db '¬ ¬ ¬ ¬ ¬ ¬ ¬ ¬ ¬ ¬ ¬ ¬ ¬ ¬ ¬',0x00
|
||||
db '¬ ¬ ¬ ¬ ¬ ¬ ¬ ¬ ¬ ¬ ¬ ¬ ¬ ¬ ¬',0x00
|
||||
db '¬ ¬ ¬ ¬ ¬ ¬ ¬ ¬ ¬ ¬ ¬ ¬ ¬ ¬ ¬',0x00
|
||||
db '¬ ¬ ¬ ¬ ¬ ¬ ¬ ¬',0x00
|
||||
db '¬ ¬ ¬ ¬ ¬ ¬ ¬ ¬',0x00
|
||||
db '¬ ¬ ¬ ¬ ¬ ¬ ¬ ¬',0x00
|
||||
db '¬ ¬ ¬ ¬ ¬ ¬ ¬ ¬',0x00
|
||||
db '¬ ¬ ¬ ¬ ¬ ¬ ¬ ¬ ¬ ¬ ¬ ¬ ',0x00
|
||||
db '¬ ¬ ¬ ¬ ¬ ¬ ¬ ¬ ¬ ¬ ¬ ¬ ',0x00
|
||||
db '¬ ¬ ¬ ¬ ¬ ¬ ¬ ¬ ¬ ¬ ¬ ¬ ',0x00
|
||||
db '¬ ¬ ¬ ¬ ¬ ¬ ¬ ¬ ¬ ¬ ¬ ¬ ',0x00
|
||||
db '¨ ¨ ¨ ¨ ¨ ¨ ¨ ¨ ¨ ¨ ¨ ¨ ¨ ¨ ¨',0x00
|
||||
db '¨ ¨ ¨ ¨ ¨ ¨ ¨ ¨ ¨ ¨ ¨ ¨ ¨ ¨ ¨',0x00
|
||||
db '¨ ¨ ¨ ¨ ¨ ¨ ¨ ¨ ¨ ¨ ¨ ¨ ¨ ¨ ¨',0x00
|
||||
db '¨ ¨ ¨ ¨ ¨ ¨ ¨ ¨ ¨ ¨ ¨ ¨ ¨ ¨ ¨',0x00
|
||||
db '¨ ¯ ¨ ¯ ¨ ¯ ¨ ¯ ¨ ¯ ¨ ¯ ¨ ¯ ¨',0x00
|
||||
db '¨ ¯ ¨ ¯ ¨ ¯ ¨ ¯ ¨ ¯ ¨ ¯ ¨ ¯ ¨',0x00
|
||||
db '¨ ¯ ¨ ¯ ¨ ¯ ¨ ¯ ¨ ¯ ¨ ¯ ¨ ¯ ¨',0x00
|
||||
db '¨ ¯ ¨ ¯ ¨ ¯ ¨ ¯ ¨ ¯ ¨ ¯ ¨ ¯ ¨',0x00
|
||||
db '¬ ¯¨ ¬ ¯¨ ¬ ¯¨ ¬ ¯¨ ¬ ¯¨ ¬ ¯¨',0x00
|
||||
db '¬ ¯¨ ¬ ¯¨ ¬ ¯¨ ¬ ¯¨ ¬ ¯¨ ¬ ¯¨',0x00
|
||||
db '¬ ¯¨ ¬ ¯¨ ¬ ¯¨ ¬ ¯¨ ¬ ¯¨ ¬ ¯¨',0x00
|
||||
db '¬ ¯¨ ¬ ¯¨ ¬ ¯¨ ¬ ¯¨ ¬ ¯¨ ¬ ¯¨',0x00
|
||||
db 'ï¬ ¢ ¬ á ¬ ¬ ¯ äë¢ ç¨¯ ¯¨¢ ',0x00
|
||||
db 'ï¬ ¢ ¬ á ¬ ¬ ¯ äë¢ ç¨¯ ¯¨¢ ',0x00
|
||||
db 'ï¬ ¢ ¬ á ¬ ¬ ¯ äë¢ ç¨¯ ¯¨¢ ',0x00
|
||||
db 'äë¢ ¯ ïçᬨ äë¢ ¯ ïçᬨ ¨¬áçï',0x00
|
||||
db 'äë¢ ¯ ïçᬨ äë¢ ¯ ïçᬨ ¨¬áçï',0x00
|
||||
db 'äë¢ ¯ ïçᬨ äë¢ ¯ ïçᬨ ¨¬áçï',0x00
|
||||
db 'äë¢ ¯ ïçᬨ äë¢ ¯ ïçᬨ ¨¬áçï',0x00
|
||||
db 'äë¢ ¯ ïçᬨ äë¢ ¯ ïçᬨ ¨¬áçï',0x00
|
||||
db 'äë¢ ¯ ïçᬨ äë¢ ¯ ïçᬨ ¨¬áçï',0xFE
|
||||
|
||||
;“ப 5
|
||||
db 'â â â â â â â â â â â â â â â',0x00
|
||||
db 'â â â â â â â â â â â â â â â',0x00
|
||||
db 'â â â â â â â â â â â â â â â',0x00
|
||||
db 'â â â â â â â â â â â â â â â',0x00
|
||||
db 'â à â à â à â à â à â à â à â',0x00
|
||||
db 'â à â à â à â à â à â à â à â',0x00
|
||||
db 'â à â à â à â à â à â à â à â',0x00
|
||||
db 'â à â à â à â à â à â à â à â',0x00
|
||||
db 'â à â à â à â à â à â à â à â',0x00
|
||||
db 'â à â à â à â à â à â à â à â',0x00
|
||||
db 'ì ì ì ì ì ì ì ì ì ì ì ì ì ì ì',0x00
|
||||
db 'ì ì ì ì ì ì ì ì ì ì ì ì ì ì ì',0x00
|
||||
db 'ì ì ì ì ì ì ì ì ì ì ì ì ì ì ì',0x00
|
||||
db 'ì ì ì ì ì ì ì ì ì ì ì ì ì ì ì',0x00
|
||||
db 'ì ® ì ® ì ® ì ® ì ® ì ® ì ® ì',0x00
|
||||
db 'ì ® ì ® ì ® ì ® ì ® ì ® ì ® ì',0x00
|
||||
db 'ì ® ì ® ì ® ì ® ì ® ì ® ì ® ì',0x00
|
||||
db 'ì ® ì ® ì ® ì ® ì ® ì ® ì ® ì',0x00
|
||||
db 'ì ® ì ® ì ® ì ® ì ® ì ® ì ® ì',0x00
|
||||
db 'ì ® ì ® ì ® ì ® ì ® ì ® ì ® ì',0x00
|
||||
db '¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡',0x00
|
||||
db '¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡',0x00
|
||||
db '¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡',0x00
|
||||
db '¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡',0x00
|
||||
db '¡ « ¡ « ¡ « ¡ « ¡ « ¡ « ¡ « ¡',0x00
|
||||
db '¡ « ¡ « ¡ « ¡ « ¡ « ¡ « ¡ « ¡',0x00
|
||||
db '¡ « ¡ « ¡ « ¡ « ¡ « ¡ « ¡ « ¡',0x00
|
||||
db '¡ « ¡ « ¡ « ¡ « ¡ « ¡ « ¡ « ¡',0x00
|
||||
db '¡ « ¡ « ¡ « ¡ « ¡ « ¡ « ¡ « ¡',0x00
|
||||
db '¡ « ¡ « ¡ « ¡ « ¡ « ¡ « ¡ « ¡',0x00
|
||||
db 'î î î î î î î î î î î î î î î',0x00
|
||||
db 'î î î î î î î î î î î î î î î',0x00
|
||||
db 'î î î î î î î î î î î î î î î',0x00
|
||||
db 'î î î î î î î î î î î î î î î',0x00
|
||||
db 'î ¤ î ¤ î ¤ î ¤ î ¤ î ¤ î ¤ î',0x00
|
||||
db 'î ¤ î ¤ î ¤ î ¤ î ¤ î ¤ î ¤ î',0x00
|
||||
db 'î ¤ î ¤ î ¤ î ¤ î ¤ î ¤ î ¤ î',0x00
|
||||
db 'î ¤ î ¤ î ¤ î ¤ î ¤ î ¤ î ¤ î',0x00
|
||||
db 'î ¤ î ¤ î ¤ î ¤ î ¤ î ¤ î ¤ î',0x00
|
||||
db 'î ¤ î ¤ î ¤ î ¤ î ¤ î ¤ î ¤ î',0x00
|
||||
db '«î¤ «î¤ «î¤ «î¤ «î¤ «î¤ «î¤ «î¤',0x00
|
||||
db '«î¤ «î¤ «î¤ «î¤ «î¤ «î¤ «î¤ «î¤',0x00
|
||||
db '«î¤ «î¤ «î¤ «î¤ «î¤ «î¤ «î¤ «î¤',0x00
|
||||
db '«î¤ «î¤ «î¤ «î¤ «î¤ «î¤ «î¤ «î¤',0x00
|
||||
db 'í«â í«â í«â í«â í«â í«â í«â í«â',0x00
|
||||
db 'í«â í«â í«â í«â í«â í«â í«â í«â',0x00
|
||||
db 'í«â í«â í«â í«â í«â í«â í«â í«â',0x00
|
||||
db 'த ¤®« «î¤ ¡îâì ¡îâì ¡îâì ¤®â',0x00
|
||||
db 'த ¤®« «î¤ ¡îâì ¡îâì ¡îâì ¤®â',0x00
|
||||
db 'த ¤®« «î¤ ¡îâì ¡îâì ¡îâì ¤®â',0x00
|
||||
db 'த ¤®« «î¤ ¡îâì ¡îâì ¡îâì ¤®â',0xFE
|
||||
|
||||
;“ப 6
|
||||
db '¬ ç⠯த « í¤¢ ठ¬¨à âîàì¬ ',0x00
|
||||
db '¬ ç⠯த « í¤¢ ठ¬¨à âîàì¬ ',0x00
|
||||
db '¬ ç⠯த « í¤¢ ठ¬¨à âîàì¬ ',0x00
|
||||
db '¬ ç⠯த « í¤¢ ठ¬¨à âîàì¬ ',0x00
|
||||
db 'ï ¡ë« ¤®¬ ¯à®¤ « ᬨ ᯨàâ',0x00
|
||||
db 'ï ¡ë« ¤®¬ ¯à®¤ « ᬨ ᯨàâ',0x00
|
||||
db 'ï ¡ë« ¤®¬ ¯à®¤ « ᬨ ᯨàâ',0x00
|
||||
db 'ï ¡ë« ¤®¬ ¯à®¤ « ᬨ ᯨàâ',0x00
|
||||
db 'â ¬ ¯¨¢® ¢®¤ ¤ ¤ ¤ ¯à ¢¤ ',0x00
|
||||
db 'â ¬ ¯¨¢® ¢®¤ ¤ ¤ ¤ ¯à ¢¤ ',0x00
|
||||
db 'â ¬ ¯¨¢® ¢®¤ ¤ ¤ ¤ ¯à ¢¤ ',0x00
|
||||
db 'â ¬ ¯¨¢® ¢®¤ ¤ ¤ ¤ ¯à ¢¤ ',0x00
|
||||
db '¢ à¨â ¢ à ¨ á ¬®¢ à ç¨áâ ¦ í',0x00
|
||||
db '¢ à¨â ¢ à ¨ á ¬®¢ à ç¨áâ ¦ í',0x00
|
||||
db '¢ à¨â ¢ à ¨ á ¬®¢ à ç¨áâ ¦ í',0x00
|
||||
db '¢ à¨â ¢ à ¨ á ¬®¢ à ç¨áâ ¦ í',0x00
|
||||
db 'äë¢ ®«¤¦ ¡¨« ¨ ¡¨« ¤ ¯®¡¨«',0x00
|
||||
db 'äë¢ ®«¤¦ ¡¨« ¨ ¡¨« ¤ ¯®¡¨«',0x00
|
||||
db 'äë¢ ®«¤¦ ¡¨« ¨ ¡¨« ¤ ¯®¡¨«',0x00
|
||||
db 'äë¢ ®«¤¦ ¡¨« ¨ ¡¨« ¤ ¯®¡¨«',0x00
|
||||
db 'ï í ä î ï í ä î ï í ä î ï í ä',0x00
|
||||
db 'ï í ä î ï í ä î ï í ä î ï í ä',0x00
|
||||
db 'ï í ä î ï í ä î ï í ä î ï í ä',0x00
|
||||
db 'ï í ä î ï í ä î ï í ä î ï í ä',0xFE
|
||||
|
||||
;“ப 7
|
||||
db '© © © © © © © © © © © © © © ©',0x00
|
||||
db '© © © © © © © © © © © © © © ©',0x00
|
||||
db '© © © © © © © © © © © © © © ©',0x00
|
||||
db '© © © © © © © © © © © © © © ©',0x00
|
||||
db '© ä © ä © ä © ä © ä © ä © ä ©',0x00
|
||||
db '© ä © ä © ä © ä © ä © ä © ä ©',0x00
|
||||
db '© ä © ä © ä © ä © ä © ä © ä ©',0x00
|
||||
db '© ä © ä © ä © ä © ä © ä © ä ©',0x00
|
||||
db '© ä ï © ä ï © ä ï © ä ï © ä ï',0x00
|
||||
db '© ä ï © ä ï © ä ï © ä ï © ä ï',0x00
|
||||
db '© ä ï © ä ï © ä ï © ä ï © ä ï',0x00
|
||||
db '© ä ï © ä ï © ä ï © ä ï © ä ï',0x00
|
||||
db 'æ æ æ æ æ æ æ æ æ æ æ æ æ æ æ',0x00
|
||||
db 'æ æ æ æ æ æ æ æ æ æ æ æ æ æ æ',0x00
|
||||
db 'æ æ æ æ æ æ æ æ æ æ æ æ æ æ æ',0x00
|
||||
db 'æ æ æ æ æ æ æ æ æ æ æ æ æ æ æ',0x00
|
||||
db 'æ ë æ ë æ ë æ ë æ ë æ ë æ ë æ',0x00
|
||||
db 'æ ë æ ë æ ë æ ë æ ë æ ë æ ë æ',0x00
|
||||
db 'æ ë æ ë æ ë æ ë æ ë æ ë æ ë æ',0x00
|
||||
db 'æ ë æ ë æ ë æ ë æ ë æ ë æ ë æ',0x00
|
||||
db 'æëæ æëæ æëæ æëæ æëæ æëæ æëæ',0x00
|
||||
db 'æëæ æëæ æëæ æëæ æëæ æëæ æëæ',0x00
|
||||
db 'æ ë ç æ ë ç æ ë ç æ ë ç æ ë ç',0x00
|
||||
db 'æ ë ç æ ë ç æ ë ç æ ë ç æ ë ç',0x00
|
||||
db 'æ ë ç æ ë ç æ ë ç æ ë ç æ ë ç',0x00
|
||||
db 'æ ë ç æ ë ç æ ë ç æ ë ç æ ë ç',0x00
|
||||
db 'ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã',0x00
|
||||
db 'ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã',0x00
|
||||
db 'ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã',0x00
|
||||
db 'ã ã ã ã ã ã ã ã ã ã ã ã ã ã ã',0x00
|
||||
db 'ã ¢ ã ¢ ã ¢ ã ¢ ã ¢ ã ¢ ã ¢ ã',0x00
|
||||
db 'ã ¢ ã ¢ ã ¢ ã ¢ ã ¢ ã ¢ ã ¢ ã',0x00
|
||||
db 'ã ¢ ã ¢ ã ¢ ã ¢ ã ¢ ã ¢ ã ¢ ã',0x00
|
||||
db 'ã ¢ ã ¢ ã ¢ ã ¢ ã ¢ ã ¢ ã ¢ ã',0x00
|
||||
db 'ã ¢ á ã ¢ á ã ¢ á ã ¢ á ã ¢ á',0x00
|
||||
db 'ã ¢ á ã ¢ á ã ¢ á ã ¢ á ã ¢ á',0x00
|
||||
db 'ã ¢ á ã ¢ á ã ¢ á ã ¢ á ã ¢ á',0x00
|
||||
db 'ã ¢ á ã ¢ á ã ¢ á ã ¢ á ã ¢ á',0x00
|
||||
db 'ª ª ª ª ª ª ª ª ª ª ª ª ª ª ª',0x00
|
||||
db 'ª ª ª ª ª ª ª ª ª ª ª ª ª ª ª',0x00
|
||||
db 'ª ª ª ª ª ª ª ª ª ª ª ª ª ª ª',0x00
|
||||
db 'ª ª ª ª ª ª ª ª ª ª ª ª ª ª ª',0x00
|
||||
db 'ª ª ª ª ª ª ª ª',0x00
|
||||
db 'ª ª ª ª ª ª ª ª',0x00
|
||||
db 'ª ª ª ª ª ª ª ª',0x00
|
||||
db 'ª ª ª ª ª ª ª ª',0x00
|
||||
db 'ª ª ª ª ª ª ª ª ª ª ª ª ',0x00
|
||||
db 'ª ª ª ª ª ª ª ª ª ª ª ª ',0x00
|
||||
db 'ª ª ª ª ª ª ª ª ª ª ª ª ',0x00
|
||||
db 'ª ª ª ª ª ª ª ª ª ª ª ª ',0x00
|
||||
db 'ª ¬ ª ¬ ª ¬ ª ¬ ª ¬',0x00
|
||||
db 'ª ¬ ª ¬ ª ¬ ª ¬ ª ¬',0x00
|
||||
db 'ª ¬ ª ¬ ª ¬ ª ¬ ª ¬',0x00
|
||||
db 'ª ¬ ª ¬ ª ¬ ª ¬ ª ¬',0x00
|
||||
db '¥ ¥ ¥ ¥ ¥ ¥ ¥ ¥ ¥ ¥ ¥ ¥ ¥ ¥ ¥',0x00
|
||||
db '¥ ¥ ¥ ¥ ¥ ¥ ¥ ¥ ¥ ¥ ¥ ¥ ¥ ¥ ¥',0x00
|
||||
db '¥ ¥ ¥ ¥ ¥ ¥ ¥ ¥ ¥ ¥ ¥ ¥ ¥ ¥ ¥',0x00
|
||||
db '¥ ¥ ¥ ¥ ¥ ¥ ¥ ¥ ¥ ¥ ¥ ¥ ¥ ¥ ¥',0x00
|
||||
db '¥ ¯ ¥ ¯ ¥ ¯ ¥ ¯ ¥ ¯ ¥ ¯ ¥ ¯ ¥',0x00
|
||||
db '¥ ¯ ¥ ¯ ¥ ¯ ¥ ¯ ¥ ¯ ¥ ¯ ¥ ¯ ¥',0x00
|
||||
db '¥ ¯ ¥ ¯ ¥ ¯ ¥ ¯ ¥ ¯ ¥ ¯ ¥ ¯ ¥',0x00
|
||||
db '¥ ¯ ¥ ¯ ¥ ¯ ¥ ¯ ¥ ¯ ¥ ¯ ¥ ¯ ¥',0x00
|
||||
db '¥ ¯ ¨ ¥ ¯ ¨ ¥ ¯ ¨ ¥ ¯ ¨ ¥ ¯ ¨',0x00
|
||||
db '¥ ¯ ¨ ¥ ¯ ¨ ¥ ¯ ¨ ¥ ¯ ¨ ¥ ¯ ¨',0x00
|
||||
db '¥ ¯ ¨ ¥ ¯ ¨ ¥ ¯ ¨ ¥ ¯ ¨ ¥ ¯ ¨',0x00
|
||||
db '¥ ¯ ¨ ¥ ¯ ¨ ¥ ¯ ¨ ¥ ¯ ¨ ¥ ¯ ¨',0x00
|
||||
db '©æ㪥 äë¢ ¯ ïçᬨ ©æ㪥 ïçᬨ',0x00
|
||||
db '©æ㪥 äë¢ ¯ ïçᬨ ©æ㪥 ïçᬨ',0x00
|
||||
db '©æ㪥 äë¢ ¯ ïçᬨ ©æ㪥 ïçᬨ',0x00
|
||||
db '©æ㪥 äë¢ ¯ ïçᬨ ©æ㪥 ïçᬨ',0x00
|
||||
db '©æ㪥 äë¢ ¯ ïçᬨ ©æ㪥 ïçᬨ',0x00
|
||||
db '©æ㪥 äë¢ ¯ ïçᬨ ©æ㪥 ïçᬨ',0x00
|
||||
db '©æ㪥 äë¢ ¯ ïçᬨ ©æ㪥 ïçᬨ',0x00
|
||||
db '¥ªãæ© ¯ ¢ëä ¨¬áçï ¥ªãæ© ¨¬áçï',0x00
|
||||
db '¥ªãæ© ¯ ¢ëä ¨¬áçï ¥ªãæ© ¨¬áçï',0x00
|
||||
db '¥ªãæ© ¯ ¢ëä ¨¬áçï ¥ªãæ© ¨¬áçï',0x00
|
||||
db '¥ªãæ© ¯ ¢ëä ¨¬áçï ¥ªãæ© ¨¬áçï',0x00
|
||||
db '¥ªãæ© ¯ ¢ëä ¨¬áçï ¥ªãæ© ¨¬áçï',0x00
|
||||
db '¥ªãæ© ¯ ¢ëä ¨¬áçï ¥ªãæ© ¨¬áçï',0x00
|
||||
db 'ñ ñ ñ ñ ñ ñ ñ ñ ñ ñ ñ ñ ñ ñ ñ',0x00
|
||||
db 'ñ ñ ñ ñ ñ ñ ñ ñ ñ ñ ñ ñ ñ ñ ñ',0x00
|
||||
db 'ñ ñ ñ ñ ñ ñ ñ ñ ñ ñ ñ ñ ñ ñ ñ',0x00
|
||||
db 'ñ ñ ñ ñ ñ ñ ñ ñ ñ ñ ñ ñ ñ ñ ñ',0x00
|
||||
db 'ñ ñ ñ ñ ñ ñ ñ ñ ñ ñ ñ ñ ñ ñ ñ',0x00
|
||||
db 'ä ñ ä ñ ä ñ ä ñ ä ñ ä ñ ä ñ ä',0x00
|
||||
db 'ä ñ ä ñ ä ñ ä ñ ä ñ ä ñ ä ñ ä',0x00
|
||||
db 'ä ñ ä ñ ä ñ ä ñ ä ñ ä ñ ä ñ ä',0x00
|
||||
db 'ä ñ ä ñ ä ñ ä ñ ä ñ ä ñ ä ñ ä',0x00
|
||||
db 'ä ñ ä ñ ä ñ ä ñ ä ñ ä ñ ä ñ ä',0xFE
|
||||
|
||||
|
||||
;“ப 8
|
||||
db ' ',0x00
|
||||
db ' ',0x00
|
||||
db ' ',0x00
|
||||
db ' ',0x00
|
||||
db ' à à à à à à à ',0x00
|
||||
db ' à à à à à à à ',0x00
|
||||
db ' à à à à à à à ',0x00
|
||||
db ' à à à à à à à ',0x00
|
||||
db ' à â à â à â à â à â',0x00
|
||||
db ' à â à â à â à â à â',0x00
|
||||
db ' à â à â à â à â à â',0x00
|
||||
db ' à â à â à â à â à â',0x00
|
||||
db '£ £ £ £ £ £ £ £ £ £ £ £ £ £ £',0x00
|
||||
db '£ £ £ £ £ £ £ £ £ £ £ £ £ £ £',0x00
|
||||
db '£ £ £ £ £ £ £ £ £ £ £ £ £ £ £',0x00
|
||||
db '£ £ £ £ £ £ £ £ £ £ £ £ £ £ £',0x00
|
||||
db '£ ® £ ® £ ® £ ® £ ® £ ® £ ® £',0x00
|
||||
db '£ ® £ ® £ ® £ ® £ ® £ ® £ ® £',0x00
|
||||
db '£ ® £ ® £ ® £ ® £ ® £ ® £ ® £',0x00
|
||||
db '£ ® £ ® £ ® £ ® £ ® £ ® £ ® £',0x00
|
||||
db '£ ® ì £ ® ì £ ® ì £ ® ì £ ® ì',0x00
|
||||
db '£ ® ì £ ® ì £ ® ì £ ® ì £ ® ì',0x00
|
||||
db '£ ® ì £ ® ì £ ® ì £ ® ì £ ® ì',0x00
|
||||
db '£ ® ì £ ® ì £ ® ì £ ® ì £ ® ì',0x00
|
||||
db 'è è è è è è è è è è è è è è è',0x00
|
||||
db 'è è è è è è è è è è è è è è è',0x00
|
||||
db 'è è è è è è è è è è è è è è è',0x00
|
||||
db 'è è è è è è è è è è è è è è è',0x00
|
||||
db 'è « è « è « è « è « è « è « è',0x00
|
||||
db 'è « è « è « è « è « è « è « è',0x00
|
||||
db 'è « è « è « è « è « è « è « è',0x00
|
||||
db 'è « è « è « è « è « è « è « è',0x00
|
||||
db 'è « ¡ è « ¡ è « ¡ è « ¡ è « ¡',0x00
|
||||
db 'è « ¡ è « ¡ è « ¡ è « ¡ è « ¡',0x00
|
||||
db 'è « ¡ è « ¡ è « ¡ è « ¡ è « ¡',0x00
|
||||
db 'è « ¡ è « ¡ è « ¡ è « ¡ è « ¡',0x00
|
||||
db 'é é é é é é é é é é é é é é é',0x00
|
||||
db 'é é é é é é é é é é é é é é é',0x00
|
||||
db 'é é é é é é é é é é é é é é é',0x00
|
||||
db 'é é é é é é é é é é é é é é é',0x00
|
||||
db 'é ¤ é ¤ é ¤ é ¤ é ¤ é ¤ é ¤ é',0x00
|
||||
db 'é ¤ é ¤ é ¤ é ¤ é ¤ é ¤ é ¤ é',0x00
|
||||
db 'é ¤ é ¤ é ¤ é ¤ é ¤ é ¤ é ¤ é',0x00
|
||||
db 'é ¤ é ¤ é ¤ é ¤ é ¤ é ¤ é ¤ é',0x00
|
||||
db 'é ¤ î é ¤ î é ¤ î é ¤ î é ¤ î',0x00
|
||||
db 'é ¤ î é ¤ î é ¤ î é ¤ î é ¤ î',0x00
|
||||
db 'é ¤ î é ¤ î é ¤ î é ¤ î é ¤ î',0x00
|
||||
db 'é ¤ î é ¤ î é ¤ î é ¤ î é ¤ î',0x00
|
||||
db '§ § § § § § § § § § § § § § §',0x00
|
||||
db '§ § § § § § § § § § § § § § §',0x00
|
||||
db '§ § § § § § § § § § § § § § §',0x00
|
||||
db '§ § § § § § § § § § § § § § §',0x00
|
||||
db '§ ¦ § ¦ § ¦ § ¦ § ¦ § ¦ § ¦ §',0x00
|
||||
db '§ ¦ § ¦ § ¦ § ¦ § ¦ § ¦ § ¦ §',0x00
|
||||
db '§ ¦ § ¦ § ¦ § ¦ § ¦ § ¦ § ¦ §',0x00
|
||||
db '§ ¦ § ¦ § ¦ § ¦ § ¦ § ¦ § ¦ §',0x00
|
||||
db '§ ¦ § ¦ § ¦ § ¦ § ¦ § ¦ § ¦ §',0x00
|
||||
db '§ ¦ § ¦ § ¦ § ¦ § ¦ § ¦ § ¦ §',0x00
|
||||
db 'å å å å å å å å å å å å å å å',0x00
|
||||
db 'å å å å å å å å å å å å å å å',0x00
|
||||
db 'å å å å å å å å å å å å å å å',0x00
|
||||
db 'å å å å å å å å å å å å å å å',0x00
|
||||
db 'å å å å å å å å å å å å å å å',0x00
|
||||
db 'å § å § å § å § å § å § å § å',0x00
|
||||
db 'å § å § å § å § å § å § å § å',0x00
|
||||
db 'å § å § å § å § å § å § å § å',0x00
|
||||
db 'å § å § å § å § å § å § å § å',0x00
|
||||
db 'å § å § å § å § å § å § å § å',0x00
|
||||
db 'ê ê ê ê ê ê ê ê ê ê ê ê ê ê ê',0x00
|
||||
db 'ê ê ê ê ê ê ê ê ê ê ê ê ê ê ê',0x00
|
||||
db 'ê ê ê ê ê ê ê ê ê ê ê ê ê ê ê',0x00
|
||||
db 'ê ê ê ê ê ê ê ê ê ê ê ê ê ê ê',0x00
|
||||
db 'ê ê ê ê ê ê ê ê ê ê ê ê ê ê ê',0x00
|
||||
db '§ å ê ê å § § å ê ê å § § å ê',0x00
|
||||
db '§ å ê ê å § § å ê ê å § § å ê',0x00
|
||||
db '§ å ê ê å § § å ê ê å § § å ê',0x00
|
||||
db '§ å ê ê å § § å ê ê å § § å ê',0x00
|
||||
db '§ å ê ê å § § å ê ê å § § å ê',0x00
|
||||
db '§ å ê ê å § § å ê ê å § § å ê',0x00
|
||||
db '§ å ê ê å § § å ê ê å § § å ê',0x00
|
||||
db '§ å ê ê å § § å ê ê å § § å ê',0x00
|
||||
db '§ å ê ê å § § å ê ê å § § å ê',0x00
|
||||
db '§ å ê ê å § § å ê ê å § § å ê',0x00
|
||||
db '£èé§åê ஫¤¦í âì¡î êå§éè£',0x00
|
||||
db '£èé§åê ஫¤¦í âì¡î êå§éè£',0x00
|
||||
db '£èé§åê ஫¤¦í âì¡î êå§éè£',0x00
|
||||
db '£èé§åê ஫¤¦í âì¡î êå§éè£',0x00
|
||||
db '£èé§åê ஫¤¦í âì¡î êå§éè£',0xFE
|
||||
|
||||
|
||||
|
||||
; “ப 9
|
||||
db '¯à¨¬¥à ¯à®¢¥àª ¡®à ⥪á ', 0x00
|
||||
db '§ ¥¬ ¡ëáâà® ¯¥ç â âì á«®¦®', 0x00
|
||||
db '® 㦮 â२஢ âìáï', 0x00
|
||||
db '¨ ⮣¤ ¯®«ãç¨âáï', 0x00
|
||||
db '¤ ¢ ©â¥ ¯¥ç â âì ¬¨§¨æ ¬¨', 0x00
|
||||
db 'ä í © § ä í © § ä í © § ä í ©', 0x00
|
||||
db ' ⥯¥àì ¡¥§ ¯à®¡¥«®¢', 0x00
|
||||
db 'äí©§ äí©§ äí©§ äí©§ äí©§ äí©§', 0x00
|
||||
db 'äí©§ äí©§ äí©§ äí©§ äí©§ äí©§', 0x00
|
||||
db 'äí©§ äí©§ äí©§ äí©§ äí©§ äí©§', 0x00
|
||||
db 'äí©§ äí©§ äí©§ äí©§ äí©§ äí©§', 0x00
|
||||
db '¢áñ íâ® ¤®áâ â®ç® á«®¦®', 0x00
|
||||
db '¤ ¢ ©â¥ ¯¥ç â âì ¤à㣨¥ á«®¢ ', 0x00
|
||||
db 'ïåâ ïåâ áꥫ íå® §¤®à®¢® ãà ', 0x00
|
||||
db 'ïåâ ïåâ áꥫ íå® §¤®à®¢® ãà ', 0x00
|
||||
db 'ïåâ ïåâ áꥫ íå® §¤®à®¢® ãà ', 0x00
|
||||
db 'ïåâ ïåâ áꥫ íå® §¤®à®¢® ãà ', 0x00
|
||||
db 'ïåâ ïåâ áꥫ íå® §¤®à®¢® ãà ', 0x00
|
||||
db 'ïåâ ïåâ áꥫ íå® §¤®à®¢® ãà ', 0x00
|
||||
db '¦¨«¨ ¡ë«¨ ¤¥¤ ¤ ¡ ¡ ¨ ¡ë« ', 0x00
|
||||
db 'ã ¨å ªãà®çª àï¡ ¨ á¥á« ', 0x00
|
||||
db 'ï¨çª® ¥ ¯à®á⮥ §®«®â®¥', 0x00
|
||||
db '¢®â ¨ ᪠§ª¥ ª®¥æ', 0x00
|
||||
db ' ªâ® á«ãè « ¬®«®¤¥æ', 0xFE
|
||||
|
||||
; “ப 10
|
||||
|
||||
|
||||
db 'ª®«¨¡à¨ ª®«¨¡à¨ ª®«¨¡à¨ ª®«¨¡à¨', 0x00
|
||||
db 'ª®«¨¡à¨ ª®«¨¡à¨ ª®«¨¡à¨ ª®«¨¡à¨', 0x00
|
||||
db 'ª®«¨¡à¨ ª®«¨¡à¨ ª®«¨¡à¨ ª®«¨¡à¨', 0x00
|
||||
db 'ª®«¨¡à¨ ª®«¨¡à¨ ª®«¨¡à¨ ª®«¨¡à¨', 0x00
|
||||
db 'ª®«¨¡à¨ ª®«¨¡à¨ ª®«¨¡à¨ ª®«¨¡à¨', 0x00
|
||||
db '®¯¥à 樮 ï á¨á⥬ ª®«¨¡à¨ ®á', 0x00
|
||||
db '®¯¥à 樮 ï á¨á⥬ ª®«¨¡à¨ ®á', 0x00
|
||||
db '®¯¥à 樮 ï á¨á⥬ ª®«¨¡à¨ ®á', 0x00
|
||||
db '®¯¥à 樮 ï á¨á⥬ ª®«¨¡à¨ ®á', 0x00
|
||||
db '®¯¥à 樮 ï á¨á⥬ ª®«¨¡à¨ ®á', 0x00
|
||||
db '¡ëáâà ï ¤ñ¦ ï ª®¬¯ ªâ ï ®á', 0x00
|
||||
db '¡ëáâà ï ¤ñ¦ ï ª®¬¯ ªâ ï ®á', 0x00
|
||||
db '¡ëáâà ï ¤ñ¦ ï ª®¬¯ ªâ ï ®á', 0x00
|
||||
db '¡ëáâà ï ¤ñ¦ ï ª®¬¯ ªâ ï ®á', 0x00
|
||||
db '¡ëáâà ï ¤ñ¦ ï ª®¬¯ ªâ ï ®á', 0x00
|
||||
db ' áᥬ¡«¥à áᥬ¡«¥à áᥬ¡«¥à', 0x00
|
||||
db ' áᥬ¡«¥à áᥬ¡«¥à áᥬ¡«¥à', 0x00
|
||||
db ' áᥬ¡«¥à áᥬ¡«¥à áᥬ¡«¥à', 0x00
|
||||
db ' áᥬ¡«¥à áᥬ¡«¥à áᥬ¡«¥à', 0x00
|
||||
db ' áᥬ¡«¥à áᥬ¡«¥à áᥬ¡«¥à', 0x00
|
||||
db '¬¨ªà®¯à®æ¥áá®à íâ® á¥à¤æ¥ ¯ª', 0x00
|
||||
db '¬¨ªà®¯à®æ¥áá®à íâ® á¥à¤æ¥ ¯ª', 0x00
|
||||
db '¬¨ªà®¯à®æ¥áá®à íâ® á¥à¤æ¥ ¯ª', 0x00
|
||||
db '¬¨ªà®¯à®æ¥áá®à íâ® á¥à¤æ¥ ¯ª', 0x00
|
||||
db '¬¨ªà®¯à®æ¥áá®à íâ® á¥à¤æ¥ ¯ª', 0x00
|
||||
db '¬®£¨¥ ¯à®£à ¬¬ë ¤«ï ª®«¨¡à¨', 0x00
|
||||
db ' ¯¨á ë ï§ëª¥ áᥬ¡«¥à ', 0x00
|
||||
db ' ¯à¨¬¥à', 0x00
|
||||
db 'ª« ¢¨ âãàë© âॠ¦ñà ª« ¢¨è ', 0x00
|
||||
db 'ª« ¢¨ âãàë© âॠ¦ñà ª« ¢¨è ', 0x00
|
||||
db 'ª« ¢¨ âãàë© âॠ¦ñà ª« ¢¨è ', 0x00
|
||||
db 'ª« ¢¨ âãàë© âॠ¦ñà ª« ¢¨è ', 0x00
|
||||
db 'ª« ¢¨ âãàë© âॠ¦ñà ª« ¢¨è ', 0x00
|
||||
db 'ᯠᨡ® ¢ ¬ § à ¡®âã á', 0x00
|
||||
db '¯à®£à ¬¬®© ª« ¢¨è ', 0x00
|
||||
db ' ¤ ë© ªãàá í⮬ § ¢¥àèñ', 0xFE, 0xFF
|
BIN
programs/games/klavisha/trunk/courses/BASEKURS.KLA
Normal file
65
programs/games/klavisha/trunk/courses/SAMPLE.ASM
Normal file
@ -0,0 +1,65 @@
|
||||
; <20>ਬ¥à ä ©« á § ¤ ¨ï¬¨ ¤«ï ª« ¢¨ âãண®
|
||||
; âॠ¦ñà KJ|ABuIIIA
|
||||
|
||||
; Œ€Š‘ˆŒ€‹œ<E280B9>Ž „Ž<E2809E>“‘’ˆŒ›‰ <20>€‡Œ…<C592> ‘’<E28098>ŽŠˆ
|
||||
; <20>…‡ ‘Š<E28098>Ž‹‹ˆ<E280B9>ƒ€ - 38 ‘ˆŒ‚Ž‹Ž‚!
|
||||
; (¯à¨ à §¬¥à¥ ®ª ¯® 㬮«ç ¨î)
|
||||
|
||||
; <20> áâ®ïâ¥«ì® <20>… <20>…ŠŽŒ…<C592>„“…’‘Ÿ ¤¥« âì áâப¨
|
||||
; ¤«ï ¡®à ¤«¨¥¥ 38 ᨬ¢®«®¢.
|
||||
|
||||
; ‘âப¨ ®â¤¥«ïîâáï ®¤ ®â ¤à㣮© ¡ ©â®¬ 0x00
|
||||
|
||||
; “ப¨ ®â¤¥«ïîâáï ®¤¨ ®â ¤à㣮£® ¡ ©â®¬ 0xFE,
|
||||
; ª®â®àë© áâ ¢¨âáï ‚Œ…‘’Ž 0x00 ¢ ª®æ¥ ¯®á«¥¤¥©
|
||||
; áâப¨ ãப
|
||||
|
||||
; <20>®á«¥¤¨¬ ¡ ©â®¬ ä ©« „Ž‹†…<E280A0> ¡ëâì ¡ ©â 0xFF,
|
||||
; ª®â®àë© áâ ¢¨âáï <20>Ž‘‹… ¯®á«¥¤¥£® 0xFE ¢ ª®æ¥
|
||||
; ¯®á«¥¤¥£® ãப
|
||||
|
||||
; ‘®¡à ë© ä ©« (¨«¨ ¦¥ ¡à ë© ¢àãçãî ¢
|
||||
; HEX-। ªâ®à¥) ¤®«¦¥ ¨¬¥âì à áè¨à¥¨¥ .KLA
|
||||
|
||||
; ‚®â ¯à¨¬¥à ¨á室®£® ª®¤ <20><>€‚ˆ‹œ<E280B9>Ž ¯®¤£®â®¢-
|
||||
; «¥®£® KLA-ä ©« :
|
||||
|
||||
db 'äë¢ ¯à ®«¤¦ í äë¢ ¯à ®«¤¦ í',0x00
|
||||
db 'äë¢ ¯à ®«¤¦ í äë¢ ¯à ®«¤¦ í',0x00
|
||||
db 'äë¢ ¯à ®«¤¦ í äë¢ ¯à ®«¤¦ í',0x00
|
||||
db 'äë¢ ¯à ®«¤¦ í äë¢ ¯à ®«¤¦ í',0x00
|
||||
db 'äë¢ ¯à ®«¤¦ í äë¢ ¯à ®«¤¦ í',0x00
|
||||
db 'äë¢ ¯à ®«¤¦ í äë¢ ¯à ®«¤¦ í',0x00
|
||||
db 'äë¢ ¯à ®«¤¦ í äë¢ ¯à ®«¤¦ í',0x00
|
||||
db 'äë¢ ¯à ®«¤¦ í äë¢ ¯à ®«¤¦ í',0x00
|
||||
db 'äë¢ ¯à ®«¤¦ í äë¢ ¯à ®«¤¦ í',0xFE
|
||||
|
||||
db 'ïçᬨ âì¡î ïçᬨ âì¡î ïçᬨ âì¡î', 0x00
|
||||
db 'ïçᬨ âì¡î ïçᬨ âì¡î ïçᬨ âì¡î', 0x00
|
||||
db 'ïçᬨ âì¡î ïçᬨ âì¡î ïçᬨ âì¡î', 0x00
|
||||
db 'ïçᬨ âì¡î ïçᬨ âì¡î ïçᬨ âì¡î', 0x00
|
||||
db 'ïçᬨ âì¡î ïçᬨ âì¡î ïçᬨ âì¡î', 0x00
|
||||
db 'ïçᬨ âì¡î ïçᬨ âì¡î ïçᬨ âì¡î', 0x00
|
||||
db 'ïçᬨ âì¡î ïçᬨ âì¡î ïçᬨ âì¡î', 0x00
|
||||
db 'ïçᬨ âì¡î ïçᬨ âì¡î ïçᬨ âì¡î', 0x00
|
||||
db 'ïçᬨ âì¡î ïçᬨ âì¡î ïçᬨ âì¡î', 0xFE
|
||||
|
||||
db '©æ㪥 £èé§åê ©æ㪥 £èé§åê §åê',0x00
|
||||
db '©æ㪥 £èé§åê ©æ㪥 £èé§åê §åê',0x00
|
||||
db '©æ㪥 £èé§åê ©æ㪥 £èé§åê §åê',0x00
|
||||
db '©æ㪥 £èé§åê ©æ㪥 £èé§åê §åê',0x00
|
||||
db '©æ㪥 £èé§åê ©æ㪥 £èé§åê §åê',0x00
|
||||
db '©æ㪥 £èé§åê ©æ㪥 £èé§åê §åê',0x00
|
||||
db '©æ㪥 £èé§åê ©æ㪥 £èé§åê §åê',0x00
|
||||
db '©æ㪥 £èé§åê ©æ㪥 £èé§åê §åê',0x00
|
||||
db '©æ㪥 £èé§åê ©æ㪥 £èé§åê §åê',0xFE
|
||||
|
||||
db '12345678901234567890123456789012345678', 0x00
|
||||
db '<27>ਬ¥à ã¯à ¦¥¨ï.',0x00
|
||||
db '<27>â® ã¯à ¦¥¨¥ ®¬¥à 4.', 0x00
|
||||
db '<27>â® ª®¥æ ä ©« KLA.',0xFE, 0xFF
|
||||
|
||||
|
||||
|
||||
|
||||
|
BIN
programs/games/klavisha/trunk/courses/SAMPLE.KLA
Normal file
2812
programs/games/klavisha/trunk/klavisha.asm
Normal file
87
programs/games/klavisha/trunk/readme.txt
Normal file
@ -0,0 +1,87 @@
|
||||
-----------------------------------------------------------
|
||||
------------ Š« ¢¨ âãàë© âॠ¦ñà KJ|ABuIIIA -------------
|
||||
------------ ¤«ï ®¯¥à 樮®© á¨áâ¥¬ë Š®«¨¡à¨ -------------
|
||||
-----------------------------------------------------------
|
||||
---------------------- ‚¥àá¨ï 0.9a ------------------------
|
||||
-----------------------------------------------------------
|
||||
___________________________________________________________
|
||||
1. Ž¡é¨¥ ᢥ¤¥¨ï ® ¯à®£à ¬¬¥
|
||||
___________________________________________________________
|
||||
Š« ¢¨ âãàë© âॠ¦ñà KJ|ABuIIIA - íâ® ¯à®£à ¬¬ ®¡ã票ï
|
||||
¡ëáâ஬㠡®àã ¤«ï ®¯¥à 樮®© á¨áâ¥¬ë Š®«¨¡à¨ Ž‘.
|
||||
‚ è § ¤ ç - ¡¨à âì ¯à¥¤«®¦¥ë¥ ãç¥¡ë¥ â¥ªáâë á
|
||||
¬¨¨¬ «ì® ¢®§¬®¦ë¬ ª®«¨ç¥á⢮¬ ®è¨¡®ª.
|
||||
<20>ਠ§ ¯ã᪥ ¯à®£à ¬¬¥ ¤®«¦¥ ¡ëâì ¯¥à¥¤ ¯ à ¬¥âà ª®¬ -
|
||||
¤®© áâப¨ á 㪠§ ¨¥¬ ¯ã⨠ª ä ©«ã- ¡®àã ã¯à ¦¥¨© ¢
|
||||
ä®à¬ ⥠KLA, ¯à¨¬¥à:
|
||||
KLAVISHA /RD/1/BASEKURS.KLA
|
||||
…᫨ ¯ à ¬¥âà ª®¬ ¤®© áâப¨ ¥ § ¤ , ¯à®£à ¬¬ ¡ã¤¥â
|
||||
§ ¯ãé¥ ¢ ¤¥¬®áâà 樮®¬ ०¨¬¥.
|
||||
‚ ª®¬¯«¥ªâ ¯®áâ ¢ª¨ ¢å®¤¨â ç «ìë© ªãàá ®¡ãç¥¨ï ¡ëá-
|
||||
â஬㠡®àã. Ž 室¨âáï ¢ ä ©«¥ BASEKURS.KLA . Ž¤ ª®
|
||||
¯à¨¬¥¥¨¥ ¤ ®£® ªãàá ¥ ï¥âáï ®¡ï§ ⥫ìë¬: ¢ë
|
||||
¬®¦¥â¥ ¨á¯®«ì§®¢ âì KLA-ä ©« ¯® ¢ 襬ã ãᬮâ२î.
|
||||
’¥ªãé ï ¢¥àá¨ï ¯à®£à ¬¬ë ï¥âáï áâ ¡¨«ì®© ¨ ¬®¦¥â
|
||||
¯à¨¬¥ïâìáï ¢ ¯à ªâ¨ç¥áª¨å 楫ïå ¯à¨ ãá«®¢¨¨ ¯®¤ª«î票ï
|
||||
ᮮ⢥âáâ¢ãî饣® KLA-ä ©« .
|
||||
|
||||
___________________________________________________________
|
||||
2. ‘®§¤ ¨¥ ã祡ëå ä ©«®¢. ”®à¬ â KLA
|
||||
___________________________________________________________
|
||||
’¥ªáâë ¤«ï ã祡®£® ¡®à åà ïâáï ¢ ä ©« å á à áè¨à¥-
|
||||
¨¥¬ KLA. <20>ਠí⮬ â ª¨¥ ä ©«ë ¤®«¦ë ᮮ⢥âá⢮¢ âì ®¯à¥-
|
||||
¤¥«ñë¬ âॡ®¢ ¨ï¬.
|
||||
KLA-ä ©« ᮤ¥à¦¨â áâப¨ ¤«ï ¡®à , à §¤¥«ñë¥ ã«¥-
|
||||
¢ë¬ ᨬ¢®«®¬ (0x00). “ப¨ ®â¤¥«ïîâáï ®¤¨ ®â ¤à㣮£® ¡ ©-
|
||||
⮬ 0xFE (áâ ¢¨âáï ¢ ª®æ¥ ¯®á«¥¤¥© áâப¨ ãப ¢¬¥áâ®
|
||||
¡ ©â 0x00). ” ©« ¤®«¦¥ § ª 稢 âìáï ¡ ©â®¬ 0xFF (áâ -
|
||||
¢¨âáï ¢ ª®æ¥ ¯®á«¥¤¥© áâப¨ ¯®á«¥¤¥£® ãப <20>Ž‘‹… 0xFE)
|
||||
<20>ਬ¥ï¥¬ ï ª®¤¨à®¢ª ᨬ¢®«®¢ - OEM 866.
|
||||
” ©«ë KLA ¬®£ãâ ¡ëâì ¯®¤£®â®¢«¥ë á ¯®¬®éìî è¥áâ ¤æ â¥-
|
||||
à¨ç®£® (HEX) । ªâ®à «¨¡® á ¨á¯®«ì§®¢ ¨¥¬ ¯à®£à ¬¬ë-
|
||||
áᥬ¡«¥à . ‚ ª®¬¯«¥ªâ ¯®áâ ¢ª¨ ¢ª«îçñ ä ©« SAMPLE.ASM.
|
||||
|
||||
___________________________________________________________
|
||||
3. ’¥å¨ç¥áª¨¥ ᢥ¤¥¨ï ® ¯à®£à ¬¬¥ KJ|ABuIIIA
|
||||
___________________________________________________________
|
||||
<20>à®£à ¬¬ ¯¨á ç¨á⮬ áᥬ¡«¥à¥ x86.
|
||||
<20>ਬ¥ï¥âáï áᥬ¡«¥à FASM.
|
||||
|
||||
___________________________________________________________
|
||||
4. ˆáâ®à¨ï ¢¥àᨩ
|
||||
___________________________________________________________
|
||||
|
||||
KJ|ABuIIIA 0.9a - 29.07.2010
|
||||
- „®¡ ¢«¥ ¡ §®¢ë© ªãàá ®¡ã票ï (BASEKURS.KLA)
|
||||
- „®¡ ¢«¥ á¯à ¢®çë© ä ©« (README.TXT)
|
||||
|
||||
KJ|ABuIIIA 0.9 - 24.07.2010
|
||||
- „®¡ ¢«¥ "áçñâ稪 áâப": íªà ¥ ®â®¡à ¦ ¥âáï ®¬¥à
|
||||
⥪ã饩 ¡¨à ¥¬®© áâப¨ ¢ ã¯à ¦¥¨¨ ¨ ®¡é¥¥ ç¨á«® áâப.
|
||||
- „®¡ ¢«¥ ¢®§¬®¦®áâì ¯¥à¥§ ¯ã᪠ã¯à ¦¥¨ï ("<22>®¢â®à¨âì
|
||||
ã¯à ¦¥¨¥") ¨ ¯¥à¥§ ¯ã᪠¢á¥£® ã祡®£® ªãàá á ¯¥à¢®£®
|
||||
ã¯à ¦¥¨ï ("<22> ç âì ªãàá § ®¢®").
|
||||
- ƒ®à¨§®â «ìë© áªà®««¨£ ¡¨à ¥¬®© áâப¨ (®¤ ª® áâ®-
|
||||
ïâ¥«ì® à¥ª®¬¥¤ã¥âáï ¥ ᮧ¤ ¢ âì ¢ ã祡ëå § ¤ ¨ïå
|
||||
áâப¨ ¤«¨®© ¡®«¥¥ 38 ᨬ¢®«®¢).
|
||||
- <20>® ®ª®ç ¨¨ ã¯à ¦¥¨ï ¢ë¤ ñâáï ¨ä®à¬ æ¨ï ® á।¥©
|
||||
᪮à®á⨠¡®à
|
||||
- Žª® ¯à¨«®¦¥¨ï ¯à¨ § ¯ã᪥ ⥯¥àì ®â®¡à ¦ ¥âáï ¯® æ¥âàã
|
||||
íªà ¯à¨ «î¡®¬ à §à¥è¥¨¨
|
||||
|
||||
KJ|ABuIIIA 0.25 - 23.07.2010
|
||||
- ‚¬¥áâ® áâ ¤ à⮣® á¨á⥬®£® ¨á¯®«ì§®¢ ªàã¯ë© èà¨äâ
|
||||
(§ ®á®¢ã ¢§ïâ èà¨äâ ¨§ ¯ ª¥â ¨§ ९®§¨â à¨ï Ubuntu
|
||||
console-cyrillic_0.9-16_all.deb).
|
||||
- “áâà ¥® ¬¥àæ ¨¥ ®ª ¯à¨ ¢¢®¤¥ ᨬ¢®«®¢
|
||||
- „®¡ ¢«¥ § é¨â ®â "¡¨âëå" (¨«¨ ¥¯à ¢¨«ì® ¯®¤£®â®¢«¥-
|
||||
ëå) KLA-ä ©«®¢
|
||||
- “«ãçè¥ ¨â¥à䥩á
|
||||
|
||||
KJ|ABuIIIA 0.1 - 21.07.2010
|
||||
- <20>¥à¢ ï ¢¥àá¨ï ¯à®£à ¬¬ë
|
||||
|
||||
___________________________________________________________
|
||||
5. ‘¯¨á®ª à §à ¡®â稪®¢
|
||||
___________________________________________________________
|
||||
€¤à¥© Œ¨å ©«®¢¨ç aka Dron2004 (http://www.lvtam.ru)
|