Added sources: emulator/PrMK , games/klavisha

git-svn-id: svn://kolibrios.org@1863 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
Yogev Ezra 2011-02-15 11:55:49 +00:00
parent b63ebe25ee
commit 63cf01e274
45 changed files with 19524 additions and 0 deletions

View 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:
;---------------------------------------------------------------------
}

View 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

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1 @@
__CPU_type fix p5

View 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%">&nbsp;</TD>
<TD height="102" width="39%"><FONT size="-1"><I>Данный документ - есть синтез
оригинального &quot;Руководства по эксплуатации&quot; с дополнениями автора
программы &quot;Калькулятор Б3-34&quot;. </I></FONT></TD>
</TR>
</TABLE>
<P align="center">&nbsp;</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,
затем на синюю клавишу &quot;стрелка вверх&quot;, затем на клавишу 2 и
на синюю клавишу +, на индикаторе высветится результат (4). Если Вам надо
сохранить несколько длинных чисел для повторного их использования, достаточно
после ввода числа нажать две клавиши - П и любую, от 0 до F, и продолжить
работу. Повторим предыдущий пример, только при этом сохраним операнды
в памяти. Нажимаем клавишу 2, клавишу П, клавишу 1, клавишу 2, клавишу
П, клавишу 2, клавишу +, на индикаторе высветится результат (4). Теперь
проверим, чему будет равно произведение введёных ранее чисел. Нажимаем
клавишу ИП, клавишу 1, клавишу ИП, клавишу 2, синюю клавишу X (умножить).
Этим все удобства &quot;машинны&quot; не исчерпываются. Они проявляются
в полной мере тогда, когда требуются многочисленные вычисления для составление
таблиц и графиков.</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&gt;=0 (больше или равняется 0), x&lt;0);</LI>
<LI>команды организации циклов;</LI>
<LI>команды косвенной записи содержимого регистра X в регистры памяти;</LI>
<LI>команды косвенной индикации содержимого регистров памяти;</LI>
<LI>команды сброса счётчика адресов в нулевое состояние;</LI>
<LI>команда пуска и остановки при автоматическом вычислении по программе;</LI>
<LI>команда пошагового выполнения программы в режиме "Автоматическая работа";</LI>
<LI>индикация кодов трёх последовательных шагов программы и текущего состояния
счётчика адресов;</LI>
<LI>клавиши пошагового просмотра программы в сторону увеличения или уменьшения
адресов в режиме &quot;Программирование&quot;;</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">(размер файла &gt;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>"Автоматическая работа&quot;</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 происходит при нажатии на кнопку &quot;стрелка
вверх&quot;.</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">&nbsp;</P>
<P align="center"><B>Команда продвижения стека вверх.<BR>
</B>(стрелка вверх)</P>
<P align="left">Сдвиг содержимого регистров стека происходит по схеме:
X->Y->Z->T (рис. 2). Содержимое регистра результата предыдущей операции
X1 не изменяется.</P>
<P align="left">&nbsp;</P>
</TD>
</TR>
<TR>
<TD width="17%" height="195"><IMG src="stack3.gif" width="119" height="159" alt="Рис. 3"></TD>
<TD width="83%">&nbsp;</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%">&nbsp;</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-&gt;Y-&gt;Z-&gt;T, X1-&gt;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>&nbsp;</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. В оригинале &quot;руководства по эксплуатации&quot;
в название этих регистров введён префикс 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-&gt;Z-&gt;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-&gt;Y-&gt;Z-&gt;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&lt;0 либо x=0, x&gt;=0,
x!=0 (не равно нулю)) реализуются клавишей F, клавишей условия &quot;
x&lt;0&quot;, &quot;x=0&quot;, &quot;x&gt;=0&quot;, &quot;x!=0&quot;
и вводом адреса перехода. Проверяется сожержимое регистра 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> записывается следующий адрес программы, на который в дальнейшем
будет сделан взврат из подпрограммы (В/О). Длина команды - два шага.
В режиме &quot;Автоматическая работа&quot;, когда программа не выполняется,
нажатие на клавишу ПП производит пошаговое выполнение программы.</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>Команды косвенных переходов по условию реализуется клавишей &quot;К&quot;,
клавишей условия ( x&lt;0 либо x=0, x&gt;=0, x!=0 (не равно нулю)) и клавишей
адресуемого регистра (от &quot;0&quot; до &quot;F&quot;). С помощью этой
команды проверяется содержимое регистра 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>&nbsp;</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>
Если необходимо исключить из программы какую-либо команду, необходимо
нажать клавишу К и клавишу НОП, шаг программы заполнится командой, которая
ничего не делает. Выход из режима &quot;Программирование&quot; осуществляется
нажатием на клавиши 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>

File diff suppressed because it is too large Load Diff

View 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%">&nbsp;</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">&nbsp;</P>
<TABLE width="96%" border="0" align="center" height="119">
<TR>
<TD>
<P align="center"><B>Внешний вид.</B></P>
<UL>
<LI>Линейка адреса. Предназначена для индикации текущего адреса программы.
Может быть отключена соответствующей установкой программы из меню &quot;Установки&quot;.</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>Содержание меню &quot;Программа&quot;.</B></P>
<UL>
<LI>&quot;Новая&quot; - создание новой программы</LI>
<LI>&quot;Перезагрузить&quot; - загрузить текщую программу из состава
штатных программ.</LI>
<LI>&quot;Загрузить&quot; - загрузить программу из состава штатных программ.</LI>
<LI>&quot;Сохранить как&quot; - сохранить программу в составе штатных
под новым именем.</LI>
<LI>&quot;Сохранить&quot; - сохранить программу, если она имеется в составе
штатных и текст программы изменился. </LI>
<LI>&quot;Сохранить всё&quot; - сохранить программу, если она имеется
в составе штатных, её регистры, стек и стек возврата. </LI>
<LI>&quot;Свойства&quot; - вызов окна со свойствами текущей программы.</LI>
<LI>&quot;В текст&quot; - вызов окна трансляции кодов программы в текстовый
формат. </LI>
<LI>&quot;Из текста&quot; - вызов окна загрузки программы из тектового
файла. </LI>
<LI>&quot;Вывод в файл&quot; - показать окно вывода в файл. Доступно при
наличии выведенного текста. </LI>
<LI>&quot;Скорость&quot; - показать окно установок скорости выполнения
программы. </LI>
<LI>&quot;Регистры&quot; - показать окно с содержимым всех регистров.</LI>
<LI>&quot;Установки&quot; - показать окно с общими опциями программы.</LI>
<LI>&quot;Горячая клавиша&quot; - окно выбора клавиши компьютера для запуска
программы &quot;Калькулятор Б3-34&quot; или другой программы.</LI>
<LI>&quot;Выход&quot; - выход из программы.</LI>
</UL>
<P>&nbsp;</P>
</TD>
</TR>
</TABLE>
<BR>
<TABLE width="96%" border="0" align="center" height="119">
<TR>
<TD>
<P align="center"><B>Содержание меню &quot;Правка&quot;.</B></P>
<UL>
<LI>&quot;Вставить&quot; - команда вставки числа из текстового буфера
обмена (системы).</LI>
<LI>&quot;Копировать&quot; - команда копирования содержимого ренистра
X (что видно и на индикаторе) в текстовый буфер обмена системы.</LI>
<LI>&quot;Очистить регистры&quot; - обнуляет 16 регистров памяти.</LI>
<LI>&quot;Очистить стек&quot; - обнуляет все регистры стека.</LI>
<LI>&quot;Очистить стек возврата&quot; - обнуляет регистры стека возврата.</LI>
<LI>&quot;Очистить всё&quot; - действует как и вкылючатель питания. Очищаются
все регистры, стек и стек возврата. Программа не изменяется.</LI>
<LI>&quot;Очистить прогр. память&quot; - очищает програмную память.</LI>
<LI>&quot;Следующее окно&quot; - переключение между дечерними окнами.</LI>
</UL>
</TD>
</TR>
</TABLE>
<BR>
<TABLE width="96%" border="0" align="center" height="119">
<TR>
<TD>
<P align="center"><B>Содержание меню &quot;Помощь&quot;.</B></P>
<UL>
<LI>&quot;Помощь&quot; - вызов файла помощи (b3-34help0.htm)</LI>
<LI>&quot;О версии Б3-34&quot; - сообщение об изменениях или особенностях
данной версии программы.</LI>
<LI>&quot;Про это&quot; - об авторе этой (пока недоделанной) программы.</LI>
<LI>&quot;На сайт автора&quot; - для скачивания последней версии программы.</LI>
<LI>&quot;Ошибки&quot; - сообщения об событиях в программе, служит для
отладки программы 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&gt;=0 (больше или равняется 0), x&lt;0);</LI>
<LI>команды организации циклов;</LI>
<LI>команды косвенной записи содержимого регистра X в регистры памяти;</LI>
<LI>команды косвенной индикации содержимого регистров памяти;</LI>
<LI>команды сброса счётчика адресов в нулевое состояние;</LI>
<LI>команда пуска и остановки при автоматическом вычислении по программе;</LI>
<LI>команда пошагового выполнения программы в режиме "Автоматическая работа";</LI>
<LI>индикация кодов трёх последовательных шагов программы и текущего состояния
счётчика адресов;</LI>
<LI>клавиши пошагового просмотра программы в сторону увеличения или уменьшения
адресов в режиме &quot;Программирование&quot;;</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>&quot;Сброс калькулятора при выключении питания&quot; - сброс всех
регистров. </LI>
<LI>&quot;Раннее обнаружение ошибок&quot; - .</LI>
<LI>&quot;Про это&quot; - об авторе этой (пока недоделанной) программы.</LI>
<LI>&quot;На сайт автора&quot; - для скачивания последней версии программы.</LI>
<LI>&quot;Ошибки&quot; - сообщения об событиях в программе, служит для
отладки программы 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>

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

View 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. Как ты знаешь, Страна Советов этого натиска не выдержала и развалилась, под ее обломками был погребен и скромный микрокалькулятор. А жаль, кто знает, до каких бы высот дошло народное творчество, какие немыслимые идеи воплотились бы в девяноста семи шагах программы и четырнадцати ячейках памяти?

View File

@ -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 регистров памяти. Команды "П&uarr;" "ИП&uarr;" "Kx&ne;0&uarr;" "КБП&uarr;" "Kx&ge;0&uarr;" "КПП&uarr;" "КП&uarr;" "Kx&lt;0&uarr;" "КИП&uarr;" "Kx=0&uarr;" работали в Б3-34 аналогично командам с регистром 0, но не вызывали автодекремента, то есть уменьшения на единицу содержимого регистра 0 при косвенном обращении. Эта особенность часто использовалась при оптимизации, но с появлением регистра "Е" в моделях МК-52 и МК-61 программы с этими командами пришлось разрабатывать заново. Команды с кодами 26h-2Ah и 30h-3Bh вызывали в Б3-34 аварийный останов.
</P>
<P>Команды калькуляторов МК-54 и МК-56 отличались рядом обозначений: "П&rarr;x" вместо "ИП", "x&rarr;П" вместо "П", "X&harr;Y" вместо "XY", "B&uarr;" вместо "&uarr;", а также команды "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 -->

View 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 ; ä« £¨
}

View File

@ -0,0 +1 @@
lang fix ru

View 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
}

View 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

File diff suppressed because it is too large Load Diff

View 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 }

View 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

Binary file not shown.

View 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

Binary file not shown.

View File

@ -0,0 +1,46 @@
;” ©« ¯à®£à ¬¬ë ¤«ï PrMK. ‘ª®¬¯¨«¨à®¢ âì á ¯®¬®éìî FASM.
;ˆ£à  "ªà¥á⨪¨-­®«¨ª¨"
;<3B>¥à¥¯¥ç â ­® á ª­¨£¨ "ˆ£àë á ¬¨ªà® <20>Œ" Ÿ.Š.’à®å¨¬¥­ª®. Š¨¥¢. "¥å­ ", 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

Binary file not shown.

View 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

View 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 \} }

View 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

Binary file not shown.

View 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

Binary file not shown.

File diff suppressed because it is too large Load Diff

View 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)

File diff suppressed because it is too large Load Diff