63,9 → 63,6 |
|
USE_COM_IRQ equ 1 ; make irq 3 and irq 4 available for PCI devices |
|
; Enabling the next line will enable serial output console |
;debug_com_base equ 0x3f8 ; 0x3f8 is com1, 0x2f8 is com2, 0x3e8 is com3, 0x2e8 is com4, no irq's are used |
|
include "proc32.inc" |
include "kglobals.inc" |
|
344,8 → 341,8 |
mov [screen_workarea.bottom],eax |
movzx eax,word [BOOT_VAR+0x9008] ; screen mode |
mov [SCR_MODE],eax |
mov eax,[BOOT_VAR+0x9014] ; Vesa 1.2 bnk sw add |
mov [BANK_SWITCH],eax |
; mov eax,[BOOT_VAR+0x9014] ; Vesa 1.2 bnk sw add == not used any more |
; mov [BANK_SWITCH],eax |
movzx eax, word[BOOT_VAR+0x9001] ; for other modes |
mov [BytesPerScanLine],ax |
mov [_display.pitch], eax |
375,8 → 372,8 |
; === EGA, VGA & Vesa 1.2 modes not supported === |
setvesa20: |
v20ga32: |
mov [PUTPIXEL],dword put_pixel |
mov [GETPIXEL],dword get_pixel |
; mov [PUTPIXEL],dword put_pixel |
; mov [GETPIXEL],dword get_pixel |
|
; -------- Fast System Call init ---------- |
.SEnP: |
514,8 → 511,8 |
mov [BgrDrawMode],eax |
mov [BgrDataWidth],eax |
mov [BgrDataHeight],eax |
mov [mem_BACKGROUND], 4 |
mov [img_background], static_background_data |
; mov [mem_BACKGROUND], 4 |
; mov [img_background], static_background_data |
|
mov [SLOT_BASE + 256 + APPDATA.dir_table], sys_pgdir - OS_BASE |
|
603,17 → 600,6 |
mov esi, boot_memdetect |
call boot_log |
|
; <<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>> |
mov ebx, img_test_struct |
mov ecx, 3*65536 + 4 |
mov edx, 32*65536 + 512 |
mov esi, 32 |
xor edi, edi |
mov ebp, edi |
call sys_putimage_palette.forced |
|
;<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>> |
|
movzx ecx, word [boot_y] |
or ecx, (10+29*6) shl 16 ; "Determining amount of memory" |
sub ecx, 10 |
645,16 → 631,9 |
|
mov esi,boot_bgr |
call boot_log |
call init_background |
call _init_background ;graph32.inc ? |
call calculatebackground |
|
; RESERVE SYSTEM IRQ'S JA PORT'S |
|
; mov esi,boot_resirqports |
; call boot_log |
; call reserve_irqs_ports |
|
|
; SET UP OS TASK |
|
mov esi,boot_setostask |
706,6 → 685,138 |
mov [SLOT_BASE+APPDATA.cursor],eax |
mov [SLOT_BASE+APPDATA.cursor+256],eax |
|
; <<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>> |
|
; mov esi, img_test_struct_8 |
; mov edi, 151 |
|
; mov ebp, edi |
; imul edi, [BytesPerScanLine] |
; add edi, LFB_BASE + 32*4 |
; mov [img_lfb_origin], edi |
; shr ebp, 1 |
; imul ebp, [_WinMapWidth] |
; add ebp, 32/4 |
; add ebp, [_WinMapAddress] |
; mov ecx, ebp |
; add ecx, [_WinMapWidth] |
; mov byte[ecx+1], 2 |
; mov ecx, 6 |
; mov [img_pix_y], ecx |
; mov eax, 1 |
; mov [img_bytes_per_pix], eax |
; mov ebx, 1 |
; bts ebx, 24 |
; mov eax, 8-1 |
; mov [img_pix_x], eax |
; inc eax |
; shr eax, 2 |
; mov [img_map_x], eax |
; mov [img_draw_core_fn], draw_core_8bpp |
; mov [img_draw_edge_fn], draw_edge_8bpp |
; mov [img_buf_line_size], 9 |
; mov [img_palette], img_test_palette |
|
; call draw_aligned_box |
; add edi, 48 |
; mov edx, 8 |
; call draw_unaligned_edge |
; mono |
; bts ebx, 25 |
; add edi, [_WinMapWidth] ; = 1/16 of the screen width |
; mov esi, img_test_struct_1 |
; mov [img_lfb_origin], edi |
; mov ecx, 9 |
; mov [img_map_x], 4 |
; mov [img_bitoffset], 1 |
; mov [img_edgeoffset], 16 |
; mov [img_draw_core_fn], draw_core_1bpp |
; mov [img_draw_edge_fn], draw_edge_1bpp |
; mov [img_buf_line_size], 2 |
; mov [img_bytes_per_pix], 0 |
; call draw_aligned_box |
; add edi, 48 |
; mov edx, 8 |
; call draw_unaligned_edge |
; btr ebx, 25 |
; 32bpp |
; add edi, [_WinMapWidth] ; = 1/16 of the screen width |
; mov esi, img_test_struct_32 |
; mov [img_lfb_origin], edi |
; mov ecx, 6 |
; mov [img_map_x], 2 |
; mov [img_draw_core_fn], draw_core_32bpp |
; mov [img_draw_edge_fn], draw_edge_32bpp |
; mov [img_buf_line_size], 32 |
; mov [img_bytes_per_pix], 4 |
; call draw_aligned_box |
; add edi, 48 |
; mov edx, 8 |
; call draw_unaligned_edge |
|
; 24bpp |
; add edi, [_WinMapWidth] ; = 1/16 of the screen width |
; mov esi, img_test_struct_24 |
; mov [img_lfb_origin], edi |
; mov ecx, 7 |
; mov [img_map_x], 4 |
; mov [img_draw_core_fn], draw_core_24bpp |
; mov [img_draw_edge_fn], draw_edge_24bpp |
; mov [img_buf_line_size], 45 |
; mov [img_bytes_per_pix], 3 |
; call draw_aligned_box |
; add edi, 80 |
; mov edx, 4 |
; call draw_unaligned_edge |
|
; mov [TASK_BASE-twdw + WDATA.box.left], 0 |
; mov [TASK_BASE-twdw + WDATA.box.top], 0 |
; mov eax, [Screen_Max_X] |
; mov [TASK_BASE-twdw + WDATA.box.width], eax |
; mov eax, [Screen_Max_Y] |
; mov [TASK_BASE-twdw + WDATA.box.height], eax |
|
; mov ebx, img_test_struct_24 |
; mov ecx, 16*65536 + 7 |
; mov edx, 512*65536 + 400 |
|
; call _putimage |
|
|
;----------- |
; mov ebx, img_test_struct_32 |
; mov ecx, 6*65536 + 6 |
; mov edx, 32*65536 + 512 |
; mov esi, 32 |
; xor edi, edi |
; mov ebp, edi |
; call sys_putimage_palette.forced |
|
; mov [img_palette], img_test_palette |
; mov [img_bytes_per_pix], 0 |
; mov [img_buf_line_size], 0 |
; mov ebx, img_test_palette |
; mov [img_draw_core_fn], draw_core_0bpp |
; mov [img_draw_edge_fn], draw_edge_0bpp |
; mov ecx, 20*65536 + 9 |
; mov edx, 513*65536 + 401 |
; call _putimage |
|
; mov eax, 561 |
; mov ebx, 461 |
; mov ecx, 555 |
; mov edx, 333 |
; mov edi, 0xAA5533 |
; call _drawbar |
|
|
|
; jmp $ |
|
;<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>> |
|
|
|
; READ TSC / SECOND |
|
mov esi,boot_tsc |
744,17 → 855,18 |
|
call set_variables |
|
|
|
; SET MOUSE |
|
;call detect_devices |
stdcall load_driver, szPS2MDriver |
; stdcall load_driver, szCOM_MDriver |
|
mov esi,boot_setmouse |
call boot_log |
call setmouse |
; call setmouse |
cli |
|
|
; STACK AND FDC |
|
call stack_init |
852,47 → 964,7 |
;// mike.dld ] |
|
|
; Setup serial output console (if enabled) |
|
if defined debug_com_base |
|
; enable Divisor latch |
|
mov dx, debug_com_base+3 |
mov al, 1 shl 7 |
out dx, al |
|
; Set speed to 115200 baud (max speed) |
|
mov dx, debug_com_base |
mov al, 0x01 |
out dx, al |
|
mov dx, debug_com_base+1 |
mov al, 0x00 |
out dx, al |
|
; No parity, 8bits words, one stop bit, dlab bit back to 0 |
|
mov dx, debug_com_base+3 |
mov al, 3 |
out dx, al |
|
; disable interrupts |
|
mov dx, debug_com_base+1 |
mov al, 0 |
out dx, al |
|
; clear + enable fifo (64 bits) |
|
mov dx, debug_com_base+2 |
mov al, 0x7 + 1 shl 5 |
out dx, al |
|
|
end if |
|
; START MULTITASKING |
|
if preboot_blogesc |
933,9 → 1005,6 |
inc edi |
call dtext |
|
; mov [novesachecksum],1000 |
; call checkVga_N13 |
|
popad |
|
ret |
951,11 → 1020,9 |
call window_check_events |
call mouse_check_events |
call checkmisc |
; call checkVga_N13 |
call stack_handler |
call checkidle |
call check_fdd_motor_status |
; call check_ATAPI_device_event |
; call check_fdd_motor_status |
jmp osloop |
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
; ; |
1764,6 → 1831,7 |
test eax, eax |
jz @F |
|
|
stdcall user_free, eax |
@@: |
|
2150,227 → 2218,29 |
bgrlock db 0 |
endg |
|
;=============================== SysFn 15 ================================ |
; no background service supported so far ... |
;=========================================== |
|
sys_background: |
|
cmp ebx,1 ; BACKGROUND SIZE |
jnz nosb1 |
test ecx,ecx |
; cmp ecx,0 |
jz sbgrr |
test edx,edx |
; cmp edx,0 |
jz sbgrr |
@@: |
;;Maxis use atomic bts for mutexes 4.4.2009 |
bts dword [bgrlock], 0 |
jnc @f |
call change_task |
jmp @b |
@@: |
mov [BgrDataWidth],ecx |
mov [BgrDataHeight],edx |
; mov [bgrchanged],1 |
|
pushad |
; return memory for old background |
mov eax, [img_background] |
cmp eax, static_background_data |
jz @f |
stdcall kernel_free, eax |
@@: |
; calculate RAW size |
xor eax,eax |
inc eax |
cmp [BgrDataWidth],eax |
jae @f |
mov [BgrDataWidth],eax |
@@: |
cmp [BgrDataHeight],eax |
jae @f |
mov [BgrDataHeight],eax |
@@: |
mov eax,[BgrDataWidth] |
imul eax,[BgrDataHeight] |
lea eax,[eax*3] |
mov [mem_BACKGROUND],eax |
; get memory for new background |
stdcall kernel_alloc, eax |
test eax, eax |
jz .memfailed |
mov [img_background], eax |
jmp .exit |
.memfailed: |
; revert to static monotone data |
mov [img_background], static_background_data |
xor eax, eax |
inc eax |
mov [BgrDataWidth], eax |
mov [BgrDataHeight], eax |
mov [mem_BACKGROUND], 4 |
cmp ebx,6 ; subfns 1..5 do not return anything |
jb .exit |
mov dword [esp+32], 0 ; subfns 6,7 return 0 as error |
.exit: |
popad |
mov [bgrlock], 0 |
|
sbgrr: |
ret |
|
nosb1: |
;=============================== SysFn 39 ================================ |
; no background service supported so far ... |
;=========================================== |
align 4 |
|
cmp ebx,2 ; SET PIXEL |
jnz nosb2 |
|
mov eax, [img_background] |
test ecx, ecx |
jz @f |
cmp eax, static_background_data |
|
jz .ret |
@@: |
mov ebx, [mem_BACKGROUND] |
add ebx, 4095 |
and ebx, -4096 |
sub ebx, 4 |
cmp ecx, ebx |
ja .ret |
|
mov ebx,[eax+ecx] |
and ebx,0xFF000000 ;255*256*256*256 |
and edx,0x00FFFFFF ;255*256*256+255*256+255 |
add edx,ebx |
mov [eax+ecx],edx |
.ret: |
sys_getbackground: |
mov dword [esp+32], 0 |
ret |
nosb2: |
|
cmp ebx,3 ; DRAW BACKGROUND |
jnz nosb3 |
draw_background_temp: |
; cmp [bgrchanged],1 ;0 |
; je nosb31 |
;draw_background_temp: |
; mov [bgrchanged],1 ;0 |
;=========================================== |
|
mov [background_defined], 1 |
mov byte[BACKGROUND_CHANGED], 1 |
call force_redraw_background |
nosb31: |
ret |
nosb3: |
|
cmp ebx,4 ; TILED / STRETCHED |
jnz nosb4 |
cmp ecx,[BgrDrawMode] |
je nosb41 |
mov [BgrDrawMode],ecx |
; mov [bgrchanged],1 |
nosb41: |
ret |
nosb4: |
|
cmp ebx,5 ; BLOCK MOVE TO BGR |
jnz nosb5 |
cmp [img_background], static_background_data |
jnz @f |
test edx, edx |
jnz .fin |
cmp esi, 4 |
ja .fin |
@@: |
; bughere |
mov eax, ecx |
mov ebx, edx |
add ebx, [img_background] ;IMG_BACKGROUND |
mov ecx, esi |
call memmove |
.fin: |
ret |
nosb5: |
|
cmp ebx, 6 |
jnz nosb6 |
;;Maxis use atomic bts for mutex 4.4.2009 |
@@: |
bts dword [bgrlock], 0 |
jnc @f |
call change_task |
jmp @b |
@@: |
mov eax, [CURRENT_TASK] |
mov [bgrlockpid], eax |
cmp [img_background], static_background_data |
jz .nomem |
stdcall user_alloc, [mem_BACKGROUND] |
mov [esp+32], eax |
test eax, eax |
jz .nomem |
mov ebx, eax |
shr ebx, 12 |
or dword [page_tabs+(ebx-1)*4], DONT_FREE_BLOCK |
mov esi, [img_background] |
shr esi, 12 |
mov ecx, [mem_BACKGROUND] |
add ecx, 0xFFF |
shr ecx, 12 |
.z: |
mov eax, [page_tabs+ebx*4] |
test al, 1 |
jz @f |
call free_page |
@@: |
mov eax, [page_tabs+esi*4] |
or al, PG_UW |
mov [page_tabs+ebx*4], eax |
mov eax, ebx |
shl eax, 12 |
invlpg [eax] |
inc ebx |
inc esi |
loop .z |
ret |
.nomem: |
and [bgrlockpid], 0 |
mov [bgrlock], 0 |
nosb6: |
cmp ebx, 7 |
jnz nosb7 |
cmp [bgrlock], 0 |
jz .err |
mov eax, [CURRENT_TASK] |
cmp [bgrlockpid], eax |
jnz .err |
mov eax, ecx |
mov ebx, ecx |
shr eax, 12 |
mov ecx, [page_tabs+(eax-1)*4] |
test cl, USED_BLOCK+DONT_FREE_BLOCK |
jz .err |
jnp .err |
push eax |
shr ecx, 12 |
dec ecx |
@@: |
and dword [page_tabs+eax*4], 0 |
mov edx, eax |
shl edx, 12 |
push eax |
invlpg [edx] |
pop eax |
inc eax |
loop @b |
pop eax |
and dword [page_tabs+(eax-1)*4], not DONT_FREE_BLOCK |
stdcall user_free, ebx |
mov [esp+32], eax |
and [bgrlockpid], 0 |
mov [bgrlock], 0 |
ret |
.err: |
and dword [esp+32], 0 |
ret |
|
nosb7: |
ret |
|
force_redraw_background: |
and [draw_data+32 + RECT.left], 0 |
and [draw_data+32 + RECT.top], 0 |
2382,54 → 2252,9 |
pop ebx eax |
inc byte[REDRAW_BACKGROUND] |
ret |
;=========================================== |
|
align 4 |
|
sys_getbackground: |
; cmp eax,1 ; SIZE |
dec ebx |
jnz nogb1 |
mov eax,[BgrDataWidth] |
shl eax,16 |
mov ax,[BgrDataHeight] |
mov [esp+32],eax |
ret |
|
nogb1: |
; cmp eax,2 ; PIXEL |
dec ebx |
jnz nogb2 |
|
mov eax, [img_background] |
test ecx, ecx |
jz @f |
cmp eax, static_background_data |
jz .ret |
@@: |
mov ebx, [mem_BACKGROUND] |
add ebx, 4095 |
and ebx, -4096 |
sub ebx, 4 |
cmp ecx, ebx |
ja .ret |
|
mov eax,[ecx+eax] |
|
and eax, 0xFFFFFF |
mov [esp+32],eax |
.ret: |
ret |
nogb2: |
|
; cmp eax,4 ; TILED / STRETCHED |
dec ebx |
dec ebx |
jnz nogb4 |
mov eax,[BgrDrawMode] |
nogb4: |
mov [esp+32],eax |
ret |
|
align 4 |
|
sys_getkey: |
2846,26 → 2671,6 |
;--------------------------------------------------------------------------------------------- |
|
|
; check if pixel is allowed to be drawn |
; -- not in use any more ? |
|
;checkpixel: |
; push eax ebx edx |
; shr ebx, 1 |
; mov edx, [_WinMapWidth] ; <<<< |
; imul edx, ebx |
; shr eax, 2 |
; add eax, [_WinMapAddress] |
; mov dl, [eax+edx] |
; |
; xor ecx, ecx |
; mov eax, [CURRENT_TASK] |
; cmp al, dl |
; setne cl |
; |
; pop edx ebx eax |
; ret |
|
iglobal |
cpustring db 'CPU',0 |
endg |
3291,18 → 3096,10 |
|
drawbackground: |
inc [mouse_pause] |
; cmp [BgrDrawMode],dword 1 |
; jne bgrstr |
; call vesa20_drawbackground_tiled |
call drawbackground |
call draw_background ; graph32.inc |
dec [mouse_pause] |
call [draw_pointer] |
ret |
; bgrstr: |
; call vesa20_drawbackground_stretch |
; dec [mouse_pause] |
; call [draw_pointer] |
; ret |
|
; ==================================================================== |
align 4 |
3339,7 → 3136,8 |
inc [mouse_pause] |
call _putimage |
dec [mouse_pause] |
jmp [draw_pointer] |
call [draw_pointer] |
ret |
|
|
align 4 |
3357,12 → 3155,13 |
add dx, word [eax+SLOT_BASE+APPDATA.wnd_clientbox.left] |
rol edx, 16 |
.forced: |
push eax |
push esi |
mov [img_palette], edi |
mov eax, esi |
cmp eax, 32 ;>32bpp (stupid call) |
ja .exit |
shr al, 3 ; 0=1bpp, other lo-pix modes not supported |
push esi |
shr al, 3 ; 0=1bpp or solid color |
mov [img_bytes_per_pix], eax |
mov esi, [eax*4 + img_core_proc_0] |
mov [img_draw_core_fn], esi |
3370,29 → 3169,34 |
mov [img_draw_edge_fn], esi |
mov esi, ecx |
shr esi, 16 ; esi = SizeX |
imul esi, eax |
or al, al |
jz .1bpp |
imul esi, eax |
jmp .done |
jnz .done |
mov eax, [esp] ; bits per pixel |
or al, al |
jz .done |
.1bpp: |
add esi, 7 |
shr esi, 3 ; 8 pixels per byte |
mov [img_draw_edge_fn], draw_edge_1bpp |
mov [img_draw_core_fn], draw_core_1bpp |
.done: |
add esi, ebp ; + line offset |
mov [img_buf_line_size], esi |
pop esi |
jmp _putimage ;<<< sys_putimage_bpp |
pop eax |
jmp sys_putimage_bpp |
.exit: |
ret |
|
align 4 |
img_core_proc_0 dd draw_core_1bpp |
img_core_proc_0 dd draw_core_0bpp |
img_core_proc_1 dd draw_core_8bpp |
img_core_proc_2 dd draw_core_16bpp |
img_core_proc_3 dd draw_core_24bpp |
img_core_proc_4 dd draw_core_32bpp |
|
img_edge_proc_0 dd draw_edge_1bpp |
img_edge_proc_0 dd draw_edge_0bpp |
img_edge_proc_1 dd draw_edge_8bpp |
img_edge_proc_2 dd draw_edge_16bpp |
img_edge_proc_3 dd draw_edge_24bpp |
3414,7 → 3218,7 |
.forced: |
inc [mouse_pause] |
; dbv20: |
call vesa20_drawbar |
call _drawbar |
dec [mouse_pause] |
jmp [draw_pointer] |
|
3517,27 → 3321,25 |
ret |
|
|
setmouse: ; set mousepicture -pointer |
;setmouse: ; set mousepicture -pointer |
; ps2 mouse enable |
|
mov [MOUSE_PICTURE],dword mousepointer |
; mov [MOUSE_PICTURE],dword mousepointer |
; cli |
; ret |
|
cli |
;if used _rdtsc |
;_rdtsc: |
; bt [cpu_caps], CAPS_TSC |
; jnc ret_rdtsc |
; rdtsc |
; ret |
; ret_rdtsc: |
; mov edx,0xffffffff |
; mov eax,0xffffffff |
; ret |
;end if |
|
ret |
|
if used _rdtsc |
_rdtsc: |
bt [cpu_caps], CAPS_TSC |
jnc ret_rdtsc |
rdtsc |
ret |
ret_rdtsc: |
mov edx,0xffffffff |
mov eax,0xffffffff |
ret |
end if |
|
rerouteirqs: |
|
cli |
3667,24 → 3469,6 |
cmp eax, 1 |
jne .smbl1 |
|
if defined debug_com_base |
|
push dx ax |
|
@@: ; Wait for empty transmit register (yes, this slows down system..) |
mov dx, debug_com_base+5 |
in al, dx |
test al, 1 shl 5 |
jz @r |
|
mov dx, debug_com_base ; Output the byte |
mov al, bl |
out dx, al |
|
pop ax dx |
|
end if |
|
mov [msg_board_data+ecx],bl |
inc ecx |
and ecx, 4095 |
3875,16 → 3659,9 |
mov eax, ebx |
mov ebx, ecx |
mov ecx, edx |
mov edx, [TASK_BASE] |
add eax, [edx-twdw+WDATA.box.left] |
add ebx, [edx-twdw+WDATA.box.top] |
mov edi, [current_slot] |
add eax, [edi+APPDATA.wnd_clientbox.left] |
add ebx, [edi+APPDATA.wnd_clientbox.top] |
xor edi, edi ; no force |
; mov edi, 1 |
call [_display.disable_mouse] |
jmp [putpixel] |
; call [_display.disable_mouse] |
jmp __sys_putpixel |
|
align 4 |
|
3966,7 → 3743,7 |
div ecx |
mov ebx, edx |
xchg eax, ebx |
call dword [GETPIXEL] ; eax - x, ebx - y |
call get_pixel ; eax - x, ebx - y |
mov [esp + 32], ecx |
ret |
|
4028,7 → 3805,7 |
push eax ebx ecx |
add eax,ecx |
|
call dword [GETPIXEL] ; eax - x, ebx - y |
call get_pixel ; eax - x, ebx - y |
|
mov [ebp],cx |
shr ecx,16 |
4187,8 → 3964,7 |
stdcall kernel_free, [_WinMapAddress] |
|
mov eax, [_display.width] |
shr eax, 1 |
shr eax, 1 |
shr eax, 2 |
mov [_WinMapWidth], eax |
mov eax, [_display.height] |
shr eax, 1 |
4528,3 → 4304,28 |
uglobals_size = $ - endofcode |
diff16 "Zero-filled blk",0,endofcode |
diff16 "End of kernel ",0,$ |
|
;Êóðãèíÿí - ìàòåìàòèê, è îñíîâíûå ñâîè âûâîäû äåëàåò íà îñíîâå òåîðèè êàòàñòðîô (åñòü òàêàÿ âïîëíå ñåáå ïðèêëàäíàÿ îáëàñòü ìàòåìàòèêè) ñ ýëåìåíòàìè âàðèàöèîííîãî è ôàêòîðíîãî àíàëèçà.  ïðèíöèïå, îí ìîã áû èçëîæèòü ñóòü â 3-4 ñóõèõ ôîðìóëàõ, íî òîëüêî ïîíÿòü èõ ìîãëè (è çàõîòåëè) áû ÷åëîâåê 200-300... |
|
;Âîò è ïðèõîäèòñÿ åìó èçëàãàòü òî æå ñàìîå, íî ãîðàçäî äëèííåå è äîõîä÷èâåå. Ëè÷íî ÿ íå ïîëåíèëñÿ è ïðî÷èòàë öèêë "Êðèçèñ è äðóãèå" â àðõèâå "Çàâòðà" çà 2009 ãîä. |
|
|
;Âîò î÷åíü êðàòêàÿ âûæèìêà åãî îñíîâíûõ èäåé (ñ ìîåé êîëîêîëüíè, êîíå÷íî): |
|
;1) Ïëàíåòà ïåðåíàñåëåíà, ðåñóðñîâ íà âñåõ íå õâàòèò, ïåðèîä ëèáåðàëüíåíêîé ãëîáàëèçàöèè äîëæåí ñìåíèòüñÿ ýðîé æåñòêîãî ðàöèîíèðîâàíèÿ ïðè òîòàëüíîì êîíòðîëå âñåãî. |
|
;2) Ó ãðÿäóùåãî òîòàëèòàðíîãî îáùåñòâà äîëæíà áûòü ãîñïîäñòâóþùàÿ èäåîëîãèÿ, ìîáèëèçóþùàÿ ëþäåé â ñóðîâîé áîðüáå. Êàêîé åé áûòü? äëÿ ýòîãî íàäî îòâåòèòü íà äâà îñíîâíûõ âîïðîñà: à) ìîæíî ëè ñäåëàòü ÷åëîâåêà ëó÷øå, ñèëüíåå, óìíåå? è á) ìîæíî ëè ñäåëàòü îáùåñòâî ëó÷øå, ñïðàâåäëèâåå, ñâîáîäíåå? |
|
;3) ñóùåñòâóåò 4 âîçìîæíûõ îòâåòà íà ýòè 2 âîïðîñà: (à+á+) èñòîðè÷åñêèé ìîäåðí, îí æå êîììóíèçì; (à+á-) àíòèèñòîðè÷åñêèé ìîäåðí, èëè ôàøèçì; (à-á+) ðåëèãèîçíûé ôóíäàìåíòàëèçì, èëè Êîíòðìîäåðí; è íàêîíåö (à-á-) öèíè÷íûé àíòèãóìàíèçì, îí æå Ïîñòìîäåðí. |
|
;4) êðóøåíèå êîììóíèñòè÷åñêîãî ïðîåêòà â XX âåêå áûëî òùàòåëüíî ñïëàíèðîâàííîé êàòàñòðîôîé ñ öåëüþ ïîâîðîòà ÷åëîâå÷åñòâà ñ ìîäåðíèñòñêîãî ïóòè ðàçâèòèÿ íà ïîñòìîäåðíèñòñêèé ïóòü ðàñïàäà. Êóðãèíÿí çäåñü èìååò â âèäó êàòàñòðîôó â ìàòåìàòè÷åñêîì ñìûñëå, ò.å. íå êàêîå-òî ïå÷àëüíîå ñîáûòèå, à ïðîöåññ, ïðèâîäÿùèé ê òàêîìó ñîáûòèþ. ß íå õî÷ó ïåðåñêàçûâàòü çäåñü âñå ïîëîæåíèÿ òåîðèè êàòàñòðîô - âàæíî òîëüêî ïîíèìàòü, ÷òî òàêîé ïðîöåññ âîâñå íå îáÿçàòåëüíî äîëæåí ïðèâîäèòü ê ôàòàëüíîìó èñõîäó - âûõîä èç êàòàñòðîôû âñåãäà ìîæíî íàéòè, âïëîòü äî ñàìîãî ïîñëåäíåãî ìîìåíòà! |
|
;5) êàòèòüñÿ ïî ýòîìó êàòàñòðîôè÷åñêîìó ïóòè ëåãêî, íî íàéòè âûõîä èç êàòàñòðîôû ñ êàæäûì øàãîì âñå ñëîæíåå. ×òîáû èçáåæàòü ôàòàëüíîãî êîíöà, îäíîé ýíåðãèè ìàëî - òðåáóåòñÿ èçðÿäíàÿ ñèëà âîëè. |
|
;6) çäåñü Êóðãèíÿí ïîäêëþ÷àåò äðóãîé ìàòåìàòè÷åñêèé àïïàðàò - òåîðèþ èãð. È ïîêàçûâàåò, êàê øóëåðà - ìàãèñòðû ñëîæíîé êîàëèöèîííî-àíòàãîíèñòè÷åñêîé èãðû óìåþò öåëåíàïðàâëåííî è ýôôåêòèâíî ëèøàòü ïðîòèâíèêîâ âîëè è ñìûñëîâ äëÿ ïîèñêà âûõîäà èç êàòàñòðîôû. |
|
;7) êîíå÷íî, ÷åëîâå÷åñêîå îáùåñòâî - ñëîæíåéøàÿ ñèñòåìà ñ íåïðåäñêàçóåìûì îòêëèêîì íà àêòèíûå äåéñòâèÿ êàæäîãî èç èãðîêîâ. Äàæå îïûòíåéøèé øóëåð ìîæåò çäåñü ñäåëàòü íåâåðíûå õîäû. Íî â ðàñïîðÿæåíèè ìàñòåðîâ èãðû èìååòñÿ åùå îäèí ìîùíûé àïïàðàò - ôàêòîðíûé àíàëèç, ïîçâîëÿþùèé ýôôåêòèâíî êîððåêòèðîâàòü ïðîìàõè è ëó÷øå ïðåäñêàçûâòü ïîâåäåíèå ñëîæíûõ ñèñòåì. |
|
;8) è òåì íå ìåíåå, âûõîä åñòü! Äëÿ íà÷àëà, íàäî ðåàëüíî îñîçíàòü ñâîþ ïîçèöèþ â èãðå è íàâÿçàòü ñâîþ, àêòèâíóþ èãðó (êàæäûé íîâûé àêòèâíûé èãðîê óñëîæíÿåò ïàðòíåðàì àíàëèç èãðû). Ýòî ñëîæíî (ïðîùå áûòü áîëâàíîì), è ýòî òðåáóåò Âîëè è âîññîçäàíèÿ Ñìûñëîâ. |
|
;9) äàæå ñàìàÿ àêòèâíàÿ èãðà áóäåò ïðîñòûì áàðàõòàíüåì, åñëè íå ñòàâèòñÿ êîíå÷íàÿ öåëü. Òàêàÿ öåëü åñòü. Òî÷íåå - áûëà: ïðîåêò (à+á+). Åñëè åå âîññòàíîâèòü, ìû íå ïðîñòî âåðíåìñÿ ê àêòèâíîé èãðå - ìû ìîæåì ñôîðìèðîâàòü ìîùíóþ êîàëèöèþ àíòèïîñòìîäåðíèñòîâ. |