vesa 2.0 in PM

Тема в разделе "WASM.BEGINNERS", создана пользователем Toxasoft, 20 июн 2011.

  1. Toxasoft

    Toxasoft New Member

    Публикаций:
    0
    Регистрация:
    20 сен 2010
    Сообщения:
    188
    Здраствуйте всем...
    я вот пробую переключится на режим веса 112h

    В big real mode всё работает, а в PM ничего не хочет выводить....

    Вот кусок кода посмотрите плиз что не так...
    Код (Text):
    1. use 16
    2.         push cs
    3.         pop es
    4. ; Получаем информацию о режиме
    5.     mov ax,4F01h
    6.     mov cx,4112h
    7.     mov edi, Info_Buffer
    8.     int 10h
    9. ; Записываем физический адрес начала LFB
    10.     push  dword  [Info_Buffer+028h]
    11.     pop [LFB]
    12. ; Устанавливаем режим
    13.     mov ax,4F02h
    14.     mov bx,4112h
    15.     int 10h
    16.  
    17.  
    18.  
    19. use 32
    20.     mov [X_scr],640
    21.     mov [Pos_X],100
    22.     mov [Pos_Y],100
    23.     mov [Cr_Red],255
    24.     mov [Cr_Blue],0
    25.     mov [Cr_Green],0
    26.     mov [Cr_Alpha],0
    27.     call    pset32bit
    28.         jmp $
    29. pset32bit   :
    30.     pusha
    31.     mov eax,[Pos_Y]
    32.     mov ebx,[X_scr]
    33.     imul    eax,ebx
    34.     imul    eax,4
    35.     mov ebx,[Pos_X]
    36.     imul    ebx,4
    37.     add eax,ebx
    38.     xor ecx,ecx
    39.     xor ebx,ebx
    40.     mov cl,[Cr_Blue]
    41.     mov ch,[Cr_Green]
    42.     mov bl,[Cr_Red]
    43.     mov bh,[Cr_Alpha]
    44.         mov esi,[LFB]
    45.     mov byte  [ds:esi+eax],cl
    46.     inc eax
    47.     mov byte  [ds:esi+eax],ch
    48.     inc eax
    49.     mov byte  [ds:esi+eax],bl
    50.     inc eax
    51.     mov byte  [ds:esi+eax],bh
    52.     popa
    53.     ret
    54.  
    55. Pos_X           dd  0   ; Координата X точки
    56. Pos_Y           dd  0   ; Координата Y точки
    57. X_scr           dd  0   ; Разрешение по X
    58. Cr_Red      db  0   ; Красная компонента
    59. Cr_Green        db  0   ; Зелёная компонента
    60. Cr_Blue     db  0   ; Синяя компонента
    61. Cr_Alpha        db  0   ; Альфа
    62. Info_Buffer     db  256 dup(0)  ; Буфер для информации о режиме
     
  2. pashe4ka13

    pashe4ka13 New Member

    Публикаций:
    0
    Регистрация:
    4 окт 2010
    Сообщения:
    263
    Toxasoft
    Вот тебе рабочий пример:сначала включаемый фаил vesainfo.inc
    Код (Text):
    1. ;=========================================================;
    2. ; Vesa Information Block                         11/12/03 ;
    3. ;---------------------------------------------------------;
    4. ; DOS EXTREME OS V0.01 (DexOS)                            ;
    5. ;                                                         ;
    6. ;                                                         ;                                                  
    7. ;=========================================================;
    8.  
    9. ;-------------------------------- FASM VESA INFORMATION BLOCK -----------------------------------
    10.  
    11. VESA_Info:      
    12. VESAInfo_Signature      rb   4      ; VBE Signature
    13. VESAInfo_Version      rw   1      ; VBE Version
    14. VESAInfo_OEMStringPtr      rd   1      ; VbeFarPtr to OEM String
    15. VESAInfo_Capabilities      rb   4      ; Capabilities of graphics controller
    16. VESAInfo_VideoModePtr      rd   1      ; VbeFarPtr to VideoModeList
    17. VESAInfo_TotalMemory      rw   1      ; Number of 64kb memory blocks
    18. VESAInfo_OEMSoftwareRev      rw   1      ; VBE implementation Software revision
    19. VESAInfo_OEMVendorNamePtr   rd   1      ; VbeFarPtr to Vendor Name String
    20. VESAInfo_OEMProductNamePtr   rd   1      ; VbeFarPtr to Product Name String
    21. VESAInfo_OEMProductRevPtr   rd   1      ; VbeFarPtr to Product Revision String
    22. VESAInfo_Reserved      rb   222    ; Reserved for VBE implementation scratch area
    23. VESAInfo_OEMData      rb   256    ; Data Area for OEM Strings
    24.  
    25. ;============================== VESA MODE INFORMATION ===========================================
    26.  
    27. Mode_Info:      
    28. ModeInfo_ModeAttributes      rw   1      ; mode attributes
    29. ModeInfo_WinAAttributes      rb   1      ; window A attributes
    30. ModeInfo_WinBAttributes      rb   1      ; window B attributes
    31. ModeInfo_WinGranularity      rw   1      ; window granularity
    32. ModeInfo_WinSize      rw   1      ; window size
    33. ModeInfo_WinASegment      rw   1      ; window A start segment
    34. ModeInfo_WinBSegment      rw   1      ; window B start segment
    35. ModeInfo_WinFuncPtr      rd   1      ; real mode pointer to window function
    36. ModeInfo_BytesPerScanLine   rw   1      ; bytes per scan line
    37. ModeInfo_XResolution      rw   1      ; horizontal resolution in pixels or characters
    38. ModeInfo_YResolution      rw   1      ; vertical resolution in pixels or characters
    39. ModeInfo_XCharSize      rb   1      ; character cell width in pixels
    40. ModeInfo_YCharSize      rb   1      ; character cell height in pixels
    41. ModeInfo_NumberOfPlanes      rb   1      ; number of memory planes
    42. ModeInfo_BitsPerPixel      rb   1      ; bits per pixel
    43. ModeInfo_NumberOfBanks      rb   1      ; number of banks
    44. ModeInfo_MemoryModel      rb   1      ; memory model type
    45. ModeInfo_BankSize      rb   1      ; bank size in KB
    46. ModeInfo_NumberOfImagePages   rb   1      ; number of images
    47. ModeInfo_Reserved_page      rb   1      ; reserved for page function
    48. ModeInfo_RedMaskSize      rb   1      ; size of direct color red mask in bits
    49. ModeInfo_RedMaskPos      rb   1      ; bit position of lsb of red mask
    50. ModeInfo_GreenMaskSize      rb   1      ; size of direct color green mask in bits
    51. ModeInfo_GreenMaskPos      rb   1      ; bit position of lsb of green mask
    52. ModeInfo_BlueMaskSize      rb   1      ; size of direct color blue mask in bits
    53. ModeInfo_BlueMaskPos      rb   1      ; bit position of lsb of blue mask
    54. ModeInfo_ReservedMaskSize   rb   1      ; size of direct color reserved mask in bits
    55. ModeInfo_ReservedMaskPos   rb   1      ; bit position of lsb of reserved mask
    56. ModeInfo_DirectColorModeInfo   rb   1      ; direct color mode attributes
    57. ; VBE 2.0 extensions
    58. ModeInfo_PhysBasePtr      rd   1      ; *physical address for flat memory frame buffer*
    59. ModeInfo_OffScreenMemOffset   rd   1      ; Reserved - always set to 0
    60. ModeInfo_OffScreenMemSize   rw   1      ; Reserved - always set to 0
    61. ; VBE 3.0 extensions
    62. ModeInfo_LinBytesPerScanLine   rw   1      ; bytes per scan line for linear modes
    63. ModeInfo_BnkNumberOfPages   rb   1      ; number of images for banked modes
    64. ModeInfo_LinNumberOfPages   rb   1      ; number of images for linear modes
    65. ModeInfo_LinRedMaskSize      rb   1      ; size of direct color red mask (linear modes)
    66. ModeInfo_LinRedFieldPos      rb   1      ; bit position of lsb of red mask (linear modes)
    67. ModeInfo_LinGreenMaskSize   rb   1      ; size of direct color green mask (linear modes)
    68. ModeInfo_LinGreenFieldPos   rb   1      ; bit position of lsb of green mask (linear modes)
    69. ModeInfo_LinBlueMaskSize   rb   1      ; size of direct color blue mask (linear modes)
    70. ModeInfo_LinBlueFieldPos   rb   1      ; bit position of lsb of blue mask (linear modes)
    71. ModeInfo_LinRsvdMaskSize   rb   1      ; size of direct color reserved mask (linear modes)
    72. ModeInfo_LinRsvdFieldPos   rb   1      ; bit position of lsb of reserved mask (linear modes)
    73. ModeInfo_MaxPixelClock      rd   1      ; maximum pixel clock (in Hz) for graphics mode
    74. ; Reserved
    75. ModeInfo_Reserved      rb   190    ; remainder of ModeInfoBlock
    76. ;======================================= START OF PROGRAM  ======================================
    теперь код:
    Код (Text):
    1. format MZ
    2.     use16
    3.     jmp   start
    4.     header equ [ModeInfo_PhysBasePtr]
    5.     linear_sel equ  linear_sel_1-gdt
    6.     sys_code   equ  sys_code_1-gdt
    7.     sys_data   equ  sys_data_1-gdt   
    8.     Real_code  equ  Real_code_1-gdt
    9.     Real_data  equ  Real_data_1-gdt
    10.    
    11.     include 'F:\FASM\vesainfo.inc'          ; VESA information block,we need the for Vesa info
    12.    
    13.  
    14. ;'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''';
    15. ;                              This sets vesa info                                             ;
    16. ;..............................................................................................;
    17. start:
    18.     push  cs
    19.     pop   ds
    20.     mov   ax,ds
    21.     mov   es,ax
    22.     ;------------------------------------------------------------
    23.     ; Purpose: Checks to see if VESA is available and if the desired mode is
    24.     ; available.
    25.     ; Inputs:  None
    26.     ; Outputs: VESAInfo and VESA_Info structures filled (if successful)
    27.     ;------------------------------------------------------------
    28.     mov   dword [VESAInfo_Signature],'VBE2'
    29.     mov   ax,4f00h                 ; Is Vesa installed ?                      
    30.     mov   di,VESA_Info             ; This is the address of how info block.
    31.     int   10h
    32.  
    33.     cmp   ax,004Fh                 ; Is vesa installed ?,
    34.     jne   near NoVesa2             ; If not print a mesage & quit.
    35.  
    36.     mov   ax,4f01h                 ; Get Vesa Mode information.
    37.     mov   di,Mode_Info             ; This is the address of how info block.
    38.     mov   cx,0x4105 ;0x4112                        ; 4112h = 32/24bit ; 0x4101 = 256bit ;4111h = 65535bit (640*480)
    39.     and   cx,0xfff
    40.     int   10h
    41.  
    42.     cmp   dword [VESAInfo_Signature], 'VESA'
    43.     jne   near NoVesa2
    44.    
    45.     cmp   byte [VESAInfo_Version+1], 2
    46.     jb    NoVesa2                  ; VESA version below 2.0
    47.  
    48.     mov   ax,4f02h                 ; set vesa screen mode
    49.     mov   bx,0x4105                ; 4101h = 640x480 256
    50.     int   10h
    51.  
    52.     cmp   ax,004Fh
    53.     jne   NoVesa2                  ; jump if no vesa 2
    54. ;'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''';
    55. ;                               This sets up going into pmode                                  ;
    56. ;..............................................................................................;
    57.     call  enable_A20
    58.     xor   ebx,ebx
    59.     mov   bx,ds                ; BX=segment
    60.     shl   ebx,4                ; BX="linear" address of segment base
    61.     mov   eax,ebx
    62.     mov   [sys_code_1 + 2],ax          ; set base address of 32-bit segments
    63.     mov   [sys_data_1 + 2],ax
    64.     mov   [Real_code_1 + 2],ax         ; set base address of 16-bit segments
    65.     mov   [Real_data_1 + 2],ax
    66.     shr   eax,16
    67.     mov   [sys_code_1 + 4],al
    68.     mov   [sys_data_1 + 4],al
    69.     mov   [Real_code_1 + 4],al
    70.     mov   [Real_data_1 + 4],al
    71.  
    72.     mov   [sys_code_1 + 7],ah
    73.     mov   [sys_data_1 + 7],ah
    74.     mov   [Real_code_1 + 7],ah
    75.     mov   [Real_data_1 + 7],ah
    76.  
    77.     add   ebx,gdt                  ; EBX=linear address of gdt
    78.     mov   [gdtr + 2],ebx
    79.    
    80.     cli                    ; Disable interrupts,
    81.     mov   ax,cs
    82.     mov   [RealModeCS],ax
    83.     lgdt  [gdtr]                   ; Load the GDT descriptor
    84.  
    85.     mov   eax, cr0                 ; Copy the contents of CR0 into EAX
    86.     or    eax, 1                   ; Set bit 0
    87.     mov   cr0, eax                 ; Copy the contents of EAX into CR0
    88.  
    89.     jmp   10h:clear_pipe               ; Jump to code segment, offset clear_pipe
    90.  
    91. NoVesa2:
    92.     mov   ax,0xB800
    93.     mov   es,ax
    94.     lea  si,[NoVesa2Msg]            ; Just print's a error mesage and end's.
    95.     mov  di,(80 * 5 + 6) * 2     
    96.     mov  cx,58
    97.     cld
    98.     rep movsb
    99.  
    100. NoVesa2End:
    101.     jmp   NoVesa2End  
    102. USE32                          ; We now need 32-bit instructions
    103. clear_pipe:
    104.  
    105. ;'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''';
    106. ;                                    We are in pmode                                           ;
    107. ;..............................................................................................;
    108.  
    109.        xor   edi,edi
    110.        xor   esi,esi
    111.        mov   ax, 18h                   ; Save data segment identifyer
    112.        mov   ds, ax                ; Move a valid data segment into the data segment register
    113.        mov   ss, ax                ; Move a valid data segment into the stack segment register
    114.        mov   es,ax
    115.        nop
    116.        mov   es,ax
    117.        mov   fs,ax
    118.        mov   gs,ax
    119.    
    120.        
    121.      
    122. mainloop:
    123.        call  Fdd_motor_off
    124.        call  DisplayBMP
    125.        jmp   $
    126.  
    127. ;**********************************************************************************************;
    128. ;                                      Procedure's                                             ;
    129. ;**********************************************************************************************;
    130.  
    131. ;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::;
    132. ;                                     load image to screen                                     ;
    133. ;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::;
    134.  ;----------------------------------------------------;
    135.  ; Check valid bmp.                                   ;
    136.  ;----------------------------------------------------;
    137. DisplayBMP:
    138.     mov   esi,LoadMeHere
    139.     cmp   word [ds:esi],'BM'   
    140.     jnz   bmp_error
    141.     mov   bx,[ds:esi + 18]                ; picture width 12
    142.     mov   ebp,[ds:esi + 22]               ; picture depth 16
    143.     cmp   bx,1024                      ; W
    144.     ja    bmp_error
    145.     cmp   ebp,768                     ; H
    146.     ja    bmp_error
    147.     cmp   word [ds:esi + 28],8            ; bits per pixel
    148.     jnz   bmp_error
    149.  
    150.  ;----------------------------------------------------;
    151.  ; Set pal.                                           ;
    152.  ;----------------------------------------------------;
    153.     add   esi,0x36                    ; start of palette
    154.     xor   ecx,ecx
    155.     mov   cx,256                      ; number of colors
    156.     mov   dx,0x03c8
    157.     mov   al,0
    158.     out   dx,al
    159.     inc   dx
    160.  
    161. set_pal:                          ; Convert 4 byte BGR -> 3 byte RGB
    162.     mov   al,[esi+2]                  ; red
    163.     shr   al,2
    164.     out   dx,al
    165.     mov   al,[esi+1]                  ; green
    166.     shr   al,2
    167.     out   dx,al
    168.     mov   al,[esi]                    ; blue
    169.     shr   al,2
    170.     out   dx,al
    171.     add   esi,4
    172.     loop  set_pal
    173.  
    174.     lea   dx,[bx+3]                   ; round bmp width
    175.     and   dx,-4
    176.     imul  edi,ebp,1024
    177.     add   edi,[ModeInfo_PhysBasePtr]
    178.     mov   ax,08h
    179.     mov   es,ax
    180.     add   edi,1024
    181. new_line:
    182.     sub   edi,1024
    183.     pushad
    184.     mov   cx,bx                   ; columns
    185.     rep   movsb
    186.     popad
    187.     add   esi,edx                     ; start of next bmp line
    188.     dec   ebp
    189.     jnz   new_line
    190.     jmp   @f
    191.  ;----------------------------------------------------;
    192.  ; Error message.                                     ;
    193.  ;----------------------------------------------------;
    194. bmp_error:
    195.  ;----------------------------------------------------;
    196.  ; wait for key press                                 ;
    197.  ;----------------------------------------------------;
    198. @@:
    199.     ret
    200.  
    201. ;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::;
    202. ;                                     enable  A20 line                                         ;
    203. ;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::;
    204.  
    205. enable_A20:
    206.     pusha
    207.     cli                    ; Disable all irqs
    208.     cld
    209.     mov   al,255                   ; Mask all irqs
    210.     out   0xa1,al
    211.     out   0x21,al
    212. l.5:    in    al,0x64                  ; Enable A20
    213.     test  al,2                 ; Test the buffer full flag
    214.     jnz   l.5                  ; Loop until buffer is empty
    215.     mov   al,0xD1                  ; Keyboard: write to output port
    216.     out   0x64,al                  ; Output command to keyboard
    217. l.6:    in    al,0x64                  
    218.     test  al,2
    219.     jnz   l.6                  ; Wait 'till buffer is empty again
    220.     mov   al,0xDF                  ; keyboard: set A20
    221.     out   0x60,al                  ; Send it to the keyboard controller
    222.     mov   cx,14h
    223. l.7:                           ; this is approx. a 25uS delay to wait
    224.     out   0edh,ax                  ; for the kb controler to execute our
    225.     loop  l.7                  ; command.
    226.     sti
    227.     popa
    228.     ret
    229.  
    230.  
    231.  
    232. ;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::;
    233. ;                                   Turn floppy motor off.                                     ;
    234. ;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::;
    235.  
    236. Fdd_motor_off:
    237.     mov   dx,0x3f2                 
    238.     mov   al,0
    239.     out   dx,al
    240.     ret
    241.  
    242.  
    243. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    244. ;                                         Proc End                                             ;
    245. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    246. NoVesa2Msg:   db "Y O U   N E E D   V E S A 2   F O R   T H I S   D E M O !  "
    247.  
    248. JustInCase:
    249.      dd 0
    250. RealModeCS:
    251.      dw 0
    252.  
    253. ridtr:   dw 0xFFFF              ; limit=0xFFFF
    254.      dd 0                   ; base=0
    255.  
    256. count1:  dw 0
    257.  
    258. count:   db 0
    259. ;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::;
    260. ;                                          GDT                                                 ;
    261. ;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::;  
    262. gdtr:   dw gdt_end - gdt - 1           ; GDT limit
    263.     dd gdt                 ; (GDT base gets set above)
    264.  
    265. gdt:                       ; Address for the gdt
    266.     dw 0                   ; limit 15:0    (0h) Null Segment
    267.     dw 0                   ; base 15:0
    268.     db 0                   ; base 23:16
    269.     db 0                   ; type
    270.     db 0                   ; limit 19:16, flags
    271.     db 0                   ; base 31:24
    272.  
    273. linear_sel_1:  
    274.        dw 0xFFFF               ; (8h) linear Data segment, read/write, expand down
    275.        dw 0                    
    276.        db 0
    277.        db 10010010b                
    278.        db 11001111b              
    279.        db 0
    280.  
    281. sys_code_1:                ; (10h) Code segment, read/execute, nonconforming
    282.        dw 0FFFFh
    283.        dw 0
    284.        db 0
    285.        db 10011010b
    286.        db 11001111b
    287.        db 0
    288.  
    289. sys_data_1:                ; (18h) Data segment, read/write, expand down
    290.        dw 0FFFFh
    291.        dw 0
    292.        db 0
    293.        db 10010010b
    294.        db 11001111b
    295.        db 0
    296.  
    297. Real_code_1:                   ; (20h) Real mode code segment
    298.        dw 0xFFFF
    299.        dw 0                      
    300.        db 0
    301.        db 10011010b                      
    302.        db 0                      
    303.        db 0
    304.  
    305. Real_data_1:                   ; (28h) Real mode data segment
    306.        dw 0xFFFF
    307.        dw 0                      
    308.        db 0
    309.        db 10010010b                      
    310.        db 0                      
    311.        db 0
    312.  
    313. gdt_end:                   ; Used to calculate the size of the GDT
    314.  
    315.  
    316. LoadMeHere:
    317. file  'test.bmp'
    test.bmp любая картинка 640х480х256
     
  3. Toxasoft

    Toxasoft New Member

    Публикаций:
    0
    Регистрация:
    20 сен 2010
    Сообщения:
    188
    pashe4ka13 Огромное спасибо за пример... Очень помог.
    Но, я не пойму что делает єтот код:
    Код (Text):
    1. add   esi,0x36                      ; start of palette
    2.     xor   ecx,ecx
    3.     mov   cx,256                      ; number of colors
    4.     mov   dx,0x03c8
    5.     mov   al,0
    6.     out   dx,al
    7.     inc   dx
    8.  
    9. set_pal:                          ; Convert 4 byte BGR -> 3 byte RGB
    10.     mov   al,[esi+2]                  ; red
    11.     shr   al,2
    12.     out   dx,al
    13.     mov   al,[esi+1]                  ; green
    14.     shr   al,2
    15.     out   dx,al
    16.     mov   al,[esi]                      ; blue
    17.     shr   al,2
    18.     out   dx,al
    19.     add   esi,4
    20.     loop  set_pal
     
  4. Toxasoft

    Toxasoft New Member

    Публикаций:
    0
    Регистрация:
    20 сен 2010
    Сообщения:
    188
    И зачем отключать флопик?
     
  5. FatMoon

    FatMoon New Member

    Публикаций:
    0
    Регистрация:
    28 ноя 2002
    Сообщения:
    954
    Адрес:
    Russia
    очевидно, устанавливает сохраненную в bmp-формате палитру как текущую?

    Ну, bmp-формат, заголовок, палитра, потом собственно 256-цветный битмап. Значит сначала надо выставить 256 цветов соответственно палитре, потом битмап в память. Можно сначала битмап в память, потом подождать клавиши (чтоб оценить ЧТО именно делает этот код) и установить палитру. Конечный результат должен быть одинаковым.

    а флопик выключать, потому что пример заканчивается вечным циклом - а грузится, очевидно, с флопика... экономия ресурса износа, не?
     
  6. Toxasoft

    Toxasoft New Member

    Публикаций:
    0
    Регистрация:
    20 сен 2010
    Сообщения:
    188
    Єто всё хорошо, но пример демонстрирует(должен) работу в графическом режиме веса, а не экономию электроэнергии путём отключения флопика....=)
     
  7. pashe4ka13

    pashe4ka13 New Member

    Публикаций:
    0
    Регистрация:
    4 окт 2010
    Сообщения:
    263
    Не экономию электроэнергии, а FatMoon
    прав, экономия ресурсов износа. Я хотел написать небольшие ремарки вам, но я опаздывал на работу.
     
  8. Toxasoft

    Toxasoft New Member

    Публикаций:
    0
    Регистрация:
    20 сен 2010
    Сообщения:
    188
    Спасибо, но в єтом нет необходимости я почти разобрался...
     
  9. Toxasoft

    Toxasoft New Member

    Публикаций:
    0
    Регистрация:
    20 сен 2010
    Сообщения:
    188
    Привет всем... извините, я наверное всех задолбал своими вопросами.... Но всё же есть у меня проблема:
    Я разобрался с РМ и с Vesa , но тут у мня возник ступор....
    Схема такая:
    Установить видео режим
    перейти в РМ
    перепрограмировать контролер прерываний
    запустить прерывания

    Но когда запускаю прерывания и пытаюсь вывести точку то настает пипец, хотя все по отдельности пашет(прерывания и видео режим Vesa)...
    В чем может біть проблема?
     
  10. dinoweb

    dinoweb Дмитрий

    Публикаций:
    0
    Регистрация:
    12 окт 2005
    Сообщения:
    129
    Адрес:
    Россия. Красноярск
    А разве вот этот код не должен быть 32-битным?
    Код (Text):
    1. KBDIRQ:
    2. push eax
    3.     in   al, 060h
    4. pop eax
    5. int_EOI:
    6.     push eax
    7.     mov  al, 20h
    8.     out  020h, al
    9.     out  0a0h, al
    10.     pop  eax
    11.     iretd
    Он подключается из kernel.asm, и перед ним написано use16.
    Указывайте явно битность кода во всех файлах.
    А так получается что у вас вместо push eax, - push ax.
    Но самое страшное происходит во время выполнения iretd, которая превращается в iretw.

    Да ещё вы посылаете EOI в оба контроллера для всех прерываний.
    И обратите внимание на стек. Где он у вас? В 32-битном режиме он должен быть выровнен на 32-бита. А вы его не меняете, и не проверяете.
     
  11. Toxasoft

    Toxasoft New Member

    Публикаций:
    0
    Регистрация:
    20 сен 2010
    Сообщения:
    188
    хоть это типа и ошибка, нет разницы т.к всеравно используется только al...

    Ето не играет роли т.к в текстовом режиме всеравно работало....

    Это кажеться тоже не имеет роли т,к когда не включаю прерывания то работает
     
  12. dinoweb

    dinoweb Дмитрий

    Публикаций:
    0
    Регистрация:
    12 окт 2005
    Сообщения:
    129
    Адрес:
    Россия. Красноярск
    для iretd - есть разница! :). причём эта разница может не вылазить, когда процессор не выполняет другой код в этоже время
    установите битность кода и проверьте.

    На виртуалке всё проверяете? А пробовали на голом железе?
     
  13. Toxasoft

    Toxasoft New Member

    Публикаций:
    0
    Регистрация:
    20 сен 2010
    Сообщения:
    188
    dinoweb
    битность сменил. Пробовал: на реальном железе, не работает...А на VirtualBox работает, на Boch не работает