From 63cf01e274e9ee0d08f285456d475c51384f298d Mon Sep 17 00:00:00 2001 From: Yogev Ezra Date: Tue, 15 Feb 2011 11:55:49 +0000 Subject: [PATCH] Added sources: emulator/PrMK , games/klavisha git-svn-id: svn://kolibrios.org@1863 a494cfbc-eb01-0410-851d-a64ba20cac60 --- programs/emulator/PrMK/trunk/LOAD_LIB.MAC | 254 ++ programs/emulator/PrMK/trunk/MASMFpuLib.asm | 789 ++++ .../emulator/PrMK/trunk/MK_b3-34_hand.bmp | Bin 0 -> 25270 bytes programs/emulator/PrMK/trunk/PrMK.asm | 1838 +++++++++ programs/emulator/PrMK/trunk/config.inc | 1 + .../emulator/PrMK/trunk/docs/b3-34help0.htm | 739 ++++ .../emulator/PrMK/trunk/docs/b3-34help1.htm | 3384 +++++++++++++++++ .../emulator/PrMK/trunk/docs/b3-34help2.htm | 236 ++ programs/emulator/PrMK/trunk/docs/stack1.gif | Bin 0 -> 2240 bytes programs/emulator/PrMK/trunk/docs/stack2.gif | Bin 0 -> 4097 bytes programs/emulator/PrMK/trunk/docs/stack3.gif | Bin 0 -> 2161 bytes programs/emulator/PrMK/trunk/docs/stack4.gif | Bin 0 -> 1435 bytes programs/emulator/PrMK/trunk/docs/stack5.gif | Bin 0 -> 1881 bytes programs/emulator/PrMK/trunk/docs/stack6.gif | Bin 0 -> 2256 bytes programs/emulator/PrMK/trunk/docs/stack7.gif | Bin 0 -> 2419 bytes .../Калькуляторные игры.txt | 76 + ...ляторов Б3-34 МК-54 МК-56.htm | 90 + .../com_b334.jpg | Bin 0 -> 59337 bytes .../danilov1.jpg | Bin 0 -> 4978 bytes .../nkj12840.jpg | Bin 0 -> 6906 bytes .../stack000.jpg | Bin 0 -> 39932 bytes .../tablb334.jpg | Bin 0 -> 105492 bytes ... - Система команд ЭВМ.htm | 2636 +++++++++++++ .../oarr0000.gif | Bin 0 -> 999 bytes programs/emulator/PrMK/trunk/editbox_ex.mac | 194 + programs/emulator/PrMK/trunk/lang.inc | 1 + programs/emulator/PrMK/trunk/macroPRMK.inc | 48 + programs/emulator/PrMK/trunk/macros.inc | 543 +++ programs/emulator/PrMK/trunk/opcodes.inc | 1444 +++++++ programs/emulator/PrMK/trunk/proc32.inc | 268 ++ programs/emulator/PrMK/trunk/readme.txt | 20 + programs/emulator/PrMK/trunk/smpl/1.MKP | Bin 0 -> 184 bytes programs/emulator/PrMK/trunk/smpl/1.mkp.asm | 34 + programs/emulator/PrMK/trunk/smpl/2.MKP | Bin 0 -> 231 bytes programs/emulator/PrMK/trunk/smpl/2.mkp.asm | 46 + programs/emulator/PrMK/trunk/smpl/3.MKP | Bin 0 -> 248 bytes programs/emulator/PrMK/trunk/smpl/3.mkp.asm | 97 + programs/emulator/PrMK/trunk/struct.inc | 180 + .../games/klavisha/trunk/courses/BASEKURS.ASM | 566 +++ .../games/klavisha/trunk/courses/BASEKURS.KLA | Bin 0 -> 15594 bytes .../games/klavisha/trunk/courses/SAMPLE.ASM | 65 + .../games/klavisha/trunk/courses/SAMPLE.KLA | Bin 0 -> 959 bytes programs/games/klavisha/trunk/klavisha.asm | 2812 ++++++++++++++ programs/games/klavisha/trunk/readme.txt | 87 + programs/media/webcam/trunk/webcam.asm | 3076 +++++++++++++++ 45 files changed, 19524 insertions(+) create mode 100644 programs/emulator/PrMK/trunk/LOAD_LIB.MAC create mode 100644 programs/emulator/PrMK/trunk/MASMFpuLib.asm create mode 100644 programs/emulator/PrMK/trunk/MK_b3-34_hand.bmp create mode 100644 programs/emulator/PrMK/trunk/PrMK.asm create mode 100644 programs/emulator/PrMK/trunk/config.inc create mode 100644 programs/emulator/PrMK/trunk/docs/b3-34help0.htm create mode 100644 programs/emulator/PrMK/trunk/docs/b3-34help1.htm create mode 100644 programs/emulator/PrMK/trunk/docs/b3-34help2.htm create mode 100644 programs/emulator/PrMK/trunk/docs/stack1.gif create mode 100644 programs/emulator/PrMK/trunk/docs/stack2.gif create mode 100644 programs/emulator/PrMK/trunk/docs/stack3.gif create mode 100644 programs/emulator/PrMK/trunk/docs/stack4.gif create mode 100644 programs/emulator/PrMK/trunk/docs/stack5.gif create mode 100644 programs/emulator/PrMK/trunk/docs/stack6.gif create mode 100644 programs/emulator/PrMK/trunk/docs/stack7.gif create mode 100644 programs/emulator/PrMK/trunk/docs/Калькуляторные игры.txt create mode 100644 programs/emulator/PrMK/trunk/docs/Система команд программируемых микрокалькуляторов Б3-34 МК-54 МК-56.htm create mode 100644 programs/emulator/PrMK/trunk/docs/Система команд программируемых микрокалькуляторов Б3-34 МК-54 МК-56_files/com_b334.jpg create mode 100644 programs/emulator/PrMK/trunk/docs/Система команд программируемых микрокалькуляторов Б3-34 МК-54 МК-56_files/danilov1.jpg create mode 100644 programs/emulator/PrMK/trunk/docs/Система команд программируемых микрокалькуляторов Б3-34 МК-54 МК-56_files/nkj12840.jpg create mode 100644 programs/emulator/PrMK/trunk/docs/Система команд программируемых микрокалькуляторов Б3-34 МК-54 МК-56_files/stack000.jpg create mode 100644 programs/emulator/PrMK/trunk/docs/Система команд программируемых микрокалькуляторов Б3-34 МК-54 МК-56_files/tablb334.jpg create mode 100644 programs/emulator/PrMK/trunk/docs/ЭКВМ Электроника МК-152 РЭ - Система команд ЭВМ.htm create mode 100644 programs/emulator/PrMK/trunk/docs/ЭКВМ Электроника МК-152 РЭ - Система команд ЭВМ_files/oarr0000.gif create mode 100644 programs/emulator/PrMK/trunk/editbox_ex.mac create mode 100644 programs/emulator/PrMK/trunk/lang.inc create mode 100644 programs/emulator/PrMK/trunk/macroPRMK.inc create mode 100644 programs/emulator/PrMK/trunk/macros.inc create mode 100644 programs/emulator/PrMK/trunk/opcodes.inc create mode 100644 programs/emulator/PrMK/trunk/proc32.inc create mode 100644 programs/emulator/PrMK/trunk/readme.txt create mode 100644 programs/emulator/PrMK/trunk/smpl/1.MKP create mode 100644 programs/emulator/PrMK/trunk/smpl/1.mkp.asm create mode 100644 programs/emulator/PrMK/trunk/smpl/2.MKP create mode 100644 programs/emulator/PrMK/trunk/smpl/2.mkp.asm create mode 100644 programs/emulator/PrMK/trunk/smpl/3.MKP create mode 100644 programs/emulator/PrMK/trunk/smpl/3.mkp.asm create mode 100644 programs/emulator/PrMK/trunk/struct.inc create mode 100644 programs/games/klavisha/trunk/courses/BASEKURS.ASM create mode 100644 programs/games/klavisha/trunk/courses/BASEKURS.KLA create mode 100644 programs/games/klavisha/trunk/courses/SAMPLE.ASM create mode 100644 programs/games/klavisha/trunk/courses/SAMPLE.KLA create mode 100644 programs/games/klavisha/trunk/klavisha.asm create mode 100644 programs/games/klavisha/trunk/readme.txt create mode 100644 programs/media/webcam/trunk/webcam.asm diff --git a/programs/emulator/PrMK/trunk/LOAD_LIB.MAC b/programs/emulator/PrMK/trunk/LOAD_LIB.MAC new file mode 100644 index 0000000000..5bbb6af65d --- /dev/null +++ b/programs/emulator/PrMK/trunk/LOAD_LIB.MAC @@ -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, +; 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 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 ''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 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: +; - 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: +;--------------------------------------------------------------------- +} \ No newline at end of file diff --git a/programs/emulator/PrMK/trunk/MASMFpuLib.asm b/programs/emulator/PrMK/trunk/MASMFpuLib.asm new file mode 100644 index 0000000000..9f88aa8b31 --- /dev/null +++ b/programs/emulator/PrMK/trunk/MASMFpuLib.asm @@ -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 \ No newline at end of file diff --git a/programs/emulator/PrMK/trunk/MK_b3-34_hand.bmp b/programs/emulator/PrMK/trunk/MK_b3-34_hand.bmp new file mode 100644 index 0000000000000000000000000000000000000000..d5a65bcf0614ad6abc28c8b9525cb6eae6e188ec GIT binary patch literal 25270 zcmeI4OO7kM4TgPz;7+}bEF-w{yNN6!9_s8M;~Ld20%Ud;&_HjcXNCa-mH#KH2PM_Z zT|NmM^VlkhMSh~Fvb$&-=Z`=C_4kv=KhXXa&wu0j`){YyZ>PVA{%>|(2Cn&WI^l8p z@k0-2(Z%z}>F3X%I5ElNG)?T`iGNga{6zWUTu+o&;a{gIOqYNLy(||ug8q69`KY|p<=m&)}DD=+l&QhJsAfH`V@>)UEP9cwIRT;@-gOXXbp>Zy9Z8UE#h z*f+#~XnwfkUXI;g&*rGjMr%`AmHB71mnP%h|53iD95;&bA4l}07vW#AuSo)zcuhle z9@kiY+-0FOP7)=s^N`Ie@xM-INyy{bXmeQR=RAF_@Oj?b@Xt3ic=V(CE*~pCAIG1V zKuKbZw&j1}e&j4hv{{MY?p-1cv7XlWWPeE#AK@dU<@hC8oB6;|0vo=*7*~ponr46H zY>r_iKjcCJn=Ze}zwnQX|6sl>oEs2V)aUoFpDnLnvP-_?U+$4@M&w7gKw~KL4_A@E z_Mvx6dTH!L1U!%D^Yx_?a5$cCa2#HVf6QOo_OG_(KPTf z7WrZ&jad)FxXy<~4qzW2k+pm*k;o){zAYRnafW{FFha&KOSIu^I%(9XLrQCoe}F0f zC10B<&nMX@5&ul)_{kviVTz3}!Y2rlOwnijt9;I%oH8Ho6!<3@kqXDhfL9b#q{3`5 z|0y3-Bg|yc@blC?S_Z(_|xxWm=y}tH<&9>${#BEB6aQYpC75)xV-*l1RciE+V z^Ow_Q`FXfnS32%UXKMV&FQW(?Y`*^_fwzQxukZ62OnFBg$IrY!r;%r$Cp?Z_|qA| z&c%NT{`!<)-AY^EDt;Nx@bO{we!hN4lvhMH*N`^XvG@p5tFGj<02X6-mAJ ziqHL(J?_R|oPANMN)1 z{gcL&z{b2Je9=6ISA@ALIF{p9$FT_v_L6J-${~{{Cvhp3vI`nQg*;-T28G;Wyru5w8>b$NvH$@5s(W?>;li~9$3pLmx1Y-T;wFU}k4 zH9jmj<0s)2-_?LJ11yJX(uR*<`7i-`Qy2Vtd7fYACt(*m?Ji|=&u8lP%Xa>L_L_%}f6aRT`8R(#XO^Fb>-T)$5jau9 ziTpAOwLC`i=Epqtv$~QW`*B>~H{R{*41F8VKZ|L$#J#tuvPOUMH+Q$(&bZ9SbQQld zqnfz-MZ$z8#J`VH*XVtA725`Wq~R!>_zh&u|7s#>qwQ!ctiWlis?EpW;WzvHWnaJc zXlr~a!(o(t5v@p}DQeFcZGBak6MhhQartlgmaxSc6OEn4{7hIpC9qLTRTP?bMKq=a zHWmN!Pj`K`{8Q)ClIn^gmJ--h{B(b7`X+w*Kmr@JX?C2aD1pripC)sbt?w3%%a7t` zBH2P~ZC-_+|Bim=*KV_ae=YOJA1wdJgN^v+FQ@jG=jRjg@Hs0RJ~JqMoA_7x`n76- zSnMkQHjX!ZaKQ5D6Llr#Pz{uLO!v?GbSDPdq58~##ZgmM!N)}TBOHMj{{7DUn8xOW zPWaSTH8J^BSy+yZj}Q=s@U<{Tcf>5B#{wcBS^^8ffL2b5`7A%E>S0Agmfg(HfDwk& zW5e$s{J=%D8~Egyr1+r&5&XO6M`okabay&%+~fx_xD~0Pb2C9v5*Yi-_qrj8QWG&zjS$kOt$->&!jUHNb;L<}l|)tTiPgYD&BXX9t40)Wh!fSL5bVNpG3GdGB$kFP{s%8 z4hJc#&~Qq^l@EpTQ}|*yAS0!Wa5IVdfr?szp^1DrDjd2|a;^FKpryz-;*54vJ7&%P z{CqM$m<97v$j7oufeK2M7(e!xtAyX&{#s>y=kFRm;s+`~6FwSE4=7H7QZarU-r12R zYHY;(Csos_7Eqked~siTeThNgT6DMY3-g^_%~9Ve$KOA{NsAZaoE*ZRgG2x3FC-`D z=Uu-9fVvlL;`aFo%#!&G2wkB`7G5#}ZEfiOHL=7xV0*~FOyqD+eJ7@I8 zuaz4*eq#wzjgg}Gn5Mpv$J z4?o_wJ&UhbPtHHmvl>53TE9lWqQ(5NmZm@atC0%F&J59!7e%|#v z)6koc7?zMwV=sT{HUs$(r1JppGjDHjcLRV zMq^SP!si@WMs}sa@eqEZk*tGJx<~Qd0*D?A|495J0Z9bi@Y9MO$j@y|aCCsKE&`n1 zyuZ!$Nj9HJ7`nfRN6a|H^GoqZo9`Uo{N?PuNPhlL>UZ48;^vq;8rU>n zw#2NQ@qqX}UsKxW^X32&*kH$Lw3dHb$*xB)El&^QvmDbIEGkxK8rWg^0WM!Z2k;rQ zMJwgEyx^ins!Lq6oAz#3xMx4n#_9PmX^>{uzo&z#-=6UB6pWs)OaH(jGT_X}%REMfp%`dgHMy zIF|FnQj6bX=l!6jEQs)XXcXAl0_QnO9?N`~@qesK)`E6CIayes%Xj(YvBrmC;mv`M zA7dAR*^3!Xm-$$&^G0pg=EG%B&ToxhB6s=Mwd57CS4JRb#(aJyey-5xr`1?S,<2,14>,100,0xaaaaaa + mcall 4,<252,5>,(0x80000000),txt.enter + push dword edit2 + call [edit_box_draw] + mcall 12,2 +.still: + mcall 10 + dec al + jz .red + dec al + jz .key + dec al + jz .button + jmp .still +.button: + mcall 17,1 + cmp ah,1 + jne @f + .end: btr [flags],26 + mcall -1 + @@: cmp ah,100 + jne .still + bt [flags],25 + jc .ld + .sv: call save_prog + jnc .end + jmp .err + .ld: call load_prog + jnc .end + .err: mcall 4,<5,19>,(0x80000000),txt.error + jmp .still + + +.key: + mcall 2 + cmp ah,13 + jne @f + bt [flags],25 + jc .ld + jmp .sv + @@: cmp ah,27 + je .end + push dword edit2 + call [edit_box_key] + jmp .still + +.threat_stack: times 32 dd 0 + + +save_prog: + mov [_size],256+8*(15+5)+6*3 + mcall 68,12,[_size] + test eax,eax + jnz @f + stc + ret + +@@: mov [_buffer],eax + mov esi,S.X1 + mov edi,eax + mov byte [edi],"<" + mov dword [edi+1],"" + mov byte [edi+5],">" + add edi,6 + mov ecx,5*2 + cld +@@: movsd + loop @b + mov esi,R.0 + mov byte [edi],"<" + mov dword [edi+1],"" + mov byte [edi+5],">" + add edi,6 + mov ecx,15*2 + cld +@@: movsd + loop @b + mov esi,PMEM + mov byte [edi],"<" + mov dword [edi+1],"" + mov byte [edi+5],">" + add edi,6 + mov ecx,256/4 + cld +@@: movsd + loop @b + + mov [func_70.func_n],2 + push [_size] + pop [func_70.param3] + push [_buffer] + pop [func_70.param4] + mov [func_70.name],buf_cmd_lin + mcall 70,func_70 + cmp al,0 ;࠭ 㤠筮? + je @f + mcall 68,13,[_buffer] + stc + ret +@@: mcall 68,13,[_buffer] + clc +ret + +load_prog: + mov [func_70.func_n],5 + mov [func_70.param3],0 + mov [func_70.param4],bufferfinfo + mov [func_70.name],buf_cmd_lin + mcall 70,func_70 + test al,al ;䠩 ? + jz @f + stc + ret + @@: mov eax, dword [bufferfinfo+32] ;㥬 ࠧ 䠩 + cmp eax,256+8*(15+5)+6*3 + jbe @f + stc + ret + +_size dd 0 +_buffer dd 0 + +@@: mov [_size],eax + mcall 68,12,[_size] + test eax,eax + jnz @f + stc + ret ;訡 뤥 + @@: + mov [_buffer],eax + mov [func_70.func_n],0 + mov [func_70.name],buf_cmd_lin + push dword [_size] + pop dword [func_70.param3] + push dword [_buffer] + pop dword [func_70.param4] + mcall 70,func_70 + test eax,eax + jz @f + stc + ret ;訡 ⥭ +@@: + + mov esi,[_buffer] + mov ecx,[_size] +@@: cmp byte [esi],"<" + je .@f1 + inc esi + loop @b +.end: mcall 68,13,[_buffer] + clc + ret +.@f1: inc esi + cmp dword [esi],"" + je .st + cmp dword [esi],"" + je .rg + cmp dword [esi],"" + je .pr + jmp @b +.st: mov edi,S.X1 + add esi,5 + mov ebx,5*2*4 + cld + .st@: movsb + cmp byte [esi],"<" + jne .stB + inc esi + cmp dword [esi],"" + je .rg + cmp dword [esi],"" + je .pr + dec esi + .stB: dec ecx + jz .end + dec ebx + jnz .st@ + jmp @b +.rg: mov edi,R.0 + add esi,5 + mov ebx,15*2*4 + cld + .rg@: movsb + cmp byte [esi],"<" + jne .rgB + inc esi + cmp dword [esi],"" + je .st + cmp dword [esi],"" + je .pr + dec esi + .rgB: dec ecx + jz .end + dec ebx + jnz .rg@ + jmp @b +.pr: mov edi,PMEM + mov eax,0 + mov ebx,256/4 + .pr0: mov [edi],eax + add edi,4 + dec ebx + jnz .pr0 + mov edi,PMEM + add esi,5 + mov ebx,256 + cld + .pr@: movsb + cmp byte [esi],"<" + jne .prB + inc esi + cmp dword [esi],"" + je .st + cmp dword [esi],"" + je .rg + dec esi + .prB: dec ecx + jz .end + dec ebx + jnz .pr@ +jmp @b + + + + + + +align 4 + +S: +.X1: dq 0.0 +.X: dq 0.0 +.Y: dq 0.0 +.Z: dq 0.0 +.T: dq 0.0 + +RS: +times 10 db 0 + +align 4 +R: +.0: dq 0.0 +.1: dq 0.0 +.2: dq 0.0 +.3: dq 0.0 +.4: dq 0.0 +.5: dq 0.0 +.6: dq 0.0 +.7: dq 0.0 +.8: dq 0.0 +.9: dq 0.0 +.A: dq 0.0 +.B: dq 0.0 +.C: dq 0.0 +.D: dq 0.0 +.E: dq 0.0 +.F: dq 0.0 +dq 0.0 + + +align 4 +myimport: +edit_box_draw dd aEdit_box_draw +edit_box_key dd aEdit_box_key +edit_box_mouse dd aEdit_box_mouse +version_ed dd aVersion_ed + +scrollbar_ver_draw dd aScrollbar_ver_draw +scrollbar_ver_mouse dd aScrollbar_ver_mouse +version_scrollbar dd aVersion_scrollbar + + dd 0 + dd 0 + +aEdit_box_draw db 'edit_box',0 +aEdit_box_key db 'edit_box_key',0 +aEdit_box_mouse db 'edit_box_mouse',0 +aVersion_ed db 'version_ed',0 + +aScrollbar_ver_draw db 'scrollbar_v_draw',0 +aScrollbar_ver_mouse db 'scrollbar_v_mouse',0 +aVersion_scrollbar db 'version_scrollbar',0 + +if 0 + +align 4 +scroll_bar_data_vertical: +.x: +.size_x dw 15;+0 +.start_x dw 455 ;+2 +.y: +.size_y dw 284 ;+4 +.start_y dw 19 ;+6 +.btn_high dd 15 ;+8 +.type dd 1 ;+12 +.max_area dd 300+20 ;+16 +.cur_area dd 50 ;+20 +.position dd 0 ;+24 +.bckg_col dd 0xAAAAAA ;+28 +.frnt_col dd 0xCCCCCC ;+32 +.line_col dd 0 ;+36 +.redraw dd 0 ;+40 +.delta dw 0 ;+44 +.delta2 dw 0 ;+46 +.run_x: +.r_size_x dw 0 ;+48 +.r_start_x dw 0 ;+50 +.run_y: +.r_size_y dw 0 ;+52 +.r_start_y dw 0 ;+54 +.m_pos dd 0 ;+56 +.m_pos_2 dd 0 ;+60 +.m_keys dd 0 ;+64 +.run_size dd 0 ;+68 +.position2 dd 0 ;+72 +.work_size dd 0 ;+76 +.all_redraw dd 0 ;+80 +.ar_offset dd 10 ;+84 + +endf + +func_70: + .func_n dd ? + .param1 dd 0 + .param2 dd 0 + .param3 dd ? + .param4 dd ? + .rezerv db 0 + .name dd ? + +flags dd _flags + +_pause dd 10 +string_zero db " 0 ",0 +buf: times 10 db 0 +perem dd 0 +buf2: times 25 db 0 +string: db " 0 ",0 +buf3: times 25 db 0 +schk db 0 + +title db appname,version,0 + +txt: +.save db '࠭ (Ctrl+S)',0 +.error db '訡',0 +.load db '㧨 (Ctrl+L)',0 +.enter db 'Enter',0 +.regs db "",0 +.stk db "⥪",0 +.perek db " >",0 +.prog db "ணࠬ",0 +.prog1 db " ",0 +.sk db ":",0 +.edbox db " ",0 + +system_path db '/sys/lib/' +boxlib_name db 'box_lib.obj',0 +head_f_i: +head_f_l db 'error',0 +err_message_found_lib db 'box_lib.obj was not found',0 +err_message_import db 'box_lib.obj was not imported',0 + +edit1 edit_box 20,427,320,0xffffff,0x6a9480,0,0xAABBCC,0,2,txt.edbox,ed_focus,ed_focus,0,0 +edit2 edit_box 240,2,2,0xffffff,0x6a9480,0,0xAABBCC,0,4096,buf_cmd_lin,ed_focus,2,0,0 + +virtual at 0 +file 'MK_b3-34_hand.BMP':0xA,4 +load offbits dword from 0 +end virtual + +palitra: + file 'MK_b3-34_hand.BMP':0x36,offbits-0x36 + +sizey = 262 +sizex = 185 + 7 +smesh = 3 + +bmp_file: + file 'MK_b3-34_hand.BMP':110 +repeat sizey/2 +y = % - 1 +z = sizey - % +repeat sizex/2/4 +load a dword from $ - sizex*sizey/2 + sizex*y/2+(%-1)*4 +load b dword from $ - sizex*sizey/2 + sizex*z/2+(%-1)*4 +store dword a at $ - sizex*sizey/2 + sizex*z/2+(%-1)*4 +store dword b at $ - sizex*sizey/2 + sizex*y/2+(%-1)*4 +end repeat +end repeat + +sound_data: +db 40 +dw 670 +db 0 + +I_END: + +sc system_colors + +procinfo: rb 1024 +buf_cmd_lin rb 0 +cur_dir_path rb 4096 + + +PMEM: rb 256 + +bufferfinfo rb 40 +scin_height rd 1 + +D_END: \ No newline at end of file diff --git a/programs/emulator/PrMK/trunk/config.inc b/programs/emulator/PrMK/trunk/config.inc new file mode 100644 index 0000000000..4be62cc03b --- /dev/null +++ b/programs/emulator/PrMK/trunk/config.inc @@ -0,0 +1 @@ +__CPU_type fix p5 diff --git a/programs/emulator/PrMK/trunk/docs/b3-34help0.htm b/programs/emulator/PrMK/trunk/docs/b3-34help0.htm new file mode 100644 index 0000000000..9dc4145fa5 --- /dev/null +++ b/programs/emulator/PrMK/trunk/docs/b3-34help0.htm @@ -0,0 +1,739 @@ + + +3-34 - + + + + + + + + + + + +
! + .  - + " " + " 3-34".
+

 

+

3-34.

+

:
+
+ ( ) +

+


+
.

+


+

+ + + + +
+

?

+

3-34 () + , . + , 3-34 + = (). 3-34 , + . , 2+2 2, + " ", 2 + +, (4). + , + - , 0 F, + . , + . 2, , 1, 2, + , 2, +, (4). + , . + , 1, , 2, X (). + "" . + , + .

+
+
+ + + + +
+

:

+
    +
  • 100 256 ;
  • +
  • 16 + ;
  • +
  • , + ;
  • +
  • . + 5;
  • +
  • ;
  • +
  • ( + x=0, x!=0 ( 0), x>=0 ( 0), x<0);
  • +
  • ;
  • +
  • X ;
  • +
  • ;
  • +
  • ;
  • +
  • ;
  • +
  • " ";
  • +
  • + ;
  • +
  • + "";
  • +
  • +
+
+
+ + + + +
+
+

.

+

, + . + . ( + , + . + .) + . + , - , - + . , + , + F , . + + ( >81 ).

+
+
+
+ + + + +
+

.

+

" " - .
+ "" - , + F . - + F .

+
+
+ + + + + + + + + + + + + +
+
+

.

+

+ 5 X1, X, Y, Z, T. X + . + . + Y + X, , X + . + Y " + ".

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
. 1 +

+ .

+

X, Y, Z T + , + , + ( ). , + X , + X Y ( ), + Y Z, + Z T. + Y X. + X, Y Z, Z + T, T + . X1 X, + (. 5). + X1 X. +

+
. 2 +

 

+

.
+
( )

+

: + X->Y->Z->T (. 2). + X1 .

+

 

+
. 3 
. 4 +

X Y.
+
( XY )

+


+ 4.

+
. 5 
. 6 +

+ .

+

+ , . + , + X . + F . (. + 6): X->Y->Z->T, X1->X.

+
. 7 +
+

 

+

Rotate.
+
( )

+

+ : X->X1, T->Z->Y->X, X1->T (. 7).

+
+
+
+
+

.

+

16 + . + - 0 F. " " + RG (RG0, RG1 ... ..). + + , + , , + 40 -4F ( - , 0 .F), 60 -6F ( + X - , 0 .F) . +

+
+
+
+

.

+

5 , + , + 5- . + .

+
+
+
+ + + + +
+
+

.

+

- + . , + X . + X, . + 3-34 :

+
+
    +
  • +
    (lg, ln);
    +
  • +
  • (x^2 - , e^x, 10^x);
  • +
  • ();
  • +
  • (sqr);
  • +
  • (1/x);
  • +
  • (PI);
    +
  • +
+
+
+ + + + +
+
+

.

+

- + , X Y. + (, , + ) x^y (x y). + X. Y, + + Z. T=T->Z->Y, X1= + X .

+
+
+
+ + + + +
+
+

.

+

+ , + X Y. + X->Y->Z->T, + T . , + + .

+
+
+
+ + + + +
+

.

+

+ . + , + . - . Ÿ + .

+
+
+ + + + +
+
+

.

+

( x<0 x=0, x>=0, + x!=0 ( )) F, " + x<0", "x=0", "x>=0", "x!=0" + . X + . , + , + . , + . + - () .

+
+
+
+ + + + +
+
+

.

+

+ ( ). + , + (/). - . + " ", , + .

+
+
+
+ + + + +
+
+

.

+

+ , ( 0 ... F ). + - . + , + , . + , + , + ( /), , + .

+
+
+
+ + + + +
+
+

.

+

+ /. + , + ... ( ...), .

+
+
+
+ + + + +
+

+ .

+

+ , ( 0 F, + A F - ). + , + ( ), , + () . + , . + 0, 1, 2, 3, + 1. 4 , + 5 6, 1. + 7 F, .

+
+

+ .

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+
+
+
+
0
+
+
-1
+
+
0
+
+
1
+
+
-1
+
+
1
+
+
2
+
+
-1
+
+
2
+
+
3
+
+
-1
+
+
3
+
+
4
+
+
+1
+
+
4
+
+
5
+
+
+1
+
+
5
+
+
6
+
+
+1
+
+
6
+
+
7
+
+
+
+
7
+
+
8
+
+
+
+
8
+
+
9
+
+
+
+
9
+
+
A
+
+
+
+
, (), + - A.
+
+
B
+
+
+
+
/-/, - + B.
+
+
C
+
+
+
+
, - + C.
+
+
D
+
+
+
+
Cx, - + D.
+
+
E
+
+
+
+
, + - E.
+
+
F
+
+
+
+
- ( ), + - F.
+
+
+ + + + + + + +
+

+ .

+

"", + ( x<0 x=0, x>=0, x!=0 ( )) + ( "0" "F"). + X . + ( , + - ), + + () , , + , , + . , + . , + , .

+
 
+ + + + +
+
+

+ .

+

, + ( ), + X. + . 0 + 3, 0 + 0 ( 2) 2 + X.

+
+
+
+ + + + +
+
+

+ .

+

, + ( ), + + X. . 0 + 3, 0 0 + ( 2) X + 2.

+
+
+
+ + + + +
+
+

.

+

L0, + L1, L2, L3 F. + . + L0 RG0. + 0 1 + . , + , . + RG0 , . + - .

+
+
+
+ + + + +
+

.

+

+ F . . + , + . + + - . + . (3 ) + , .
+ - , + , , + . "" + F .

+
+
+ + + + +
+
+

.

+

+ /. . + ( ) , + . + /.

+
+
+
+ + + + +
+
+

3-34.

+

, + , + ( , ), + , 1 + ( 4 ). + . + , - .

+
+
+

5 May, 2002 3:02

+ + diff --git a/programs/emulator/PrMK/trunk/docs/b3-34help1.htm b/programs/emulator/PrMK/trunk/docs/b3-34help1.htm new file mode 100644 index 0000000000..184ef82ef8 --- /dev/null +++ b/programs/emulator/PrMK/trunk/docs/b3-34help1.htm @@ -0,0 +1,3384 @@ + + +3-34 - + + + + +

<<

+

3-34.

+

+ . + ( ). +
+
.

+

.
+
+
( + )

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+
+
()
+
+
+
+
0
+
+
00
+
+
0
+
0. + , , - 0.
+
1
+
+
01
+
+
1
+
1. , , + - 1.
+
2
+
+
02
+
+
2
+
2. , , + - 2.
+
3
+
+
03
+
+
3
+
3. , , + - 3.
+
4
+
+
04
+
+
4
+
4. , , + - 4.
+
5
+
+
05
+
+
5
+
5. , , + - 5.
+
6
+
+
06
+
+
6
+
6. , , + - 6.
+
7
+
+
07
+
+
7
+
7. , , + - 7.
+
8
+
+
08
+
+
8
+
8. , , + - 8.
+
9
+
+
09
+
+
9
+
9. , , + - 9.
+
10
+
+
0A
+
+
, ()
+
. + , , - A.
+
11
+
+
0B
+
+
/-/
+
. + , , - + B.
+
12
+
+
0C
+
+
+
. + , , - C.
+
13
+
+
0D
+
+
Cx
+
X + F. , , - + D.
+
14
+
+
0E
+
+
+
+ Y. : + X->Y->Z->T. X1 - . + , , - + E.
+
15
+
+
0F
+
+
F,
+
+ X (X=X1).
+
16
+
+
10
+
+
+
+
X + Y X. + . + T=T->Z->Y X=, X1= c X.
+
17
+
+
11
+
+
-
+
Y + X X. + . - . + , , - + F.
+
18
+
+
12
+
+
X ()
+
Y + X X. + .
+
19
+
+
13
+
+
/ ()
+
Y + X X. + .
+
20
+
+
14
+
+
XY ()
+
X + Y.
+
21
+
+
15
+
+
F, 10^x
+
10 + x. . + X, . + Y, Z T . X1, + X .
+
22
+
+
16
+
+
F, e^x
+
e + x. .
+
23
+
+
17
+
+
F, lg
+
. + .
+
24
+
+
18
+
+
F, ln
+
. + .
+
25
+
+
19
+
+
F, arcsin
+
. + .
+
26
+
+
1A
+
+
F, arccos
+
. + .
+
27
+
+
1B
+
+
F, arctg
+
. + .
+
28
+
+
1C
+
+
F, sin
+
. + .
+
29
+
+
1D
+
+
F, cos
+
. + .
+
30
+
+
1E
+
+
F, tg
+
. + .
+
31
+
+
1F
+
+
[]
+
[]
+
32
+
+
20
+
+
F, PI
+
= 3,1415926 X. + .
+
33
+
+
21
+
+
F, sqr
+
+ X. .
+
34
+
+
22
+
+
F, x^2
+
2 + X. . +
+
35
+
+
23
+
+
F, 1/X
+
X. + .
+
36
+
+
24
+
+
F, x^y
+
+ X + Y. + .
+
37
+
+
25
+
+
F,
+
+ : X->X1, T->Z->Y->X, X1->T.
+
38
+
+
26
+
+
+ + 0 9
+
+ ., , , ( 61).
+
39
+
+
27
+
+
[]
+
[]
+
40
+
+
28
+
+
[]
+
[],
+
41
+
+
29
+
+
[]
+
[]
+
42
+
+
2A
+
+
XY + 0 999
+
,, + ( 61).
+
43
+
+
2B
+
+
[]
+
[]
+
44
+
+
2C
+
+
[]
+
[]
+
45
+
+
2D
+
+
[]
+
[]
+
46
+
+
2E
+
+
[]
+
[]
+
47
+
+
2F
+
+
[]
+
[]
+
48
+
+
30
+
+
3 + 0 999
+
, + ,, ( 61).
+
49
+
+
31
+
+
4 + |x|
+
Abs(x) ( 61).
+
50
+
+
32
+
+
5 +
+
sign(x) - ( 61).
+
51
+
+
33
+
+
6 + 0 9
+
, + , , ( 61).
+
52
+
+
34
+
+
7 + [x]
+
( + 61).
+
53
+
+
35
+
+
8 + {x}
+
( + 61).
+
54
+
+
36
+
+
9 + max
+
+ X Y ( ) ( 61).
+
55
+
+
37
+
+
,
+ V
+
+ ( , ) ( 61).
+
56
+
+
38
+
+
/-/ + V
+
+ ( , ) ( 61).
+
57
+
+
39
+
+
+
+
". + " ( ) ( 61).
+
58
+
+
3A
+
+
Cx +
+
"" + ( 61).
+
59
+
+
3B
+
+
+
+
+ 0...1( 61).
+
60
+
+
3C
+
+
[]
+
[]
+
61
+
+
3D
+
+
[]
+
[]
+
62
+
+
3E
+
+
[]
+
[]
+
63
+
+
3F
+
+
[]
+
[]
+
64
+
+
40
+
+
, 0
+
X + 0.
+
65
+
+
41
+
+
, 1
+
X + 1.
+
66
+
+
42
+
+
, 2
+
X + 2.
+
67
+
+
43
+
+
, 3
+
X + 3.
+
68
+
+
44
+
+
, 4
+
X + 4.
+
69
+
+
45
+
+
, 5
+
X + 5.
+
70
+
+
46
+
+
, 6
+
X + 6.
+
71
+
+
47
+
+
, 7
+
X + 7.
+
72
+
+
48
+
+
, 8
+
X + 8.
+
73
+
+
49
+
+
, 9
+
X + 9.
+
74
+
+
4A
+
+
, A
+
X + A.
+
75
+
+
4B
+
+
, B
+
X + B.
+
76
+
+
4C
+
+
, C
+
X + C.
+
77
+
+
4D
+
+
, D
+
X + D.
+
78
+
+
4E
+
+
, E
+
X + E.
+
79
+
+
4F
+
+
, F
+
X + F.
+
80
+
+
50
+
+
/
+
1. + "" X .
+ 2. " ", + (, ).
+
81
+
+
51
+
+
+
+ .
+
82
+
+
52
+
+
/
+
+ . , - + ( " ").
+
83
+
+
53
+
+
+
+ . + . " ", + , . +
+
84
+
+
54
+
+
,
+
" ", + .
+
85
+
+
55
+
+
[]
+
[]
+
86
+
+
56
+
+
[]
+
[]
+
87
+
+
57
+
+
F, x!=0
+
+ . , + .
+
88
+
+
58
+
+
F, L2
+
+ RG2. (. F, L0)
+
89
+
+
59
+
+
F, x>=0
+
+ . , + .
+
90
+
+
5A
+
+
F, L3
+
+ RG3. (. F, L0)
+
91
+
+
5B
+
+
F, L1
+
+ RG1. (. F, L0)
+
92
+
+
5C
+
+
F, x<0
+
+ . , + .
+
93
+
+
5D
+
+
F, L0
+
+ RG0. . + 0 , , + , .
+
94
+
+
5E
+
+
F, x=0
+
+ . , + .
+
95
+
+
5F
+
+
[]
+
[]
+
96
+
+
60
+
+
, 0
+
0 + X.
+
97
+
+
61
+
+
, 1
+
1 + X.
+
98
+
+
62
+
+
, 2
+
2 + X.
+
99
+
+
63
+
+
, 3
+
3 + X.
+
100
+
+
64
+
+
, 4
+
4 + X.
+
101
+
+
65
+
+
, 5
+
5 + X.
+
102
+
+
66
+
+
, 6
+
6 + X.
+
103
+
+
67
+
+
, 7
+
7 + X.
+
104
+
+
68
+
+
, 8
+
8 + X.
+
105
+
+
69
+
+
, 9
+
9 + X.
+
106
+
+
6A
+
+
, A
+
A + X.
+
107
+
+
6B
+
+
, B
+
B + X.
+
108
+
+
6C
+
+
, C
+
C + X.
+
109
+
+
6D
+
+
, D
+
D + X.
+
110
+
+
6E
+
+
, E
+
+ E X.
+
111
+
+
6F
+
+
, F
+
F + X.
+
112
+
+
70
+
+
, x!=0, 0
+
+ , + 0.
+
113
+
+
71
+
+
, x!=0, 1
+
, x!=0, 0, + 1.
+
114
+
+
72
+
+
, x!=0, 2
+
, x!=0, 0, + 2.
+
115
+
+
73
+
+
, x!=0, 3
+
, x!=0, 0, + 3.
+
116
+
+
74
+
+
, x!=0, 4
+
, x!=0, 0, + 4.
+
117
+
+
75
+
+
, x!=0, 5
+
, x!=0, 0, + 5.
+
118
+
+
76
+
+
, x!=0, 6
+
, x!=0, 0, + 6.
+
119
+
+
77
+
+
, x!=0, 7
+
, x!=0, 0, + 7.
+
120
+
+
78
+
+
, x!=0, 8
+
, x!=0, 0, + 8.
+
121
+
+
79
+
+
, x!=0, 9
+
, x!=0, 0, + 9.
+
122
+
+
7A
+
+
, x!=0, A
+
, x!=0, 0, + A.
+
123
+
+
7B
+
+
, x!=0, B
+
, x!=0, 0, + B.
+
124
+
+
7C
+
+
, x!=0, C
+
, x!=0, 0, + C.
+
125
+
+
7D
+
+
, x!=0, D
+
, x!=0, 0, + D.
+
126
+
+
7E
+
+
, x!=0, E
+
, x!=0, 0, + E.
+
127
+
+
7F
+
+
, x!=0, F
+
, x!=0, 0, + F.
+
128
+
+
80
+
+
, , 0
+
+ , 0.
+
129
+
+
81
+
+
, , 1
+
+ , 1.
+
130
+
+
82
+
+
, , 2
+
+ , 2.
+
131
+
+
83
+
+
, , 3
+
+ , 3.
+
132
+
+
84
+
+
, , 4
+
+ , 4.
+
133
+
+
85
+
+
, , 5
+
+ , 5.
+
134
+
+
86
+
+
, , 6
+
+ , 6.
+
135
+
+
87
+
+
, , 7
+
+ , 7.
+
136
+
+
88
+
+
, , 8
+
+ , 8.
+
137
+
+
89
+
+
, , 9
+
+ , 9.
+
138
+
+
8A
+
+
, , A
+
+ , A.
+
139
+
+
8B
+
+
, , B
+
+ , B.
+
140
+
+
8C
+
+
, , C
+
+ , C.
+
141
+
+
8D
+
+
, , D
+
+ , D.
+
142
+
+
8E
+
+
, , E
+
+ , E.
+
143
+
+
8F
+
+
, , F
+
+ , F.
+
144
+
+
90
+
+
, x>=0, 0
+
+ , + 0.
+
145
+
+
91
+
+
, x>=0, 1
+
, x>=0, 0, + 1.
+
146
+
+
92
+
+
, x>=0, 2
+
, x>=0, 0, + 2.
+
147
+
+
93
+
+
, x>=0, 3
+
, x>=0, 0, + 3.
+
148
+
+
94
+
+
, x>=0, 4
+
, x>=0, 0, + 4.
+
149
+
+
95
+
+
, x>=0, 5
+
, x>=0, 0, + 5.
+
150
+
+
96
+
+
, x>=0, 6
+
, x>=0, 0, + 6.
+
151
+
+
97
+
+
, x>=0, 7
+
, x>=0, 0, + 7.
+
152
+
+
98
+
+
, x>=0, 8
+
, x>=0, 0, + 8.
+
153
+
+
99
+
+
, x>=0, 9
+
, x>=0, 0, + 9.
+
154
+
+
9A
+
+
, x>=0, A
+
, x>=0, 0, + A.
+
155
+
+
9B
+
+
, x>=0, B
+
, x>=0, 0, + B.
+
156
+
+
9C
+
+
, x>=0, C
+
, x>=0, 0, + C.
+
157
+
+
9D
+
+
, x>=0, D
+
, x>=0, 0, + D.
+
158
+
+
9E
+
+
, x>=0, E
+
, x>=0, 0, + E.
+
159
+
+
9F
+
+
, x>=0, F
+
, x>=0, 0, + F.
+
160
+
+
A0
+
+
, , 0
+
, + 0. +
+
161
+
+
A1
+
+
, , 1
+
, , 0, + 1.
+
162
+
+
A2
+
+
, , 2
+
, , 0, + 2.
+
163
+
+
A3
+
+
, , 3
+
, , 0, + 3.
+
164
+
+
A4
+
+
, , 4
+
, , 0, + 4.
+
165
+
+
A5
+
+
, , 5
+
, , 0, + 5.
+
166
+
+
A6
+
+
, , 6
+
, , 0, + 6.
+
167
+
+
A7
+
+
, , 7
+
, , 0, + 7.
+
168
+
+
A8
+
+
, , 8
+
, , 0, + 8.
+
169
+
+
A9
+
+
, , 9
+
, , 0, + 9.
+
170
+
+
AA
+
+
, , A
+
, , 0, + A.
+
171
+
+
AB
+
+
, , B
+
, , 0, + B.
+
172
+
+
AC
+
+
, , C
+
, , 0, + C.
+
173
+
+
AD
+
+
, , D
+
, , 0, + D.
+
174
+
+
AE
+
+
, , E
+
, , 0, + E.
+
175
+
+
AF
+
+
, , F
+
, , 0, + F.
+
176
+
+
B0
+
+
, , 0
+
+ X , + 0. 0 + .
+
177
+
+
B1
+
+
, , 1
+
+ 0.
+
178
+
+
B2
+
+
, , 2
+
+ 0.
+
179
+
+
B3
+
+
, , 3
+
+ 0.
+
180
+
+
B4
+
+
, , 4
+
+ X , 4. + 4 + .
+
181
+
+
B5
+
+
, , 5
+
+ 4.
+
182
+
+
B6
+
+
, , 6
+
+ 4.
+
183
+
+
B7
+
+
, , 7
+
X , + 7. 7 + .
+
184
+
+
B8
+
+
, , 8
+
+ 7.
+
185
+
+
B9
+
+
, , 9
+
7.
+
186
+
+
BA
+
+
, , A
+
+ 7.
+
187
+
+
BB
+
+
, , B
+
+ 7.
+
188
+
+
BC
+
+
, , C
+
+ 7.
+
189
+
+
BD
+
+
, , D
+
+ 7.
+
190
+
+
BE
+
+
, , E
+
+ 7.
+
191
+
+
BF
+
+
, , F
+
+ 7.
+
192
+
+
C0
+
+
, x<0, 0
+
+ , + 0.
+
193
+
+
C1
+
+
, x<0, 1
+
, x<0, 0, + 1.
+
194
+
+
C2
+
+
, x<0, 2
+
, x<0, 0, + 2.
+
195
+
+
C3
+
+
, x<0, 3
+
, x<0, 0, + 3.
+
196
+
+
C4
+
+
, x<0, 4
+
, x<0, 0, + 4.
+
197
+
+
C5
+
+
, x<0, 5
+
, x<0, 0, + 5.
+
198
+
+
C6
+
+
, x<0, 6
+
, x<0, 0, + 6.
+
199
+
+
C7
+
+
, x<0, 7
+
, x<0, 0, + 7.
+
200
+
+
C8
+
+
, x<0, 8
+
, x<0, 0, + 8.
+
201
+
+
C9
+
+
, x<0, 9
+
, x<0, 0, + 9.
+
202
+
+
CA
+
+
, x<0, A
+
, x<0, 0, + A.
+
203
+
+
CB
+
+
, x<0, B
+
, x<0, 0, + B.
+
204
+
+
CC
+
+
, x<0, C
+
, x<0, 0, + C.
+
205
+
+
CD
+
+
, x<0, D
+
, x<0, 0, + D.
+
206
+
+
CE
+
+
, x<0, E
+
, x<0, 0, + E.
+
207
+
+
CF
+
+
, x<0, F
+
, x<0, 0, + F.
+
208
+
+
D0
+
+
, , 0
+
+ , RG0. + 0 + , .
+
209
+
+
D1
+
+
, , 1
+
( , , 0, + RG1.)
+
210
+
+
D2
+
+
, , 2
+
( , , 0, RG2.)
+
211
+
+
D3
+
+
, , 3
+
( , , 0, RG3.)
+
212
+
+
D4
+
+
, , 4
+
+ , RG4. + 4 + , .
+
213
+
+
D5
+
+
, , 5
+
( , , 4, RG5.)
+
214
+
+
D6
+
+
, , 6
+
( , , 4, RG6.)
+
215
+
+
D7
+
+
, , 7
+
+ , RG7. + 7 + , ( ), + .
+
216
+
+
D8
+
+
, , 8
+
( , , 7, RG8.)
+
217
+
+
D9
+
+
, , 9
+
( , , 7, RG9.)
+
218
+
+
DA
+
+
, , A
+
( , , 7, A.)
+
219
+
+
DB
+
+
, , B
+
( , , 7, B.)
+
220
+
+
DC
+
+
, , C
+
( , , 7, C.)
+
221
+
+
DD
+
+
, , D
+
( , , 7, D.)
+
222
+
+
DE
+
+
, , E
+
( , , 7, E.)
+
223
+
+
DF
+
+
, , F
+
( , , 7, F.)
+
224
+
+
E0
+
+
, x=0, 0
+
+ , + 0.
+
225
+
+
E1
+
+
, x=0, 1
+
, x=0, 0, + 1.
+
226
+
+
E2
+
+
, x=0, 2
+
, x=0, 0, + 2.
+
227
+
+
E3
+
+
, x=0, 3
+
, x=0, 0, + 3.
+
228
+
+
E4
+
+
, x=0, 4
+
, x=0, 0, + 4.
+
229
+
+
E5
+
+
, x=0, 5
+
, x=0, 0, + 5.
+
230
+
+
E6
+
+
, x=0, 6
+
, x=0, 0, + 6.
+
231
+
+
E7
+
+
, x=0, 7
+
, x=0, 0, + 7.
+
232
+
+
E8
+
+
, x=0, 8
+
, x=0, 0, + 8.
+
233
+
+
E9
+
+
, x=0, 9
+
, x=0, 0, + 9.
+
234
+
+
EA
+
+
, x=0, A
+
, x=0, 0, + A.
+
235
+
+
EB
+
+
, x=0, B
+
, x=0, 0, + B.
+
236
+
+
EC
+
+
, x=0, C
+
, x=0, 0, + C.
+
237
+
+
ED
+
+
, x=0, D
+
, x=0, 0, + D.
+
238
+
+
EE
+
+
, x=0, E
+
, x=0, 0, + E.
+
239
+
+
EF
+
+
, x=0, F
+
, x=0, 0, + F.
+
240
+
+
F0
+
+
[]
+
[]
+
241
+
+
F1
+
+
[]
+
[]
+
242
+
+
F2
+
+
K HEX
+
X +
+
243
+
+
F3
+
+
[]
+
[]
+
244
+
+
F4
+
+
[]
+
[]
+
245
+
+
F5
+
+
F,
+
"" + - X .
+
246
+
+
F6
+
+
F, CF
+
"" + - X + (\r\n).
+
247
+
+
F7
+
+
[]
+
[]
+
248
+
+
F8
+
+
[]
+
[]
+
249
+
+
F9
+
+
[]
+
[]
+
250
+
+
FA
+
+
[]
+
[]
+
251
+
+
FB
+
+
[]
+
[]
+
252
+
+
FC
+
+
[]
+
[]
+
253
+
+
FD
+
+
[]
+
[]
+
254
+
+
FE
+
+
[]
+
[]
+
255
+
+
FF
+
+
[]
+
[]
+

<<

+

5 May, 2002 3:01

+ + diff --git a/programs/emulator/PrMK/trunk/docs/b3-34help2.htm b/programs/emulator/PrMK/trunk/docs/b3-34help2.htm new file mode 100644 index 0000000000..9df3be51d2 --- /dev/null +++ b/programs/emulator/PrMK/trunk/docs/b3-34help2.htm @@ -0,0 +1,236 @@ + + +3-34 - + + + + + + + + + + +
! + . 
+

3-34.
+
. + .
+
( + ).

+
.

+

 

+ + + + +
+

.

+
    +
  • . . + "".
  • +
  • . + .
  • +
  • . , . + .
  • +
  • - . + sin, cos, tg, arcsin, arccos, arctg.
  • +
  • 3-34.
  • +
  • F x ( 30 .). .
  • +
  • + . .
  • +
+
+
+ + + + +
+

"".

+
    +
  • "" -
  • +
  • "" - + .
  • +
  • "" - .
  • +
  • " " - + .
  • +
  • "" - , + .
  • +
  • " " - , + , , .
  • +
  • "" - .
  • +
  • " " - + .
  • +
  • " " - + .
  • +
  • " " - . + .
  • +
  • "" - + .
  • +
  • "" - .
  • +
  • "" - .
  • +
  • " " - + " 3-34" .
  • +
  • "" - .
  • +
+

 

+
+
+ + + + +
+

"".

+
    +
  • "" - + ().
  • +
  • "" - + X ( ) .
  • +
  • " " - 16 .
  • +
  • " " - .
  • +
  • " " - .
  • +
  • " " - . + , . .
  • +
  • " . " - .
  • +
  • " " - .
  • +
+
+
+ + + + +
+

"".

+
    +
  • "" - (b3-34help0.htm)
  • +
  • " 3-34" - + .
  • +
  • " " - ( ) .
  • +
  • " " - .
  • +
  • "" - , + b3_34.exe.
  • +
+
+
+ + + + +
+

:

+
    +
  • 100 256 ;
  • +
  • 16 + ;
  • +
  • , + ;
  • +
  • . + 5;
  • +
  • ;
  • +
  • ( + x=0, x!=0 ( 0), x>=0 ( 0), x<0);
  • +
  • ;
  • +
  • X ;
  • +
  • ;
  • +
  • ;
  • +
  • ;
  • +
  • " ";
  • +
  • + ;
  • +
  • + "";
  • +
  • .
    +
    +
  • +
+
+
+ + + + +
+

.

+
    +
  • " " - + .
  • +
  • " " - .
  • +
  • " " - ( ) .
  • +
  • " " - .
  • +
  • "" - , + b3_34.exe.
  • +
+
+

+ IBM 1.31.

+

{1,0x29,0," ` (~)"," F ( 0)"},//
+ {1,0x14D,1," "," ( 1)"},//
+ {1,0x14B,2," "," ( 2)"},//
+ {1,0x147,3," Home"," / ( 3)"},//
+ {1,0x14F,4," End"," / ( 4)"},//
+ {1,0x25,5," . K"," K ( 5)"},//
+ {1,0x13,5," . K"," K ( 5)"},//
+ {1,0x17,6," I"," ( 6)"},//
+ {1,0x19,7," .P "," ( 7)"},//
+ {1,0x22,7," .(.G)"," ( 7)"},//
+ {1,0x33,8," .( )"," ( 8)"},//
+ {1,0x1F,9," S "," ( 9)"},//
+ {1,0x47,10," . . 7 "," 7 ( 10)"},//
+ {1,0x08,10," 7 "," 7 ( 10)"},//
+ {1,0x48,11," . . 8 "," 8 ( 11)"},//
+ {1,0x09,11," 8 "," 8 ( 11)"},//
+ {1,0x49,12," . . 9 "," 9 ( 12)"},//
+ {1,0x0A,12," 9 "," 9 ( 12)"},//
+ {1,0x37,13," . .* "," X ( 13)"},//
+ {1,0x4E,14," . . + "," + ( 14)"},//
+ {1,0x4B,15," . . 4 "," 4 ( 15)"},//
+ {1,0x05,15," 4 "," 4 ( 15)"},//
+ {1,0x4C,16," . . 5 "," 5 ( 16)"},//
+ {1,0x06,16," 5 "," 5 ( 16)"},//
+ {1,0x4D,17," . . 6 "," 6 ( 17)"},//
+ {1,0x07,17," 6 "," 6 ( 17)"},//
+ {1,0x135,18," . . / "," / ( 18)"},//
+ {1,0x4A,19," . . - "," - ( 19)"},//
+ {1,0x21,19," . F "," - ( 19) . F"},//
+ {1,0x4F,20," . . 1 "," 1 ( 20)"},//
+ {1,0x02,20," . 1 "," 1 ( 20)"},//
+ {1,0x50,21," . . 2 "," 5 ( 21)"},//
+ {1,0x03,21," . 2 "," 5 ( 21)"},//
+ {1,0x51,22," . . 3 "," 3 ( 22)"},//
+ {1,0x04,22," . 3 "," 3 ( 22)"},//
+ {1,0x150,23," "," XY ( 23)"},//
+ {1,0x148,24," "," ( 24)"},//
+ {1,0x12,24," . E "," ( 24) .E"},//
+ {1,0x11C,24," . Enter "," ( 24) + .E"},//
+ {1,0x52,25," . . 0 "," 0 ( 25)"},//
+ {1,0x0B,25," . 0 "," 0 ( 25)"},//
+ {1,0x53,26," . . . "," , ( 26)"},//
+ {1,0x1E,26," .A "," , ( 26) . A"},//
+ {1,0xC,27, " - () "," /-/ ( 27)"},//
+ {1,0x30,27," .B "," /-/ ( 27).B"},//
+ {1,0x152,28," Insert "," ( 28)"},//
+ //{0xBD,28," ???? "," ( 28)"},//
+ {1,0x153,29," Delete "," Cx ( 29)"},//
+ {1,0x39,29," "," Cx ( 29)"},//
+ {1,0x20,29," . D "," Cx ( 29) .D"}//

+

+

, , + 3-34. VER100 , + 100 , VER256 - 256 . + , + 0=1.567 0=1,567. + : //. ( ) + . IP, ip, , i ...

+

.

+

, , + .
+

+

...

+


+

+ + diff --git a/programs/emulator/PrMK/trunk/docs/stack1.gif b/programs/emulator/PrMK/trunk/docs/stack1.gif new file mode 100644 index 0000000000000000000000000000000000000000..5dfe6c40202b742a545e06349bbedca4ea00fb7e GIT binary patch literal 2240 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 H0l@4(C3p*jYAcGl zBtBO9U3XBu5H2NlTjO#w4lIUsINjvSm@{i;S9!DN&!9sa z6ivFcX@8Gzo?gwmHM@j#Q?P_R5nRI)9@B2bP0`|Grm>?`>bUpXU;rXT7*KHXZ_`rN zI%o1bXokg^1!@LYak$b>rAd#9A5R`=QjrsI5Zb-9c2%nI-(M90p@M?B>`8!4?TlRpJumbNAsY<6B`NCU;(3^c6((M(1ICB zs9GgvS8hm|Bo0(`3?^?F3WTUYQW%ouP#~ISg@8K8Y?`E}oHeW52r-$&DYhW>i{-H+ z0Ll)xP|Szbt1Qsk>==Hb<&dnsn48>0*?8=TiM};!fKOcv3{XiU_#}a@XC2`)J~Oom zphyrj$LN3G9PI*GLo7#YHfMI(Ce)_|p#Y>_d)hD8U7Ix$xhL%U$Y}@1DxhLrBK5#H z@`|Iy4p2{E-;pN_wp;~gzwj?)ypb?yyBoe7RSlUc)}GdUe{)4x3R_S_q7-Y&!k*!( zjO%>pu;C{E0B54yvxZBKkR0VB-0gUdFuxhN<)9Zgub=G|Kq%Lit7rQ-o)6K+4Qm^# z0>c0RJrU+?IIuBA^v(V671=y5+j2p`D}=`YK=1@tMussY3R!QZjz{~>d-FUzH!j2Y z;V=_E32$oU_cdkFdQqXzEh6O%^)tqOnA8$fm7xNIVj9q%)W0oF0s&XhmalqIumX^* z4oag`e!4d|E>N#xHYwG-2<02E}~;o%&O6t pwiu8g!EwP_ChC&*EVQgcY07%6S%4N2@PrSp$X!_=<7Pqt06W_Am017) literal 0 HcmV?d00001 diff --git a/programs/emulator/PrMK/trunk/docs/stack5.gif b/programs/emulator/PrMK/trunk/docs/stack5.gif new file mode 100644 index 0000000000000000000000000000000000000000..26a002a0104549499605fd23c82ef8ef32a24335 GIT binary patch literal 1881 zcmV-f2d4N(Nk%v~VRrzZ0K@O|Nr;@_W&6G02ucG5dQ!O z000000000000000EC2ui0CxbN000I5ARvxpX`X1Ru59bRVo}7(Sl2BM=sWEHKpS8N zNQiJZWN^uBzL1Iq%}K3VPm0UXD4Y?8KJInwta*i^3unC^p5Nd%dkwG0@Af=?ukYWF zS~dwY93+K4hiGJrEd@q81v-fUlP;Bvm@YgelZAq&|=gqm(0_t0teNuq|Sj zpsX#IvALqIs?&gIqI1-X^7HU1z(DD|*Xj@uB<$oHLu|x_NJq}?t2W~Sgnc*$j$tswjGGbf z7@lwdL4ksF60H<0phdwy2pmuUIy}j;rOTHvW4e5>a>9fMHq9I?SY@FhB1XQP*#=a^ zzjO%}gtS7@hJ=pS4sILvaD-54A~Ie%^o}L~10KEotC7Ism!(w-S-dv3n*o67d{U9? z!sY@4C&1CYS0!wLe^$d<9n6OT!;N2ku!UM{t3C_@wpkxV$nPW4FB=n3$Ekqnj$Zfhblht1pQ~;czXb9}^rmvyXcH);=U0>Bih^|t80rA6G6rRyurN4U z|v8cH@Hkq-0;d3D~99K^mJ3Ch%Yp zUJ5)=L9t*&$d|l9C~y;Tasf;o7ttB4?sO(G=Mkpj`nT|tS^YD?Y~&^yj>6yIVPLQm zuaH1^CbZ?Aw;{(+qf|6YzRN7~G6;t{vDldT8N>SH8TwIP9!Ihgpe?!p7ZSO1br+W*H{3^YY{To)&spoKNeS? zw7bYA%q0yH2u)mshi(zp_H-41pSw!?Of#};6fhud!OsAj<1}!1Wq;&j4S=Rc1OxRC z8_P?`=7PsGzpNx`M1ao%W8{+136$>jtP?2wU7`EMF1LsAx;a3qzB*7mMb6Pz%>(ihonU31i8F|h7hVoS)%o);aEj+a~lX8n}Dga zjILy_38IEH;uBPws&7V#WkMMBqEM}e1jzYhf0|@S5(tP@>0(GLix9~}PEv!~xdy(1 zu@Dm#l9Q5rhQxANmJPx}3^*f)SwQmuH-+gB-rSAr7zq_@36TXJG?2#NK)x*aDqk^r z2N%L=MRsilFw>JIJVuC+FBowLWO-*7BB4HnJ|IhXV;bvVGabO7EM-Y_kVnE9i7^%4 zhmx~dj;@HPP(4-e9}XzWHX{g}WJYIOz*A^{>!?6}1vYY=z)h3(K+t z0V6!A~m=Avzfm;Rp`UH(@TUNPj9S z|2`zQX#4=HW4N9XP$C}0t;Vdz`)JURm9OTZGOq)@Y7D&cCw^!XX2h}BAbau56?mk1 z&B>#mATXR7;57$TWYLMRiA{+Fw0hg&Ww18s3@#PvqST?HDYS@@+33+UsD;4-@+XCs TrZ#sG2ru_XNk%v~VRrzq0K@TrL~CfNuG zs{s`v+)er7*?iEQ0SO>hhdm{uL5q67J%h7kWid2WYVt}fr`!N49Nas^=*H_>r1|*$ zRWpKYgffDEK!b{fjEjzpc0g!xIEHtRi%FA73Ns%hpFW`gpJQ||6%!H@6BZN=H$GDU zI$|TEq)@o0UPKBOsun|=MJc$SqoIE&yS#*V(3e-L020E9bHymQnPVf_06ENtgVW(WZT=!Ju(?>##ARrPXw3+cvPc|QN z>UmpOg5xOzb~M-mZ~%>}2z=WA=&52V3Xg-~!T|yYY9>RGdLp#a(^3e-l|RcdFtUoI z7&S9)Si%;xDIFrfxI`Nv63rl|Si@Wu(yn6GFkinEJ&-4?S&T@IkYHdS0jsh=&&pNd z^BKRQST4?;I+sBwH0|(SDJVkT-op*a08nMblwrh>(E$M#WZ%`um}#k!n#jcC%yENW zZoo<}XtQ-w?BsbGvSC}3|CKS_`llKOb_8^yWkCYlG&P7d{rs`qWdOY=?2endc31|LSx6q2ZA({ALVTtsiP4C!m3v06E9LR?T>Wi+%(YQFE4 z1m4k)|^%GxKM=&6PPVRVx!;Jcf^GIPgp0!FVh5_jUZAvyZ$3=lH zCXtEXeMMMvs|XW^Z+le9P#LBqWgtm41eBncPO+F)Lt^wsg&Oa;h#d@bV%8Zgt4Qz! zYk8r0lOBL&nMNC(j5rcv#NjxEU#uu*Ri6qF=BII2Fo3~7CNOa(845l%7kxR1v0t5& z_CkwFgHeQOsbLv0UlKZ2@C>WZT}MMI=&acqsUL-OXcer;n%GdZVuceBjM2ga6(knh z6tM>2Rm&pHI;#)=R1-)gLbZPKs+C33d1WnPW5G4%B=Y>lE=ar>3roxGMOZ`*U<#nsUXYF0CPe|`li9kUFoPW8tt?st zM@Gnm#b2za@ptb*Gr@-}K1?Sg%7WC61%X$=rQotO`xt_*RZuz!fN`~_IUm!3a8oA9W<%CpfI0E%LHrVD9(P)y z>*t`KW&8>72xKqtOEOPLDyRPry$WcgixUa%2z^DT*S8=EJ30+xqy)gx`q+vb8zz+rr2ncQl^S|h2szCo>ONb8muv)|* zIU_(`1I0&`bgf2pB0Coa_p~3?IRpp=8KDRjr>9w@jw&1M!78R@2@xFNd?@P3d31<^ zMh$K*yI@<9j`oT9_z*Jupi4}axWgrmKr1qm5J&0H86;;lq<38KOk zVE`fjx$VU&KkHGW2s6eZIw&t@JPQv*MS%}8aX^Z3j;%ysjRR2QP;GRNgK^#uk4 z)7Z`0a)`RxpiFlnXw+}OryegYk6{WV1OqPM#_Q=NS`YA86^-Y=@MTW{IMG?K*b*HR z#!!i2WB@SC1&5p^&ywr2KmumNpco*ikgN(%XVf&nroA$MEnG_r4xp=7iXea?V^c2+ z2r}o8Mj!~%pfe{HB35AFbU55*2`q@G2?80&%Prr)2a-oiee156#SMRA$AmWU&&ZoC_5;!4ALB?v7ZQkug#8wnqX382>^@ zHH|?NwbZ7bcJQM+h~SZ*a0EbHx!rR{r;}(wGN?{%YWt+RnC>j5Iz((@Q)2+rEZ`~$ zD5C(8zT_;Gv;&cZu>&?UxXo)vJP9!;jr2gs2bs~wLjf|}`8Y`4Y z3ga^dT z0f5mFXf&w}^k^ACDglv}iniel(Mcu4QP`1yrAKVTOWP~c8qgFPHr4L^czUVJ(aKxd zm_q^u+TQ8f02nCIFBE2g086^nd_%D>Xg^h@_qlHfl;Lhe%W5v=@sDPGS^+M>X1CetGYISi^hXj{Wqng*u<~F;T6%NQ# z)ckcOjKajsG6Mhv76{`sp&M2((Ra##}RQL5Nt z06gq*&oW)aD%M7WJl3*0vwAb2=oJcy=4dUvO0fcaMs<~NH4B7uh8jMsc;d+d07!(Y e?8!P)G|(9mmhfxoY3nzYll6+yP;4lK0028xX7Zx| literal 0 HcmV?d00001 diff --git a/programs/emulator/PrMK/trunk/docs/stack7.gif b/programs/emulator/PrMK/trunk/docs/stack7.gif new file mode 100644 index 0000000000000000000000000000000000000000..2ac9a3b68dfb7431fb2abcb1d02dc503f08a2a0e GIT binary patch literal 2419 zcmb7aZMy{LtWoqsoNgJE%5HmEXZH`1zgk(9HW|K?C$mMa*?GT1j zO69nXTzcH1sMB>$ks?mbsq?f)&+`{N-`D5$eSN>**XQ+lzrLQ{9!`#o^FSN0002^{ z6bgk(BoZh9NOspB7l~B5A^9Q6hExJ@Xi!chlyeH$6>GPjgK}6<);VBT92Str`QhFT zVX>eb4!~joyFD)tU~vFW9+b5^6a!ER0NoAVC2af;0tGgpz%Ee=2PE+S0wsW^6ws6a zaOn@*|54Z<-XFgJa#DQ8Sud5VG-N?=4ddzTz;K3pR_28(;q+`8)|$^xr!Y#`S(HLPueh|jsxOyoXsbN0u6j|frmbFOOV{ae*17mE2@rt#S1QjVl(Ms_LX= z>(N>g2|jhwq@IiUU9zf59Ty!6)^&a=TyS;7ExbYwy`3Juf{*&kBG3R1&SBU+Q4mm7 z_bXC-%38vrz#L`DT(Mu$xf}?>gk!vp17(Dv4t*k~TZjkvGN_O;VeAZE9s_sLjCFyX zR!2sN;CCP|f!QN5*f;=}hC4vLr6d`w%(VW;uffXn&BHvXVp4rAVbX0Fm8 zCG)w;Rz z;b$p$VGtsPWJ)}f5`%&x<`0_G`IMAF$Iy|uA~b3(f7G9QCCNsPbD^$u-VOE6bdhIR zeX>RsMRd%v2(W+vik?A589Lq{LuBcKl_q`9ud{aA1-i-1!BCRF2~oiuSH#r+a%2-Q zJkZ^E?PB0eF^F>8sk8yf5T=Y2dfk&O)l4MY9Osw@p|cL$y3K7t_?kx>K$Zs`y)Sk1 z@2D8}eySU!QGuox#g_hkoNMgtXbfP|kYQxJzcnWSlkSJ8x{(>&SJ|u&b!hD9g`F*RAlC1-MQaY3Z7%3tCz`5L`FT7icT(tBkylzm7D%m@TXF1X z73Q`sUgTBFZZ!{v)GY?d3wk_zn`IZ$h^DK20VxV}>DvhyaO`wHCNAZp*-=X$D*mKz z1%s~nWtx0H&eFtmtb)n&40eJlKKUd*Ji6Mg6?v?8>r-{U+n=Jwob2j2jo4AtwfMeP zEDq(fZheP&PVfsgGh&F`{4$8zg}qhJJHjHw$5zA>W*CqArK)(;vnBa7?0~4bJy&y- z+7IO2vEOVaa*i2_4>V2y80V6D#2C^$>tg7D zUw(d|R!`;HlW2Gv!OsUdTT|gg*`M*!AoSGs3}&den35pG_`VA0ZD`Pyq02!ukuq^% z=Mi_+g~16|v<%4{tz&f)8q~{R1jJqYtF9T3f88w}E67A^(Pf|07ZZaL}au<~71cG68w{4+2Hama73lAg0jR+Z1L;CY&M(4Hb8n|`hx!;6^w8TiTj*Wc& zBoHd&*aKhx%nr*#=HZ>PvW;xabf($ruv7<>NMv=qtX1|t0+W%Y1K`4h4I0ITayL0{ z$yiO9lC5BQQ*bQYsCc3`B>4X9ePy`QV1`9Subg;Co=S2?zA)mB5r4^qbcRpz`cK@g zo~`FDrDAUQ%$TrNp+TQ*Ya+yE50|Pw9DhaD3)Snw{z=;dJIq-) za{(!5uble*)KHKTy#Jl(Um?=4om$n}BpCVwA@F{=8cN3=GmKMnRj3-d^5wB%xee%2 z-$ZVd>l)v1cG}E0rb12ZIBfJ`)z4^Xt!SMOv|HO_JQ`K1zl*ZRtj<^~fkJXLh4PSl z!WeF#5+;bmcNYTSsF}A%$6!@cd5Wb1EVO;j4ixi{dGhsmm7V2I2b({AVO%GmIgP7f zeb&ZqG1yCEDl#Lx)r?u89;*B;ncTXw)~RCP)-g($7i6ipl%mPoiP@r6fm>jUGRH|cW0zK@uQ`lrN0n9q9K&TZ7ZS@M~^c$=6g zDl_r22C{NJul1R9NcZ2b@m}5=_BU|+Z-K5)3& zjN*n(o7rxi5B#&B)Mer~yipTBq-V=mrmp4{V*&d5Yb)v9NaMl)lWvTxkgi;-ZhUwQW&m*^{Zyt~r`unLdg|CF + + + 3-34 -54 -56 + + + + + + +
+ + + + + + + + +

3-34, -54, -56


+ +/ + + +/ + + + + +
+
+ + + + + + + + + + + +

+ +     3-34 +

.1. [1] +

+
+

" 3-34" 1. '-', 'L', 'C', '', 'E' 'A','B','C','D','E' . . 'F' , . 3-34, - "FBx" ( ). . +

+

3-34 14 . "↑" "↑" "Kx≠0↑" "↑" "Kx≥0↑" "↑" "↑" "Kx<0↑" "↑" "Kx=0↑" 3-34 0, , 0 . , "" -52 -61 . 26h-2Ah 30h-3Bh 3-34 . +

+

-54 -56 : "→x" "", "x→" "", "X↔Y" "XY", "B↑" "↑", "sin-1", "cos-1", "tg-1" "arcsin", "arccos", "arctg" . . -54, -56 -52 -61. +

+        3-34 +

.2. [1] +

+

2 . . -152. +

+

-152 -161 -52 -61, "" "", 3-34. " " . +

+


+     3-34 -  12-84 +

.3. [2] +

3 - " 3-34" 5- " " N12 1984 . . . . +

+ +


+

+ + + + + +
+

1. .. . - .:. . . .-. ., 1986. - 160 .- (- "". . 55.)

+
 ..   .   . 55
+

2. " " N12 - 1984 .

+
 12-84
+
+ +
+
"" (383) 271-01-25 ()
+
+ + + + + + diff --git a/programs/emulator/PrMK/trunk/docs/Система команд программируемых микрокалькуляторов Б3-34 МК-54 МК-56_files/com_b334.jpg b/programs/emulator/PrMK/trunk/docs/Система команд программируемых микрокалькуляторов Б3-34 МК-54 МК-56_files/com_b334.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4d7f95acd49c6e07602e9e2af962be984f98a502 GIT binary patch literal 59337 zcmbTdcT|&4^f&lGBB4nK0|ba9fPf%XLN7vSN|mlsrGxa2Gy&-y1w#{%-m6HJuF|W3 zNbkK#4V&-p-F^3*{cCq8C+9qw%*->NDfiy_+&j0^w+jG;3R)Qr;Njr`Cb$o9y9m%J zc-dG2fU+_dKnVO_>2?-)0uT}qKnU&-LLd+#B0^$Pn!BVVB&76I)Z{cw3@pq{3@{iR z$;$y}eTaa;9*A&0H-uf$+hg zJ9offTxoyY{{Wcs4%K~rSpsTJQwXawjX+RB4k1FWs)JT*uELyaHNLNm)hvxsI-$zJZ~+#cN9|Ya3fvH+K(DFK?faccEe7?;|1; zlafgg(4*>lySpOT@{{t5#4i`Qc3<5*`!-a?MiTi>m!FTTS6Hv)& zLQI{hSp|X!Y2*@esyc`ef?5Z(W-cSdbV#8^w!{CR{SUJLcff-Gex%rNzjnZm zx3!9^7^BD}#YVFA9YK^WI~yD5n~i%jG?2bg=FO+M-_LvSlA6E$cc z3bono&T|nIg^0Z#tUoX9m zbbAuv-B1i=DsdTtGSLTbh+|quJcjx^_m^(Zf=w}p&5Zi?;MeLRkcTu$!7||G>61e2 zRNPU@sk&h2h<-gDkl6_RLgC~xy-a^v;dyWtzF21WOvL=jnBKqAP_x&`q%c6=8DkPJ zK;V-;!AyKG&B4GHD^5)zRV(p3;DNt(*$}4Vfh@HDZ1a2+m`1djo>t`E0*iMK7DO4C z0#BIbZh_E8*Y~kZFU;jDuN}s30e;o1mjMs3h2OFsFIKCOL5jLLA;5|S=5*6o=@$6T zwm2+0BD4^&Jt6%aBf*o6&;NO|6Z>!L2oN&StXCWeB{|59)CNv9#5 zlh8})kXt}%1otwfR_2kw_ECGq$_CjRTpfQ_mgmO5{64Nm@|kcx1QT*vc$OvSI?SLI4yT;mJo&u%L+Ldldnw^XA|B$eWD&6i8GwBIoR)ru zK)NR?G@Q?5PA;eupVGuF&Y&bO5X=xVbNAm8hVm0 zM~2r!{t8kj^k6e6(|dqu8UleI$y|EoI-{5rry?Ciha@gXDlyb!Gf{z`W$=0cj-xO8 z9Kqh%kIXx|!FaK4hP-q@7qhtMN!}bE5&UpmLoeDh*9J`8BRaqxbDzY*HTI704i-6H zYkbGc@~=W|*uLhcX9mBtR)R=12wXcL$Xyx#7fwEU!G!&eKAsg$2bQ5lc6_pBtp!D! ztlT92QX^)Oux6!5gTse!Iz>?kdSY^TaWqx@=77B2caLEf~geWn*Gc@|rgERZ5e z*ip_QJHhhZkj95BH{Z7Uh0T^(Q0Wd^25&BS=e66N=LvyNQaXn084^y!T6nkC{;4*6 zZLacVOrxN8$msky+c<|p{5@gfTGbe_7+)LB`Jf*LeU$a^pmUT@c_wdVHLx8CqsBPv zZDlUFW+Enpjb0kdkGU1uFZ##R04*aU;4+lb3EoMUU_x6)fblpEMI&83R)+cHkh z?2Xce*cazVJ1~l`a}kj;R)NWg%9i>W#=0`0;|!BWc6K)95^Hs}sS95=BBM)fdlQ{U zKRv8iilg4BG5r0iyI|8r*_EezwKR1$kH6NAAumY(V5e&thL`BVspw>7tU#jy5nYnh z)~TB~c_yNgI(Tm!nexi0#N#7e>E}W5<`i_>kini|N4si5m`QAnwT)|LT7r~uJT>h| zvQnyU&}(aOblvb^t|>K%H}^}Y#M+W@rElGfF1b_%T}kIb?kAn*ofPvwnM1SdKM8)Z zaLyU9pqJfv`B}r~WZ=PGM}{zs=2POPjGw=4^gd{YJ|ZP&4ck!CLI-fIpK$u=72EiD z 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 SPjSk?u>>5B;)*Dw2mjgF%YDKC literal 0 HcmV?d00001 diff --git a/programs/emulator/PrMK/trunk/docs/Система команд программируемых микрокалькуляторов Б3-34 МК-54 МК-56_files/danilov1.jpg b/programs/emulator/PrMK/trunk/docs/Система команд программируемых микрокалькуляторов Б3-34 МК-54 МК-56_files/danilov1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8632c727999dca3ad759f4594271273950d3a936 GIT binary patch literal 4978 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 Byej|z literal 0 HcmV?d00001 diff --git a/programs/emulator/PrMK/trunk/docs/Система команд программируемых микрокалькуляторов Б3-34 МК-54 МК-56_files/nkj12840.jpg b/programs/emulator/PrMK/trunk/docs/Система команд программируемых микрокалькуляторов Б3-34 МК-54 МК-56_files/nkj12840.jpg new file mode 100644 index 0000000000000000000000000000000000000000..42e8819dd49b8534145c279f0d66d127185bf2aa GIT binary patch literal 6906 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 J;&IoX{|~ga%WMDu literal 0 HcmV?d00001 diff --git a/programs/emulator/PrMK/trunk/docs/Система команд программируемых микрокалькуляторов Б3-34 МК-54 МК-56_files/stack000.jpg b/programs/emulator/PrMK/trunk/docs/Система команд программируемых микрокалькуляторов Б3-34 МК-54 МК-56_files/stack000.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a8395d1f0b6bab2a55d58cdde958224c93d2cd55 GIT binary patch literal 39932 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 literal 0 HcmV?d00001 diff --git a/programs/emulator/PrMK/trunk/docs/Система команд программируемых микрокалькуляторов Б3-34 МК-54 МК-56_files/tablb334.jpg b/programs/emulator/PrMK/trunk/docs/Система команд программируемых микрокалькуляторов Б3-34 МК-54 МК-56_files/tablb334.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5c9df85ad5b4faebce3ac9f2492b6d100b4e3644 GIT binary patch literal 105492 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 Voea>SP6 + + + -152 - + + + + + + +
+ + + + + + + + +


+ +/ + + +/ + + +/ + + + + +
+
+ + + + + + + + + + + +

+

+

.1

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
DECHEX
000h001 0
101h 111 1
202h 221 2
303h 331 3
404h 441 4
505h 551 5
606h 661 6
707h 771 7
808h 881 8
909h 991 9
100Ah ,,1
110Bh /-/+/-1
120Ch EE1
130Dh CxCX1 X
140Eh B↑ENT1
150Fh F BxF ANS1 X X1
1610h ++1
1711h --1
1812h ×*1
1913h ÷/1
2014h <->1 X Y
2115h F 10xF 10^X110 X
2216h F exF EXP1e (2,71828...) X
2317h F lgF LG1
2418h F lnF LN1
2519h F arcsinF ARCSIN1
261Ah F arccosF ARCCOS1
271Bh F arctgF ARCTG1
281Ch F sinF SIN1
291Dh F cosF COS1
301Eh F tgF TG1
311Fh     
3220h""F πF PI1 π (3,14159...)
3321h!F √F SQRT1
3422h"F x2F X^21
3523h#F 1/xF 1/X1
3624h$F xyF X^Y1 x y
3725h%F R1
3826h&K →K M->D1
3927h'K -K -1
4028h(K PRGM1
4129h)K ÷K /1
422Ah*K  K MS->D1
432Bh+    
442Ch,    
452Dh-    
462Eh.    
472Fh/    
4830h0K →K D->MS1
4931h1K |x|K ABS1
5032h2K SGN1
5133h3K →K D->M1
5234h4K [x]K INT1
5335h5K {x}K FRAC1
5436h6K maxK MAX1
5537h7K ANDK AND1
5638h8K ORK OR1
5739h9K XORK XOR1 2
583Ah:K NOTK NOT1
593Bh;K RAN1 0 1
603Ch<    
613Dh=    
623Eh>    
633Fh?    
6440h@ 0M 01 X 0
6541hA 1M 11- " - 1
6642hB 2M 21- " - 2
6743hC 3M 31- " - 3
6844hD 4M 41- " - 4
6945hE 5M 51- " - 5
7046hF 6M 61- " - 6
7147hG 7M 71- " - 7
7248hH 8M 81- " - 8
7349hI 9M 91- " - 9
744AhJ AM A1- " - A
754BhK BM B1- " - B
764ChL CM C1- " - C
774DhM DM D1- " - D
784EhN EM E1- " - E
794FhO P M2 X 0 99
8050hP/R/S1
8151hQGOTO2
8252hR/RTN1
8353hSGSB2
8454hTK NOP1
8555hUK SCR1
8656hVK GRPH1
8757hWF x≠0F X!=02 x≠0
8858hXF L2F L22 2
8959hYF x≥0F X>=02 x≥0
905AhZF L3F L32 3
915Bh[F L1F L12 1
925Ch\F x<0F X<02 x<0
935Dh]F L0F L02 0
945Eh^F x=0F X=02 x=0
955Fh_    
9660h` 0RM 01 X 0
9761ha 1RM 11-"- 1
9862hb 2RM 21-"- 2
9963hc 3RM 31-"- 3
10064hd 4RM 41-"- 4
10165he 5RM 51-"- 5
10266hf 6RM 61-"- 6
10367hg 7RM 71-"- 7
10468hh 8RM 81-"- 8
10569hi 9RM 91-"- 9
1066Ahj ARM A1-"- A
1076Bhk BRM B1-"- B
1086Chl CRM C1-"- C
1096Dhm DRM D1-"- D
1106Ehn ERM E1-"- E
1116FhoP RM2 X 0 99
11270hpK x≠0 0K X!=0 01 x≠0 0
11371hqK x≠0 1K X!=0 11-"- 1
11472hrK x≠0 2K X!=0 21-"- 2
11573hsK x≠0 3K X!=0 31-"- 3
11674htK x≠0 4K X!=0 41-"- 4
11775huK x≠0 5K X!=0 51-"- 5
11876hvK x≠0 6K X!=0 61-"- 6
11977hwK x≠0 7K X!=0 71-"- 7
12078hxK x≠0 8K X!=0 81-"- 8
12179hyK x≠0 9K X!=0 91-"- 9
1227AhzK x≠0 AK X!=0 A1-"- A
1237Bh{K x≠0 BK X!=0 B1-"- B
1247Ch|K x≠0 CK X!=0 C1-"- C
1257Dh}K x≠0 DK X!=0 D1-"- D
1267Eh~K x≠0 EK X!=0 E1-"- E
1277FhPK x≠0PK X≠02 x≠0 0 99
12880hK  0K GOTO 01 0
12981hK  1K GOTO 11-"- 1
13082hK  2K GOTO 21-"- 2
13183hK  3K GOTO 31-"- 3
13284hK  4K GOTO 41-"- 4
13385hK  5K GOTO 51-"- 5
13486hK  6K GOTO 61-"- 6
13587hK  7K GOTO 71-"- 7
13688hK  8K GOTO 81-"- 8
13789hK  9K GOTO 91-"- 9
1388AhK  AK GOTO A1-"- A
1398BhK  BK GOTO B1-"- B
1408ChK  CK GOTO C1-"- C
1418DhK  DK GOTO D1-"- D
1428EhK  EK GOTO E1-"- E
1438FhPK PK GOTO2 0 99
14490hK x≥0 0K X>=0 01 x≥0 0
14591hK x≥0 1K X>=0 11-"- 1
14692hK x≥0 2K X>=0 21-"- 2
14793hK x≥0 3K X>=0 31-"- 3
14894hK x≥0 4K X>=0 41-"- 4
14995hK x≥0 5K X>=0 51-"- 5
15096hK x≥0 6K X>=0 61-"- 6
15197hK x≥0 7K X>=0 71-"- 7
15298hK x≥0 8K X>=0 81-"- 8
15399hK x≥0 9K X>=0 91-"- 9
1549AhK x≥0 AK X>=0 A1-"- A
1559BhK x≥0 BK X>=0 B1-"- B
1569ChK x≥0 CK X>=0 C1-"- C
1579DhK x≥0 DK X>=0 D1-"- D
1589EhK x≥0 EK X>=0 E1-"- E
1599FhPK x≥0PK X>=02 x≥0 0 99
1600A0hK  0K GSB 01 0
1610A1hK  1K GSB 11-"- 1
1620A2hK  2K GSB 21-"- 2
1630A3hK  3K GSB 31-"- 3
1640A4hK  4K GSB 41-"- 4
1650A5hK  5K GSB 51-"- 5
1660A6hK  6K GSB 61-"- 6
1670A7hK  7K GSB 71-"- 7
1680A8hK  8K GSB 81-"- 8
1690A9hK  9K GSB 91-"- 9
1700AAhK  AK GSB A1-"- A
1710ABhK  BK GSB B1-"- B
1720AChK  CK GSB C1-"- C
1730ADhK  DK GSB D1-"- D
1740AEhK  EK GSB E1-"- E
1750AFhPK PK GSB2 0 99
1760B0h K  0K M 01 X 0
1770B1h K  1K M 11-"- 1
1780B2h K  2K M 21-"- 2
1790B3h K  3K M 31-"- 3
1800B4h K  4K M 41-"- 4
1810B5h K  5K M 51-"- 5
1820B6h K  6K M 61-"- 6
1830B7h K  7K M 71-"- 7
1840B8h K  8K M 81-"- 8
1850B9h K  9K M 91-"- 9
1860BAh K  AK M A1-"- A
1870BBh K  BK M B1-"- B
1880BCh K  CK M C1-"- C
1890BDh K  DK M D1-"- D
1900BEh K  EK M E1-"- E
1910BFh PK PK M2 X 0 99
1920C0h K x<0 0K X<0 01 x<0 0
1930C1h K x<0 1K X<0 11-"- 1
1940C2h K x<0 2K X<0 21-"- 2
1950C3h K x<0 3K X<0 31-"- 3
1960C4h K x<0 4K X<0 41-"- 4
1970C5h K x<0 5K X<0 51-"- 5
1980C6h K x<0 6K X<0 61-"- 6
1990C7h K x<0 7K X<0 71-"- 7
2000C8h K x<0 8K X<0 81-"- 8
2010C9h K x<0 9K X<0 91-"- 9
2020CAh K x<0 AK X<0 A1-"- A
2030CBh K x<0 BK X<0 B1-"- B
2040CCh K x<0 CK X<0 C1-"- C
2050CDh K x<0 DK X<0 D1-"- D
2060CEh K x<0 EK X<0 E1-"- E
2070CFh PK x<0PK X<02 x<0 0 99
2080D0h K  0K RM 01 X 0
2090D1h K  1K RM 11-"- 1
2100D2h K  2K RM 21-"- 2
2110D3h K  3K RM 31-"- 3
2120D4h K  4K RM 41-"- 4
2130D5h K  5K RM 51-"- 5
2140D6h K  6K RM 61-"- 6
2150D7h K  7K RM 71-"- 7
2160D8h K  8K RM 81-"- 8
2170D9h K  9K RM 91-"- 9
2180DAh K  AK RM A1-"- A
2190DBh K  BK RM B1-"- B
2200DCh K  CK RM C1-"- C
2210DDh K  DK RM D1-"- D
2220DEh K  EK RM E1-"- E
2230DFh PK PK RM2 X 0 99
2240E0hK x=0 0K X=0 01 x=0 0
2250E1hK x=0 1K X=0 11-"- 1
2260E2hK x=0 2K X=0 21-"- 2
2270E3hK x=0 3K X=0 31-"- 3
2280E4hK x=0 4K X=0 41-"- 4
2290E5hK x=0 5K X=0 51-"- 5
2300E6hK x=0 6K X=0 61-"- 6
2310E7hK x=0 7K X=0 71-"- 7
2320E8hK x=0 8K X=0 81-"- 8
2330E9hK x=0 9K X=0 91-"- 9
2340EAhK x=0 AK X=0 A1-"- A
2350EBhK x=0 BK X=0 B1-"- B
2360EChK x=0 CK X=0 C1-"- C
2370EDhK x=0 DK X=0 D1-"- D
2380EEhK x=0 EK X=0 E1-"- E
2390EFhPK x=0PK X=02 x=0 0 99
2400F0h    
2410F1hP GOTO3
2420F2h  /PP RTN1
2430F3h P GSB3
2440F4h PP PP M3 X 0 9999
2450F5h     
2460F6h PP PP RM3 X 0 9999
2470F7h P x≠0P X!=03 x≠0
2480F8h PF L2PF L23 2
2490F9h P x≥0P X>=03 x≥0
2500FAh PF L3PF L33 3
2510FBh PF L1PF L13 1
2520FCh P x<0P X<03 x<0
2530FDh PF L0PF L03 0
2540FEh P x=0P X=03 x=0
2550FFh     
+
+
+
"" (383) 271-01-25 ()
+
+ + + + + diff --git a/programs/emulator/PrMK/trunk/docs/ЭКВМ Электроника МК-152 РЭ - Система команд ЭВМ_files/oarr0000.gif b/programs/emulator/PrMK/trunk/docs/ЭКВМ Электроника МК-152 РЭ - Система команд ЭВМ_files/oarr0000.gif new file mode 100644 index 0000000000000000000000000000000000000000..8028cfb86b66f76bedda63153b778e1d7dbb36f4 GIT binary patch literal 999 zcmV6ciK{6%`g178e&67#J8C85tTH8XFrM z92^`S9UUGX9v>ecARr(iAt53nA|oRsBqSsyB_$>%CMPE+C@3f?DJd!{Dl021EG#T7 zEiEoCE-x=HFfcGNF)=bSGBYzXG&D3dH8nOiHa9mnI5;>tIXOByIy*Z%JUl!-Jv}}? zK0iM{KtMo2K|w-7LPJACL_|bIMMXwNMn^|SNJvOYNl8jdN=r*iOiWBoO-)WtPESuy zP*6}&QBhJ-Qd3h?R8&+|RaI72R##V7SXfwDSy@_IT3cINTwGjTU0q&YUSD5dU|?Wj zVPRroVq;@tWMpJzWo2e&W@l$-XlQ6@X=!R|YHMq2Y;0_8ZEbFDZf|dIaBy&OadC2T za&vQYbaZreb#-=jc6WDoczAeud3kzzdV70&e0+R;eSLm@et&;|fPjF3fq{a8f`fyD zgoK2Jg@uNOhKGlTh=_=ZiHVAeii?YjjEszpjg5|uj*pLzkdTm(k&%*;l9Q8@l$4Z} zm6ev3mY0{8n3$NEnVFiJnwy)OoSdAUot>VZo}ZteprD|kp`oIpqNAguq@<*!rKP5( zrl+T;sHmu^si~@}s;jH3tgNi9t*x%EuCK4Ju&}VPv9YqUva_?Zw6wIfwY9dkwzs#p zxVX5vxw*Q!y1To(yu7@dCU$jHda z$;ryf%FD~k%*@Qq&CSlv&d<-!(9qD)(b3Y<($mw^)YR0~)z#M4*4Nk9*x1lt)=I7_<=;-L_>FMg~>g((4 z?Ck9A?d|UF?(gsK@bK{Q@$vHV^7Hfa^z`)g_4W4l_V@Sq`1ttw`T6?#`uqF){QUg= z{r&#_{{R2~A^sIZa%Ew3Wn>_CX>@2HRA^-&M@dak04x9i000;O7ytkWvjCY197wRB z!Gj1BDqP60Awoj{B1Y8U%b~zS0y0W8Ws#sG0TDS4L^X?{E(ZcW01(McSA`f1y#N3s zW#zzRE&xbcsNn#xnk<=70uV*vF90=|0VQZmKnjJi03cz;%95~x4m2q21waSFWCKhr ztkA&N!At;{EVKf^jlpF%05n=S3qb)$1!bC8#t;wy0Zk;4G6Vy_f>jO$DUcYELr{jd V!o(<{!;aaGm@{kM%o%e)06WL(%eMdk literal 0 HcmV?d00001 diff --git a/programs/emulator/PrMK/trunk/editbox_ex.mac b/programs/emulator/PrMK/trunk/editbox_ex.mac new file mode 100644 index 0000000000..938904c57c --- /dev/null +++ b/programs/emulator/PrMK/trunk/editbox_ex.mac @@ -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 ; 䫠 +} + diff --git a/programs/emulator/PrMK/trunk/lang.inc b/programs/emulator/PrMK/trunk/lang.inc new file mode 100644 index 0000000000..30c0149bd9 --- /dev/null +++ b/programs/emulator/PrMK/trunk/lang.inc @@ -0,0 +1 @@ +lang fix ru \ No newline at end of file diff --git a/programs/emulator/PrMK/trunk/macroPRMK.inc b/programs/emulator/PrMK/trunk/macroPRMK.inc new file mode 100644 index 0000000000..8a8189a98a --- /dev/null +++ b/programs/emulator/PrMK/trunk/macroPRMK.inc @@ -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 +} \ No newline at end of file diff --git a/programs/emulator/PrMK/trunk/macros.inc b/programs/emulator/PrMK/trunk/macros.inc new file mode 100644 index 0000000000..8b2870da76 --- /dev/null +++ b/programs/emulator/PrMK/trunk/macros.inc @@ -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 + +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 diff --git a/programs/emulator/PrMK/trunk/opcodes.inc b/programs/emulator/PrMK/trunk/opcodes.inc new file mode 100644 index 0000000000..15707da327 --- /dev/null +++ b/programs/emulator/PrMK/trunk/opcodes.inc @@ -0,0 +1,1444 @@ + align 4 + +OPCODEtable: + +dd _00,_00,_00,_00,_00,_00,_00,_00 ;00-07 +dd _00,_00,_0A,_0B,_0C,_0D,_0E,_0F ;08-0f +dd _10,_11,_12,_13,_14,_15,_16,_17 ;10-17 +dd _18,_19,_1A,_1B,_1C,_1D,_1E,_1f ;18-1f +dd _20,_21,_22,_23,_24,_25,_1f,_1f ;20-27 +dd _1f,_1f,_1f,_1f,_1f,_1f,_1f,_1f ;28-2f +dd _1f,_31,_32,_1f,_34,_35,_36,_1f ;30-37 +dd _1f,_1f,_1f,_3B,_1f,_1f,_1f,_1f ;38-3f +times 16 dd _40 ;40-4f +dd _50,_51,_52,_53,_54,_1f,_1f,_57 ;50-57 +dd _58,_59,_5A,_5B,_5C,_5D,_5E,_1f ;58-5f +times 16 dd _60 ;60-6f +times 16 dd _70 ;70-7f +times 16 dd _80 ;80-8f +times 16 dd _90 ;90-9f +times 16 dd _A0 ;a0-af +times 16 dd _B0 ;b0-bf +times 16 dd _C0 ;c0-cf +times 16 dd _D0 ;d0-df +times 16 dd _E0 ;e0-ef +times 16 dd _1f ;f0-ff + + +move1 db 0 +move2 db 0 +move1dot db 0 + +_1f: ret + +;************************************* + +_3B: + mcall 3 + shl eax,16 + shr eax,16 + mov [perem],eax + fild [perem] + mcall 26,9 + shl eax,16 + shr eax,18 + mov [perem],eax + fild [perem] + fcom st1 + jnc @f + fdivrp + mov [perem],10 + fild [perem] + fdivp + jmp .1 + @@: fdivp + .1: fld qword [S.Z] + fstp qword [S.T] + fld qword [S.Y] + fstp qword [S.Z] + fld qword [S.X] + fst qword [S.Y] + fstp qword [S.X1] + fstp qword [S.X] + call draw_stack + fld qword [S.X] + call ftos + call draw_string + bts [flags],10 + btr [flags],6 + btr [flags],4 + ret + +_36: + bt [flags],0 + jnc @f + inc [schk] + @@: fld qword [S.Y] + fld qword [S.X] + fst qword [S.X1] + + fcom st1 + fstsw ax + sahf + jc @f + fstp qword [S.X] + fstp st0 + jmp .1 + @@: fstp st0 + fstp qword [S.X] + .1: + fld qword [S.Z] + fstp qword [S.Y] + fld qword [S.T] + fstp qword [S.Z] +; fldz +; fstp qword [S.T] + call draw_stack + fld qword [S.X] + call ftos + call draw_string + bts [flags],10 + btr [flags],6 + ret + +_35: + bt [flags],0 + jnc @f + inc [schk] + @@: fld qword [S.X] + fst qword [S.X1] + fldz + fcomp st1 + fstsw ax + sahf + jz @f + jc @f + frndint + fcom qword [S.X] + fstsw ax + sahf + jnc .0 + fld1 + faddp + jmp .0 + @@: frndint + fcom qword [S.X] + fstsw ax + sahf + jc .0 + jz .0 + fld1 + fsubp + .0: fld qword [S.X] + fsubrp + fst qword [S.X] + call ftos + call draw_string + call draw_stack + bts [flags],10 + btr [flags],6 + ret + + +_34: + bt [flags],0 + jnc @f + inc [schk] + @@: fld qword [S.X] + fst qword [S.X1] + fldz + fcomp st1 + fstsw ax + sahf + jz @f + jc @f + frndint + fcom qword [S.X] + fstsw ax + sahf + jnc .0 + fld1 + faddp + jmp .0 + @@: frndint + fcom qword [S.X] + fstsw ax + sahf + jc .0 + jz .0 + fld1 + fsubp + .0: fst qword [S.X] + call ftos + call draw_string + call draw_stack + bts [flags],10 + btr [flags],6 + ret + +_32: + bt [flags],0 + jnc @f + inc [schk] + @@: fld qword [S.X] + fstp qword [S.X1] + fldz + fcomp qword [S.X] + fstsw ax + sahf + fld1 + jz @f + jc @f + fchs + @@: fst qword [S.X] + call ftos + call draw_string + call draw_stack + bts [flags],10 + btr [flags],6 + ret + +_31: + bt [flags],0 + jnc @f + inc [schk] + @@: fld qword [S.X] + fst qword [S.X1] + fabs + fst qword [S.X] + call ftos + call draw_string + call draw_stack + bts [flags],10 + btr [flags],6 + ret + +;************************************ +_E0: + ;x=0 ;0!=x + inc [schk] + @@: fldz + fcomp qword [S.X] + fstsw ax + sahf + jnz @f + ret + @@: sub eax,OPCODEtable + shr eax,2 + sub eax,0xE0;90 + shl eax,3 + add eax,R.0 + fld qword [eax] + cmp ebx,6 + jge @f + fld1 + cmp ebx,4 + jge .2 + fsubrp + jmp @f + .2: faddp + @@: fst qword [eax] + fabs + fistp [perem] + mov eax,[perem] + mov [schk],al + ret + +_D0: + inc [schk] + + sub eax,OPCODEtable + shr eax,2 + sub eax,0xD0 + mov ebx,eax + shl eax,3 + add eax,R.0 + fld qword [eax] + cmp ebx,6 + ja @f + fld1 + cmp ebx,4 + jge .2 + fsubrp + jmp @f + .2: faddp + @@: frndint + fst qword [eax] + fabs + fistp [perem] + mov eax,[perem] + shl eax,31-4 + shr eax,31-4 + shl eax,3 + add eax,R.0 + + fld qword [eax] + + fld qword [S.Z] + fstp qword [S.T] + fld qword [S.Y] + fstp qword [S.Z] + fld qword [S.X] + fst qword [S.Y] + fstp qword [S.X1] + + fstp qword [S.X] + + call draw_registers + call draw_stack + bts [flags],10 + btr [flags],6 + ret + +_C0: + ;x<0 ;0=0 ;0>x + inc [schk] + @@: fldz + fcomp qword [S.X] + fstsw ax + sahf + jp @f + jz @f + jc @f + jmp .1 + @@: ret + .1: sub eax,OPCODEtable + shr eax,2 + sub eax,0x90 + shl eax,3 + add eax,R.0 + fld qword [eax] + cmp ebx,6 + jge @f + fld1 + cmp ebx,4 + jge .2 + fsubrp + jmp @f + .2: faddp + @@: fst qword [eax] + fabs + fistp [perem] + mov eax,[perem] + mov [schk],al + ret + +_80: + inc [schk] + sub eax,OPCODEtable + shr eax,2 + sub eax,0x80 + shl eax,3 + add eax,R.0 + fld qword [eax] + cmp ebx,6 + jge @f + fld1 + cmp ebx,4 + jge .2 + fsubrp + jmp @f + .2: faddp + @@: fst qword [eax] + fabs + fistp [perem] + mov eax,[perem] + mov [schk],al + ret + +_70: ;x!=0 ;x=0 + inc [schk] + @@: fldz + fcomp qword [S.X] + fstsw ax + sahf + jz @f + ret + @@: sub eax,OPCODEtable + shr eax,2 + sub eax,0x70 + mov ebx,eax + shl eax,3 + add eax,R.0 + fld qword [eax] + cmp ebx,6 + jge @f + fld1 + cmp ebx,4 + jge .2 + fsubrp + jmp @f + .2: faddp + @@: fst qword [eax] + fabs + fistp [perem] + mov eax,[perem] + mov [schk],al + ret + +_5D: + inc [schk] + fld qword [R.0] + fld1 + fsubp + fst qword [R.0] + fabs + fistp [perem] + mov eax,[perem] + test eax,eax + jz @f + movzx eax,[schk] + add eax,PMEM + mov al,[eax] + mov [schk],al + jmp .1 + @@: inc [schk] + .1: call draw_registers + bts [flags],10 + btr [flags],6 + ret + +_5B: + inc [schk] + fld qword [R.1] + fld1 + fsubp + fst qword [R.1] + fabs + fistp [perem] + mov eax,[perem] + test eax,eax + jz @f + movzx eax,[schk] + add eax,PMEM + mov al,[eax] + mov [schk],al + jmp .1 + @@: inc [schk] + .1: call draw_registers + bts [flags],10 + btr [flags],6 + ret + + +_5A: + inc [schk] + fld qword [R.3] + fld1 + fsubp + fst qword [R.3] + fabs + fistp [perem] + mov eax,[perem] + test eax,eax + jz @f + movzx eax,[schk] + add eax,PMEM + mov al,[eax] + mov [schk],al + jmp .1 + @@: inc [schk] + .1: call draw_registers + bts [flags],10 + btr [flags],6 + ret + + +_58: ;F,L2 + inc [schk] + fld qword [R.2] + fld1 + fsubp + fst qword [R.2] + fabs + fistp [perem] + mov eax,[perem] + test eax,eax + jz @f + movzx eax,[schk] + add eax,PMEM + mov al,[eax] + mov [schk],al + jmp .1 + @@: inc [schk] + .1: call draw_registers + bts [flags],10 + btr [flags],6 + ret + + + +_5E: ;x=0 +; bt [flags],0 +; jnc @f + inc [schk] + @@: fldz + fcomp qword [S.X] + fstsw ax + sahf + jnz @f + inc [schk] + ret + @@: movzx eax, byte [schk] + add eax,PMEM + mov al,[eax] + mov [schk],al + ret + +_5C: ;x<0 +; bt [flags],0 +; jnc @f + inc [schk] + @@: fldz + fcomp qword [S.X] + fstsw ax + sahf + jc @f + jz @f + inc [schk] + ret + @@: movzx eax, byte [schk] + add eax,PMEM + mov al,[eax] + mov [schk],al + ret + +_59: ;x>=0 +; bt [flags],0 +; jnc @f + inc [schk] + @@: fldz + fcomp qword [S.X] + fstsw ax + sahf + jp @f + jz @f + jc @f + jmp .1 + @@: inc [schk] + ret + .1: movzx eax, byte [schk] + add eax,PMEM + mov al,[eax] + mov [schk],al + ret + +_57: ;x!=0 +; bt [flags],0 +; jnc @f + inc [schk] + @@: fldz + fcomp qword [S.X] + fstsw ax + sahf + jz @f + inc [schk] + ret + @@: movzx eax, byte [schk] + add eax,PMEM + mov al,[eax] + mov [schk],al + ret + +_54: + inc [schk] + ret + +_53: bt [flags],0 + jnc @f + inc [schk] + mov al,[RS+3] + mov [RS+4],al + mov al,[RS+2] + mov [RS+3],al + mov al,[RS+1] + mov [RS+2],al + mov al,[RS+0] + mov [RS+1],al + mov al,[schk] + inc al + mov [RS+0],al + movzx eax,[schk] + add eax,PMEM + mov al,[eax] + mov [schk],al + bts [flags],10 + btr [flags],6 + ret + @@: bts [flags],0 + movzx eax,[schk] + add eax,PMEM + movzx eax,byte [eax] + shl eax,2 + add eax,OPCODEtable + mov ebx,[eax] + call ebx + btr [flags],0 + call draw_schk + call draw_prog +ret + +_52: inc [schk] + bt [flags],0 + jnc @f + mov al,[RS+0] + mov [schk],al + mov al,[RS+1] + mov [RS+0],al + mov al,[RS+2] + mov [RS+1],al + mov al,[RS+3] + mov [RS+2],al + mov al,[RS+4] + mov [RS+3],al + mov byte [RS+4],0 + ret + @@: mov [schk],0 + call draw_prog + call draw_schk +ret + + +_51: +; bt [flags],0 +; jnc @f + inc [schk] + @@: movzx eax, byte [schk] + add eax,PMEM + mov al,[eax] + mov [schk],al + ret + + +_50: + btc [flags],0 + jc @f + ret + @@: inc [schk] + fld qword [S.X] + call ftos + call draw_string + call draw_registers + bts [flags],10 + btr [flags],6 + ret + +_60: + bt [flags],0 + jnc @f + inc [schk] + @@: sub eax,OPCODEtable + shr eax,2 + sub eax,0x60 + shl eax,3 + add eax,R.0 + fld qword [eax] + fld qword [S.Z] + fstp qword [S.T] + fld qword [S.Y] + fstp qword [S.Z] + fld qword [S.X] + fstp qword [S.Y] + fstp qword [S.X] + call draw_stack + fld qword [S.X] + call ftos + call draw_string + call draw_registers + bts [flags],10 + btr [flags],6 + btr [flags],12 + btr [flags],3 + ret + +_40: + bt [flags],0 + jnc @f + inc [schk] + @@: sub eax,OPCODEtable + shr eax,2 + sub eax,0x40 + shl eax,3 + add eax,R.0 + fld qword [S.X] + fstp qword [eax] + call draw_stack + fld qword [S.X] + call ftos + call draw_string + call draw_registers + bts [flags],10 + btr [flags],6 + btr [flags],11 + btr [flags],3 + ret + +_25: + bt [flags],0 + jnc @f + inc [schk] + @@: fld qword [S.X1] + fld qword [S.X] + fstp qword [S.X1] + fld qword [S.Y] + fstp qword [S.X] + fld qword [S.Z] + fstp qword [S.Y] + fld qword [S.T] + fstp qword [S.Z] + fstp qword [S.T] + call draw_stack + fld qword [S.X] + call ftos + call draw_string + bts [flags],10 + btr [flags],6 + btr [flags],3 + ret + +_24: + bt [flags],0 + jnc @f + inc [schk] + @@: fld qword [S.X] + fst qword [S.X1] + fld qword [S.Y] + call FpuXexpY + fstp qword [S.X] + call draw_stack + fld qword [S.X] + call ftos + call draw_string + bts [flags],10 + btr [flags],6 + btr [flags],3 + ret + +_23: + bt [flags],0 + jnc @f + inc [schk] + @@: fld qword [S.X] + fst qword [S.X1] + fld1 + fdivrp + fstp qword [S.X] + call draw_stack + fld qword [S.X] + call ftos + call draw_string + bts [flags],10 + btr [flags],6 + btr [flags],3 + ret + +_22: + bt [flags],0 + jnc @f + inc [schk] + @@: fld qword [S.X] + fst qword [S.X1] + fmul st,st + fstp qword [S.X] + call draw_stack + fld qword [S.X] + call ftos + call draw_string + bts [flags],10 + btr [flags],6 + btr [flags],3 + ret + +_21: + bt [flags],0 + jnc @f + inc [schk] + @@: fld qword [S.X] + fst qword [S.X1] + fsqrt + fstp qword [S.X] + call draw_stack + fld qword [S.X] + call ftos + call draw_string + bts [flags],10 + btr [flags],6 + btr [flags],3 + ret + + +_20: + bt [flags],0 + jnc @f + inc [schk] + @@: fld qword [S.X] + fstp qword [S.X1] + fld qword [S.Z] + fstp qword [S.T] + fld qword [S.Y] + fstp qword [S.Z] + fld qword [S.X] + fstp qword [S.Y] + fldpi + fstp qword [S.X] + call draw_stack + fld qword [S.X] + call ftos + call draw_string + bts [flags],10 + btr [flags],6 + btr [flags],3 + ret + +_1E: + bt [flags],0 + jnc @f + inc [schk] + @@: fld qword [S.X] + fst qword [S.X1] + call FpuTan + fstp qword [S.X] + call draw_stack + fld qword [S.X] + call ftos + call draw_string + bts [flags],10 + btr [flags],6 + btr [flags],3 + ret + + +_1D: + bt [flags],0 + jnc @f + inc [schk] + @@: fld qword [S.X] + fst qword [S.X1] + call FpuCos + fstp qword [S.X] + call draw_stack + fld qword [S.X] + call ftos + call draw_string + bts [flags],10 + btr [flags],6 + btr [flags],3 + ret + +_1C: + bt [flags],0 + jnc @f + inc [schk] + @@: fld qword [S.X] + fst qword [S.X1] + call FpuSin + fstp qword [S.X] + call draw_stack + fld qword [S.X] + call ftos + call draw_string + bts [flags],10 + btr [flags],6 + btr [flags],3 + ret + +_1B: + bt [flags],0 + jnc @f + inc [schk] + @@: fld qword [S.X] + fst qword [S.X1] + call FpuArctan + fstp qword [S.X] + call draw_stack + fld qword [S.X] + call ftos + call draw_string + bts [flags],10 + btr [flags],6 + btr [flags],3 + ret + +_1A: + bt [flags],0 + jnc @f + inc [schk] + @@: fld qword [S.X] + fst qword [S.X1] + call FpuArccos + fstp qword [S.X] + call draw_stack + fld qword [S.X] + call ftos + call draw_string + bts [flags],10 + btr [flags],6 + btr [flags],3 + ret +_19: + bt [flags],0 + jnc @f + inc [schk] + @@: fld qword [S.X] + fst qword [S.X1] + call FpuArcsin + fstp qword [S.X] + call draw_stack + fld qword [S.X] + call ftos + call draw_string + bts [flags],10 + btr [flags],6 + btr [flags],3 + ret + + +_18: + bt [flags],0 + jnc @f + inc [schk] + @@: fld qword [S.X] + fst qword [S.X1] + fldln2 + fxch + fyl2x + fstp qword [S.X] + call draw_stack + fld qword [S.X] + call ftos + call draw_string + bts [flags],10 + btr [flags],6 + btr [flags],3 + ret + +_17: + bt [flags],0 + jnc @f + inc [schk] + @@: fld qword [S.X] + fst qword [S.X1] + fldlg2 + fxch + fyl2x + fstp qword [S.X] + call draw_stack + fld qword [S.X] + call ftos + call draw_string + bts [flags],10 + btr [flags],6 + btr [flags],3 + ret + + +_16: + bt [flags],0 + jnc @f + inc [schk] + @@: fld qword [S.X] + fst qword [S.X1] + call FpuEexpX + fstp qword [S.X] + call draw_stack + fld qword [S.X] + call ftos + call draw_string + bts [flags],10 + btr [flags],6 + btr [flags],3 + ret + +_15: + bt [flags],0 + jnc @f + inc [schk] + @@: mov [perem],10 + fild [perem] + fld qword [S.X] + fst qword [S.X1] + call FpuXexpY + fstp qword [S.X] + call draw_stack + fld qword [S.X] + call ftos + call draw_string + bts [flags],10 + btr [flags],6 + btr [flags],3 + ret + +_14: + bt [flags],0 + jnc @f + inc [schk] + @@: fld qword [S.Y] + fld qword [S.X] + fst qword [S.Y] + fstp qword [S.X1] + fstp qword [S.X] + call draw_stack + fld qword [S.X] + call ftos + call draw_string + bts [flags],10 + btr [flags],6 + ret +_13: + bt [flags],0 + jnc @f + inc [schk] + @@: fld qword [S.Y] + fld qword [S.X] + fdivp + fld qword [S.X] + fstp qword [S.X1] + fstp qword [S.X] + fld qword [S.Z] + fstp qword [S.Y] + fld qword [S.T] + fstp qword [S.Z] +; fldz +; fstp qword [S.T] + call draw_stack + fld qword [S.X] + call ftos + call draw_string + bts [flags],10 + btr [flags],6 + ret +_12: + bt [flags],0 + jnc @f + inc [schk] + @@: fld qword [S.Y] + fld qword [S.X] + fmulp + fld qword [S.X] + fstp qword [S.X1] + fstp qword [S.X] + fld qword [S.Z] + fstp qword [S.Y] + fld qword [S.T] + fstp qword [S.Z] +; fldz +; fstp qword [S.T] + call draw_stack + fld qword [S.X] + call ftos + call draw_string + bts [flags],10 + btr [flags],6 + ret +_11: + bt [flags],0 + jnc @f + inc [schk] + @@: fld qword [S.Y] + fld qword [S.X] + fsubp + fld qword [S.X] + fstp qword [S.X1] + fstp qword [S.X] + fld qword [S.Z] + fstp qword [S.Y] + fld qword [S.T] + fstp qword [S.Z] +; fldz +; fstp qword [S.T] + call draw_stack + fld qword [S.X] + call ftos + call draw_string + bts [flags],10 + btr [flags],6 + ret + +_10: + bt [flags],0 + jnc @f + inc [schk] + @@: fld qword [S.X] + fld qword [S.Y] + faddp + fld qword [S.X] + fstp qword [S.X1] + fstp qword [S.X] + fld qword [S.Z] + fstp qword [S.Y] + fld qword [S.T] + fst qword [S.Z] +; fldz +; fstp qword [S.T] + call draw_stack + fld qword [S.X] + call ftos + call draw_string + bts [flags],10 + btr [flags],6 + ret + +_0F: + bt [flags],0 + jnc @f + inc [schk] + @@: fld qword [S.Z] + fstp qword [S.T] + fld qword [S.Y] + fstp qword [S.Z] + fld qword [S.X] + fstp qword [S.Y] + fld qword [S.X1] + fstp qword [S.X] + call draw_stack + fld qword [S.X] + call ftos + call draw_string + bts [flags],10 + btr [flags],6 + btr [flags],3 + ret + +_0E: + bt [flags],0 + jnc @f + inc [schk] + @@: +; call stof +; fstp qword [S.X] + fld qword [S.Z] + fstp qword [S.T] + fld qword [S.Y] + fstp qword [S.Z] + fld qword [S.X] + fstp qword [S.Y] + call draw_string +; call stof +; fstp qword [S.X] + call draw_stack + bts [flags],10 + bts [flags],7 + btr [flags],6 + ret +_0D: + bt [flags],0 + jnc @f + inc [schk] + @@: bt [flags],3 + jc .F + fldz + fstp qword [S.X] + mov esi,string_zero + mov edi,string + mov ecx,13 + cld + @@: movsb + loop @b + mov [move1],0 + mov [move2],0 + mov [move1dot],0 + call draw_string + call stof + fstp qword [S.X] + call draw_stack + btr [flags],6 + btr [flags],10 + btr [flags],11 + btr [flags],4 + btr [flags],8 + btr [flags],9 + ret + .F: + btr [flags],3 + ret +_0C: + bt [flags],0 + jnc @f + inc [schk] + @@: btc [flags],6 + btr [flags],10 + call draw_string + call stof + fstp qword [S.X] + call draw_stack + cmp byte [string+12],0x20 + jne @f + mov word [string+11],0x3030 + @@: + cmp byte [string+1],"0" + je @f + ret + @@: cmp word [string+2]," " + je @f + cmp word [string+2],". " + je @f + ret + @@: mov dword [string]," 1 " + call draw_string + call stof + fstp qword [S.X] + call draw_stack + ret +_0B: + bt [flags],0 + jnc @f + inc [schk] + @@: jmp .0 + ; test [flags],(1 shl 7) + jz @f + call null.null + jmp .0 + @@: test [flags],(1 shl 10) + jz .0 + call null + .0:; fld qword [S.X] +; call ftos + bt [flags],6 + jc @f + cmp byte [string],'-' + jne .sign_1 + mov byte [string],' ' + call draw_string + call stof + fstp qword [S.X] + call draw_stack + ret + .sign_1: + mov byte [string],'-' + call draw_string + call stof + fstp qword [S.X] + call draw_stack + ret + @@: + cmp byte [string+10],'-' + jne .sign_2 + mov byte [string+10],' ' + call draw_string + call stof + fstp qword [S.X] + call draw_stack + ret + .sign_2: + mov byte [string+10],'-' + call draw_string + call stof + fstp qword [S.X] + call draw_stack + ret + +_0A: + bt [flags],0 + jnc @f + inc [schk] + @@: test [flags],(1 shl 7) + jz @f + call null.null + jmp .0 + @@: test [flags],(1 shl 10) + jz .0 + call null + .0: cmp [move1],8 + jge .nop + cmp [move1],0 + jne @f + mov [move1],1 + mov [move1dot],1 + mov word [string+1],'0.' + call draw_string + call stof + fstp qword [S.X] + call draw_stack + .nop: ret + @@: + cmp [move1dot],1 + je .nop + movzx esi,[move1] + mov byte [esi+string+1],'.' + mov [move1dot],1 + call draw_string + call stof + fstp qword [S.X] + call draw_stack + ret + +_00: + sub eax,OPCODEtable + shr eax,2 + add eax,0x30 + push eax + bt [flags],0 + jnc @f + inc [schk] + @@: test [flags],(1 shl 7) + jz @f + call null.null + jmp .0 + @@: test [flags],(1 shl 10) + jz .0 + call null + .0: pop ebx + test [flags],(1 shl 6) + jnz @f + cmp [move1],8 + jge .nop + movzx esi,[move1] + movzx edi,[move1dot] + add esi,edi + mov byte [esi+string+1],bl + inc [move1] + call draw_string + call stof + fstp qword [S.X] + call draw_stack + ret + @@: + cmp [move2],0 + jne @f + mov byte [string+12],bl + inc [move2] + call draw_string + call stof + fstp qword [S.X] + call draw_stack + ret + @@: + mov al, [string+12] + mov [string+11],al + mov byte [string+12],bl + call draw_string + call stof + fstp qword [S.X] + call draw_stack + .nop: ret + +null: fld qword [S.Z] + fstp qword [S.T] + fld qword [S.Y] + fstp qword [S.Z] + fld qword [S.X] + fstp qword [S.Y] +.null: call null_string + btr [flags],10 + btr [flags],7 +ret + + + + + +null_string: + mov esi,string_zero + mov edi,string + mov ecx,13 + cld + @@: movsb + loop @b + mov [move1],0 + mov [move2],0 + mov [move1dot],0 +ret + diff --git a/programs/emulator/PrMK/trunk/proc32.inc b/programs/emulator/PrMK/trunk/proc32.inc new file mode 100644 index 0000000000..23c56b03c1 --- /dev/null +++ b/programs/emulator/PrMK/trunk/proc32.inc @@ -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, \{ 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: + \\\{ 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 } diff --git a/programs/emulator/PrMK/trunk/readme.txt b/programs/emulator/PrMK/trunk/readme.txt new file mode 100644 index 0000000000..b29ab479fa --- /dev/null +++ b/programs/emulator/PrMK/trunk/readme.txt @@ -0,0 +1,20 @@ +PrMK (ணࠬ㥬 ப) - -34. Copyright . + + ন ᭮ , ० ணࠬ஢, ⮬ ᫥ : + - ࠥ "0..f 0..F", ⥪饥 ᬥ饭 ਬ, ; + - ࠥ "sk", "0..f 0..F" - 室 ࠭ ᬥ饭 ணࠬ, 塞 祭 稪 . + ᬥ饭 ⭠筮 . + + Ctrl+S ஥ ᯮ ணࠬ, Ctrl+L - . + + ४⥫ -- ।⠢ ᥡ ; - ࠤ (360 ࠤᮢ=2pi ࠤ), - ࠤ (360 ࠤᮢ=400 ࠤ), - ࠤ (1 = 0,9 = pi/200 ). ਣ᪨ 㭪樨 뢠 祭 ⨬ ࠬࠬ (ࠢ, cos 90 = 6,123^-17, ਬ୮ = 0). + + PrMK ⫠ ᮤন ப, ⮬᪨ 㦠 ணࠬ । , .. ஠樨஢ 䠩 *.mkp PrMK. ਬ ⠪ 䠩 室 娢. + + ᫥ 樨 ⠭ (50h) PC-Speaker'e ࠧ , ⢥ 񭭮 . + + ࠢ ணࠬ " 3-34" www.ua1zcl.fromru.com, ⠪ mk.semico.ru xakep.ru + + ணࠬ 室 ⪮ ஢, ⮬ ᥢ . + + 㢠, staper@inbox.ru \ No newline at end of file diff --git a/programs/emulator/PrMK/trunk/smpl/1.MKP b/programs/emulator/PrMK/trunk/smpl/1.MKP new file mode 100644 index 0000000000000000000000000000000000000000..3f13ca44ff2fc51e7f25d91ae6ca79150797fa32 GIT binary patch literal 184 scmcDSIH|SEjsX=opmGsBn+eSmC!woGNYj{Q(?6lP$4*H>C?Jpl0GC7wIsgCw literal 0 HcmV?d00001 diff --git a/programs/emulator/PrMK/trunk/smpl/1.mkp.asm b/programs/emulator/PrMK/trunk/smpl/1.mkp.asm new file mode 100644 index 0000000000..305fd8c6ad --- /dev/null +++ b/programs/emulator/PrMK/trunk/smpl/1.mkp.asm @@ -0,0 +1,34 @@ +; ணࠬ PrMK. ஢ FASM. + +; 塞 頤 㣠 +; : +;1. ࠤ 㣠; +;2. [/] [/]; +;3. - 頤 㣠. + + +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 "<>" + + ;: ( R.0 R.E) + + times 15 dq 0.0 + +db "<>" + ;ணࠬ + +db 0x22,0x20,0x12,0x50,0x51,0x00 \ No newline at end of file diff --git a/programs/emulator/PrMK/trunk/smpl/2.MKP b/programs/emulator/PrMK/trunk/smpl/2.MKP new file mode 100644 index 0000000000000000000000000000000000000000..53886b97a5d193b896b11562bcdc95d34efdf728 GIT binary patch literal 231 zcmcDSIH|SEj)6#EGog9nB%)OlX(-XkZ2BiO_t^1q1_Vng2+76>W(G?#3I-aa2TKAG iLja>-oE(Q|fO{s3V7Nw%7KeaGx?s3*20ME|W)J}PGZM}K literal 0 HcmV?d00001 diff --git a/programs/emulator/PrMK/trunk/smpl/2.mkp.asm b/programs/emulator/PrMK/trunk/smpl/2.mkp.asm new file mode 100644 index 0000000000..598d9259b5 --- /dev/null +++ b/programs/emulator/PrMK/trunk/smpl/2.mkp.asm @@ -0,0 +1,46 @@ +; ணࠬ PrMK. ஢ FASM. + +; "⨪-" +;९⠭ " " ..娬. . "i", 1986 + +;⠭ ४⥫ - , / / ᢥ稢 X=9 業ࠫ쭮 ⪨, "" ப஬; ᫥ ᢥ稢 ⪨, "" ப஬, ॣ X ⪨, "" ⨢, ⮫쪮 /; 먣 ப ᢥ稢 77 ( ⪨, "" ᫥ 室 ப, ࠭ ॣ Y); 祩 १ ᢥ稢 . + +; ⮪ : + +; 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 "<>" + + ;: ( R.0 R.E) + + times 15 dq 0.0 + +db "<>" + ;ணࠬ + +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 \ No newline at end of file diff --git a/programs/emulator/PrMK/trunk/smpl/3.MKP b/programs/emulator/PrMK/trunk/smpl/3.MKP new file mode 100644 index 0000000000000000000000000000000000000000..2e8d6a979184a8ea4f8b1f15bb79dded655dd2f2 GIT binary patch literal 248 zcmcDSIH|SEj)6#EGog9nB%)OlX(-XkZ2BiO_t^2e@GyIMFbVrGvNCuxavS2~_pT5M~lc5E0H45zH3w&Jq#yiV@+?R#FsT6!5*9%c(37001|( B73lx~ literal 0 HcmV?d00001 diff --git a/programs/emulator/PrMK/trunk/smpl/3.mkp.asm b/programs/emulator/PrMK/trunk/smpl/3.mkp.asm new file mode 100644 index 0000000000..e0f1df6c3e --- /dev/null +++ b/programs/emulator/PrMK/trunk/smpl/3.mkp.asm @@ -0,0 +1,97 @@ +; ணࠬ PrMK. ஢ FASM. + +; "ᠤ " +;९⠭ "5 ஢ ப஬" .., ... ᪢. " ⨪", 1988 +;Andriy Slezenko, student@uninet.kiev.ua + +;1. ணࠬ. +;2. ३ ० ᫥. +;3. / / "0". +;4. h0 (砫쭠 ࠡ) v0 (砫쭠 ᪮) . +; m0 (室 ⮯) g (᪮७ ᢮ ) 9. +;5. / "h" XY "v" "m" 4 "t" (⥪騥 祭). +;6. S (室 ⮯ ᫥ ᥪ㭤). +;7. ३ .5 த ᠤ ࠡ. + +; - ᠤ ࠡ . +; ⠪ ⠪. 室 ﭨ N ஢ , ᪮ V ஢ ᥪ㭤, ⮯ - S ⮭. 稭 , 筮, . ࠪ 㭥 , ⮯ ⥫, 稭 ମ. ᥪ㭤 ᢥ⮢ ⠡ ᪮ 㡪  ଠ ࠡ 孮 , ᪮ ⮯. ஬ ࠡ 㤥 , , । ⥬, ᬮ ⠡, 㦭 ⠪ : XY 뢠 ᪮, ⮪ ⮯ , 4 - ६ 砫 ମ. ᠥ ࠪ ⮩, 㤥 襬 ⠡ ࠧ ⠭ ᫥ ஢ । . +; ⭠ - ᠤ ࠡ ⠪, ⮡ ᠤ ᪮ 뫠 , ⮯ ⮬ ⥫쭮 室 , ஢ ᠤ ॥ - 祬 童 , ॣ㧪 ᠤ 쪨. , ᠥ ⮯, ⥫쭮 ᫮ - ᫨ ⠭ 95 ⮭, ⠭ . + +;஫ ਬ: +; 㤥 1000 ஢, ᪮ - 150 /, ⮯ - 500 ⮭. , 㦭 ⮢ ᪮७ ᢮ 㭥 - 1,62 /^2. ᫠ ᮮ⢥⢥ ॣ , , 9. +; / /  砫쭠 . ⥫ ⮯ - 20 /. १ 10 ᥪ㭤  , ன ⥯ 室 ࠡ, 856.4. ⮫쪮 ⮯ - 20 / ⠫ 719.4. - 25 /. 591 . +;஢ਬ ⠫ ࠬ: ᪮ ( XY) - 128,4 /, ⮯ () - 435 ⮭, ६ (4) - 3 . +;᫥ ࠧ 30 ⮭ 祣, ࠡ ᭨ 366,9 . +;᫥ 쭥襣 ࠧ 35 ⮭ 祣, ⠡ - 194,1 , ᪮ - 76,6, ⮯ - 305, ६ - 7. +; ⥪ ⠪: + +; 室 ⮯ +; 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 +;㫨 孮 . ᫥ ᠤ ᭨ (), ⮯ ⠫ 82 ⮭, ६, 祭 (4), 21 ᥪ㭤. +; ⮣ , ᥫ 殮, ࠡ 楫, 浪. ⮫쪮 ⮯ 室, 墠. ਤ 㭥 ࠡ-ᯠ⥫ , ⠭ ࠢ ᠤ . +; 砩. ࢮ ࠧ ਫ筮. + +;ਬ砭: +;1. ᫠ 窠 - ᫠, ᢥ稢 ࠭. +;2. 믮 .4 易⥫쭮. 㬮砭 ।: 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 "<>" + + ;: ( R.0 R.E) + + times 15 dq 0.0 + +db "<>" + ;ணࠬ + +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 \ No newline at end of file diff --git a/programs/emulator/PrMK/trunk/struct.inc b/programs/emulator/PrMK/trunk/struct.inc new file mode 100644 index 0000000000..947a84e89a --- /dev/null +++ b/programs/emulator/PrMK/trunk/struct.inc @@ -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, \} + struc dw [val] \{ \common fields@struct equ fields@struct,.,dw, \} + struc du [val] \{ \common fields@struct equ fields@struct,.,du, \} + struc dd [val] \{ \common fields@struct equ fields@struct,.,dd, \} + struc dp [val] \{ \common fields@struct equ fields@struct,.,dp, \} + struc dq [val] \{ \common fields@struct equ fields@struct,.,dq, \} + struc dt [val] \{ \common fields@struct equ fields@struct,.,dt, \} + 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, \} + macro dw [val] \{ \common \local anonymous + fields@struct equ fields@struct,anonymous,dw, \} + macro du [val] \{ \common \local anonymous + fields@struct equ fields@struct,anonymous,du, \} + macro dd [val] \{ \common \local anonymous + fields@struct equ fields@struct,anonymous,dd, \} + macro dp [val] \{ \common \local anonymous + fields@struct equ fields@struct,anonymous,dp, \} + macro dq [val] \{ \common \local anonymous + fields@struct equ fields@struct,anonymous,dq, \} + macro dt [val] \{ \common \local anonymous + fields@struct equ fields@struct,anonymous,dt, \} + 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, \} + 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 + common + sizeof.#name = $ + restruc name + match values, list \{ + struc name value \\{ + match any, fields@struct \\\{ fields@struct equ fields@struct,.,name, \\\} + 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, \\} + \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 \} } diff --git a/programs/games/klavisha/trunk/courses/BASEKURS.ASM b/programs/games/klavisha/trunk/courses/BASEKURS.ASM new file mode 100644 index 0000000000..a16d9b5cb0 --- /dev/null +++ b/programs/games/klavisha/trunk/courses/BASEKURS.ASM @@ -0,0 +1,566 @@ +; 䠩 ﬨ ୮ +; ७ KJ|ABuIIIA + +; +; - 38 ! +; ( ࠧ 㬮砭) + +; ⥫쭮 ப +; 38 ᨬ. + +; ப ⤥ 㣮 ⮬ 0x00 + +; ப ⤥ 㣮 ⮬ 0xFE, +; ⠢ 0x00 ᫥ +; ப ப + +; ᫥ ⮬ 䠩 0xFF, +; ⠢ ᫥ 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 \ No newline at end of file diff --git a/programs/games/klavisha/trunk/courses/BASEKURS.KLA b/programs/games/klavisha/trunk/courses/BASEKURS.KLA new file mode 100644 index 0000000000000000000000000000000000000000..f497a98231a89673aa01ae17d83f5c819261a9e9 GIT binary patch literal 15594 zcmd^_jdJ2R49E2-dUTT}5c1)?k{u{?n+B#Yz};U?>GgJFW#$Y^cW#87pr0(+&bO02 z?{%RC&ik8q47?z;zUEW>_sq zrJ?R`cIl=D&o8F7%(IVrH*zuAu;f22~>U3M5* z6;dgW59b)H7EMDs}z)&8Y26J+-@YVci(R<2YVh{cSm#8}@vR_&TpG|MZ`J`v1SWz)%C>TEt8JY(nRkvO+gV?LLL^YBAM_w;GKdfkkgPWJe(C60m4U|>+v zSNpX7{posS+%rc?ir6RrKa%2NydUJ!J6BS~KKVb2Ue2rtDU8pFbdSstMdSz(`@`sw z6(NQ3F_8|)98pA$5V1dudRBxK#y*i|$Q)5bju5dwj5e$YDU6#$YLGdih#VnePot(m zh)6*(5NagRk`*C^ahXUvWR55zM~K*yXk)sPV+F-PsF6g^*u0r(*h7&;ZtM71VkWiB z4E=W~&tV;(kG?6xo#J)9Z2a*|-;!Q>R)iGBeIj+p98pA$5V1duzOf>tFn&v<7MUZ8 z$Pps;htU-)LJH$mBCU}*qKF(JVt*Jtu_B}}J|)r|nInqG5hC`7(fX9LqNFgXm(0hy zXGKY2Qg4yVEQ374OFvep{_RVV+n(-;FO50&c;Sc~rsgrv3?@IC5@+0#dut4?xOc>7 zUJW&Rjw|y=1LP{|yVCV|oVq>hap}k9-g1WC^5?H}Cd&=ok77{E9ycG3(L2*vSv!`# zXM?F*x*rX5#4X132h#VnePo{myJX40qGxo_pi9WF+q%eL;q!yVYipUWn_GJ1NGS8GD@{E1*PogiZ z2q}zT5^0Uh5k=$(5qmOSh0HT$h&*GT{FCSpR)iGBKN4w<%n?Q82oZZSJ%!9OWr#du zpZt^Ph7}=&@g|Y3kvXD>93f(V7=30%NMZbZSGqyFB8t2bBKAAdS5|}+#;A=^n2N*b7fOF#@u&SI6PXn zW`&RK`l9lNHmxZd%z^vf;ZwWfXnNDXv9ImAwbWW}cUa-x6>W*?VE#-c_x35w@7B9x z*~5~X%xrr+FQw>mUr%3<8@hMx_&^B z7kD{@DSERqGJ`+V26I+z`OMYM*(3HEcMin2g$FyA#|nD~Ho3!K*#c818(UkfQD%EY z@Rix%X}hv*almG-Fs#1by_lLC_~pgnQrWs(xe_k3ON!X9{&(jVJEl35wr$OsJ>H`f zc!6|nl=bvz9u8VGtu^`kTH09IrZZJ9t7zUMvGKlWRy9sKGix+s`^WE&v?(imZtd)$ z@E#{XInsUM@&k6_iXH-6D<=^&>B*U<891+HD~7{?T71CdO*>%w@_94hSo$0{BQTuQ zsj5v@nttcnVH-} zP{}654aPxo@$Xw(9d@ZeeqG+t7^%^IZCf(1QCY+sa(z5)_h-0N8*+_HE$D5x*Y^j* t(RkANm1wR-$~B5ivruv=DvuVq`fz=*dJX)ykCo&l42u$mSupkN;|YR3T#Wz# literal 0 HcmV?d00001 diff --git a/programs/games/klavisha/trunk/klavisha.asm b/programs/games/klavisha/trunk/klavisha.asm new file mode 100644 index 0000000000..f1015ba749 --- /dev/null +++ b/programs/games/klavisha/trunk/klavisha.asm @@ -0,0 +1,2812 @@ +; -------------------------------------------------------- +; KJ|ABuIIIA 0.9 +; -------------------------------------------------------- +; ७ 樮 ⥬ . +; +; ࠡ稪: +; - ३ 堩 (Dron2004) +; +; ᫥ 室 : 24.07.2010 21:15 GMT+6 + + + use32 + org 0x0 + + ; + db 'MENUET01' + dd 0x01 + dd START + dd I_END + dd 0x10000 + dd 0x10000 + dd params + dd 0x0 + +; ணࠬ +START: + + ; call get_screen_params + + mov eax, 0x0000001C + cmp eax, 0x0 + je start_with_internal_text ; ࠬ + + ; ࠬ ! ⠥ ⨬ ᯮ짮 + ; 室 । ࠧ 䠩... !!! + mov eax, 5 + mov [arg1], eax + xor eax, eax + mov [arg2], eax + mov [arg3], eax + mov [arg4], eax + mov eax, filedatastruct + mov [arg5], eax + mov eax, [0x0000001C] + mov [arg7], eax + + mov eax, 70; + mov ebx, filestruct + int 0x40 + + cmp eax, 0 + jne start_with_internal_text ;訡 + + mov eax, dword [size] + mov [filesize], eax ;⥯ ࠧ 䠩 filesize + + ;樠㥬 + + mov eax, 68 + mov ebx, 11 + int 0x40 + + cmp eax, 0x0 + je start_with_internal_text ;訡 + + ;뤥塞 䠩 + mov eax, 68 + mov ebx, 12 + mov ecx, [filesize] + inc ecx ;뤥 ⥫쭮 ⮣, ⮡ 0xFF + ; "" KLA-䠩 + int 0x40 + + mov [datastart], eax ; ६ ⠑ ⥯ 室 㪠⥫ + + add eax, [filesize] + mov bh, 0xFF + mov [eax], bh + + ;⢥, 뢠 䠩 + mov eax, 0x00 + mov [arg1], eax ; 㭪樨 + mov [arg2], eax ;饭 䠩 + mov [arg3], eax ;訩 dword ᬥ饭 + mov eax, [filesize] + mov [arg4], eax ; 䠩 + mov eax, [datastart] + mov [arg5], eax ;⥫ + mov eax, par + mov [arg7], eax ;⥫ ASCIIZ-ப + + mov eax, 70 + mov ebx, filestruct + int 0x40 + + cmp eax, 0x0 + jne start_with_internal_text ;訡 + + ;mov edx, [datastart] + jmp initialize_variables + +start_with_internal_text: + mov edx, string + mov [datastart], edx + ;mov edx, string ; ᯮ㥬 ஥ ⥪ + +initialize_variables: + + + + + mov edx, [datastart] + mov [currentsymb], edx ; 砫쭠 樠 ६ + mov [startline], edx + mov [lastsymb], edx + mov [lessonstart], edx + + mov eax, 0x00000001 + mov [currentline], eax + call count_lines + call draw_window + + +;᭮ 横 +event_wait: + mov eax, 10 + int 0x40 + + cmp eax, 1 ;ᮢ 㦭 + je redraw + cmp eax, 2 ; + je key + cmp eax, 3 ; 㫨 + je button + + jmp event_wait + +redraw: + call draw_window + jmp event_wait +key: + mov eax, 2 + int 0x40 ; ⮩ ah + + push eax + + ;᪠ 稪 ६ ᫥饣 + ; । ᪮ + + mov eax, [currentsymb] + cmp eax, [lessonstart] + jne not_first_symbol + cmp [mistakes], 0x00 + jne not_first_symbol + + mov eax, 26 + mov ebx, 9 + int 0x40 + + mov [typestarttime], eax + +not_first_symbol: + + pop eax + + ;஢塞, 稫 ⥪ + mov esi, [currentsymb] + mov al, byte [esi] + cmp al, 0xFF + je text_end + cmp al, 0xFE + je text_end + + push ebx + mov ebx, [currentsymb] + mov al, byte [ebx] + pop ebx + + cmp al,0x00 + jne not_new_line + cmp ah, 0x0D + je correct_key_nl + cmp ah, 0x20 + je correct_key_nl + jmp not_this_key + +not_new_line: + cmp ah, al + jne not_this_key + jmp correct_key + +correct_key_nl: + mov eax, [currentsymb] + inc eax + mov [startline], eax + + mov eax, [currentsymb] + inc eax + mov [currentsymb], eax + mov [lastsymb], eax + + mov eax, [currentline] + inc eax + mov [currentline], eax + + mov eax, [symbtyped] ;稬 ᫮ ᨬ 1 + inc eax + mov [symbtyped], eax + call count_speed + ;call draw_speed + + call draw_window + jmp event_wait + + +correct_key: + mov eax, [currentsymb] + inc eax + mov [currentsymb], eax + mov [lastsymb], eax + + mov eax, [symbtyped] ;稬 ᫮ ᨬ 1 + inc eax + mov [symbtyped], eax + call count_speed + ;call draw_speed + + call redraw_2_symbols + jmp event_wait + +not_this_key: + + mov esi, [mistakes] + inc esi + mov [mistakes], esi + call redraw_mistakes + jmp event_wait + +text_end: + + ; /// ९ 砭 ப + ; ⨨ + mov esi, [startline] + cmp esi, lessoncomplete + je text_end_already_shown + ; /////////////////////////// + + + call speed_to_string + + mov esi, lessoncomplete + mov [startline], esi + + mov esi, lessoncompleteend + dec esi + mov [currentsymb], esi + + call draw_window +text_end_already_shown: + jmp event_wait + +button: + mov eax, 17 + int 0x40 ;䨪 ⮩ ah + + cmp ah, 1 ; + jne no_close + mov eax, -1 + int 0x40 +no_close: + ;஢塞 ⠫ + cmp ah, 0x02 + jne no_button_2 + ; 2 + ; + xor eax, eax + + mov [mistakes], 0x0 + + mov esi, [lastsymb] + mov al, [esi] + ;㦭 ஢, ᨬ ᫥. ᫨ 0xFF - + ; 稫, 㦭 ᭠砫 + cmp al, 0xFF + je start_1st_lesson + + cmp al, 0xFE ; 諨 ப? + jne not_completed_previous + +init_level_after_fe: + ; , ஢ਬ, 砩 ᫥騬 ᨬ 0xFF + inc esi + mov al, [esi] + cmp al, 0xFF + je start_1st_lesson + ; - ᫥騩 ப + jmp set_lesson_start_from_esi + +not_completed_previous: + inc esi + mov al, [esi] + cmp al, 0xFF + je start_1st_lesson + cmp al, 0xFE + je init_level_after_fe + jmp not_completed_previous + +start_1st_lesson: + mov esi, [datastart] +set_lesson_start_from_esi: + mov [startline], esi + mov [currentsymb], esi + mov [lastsymb], esi + mov [lessonstart], esi + + ;CC + mov eax, 0x00000001 + mov [currentline], eax + call count_lines + ;CC + + call reset_speed_counters + + call draw_window + jmp event_wait + ; + +no_button_2: + cmp ah, 0x03 + jne no_button_3 + + ;१ ஢ + mov edx, [lessonstart] + mov [currentsymb], edx + mov [startline], edx + mov [lastsymb], edx + + mov eax, 0x00000001 + mov [currentline], eax + + mov [mistakes], 0 + + call reset_speed_counters + + call count_lines + call draw_window + + jmp event_wait + +no_button_3: + cmp ah, 0x04 + jne no_button_4 + + ;१ ࠦ + + mov edx, [datastart] + + mov [lessonstart], edx + mov [currentsymb], edx + mov [startline], edx + mov [lastsymb], edx + + mov eax, 0x00000001 + mov [currentline], eax + + mov [mistakes], 0 + + + call reset_speed_counters + + call count_lines + call draw_window + + jmp event_wait + + +no_button_4: + ; 頥 ᮡ + jmp event_wait + +;"" ணࠬ - 㭪 ᮢ ( ⠫쭮 - 㫮 -)) ) +draw_window: + mov eax, 12 ;頥 ⥬ ﭨ ᮢ + mov ebx, 1 ;砫 ᮢ + int 0x40 + + + mov ax, [areawidth] ; 맮 draw_window? + cmp ax, 0x0 + jne dw_not_first_call + call get_screen_params ;砥 ࠬ ࠭ - ਭ + +dw_not_first_call: + xor eax, eax + mov ax, [windowx] + mov ecx, 65536 + mul ecx + add eax, 780 + mov ebx, eax ; ebx - X ਭ + + ;mov ebx, 10*65536+780 + + xor eax, eax + mov ax, [windowy] + mov ecx, 65536 + mul ecx + add eax, 580 + mov ecx, eax ; ecx - Y + + + ;mov ecx, 10*65536+580 ;Y + mov edx, 0x33CCCCCC ;[⨯ ][梥 ࠡ祩 ] + mov edi, text + mov eax, 0 ;। 뢥 + int 0x40 + + +;㥬 ⥪ + mov eax, 8 + mov ebx, 295*65536+145 + mov ecx, 8*65536+18 + mov edx, 0x00000002 + mov esi, 0x0099CC99 + int 0x40 + + mov eax, 4 + mov ebx,310*65536+14 + mov ecx, 0x80000000 + mov edx, buttontext + int 0x40 + +;㥬 + mov eax, 8 + mov ebx, 450*65536+145 + mov ecx, 8*65536+18 + mov edx, 0x00000003 + mov esi, 0x00CC9999 + int 0x40 + + mov eax, 4 + mov ebx,465*65536+14 + mov ecx, 0x80000000 + mov edx, retrybuttontext + int 0x40 + +;㥬 + mov eax, 8 + mov ebx, 605*65536+145 + mov ecx, 8*65536+18 + mov edx, 0x00000004 + mov esi, 0x00DD7777 + int 0x40 + + mov eax, 4 + mov ebx, 626*65536+14 + mov ecx, 0x80000000 + mov edx, restartbuttontext + int 0x40 + +; 㥬 ⨯ + mov eax, 65 + mov ebx, logo + mov ecx, 32*65536+12 + mov edx, 12*65536+12 + mov esi, 1 + mov edi, green_text + mov ebp, 0 + int 0x40 + +;稬 ⥪騥 ࠬ + mov eax, 9 + mov ebx, kbbuffer + mov ecx, -1 + int 0x40 + + add ebx, 0x2A + mov eax, [ebx] + mov [windowwidth], eax + + mov ebx, kbbuffer + add ebx, 0x2E + mov eax, [ebx] + mov [windowheight], eax + +draw_error_count: + ; 㥬 "" + mov eax, 4 + mov ebx, 60*65536+15 + mov ecx, 0x80AA0000 + mov edx, mistakestext + int 0x40 + + ; 뢥 ᫮ 訡 + mov eax, 47 + mov ebx, 10000000000001000000000000000000b + mov ecx, [mistakes] + mov edx, 105*65536+15 + mov esi, 0x00AA0000 + int 0x40 + +draw_line_number: + ; 㥬 "ப " + mov eax, 4 + mov ebx, 140*65536+15 + mov ecx, 0x8000AA00 + mov edx, lineistext + int 0x40 + + ;뢥 ⥪饩 ப + mov eax, 47 + mov ebx, 10000000000001000000000000000000b + mov ecx, [currentline] + mov edx, 195*65536+15 + mov esi, 0x0000AA00 + int 0x40 + + ;뢥 ⥪ ப + mov eax, 47 + mov ebx, 10000000000001000000000000000000b + mov ecx, [linecount] + mov edx, 252*65536+15 + mov esi, 0x0000AA00 + int 0x40 + + + +draw_text_prepare: + ;⮢ 뢮 ⥪ + mov edx, 40 ;砫쭮 뢮 ⥪ ⨪ + + mov esi, [startline] + dec esi ; (. *1 )! + mov ebx, esi ; edx - 砫 뢮 ப + + +draw_text: + + + ;騢 㪠⥫ ⥪騩 ᨬ + inc ebx ;(*1) + +draw_text_without_inc: + ;ᬮਬ, 室 ⥪ ࠭ + mov esi, [windowheight] ; esi ࠧ + mov eax, edx + and eax,0x0000FFFF + add eax, 64 + cmp eax, esi + ja end_draw_text ; 室 । . ᮢ. + + ;⠭ ਧ⠫ (+18 ⥪饩 樨) + mov esi, 18*65536 + + add edx, esi + + ; ᬮਬ, 襫 ⥪ ࠭ ਧ⠫ + ; ᫨ 襫 - 㥬 ᮪ + mov esi, [windowwidth] ; esi ࠧ + shl esi, 16 + mov eax, edx + and eax,0xFFFF0000 + add eax, 40*65536 + cmp eax, esi + jna horizontal_check_ok ;᫨ eax>est, 室 । . + +skip_line_end_step: + + mov ah, byte [ebx] + + cmp ah, 0x00 + je end_line_to_next_line + cmp ah, 0xFE + je end_draw_text + cmp ah, 0xFF + je end_draw_text + + inc ebx + + jmp skip_line_end_step + +end_line_to_next_line: + ;jmp end_line_to_next_line + and edx, 0x0000FFFF + jmp draw_text_without_inc + +horizontal_check_ok: + + ;஢ਬ, 稫 ப + mov esi, [startline] + cmp esi, lessoncomplete + jne in_process + + ;᫨ 稫, ⥪ 뢮 㦭 + mov edi, green_text + jmp color_set_sucessful + +in_process: + cmp ebx, [currentsymb] ; ⥪騩 ࠥ ᨬ? + je red ; 筮! + + ja black ; , , ࠫ + + + mov edi, gray_text ; , , 㦥 ࠫ + jmp color_set_sucessful + +red: + mov edi, red_text + jmp color_set_sucessful + +black: + mov edi, black_text ; 梥 + +color_set_sucessful: + xor esi,esi + movzx si, byte [ebx] + cmp si, 0x0000 + jne continue_drawing + call increase_y; + jmp continue_text_proc + +continue_drawing: + + cmp si, 0x00FF + je end_draw_text + cmp si, 0x00FE + je end_draw_text + + + ;㥬 㪢 + push ebx + push edx + + movzx eax, byte [ebx] + mov ecx, 64 + mul ecx + add eax, big_font + mov ebx, eax + + pop edx + + mov ecx, 16*65536+32 + + ; edx न + + mov esi, 1 + + ; edi 㪠⥫ (梥 ) + + mov ebp, 0 + + mov eax, 65 + + int 0x40 + + pop ebx + ; ⮬ ᮢ 㪢 襭 +continue_text_proc: + ;inc edi + jmp draw_text + +end_draw_text: + + mov eax, 12 ; ᮮ頥 ﭨ ᮢ + mov ebx, 2 ;, ࠧ - ᮢ + int 0x40 + + ret + +increase_y: + ; 稬 ⨪ न 뢮 㪢, + ; ᫨ 稫 ப (⨫ 0x00) + and edx,0x0000FFFF + add edx, 33 + + ret + +; ( ) +redraw_2_symbols: + + ;஢ਬ, 멤 ᮢ ࠭ ⨬ + ; . ᫨ 멤 - ஫ ப ਧ⠫ + mov esi, [windowwidth] ; esi ࠧ + + mov eax, [currentsymb] + sub eax, [startline] + + mov ecx, 18 + + mul ecx + + add eax, 20 + + add eax, 20 + + add eax, 40 + + cmp eax, esi + jna r2s_horizontal_check_ok ;᫨ eax>est, 室 । . + + ;⠪, 室 ࠭ ... ... + ;ப ਤ ஫... + + mov eax, [currentsymb] + dec eax + mov [startline], eax + call draw_window + jmp return_from_redraw_2_symbols + +r2s_horizontal_check_ok: + + ;㥬 㪢 + + mov ebx, [currentsymb] + dec ebx + + movzx eax, byte [ebx] + mov ecx, 64 + + mul ecx + + add eax, big_font + + mov ebx, eax + + + mov ecx, 16*65536+32 + + mov eax, [currentsymb] + sub eax, [startline] + dec eax + mov esi, 18 + mul esi + add eax, 18 + mov esi, 65536 + mul esi + add eax, 40 + + mov edx, eax + + + mov esi, 1 + + mov edi, gray_text + + mov ebp, 0 + + mov eax, 65 + + int 0x40 + + + ;㥬 + + + mov ebx, [currentsymb] + + movzx eax, byte [ebx] + mov ecx, 64 + mul ecx + add eax, big_font + + mov ebx, eax + + mov ecx, 16*65536+32 + + mov eax, [currentsymb] + sub eax, [startline] + mov esi, 18 + mul esi + add eax, 18 + mov esi, 65536 + mul esi + add eax, 40 + + mov edx, eax + + mov esi, 1 + + mov edi, red_text + + mov eax, 65 + + int 0x40 + + +return_from_redraw_2_symbols: + + ret + +redraw_mistakes: + ;ᨬ אַ㣮쭨 + mov eax, 13 + mov ebx, 59*65536+75 + mov ecx, 14*65536+10 + mov edx, 0x00CCCCCC + int 0x40 + + ; 㥬 "" + mov eax, 4 + mov ebx, 60*65536+15 + mov ecx, 0x80AA0000 + mov edx, mistakestext + int 0x40 + + ; 뢥 ᫮ 訡 + mov eax, 47 + mov ebx, 10000000000001000000000000000000b + mov ecx, [mistakes] + mov edx, 105*65536+15 + mov esi, 0x00AA0000 + int 0x40 + + ret + +count_lines: + xor ecx, ecx ; ecx - 稪 ப + inc ecx ; 1 ப + + + ; 稭 ࠧ... + mov eax, [startline] + dec eax + +cl_next_step: + inc eax + mov bh, [eax] + + cmp bh, 0x00 + jne cl_not_new_line + inc ecx + jmp cl_next_step + +cl_not_new_line: + cmp bh, 0xFE + je cl_end + cmp bh, 0xFF + je cl_end + jmp cl_next_step + +cl_end: + mov [linecount], ecx + ret + +reset_speed_counters: + mov eax, 0x00000000 + + mov [symbtyped], eax + mov [typestarttime], eax + mov [currenttime], eax + mov [typingspeed], eax + + ret + +count_speed: + mov eax, 26 + mov ebx, 9 + int 0x40 + + mov [currenttime], eax + + mov ebx, [typestarttime] + + sub eax, ebx ; eax - ᫮ 襤 ᥪ㭤 + + + mov ecx, [symbtyped] + cmp ecx, 0x00 + jne cs_all_ok + inc ecx + +cs_all_ok: + xor edx, edx; + + div ecx ; eax - । 㧠 ᨬ + + mov ecx, eax + cmp ecx, 0x00 + jne cs_all_ok_2 + inc ecx + +cs_all_ok_2: + + xor edx, edx + mov eax, 6000 + + div ecx + + mov [typingspeed], eax ; . [typingspeed] - । ᪮ + + + ret + +speed_to_string: + ; ८ࠧ ᫮ ப 뢠 ६ ६ speedbytes + xor edx, edx + mov eax, [typingspeed] + + mov ecx, 10 + + div ecx + + add dl, 30h + mov [speedbytes + 3], dl + + xor edx, edx + div ecx + add dl, 30h + mov [speedbytes + 2], dl + + xor edx, edx + div ecx + add dl, 30h + mov [speedbytes + 1], dl + + xor edx, edx + div ecx + + cmp dl, 0x00 + je sts_move_space + + add dl, 30h + mov [speedbytes], dl + jmp sts_end + sts_move_space: + mov [speedbytes], 0x20 + + sts_end: + + ret + +get_screen_params: + + mov eax, 14 + int 0x40 + mov [areaheight], ax + + push ax + + shr eax, 16 + mov [areawidth],ax + + ; ax ० 室 ਭ . ᯮ㥬 ⨬ + sub ax, 780 ;⥬ 砫 ࠧ + shr ax, 1 + + mov [windowx], ax + + + ; 室 + xor ax, ax + pop ax ; ⮫ ⥪ 祭 + + sub ax, 580 + shr ax, 1 + mov [windowy], ax + + + ret + + + + +;draw_speed: + + ;ᨬ אַ㣮쭨 +; mov eax, 13 +; mov ebx, 59*65536+340 +; mov ecx, 29*65536+10 +; mov edx, 0x00CCCCCC +; int 0x40 + + ; 㥬 " ( ):" +; mov eax, 4 +; mov ebx, 60*65536+30 +; mov ecx, 0x80008800 +; mov edx, speedtext +; int 0x40 + + ; 뢥 ᫮ +; mov eax, 47 +; mov ebx, 10000000000001000000000000000000b +; mov ecx, [typingspeed] +; mov edx, 305*65536+30 +; mov esi, 0x00008800 +; int 0x40 + +; ret + +; ) +datastart dd 0x0 ; , ஬ 室 +currentsymb dd 0x0 ; 騩 ᨬ +startline dd 0x0 ; 砫 ࢮ ப +lessonstart dd 0x0 +lastsymb dd 0x0 ; , ࠭ ᫥ +mistakes dd 0x0 ; ⢮ 訡 + +areawidth dw 0x0 +areaheight dw 0x0 +windowx dw 0x0 +windowy dw 0x0 + +linecount dd 0x00 +currentline dd 0x00 + +symbtyped dd 0x0 +typestarttime dd 0x0 +currenttime dd 0x0 +typingspeed dd 0x0 + +windowwidth dd 0x00 +windowheight dd 0x00 + +text db ' ७ -J|Au|||A- 0.9',0 +buttontext db '饥 ࠦ', 0 +retrybuttontext db ' ࠦ', 0 +restartbuttontext db ' ', 0 + +speedtext db ' ( ):',0 +mistakestext db ':', 0 +lessoncomplete db 'ࠦ 襭!',0x00 +db '। ᪮ : ' +speedbytes db 0x30,0x30,0x30,0x30 +db ' ./.', 0xFE, 0xFF +lessoncompleteend: + +lineistext db ' ', 0 + +kbbuffer db 1024 DUP (0x00) +filestruct: ; 맮 㭪樨 70 +arg1 dd 0x0 +arg2 dd 0x0 +arg3 dd 0x0 +arg4 dd 0x0 +arg5 dd 0x0 +arg6 db 0x0 +arg7 dd 0x0 + +filedatastruct: ;ਡ 䠩 +attrib dd 0x0 +fntype db 0x0 +db 0x0 +db 0x0 +db 0x0 +dd 0x0 ;+8 +dd 0x0 ;+12 +dd 0x0 ;+16 +dd 0x0 ;+20 +dd 0x0 ;+24 +dd 0x0 ;+28 +size dq 0x0 ;+32 +;size2 dd 0x0 ;+36 + +filesize dd 0x0 + +par: +params rb 1024 + +string db 0x07,' ____________ ',0x07, 0x00 + db 0x07,' I KJ|ABuIIIA I ', 0x07, 0x00 + db 0x07,' 0.9 I____________I ', 0x07, 0x00 + db 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07 + db 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07 + db 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07 + db 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x00 + + db 0x07, 0x07, 0x07, ' ᠭ ⮬ ᥬ ',0x07, 0x07, 0x07, 0x0 + db ' ',0x0 + db 'ࠡ稪:', 0x00 + db '- ३ 堩 [Dron2004] ', 0x00 + db ' ',0x0 + + db ' ணࠬ 뫠 饭 -', 0x00 + db '஢. 業 ࠡ -', 0x00 + db 'ࠬ 室 䠩 ଠ .KLA,', 0x00 + db 'ᮤঠ騩 祡 .', 0x00 + db ' ', 0x00 + db '(饫 )', 0xFE + + db 0x07,' KLA-䠩 ᮤন ப ,', 0x00 + db 'ࠧ 㫥 ᨬ (0x00).', 0x00 + db 'ப ⤥ 㣮 ⮬', 0x00 + db '0xFE (⠢ ᫥', 0x00 + db 'ப ப 0x00). ', 0x00 + db '稢 ⮬ 0xFF (⠢', 0x00 + db ' ᫥ ப ᫥', 0x00 + db 'ப ᫥ 0xFE).', 0x00 + db ' KLA-䠩 । ணࠬ', 0x00 + db ' ᪥ ⢥ ࠬ', 0x00 + db ' ப, ਬ:', 0x00 + db ' ', 0x00 + db 'klavisha /rd/1/lessons.kla', 0x00 + db ' ', 0x00 + db '(饫 )', 0xFE + db 0x07,' - ।', 0x00 + db '⥪ ⢮ 訡.', 0x00 + db '室 ࠦ 㣮', 0x00 + db '⢫ ', 0x00 + db ' .', 0x00 + db ' ⥯ ஡ ࠡ', 0x00 + db ' ஬. ', 0x00 + db ' 稭 ⥪!,', 0x00 + db ' : ⮫쪮 !', 0x00 + db ' 祭 ஬ 室', 0x00 + db 'ᮮ⢥騩 KLA-䠩!', 0x00 + db ' ', 0x00 + db ' ', 0x00 + db '(饫 )', 0xFE + db '뢠 뢠 뢠 ', 0x00 + db '뢠 뢠 뢠 ', 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 + 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 ' 冷 ', 0xFE + db ' - ⭠ -', 0x00 + db '筠 樮 ⥬,', 0x00 + db 'ᠭ ⮬ ᥬ.', 0x00 + db '⥬ 砩 ⭠.', 0x00 + db '᫠ ! !', 0x00 + db '७஢ 諠 ', 0xFE, 0xFF + +stringend: + +big_font: +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 63, 252, 63, 252, 192, 3, 192, 3 +db 204, 51, 204, 51, 192, 3, 192, 3, 192, 3 +db 192, 3, 207, 243, 207, 243, 195, 195, 195, 195 +db 192, 3, 192, 3, 192, 3, 192, 3, 63, 252 +db 63, 252, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 63, 252, 63, 252 +db 255, 255, 255, 255, 243, 207, 243, 207, 255, 255 +db 255, 255, 255, 255, 255, 255, 240, 15, 240, 15 +db 252, 63, 252, 63, 255, 255, 255, 255, 255, 255 +db 255, 255, 63, 252, 63, 252, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 60, 240 +db 60, 240, 255, 252, 255, 252, 255, 252, 255, 252 +db 255, 252, 255, 252, 255, 252, 255, 252, 63, 240 +db 63, 240, 15, 192, 15, 192, 3, 0, 3, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 3, 0, 3, 0, 15, 192, 15, 192 +db 63, 240, 63, 240, 255, 252, 255, 252, 63, 240 +db 63, 240, 15, 192, 15, 192, 3, 0, 3, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 3, 192, 3, 192, 15, 240, 15, 240 +db 15, 240, 15, 240, 252, 63, 252, 63, 252, 63 +db 252, 63, 252, 63, 252, 63, 3, 192, 3, 192 +db 3, 192, 3, 192, 15, 240, 15, 240, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 3, 192, 3, 192 +db 15, 240, 15, 240, 63, 252, 63, 252, 255, 255 +db 255, 255, 255, 255, 255, 255, 63, 252, 63, 252 +db 3, 192, 3, 192, 3, 192, 3, 192, 15, 240 +db 15, 240, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 3, 192, 3, 192, 15, 240, 15, 240 +db 15, 240, 15, 240, 3, 192, 3, 192, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 255, 255, 255, 255, 255, 255, 255, 255 +db 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 +db 255, 255, 255, 255, 255, 255, 252, 63, 252, 63 +db 240, 15, 240, 15, 240, 15, 240, 15, 252, 63 +db 252, 63, 255, 255, 255, 255, 255, 255, 255, 255 +db 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 +db 255, 255, 255, 255, 255, 255, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 15, 240, 15, 240 +db 60, 60, 60, 60, 48, 12, 48, 12, 48, 12 +db 48, 12, 60, 60, 60, 60, 15, 240, 15, 240 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 +db 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 +db 240, 15, 240, 15, 195, 195, 195, 195, 207, 243 +db 207, 243, 207, 243, 207, 243, 195, 195, 195, 195 +db 240, 15, 240, 15, 255, 255, 255, 255, 255, 255 +db 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 +db 255, 255, 255, 255, 0, 0, 0, 0, 0, 0 +db 0, 0, 3, 252, 3, 252, 0, 252, 0, 252 +db 3, 204, 3, 204, 15, 12, 15, 12, 63, 192 +db 63, 192, 240, 240, 240, 240, 240, 240, 240, 240 +db 240, 240, 240, 240, 240, 240, 240, 240, 63, 192 +db 63, 192, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 15, 240, 15, 240 +db 60, 60, 60, 60, 60, 60, 60, 60, 60, 60 +db 60, 60, 60, 60, 60, 60, 15, 240, 15, 240 +db 3, 192, 3, 192, 63, 252, 63, 252, 3, 192 +db 3, 192, 3, 192, 3, 192, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 15, 255, 15, 255, 15, 15, 15, 15, 15, 255 +db 15, 255, 15, 0, 15, 0, 15, 0, 15, 0 +db 15, 0, 15, 0, 15, 0, 15, 0, 63, 0 +db 63, 0, 255, 0, 255, 0, 252, 0, 252, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 63, 255, 63, 255, 60, 15 +db 60, 15, 63, 255, 63, 255, 60, 15, 60, 15 +db 60, 15, 60, 15, 60, 15, 60, 15, 60, 15 +db 60, 15, 60, 63, 60, 63, 252, 63, 252, 63 +db 252, 60, 252, 60, 240, 0, 240, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 3, 192, 3, 192, 3, 192, 3, 192 +db 243, 207, 243, 207, 15, 240, 15, 240, 252, 63 +db 252, 63, 15, 240, 15, 240, 243, 207, 243, 207 +db 3, 192, 3, 192, 3, 192, 3, 192, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 192, 0 +db 192, 0, 240, 0, 240, 0, 252, 0, 252, 0 +db 255, 0, 255, 0, 255, 192, 255, 192, 255, 252 +db 255, 252, 255, 192, 255, 192, 255, 0, 255, 0 +db 252, 0, 252, 0, 240, 0, 240, 0, 192, 0 +db 192, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 12, 0, 12, 0, 60, 0, 60 +db 0, 252, 0, 252, 3, 252, 3, 252, 15, 252 +db 15, 252, 255, 252, 255, 252, 15, 252, 15, 252 +db 3, 252, 3, 252, 0, 252, 0, 252, 0, 60 +db 0, 60, 0, 12, 0, 12, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 3, 192, 3, 192, 15, 240, 15, 240, 63, 252 +db 63, 252, 3, 192, 3, 192, 3, 192, 3, 192 +db 3, 192, 3, 192, 63, 252, 63, 252, 15, 240 +db 15, 240, 3, 192, 3, 192, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 60, 60, 60, 60, 60, 60 +db 60, 60, 60, 60, 60, 60, 60, 60, 60, 60 +db 60, 60, 60, 60, 60, 60, 60, 60, 60, 60 +db 60, 60, 0, 0, 0, 0, 60, 60, 60, 60 +db 60, 60, 60, 60, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 63, 255 +db 63, 255, 243, 207, 243, 207, 243, 207, 243, 207 +db 243, 207, 243, 207, 63, 207, 63, 207, 3, 207 +db 3, 207, 3, 207, 3, 207, 3, 207, 3, 207 +db 3, 207, 3, 207, 3, 207, 3, 207, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 63, 240 +db 63, 240, 240, 60, 240, 60, 60, 0, 60, 0 +db 15, 192, 15, 192, 60, 240, 60, 240, 240, 60 +db 240, 60, 240, 60, 240, 60, 60, 240, 60, 240 +db 15, 192, 15, 192, 0, 240, 0, 240, 240, 60 +db 240, 60, 63, 240, 63, 240, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 255, 252, 255, 252, 255, 252, 255, 252, 255, 252 +db 255, 252, 255, 252, 255, 252, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 3, 192, 3, 192, 15, 240, 15, 240, 63, 252 +db 63, 252, 3, 192, 3, 192, 3, 192, 3, 192 +db 3, 192, 3, 192, 63, 252, 63, 252, 15, 240 +db 15, 240, 3, 192, 3, 192, 63, 252, 63, 252 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 3, 192, 3, 192, 15, 240 +db 15, 240, 63, 252, 63, 252, 3, 192, 3, 192 +db 3, 192, 3, 192, 3, 192, 3, 192, 3, 192 +db 3, 192, 3, 192, 3, 192, 3, 192, 3, 192 +db 3, 192, 3, 192, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 3, 192 +db 3, 192, 3, 192, 3, 192, 3, 192, 3, 192 +db 3, 192, 3, 192, 3, 192, 3, 192, 3, 192 +db 3, 192, 3, 192, 3, 192, 63, 252, 63, 252 +db 15, 240, 15, 240, 3, 192, 3, 192, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 3, 192, 3, 192, 0, 240 +db 0, 240, 255, 252, 255, 252, 0, 240, 0, 240 +db 3, 192, 3, 192, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 15, 0 +db 15, 0, 60, 0, 60, 0, 255, 252, 255, 252 +db 60, 0, 60, 0, 15, 0, 15, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 240, 0, 240, 0 +db 240, 0, 240, 0, 240, 0, 240, 0, 255, 252 +db 255, 252, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 12, 192, 12, 192 +db 60, 240, 60, 240, 255, 252, 255, 252, 60, 240 +db 60, 240, 12, 192, 12, 192, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 3, 0, 3, 0 +db 15, 192, 15, 192, 15, 192, 15, 192, 63, 240 +db 63, 240, 63, 240, 63, 240, 255, 252, 255, 252 +db 255, 252, 255, 252, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 255, 252, 255, 252, 255, 252, 255, 252, 63, 240 +db 63, 240, 63, 240, 63, 240, 15, 192, 15, 192 +db 15, 192, 15, 192, 3, 0, 3, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 3, 192, 3, 192, 15, 240, 15, 240, 15, 240 +db 15, 240, 15, 240, 15, 240, 3, 192, 3, 192 +db 3, 192, 3, 192, 3, 192, 3, 192, 0, 0 +db 0, 0, 3, 192, 3, 192, 3, 192, 3, 192 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 60, 60, 60, 60, 60, 60, 60, 60, 60, 60 +db 60, 60, 12, 48, 12, 48, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 60, 240, 60, 240, 60, 240, 60, 240 +db 255, 252, 255, 252, 60, 240, 60, 240, 60, 240 +db 60, 240, 60, 240, 60, 240, 255, 252, 255, 252 +db 60, 240, 60, 240, 60, 240, 60, 240, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 3, 192, 3, 192, 3, 192 +db 3, 192, 63, 240, 63, 240, 240, 60, 240, 60 +db 240, 12, 240, 12, 240, 0, 240, 0, 63, 240 +db 63, 240, 0, 60, 0, 60, 0, 60, 0, 60 +db 192, 60, 192, 60, 240, 60, 240, 60, 63, 240 +db 63, 240, 3, 192, 3, 192, 3, 192, 3, 192 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 240, 12, 240, 12, 240, 60 +db 240, 60, 0, 240, 0, 240, 3, 192, 3, 192 +db 15, 0, 15, 0, 60, 0, 60, 0, 240, 60 +db 240, 60, 192, 60, 192, 60, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 15, 192, 15, 192, 60, 240, 60, 240, 60, 240 +db 60, 240, 15, 192, 15, 192, 63, 60, 63, 60 +db 243, 240, 243, 240, 240, 240, 240, 240, 240, 240 +db 240, 240, 240, 240, 240, 240, 63, 60, 63, 60 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 15, 0, 15, 0, 15, 0, 15, 0, 15, 0 +db 15, 0, 60, 0, 60, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 240 +db 0, 240, 3, 192, 3, 192, 15, 0, 15, 0 +db 15, 0, 15, 0, 15, 0, 15, 0, 15, 0 +db 15, 0, 15, 0, 15, 0, 15, 0, 15, 0 +db 3, 192, 3, 192, 0, 240, 0, 240, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 15, 0, 15, 0, 3, 192, 3, 192 +db 0, 240, 0, 240, 0, 240, 0, 240, 0, 240 +db 0, 240, 0, 240, 0, 240, 0, 240, 0, 240 +db 0, 240, 0, 240, 3, 192, 3, 192, 15, 0 +db 15, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 60, 60 +db 60, 60, 15, 240, 15, 240, 255, 255, 255, 255 +db 15, 240, 15, 240, 60, 60, 60, 60, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 3, 192, 3, 192, 3, 192, 3, 192 +db 63, 252, 63, 252, 3, 192, 3, 192, 3, 192 +db 3, 192, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 3, 192, 3, 192, 3, 192, 3, 192 +db 3, 192, 3, 192, 15, 0, 15, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 255, 252 +db 255, 252, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 3, 192, 3, 192, 3, 192 +db 3, 192, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 12, 0, 12, 0, 60 +db 0, 60, 0, 240, 0, 240, 3, 192, 3, 192 +db 15, 0, 15, 0, 60, 0, 60, 0, 240, 0 +db 240, 0, 192, 0, 192, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 63, 240, 63, 240, 240, 60, 240, 60, 240, 60 +db 240, 60, 240, 252, 240, 252, 243, 60, 243, 60 +db 252, 60, 252, 60, 240, 60, 240, 60, 240, 60 +db 240, 60, 240, 60, 240, 60, 63, 240, 63, 240 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 3, 192, 3, 192, 15, 192 +db 15, 192, 63, 192, 63, 192, 3, 192, 3, 192 +db 3, 192, 3, 192, 3, 192, 3, 192, 3, 192 +db 3, 192, 3, 192, 3, 192, 3, 192, 3, 192 +db 63, 252, 63, 252, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 63, 240 +db 63, 240, 240, 60, 240, 60, 0, 60, 0, 60 +db 0, 240, 0, 240, 3, 192, 3, 192, 15, 0 +db 15, 0, 60, 0, 60, 0, 240, 0, 240, 0 +db 240, 60, 240, 60, 255, 252, 255, 252, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 63, 240, 63, 240, 240, 60, 240, 60 +db 0, 60, 0, 60, 0, 60, 0, 60, 15, 240 +db 15, 240, 0, 60, 0, 60, 0, 60, 0, 60 +db 0, 60, 0, 60, 240, 60, 240, 60, 63, 240 +db 63, 240, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 240, 0, 240 +db 3, 240, 3, 240, 15, 240, 15, 240, 60, 240 +db 60, 240, 240, 240, 240, 240, 255, 252, 255, 252 +db 0, 240, 0, 240, 0, 240, 0, 240, 0, 240 +db 0, 240, 3, 252, 3, 252, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 255, 252, 255, 252, 240, 0, 240, 0, 240, 0 +db 240, 0, 240, 0, 240, 0, 255, 240, 255, 240 +db 0, 60, 0, 60, 0, 60, 0, 60, 0, 60 +db 0, 60, 240, 60, 240, 60, 63, 240, 63, 240 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 15, 192, 15, 192, 60, 0 +db 60, 0, 240, 0, 240, 0, 240, 0, 240, 0 +db 255, 240, 255, 240, 240, 60, 240, 60, 240, 60 +db 240, 60, 240, 60, 240, 60, 240, 60, 240, 60 +db 63, 240, 63, 240, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 255, 252 +db 255, 252, 240, 60, 240, 60, 0, 60, 0, 60 +db 0, 60, 0, 60, 0, 240, 0, 240, 3, 192 +db 3, 192, 15, 0, 15, 0, 15, 0, 15, 0 +db 15, 0, 15, 0, 15, 0, 15, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 63, 240, 63, 240, 240, 60, 240, 60 +db 240, 60, 240, 60, 240, 60, 240, 60, 63, 240 +db 63, 240, 240, 60, 240, 60, 240, 60, 240, 60 +db 240, 60, 240, 60, 240, 60, 240, 60, 63, 240 +db 63, 240, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 63, 240, 63, 240 +db 240, 60, 240, 60, 240, 60, 240, 60, 240, 60 +db 240, 60, 63, 252, 63, 252, 0, 60, 0, 60 +db 0, 60, 0, 60, 0, 60, 0, 60, 0, 240 +db 0, 240, 63, 192, 63, 192, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 3, 192 +db 3, 192, 3, 192, 3, 192, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 3, 192 +db 3, 192, 3, 192, 3, 192, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 3, 192, 3, 192, 3, 192, 3, 192 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 3, 192, 3, 192, 3, 192, 3, 192 +db 15, 0, 15, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 60, 0, 60, 0, 240, 0, 240 +db 3, 192, 3, 192, 15, 0, 15, 0, 60, 0 +db 60, 0, 15, 0, 15, 0, 3, 192, 3, 192 +db 0, 240, 0, 240, 0, 60, 0, 60, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 63, 252, 63, 252, 0, 0 +db 0, 0, 0, 0, 0, 0, 63, 252, 63, 252 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 60, 0, 60, 0, 15, 0, 15, 0, 3, 192 +db 3, 192, 0, 240, 0, 240, 0, 60, 0, 60 +db 0, 240, 0, 240, 3, 192, 3, 192, 15, 0 +db 15, 0, 60, 0, 60, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 63, 240, 63, 240, 240, 60, 240, 60, 240, 60 +db 240, 60, 0, 240, 0, 240, 3, 192, 3, 192 +db 3, 192, 3, 192, 3, 192, 3, 192, 0, 0 +db 0, 0, 3, 192, 3, 192, 3, 192, 3, 192 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 63, 240 +db 63, 240, 240, 60, 240, 60, 240, 60, 240, 60 +db 243, 252, 243, 252, 243, 252, 243, 252, 243, 252 +db 243, 252, 243, 240, 243, 240, 240, 0, 240, 0 +db 63, 240, 63, 240, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 3, 0 +db 3, 0, 15, 192, 15, 192, 60, 240, 60, 240 +db 240, 60, 240, 60, 240, 60, 240, 60, 255, 252 +db 255, 252, 240, 60, 240, 60, 240, 60, 240, 60 +db 240, 60, 240, 60, 240, 60, 240, 60, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 255, 240, 255, 240, 60, 60, 60, 60 +db 60, 60, 60, 60, 60, 60, 60, 60, 63, 240 +db 63, 240, 60, 60, 60, 60, 60, 60, 60, 60 +db 60, 60, 60, 60, 60, 60, 60, 60, 255, 240 +db 255, 240, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 15, 240, 15, 240 +db 60, 60, 60, 60, 240, 12, 240, 12, 240, 0 +db 240, 0, 240, 0, 240, 0, 240, 0, 240, 0 +db 240, 0, 240, 0, 240, 12, 240, 12, 60, 60 +db 60, 60, 15, 240, 15, 240, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 255, 192, 255, 192, 60, 240, 60, 240, 60, 60 +db 60, 60, 60, 60, 60, 60, 60, 60, 60, 60 +db 60, 60, 60, 60, 60, 60, 60, 60, 60, 60 +db 60, 60, 60, 240, 60, 240, 255, 192, 255, 192 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 255, 252, 255, 252, 60, 60 +db 60, 60, 60, 12, 60, 12, 60, 192, 60, 192 +db 63, 192, 63, 192, 60, 192, 60, 192, 60, 0 +db 60, 0, 60, 12, 60, 12, 60, 60, 60, 60 +db 255, 252, 255, 252, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 255, 252 +db 255, 252, 60, 60, 60, 60, 60, 12, 60, 12 +db 60, 192, 60, 192, 63, 192, 63, 192, 60, 192 +db 60, 192, 60, 0, 60, 0, 60, 0, 60, 0 +db 60, 0, 60, 0, 255, 0, 255, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 15, 240, 15, 240, 60, 60, 60, 60 +db 240, 12, 240, 12, 240, 0, 240, 0, 240, 0 +db 240, 0, 243, 252, 243, 252, 240, 60, 240, 60 +db 240, 60, 240, 60, 60, 60, 60, 60, 15, 204 +db 15, 204, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 240, 60, 240, 60 +db 240, 60, 240, 60, 240, 60, 240, 60, 240, 60 +db 240, 60, 255, 252, 255, 252, 240, 60, 240, 60 +db 240, 60, 240, 60, 240, 60, 240, 60, 240, 60 +db 240, 60, 240, 60, 240, 60, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 15, 240, 15, 240, 3, 192, 3, 192, 3, 192 +db 3, 192, 3, 192, 3, 192, 3, 192, 3, 192 +db 3, 192, 3, 192, 3, 192, 3, 192, 3, 192 +db 3, 192, 3, 192, 3, 192, 15, 240, 15, 240 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 3, 252, 3, 252, 0, 240 +db 0, 240, 0, 240, 0, 240, 0, 240, 0, 240 +db 0, 240, 0, 240, 0, 240, 0, 240, 240, 240 +db 240, 240, 240, 240, 240, 240, 240, 240, 240, 240 +db 63, 192, 63, 192, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 252, 60 +db 252, 60, 60, 60, 60, 60, 60, 60, 60, 60 +db 60, 240, 60, 240, 63, 192, 63, 192, 63, 192 +db 63, 192, 60, 240, 60, 240, 60, 60, 60, 60 +db 60, 60, 60, 60, 252, 60, 252, 60, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 255, 0, 255, 0, 60, 0, 60, 0 +db 60, 0, 60, 0, 60, 0, 60, 0, 60, 0 +db 60, 0, 60, 0, 60, 0, 60, 0, 60, 0 +db 60, 12, 60, 12, 60, 60, 60, 60, 255, 252 +db 255, 252, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 240, 60, 240, 60 +db 252, 252, 252, 252, 255, 252, 255, 252, 255, 252 +db 255, 252, 243, 60, 243, 60, 240, 60, 240, 60 +db 240, 60, 240, 60, 240, 60, 240, 60, 240, 60 +db 240, 60, 240, 60, 240, 60, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 240, 60, 240, 60, 252, 60, 252, 60, 255, 60 +db 255, 60, 255, 252, 255, 252, 243, 252, 243, 252 +db 240, 252, 240, 252, 240, 60, 240, 60, 240, 60 +db 240, 60, 240, 60, 240, 60, 240, 60, 240, 60 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 63, 240, 63, 240, 240, 60 +db 240, 60, 240, 60, 240, 60, 240, 60, 240, 60 +db 240, 60, 240, 60, 240, 60, 240, 60, 240, 60 +db 240, 60, 240, 60, 240, 60, 240, 60, 240, 60 +db 63, 240, 63, 240, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 255, 240 +db 255, 240, 60, 60, 60, 60, 60, 60, 60, 60 +db 60, 60, 60, 60, 63, 240, 63, 240, 60, 0 +db 60, 0, 60, 0, 60, 0, 60, 0, 60, 0 +db 60, 0, 60, 0, 255, 0, 255, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 63, 240, 63, 240, 240, 60, 240, 60 +db 240, 60, 240, 60, 240, 60, 240, 60, 240, 60 +db 240, 60, 240, 60, 240, 60, 240, 60, 240, 60 +db 243, 60, 243, 60, 243, 252, 243, 252, 63, 240 +db 63, 240, 0, 240, 0, 240, 0, 252, 0, 252 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 255, 240, 255, 240 +db 60, 60, 60, 60, 60, 60, 60, 60, 60, 60 +db 60, 60, 63, 240, 63, 240, 60, 240, 60, 240 +db 60, 60, 60, 60, 60, 60, 60, 60, 60, 60 +db 60, 60, 252, 60, 252, 60, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 63, 240, 63, 240, 240, 60, 240, 60, 240, 60 +db 240, 60, 60, 0, 60, 0, 15, 192, 15, 192 +db 0, 240, 0, 240, 0, 60, 0, 60, 240, 60 +db 240, 60, 240, 60, 240, 60, 63, 240, 63, 240 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 63, 252, 63, 252, 63, 252 +db 63, 252, 51, 204, 51, 204, 3, 192, 3, 192 +db 3, 192, 3, 192, 3, 192, 3, 192, 3, 192 +db 3, 192, 3, 192, 3, 192, 3, 192, 3, 192 +db 15, 240, 15, 240, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 240, 60 +db 240, 60, 240, 60, 240, 60, 240, 60, 240, 60 +db 240, 60, 240, 60, 240, 60, 240, 60, 240, 60 +db 240, 60, 240, 60, 240, 60, 240, 60, 240, 60 +db 240, 60, 240, 60, 63, 240, 63, 240, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 240, 60, 240, 60, 240, 60, 240, 60 +db 240, 60, 240, 60, 240, 60, 240, 60, 240, 60 +db 240, 60, 240, 60, 240, 60, 240, 60, 240, 60 +db 60, 240, 60, 240, 15, 192, 15, 192, 3, 0 +db 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 240, 60, 240, 60 +db 240, 60, 240, 60, 240, 60, 240, 60, 240, 60 +db 240, 60, 243, 60, 243, 60, 243, 60, 243, 60 +db 243, 60, 243, 60, 255, 252, 255, 252, 252, 252 +db 252, 252, 60, 240, 60, 240, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 240, 60, 240, 60, 240, 60, 240, 60, 60, 240 +db 60, 240, 63, 240, 63, 240, 15, 192, 15, 192 +db 15, 192, 15, 192, 63, 240, 63, 240, 60, 240 +db 60, 240, 240, 60, 240, 60, 240, 60, 240, 60 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 60, 60, 60, 60, 60, 60 +db 60, 60, 60, 60, 60, 60, 60, 60, 60, 60 +db 15, 240, 15, 240, 3, 192, 3, 192, 3, 192 +db 3, 192, 3, 192, 3, 192, 3, 192, 3, 192 +db 15, 240, 15, 240, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 255, 252 +db 255, 252, 240, 60, 240, 60, 192, 60, 192, 60 +db 0, 240, 0, 240, 3, 192, 3, 192, 15, 0 +db 15, 0, 60, 0, 60, 0, 240, 12, 240, 12 +db 240, 60, 240, 60, 255, 252, 255, 252, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 15, 240, 15, 240, 15, 0, 15, 0 +db 15, 0, 15, 0, 15, 0, 15, 0, 15, 0 +db 15, 0, 15, 0, 15, 0, 15, 0, 15, 0 +db 15, 0, 15, 0, 15, 0, 15, 0, 15, 240 +db 15, 240, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 192, 0, 192, 0, 240, 0, 240, 0, 252, 0 +db 252, 0, 63, 0, 63, 0, 15, 192, 15, 192 +db 3, 240, 3, 240, 0, 252, 0, 252, 0, 60 +db 0, 60, 0, 12, 0, 12, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 15, 240, 15, 240, 0, 240, 0, 240, 0, 240 +db 0, 240, 0, 240, 0, 240, 0, 240, 0, 240 +db 0, 240, 0, 240, 0, 240, 0, 240, 0, 240 +db 0, 240, 0, 240, 0, 240, 15, 240, 15, 240 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 3, 0, 3, 0 +db 15, 192, 15, 192, 60, 240, 60, 240, 240, 60 +db 240, 60, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 255, 255, 255, 255, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 15, 0 +db 15, 0, 3, 192, 3, 192, 0, 240, 0, 240 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 63, 192 +db 63, 192, 0, 240, 0, 240, 63, 240, 63, 240 +db 240, 240, 240, 240, 240, 240, 240, 240, 240, 240 +db 240, 240, 63, 60, 63, 60, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 252, 0, 252, 0, 60, 0, 60, 0, 60, 0 +db 60, 0, 63, 192, 63, 192, 60, 240, 60, 240 +db 60, 60, 60, 60, 60, 60, 60, 60, 60, 60 +db 60, 60, 60, 60, 60, 60, 63, 240, 63, 240 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 63, 240, 63, 240 +db 240, 60, 240, 60, 240, 0, 240, 0, 240, 0 +db 240, 0, 240, 0, 240, 0, 240, 60, 240, 60 +db 63, 240, 63, 240, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 3, 240 +db 3, 240, 0, 240, 0, 240, 0, 240, 0, 240 +db 15, 240, 15, 240, 60, 240, 60, 240, 240, 240 +db 240, 240, 240, 240, 240, 240, 240, 240, 240, 240 +db 240, 240, 240, 240, 63, 60, 63, 60, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 63, 240, 63, 240, 240, 60 +db 240, 60, 255, 252, 255, 252, 240, 0, 240, 0 +db 240, 0, 240, 0, 240, 60, 240, 60, 63, 240 +db 63, 240, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 3, 240, 3, 240 +db 15, 60, 15, 60, 15, 12, 15, 12, 15, 0 +db 15, 0, 63, 192, 63, 192, 15, 0, 15, 0 +db 15, 0, 15, 0, 15, 0, 15, 0, 15, 0 +db 15, 0, 63, 192, 63, 192, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 63, 60, 63, 60, 240, 240, 240, 240 +db 240, 240, 240, 240, 240, 240, 240, 240, 240, 240 +db 240, 240, 240, 240, 240, 240, 63, 240, 63, 240 +db 0, 240, 0, 240, 240, 240, 240, 240, 63, 192 +db 63, 192, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 252, 0, 252, 0, 60, 0 +db 60, 0, 60, 0, 60, 0, 60, 240, 60, 240 +db 63, 60, 63, 60, 60, 60, 60, 60, 60, 60 +db 60, 60, 60, 60, 60, 60, 60, 60, 60, 60 +db 252, 60, 252, 60, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 3, 192 +db 3, 192, 3, 192, 3, 192, 0, 0, 0, 0 +db 15, 192, 15, 192, 3, 192, 3, 192, 3, 192 +db 3, 192, 3, 192, 3, 192, 3, 192, 3, 192 +db 3, 192, 3, 192, 15, 240, 15, 240, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 60, 0, 60, 0, 60, 0, 60 +db 0, 0, 0, 0, 0, 252, 0, 252, 0, 60 +db 0, 60, 0, 60, 0, 60, 0, 60, 0, 60 +db 0, 60, 0, 60, 0, 60, 0, 60, 0, 60 +db 0, 60, 60, 60, 60, 60, 60, 60, 60, 60 +db 15, 240, 15, 240, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 252, 0, 252, 0 +db 60, 0, 60, 0, 60, 0, 60, 0, 60, 60 +db 60, 60, 60, 240, 60, 240, 63, 192, 63, 192 +db 63, 192, 63, 192, 60, 240, 60, 240, 60, 60 +db 60, 60, 252, 60, 252, 60, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 15, 192, 15, 192, 3, 192, 3, 192, 3, 192 +db 3, 192, 3, 192, 3, 192, 3, 192, 3, 192 +db 3, 192, 3, 192, 3, 192, 3, 192, 3, 192 +db 3, 192, 3, 192, 3, 192, 15, 240, 15, 240 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 252, 240, 252, 240 +db 255, 252, 255, 252, 243, 60, 243, 60, 243, 60 +db 243, 60, 243, 60, 243, 60, 243, 60, 243, 60 +db 240, 60, 240, 60, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 243, 240, 243, 240, 60, 60, 60, 60, 60, 60 +db 60, 60, 60, 60, 60, 60, 60, 60, 60, 60 +db 60, 60, 60, 60, 60, 60, 60, 60, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 63, 240, 63, 240, 240, 60 +db 240, 60, 240, 60, 240, 60, 240, 60, 240, 60 +db 240, 60, 240, 60, 240, 60, 240, 60, 63, 240 +db 63, 240, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 243, 240 +db 243, 240, 60, 60, 60, 60, 60, 60, 60, 60 +db 60, 60, 60, 60, 60, 60, 60, 60, 60, 60 +db 60, 60, 63, 240, 63, 240, 60, 0, 60, 0 +db 60, 0, 60, 0, 255, 0, 255, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 63, 60, 63, 60, 240, 240, 240, 240 +db 240, 240, 240, 240, 240, 240, 240, 240, 240, 240 +db 240, 240, 240, 240, 240, 240, 63, 240, 63, 240 +db 0, 240, 0, 240, 0, 240, 0, 240, 3, 252 +db 3, 252, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 243, 240, 243, 240 +db 63, 60, 63, 60, 60, 60, 60, 60, 60, 0 +db 60, 0, 60, 0, 60, 0, 60, 0, 60, 0 +db 255, 0, 255, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 63, 240, 63, 240, 240, 60, 240, 60, 60, 0 +db 60, 0, 15, 192, 15, 192, 0, 240, 0, 240 +db 240, 60, 240, 60, 63, 240, 63, 240, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 3, 0, 3, 0, 15, 0, 15, 0 +db 15, 0, 15, 0, 255, 240, 255, 240, 15, 0 +db 15, 0, 15, 0, 15, 0, 15, 0, 15, 0 +db 15, 0, 15, 0, 15, 60, 15, 60, 3, 240 +db 3, 240, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 240, 240 +db 240, 240, 240, 240, 240, 240, 240, 240, 240, 240 +db 240, 240, 240, 240, 240, 240, 240, 240, 240, 240 +db 240, 240, 63, 60, 63, 60, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 240, 60, 240, 60, 240, 60, 240, 60 +db 240, 60, 240, 60, 240, 60, 240, 60, 240, 60 +db 240, 60, 60, 240, 60, 240, 15, 192, 15, 192 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 240, 60, 240, 60 +db 240, 60, 240, 60, 243, 60, 243, 60, 243, 60 +db 243, 60, 243, 60, 243, 60, 255, 252, 255, 252 +db 60, 240, 60, 240, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 240, 60, 240, 60, 60, 240, 60, 240, 15, 192 +db 15, 192, 15, 192, 15, 192, 15, 192, 15, 192 +db 60, 240, 60, 240, 240, 60, 240, 60, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 240, 60, 240, 60, 240, 60 +db 240, 60, 240, 60, 240, 60, 240, 60, 240, 60 +db 240, 60, 240, 60, 240, 60, 240, 60, 63, 252 +db 63, 252, 0, 60, 0, 60, 0, 240, 0, 240 +db 255, 192, 255, 192, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 255, 252 +db 255, 252, 240, 240, 240, 240, 3, 192, 3, 192 +db 15, 0, 15, 0, 60, 0, 60, 0, 240, 60 +db 240, 60, 255, 252, 255, 252, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 252, 0, 252, 3, 192, 3, 192, 3, 192 +db 3, 192, 3, 192, 3, 192, 63, 0, 63, 0 +db 3, 192, 3, 192, 3, 192, 3, 192, 3, 192 +db 3, 192, 3, 192, 3, 192, 0, 252, 0, 252 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 3, 192, 3, 192, 3, 192 +db 3, 192, 3, 192, 3, 192, 3, 192, 3, 192 +db 3, 192, 3, 192, 3, 192, 3, 192, 3, 192 +db 3, 192, 3, 192, 3, 192, 3, 192, 3, 192 +db 3, 192, 3, 192, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 63, 0 +db 63, 0, 3, 192, 3, 192, 3, 192, 3, 192 +db 3, 192, 3, 192, 0, 252, 0, 252, 3, 192 +db 3, 192, 3, 192, 3, 192, 3, 192, 3, 192 +db 3, 192, 3, 192, 63, 0, 63, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 63, 60 +db 63, 60, 243, 240, 243, 240, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 3, 0, 3, 0, 15, 192 +db 15, 192, 60, 240, 60, 240, 240, 60, 240, 60 +db 240, 60, 240, 60, 240, 60, 240, 60, 255, 252 +db 255, 252, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 3, 252, 3, 252, 15, 60, 15, 60, 60, 60 +db 60, 60, 240, 60, 240, 60, 240, 60, 240, 60 +db 255, 252, 255, 252, 240, 60, 240, 60, 240, 60 +db 240, 60, 240, 60, 240, 60, 240, 60, 240, 60 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 255, 252, 255, 252, 60, 12 +db 60, 12, 60, 0, 60, 0, 60, 0, 60, 0 +db 63, 240, 63, 240, 60, 60, 60, 60, 60, 60 +db 60, 60, 60, 60, 60, 60, 60, 60, 60, 60 +db 255, 240, 255, 240, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 255, 240 +db 255, 240, 60, 60, 60, 60, 60, 60, 60, 60 +db 60, 60, 60, 60, 63, 240, 63, 240, 60, 60 +db 60, 60, 60, 60, 60, 60, 60, 60, 60, 60 +db 60, 60, 60, 60, 255, 240, 255, 240, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 255, 252, 255, 252, 60, 60, 60, 60 +db 60, 12, 60, 12, 60, 0, 60, 0, 60, 0 +db 60, 0, 60, 0, 60, 0, 60, 0, 60, 0 +db 60, 0, 60, 0, 60, 0, 60, 0, 255, 0 +db 255, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 3, 252, 3, 252 +db 15, 60, 15, 60, 60, 60, 60, 60, 60, 60 +db 60, 60, 60, 60, 60, 60, 60, 60, 60, 60 +db 60, 60, 60, 60, 60, 60, 60, 60, 60, 60 +db 60, 60, 255, 255, 255, 255, 240, 15, 240, 15 +db 192, 3, 192, 3, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 255, 252, 255, 252, 60, 60, 60, 60, 60, 12 +db 60, 12, 60, 192, 60, 192, 63, 192, 63, 192 +db 60, 192, 60, 192, 60, 0, 60, 0, 60, 12 +db 60, 12, 60, 60, 60, 60, 255, 252, 255, 252 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 243, 207, 243, 207, 243, 207 +db 243, 207, 51, 204, 51, 204, 51, 204, 51, 204 +db 63, 252, 63, 252, 63, 252, 63, 252, 51, 204 +db 51, 204, 243, 207, 243, 207, 243, 207, 243, 207 +db 243, 207, 243, 207, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 63, 240 +db 63, 240, 240, 60, 240, 60, 0, 60, 0, 60 +db 0, 60, 0, 60, 15, 240, 15, 240, 0, 60 +db 0, 60, 0, 60, 0, 60, 0, 60, 0, 60 +db 240, 60, 240, 60, 63, 240, 63, 240, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 240, 60, 240, 60, 240, 60, 240, 60 +db 240, 60, 240, 60, 240, 252, 240, 252, 243, 252 +db 243, 252, 255, 60, 255, 60, 252, 60, 252, 60 +db 240, 60, 240, 60, 240, 60, 240, 60, 240, 60 +db 240, 60, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 60, 240 +db 60, 240, 15, 192, 15, 192, 240, 60, 240, 60 +db 240, 60, 240, 60, 240, 60, 240, 60, 240, 252 +db 240, 252, 243, 252, 243, 252, 255, 60, 255, 60 +db 252, 60, 252, 60, 240, 60, 240, 60, 240, 60 +db 240, 60, 240, 60, 240, 60, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 252, 60, 252, 60, 60, 60, 60, 60, 60, 240 +db 60, 240, 60, 240, 60, 240, 63, 192, 63, 192 +db 63, 192, 63, 192, 60, 240, 60, 240, 60, 240 +db 60, 240, 60, 60, 60, 60, 252, 60, 252, 60 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 3, 255, 3, 255, 15, 60 +db 15, 60, 60, 60, 60, 60, 60, 60, 60, 60 +db 60, 60, 60, 60, 60, 60, 60, 60, 60, 60 +db 60, 60, 60, 60, 60, 60, 60, 60, 60, 60 +db 240, 255, 240, 255, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 240, 60 +db 240, 60, 252, 252, 252, 252, 255, 252, 255, 252 +db 255, 252, 255, 252, 243, 60, 243, 60, 240, 60 +db 240, 60, 240, 60, 240, 60, 240, 60, 240, 60 +db 240, 60, 240, 60, 240, 60, 240, 60, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 240, 60, 240, 60, 240, 60, 240, 60 +db 240, 60, 240, 60, 240, 60, 240, 60, 255, 252 +db 255, 252, 240, 60, 240, 60, 240, 60, 240, 60 +db 240, 60, 240, 60, 240, 60, 240, 60, 240, 60 +db 240, 60, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 63, 240, 63, 240 +db 240, 60, 240, 60, 240, 60, 240, 60, 240, 60 +db 240, 60, 240, 60, 240, 60, 240, 60, 240, 60 +db 240, 60, 240, 60, 240, 60, 240, 60, 240, 60 +db 240, 60, 63, 240, 63, 240, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 255, 252, 255, 252, 240, 60, 240, 60, 240, 60 +db 240, 60, 240, 60, 240, 60, 240, 60, 240, 60 +db 240, 60, 240, 60, 240, 60, 240, 60, 240, 60 +db 240, 60, 240, 60, 240, 60, 240, 60, 240, 60 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 255, 240, 255, 240, 60, 60 +db 60, 60, 60, 60, 60, 60, 60, 60, 60, 60 +db 60, 60, 60, 60, 63, 240, 63, 240, 60, 0 +db 60, 0, 60, 0, 60, 0, 60, 0, 60, 0 +db 255, 0, 255, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 63, 240 +db 63, 240, 240, 60, 240, 60, 240, 60, 240, 60 +db 240, 0, 240, 0, 240, 0, 240, 0, 240, 0 +db 240, 0, 240, 0, 240, 0, 240, 12, 240, 12 +db 240, 60, 240, 60, 63, 240, 63, 240, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 255, 255, 255, 255, 243, 207, 243, 207 +db 195, 195, 195, 195, 3, 192, 3, 192, 3, 192 +db 3, 192, 3, 192, 3, 192, 3, 192, 3, 192 +db 3, 192, 3, 192, 3, 192, 3, 192, 15, 240 +db 15, 240, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 240, 60, 240, 60 +db 240, 60, 240, 60, 240, 60, 240, 60, 240, 60 +db 240, 60, 240, 60, 240, 60, 63, 252, 63, 252 +db 0, 60, 0, 60, 0, 60, 0, 60, 240, 60 +db 240, 60, 63, 240, 63, 240, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 63, 252, 63, 252, 243, 207, 243, 207, 243, 207 +db 243, 207, 243, 207, 243, 207, 243, 207, 243, 207 +db 243, 207, 243, 207, 243, 207, 243, 207, 63, 252 +db 63, 252, 3, 192, 3, 192, 15, 240, 15, 240 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 240, 60, 240, 60, 240, 60 +db 240, 60, 60, 240, 60, 240, 63, 240, 63, 240 +db 15, 192, 15, 192, 15, 192, 15, 192, 63, 240 +db 63, 240, 60, 240, 60, 240, 240, 60, 240, 60 +db 240, 60, 240, 60, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 240, 60 +db 240, 60, 240, 60, 240, 60, 240, 60, 240, 60 +db 240, 60, 240, 60, 240, 60, 240, 60, 240, 60 +db 240, 60, 240, 60, 240, 60, 240, 60, 240, 60 +db 240, 60, 240, 60, 255, 255, 255, 255, 0, 15 +db 0, 15, 0, 15, 0, 15, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 240, 60, 240, 60, 240, 60, 240, 60 +db 240, 60, 240, 60, 240, 60, 240, 60, 240, 60 +db 240, 60, 63, 252, 63, 252, 0, 60, 0, 60 +db 0, 60, 0, 60, 0, 60, 0, 60, 0, 60 +db 0, 60, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 243, 60, 243, 60 +db 243, 60, 243, 60, 243, 60, 243, 60, 243, 60 +db 243, 60, 243, 60, 243, 60, 243, 60, 243, 60 +db 243, 60, 243, 60, 243, 60, 243, 60, 243, 60 +db 243, 60, 255, 252, 255, 252, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 243, 60, 243, 60, 243, 60, 243, 60, 243, 60 +db 243, 60, 243, 60, 243, 60, 243, 60, 243, 60 +db 243, 60, 243, 60, 243, 60, 243, 60, 243, 60 +db 243, 60, 243, 60, 243, 60, 255, 255, 255, 255 +db 0, 15, 0, 15, 0, 15, 0, 15, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 255, 192, 255, 192, 255, 0 +db 255, 0, 207, 0, 207, 0, 15, 0, 15, 0 +db 15, 252, 15, 252, 15, 15, 15, 15, 15, 15 +db 15, 15, 15, 15, 15, 15, 15, 15, 15, 15 +db 63, 252, 63, 252, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 240, 15 +db 240, 15, 240, 15, 240, 15, 240, 15, 240, 15 +db 240, 15, 240, 15, 255, 15, 255, 15, 243, 207 +db 243, 207, 243, 207, 243, 207, 243, 207, 243, 207 +db 243, 207, 243, 207, 255, 15, 255, 15, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 255, 0, 255, 0, 60, 0, 60, 0 +db 60, 0, 60, 0, 60, 0, 60, 0, 63, 240 +db 63, 240, 60, 60, 60, 60, 60, 60, 60, 60 +db 60, 60, 60, 60, 60, 60, 60, 60, 255, 240 +db 255, 240, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 63, 240, 63, 240 +db 240, 60, 240, 60, 0, 60, 0, 60, 12, 60 +db 12, 60, 15, 252, 15, 252, 12, 60, 12, 60 +db 0, 60, 0, 60, 0, 60, 0, 60, 240, 60 +db 240, 60, 63, 240, 63, 240, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 240, 252, 240, 252, 243, 207, 243, 207, 243, 207 +db 243, 207, 243, 207, 243, 207, 255, 207, 255, 207 +db 243, 207, 243, 207, 243, 207, 243, 207, 243, 207 +db 243, 207, 243, 207, 243, 207, 240, 252, 240, 252 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 15, 255, 15, 255, 60, 60 +db 60, 60, 60, 60, 60, 60, 60, 60, 60, 60 +db 15, 252, 15, 252, 15, 252, 15, 252, 60, 60 +db 60, 60, 60, 60, 60, 60, 60, 60, 60, 60 +db 252, 63, 252, 63, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 63, 192, 63, 192, 0, 240, 0, 240, 63, 240 +db 63, 240, 240, 240, 240, 240, 240, 240, 240, 240 +db 240, 240, 240, 240, 63, 60, 63, 60, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 12 +db 0, 12, 0, 60, 0, 60, 63, 240, 63, 240 +db 240, 0, 240, 0, 240, 0, 240, 0, 255, 240 +db 255, 240, 240, 60, 240, 60, 240, 60, 240, 60 +db 240, 60, 240, 60, 240, 60, 240, 60, 63, 240 +db 63, 240, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 255, 240 +db 255, 240, 60, 60, 60, 60, 60, 60, 60, 60 +db 63, 240, 63, 240, 60, 60, 60, 60, 60, 60 +db 60, 60, 255, 240, 255, 240, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 255, 252, 255, 252, 60, 12, 60, 12 +db 60, 12, 60, 12, 60, 0, 60, 0, 60, 0 +db 60, 0, 60, 0, 60, 0, 255, 0, 255, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 3, 252, 3, 252 +db 15, 60, 15, 60, 60, 60, 60, 60, 60, 60 +db 60, 60, 60, 60, 60, 60, 60, 60, 60, 60 +db 255, 255, 255, 255, 240, 15, 240, 15, 240, 15 +db 240, 15, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 63, 240, 63, 240, 240, 60, 240, 60, 240, 60 +db 240, 60, 255, 252, 255, 252, 240, 0, 240, 0 +db 240, 60, 240, 60, 63, 240, 63, 240, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 243, 60, 243, 60, 243, 60 +db 243, 60, 51, 48, 51, 48, 63, 240, 63, 240 +db 51, 48, 51, 48, 243, 60, 243, 60, 243, 60 +db 243, 60, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 63, 240 +db 63, 240, 240, 60, 240, 60, 0, 60, 0, 60 +db 15, 240, 15, 240, 0, 60, 0, 60, 240, 60 +db 240, 60, 63, 240, 63, 240, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 240, 60, 240, 60, 240, 60, 240, 60 +db 240, 252, 240, 252, 243, 60, 243, 60, 252, 60 +db 252, 60, 240, 60, 240, 60, 240, 60, 240, 60 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 60, 240 +db 60, 240, 15, 192, 15, 192, 240, 60, 240, 60 +db 240, 60, 240, 60, 240, 252, 240, 252, 243, 60 +db 243, 60, 252, 60, 252, 60, 240, 60, 240, 60 +db 240, 60, 240, 60, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 252, 60, 252, 60, 60, 240, 60, 240, 63, 192 +db 63, 192, 63, 192, 63, 192, 60, 240, 60, 240 +db 60, 60, 60, 60, 252, 60, 252, 60, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 3, 252, 3, 252, 15, 60 +db 15, 60, 60, 60, 60, 60, 60, 60, 60, 60 +db 60, 60, 60, 60, 60, 60, 60, 60, 252, 60 +db 252, 60, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 240, 60 +db 240, 60, 252, 252, 252, 252, 255, 252, 255, 252 +db 255, 252, 255, 252, 243, 60, 243, 60, 243, 60 +db 243, 60, 240, 60, 240, 60, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 240, 60, 240, 60, 240, 60, 240, 60 +db 240, 60, 240, 60, 255, 252, 255, 252, 240, 60 +db 240, 60, 240, 60, 240, 60, 240, 60, 240, 60 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 63, 240, 63, 240 +db 240, 60, 240, 60, 240, 60, 240, 60, 240, 60 +db 240, 60, 240, 60, 240, 60, 240, 60, 240, 60 +db 63, 240, 63, 240, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 255, 252, 255, 252, 240, 60, 240, 60, 240, 60 +db 240, 60, 240, 60, 240, 60, 240, 60, 240, 60 +db 240, 60, 240, 60, 240, 60, 240, 60, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 3, 3, 3, 3, 48, 48 +db 48, 48, 3, 3, 3, 3, 48, 48, 48, 48 +db 3, 3, 3, 3, 48, 48, 48, 48, 3, 3 +db 3, 3, 48, 48, 48, 48, 3, 3, 3, 3 +db 48, 48, 48, 48, 3, 3, 3, 3, 48, 48 +db 48, 48, 3, 3, 3, 3, 48, 48, 48, 48 +db 3, 3, 3, 3, 48, 48, 48, 48, 51, 51 +db 51, 51, 204, 204, 204, 204, 51, 51, 51, 51 +db 204, 204, 204, 204, 51, 51, 51, 51, 204, 204 +db 204, 204, 51, 51, 51, 51, 204, 204, 204, 204 +db 51, 51, 51, 51, 204, 204, 204, 204, 51, 51 +db 51, 51, 204, 204, 204, 204, 51, 51, 51, 51 +db 204, 204, 204, 204, 51, 51, 51, 51, 204, 204 +db 204, 204, 243, 243, 243, 243, 63, 63, 63, 63 +db 243, 243, 243, 243, 63, 63, 63, 63, 243, 243 +db 243, 243, 63, 63, 63, 63, 243, 243, 243, 243 +db 63, 63, 63, 63, 243, 243, 243, 243, 63, 63 +db 63, 63, 243, 243, 243, 243, 63, 63, 63, 63 +db 243, 243, 243, 243, 63, 63, 63, 63, 243, 243 +db 243, 243, 63, 63, 63, 63, 3, 192, 3, 192 +db 3, 192, 3, 192, 3, 192, 3, 192, 3, 192 +db 3, 192, 3, 192, 3, 192, 3, 192, 3, 192 +db 3, 192, 3, 192, 3, 192, 3, 192, 3, 192 +db 3, 192, 3, 192, 3, 192, 3, 192, 3, 192 +db 3, 192, 3, 192, 3, 192, 3, 192, 3, 192 +db 3, 192, 3, 192, 3, 192, 3, 192, 3, 192 +db 3, 192, 3, 192, 3, 192, 3, 192, 3, 192 +db 3, 192, 3, 192, 3, 192, 3, 192, 3, 192 +db 3, 192, 3, 192, 3, 192, 3, 192, 255, 192 +db 255, 192, 3, 192, 3, 192, 3, 192, 3, 192 +db 3, 192, 3, 192, 3, 192, 3, 192, 3, 192 +db 3, 192, 3, 192, 3, 192, 3, 192, 3, 192 +db 3, 192, 3, 192, 3, 192, 3, 192, 3, 192 +db 3, 192, 3, 192, 3, 192, 3, 192, 3, 192 +db 3, 192, 3, 192, 255, 192, 255, 192, 3, 192 +db 3, 192, 255, 192, 255, 192, 3, 192, 3, 192 +db 3, 192, 3, 192, 3, 192, 3, 192, 3, 192 +db 3, 192, 3, 192, 3, 192, 3, 192, 3, 192 +db 3, 192, 3, 192, 3, 192, 3, 192, 15, 60 +db 15, 60, 15, 60, 15, 60, 15, 60, 15, 60 +db 15, 60, 15, 60, 15, 60, 15, 60, 15, 60 +db 15, 60, 15, 60, 15, 60, 255, 60, 255, 60 +db 15, 60, 15, 60, 15, 60, 15, 60, 15, 60 +db 15, 60, 15, 60, 15, 60, 15, 60, 15, 60 +db 15, 60, 15, 60, 15, 60, 15, 60, 15, 60 +db 15, 60, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 255, 252, 255, 252, 15, 60, 15, 60, 15, 60 +db 15, 60, 15, 60, 15, 60, 15, 60, 15, 60 +db 15, 60, 15, 60, 15, 60, 15, 60, 15, 60 +db 15, 60, 15, 60, 15, 60, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 255, 192, 255, 192 +db 3, 192, 3, 192, 255, 192, 255, 192, 3, 192 +db 3, 192, 3, 192, 3, 192, 3, 192, 3, 192 +db 3, 192, 3, 192, 3, 192, 3, 192, 3, 192 +db 3, 192, 3, 192, 3, 192, 3, 192, 3, 192 +db 15, 60, 15, 60, 15, 60, 15, 60, 15, 60 +db 15, 60, 15, 60, 15, 60, 15, 60, 15, 60 +db 255, 60, 255, 60, 0, 60, 0, 60, 255, 60 +db 255, 60, 15, 60, 15, 60, 15, 60, 15, 60 +db 15, 60, 15, 60, 15, 60, 15, 60, 15, 60 +db 15, 60, 15, 60, 15, 60, 15, 60, 15, 60 +db 15, 60, 15, 60, 15, 60, 15, 60, 15, 60 +db 15, 60, 15, 60, 15, 60, 15, 60, 15, 60 +db 15, 60, 15, 60, 15, 60, 15, 60, 15, 60 +db 15, 60, 15, 60, 15, 60, 15, 60, 15, 60 +db 15, 60, 15, 60, 15, 60, 15, 60, 15, 60 +db 15, 60, 15, 60, 15, 60, 15, 60, 15, 60 +db 15, 60, 15, 60, 15, 60, 15, 60, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 255, 252 +db 255, 252, 0, 60, 0, 60, 255, 60, 255, 60 +db 15, 60, 15, 60, 15, 60, 15, 60, 15, 60 +db 15, 60, 15, 60, 15, 60, 15, 60, 15, 60 +db 15, 60, 15, 60, 15, 60, 15, 60, 15, 60 +db 15, 60, 15, 60, 15, 60, 15, 60, 15, 60 +db 15, 60, 15, 60, 15, 60, 15, 60, 15, 60 +db 15, 60, 255, 60, 255, 60, 0, 60, 0, 60 +db 255, 252, 255, 252, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 15, 60, 15, 60 +db 15, 60, 15, 60, 15, 60, 15, 60, 15, 60 +db 15, 60, 15, 60, 15, 60, 15, 60, 15, 60 +db 15, 60, 15, 60, 255, 252, 255, 252, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 3, 192, 3, 192, 3, 192, 3, 192, 3, 192 +db 3, 192, 3, 192, 3, 192, 3, 192, 3, 192 +db 255, 192, 255, 192, 3, 192, 3, 192, 255, 192 +db 255, 192, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 255, 192, 255, 192, 3, 192, 3, 192 +db 3, 192, 3, 192, 3, 192, 3, 192, 3, 192 +db 3, 192, 3, 192, 3, 192, 3, 192, 3, 192 +db 3, 192, 3, 192, 3, 192, 3, 192, 3, 192 +db 3, 192, 3, 192, 3, 192, 3, 192, 3, 192 +db 3, 192, 3, 192, 3, 192, 3, 192, 3, 192 +db 3, 192, 3, 192, 3, 192, 3, 255, 3, 255 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 3, 192, 3, 192, 3, 192, 3, 192 +db 3, 192, 3, 192, 3, 192, 3, 192, 3, 192 +db 3, 192, 3, 192, 3, 192, 3, 192, 3, 192 +db 255, 255, 255, 255, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 255, 255, 255, 255, 3, 192 +db 3, 192, 3, 192, 3, 192, 3, 192, 3, 192 +db 3, 192, 3, 192, 3, 192, 3, 192, 3, 192 +db 3, 192, 3, 192, 3, 192, 3, 192, 3, 192 +db 3, 192, 3, 192, 3, 192, 3, 192, 3, 192 +db 3, 192, 3, 192, 3, 192, 3, 192, 3, 192 +db 3, 192, 3, 192, 3, 192, 3, 192, 3, 255 +db 3, 255, 3, 192, 3, 192, 3, 192, 3, 192 +db 3, 192, 3, 192, 3, 192, 3, 192, 3, 192 +db 3, 192, 3, 192, 3, 192, 3, 192, 3, 192 +db 3, 192, 3, 192, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 255, 255, 255, 255, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 3, 192 +db 3, 192, 3, 192, 3, 192, 3, 192, 3, 192 +db 3, 192, 3, 192, 3, 192, 3, 192, 3, 192 +db 3, 192, 3, 192, 3, 192, 255, 255, 255, 255 +db 3, 192, 3, 192, 3, 192, 3, 192, 3, 192 +db 3, 192, 3, 192, 3, 192, 3, 192, 3, 192 +db 3, 192, 3, 192, 3, 192, 3, 192, 3, 192 +db 3, 192, 3, 192, 3, 192, 3, 192, 3, 192 +db 3, 192, 3, 192, 3, 192, 3, 192, 3, 192 +db 3, 192, 3, 255, 3, 255, 3, 192, 3, 192 +db 3, 255, 3, 255, 3, 192, 3, 192, 3, 192 +db 3, 192, 3, 192, 3, 192, 3, 192, 3, 192 +db 3, 192, 3, 192, 3, 192, 3, 192, 3, 192 +db 3, 192, 3, 192, 3, 192, 15, 60, 15, 60 +db 15, 60, 15, 60, 15, 60, 15, 60, 15, 60 +db 15, 60, 15, 60, 15, 60, 15, 60, 15, 60 +db 15, 60, 15, 60, 15, 63, 15, 63, 15, 60 +db 15, 60, 15, 60, 15, 60, 15, 60, 15, 60 +db 15, 60, 15, 60, 15, 60, 15, 60, 15, 60 +db 15, 60, 15, 60, 15, 60, 15, 60, 15, 60 +db 15, 60, 15, 60, 15, 60, 15, 60, 15, 60 +db 15, 60, 15, 60, 15, 60, 15, 60, 15, 60 +db 15, 63, 15, 63, 15, 0, 15, 0, 15, 255 +db 15, 255, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 15, 255, 15, 255, 15, 0 +db 15, 0, 15, 63, 15, 63, 15, 60, 15, 60 +db 15, 60, 15, 60, 15, 60, 15, 60, 15, 60 +db 15, 60, 15, 60, 15, 60, 15, 60, 15, 60 +db 15, 60, 15, 60, 15, 60, 15, 60, 15, 60 +db 15, 60, 15, 60, 15, 60, 15, 60, 15, 60 +db 15, 60, 15, 60, 15, 60, 15, 60, 255, 63 +db 255, 63, 0, 0, 0, 0, 255, 255, 255, 255 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 255, 255, 255, 255, 0, 0, 0, 0 +db 255, 63, 255, 63, 15, 60, 15, 60, 15, 60 +db 15, 60, 15, 60, 15, 60, 15, 60, 15, 60 +db 15, 60, 15, 60, 15, 60, 15, 60, 15, 60 +db 15, 60, 15, 60, 15, 60, 15, 60, 15, 60 +db 15, 60, 15, 60, 15, 60, 15, 60, 15, 60 +db 15, 60, 15, 60, 15, 60, 15, 63, 15, 63 +db 15, 0, 15, 0, 15, 63, 15, 63, 15, 60 +db 15, 60, 15, 60, 15, 60, 15, 60, 15, 60 +db 15, 60, 15, 60, 15, 60, 15, 60, 15, 60 +db 15, 60, 15, 60, 15, 60, 15, 60, 15, 60 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 255, 255, 255, 255, 0, 0, 0, 0, 255, 255 +db 255, 255, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 15, 60, 15, 60, 15, 60 +db 15, 60, 15, 60, 15, 60, 15, 60, 15, 60 +db 15, 60, 15, 60, 255, 63, 255, 63, 0, 0 +db 0, 0, 255, 63, 255, 63, 15, 60, 15, 60 +db 15, 60, 15, 60, 15, 60, 15, 60, 15, 60 +db 15, 60, 15, 60, 15, 60, 15, 60, 15, 60 +db 15, 60, 15, 60, 15, 60, 15, 60, 3, 192 +db 3, 192, 3, 192, 3, 192, 3, 192, 3, 192 +db 3, 192, 3, 192, 3, 192, 3, 192, 255, 255 +db 255, 255, 0, 0, 0, 0, 255, 255, 255, 255 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 15, 60, 15, 60, 15, 60, 15, 60 +db 15, 60, 15, 60, 15, 60, 15, 60, 15, 60 +db 15, 60, 15, 60, 15, 60, 15, 60, 15, 60 +db 255, 255, 255, 255, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 255, 255, 255, 255 +db 0, 0, 0, 0, 255, 255, 255, 255, 3, 192 +db 3, 192, 3, 192, 3, 192, 3, 192, 3, 192 +db 3, 192, 3, 192, 3, 192, 3, 192, 3, 192 +db 3, 192, 3, 192, 3, 192, 3, 192, 3, 192 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 255, 255 +db 255, 255, 15, 60, 15, 60, 15, 60, 15, 60 +db 15, 60, 15, 60, 15, 60, 15, 60, 15, 60 +db 15, 60, 15, 60, 15, 60, 15, 60, 15, 60 +db 15, 60, 15, 60, 15, 60, 15, 60, 15, 60 +db 15, 60, 15, 60, 15, 60, 15, 60, 15, 60 +db 15, 60, 15, 60, 15, 60, 15, 60, 15, 60 +db 15, 60, 15, 255, 15, 255, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 3, 192 +db 3, 192, 3, 192, 3, 192, 3, 192, 3, 192 +db 3, 192, 3, 192, 3, 192, 3, 192, 3, 255 +db 3, 255, 3, 192, 3, 192, 3, 255, 3, 255 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 3, 255, 3, 255, 3, 192, 3, 192 +db 3, 255, 3, 255, 3, 192, 3, 192, 3, 192 +db 3, 192, 3, 192, 3, 192, 3, 192, 3, 192 +db 3, 192, 3, 192, 3, 192, 3, 192, 3, 192 +db 3, 192, 3, 192, 3, 192, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 15, 255, 15, 255, 15, 60 +db 15, 60, 15, 60, 15, 60, 15, 60, 15, 60 +db 15, 60, 15, 60, 15, 60, 15, 60, 15, 60 +db 15, 60, 15, 60, 15, 60, 15, 60, 15, 60 +db 15, 60, 15, 60, 15, 60, 15, 60, 15, 60 +db 15, 60, 15, 60, 15, 60, 15, 60, 15, 60 +db 15, 60, 15, 60, 15, 60, 15, 60, 255, 255 +db 255, 255, 15, 60, 15, 60, 15, 60, 15, 60 +db 15, 60, 15, 60, 15, 60, 15, 60, 15, 60 +db 15, 60, 15, 60, 15, 60, 15, 60, 15, 60 +db 15, 60, 15, 60, 3, 192, 3, 192, 3, 192 +db 3, 192, 3, 192, 3, 192, 3, 192, 3, 192 +db 3, 192, 3, 192, 255, 255, 255, 255, 3, 192 +db 3, 192, 255, 255, 255, 255, 3, 192, 3, 192 +db 3, 192, 3, 192, 3, 192, 3, 192, 3, 192 +db 3, 192, 3, 192, 3, 192, 3, 192, 3, 192 +db 3, 192, 3, 192, 3, 192, 3, 192, 3, 192 +db 3, 192, 3, 192, 3, 192, 3, 192, 3, 192 +db 3, 192, 3, 192, 3, 192, 3, 192, 3, 192 +db 3, 192, 3, 192, 3, 192, 255, 192, 255, 192 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 3, 255, 3, 255, 3, 192, 3, 192, 3, 192 +db 3, 192, 3, 192, 3, 192, 3, 192, 3, 192 +db 3, 192, 3, 192, 3, 192, 3, 192, 3, 192 +db 3, 192, 3, 192, 3, 192, 255, 255, 255, 255 +db 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 +db 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 +db 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 +db 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 +db 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 +db 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 255, 255 +db 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 +db 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 +db 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 +db 255, 255, 255, 255, 255, 0, 255, 0, 255, 0 +db 255, 0, 255, 0, 255, 0, 255, 0, 255, 0 +db 255, 0, 255, 0, 255, 0, 255, 0, 255, 0 +db 255, 0, 255, 0, 255, 0, 255, 0, 255, 0 +db 255, 0, 255, 0, 255, 0, 255, 0, 255, 0 +db 255, 0, 255, 0, 255, 0, 255, 0, 255, 0 +db 255, 0, 255, 0, 255, 0, 255, 0, 0, 255 +db 0, 255, 0, 255, 0, 255, 0, 255, 0, 255 +db 0, 255, 0, 255, 0, 255, 0, 255, 0, 255 +db 0, 255, 0, 255, 0, 255, 0, 255, 0, 255 +db 0, 255, 0, 255, 0, 255, 0, 255, 0, 255 +db 0, 255, 0, 255, 0, 255, 0, 255, 0, 255 +db 0, 255, 0, 255, 0, 255, 0, 255, 0, 255 +db 0, 255, 255, 255, 255, 255, 255, 255, 255, 255 +db 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 +db 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 243, 240, 243, 240 +db 60, 60, 60, 60, 60, 60, 60, 60, 60, 60 +db 60, 60, 60, 60, 60, 60, 60, 60, 60, 60 +db 63, 240, 63, 240, 60, 0, 60, 0, 60, 0 +db 60, 0, 255, 0, 255, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 63, 240, 63, 240, 240, 60, 240, 60, 240, 0 +db 240, 0, 240, 0, 240, 0, 240, 0, 240, 0 +db 240, 60, 240, 60, 63, 240, 63, 240, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 63, 252, 63, 252, 51, 204 +db 51, 204, 3, 192, 3, 192, 3, 192, 3, 192 +db 3, 192, 3, 192, 3, 192, 3, 192, 15, 240 +db 15, 240, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 240, 60 +db 240, 60, 240, 60, 240, 60, 240, 60, 240, 60 +db 240, 60, 240, 60, 240, 60, 240, 60, 63, 252 +db 63, 252, 0, 60, 0, 60, 0, 60, 0, 60 +db 240, 60, 240, 60, 63, 240, 63, 240, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 15, 240, 15, 240, 3, 192 +db 3, 192, 63, 252, 63, 252, 243, 207, 243, 207 +db 243, 207, 243, 207, 243, 207, 243, 207, 243, 207 +db 243, 207, 243, 207, 243, 207, 63, 252, 63, 252 +db 3, 192, 3, 192, 3, 192, 3, 192, 15, 240 +db 15, 240, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 240, 60, 240, 60 +db 60, 240, 60, 240, 15, 192, 15, 192, 15, 192 +db 15, 192, 15, 192, 15, 192, 60, 240, 60, 240 +db 240, 60, 240, 60, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 240, 60, 240, 60, 240, 60, 240, 60, 240, 60 +db 240, 60, 240, 60, 240, 60, 240, 60, 240, 60 +db 240, 60, 240, 60, 255, 255, 255, 255, 0, 15 +db 0, 15, 0, 15, 0, 15, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 240, 60, 240, 60, 240, 60 +db 240, 60, 240, 60, 240, 60, 240, 60, 240, 60 +db 63, 252, 63, 252, 0, 60, 0, 60, 0, 60 +db 0, 60, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 243, 60 +db 243, 60, 243, 60, 243, 60, 243, 60, 243, 60 +db 243, 60, 243, 60, 243, 60, 243, 60, 243, 60 +db 243, 60, 255, 252, 255, 252, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 243, 60, 243, 60, 243, 60, 243, 60 +db 243, 60, 243, 60, 243, 60, 243, 60, 243, 60 +db 243, 60, 243, 60, 243, 60, 255, 252, 255, 252 +db 0, 15, 0, 15, 0, 15, 0, 15, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 255, 192, 255, 192 +db 207, 0, 207, 0, 207, 0, 207, 0, 15, 252 +db 15, 252, 15, 15, 15, 15, 15, 15, 15, 15 +db 63, 252, 63, 252, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 240, 60, 240, 60, 240, 60, 240, 60, 240, 60 +db 240, 60, 255, 60, 255, 60, 243, 252, 243, 252 +db 243, 252, 243, 252, 255, 60, 255, 60, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 255, 0, 255, 0, 60, 0 +db 60, 0, 60, 0, 60, 0, 63, 240, 63, 240 +db 60, 60, 60, 60, 60, 60, 60, 60, 255, 240 +db 255, 240, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 63, 240 +db 63, 240, 240, 60, 240, 60, 0, 60, 0, 60 +db 15, 252, 15, 252, 0, 60, 0, 60, 240, 60 +db 240, 60, 63, 240, 63, 240, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 240, 252, 240, 252, 243, 207, 243, 207 +db 243, 207, 243, 207, 255, 207, 255, 207, 243, 207 +db 243, 207, 243, 207, 243, 207, 240, 252, 240, 252 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 63, 255, 63, 255 +db 240, 60, 240, 60, 240, 60, 240, 60, 63, 252 +db 63, 252, 15, 60, 15, 60, 60, 60, 60, 60 +db 252, 63, 252, 63, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 60, 240, 60, 240, 0, 0, 0, 0, 255, 252 +db 255, 252, 60, 60, 60, 60, 60, 12, 60, 12 +db 60, 192, 60, 192, 63, 192, 63, 192, 60, 192 +db 60, 192, 60, 0, 60, 0, 60, 12, 60, 12 +db 60, 60, 60, 60, 255, 252, 255, 252, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 60, 240, 60, 240 +db 0, 0, 0, 0, 63, 240, 63, 240, 240, 60 +db 240, 60, 240, 60, 240, 60, 255, 240, 255, 240 +db 240, 0, 240, 0, 240, 60, 240, 60, 63, 240 +db 63, 240, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 63, 240, 63, 240 +db 240, 60, 240, 60, 240, 0, 240, 0, 240, 192 +db 240, 192, 255, 192, 255, 192, 240, 192, 240, 192 +db 240, 0, 240, 0, 240, 0, 240, 0, 240, 60 +db 240, 60, 63, 240, 63, 240, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 63, 240, 63, 240, 240, 60, 240, 60 +db 240, 0, 240, 0, 255, 192, 255, 192, 240, 0 +db 240, 0, 240, 60, 240, 60, 63, 240, 63, 240 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 60, 60, 60, 60 +db 0, 0, 0, 0, 15, 240, 15, 240, 3, 192 +db 3, 192, 3, 192, 3, 192, 3, 192, 3, 192 +db 3, 192, 3, 192, 3, 192, 3, 192, 3, 192 +db 3, 192, 3, 192, 3, 192, 3, 192, 3, 192 +db 15, 240, 15, 240, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 60, 240, 60, 240, 0, 0, 0, 0 +db 15, 192, 15, 192, 3, 192, 3, 192, 3, 192 +db 3, 192, 3, 192, 3, 192, 3, 192, 3, 192 +db 3, 192, 3, 192, 15, 240, 15, 240, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 60, 240, 60, 240, 15, 192 +db 15, 192, 240, 60, 240, 60, 240, 60, 240, 60 +db 240, 60, 240, 60, 240, 60, 240, 60, 240, 60 +db 240, 60, 63, 252, 63, 252, 0, 60, 0, 60 +db 0, 60, 0, 60, 240, 60, 240, 60, 63, 240 +db 63, 240, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 60, 240, 60, 240, 15, 192, 15, 192, 240, 60 +db 240, 60, 240, 60, 240, 60, 240, 60, 240, 60 +db 240, 60, 240, 60, 240, 60, 240, 60, 63, 252 +db 63, 252, 0, 60, 0, 60, 0, 60, 0, 60 +db 240, 60, 240, 60, 63, 240, 63, 240, 0, 0 +db 0, 0, 0, 0, 0, 0, 15, 192, 15, 192 +db 60, 240, 60, 240, 60, 240, 60, 240, 15, 192 +db 15, 192, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 3, 192, 3, 192, 3, 192 +db 3, 192, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 3, 192 +db 3, 192, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 252 +db 0, 252, 0, 240, 0, 240, 0, 240, 0, 240 +db 0, 240, 0, 240, 0, 240, 0, 240, 0, 240 +db 0, 240, 0, 240, 0, 240, 252, 240, 252, 240 +db 60, 240, 60, 240, 15, 240, 15, 240, 3, 240 +db 3, 240, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 240, 255, 240, 255 +db 240, 243, 240, 243, 252, 255, 252, 255, 252, 240 +db 252, 240, 255, 255, 255, 255, 243, 240, 243, 240 +db 243, 240, 243, 240, 240, 240, 240, 240, 240, 240 +db 240, 240, 240, 240, 240, 240, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 240, 60, 240, 60, 63, 240 +db 63, 240, 240, 60, 240, 60, 240, 60, 240, 60 +db 240, 60, 240, 60, 240, 60, 240, 60, 240, 60 +db 240, 60, 63, 240, 63, 240, 240, 60, 240, 60 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 63, 252, 63, 252, 63, 252, 63, 252 +db 63, 252, 63, 252, 63, 252, 63, 252, 63, 252 +db 63, 252, 63, 252, 63, 252, 63, 252, 63, 252 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +db 0, 0, 0, 0 + +black_text: +dd 0x00CCCCCC, 0x00000000 +green_text: +dd 0x00CCCCCC, 0x0000AA00 +red_text: +dd 0x00CCCCCC, 0x00AA0000 +gray_text: +dd 0x00CCCCCC, 0x00777777 + +logo: +db 00000000b, 00000000b, 01000000b, 00000000b +db 00000000b, 00000001b, 11000000b, 00000000b +db 00000000b, 00000001b, 00000000b, 00000000b +db 11111111b, 11111111b, 11111111b, 11111111b +db 10000000b, 00000000b, 00000000b, 00000001b +db 10101010b, 10101010b, 10101010b, 01010101b +db 10000000b, 00000000b, 00001010b, 00000001b +db 10101010b, 10101010b, 10100000b, 01010101b +db 10000000b, 00000000b, 00000100b, 00000001b +db 10101010b, 10101010b, 10101110b, 01010101b +db 10000000b, 00000000b, 00000000b, 00000001b +db 11111111b, 11111111b, 11111111b, 11111111b + + +I_END: \ No newline at end of file diff --git a/programs/games/klavisha/trunk/readme.txt b/programs/games/klavisha/trunk/readme.txt new file mode 100644 index 0000000000..0e85990d7b --- /dev/null +++ b/programs/games/klavisha/trunk/readme.txt @@ -0,0 +1,87 @@ +----------------------------------------------------------- +------------ ७ KJ|ABuIIIA ------------- +------------ 樮 ⥬ ------------- +----------------------------------------------------------- +---------------------- 0.9a ------------------------ +----------------------------------------------------------- +___________________________________________________________ +1. 騥 ᢥ ணࠬ +___________________________________________________________ + ७ KJ|ABuIIIA - ணࠬ 祭 +஬ 樮 ⥬ . + - । 祡 ⥪ +쭮 ⢮ 訡. + ᪥ ணࠬ । ࠬ - + ப 㪠 䠩- ࠦ +ଠ KLA, ਬ: + KLAVISHA /RD/1/BASEKURS.KLA + ᫨ ࠬ ப , ணࠬ 㤥 +饭 樮 ०. + ⠢ 室 砫 祭 - +஬ . 室 䠩 BASEKURS.KLA . +ਬ  易⥫: + ᯮ짮 KLA-䠩 襬 ᬮ७. + ணࠬ  ⠡쭮 +ਬ ࠪ᪨ 楫 ᫮ 祭 +ᮮ⢥饣 KLA-䠩. + +___________________________________________________________ +2. 祡 䠩. ଠ KLA +___________________________________________________________ + 祡 ࠭ 䠩 - + KLA. ⮬ ⠪ 䠩 ᮮ⢥⢮ - + ॡ. + KLA-䠩 ᮤন ப , ࠧ 㫥- + ᨬ (0x00). ப ⤥ 㣮 - +⮬ 0xFE (⠢ ᫥ ப ப + 0x00). 稢 ⮬ 0xFF (- + ᫥ ப ᫥ ப 0xFE) + ਬ塞 ஢ ᨬ - OEM 866. + KLA ⮢ ⭠- +筮 (HEX) । ᯮ짮 ணࠬ- +ᥬ. ⠢ 䠩 SAMPLE.ASM. + +___________________________________________________________ +3. 孨᪨ ᢥ ணࠬ KJ|ABuIIIA +___________________________________________________________ + ணࠬ ᠭ ⮬ ᥬ x86. + ਬ ᥬ FASM. + +___________________________________________________________ +4. ᨩ +___________________________________________________________ + +KJ|ABuIIIA 0.9a - 29.07.2010 +- 祭 (BASEKURS.KLA) +- ࠢ 䠩 (README.TXT) + +KJ|ABuIIIA 0.9 - 24.07.2010 +- "稪 ப": ࠭ ⮡ࠦ +⥪饩 ࠥ ப ࠦ 饥 ᫮ ப. +- १᪠ ࠦ (" +ࠦ") १᪠ ᥣ 祡 ࢮ +ࠦ (" "). +- ਧ⠫ ஫ ࠥ ப ( - +⥫쭮 ४ ᮧ 祡 +ப 38 ᨬ). +- 砭 ࠦ 뤠 ଠ । +᪮ +- ਫ ᪥ ⥯ ⮡ࠦ 業 +࠭  ࠧ襭 + +KJ|ABuIIIA 0.25 - 23.07.2010 +- ⠭⭮ ⥬ ᯮ짮 㯭 +( ᭮ ९ Ubuntu +console-cyrillic_0.9-16_all.deb). +- ࠭ 栭 ᨬ +- "" ( ࠢ쭮 ⮢- +) KLA-䠩 +- 襭 䥩 + +KJ|ABuIIIA 0.1 - 21.07.2010 +- ࢠ ணࠬ + +___________________________________________________________ +5. ᮪ ࠧࠡ稪 +___________________________________________________________ + ३ 堩 aka Dron2004 (http://www.lvtam.ru) \ No newline at end of file diff --git a/programs/media/webcam/trunk/webcam.asm b/programs/media/webcam/trunk/webcam.asm new file mode 100644 index 0000000000..480a39a89d --- /dev/null +++ b/programs/media/webcam/trunk/webcam.asm @@ -0,0 +1,3076 @@ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; 64 bit Menuet Webcam +; +; Compile with FASM 1.60 or above +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +data1 equ image_end+0x100000*1 ; Timestamp data +data3 equ image_end+0x100000*2 ; Image data +data4 equ image_end+0x100000*10 ; Image data time order +data5 equ image_end+0x100000*11 ; Length data time order +data6 equ image_end+0x100000*12 ; Decoded image +data8 equ 0x100000*16 ; 7M*4 - Data return, 4k aligned +data9 equ 0x100000*52 ; 1M*4 - Data length return +data10 equ 0x100000*56 ; Save snap / avi - size 16M + +scx equ 3 ; Scroll x pos +rby equ (220 shl 32+21) ; Ydim +b3y equ 0 ; B3y add +bys equ 21 ; Buttons y add +scl equ 0 ; Scroll length + +use32 + + org 0x0 + + db 'MENUET64' ; Header identifier + dq 0x01 ; Version + dq START ; Start of code + dq image_end ; Size of image + dq data10+0x100000*16 ; Memory for app + dq image_end ; Stack + dq 0x00 ; Prm + dq 0x00 ; Icon + + +turn_camera_on: +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; Reserves, configures and turns camera on +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + cmp [camera_state],byte 1 + je camera_on + + ; Camera present ? + + mov rax , 128 + mov rbx , 1 + int 0x60 + add rax , rbx + cmp rax , 0 + je camera_fail + + ; Configuration found ? + + cmp [sconf],dword 0 + je camera_fail + + ; Set configuration + + mov rax , 128 + mov rbx , 3 + mov rcx , 1 + mov rdx , [sconf] + int 0x60 + + ; Start camera + + mov rax , 128 + mov rbx , 4 + mov rcx , 1 + mov rdx , 1 + int 0x60 + + mov [camera_state],byte 1 + + camera_fail: + camera_on: + + ret + + +turn_camera_off: +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; Turns camera off and clears the reservation +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + cmp [camera_state],byte 0 + je camera_off + + ; Camera present ? + + mov rax , 128 + mov rbx , 1 + int 0x60 + add rax , rbx + cmp rax , 0 + je camera_off + + ; Stop camera + + mov rax , 128 + mov rbx , 4 + mov rcx , 1 + mov rdx , 0 + int 0x60 + + ; Set configuration 0 + + mov rax , 128 + mov rbx , 3 + mov rcx , 1 + mov rdx , 0 + int 0x60 + + camera_off: + + mov [camera_state],byte 0 + + ret + + + +server: +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; Server thread for webcam picture - port 8090 +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + mov [serveronoff],byte 1 + + mov [datasent],dword 0 + + server_open: + + ; Open port + + mov rax , 53 + mov rbx , 5 + mov rcx , 8090 + mov rdx , 0 + mov rsi , 0 + mov rdi , 0 ; Passive mode + int 0x60 + + mov [server_socket],eax + + mov r15 , 100*30 + + server_loop: + + ; Close server port and re-open every 30 seconds + + dec r15 + jz timeoutclose + + ; + + mov rax , 5 + mov rbx , 1 + int 0x60 + + cmp [serveronoff],byte 2 + je serveroff + + ; Server status ? + + mov rax , 53 + mov rbx , 6 + mov rcx , [server_socket] + int 0x60 + + cmp rax , 4 + jne server_loop + + ; Wait 0.50 seconds + + mov rax , 5 + mov rbx , 50 + int 0x60 + + mov [picsend],byte 0 + + ; Read all data + + read_server_data: + + mov rax , 53 + mov rbx , 3 + mov rcx , [server_socket] + int 0x60 + + shl r8 , 8 + mov r8b , bl + + mov r9 , 'pmb.egam' + cmp r8 , r9 + jne nopicsend2 + mov [picsend],byte 1 + nopicsend2: + + cmp rax , 0 + jne read_server_data + + ; Wait 0.05 seconds + + mov rax , 5 + mov rbx , 5 + int 0x60 + + ; Send index htm file + + cmp [picsend],byte 0 + jne noindexsend + + mov rax , 53 + mov rbx , 7 + mov rcx , [server_socket] + mov rdx , h_i_len-html_header_index + mov rsi , html_header_index + int 0x60 + + jmp nopicsend + + noindexsend: + + ; form picture to data10+ + + mov rax , [resx] + mov [sizex],rax + mov rax , [resy] + mov [sizey],rax + call form_picture + + ; send picture - html header + + mov rax , '00230454' ; 320 + cmp [resx],dword 160 + jne nor160 + mov rax , '00057654' ; 160 + nor160: + cmp [resx],dword 640 + jne nor640 + mov rax , '00921654' ; 640 + nor640: + mov [hsz],rax + + mov rax , 53 + mov rbx , 7 + mov rcx , [server_socket] + mov rdx , h_len-html_header + mov rsi , html_header + int 0x60 + + mov rax , 105 + mov rbx , 100 + int 0x60 + + ; send picture - bmp header + + mov rax , 53 + mov rbx , 7 + mov rcx , [server_socket] + mov rdx , 54 + mov rsi , data10 + int 0x60 + + ; send picture - bmp data + + mov rsi , data10+54 + + mov r15 , 99999 + call server_stats + mov r15 , 0 + + newdatasend: + + mov rax , 53 + mov rbx , 6 + mov rcx , [server_socket] + int 0x60 + cmp rax , 4 + jne timeoutclose + + mov rax , 53 + mov rbx , 7 + mov rcx , [server_socket] + mov rdx , 160*3 + int 0x60 + + mov rax , 105 + mov rbx , 3 + int 0x60 + + ; If camera is off, display the stats + + call server_stats ; In:r15 + + add rsi , 160*3 + + mov [datasent],rsi + sub [datasent],dword data10+54 + + mov rbx , [resx_resy_3] + add rbx , data10+54 + + cmp rsi , rbx + jb newdatasend + + timeoutclose: + nopicsend: + + mov rax , 5 + mov rbx , 5 + int 0x60 + + ; close port + + mov rax , 53 + mov rbx , 8 + mov rcx , [server_socket] + int 0x60 + + mov [datasent],dword 0 + + mov r15 , 99999 + call server_stats + + ; mov rax , 5 + ; mov rbx , 50 + ; int 0x60 + + jmp server_open + + serveroff: + + ; Close port + + mov rax , 53 + mov rbx , 8 + mov rcx , [server_socket] + int 0x60 + + mov [serveronoff],byte 3 + + mov rax , 512 + int 0x60 + + +server_stats: +; +; In: r15 - counter +; + cmp [camera_state],byte 1 + je nodfps + inc r15 + cmp r15 , 75 + jb nodfps + mov [show_fps],byte 1 + mov r15 , 0 + nodfps: + + ret + + + +START: + + mov rax , 141 + mov rbx , 1 + mov rcx , 1 + mov rdx , 5 shl 32 + 5 + mov r8 , 9 shl 32 + 12 + int 0x60 + + ; 320x240 as default + + mov r12, 010b + call scan_for_configuration + mov [sconf],r12 + + call grey_default + + ; Draw window + + call draw_window + +still: + + mov rax , 123 ; Check for event + mov rbx , 1 + int 0x60 + + test rax , 0x1 ; Window redraw + jnz window_event + test rax , 0x2 ; Keyboard press + jnz key_event + test rax , 0x4 ; Button press + jnz button_event + + call check_camera_state + + call read_data + + cmp [show_fps],byte 1 + jne nosfps + call display_frames_per_second + mov [show_fps],byte 0 + nosfps: + + jmp still + + +window_event: + + call draw_window + jmp still + +key_event: + + mov rax , 0x2 ; Read the key and ignore + int 0x60 + + jmp still + +button_event: + + mov rax , 0x11 + int 0x60 + + ; rax = status + ; rbx = button id + + cmp rbx , 0x10000001 + jne no_application_terminate_button + call turn_camera_off + mov rax , 0x200 + int 0x60 + no_application_terminate_button: + + cmp rbx , 0x102 + jb no_stats + cmp rbx , 0x103 + ja no_stats + sub rbx , 0x102 + mov [sta1+1],byte ' ' + mov [sta2+1],byte ' ' + imul rbx , 14 + mov [sta1+1+rbx],byte '>' + call fps_background + call display_frames_per_second + jmp still + no_stats: + + cmp rbx , 0x109 + jne no_application_terminate_menu + call turn_camera_off + mov rax , 0x200 + int 0x60 + no_application_terminate_menu: + + cmp rbx , 0x105 + jb no_effect + cmp rbx , 0x107 + ja no_effect + sub rbx , 0x105 + mov [eo+1],byte ' ' + mov [eb+1],byte ' ' + mov [en+1],byte ' ' + imul ebx , 12 + mov [eo+1+rbx],byte '>' + jmp still + no_effect: + + cmp rbx , 121 + jb nomodechange + cmp rbx , 123 + ja nomodechange + + ; Turn camera off + + push rbx + call turn_camera_off + pop rbx + + ; Turn server off + + push rax rbx + cmp [serveronoff],byte 1 + jne noserveron2 + mov [serveronoff],byte 2 + mov rax , 5 + mov rbx , 20 + int 0x60 + call server_button + noserveron2: + pop rbx rax + + ; + + cmp rbx , 123 ; 640 & 800 + jne screenresxfine + call get_data_boot_info + cmp [data_boot_info+4*8],dword 800 + jae screenresxfine + mov rax , 4 + mov rbx , string_screen_req + mov rcx , 15+5 + mov rdx , 49+5 + mov rsi , 0xffffff + mov r9 , 1 + int 0x60 + mov rax , 5 + mov rbx , 200 + int 0x60 + call display_image_yuv + jmp still + screenresxfine: + + mov r11 , [xpos] + + sub rbx , 121 + + mov r8 , [xr+rbx*8] + mov r9 , [yr+rbx*8] + mov r10, [xp+rbx*8] + + mov r12, [cb+rbx*8] + call scan_for_configuration + + cmp r8 , [resx] ; already selected + je still + + mov [resx],r8 + mov [resy],r9 + mov [xpos],r10 + mov [sconf],r12 + + imul r8 , r9 + mov r9 , r8 + add r8 , r9 + mov [resx_resy_2],r8 + add r8 , r9 + mov [resx_resy_3],r8 + add r8 , r9 + mov [resx_resy_4],r8 + + cmp r11 , [xpos] ; redraw needed + jne redraw + mov rax , 13 + mov rbx , 15 shl 32 + 320 + mov rcx , 49 shl 32 + 240 + mov rdx , 0xffffff + int 0x60 + call display_image_yuv + mov [camera_connection_status],dword 2 + call check_camera_state + jmp still + redraw: + + mov rax , 67 + mov rbx , -1 + mov rcx , -1 + + mov rdx , [resx] + cmp rdx , 320 + jae rdxfine + mov rdx , 320 + rdxfine: + mov r8 , [resy] + cmp r8 , 240 + jae r8fine + mov r8 , 240 + r8fine: + add rdx , 160 + add r8 , 70 + + cmp r11 , [xpos] + jae noupleft + mov rbx , 0 + mov rcx , 0 + mov r8 , 561 ; 640x480 picture + noupleft: + + int 0x60 + + jmp still + + scan_for_configuration: + + mov rdx , 1 + + newconftest: + + mov rax , 128 + mov rbx , 2 + mov rcx , 1 + int 0x60 + shr rbx , 16 + and rbx , 0xff + cmp rbx , r12 + je cfound + + inc rdx + cmp rdx , 3 + jbe newconftest + + mov r12 , 0 ; conf not found + ret + + cfound: + + mov r12 , rdx ; conf found + ret + + nomodechange: + + cmp rbx , 101 + jne no_on + call turn_camera_on + jmp still + no_on: + + cmp rbx , 102 + jne no_off + mov [record_state],byte 0 + cmp [serveronoff],byte 1 + jne noserveron + mov [serveronoff],byte 2 + mov rax , 5 + mov rbx , 20 + int 0x60 + noserveron: + call turn_camera_off + call display_image_yuv + call server_button + jmp still + no_off: + + cmp rbx , 103 + jne no_snap + call save_snap + jmp still + no_snap: + + cmp rbx , 104 + jne no_clip + cmp [camera_state], byte 1 + jne still + cmp [resx],dword 320 + je resolutionfine + mov rax , 4 + mov rbx , string_resolution_320 + mov rcx , 15+5 + mov rdx , 49+5 + mov rsi , 0xffffff + mov r9 , 1 + int 0x60 + mov rax , 5 + mov rbx , 100 + int 0x60 + call display_image_yuv + jmp still + resolutionfine: + mov [record_state],byte 1 + mov [record_position], dword data10+1208 + mov rax , data10+(avi_end-avi_start) + mov [record_position],rax + jmp still + no_clip: + + cmp rbx , 105 + jne no_server + cmp [serveronoff],byte 3 + je startserver + mov [serveronoff],byte 2 + waitmore: + mov rax , 5 + mov rbx , 10 + int 0x60 + call read_data + cmp [serveronoff],byte 2 + je waitmore + call server_button + jmp still + startserver: + ; Start server thread + mov rax , 51 + mov rbx , 1 + mov rcx , server + mov rdx , server_stack + int 0x60 + mov rax , 5 + mov rbx , 10 + int 0x60 + call server_button + jmp still + no_server: + + + cmp rbx , 10000 + jb noscroll1 + cmp rbx , 11000 + ja noscroll1 + mov [scroll_value_1],rbx + call draw_scroll_1 + call draw_scroll_values + jmp still + noscroll1: + + cmp rbx , 20000 + jb noscroll2 + cmp rbx , 21000 + ja noscroll2 + mov [scroll_value_2],rbx + call draw_scroll_2 + call draw_scroll_values + jmp still + noscroll2: + + cmp rbx , 30000 + jb noscroll3 + cmp rbx , 31000 + ja noscroll3 + mov [scroll_value_3],rbx + call draw_scroll_3 + call draw_scroll_values + jmp still + noscroll3: + + jmp still + + + +grey_default: +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; Grey default picture +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + mov rdi , data6 + mov rcx , [resx] + imul rcx , [resy] + imul rcx , 4 + mov rax , 0xe0 + cld + rep stosb + + ret + + +get_data_boot_info: +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; Screen resolution +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + push rax rbx rcx rdx + mov rax , 26 + mov rbx , 3 + mov rcx , data_boot_info + mov rdx , 8*20 + int 0x60 + pop rdx rcx rbx rax + + ret + + + +check_camera_state: +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; Displays text message if camera is disconnected +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + mov rax , 128 + mov rbx , 1 + int 0x60 + add rax , rbx + + cmp rax , [camera_connection_status] + je no_camera_change + + mov [camera_connection_status],rax + + push rax + call grey_default + call display_image_yuv + pop rax + + cmp rax , 0 + jne camera_connected + + mov rax , 4 + mov rbx , string_camera_disconnected + mov rcx , 114 + mov rdx , 162 + mov rcx , [resx] + shr rcx , 1 + add rcx , 15 + sub rcx , 62 + mov rdx , [resy] + shr rdx , 1 + add rdx , 43 + mov rsi , 0xb8b8b8 + mov r9 , 1 + int 0x60 + + camera_connected: + + no_camera_change: + + ret + + + +fps_delay: +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; Waits for next time to read from device +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + fps_wait: + + mov rax , 11 + int 0x60 + cmp rax , 0 + jne fps_wait_event + + mov rax , 105 + mov rbx , 1 + int 0x60 + + mov rax , 26 + mov rbx , 1 + mov rcx , fps_data + mov rdx , 1024 + int 0x60 + + call check_framerate + + mov rax , [fps_data+384] + + cmp [thread_running],byte 0 + jne yes_fps_wait + mov [fps_add],dword 34 ; assume 30fps + jmp no_fps_wait + yes_fps_wait: + + cmp rax , [fps_next] + jb fps_wait + + no_fps_wait: + + add rax , [fps_add] + mov [fps_next],rax + + no_fps_add: + + fps_wait_event: + + ret + + + +check_framerate: + + ; Display FPS and adjust display rate delay + + mov rax , [fps_data+384] + cmp rax , [fps_n] + jb nofps + add rax , 1000 + mov [fps_n],rax + ; + cmp [frames_per_second],dword 5 + jae nofrpsz + mov [frames_per_second],dword 5 + nofrpsz: + cmp [frames_per_second],dword 30 + jbe nofrpst + mov [frames_per_second],dword 30 + nofrpst: + call display_frames_per_second + mov rax , 1000 + xor rdx , rdx + mov rbx , [frames_per_second] + div rbx + ; + cmp rax , [fps_add] + jae nofaster + inc dword [fastercount] + cmp [fastercount],dword 2 + jb nofasterset + mov [frames_per_second],dword 30 + mov rax , 1000/30 + nofaster: + mov [fastercount],dword 0 + nofasterset: + ; + mov [fps_add],rax + mov [frames_per_second],dword 0 + mov [frames_per_second_missed],dword 0 + nofps: + + ret + + + +display_frames_per_second: + + cmp [sta2+1],byte '>' + jne nodispstats + + fpsy equ 24 + + call fps_background + ; + mov rax , 47 + mov rbx , 6 * 65536 + mov rcx , [datasent] + mov rdx , [fpsx] + add rdx , 2+6*5 + shl rdx , 32 + add rdx , fpsy+4 + mov rsi , 0xb0b0b0 + int 0x60 + ; + mov rax , 47 + mov rbx , 2 * 65536 + mov rcx , [frames_per_second] + sub rcx , [frames_per_second_missed] + mov rdx , [fpsx] + add rdx , 2+6*16 + shl rdx , 32 + add rdx , fpsy+4 + mov rsi , 0xb0b0b0 + int 0x60 + mov rax , 47 + mov rbx , 2 * 65536 + mov rcx , [frames_per_second] + mov rdx , (fpsx+2+19*6) shl 32 + fpsy+4 + mov rdx , [fpsx] + add rdx , 2+19*6 + shl rdx , 32 + add rdx , fpsy+4 + mov rsi , 0xb0b0b0 + int 0x60 + mov rax , 0x4 + mov rbx , string_fps + mov rcx , [fpsx] + add rcx , 2 + mov rdx , fpsy+4 + mov rsi , 0xb0b0b0 + mov r9 , 1 + int 0x60 + + nodispstats: + + ret + + fps_background: + + mov rax , [xpos] + sub rax , 8 + mov [fpsx],rax + + mov rax , 13 + mov rbx , [fpsx] + sub rbx , 3 + shl rbx , 32 + add rbx , 22*6+5 + mov rcx , fpsy shl 32 + 14 + mov rdx , 0xe8e8e8 + int 0x60 + + ret + + + + +read_block: +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; Starts the read thread +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + cmp [thread_running],byte 0 + jne nostartthread + + ; Start thread + + mov [thread_running],byte 1 + + mov rax , 51 + mov rbx , 1 + mov rcx , read_thread + mov rdx , thread_stack + int 0x60 + + mov rax , 5 + mov rbx , 20 + int 0x60 + + nostartthread: + + ret + + +read_thread: +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; Read data block in a separate thread. +; Doesn't block main process. +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + newth: + + inc dword [threadpos] + and dword [threadpos],dword 3 + + mov rax , 128 + mov rbx , 5 + mov rcx , 1 + + mov rdx , [threadpos] + imul rdx , 0x100000*7 + add rdx , data8 + + mov r8 , [threadpos] + imul r8 , 0x100000 + add r8 , data9 + + mov r9 , 256 + + int 0x60 + + cmp [camera_state],byte 1 + je newth + + mov [thread_running],byte 0 + + mov rax , 512 + int 0x60 + + + + +read_data: +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; Reads and analyzes data blocks from device +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + ; + ; Camera enabled ? + ; + + cmp [camera_state],byte 1 + je continue_read + ret + continue_read: + + ; + ; Start thread + ; + + call read_block + + mov rcx , [threadposprev] + waitforread: + mov rax , 105 + mov rbx , 1 + int 0x60 + cmp rcx , [threadpos] + je waitforread + + mov rcx , [threadpos] + mov [threadposprev],rcx + + mov rdx , [threadpos] + dec rdx + and rdx , 0x3 + imul rdx , 0x100000*7 + add rdx , data8 + + mov r8 , [threadpos] + dec r8 + and r8 , 0x3 + + imul r8 , 0x100000 + add r8 , data9 + + mov [pdata82],rdx ; data - 1024*3 4k aligned + mov [pdata92],r8 ; length - qword + + ; + ; Analyze + ; + + ; + ; Arrange data to data1+ for faster cache access + ; + + mov rsi , [pdata82] + mov rdi , data1 + newarr: + xor rax , rax + mov al , [rsi] + xor rbx , rbx + mov ebx , [rsi+rax-6] + mov [rdi],rbx + add rsi , 1024*3 + add rdi , 8 + cmp rdi , data1+8*256*8 + jbe newarr + + ; + ; Timestamp order + ; + + mov r12 , data4 ; data position + mov r10 , data5 ; length position + + newdataorder2: + + ; Search for lowest timestamp count + + mov rax , 0xfffffffff ; timestamp + + mov r11 , data1 + mov r15 , data1 + 8*256*8 + + lowsearch2: + + ; Timestamp position + + cmp [r11+7],byte 1 ; used ? + je nolowfound2 + cmp eax , [r11] ; smaller ? + jb nolowfound2 + + mov r14 , r11 ; save position + mov eax , [r11] ; save packet num + + nolowfound2: + + add r11 , 8 + + cmp r11 , r15 + jbe lowsearch2 + + mov r13 , 0xfffffffff + cmp rax , r13 + jae dataintimeorder2 + + mov rdx , r14 + sub rdx , data1 + + mov rbx , rdx + add rbx , [pdata92] + mov [r10],rbx ; save length position to line + add r10 , 8 + + imul rdx , 1024*3/8 + add rdx , [pdata82] + mov [r12], rdx ; save data position to line + add r12 , 8 + + mov [r14+7],byte 1 + + jmp newdataorder2 + + dataintimeorder2: + + markdone: + + ; Mark end of list + + mov [r12+00],dword 0xfffffff + mov [r12+08],dword 0xfffffff + mov [r12+16],dword 0xfffffff + mov [r12+24],dword 0xfffffff + + ; + ; Display frames in sent data + ; + + mov r12 , data4 + call display_frame_yuv + call record_picture + + mov r15 , 0 + yesnewframe: + push r15 + mov r12 , [framebegin] + add r12 , 8 + call display_frame_yuv + call record_picture + pop r15 + inc r15 + cmp r15 , 50 + ja nonewframes + cmp rsi , 0 + je yesnewframe + nonewframes: + + inc dword [frames_per_second] + inc dword [frames_per_second_missed] + + ret + + + +display_number: +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; Displays scroll values +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + push rax rbx rcx rdx rsi + + push rcx rdx + mov rax , 13 + mov rbx , rdx + sub rbx , 2 + mov rcx , rdx + sub rcx , 2 + mov bx , 6*3 + shl rcx , 32 + add rcx , 11 + mov rdx , 0xffffff + int 0x60 + pop rdx rcx + + mov rax , 47 + mov rbx , 3 * 65536 + 0*256 + mov rsi , 0x000000 + int 0x60 + + pop rsi rdx rcx rbx rax + + ret + + +get_frame_size: +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; Counts the number of bytes in frame +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + mov rax , 0 + + mov r12 , [framebegin] + + mov rsi , [r12] + + cmp rsi , 0xfffffff + jae cfrl2 + + ; rsi = data area + + mov rcx , [rsi+1] + and rcx , 1 + + mov r10 , r12 + add r10 , data5 + sub r10 , data4 + mov r10 , [r10] + + ; r10 = data count area + + movzx rax , word [r10] + and rax , 0xfff + + movzx rbx , byte [rsi] + and rbx , 0x7f + sub rax , rbx + + cfrl1: + + add r12 , 8 + + mov rsi , [r12] + cmp rsi , 0xfffffff + jae cfrl2 + + ; rsi = data area + + mov rdx , [rsi+1] + and rdx , 1 + + ; last block found -> exit + + cmp rcx , rdx + jne cfrl2 + + mov r10 , r12 + add r10 , data5 + sub r10 , data4 + mov r10 , [r10] + + ; r10 = data count area + + movzx rbx , word [r10] + and rbx , 0xfff + + movzx r8 , byte [rsi] + and r8 , 0x7f + + cmp rbx , r8 + jbe cfrl1 + + add rax , rbx + sub rax , r8 + + jmp cfrl1 + + cfrl2: + + ret + + + +separate_data: +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; Separates picture data from received packets +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + mov r14 , [framebegin] + + mov rdi , data3 + + testnewline: + + mov r10 , [r14] ; data content position + + mov rsi , r14 + add rsi , data5 + sub rsi , data4 + mov rsi , [rsi] ; data length position + + cmp [r14], dword 0xfffffff + je nothisdata + cmp r14 , data4 + 8*256*8 + jae nothisdata + + mov rcx , [rsi] + and rcx , 0xfff + + movzx rdx , byte [r10] + and rdx , 0x7f + + cmp rcx , rdx + jbe nothisc + + mov rsi , r10 + add rsi , rdx + + sub rcx , rdx + and rcx , 4096-1 + + cld + rep movsb + + mov rcx , [resx_resy_2] + add rcx , data3 + + cmp rdi , rcx + ja nothisdata + + nothisc: + + add r14 , 8 + + jmp testnewline + + nothisdata: + + ret + + + +display_frame_yuv: +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; Displays wanted frame at data from video device +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + ; + ; Search for beginning of frame + ; + + mov [framebegin],dword data4 + + jmp frbl32 + + newframesearch2: + + mov rsi , [r12] + + cmp rsi , 0xfffffff + jae frbl312 + + mov rcx , [rsi+1] + and rcx , 1 + + frbl12: + + add r12 , 8 + mov rsi , [r12] + + cmp rsi , 0xfffffff + jae frbl312 + + mov rdx , [rsi+1] + and rdx , 1 + + cmp rdx , rcx + je frbl12 + + frbl32: + + mov [framebegin],r12 + + ; + ; Check framesize + ; + + call get_frame_size + cmp rax , [resx_resy_2] + je framesizefine + + ; If framesize if not acceptable, search for next frame + + mov r12 , [framebegin] + add r12 , 8 + jmp newframesearch2 + + framesizefine: + + jmp displayframe + + ; + + frbl312: + + mov rsi , 1 ; no more frames + ret + + displayframe: + + mov r12 , [framebegin] + mov [found_frame],r12 + + ; + + call separate_data + + ; + ; Form picture YUV -> RGB + ; + + mov rsi , data3 + + mov rdi , data6 + mov r15 , [resx_resy_4] + add r15 , data6 + + npixell1: + + ; Effect: none + + cmp [eo+1],byte '>' + jne noeffectoff + movzx r8 , byte [rsi] + movzx r9 , byte [rsi+1] + movzx r10 , byte [rsi+3] + call calculate_yuv + mov [rdi+0],edx + movzx r8 , byte [rsi+2] + movzx r9 , byte [rsi+1] + movzx r10 , byte [rsi+3] + call calculate_yuv + mov [rdi+4],edx + jmp pixelsdone + noeffectoff: + + ; Effect: Blur + + cmp [eb+1],byte '>' + jne noeffectblur + movzx r8 , byte [rsi] + movzx r9 , byte [rsi+1] + movzx r10 , byte [rsi+3] + call calculate_yuv + shr edx , 1 + and edx , 0x7f7f7f + shr dword [rdi],byte 1 + and dword [rdi],dword 0x7f7f7f + add [rdi],edx + movzx r8 , byte [rsi+2] + movzx r9 , byte [rsi+1] + movzx r10 , byte [rsi+3] + call calculate_yuv + shr edx , 1 + and edx , 0x7f7f7f + shr dword [rdi+4],byte 1 + and dword [rdi+4],dword 0x7f7f7f + add [rdi+4],edx + jmp pixelsdone + noeffectblur: + + ; Effect: Negative + + cmp [en+1],byte '>' + jne noeffectnegative + movzx r8 , byte [rsi] + movzx r9 , byte [rsi+1] + movzx r10 , byte [rsi+3] + call calculate_yuv + not edx + mov [rdi+0],edx + movzx r8 , byte [rsi+2] + movzx r9 , byte [rsi+1] + movzx r10 , byte [rsi+3] + call calculate_yuv + not edx + mov [rdi+4],edx + jmp pixelsdone + noeffectnegative: + + pixelsdone: + + add rdi , 8 + + add rsi , 4 + + cmp rdi , r15 + jbe npixell1 + + call fps_delay + + call display_image_yuv + + display_exit: + + inc dword [frames_per_second] + + mov rsi , 0 + ret + + + + +display_image_yuv: +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; Displays image +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + mov rax , 7 + mov rbx , 15 shl 32 + mov rcx , (49) shl 32 + add rbx , [resx] + add rcx , [resy] + mov rdx , data6 + mov r8 , 0 + mov r9 , 0x1000000 + mov r10 , 4 + int 0x60 + + ret + + +calculate_yuv: +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; Calculates RGB from YUV +; +; In: r8,r9,r10 - YUV +; +; Out: rdx - RGB +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + push rbx rcx r11 + + mov rcx , r8 + sub rcx , 16 ; ?! + mov rdx , r9 + sub rdx , 128 + mov r8 , r10 + sub r8 , 128 + + ; For all components + + imul rcx , 298 + + ; + + mov r9 , 0 ; limit low + mov r10 , 255 ; limit high + + ; Red + + push rcx r8 + + imul r8 , 409 + + add rcx , r8 + add rcx , 128 + shr rcx , 8 + + imul rcx , [scroll_value_1_multiply] + shr rcx , 7 + + cmp rcx , 0xfffffff + cmovae rcx , r9 + cmp rcx , r10 + cmova rcx , r10 + + mov r11 , rcx + + pop r8 rcx + + ; Green + + push rcx rdx + + imul rdx , 100 + imul r8 , 208 + + sub rcx , rdx + sub rcx , r8 + add rcx , 128 + shr rcx , 8 + + imul rcx , [scroll_value_2_multiply] + shr rcx , 7 + + cmp rcx , 0xfffffff + cmovae rcx , r9 + cmp rcx , r10 + cmova rcx , r10 + + shl r11 , 8 + mov r11b , cl + + pop rdx rcx + + ; Blue + + imul rdx , 516 + + add rcx , rdx + add rcx , 128 + shr rcx , 8 + + imul rcx , [scroll_value_3_multiply] + shr rcx , 7 + + cmp rcx , 0xfffffff + cmovae rcx , r9 + cmp rcx , r10 + cmova rcx , r10 + + shl r11 , 8 + mov r11b , cl + + mov rdx , r11 + + pop r11 rcx rbx + + ret + + + +acalculate_yuv: +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; YUV to RGB +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + push rax rbx rcx r8 + + mov rcx , r8 + sub rcx , 16 + mov rdx , r9 + sub rdx , 128 + mov r8 , r10 + sub r8 , 128 + + ; Red + + push rcx rdx r8 + + imul rcx , 298 + imul r8 , 409 + + add rcx , r8 + add rcx , 128 + shr rcx , 8 + + imul rcx , [scroll_value_1_multiply] + shr rcx , 7 + + cmp rcx , 0xfffffff + jb norcxzero1 + mov rcx , 0 + norcxzero1: + cmp rcx , 255 + jbe rcxfine + mov rcx , 255 + rcxfine: + mov [red],cl + + pop r8 rdx rcx + + ; Green + + push rcx rdx r8 + + imul rcx , 298 + imul rdx , 100 + imul r8 , 208 + + sub rcx , rdx + sub rcx , r8 + add rcx , 128 + shr rcx , 8 + + imul rcx , [scroll_value_2_multiply] + shr rcx , 7 + + cmp rcx , 0xfffffff + jb norcxzero2 + mov rcx , 0 + norcxzero2: + cmp rcx , 255 + jbe rcxfine2 + mov rcx , 255 + rcxfine2: + mov [green],cl + + pop r8 rdx rcx + + ; Blue + + push rcx rdx r8 + + imul rcx , 298 + imul rdx , 516 + add rcx , rdx + add rcx , 128 + shr rcx , 8 + + imul rcx , [scroll_value_3_multiply] + shr rcx , 7 + + cmp rcx , 0xfffffff + jb norcxzero3 + mov rcx , 0 + norcxzero3: + cmp rcx , 255 + jbe rcxfine3 + mov rcx , 255 + rcxfine3: + mov [blue],cl + + pop r8 rdx rcx + + ; + + mov rdx , [red] + shl rdx , 8 + add rdx , [green] + shl rdx , 8 + add rdx , [blue] + + pop r8 rcx rbx rax + + ret + + +form_picture: +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; Forms BMP picture to data10+ +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + ; Header + + mov rsi , bmpheader + mov rdi , data10 + mov rcx , 54 + cld + rep movsb + + mov rax , [sizex] + mov [data10+0x12],eax + + mov rbx , [sizey] + mov [data10+0x16],ebx + + ; Picture data + + mov rdi , data10+54 + mov rsi , [sizex] + imul rsi , [sizey] + imul rsi , 4 + add rsi , data6 + mov rcx , 0 + newpicdata: + + sub rsi , [sizex] + sub rsi , [sizex] + sub rsi , [sizex] + sub rsi , [sizex] + + push rcx rsi + mov rcx , [sizex] + datamovel1: + mov eax , [rsi] + mov [rdi],eax + add rsi , 4 + add rdi , 3 + loop datamovel1 + pop rsi rcx + + inc rcx + cmp rcx , [sizey] + jb newpicdata + + ret + + +save_snap: +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; Saves BMP snap +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + push qword [camera_state] + + mov rax , 5 + mov rbx , 10 + int 0x60 + + call turn_camera_off + + ; Saving BMP text + + mov rbx , textsaving2 + call display_text + + mov rax , [resx] + mov [sizex],rax + mov rax , [resy] + mov [sizey],rax + + ; Form picture to data10+ + + call form_picture + + ; Snap count + + mov rax , [snapcount] + xor rdx , rdx + mov rbx , 10 + div rbx + mov [filesave+12],dl + mov [filesave+11],al + add [filesave+11],word '00' + + ; Delete file if persent + + mov rax , 58 + mov rbx , 2 + mov r9 , filesave + int 0x60 + + ; Save file + + mov rax , 58 + mov rbx , 1 + mov rcx , 0 + mov rdx , [sizex] + imul rdx , [sizey] + imul rdx , 3 + add rdx , 54 + mov r8 , data10 + mov r9 , filesave + int 0x60 + + ; Increase snap counter + + inc dword [snapcount] + + ; Draw button + + call draw_snap_button + + ; Draw image + + call display_image_yuv + + pop rax + cmp rax , 1 + jne noturnbackon + mov rax , 5 + mov rbx , 10 + int 0x60 + call turn_camera_on + noturnbackon: + + ret + + +display_text: + + mov rax , 0x4 + mov rcx , 20 + mov rdx , 54 + mov rsi , 0xffffff + mov r9 , 0x1 + int 0x60 + + ret + + + +record_picture: +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; Records picture for AVI +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + cmp [record_state],byte 1 + jne recl2 + + ; 10 fps + + mov rbx , textrec + call display_text + + mov rax , 26 + mov rbx , 1 + mov rcx , fps_data + mov rdx , 1024 + int 0x60 + mov rax , [fps_data+384] + cmp rax , [record_next] + jb recl2 + add rax , 100 + mov [record_next],rax + + ; All recorded ? + + mov rax , [resx_resy_4] + add rax , 4*2 + imul rax , 50 + add rax , data10+(avi_end-avi_start) + + cmp [record_position], rax + jb recfine + mov [record_state],byte 0 + + call display_image_yuv + + ; Saving text + + mov rbx , textsaving + call display_text + + call save_clip + + call display_image_yuv + + ret + recfine: + + call display_image_yuv + + mov rax , [record_position] + sub rax , data10 + xor rdx , rdx + mov rbx , [resx_resy_4] + imul rbx , 10 + div rbx + add rax , 48+1 + mov [textrec+5],al + + mov rbx , textrec + call display_text + + mov rdi , [record_position] + mov [rdi], dword '00db' + + mov rsi, [resx_resy_4] + + mov [rdi+4], esi + + add rdi , 8 + mov rsi , data6 + add rsi , [resx_resy_4] + sub rsi , [resx] + sub rsi , [resx] + sub rsi , [resx] + sub rsi , [resx] + recl1: + + push rsi rdi + mov rcx , [resx] + shl rcx , 2 + cld + rep movsb + pop rdi rsi + + add rdi , [resx] + add rdi , [resx] + add rdi , [resx] + add rdi , [resx] + + sub rsi , [resx] + sub rsi , [resx] + sub rsi , [resx] + sub rsi , [resx] + + cmp rsi , data6 + jae recl1 + + mov rsi , [resx_resy_4] + add rsi , 8 + + add [record_position],esi + + recl2: + + ret + + +save_clip: +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; Saves AVI clip +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + push qword [camera_state] + + mov rax , 5 + mov rbx , 10 + int 0x60 + + call turn_camera_off + + ; Header + + mov rsi , avi_start + mov rdi , data10 + mov rcx , avi_end-avi_start + cld + rep movsb + + ; idx1 + + mov rsi , idx1_start + mov rdi , data10 + (avi_end-avi_start) + ((4*2+320*240*4)*50) + mov rcx , idx1_end-idx1_start + cld + rep movsb + + ; Filecount + + mov rax , [clipcount] + xor rdx , rdx + mov rbx , 10 + div rbx + mov [filesaveavi+12],dl + mov [filesaveavi+11],al + add [filesaveavi+11],word '00' + + ; Delete file if persent + + mov rax , 58 + mov rbx , 2 + mov r9 , filesaveavi + int 0x60 + + ; Save file + + mov rax , 58 + mov rbx , 1 + mov rcx , 0 + mov rdx , (avi_end-avi_start)+(4*2+320*240*4)*50+(idx1_end-idx1_start) + mov r8 , data10 + mov r9 , filesaveavi + int 0x60 + + ; Increase snap counter + + inc dword [clipcount] + + ; Draw button + + call draw_clip_button + + pop rax + cmp rax , 1 + jne noturnbackonavi + mov rax , 5 + mov rbx , 10 + int 0x60 + call turn_camera_on + noturnbackonavi: + + ret + + + +draw_window: +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; Draws window +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + mov rax , 0xC ; Beginning of window draw + mov rbx , 0x1 + int 0x60 + + ; Draw window + + mov rax , 0x0 + mov rbx , 150 shl 32 + 480 + mov rcx , 80 shl 32 + 310 + mov rdx , 0x0000000000FFFFFF + mov r8 , 0x0000000000000001 + mov r9 , window_label + mov r10 , menu_struct + int 0x60 + + ; Start camera button + + mov rax , 8 + mov rbx , [xpos] + shl rbx , 32 + add rbx , 116 + mov rcx , (247+21-21) shl 32 + 21 + mov rdx , 101 + mov r8 , 0 + mov r9 , string_start_camera + int 0x60 + + ; Stop camera button + + mov rax , 8 + mov rbx , [xpos] + shl rbx , 32 + add rbx , 116 + mov rcx , (247+21+21-21) shl 32 + 21 + mov rdx , 102 + mov r8 , 0 + mov r9 , string_stop_camera + int 0x60 + + ; Server button + + call server_button + + ; Snap picture button + + call draw_snap_button + + ; Clip button + + call draw_clip_button + + ; Resolution buttons + + call resolution_buttons + + ; Display image + + call display_image_yuv + + ; Display text + + mov rax , 0x4 + mov rbx , text + mov rcx , [xpos] + add rcx , 4+scx-6 + mov rdx , 132 + mov rsi , 0x0 + mov r9 , 0x1 + newline: + int 0x60 + add rbx , 0x1F + add rdx , 13-2 + cmp [rbx],byte 'x' + jne newline + + ; Scrolls + + call draw_scroll_1 + call draw_scroll_2 + call draw_scroll_3 + call draw_scroll_values + + ; Camera status + + mov [camera_connection_status],dword 2 + call check_camera_state + + ; FPS + + call display_frames_per_second + + mov rax , 0xC + mov rbx , 0x2 + int 0x60 + + ret + + +server_button: + + ; Server button + + mov rax , 8 + mov rbx , [xpos] + shl rbx , 32 + add rbx , 116 + mov rcx , (173-20+4+b3y) shl 32 + bys + mov rdx , 105 + mov r8 , 0 + mov r9 , string_server_off + cmp [serveronoff],byte 3 + je serverl1 + mov r9 , string_server_on + serverl1: + int 0x60 + + ret + + +resolution_buttons: + + ; Resolution buttons + + mov rax , 8 + mov rbx , [xpos] ; shl 32 + 116/3+1 + shl rbx , 32 + add rbx , 116/3+1 + mov rcx , rby ; 236-20-2) shl 32 + bys + mov rdx , 121 + mov r8 , 0 + mov r9 , string_res_160 + int 0x60 + + mov rax , 8 + mov rbx , [xpos] + add rbx , 116/3+1 + shl rbx , 32 + add rbx , 116/3 + mov rcx , rby ; (236-20-2) shl 32 + bys + mov rdx , 122 + mov r8 , 0 + mov r9 , string_res_320 + int 0x60 + + mov rax , 8 + mov rbx , [xpos] + add rbx , 116/3*2+1 + shl rbx , 32 + add rbx , 116/3+1 + mov rcx , rby ; (236-20-2) shl 32 + bys + mov rdx , 123 + mov r8 , 0 + mov r9 , string_res_640 + int 0x60 + + ret + + +draw_snap_button: +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; Draws snap button +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + ; Snap count + + mov rax , [snapcount] + xor rdx , rdx + mov rbx , 10 + div rbx + mov [string_snap_save+12],dl + mov [string_snap_save+11],al + add [string_snap_save+11],word '00' + + ; Save snap button + + mov rax , 8 + mov rbx , [xpos] + shl rbx , 32 + add rbx , 116 + mov rcx , (194-18+2+b3y) shl 32 + bys + mov rdx , 103 + mov r8 , 0 + mov r9 , string_snap_save + int 0x60 + + ret + + +draw_clip_button: +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; Draws video clip button +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + ; Clip count + + mov rax , [clipcount] + xor rdx , rdx + mov rbx , 10 + div rbx + mov [string_clip_save+12],dl + mov [string_clip_save+11],al + add [string_clip_save+11],word '00' + + ; Save clip button + + mov rax , 8 + mov rbx , [xpos] + shl rbx , 32 + add rbx , 116 + mov rcx , (215-16+b3y) shl 32 + bys + mov rdx , 104 + mov r8 , 0 + mov r9 , string_clip_save + int 0x60 + + ret + + +draw_scroll_values: +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; Draws scroll RGB values +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + mov rbx , [scroll_value_1] + sub rbx , 10000 + mov rcx , 200 + sub rcx , rbx + call get_multiplier + mov [scroll_value_1_multiply], r8 + mov rdx , [xpos] + add rdx , 4+scx + shl rdx , 32 + add rdx , 140-14+6+scl + call display_number + + mov rbx , [scroll_value_2] + sub rbx , 20000 + mov rcx , 200 + sub rcx , rbx + call get_multiplier + mov [scroll_value_2_multiply], r8 + mov rdx , [xpos] + add rdx , 4+7*6+scx + shl rdx , 32 + add rdx , 140-14+6+scl + call display_number + + mov rbx , [scroll_value_3] + sub rbx , 30000 + mov rcx , 200 + sub rcx , rbx + call get_multiplier + mov [scroll_value_3_multiply], r8 + mov rdx , [xpos] + add rdx , 4+14*6+scx + shl rdx , 32 + add rdx , 140-14+6+scl + call display_number + + ret + + +get_multiplier: +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; Multiplier for colour values +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + push rax rbx rcx rdx + + shl rcx , 7 + mov rax , rcx + xor rdx , rdx + mov rbx , 100 + div rbx + mov r8 , rax + + pop rdx rcx rbx rax + + ret + + +draw_scroll_1: +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; Scroll 1 +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + mov rax , 113 + mov rbx , 1 + mov rcx , 10000 + mov rdx , 201 + mov r8 ,[scroll_value_1] + mov r9 , [xpos] + add r9 , 7+scx + mov r10 , 50 + mov r11 , 80-12+6+scl + int 0x60 + + ret + + +draw_scroll_2: +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; Scroll 2 +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + mov rax , 113 + mov rbx , 1 + mov rcx , 20000 + mov rdx , 201 + mov r8 ,[scroll_value_2] + mov r9 , [xpos] + add r9 , 7+7*6+scx + mov r10 , 50 + mov r11 , 80-12+6+scl + int 0x60 + + ret + + +draw_scroll_3: +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; Scroll 3 +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + mov rax , 113 + mov rbx , 1 + mov rcx , 30000 + mov rdx , 201 + mov r8 ,[scroll_value_3] + mov r9 , [xpos] + add r9 , 7+14*6+scx + mov r10 , 50 + mov r11 , 80-12+6+scl + int 0x60 + + ret + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; Data area +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +scroll_value_1: dq 10100 +scroll_value_2: dq 20100 +scroll_value_3: dq 30100 + +scroll_value_1_multiply: dq 10100 +scroll_value_2_multiply: dq 20100 +scroll_value_3_multiply: dq 30100 + +text: + + db ' xxx% xxx% xxx% ',0 + db ' Red Green Blue ',0 + db 'x' + +string_res_160: db '160',0 +string_res_320: db '320',0 +string_res_640: db '640',0 + +picsend: dq 0x0 +show_fps: dq 0x0 +fastercount: dq 0x0 + +string_start_camera: db 'START',0 +string_stop_camera: db 'STOP',0 +string_snap_save: db '/USB/1/SNAPXX.BMP',0 +string_clip_save: db '/USB/1/CLIPXX.AVI',0 + +string_server_off: db 'SERVER: OFF',0 +string_server_on: db 'PORT 8090 OPEN',0 +string_resolution_320: db '320x240 required.',0 +string_fps: db 'Sent: FPS: / ',0 +string_screen_req: db '800x600 screen resolution required.',0 + + +string_camera_disconnected: + + db 'Camera disconnected.',0 + +read_wait: dq 0x0 + +pdata82: dq data8 +pdata92: dq data9 + +scanstart: dq 0x0 +threadpos: dq 0x0 +fps_n: dq 0x0 + +threadposprev: dq 0x0 +frames_per_second: dq 0x0 + +fpsx: dq 0x0 +record_next: dq 0x0 + +camera_connection_status: dq 0x2 +frames_per_second_missed: dq 0x0 + +xr: dq 160,320,640 +yr: dq 120,240,480 +xp: dq 346,346,666 +cb: dq 001b,010b,100b + +serveronoff: dq 3 ; 1=on-2=closing-3=closed + +server_socket: dq 0x0 + +resx: dq 320 +resy: dq 240 +xpos: dq 346 + +resx_resy_2: dq 320*240*2 +resx_resy_3: dq 320*240*3 +resx_resy_4: dq 320*240*4 + +sconf: dq 0x0 +sizex: dq 0x0 +sizey: dq 0x0 + +filesaveavi: db '/usb/1/clipxx.avi',0 +record_state: dq 0x0 +clipcount: dq 0x0 +filesave: db '/usb/1/snapxx.bmp',0 +snapcount: dq 0x0 + +textrec: db 'REC (1/5s)',0 +textsaving: db 'Saving AVI-file, which might take a minute...',0 +textsaving2: db 'Saving BMP-file...',0 + +record_position: dq data10 + 1208 + +red: dq 0x0 +green: dq 0x0 +blue: dq 0x0 + +framebegin: dq 0x0 +found_frame: dq 0x0 + +framestart: dq 0x0 +framenumber: dq 0x0 +timedifference: dq 0x0 +headerstart: dq 0x0 +next_update: dq 0x0 +thread_running: dq 0x0 +read_position: dq 0x0 + +pre_read_block: dq 0x1 +analyze_block: dq 0x0 +analyze_block_position: dq 0x0 + +readon: dq 0x1 +camera_state: dq 0x0 + +tsc_base: dq 0x0 +fps_next: dq 0x0 +fps_add: dq 34 ; 30fps +tsc_next: dq 0x0 + +color: dq 0x0 +ypos: dq 0x0 +maxcount: dq 0x0 +framec: dq 0x0 +datapos: dq 0x0 +savecount: dq 0x0 + +framecount: dq 0x0 +currentframe: dq 0x0 +bytesperframe: dq 0x0 +jpgheaders: dq 0x0 +jpgheadersmem: dq 0x0 +bytesperframejpg: dq 0x0 +bytespersecond: dq 0x0 +framesinsample: dq 0x0 + +data_amount: dq 0x0 +data_valid: dq 0x0 +data_pre: dq 0x0 +data_unavailable: dq 0x0 +datasent: dq 0x0 + +window_label: + + db 'WEBCAM',0 ; Window label + +menu_struct: ; Menu Struct + + dq 0 ; Version + + dq 0x100 ; Start value of ID to return ( ID + Line ) + ; Returned when menu closes and + ; user made no selections. + + db 0,'SETUP',0 + +sta1: db 1,'> Stats Off ',0 +sta2: db 1,' Stats On ',0 + + db 1,'-',0 + +eo: db 1,'> Normal ',0 +eb: db 1,' Blur ',0 +en: db 1,' Negative',0 + + db 1,'-',0 + + db 1,'Quit',0 + + db 255 ; End of Menu Struct + + +html_header_index: + + db 'HTTP/1.1 200 OK',13,10 + db 'Server: Menuet',13,10 + db 'Connection: close',13,10 + db 'Content-Length: 47',13,10 + db 'Content-Type: text/html',13,10 + db 13,10 + db '',13,10 + +h_i_len: + + + +html_header: + + db 'HTTP/1.1 200 OK',13,10 + db 'Server: Menuet',13,10 + db 'Connection: close',13,10 + db 'Content-Length: ' +hsz: db '00230454' + db 13,10 + db 'Content-Type: image/bmp',13,10,13,10 + +h_len: + + +bmpheader: + + db 66 + db 77 + db 54 + db 12 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 54 + db 0 + db 0 + db 0 + db 40 + db 0 + db 0 + db 0 + db 32 ; x + db 0 + db 0 + db 0 + db 32 ; y + db 0 + db 0 + db 0 + db 1 + db 0 + db 24 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 12 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + +numframes equ 50 + +avi_start: + + db 'RIFF' + dd 15361432-8 + + db 'AVI ' + + db 'LIST' + dd l4_end-l4 + l4: + db 'hdrl' + dd 'avih' + dd 0x38 + dd 100000 ; microseconds between frames + dd 0x320000 ; maxbytespersec + dd 0x200 ; paddinggranularity + dd 0x810 ; flags + dd numframes ; total frames + dd 0x00 ; zero for non-interleaved + dd 0x01 ; number of streams + dd 330*240*4 ; suggested buffer size + dd 320 ; image size x + dd 240 ; image size y + dd 0,0,0,0 + + db 'LIST' + dd l6_end-l6 + l6: + db 'strl' + db 'strh' + dd 0x38 + db 'vids' + db 'DIB ' ; handler + dd 0x0 ; flags + dd 0x0 ; priority and language + dd 0x0 ; initial frames + dd 01000000 ; scale + dd 10000000 ; rate + dd 0x0 ; start + dd numframes ; number of frames + dd 320*240*4 ; 0x4b008 ; suggested buffer size + dd 0x0 ; quality + dd 4 ; sample size + dd 0x0 ; rect struct + dd 0x0 + + db 'strf' + dd 0x28 ; length + dd 0x28 ; length II + dd 320 ; width + dd 240 ; height + dd 0x200001 ; planes and bitcount + dd 0x0 ; compression + dd 320*240*4 ; image size + dd 0x0 ; xpelspermeter + dd 0x0 ; ypelspermeter + dd 0x0 ; clrused + dd 0x0 ; clrimportant + + l4_end: + l6_end: + + db 'LIST' + dd 4+(2*4+320*240*4)*50 + l5: + db 'movi' + +avi_end: + +idx1_start: + + db 'idx1' + dd indx12-indx11 + indx11: + db '00db' + dd 16 + dd 0x4+(320*240*4+8)*0 + dd 320*240*4 + db '00db' + dd 16 + dd 0x4+(320*240*4+8)*1 + dd 320*240*4 + db '00db' + dd 16 + dd 0x4+(320*240*4+8)*2 + dd 320*240*4 + db '00db' + dd 16 + dd 0x4+(320*240*4+8)*3 + dd 320*240*4 + db '00db' + dd 16 + dd 0x4+(320*240*4+8)*4 + dd 320*240*4 + db '00db' + dd 16 + dd 0x4+(320*240*4+8)*5 + dd 320*240*4 + db '00db' + dd 16 + dd 0x4+(320*240*4+8)*6 + dd 320*240*4 + db '00db' + dd 16 + dd 0x4+(320*240*4+8)*7 + dd 320*240*4 + db '00db' + dd 16 + dd 0x4+(320*240*4+8)*8 + dd 320*240*4 + db '00db' + dd 16 + dd 0x4+(320*240*4+8)*9 + dd 320*240*4 + + db '00db' + dd 16 + dd 0x4+(320*240*4+8)*10 + dd 320*240*4 + db '00db' + dd 16 + dd 0x4+(320*240*4+8)*11 + dd 320*240*4 + db '00db' + dd 16 + dd 0x4+(320*240*4+8)*12 + dd 320*240*4 + db '00db' + dd 16 + dd 0x4+(320*240*4+8)*13 + dd 320*240*4 + db '00db' + dd 16 + dd 0x4+(320*240*4+8)*14 + dd 320*240*4 + db '00db' + dd 16 + dd 0x4+(320*240*4+8)*15 + dd 320*240*4 + db '00db' + dd 16 + dd 0x4+(320*240*4+8)*16 + dd 320*240*4 + db '00db' + dd 16 + dd 0x4+(320*240*4+8)*17 + dd 320*240*4 + db '00db' + dd 16 + dd 0x4+(320*240*4+8)*18 + dd 320*240*4 + db '00db' + dd 16 + dd 0x4+(320*240*4+8)*19 + dd 320*240*4 + + db '00db' + dd 16 + dd 0x4+(320*240*4+8)*20 + dd 320*240*4 + db '00db' + dd 16 + dd 0x4+(320*240*4+8)*21 + dd 320*240*4 + db '00db' + dd 16 + dd 0x4+(320*240*4+8)*22 + dd 320*240*4 + db '00db' + dd 16 + dd 0x4+(320*240*4+8)*23 + dd 320*240*4 + db '00db' + dd 16 + dd 0x4+(320*240*4+8)*24 + dd 320*240*4 + db '00db' + dd 16 + dd 0x4+(320*240*4+8)*25 + dd 320*240*4 + db '00db' + dd 16 + dd 0x4+(320*240*4+8)*26 + dd 320*240*4 + db '00db' + dd 16 + dd 0x4+(320*240*4+8)*27 + dd 320*240*4 + db '00db' + dd 16 + dd 0x4+(320*240*4+8)*28 + dd 320*240*4 + db '00db' + dd 16 + dd 0x4+(320*240*4+8)*29 + dd 320*240*4 + + db '00db' + dd 16 + dd 0x4+(320*240*4+8)*30 + dd 320*240*4 + db '00db' + dd 16 + dd 0x4+(320*240*4+8)*31 + dd 320*240*4 + db '00db' + dd 16 + dd 0x4+(320*240*4+8)*32 + dd 320*240*4 + db '00db' + dd 16 + dd 0x4+(320*240*4+8)*33 + dd 320*240*4 + db '00db' + dd 16 + dd 0x4+(320*240*4+8)*34 + dd 320*240*4 + db '00db' + dd 16 + dd 0x4+(320*240*4+8)*35 + dd 320*240*4 + db '00db' + dd 16 + dd 0x4+(320*240*4+8)*36 + dd 320*240*4 + db '00db' + dd 16 + dd 0x4+(320*240*4+8)*37 + dd 320*240*4 + db '00db' + dd 16 + dd 0x4+(320*240*4+8)*38 + dd 320*240*4 + db '00db' + dd 16 + dd 0x4+(320*240*4+8)*39 + dd 320*240*4 + + db '00db' + dd 16 + dd 0x4+(320*240*4+8)*40 + dd 320*240*4 + db '00db' + dd 16 + dd 0x4+(320*240*4+8)*41 + dd 320*240*4 + db '00db' + dd 16 + dd 0x4+(320*240*4+8)*42 + dd 320*240*4 + db '00db' + dd 16 + dd 0x4+(320*240*4+8)*43 + dd 320*240*4 + db '00db' + dd 16 + dd 0x4+(320*240*4+8)*44 + dd 320*240*4 + db '00db' + dd 16 + dd 0x4+(320*240*4+8)*45 + dd 320*240*4 + db '00db' + dd 16 + dd 0x4+(320*240*4+8)*46 + dd 320*240*4 + db '00db' + dd 16 + dd 0x4+(320*240*4+8)*47 + dd 320*240*4 + db '00db' + dd 16 + dd 0x4+(320*240*4+8)*48 + dd 320*240*4 + db '00db' + dd 16 + dd 0x4+(320*240*4+8)*49 + dd 320*240*4 + + indx12: + +idx1_end: + + +data_boot_info: times 8*30 db ? + + +fps_data: + + times 2048 db ? + + ; + + times 1024 db ? ; Stack server + +server_stack: + + times 1024 db ? ; Stack read + +thread_stack: + + times 1024 db ? ; Stack main + +image_end: + + + + + + + + + \ No newline at end of file